2002-06-05 Timo Schulz <ts@winpt.org>
authorTimo Schulz <twoaday@freakmail.de>
Wed, 5 Jun 2002 18:10:20 +0000 (18:10 +0000)
committerTimo Schulz <twoaday@freakmail.de>
Wed, 5 Jun 2002 18:10:20 +0000 (18:10 +0000)
        * cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt):
        Check that the input size is a multiple of the blocksize.

cipher/ChangeLog
cipher/cipher.c

index 19fbd28..f3381d9 100644 (file)
@@ -1,3 +1,8 @@
+2002-06-05  Timo Schulz  <ts@winpt.org>
+
+       * cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt):
+       Check that the input size is a multiple of the blocksize.
+       
 2002-05-21  Werner Koch  <wk@gnupg.org>
 
        * primegen.c, elgamal.c, dsa.c (progress): Do not print anything
index 2c45f4b..a5e0506 100644 (file)
@@ -842,9 +842,11 @@ gcry_cipher_encrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
     else {
        if ( outsize < inlen )
            return set_lasterr ( GCRYERR_TOO_SHORT );
-       /* fixme: check that the inlength is a multipe of the blocksize
-        * if a blockoriented mode is used, or modify cipher_encrypt to
-        * return an error in this case */
+        if ( ( h->mode == GCRY_CIPHER_MODE_ECB ||
+               h->mode == GCRY_CIPHER_MODE_CBC ) &&
+             (inlen % h->blocksize) != 0 )
+            return set_lasterr( GCRYERR_INV_ARG );
+        
        rc = cipher_encrypt ( h, out, in, inlen );
     }
 
@@ -912,9 +914,11 @@ gcry_cipher_decrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
     else {
        if( outsize < inlen )
            return set_lasterr( GCRYERR_TOO_SHORT );
-       /* fixme: check that the inlength is a multipe of the blocksize
-        * if a blockoriented mode is used, or modify cipher_encrypt to
-        * return an error in this case */
+        if ( ( h->mode == GCRY_CIPHER_MODE_ECB ||
+               h->mode == GCRY_CIPHER_MODE_CBC )
+             && ( inlen % h->blocksize ) != 0 )
+            return set_lasterr( GCRYERR_INV_ARG );
+
        rc = cipher_decrypt( h, out, in, inlen );
     }
     return rc? set_lasterr (rc):0;