+Fri Feb 22 16:12:27 EET 2008 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed partial encryption in CTR mode in AES. Change does not
+ affect interoperability in SILC due to the way CTR is used in
+ SILC. But, fixed anyway. Affected files are
+ lib/silccrypt/aes.c and rijndael_internal.h.
+
Tue Jan 8 09:41:57 EET 2008 Pekka Riikonen <priikone@silcnet.org>
* Fixed printable fingerprint bufferoverlfow, RedHat bug 372021.
Sun Nov 11 14:15:48 EET 2007 Pekka Riikonen <priikone@silcnet.org>
* SILC Toolkit 1.1.5.
-
+
Sun Nov 11 11:22:35 EET 2007 Pekka Riikonen <priikone@silcnet.org>
* Fixed connection authentication with public keys to use
SILC_CIPHER_API_ENCRYPT(aes_ctr)
{
AesContext *aes = context;
- SilcUInt32 ctr[4];
- int i;
-
- SILC_GET32_MSB(ctr[0], iv);
- SILC_GET32_MSB(ctr[1], iv + 4);
- SILC_GET32_MSB(ctr[2], iv + 8);
- SILC_GET32_MSB(ctr[3], iv + 12);
+ int i, k;
i = aes->u.enc.inf.b[2];
if (!i)
while (len-- > 0) {
if (i == 16) {
- if (++ctr[3] == 0)
- if (++ctr[2] == 0)
- if (++ctr[1] == 0)
- ++ctr[0];
-
- SILC_PUT32_MSB(ctr[0], iv);
- SILC_PUT32_MSB(ctr[1], iv + 4);
- SILC_PUT32_MSB(ctr[2], iv + 8);
- SILC_PUT32_MSB(ctr[3], iv + 12);
+ for (k = 15; k >= 0; k--)
+ if (++iv[k])
+ break;
- aes_encrypt(iv, iv, &aes->u.enc);
+ aes_encrypt(iv, aes->u.enc.pad, &aes->u.enc);
i = 0;
}
- *dst++ = *src++ ^ iv[i++];
+ *dst++ = *src++ ^ aes->u.enc.pad[i++];
}
aes->u.enc.inf.b[2] = i;
- SILC_PUT32_MSB(ctr[0], iv);
- SILC_PUT32_MSB(ctr[1], iv + 4);
- SILC_PUT32_MSB(ctr[2], iv + 8);
- SILC_PUT32_MSB(ctr[3], iv + 12);
-
return TRUE;
}