_(cbc, AES_256_CBC, EVP_aes_256_cbc) \
_(gcm, AES_128_GCM, EVP_aes_128_gcm) \
_(gcm, AES_192_GCM, EVP_aes_192_gcm) \
- _(gcm, AES_256_GCM, EVP_aes_256_gcm)
+ _(gcm, AES_256_GCM, EVP_aes_256_gcm) \
+ _(cbc, AES_128_CTR, EVP_aes_128_ctr) \
+ _(cbc, AES_192_CTR, EVP_aes_192_ctr) \
+ _(cbc, AES_256_CTR, EVP_aes_256_ctr) \
#define foreach_openssl_hmac_op \
_(MD5, EVP_md5) \
int len;
if (op->flags & VNET_CRYPTO_OP_FLAG_INIT_IV)
- RAND_bytes (op->iv, op->iv_len);
+ RAND_bytes (op->iv, 8);
EVP_EncryptInit_ex (ctx, cipher, 0, 0, 0);
- EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_IVLEN, op->iv_len, NULL);
+ EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_IVLEN, 8, NULL);
EVP_EncryptInit_ex (ctx, 0, 0, op->key, op->iv);
if (op->aad_len)
EVP_EncryptUpdate (ctx, NULL, &len, op->aad, op->aad_len);
openssl_per_thread_data_t *ptd = vec_elt_at_index (per_thread_data,
vm->thread_index);
EVP_CIPHER_CTX *ctx = ptd->evp_cipher_ctx;
- u32 i;
+ u32 i, n_fail = 0;
for (i = 0; i < n_ops; i++)
{
vnet_crypto_op_t *op = ops[i];
if (EVP_DecryptFinal_ex (ctx, op->dst + len, &len) > 0)
op->status = VNET_CRYPTO_OP_STATUS_COMPLETED;
else
- op->status = VNET_CRYPTO_OP_STATUS_FAIL_DECRYPT;
+ {
+ n_fail++;
+ op->status = VNET_CRYPTO_OP_STATUS_FAIL_DECRYPT;
+ }
}
- return n_ops;
+ return n_ops - n_fail;
}
static_always_inline u32