static int padlock_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out_arg, const unsigned char *in_arg, size_t nbytes) { struct padlock_cipher_data *cdata = ALIGNED_CIPHER_DATA(ctx); int ret; memcpy(cdata->iv, EVP_CIPHER_CTX_iv(ctx), AES_BLOCK_SIZE); if ((ret = padlock_cbc_encrypt(out_arg, in_arg, cdata, nbytes))) memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), cdata->iv, AES_BLOCK_SIZE); return ret; }
static int padlock_aes_cbc_decrypt(void *_ctx, const void *src, size_t src_size, void *dst, size_t dst_size) { struct padlock_ctx *ctx = _ctx; struct padlock_cipher_data *pcd; pcd = ALIGN16(&ctx->expanded_key); padlock_cbc_encrypt(dst, src, pcd, src_size); return 0; }