From e4e3ed706532fa907e66b03e935443b94218d790 Mon Sep 17 00:00:00 2001 From: mdw Date: Sat, 15 Jul 2000 17:47:58 +0000 Subject: [PATCH] Fix bug in decryption key scheduling. --- idea.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/idea.c b/idea.c index cde3af4..c0a1d07 100644 --- a/idea.c +++ b/idea.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: idea.c,v 1.3 2000/07/02 18:24:39 mdw Exp $ + * $Id: idea.c,v 1.4 2000/07/15 17:47:58 mdw Exp $ * * Implementation of the IDEA cipher * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: idea.c,v $ + * Revision 1.4 2000/07/15 17:47:58 mdw + * Fix bug in decryption key scheduling. + * * Revision 1.3 2000/07/02 18:24:39 mdw * Use a new multiplication function from an Ascom white paper to resist * timing attacks. @@ -75,13 +78,16 @@ static uint16 inv(uint16 n) { uint32 m = 0x10001; uint32 a = 1, b = 0; + uint32 nn = n; + if (!nn) + nn = 0x10000; for (;;) { uint32 q, r, t; - if (!(r = m % n)) + if (!(r = m % nn)) break; - q = m / n; - m = n; n = r; + q = m / nn; + m = nn; nn = r; t = a; a = b - q * a; b = t; } if (a > MASK16) @@ -255,8 +261,8 @@ void idea_init(idea_ctx *k, const void *buf, size_t sz) ROUND(_k, _a, _b, _c, _d); \ ROUND(_k, _a, _c, _b, _d); \ MIX (_k, _a, _c, _b, _d); \ - c = (U16(_a) << 16) | U16(_c); \ - d = (U16(_b) << 16) | U16(_d); \ + c = ((uint32)U16(_a) << 16) | (uint32)U16(_c); \ + d = ((uint32)U16(_b) << 16) | (uint32)U16(_d); \ } while (0) #define DBLK(k, a, b) EBLK((k), (a), (b)) -- 2.11.0