diff options
-rw-r--r-- | src/lib/libcrypto/evp/e_aes.c | 36 |
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 | ||
1639 | static int | ||
1640 | aes_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 | ||
1643 | static const EVP_CIPHER aes_128_wrap = { | 1669 | static 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 | ||