diff options
-rw-r--r-- | ACKS | 1 | ||||
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/DES3.c | 9 |
3 files changed, 10 insertions, 5 deletions
@@ -11,6 +11,7 @@ Tim Berners-Lee Antoon Bosselaers Andrea Bottoni Andrew Eland +Philippe Frycia Peter Gutmann Hirendra Hindocha Nikhil Jhingan @@ -30,7 +30,10 @@ * If the GNU GMP library is available, two C extensions will be compiled to speed up RSA and DSA operations. (Contributed by Paul Swartz.) - + + * DES3 with a 24-byte key was broken; now fixed. + (Patch by Philippe Frycia.) + 1.9alpha4 ========= @@ -662,7 +662,7 @@ static const unsigned char odd_parity[256]={ static void block_init(block_state *self, unsigned char *key, int keylength) { - char oddkey[16]; + char oddkey[24]; int i; if (keylength != 16 && keylength != 24) { @@ -671,16 +671,17 @@ static void block_init(block_state *self, unsigned char *key, return; } - for (i=0; i<16; i++) + for (i=0; i<keylength; i++) { oddkey[i]=odd_parity[ key[i] ]; } des_set_key((des_cblock *)(oddkey+0), self->KeySched1); des_set_key((des_cblock *)(oddkey+8), self->KeySched2); if (keylength == 24) { - des_set_key((des_cblock *)key+16, self->KeySched3); + des_set_key((des_cblock *)(oddkey+16), self->KeySched3); } else { - memcpy(self->KeySched3, self->KeySched1, sizeof(self->KeySched3)); + memcpy(self->KeySched3, self->KeySched1, + sizeof(self->KeySched3)); } } |