summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/evp/e_aes.c36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c
index 80eba80244..05ed002950 100644
--- a/src/lib/libcrypto/evp/e_aes.c
+++ b/src/lib/libcrypto/evp/e_aes.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_aes.c,v 1.41 2020/04/30 18:43:11 tb Exp $ */ 1/* $OpenBSD: e_aes.c,v 1.42 2020/06/05 18:44:42 tb Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -1636,9 +1636,35 @@ aes_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1636 return ret != 0 ? ret : -1; 1636 return ret != 0 ? ret : -1;
1637} 1637}
1638 1638
1639static int
1640aes_wrap_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1641{
1642 EVP_AES_WRAP_CTX *wctx = c->cipher_data;
1643
1644 switch (type) {
1645 case EVP_CTRL_COPY:
1646 {
1647 EVP_CIPHER_CTX *out = ptr;
1648 EVP_AES_WRAP_CTX *wctx_out = out->cipher_data;
1649
1650 if (wctx->iv != NULL) {
1651 if (c->iv != wctx->iv)
1652 return 0;
1653
1654 wctx_out->iv = out->iv;
1655 }
1656
1657 return 1;
1658 }
1659 }
1660
1661 return -1;
1662}
1663
1639#define WRAP_FLAGS \ 1664#define WRAP_FLAGS \
1640 ( EVP_CIPH_WRAP_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | \ 1665 ( EVP_CIPH_WRAP_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | \
1641 EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1 ) 1666 EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1 | \
1667 EVP_CIPH_CUSTOM_COPY )
1642 1668
1643static const EVP_CIPHER aes_128_wrap = { 1669static const EVP_CIPHER aes_128_wrap = {
1644 .nid = NID_id_aes128_wrap, 1670 .nid = NID_id_aes128_wrap,
@@ -1652,7 +1678,7 @@ static const EVP_CIPHER aes_128_wrap = {
1652 .ctx_size = sizeof(EVP_AES_WRAP_CTX), 1678 .ctx_size = sizeof(EVP_AES_WRAP_CTX),
1653 .set_asn1_parameters = NULL, 1679 .set_asn1_parameters = NULL,
1654 .get_asn1_parameters = NULL, 1680 .get_asn1_parameters = NULL,
1655 .ctrl = NULL, 1681 .ctrl = aes_wrap_ctrl,
1656 .app_data = NULL, 1682 .app_data = NULL,
1657}; 1683};
1658 1684
@@ -1674,7 +1700,7 @@ static const EVP_CIPHER aes_192_wrap = {
1674 .ctx_size = sizeof(EVP_AES_WRAP_CTX), 1700 .ctx_size = sizeof(EVP_AES_WRAP_CTX),
1675 .set_asn1_parameters = NULL, 1701 .set_asn1_parameters = NULL,
1676 .get_asn1_parameters = NULL, 1702 .get_asn1_parameters = NULL,
1677 .ctrl = NULL, 1703 .ctrl = aes_wrap_ctrl,
1678 .app_data = NULL, 1704 .app_data = NULL,
1679}; 1705};
1680 1706
@@ -1696,7 +1722,7 @@ static const EVP_CIPHER aes_256_wrap = {
1696 .ctx_size = sizeof(EVP_AES_WRAP_CTX), 1722 .ctx_size = sizeof(EVP_AES_WRAP_CTX),
1697 .set_asn1_parameters = NULL, 1723 .set_asn1_parameters = NULL,
1698 .get_asn1_parameters = NULL, 1724 .get_asn1_parameters = NULL,
1699 .ctrl = NULL, 1725 .ctrl = aes_wrap_ctrl,
1700 .app_data = NULL, 1726 .app_data = NULL,
1701}; 1727};
1702 1728