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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: kettler at gmx dot net
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2025 The PHP Group
All rights reserved.
Last updated: Wed May 07 09:01:27 2025 UTC