X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccrypt%2Faes.c;h=95bdd68485d8c9b1857c32ffa896ec969c958c69;hb=9cb3b70fbb028d0bc059a3e5af3c4ea532a2b2f5;hp=f60f395226978acba8f984369b174b2ca916a121;hpb=9f20f0382b6229eca740925a73f96294f6dcedc6;p=crypto.git diff --git a/lib/silccrypt/aes.c b/lib/silccrypt/aes.c index f60f3952..95bdd684 100644 --- a/lib/silccrypt/aes.c +++ b/lib/silccrypt/aes.c @@ -91,6 +91,7 @@ SILC_CIPHER_API_INIT(aes) AesContext *aes = silc_calloc(1, sizeof(AesContext)); if (aes) aes->u.enc.inf.b[2] = 16; + return aes; } /* Unnitialize */ @@ -129,24 +130,8 @@ SILC_CIPHER_API_ENCRYPT(aes) break; case SILC_CIPHER_MODE_CBC: - { - SilcUInt32 nb = len >> 4; - - SILC_ASSERT((len & (16 - 1)) == 0); - if (len & (16 - 1)) - return FALSE; - - while(nb--) { - lp32(iv)[0] ^= lp32(src)[0]; - lp32(iv)[1] ^= lp32(src)[1]; - lp32(iv)[2] ^= lp32(src)[2]; - lp32(iv)[3] ^= lp32(src)[3]; - aes_encrypt(iv, iv, &aes->u.enc); - memcpy(dst, iv, 16); - src += 16; - dst += 16; - } - } + SILC_CBC_ENC_MSB_128_8(len, iv, src, dst, i, + aes_encrypt(iv, iv, &aes->u.enc)); break; case SILC_CIPHER_MODE_CFB: @@ -167,6 +152,8 @@ SILC_CIPHER_API_ENCRYPT(aes) SILC_CIPHER_API_DECRYPT(aes) { AesContext *aes = context; + unsigned char prev[16]; + int i; switch (ops->mode) { case SILC_CIPHER_MODE_CTR: @@ -186,25 +173,8 @@ SILC_CIPHER_API_DECRYPT(aes) break; case SILC_CIPHER_MODE_CBC: - { - unsigned char tmp[16]; - SilcUInt32 nb = len >> 4; - - if (len & (16 - 1)) - return FALSE; - - while(nb--) { - memcpy(tmp, src, 16); - aes_decrypt(src, dst, &aes->u.dec); - lp32(dst)[0] ^= lp32(iv)[0]; - lp32(dst)[1] ^= lp32(iv)[1]; - lp32(dst)[2] ^= lp32(iv)[2]; - lp32(dst)[3] ^= lp32(iv)[3]; - memcpy(iv, tmp, 16); - src += 16; - dst += 16; - } - } + SILC_CBC_DEC_MSB_128_8(len, iv, prev, src, dst, i, + aes_decrypt(src, dst, &aes->u.dec)); break; case SILC_CIPHER_MODE_CFB: