|
|
|
|
@ -330,9 +330,6 @@ static void aes_128_f8_encrypt(struct crypto_context *c, unsigned char *iv, str
|
|
|
|
|
j = 0;
|
|
|
|
|
ZERO(last_key_block);
|
|
|
|
|
|
|
|
|
|
EVP_CIPHER_CTX_init(&ecc);
|
|
|
|
|
EVP_EncryptInit_ex(&ecc, EVP_aes_128_ecb(), NULL, (unsigned char *) c->session_key, NULL);
|
|
|
|
|
|
|
|
|
|
while (left) {
|
|
|
|
|
/* S(j) = E(k_e, IV' XOR j XOR S(j-1)) */
|
|
|
|
|
memcpy(x, ivx, 16);
|
|
|
|
|
@ -342,7 +339,7 @@ static void aes_128_f8_encrypt(struct crypto_context *c, unsigned char *iv, str
|
|
|
|
|
xi[0] ^= lki[0];
|
|
|
|
|
xi[1] ^= lki[1];
|
|
|
|
|
|
|
|
|
|
EVP_EncryptUpdate(&ecc, key_block, &outlen, x, 16);
|
|
|
|
|
EVP_EncryptUpdate(c->session_key_ctx, key_block, &outlen, x, 16);
|
|
|
|
|
assert(outlen == 16);
|
|
|
|
|
|
|
|
|
|
if (G_UNLIKELY(left < 16)) {
|
|
|
|
|
@ -367,8 +364,7 @@ static void aes_128_f8_encrypt(struct crypto_context *c, unsigned char *iv, str
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
done:
|
|
|
|
|
EVP_EncryptFinal_ex(&ecc, key_block, &outlen);
|
|
|
|
|
EVP_CIPHER_CTX_cleanup(&ecc);
|
|
|
|
|
;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* rfc 3711 section 4.1.2.2 */
|
|
|
|
|
|