php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #10518 mcrypt_generic is padding input when using cfb and ofb modes
Submitted: 2001-04-26 18:28 UTC Modified: 2001-05-01 03:09 UTC
From: kettler at gmx dot net Assigned: derick (profile)
Status: Closed Package: mcrypt related
PHP Version: 4.0.4pl1 OS: Mandrake 7.2, Linux 2.2.19ow1
Private report: No CVE-ID: None
 [2001-04-26 18:28 UTC] kettler at gmx dot net
When encrypting using a block cipher and cfb or ofb mode the mcrypt_generic/mdecrypt_generic function
still pad the input to a multiple of the underlying algorithm's block size. Input should not be padded when used with 
cfb or ofb mode.


Script showing the bug:

$key   = pack("H*", "0000000000000000000000000000000000000000000000000000000000000000");
$iv    = pack("H*", "00000000000000000000000000000000");
$plain = pack("H*", "0000000000000000");
$handle = mcrypt_module_open(MCRYPT_TWOFISH, "", MCRYPT_MODE_CFB, "");
mcrypt_generic_init($handle, $key, $iv);
$crypted = mcrypt_generic($handle, $plain);
mcrypt_generic_end($handle);
print bin2hex($plain)."\n\n";
print bin2hex($crypted)."\n\n";


Proposed patch:

--- mcrypt/mcrypt.c     Wed Nov 22 22:40:15 2000
+++ mcrypt-sk/mcrypt.c  Fri Apr 27 00:25:16 2001
@@ -498,7 +498,7 @@
        convert_to_string_ex (data);
 
        /* Check blocksize */
-       if (mcrypt_enc_is_block_algorithm (td) == 1) { /* It's a block algorithm */
+       if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
                block_size = mcrypt_enc_get_block_size (td);
                data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
                data_s = emalloc (data_size);
@@ -539,7 +539,7 @@
        convert_to_string_ex (data);
 
        /* Check blocksize */
-       if (mcrypt_enc_is_block_algorithm (td) == 1) { /* It's a block algorithm */
+       if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
                block_size = mcrypt_enc_get_block_size (td);
                data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
                data_s = emalloc (data_size);

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-04-26 19:39 UTC] derick@php.net
thx, will look into this soon
 [2001-04-28 12:39 UTC] kettler at gmx dot net
Same bug also in php_mcrypt_do_crypt, here's the new patch:

--- php-4.0.4pl1/ext/mcrypt/mcrypt.c    Wed Nov 22 22:40:15 2000
+++ php-4.0.4pl1-sk/ext/mcrypt/mcrypt.c Sat Apr 28 18:44:09 2001
@@ -498,7 +498,7 @@
        convert_to_string_ex (data);
 
        /* Check blocksize */
-       if (mcrypt_enc_is_block_algorithm (td) == 1) { /* It's a block algorithm */
+       if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
                block_size = mcrypt_enc_get_block_size (td);
                data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
                data_s = emalloc (data_size);
@@ -539,7 +539,7 @@
        convert_to_string_ex (data);
 
        /* Check blocksize */
-       if (mcrypt_enc_is_block_algorithm (td) == 1) { /* It's a block algorithm */
+       if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
                block_size = mcrypt_enc_get_block_size (td);
                data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
                data_s = emalloc (data_size);
@@ -1280,7 +1280,7 @@
        }
 
        /* Check blocksize */
-       if (mcrypt_enc_is_block_algorithm (td) == 1) { /* It's a block algorithm */
+       if (mcrypt_enc_is_block_mode (td) == 1) { /* It's a block algorithm */
                block_size = mcrypt_enc_get_block_size (td);
                data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
                data_s = emalloc (data_size);
 [2001-05-01 03:09 UTC] derick@php.net
I applied your fix in CVS. Thanks!
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Apr 23 12:01:31 2024 UTC