summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ACKS1
-rw-r--r--ChangeLog5
-rw-r--r--src/DES3.c9
3 files changed, 10 insertions, 5 deletions
diff --git a/ACKS b/ACKS
index 6460c55..db1582d 100644
--- a/ACKS
+++ b/ACKS
@@ -11,6 +11,7 @@ Tim Berners-Lee
Antoon Bosselaers
Andrea Bottoni
Andrew Eland
+Philippe Frycia
Peter Gutmann
Hirendra Hindocha
Nikhil Jhingan
diff --git a/ChangeLog b/ChangeLog
index 7f520a5..11c3e92 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
=========
diff --git a/src/DES3.c b/src/DES3.c
index 3b5f6fd..49bf6f4 100644
--- a/src/DES3.c
+++ b/src/DES3.c
@@ -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));
}
}