diff options
Diffstat (limited to 'src')
| -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 | ||
