static int dasync_cipher_init_key_helper(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc, const EVP_CIPHER *cipher) { int ret; struct dasync_pipeline_ctx *pipe_ctx = (struct dasync_pipeline_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); if (pipe_ctx->inner_cipher_data == NULL && EVP_CIPHER_impl_ctx_size(cipher) != 0) { pipe_ctx->inner_cipher_data = OPENSSL_zalloc( EVP_CIPHER_impl_ctx_size(cipher)); if (pipe_ctx->inner_cipher_data == NULL) { DASYNCerr(DASYNC_F_DASYNC_CIPHER_INIT_KEY_HELPER, ERR_R_MALLOC_FAILURE); return 0; } } pipe_ctx->numpipes = 0; pipe_ctx->aadctr = 0; EVP_CIPHER_CTX_set_cipher_data(ctx, pipe_ctx->inner_cipher_data); ret = EVP_CIPHER_meth_get_init(cipher)(ctx, key, iv, enc); EVP_CIPHER_CTX_set_cipher_data(ctx, pipe_ctx); return ret; }
static int dasync_cipher_cleanup_helper(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher) { struct dasync_pipeline_ctx *pipe_ctx = (struct dasync_pipeline_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); OPENSSL_clear_free(pipe_ctx->inner_cipher_data, EVP_CIPHER_impl_ctx_size(cipher)); return 1; }
static const EVP_CIPHER *ossltest_aes_128_cbc(void) { if (_hidden_aes_128_cbc == NULL && ((_hidden_aes_128_cbc = EVP_CIPHER_meth_new(NID_aes_128_cbc, 16 /* block size */, 16 /* key len */)) == NULL || !EVP_CIPHER_meth_set_iv_length(_hidden_aes_128_cbc,16) || !EVP_CIPHER_meth_set_flags(_hidden_aes_128_cbc, EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CBC_MODE) || !EVP_CIPHER_meth_set_init(_hidden_aes_128_cbc, ossltest_aes128_init_key) || !EVP_CIPHER_meth_set_do_cipher(_hidden_aes_128_cbc, ossltest_aes128_cbc_cipher) || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_aes_128_cbc, EVP_CIPHER_impl_ctx_size(EVP_aes_128_cbc())))) { EVP_CIPHER_meth_free(_hidden_aes_128_cbc); _hidden_aes_128_cbc = NULL; } return _hidden_aes_128_cbc; }