Fix AES IOV decryption of small messages
authorGreg Hudson <ghudson@mit.edu>
Tue, 1 Dec 2009 01:36:42 +0000 (01:36 +0000)
committerGreg Hudson <ghudson@mit.edu>
Tue, 1 Dec 2009 01:36:42 +0000 (01:36 +0000)
AES messages never need to be padded because the confounder ensures
that the plaintext is at least one block long.  Remove a check in
krb5int_dk_decrypt_iov which was rejecting short AES messages because
it didn't count the header length.

ticket: 6589
tags: pullup
target_version: 1.7.1

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23397 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/crypto/krb/dk/dk_aead.c

index e5cdd96d235c36708371ac4c68cecea5b2dac060..1801a7300ca5cad2d1974acb301255e07f306c99 100644 (file)
@@ -216,20 +216,15 @@ krb5int_dk_decrypt_iov(const struct krb5_aead_provider *aead,
     if (ret != 0)
         return ret;
 
-    for (i = 0; i < num_data; i++) {
-        const krb5_crypto_iov *iov = &data[i];
-
-        if (ENCRYPT_DATA_IOV(iov))
-            cipherlen += iov->data.length;
-    }
+    if (blocksize != 0) {
+        /* Check that the input data is correctly padded. */
+        for (i = 0; i < num_data; i++) {
+            const krb5_crypto_iov *iov = &data[i];
 
-    if (blocksize == 0) {
-        /* Check for correct input length in CTS mode */
-        if (enc->block_size != 0 && cipherlen < enc->block_size)
-            return KRB5_BAD_MSIZE;
-    } else {
-        /* Check that the input data is correctly padded */
-        if ((cipherlen % blocksize) != 0)
+            if (ENCRYPT_DATA_IOV(iov))
+                cipherlen += iov->data.length;
+        }
+        if (cipherlen % blocksize != 0)
             return KRB5_BAD_MSIZE;
     }