diff options
-rw-r--r-- | src/lib/libcrypto/arch/amd64/Makefile.inc | 6 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/i386/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/e_aes.c | 136 |
3 files changed, 9 insertions, 137 deletions
diff --git a/src/lib/libcrypto/arch/amd64/Makefile.inc b/src/lib/libcrypto/arch/amd64/Makefile.inc index b1a6563931..b03aad782f 100644 --- a/src/lib/libcrypto/arch/amd64/Makefile.inc +++ b/src/lib/libcrypto/arch/amd64/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.37 2025/02/14 12:01:58 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.38 2025/04/18 13:19:39 jsing Exp $ |
2 | 2 | ||
3 | # amd64-specific libcrypto build rules | 3 | # amd64-specific libcrypto build rules |
4 | 4 | ||
@@ -10,10 +10,6 @@ SRCS += crypto_cpu_caps.c | |||
10 | # aes | 10 | # aes |
11 | CFLAGS+= -DAES_ASM | 11 | CFLAGS+= -DAES_ASM |
12 | SSLASM+= aes aes-x86_64 | 12 | SSLASM+= aes aes-x86_64 |
13 | CFLAGS+= -DBSAES_ASM | ||
14 | SSLASM+= aes bsaes-x86_64 | ||
15 | CFLAGS+= -DVPAES_ASM | ||
16 | SSLASM+= aes vpaes-x86_64 | ||
17 | SSLASM+= aes aesni-x86_64 | 13 | SSLASM+= aes aesni-x86_64 |
18 | # bn | 14 | # bn |
19 | CFLAGS+= -DOPENSSL_IA32_SSE2 | 15 | CFLAGS+= -DOPENSSL_IA32_SSE2 |
diff --git a/src/lib/libcrypto/arch/i386/Makefile.inc b/src/lib/libcrypto/arch/i386/Makefile.inc index 6989b35686..4bcf8e2bbc 100644 --- a/src/lib/libcrypto/arch/i386/Makefile.inc +++ b/src/lib/libcrypto/arch/i386/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.27 2025/02/14 12:01:58 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.28 2025/04/18 13:19:39 jsing Exp $ |
2 | 2 | ||
3 | # i386-specific libcrypto build rules | 3 | # i386-specific libcrypto build rules |
4 | 4 | ||
@@ -10,8 +10,6 @@ SRCS += crypto_cpu_caps.c | |||
10 | # aes | 10 | # aes |
11 | CFLAGS+= -DAES_ASM | 11 | CFLAGS+= -DAES_ASM |
12 | SSLASM+= aes aes-586 | 12 | SSLASM+= aes aes-586 |
13 | CFLAGS+= -DVPAES_ASM | ||
14 | SSLASM+= aes vpaes-x86 | ||
15 | SSLASM+= aes aesni-x86 | 13 | SSLASM+= aes aesni-x86 |
16 | # bn | 14 | # bn |
17 | CFLAGS+= -DOPENSSL_IA32_SSE2 | 15 | CFLAGS+= -DOPENSSL_IA32_SSE2 |
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c index 7753c18c15..5c35121399 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.59 2024/09/06 09:57:32 tb Exp $ */ | 1 | /* $OpenBSD: e_aes.c,v 1.60 2025/04/18 13:19:39 jsing 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 | * |
@@ -108,32 +108,6 @@ typedef struct { | |||
108 | 108 | ||
109 | #define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4)) | 109 | #define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4)) |
110 | 110 | ||
111 | #ifdef VPAES_ASM | ||
112 | int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, | ||
113 | AES_KEY *key); | ||
114 | int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, | ||
115 | AES_KEY *key); | ||
116 | |||
117 | void vpaes_encrypt(const unsigned char *in, unsigned char *out, | ||
118 | const AES_KEY *key); | ||
119 | void vpaes_decrypt(const unsigned char *in, unsigned char *out, | ||
120 | const AES_KEY *key); | ||
121 | |||
122 | void vpaes_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||
123 | size_t length, const AES_KEY *key, unsigned char *ivec, int enc); | ||
124 | #endif | ||
125 | #ifdef BSAES_ASM | ||
126 | void bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||
127 | size_t length, const AES_KEY *key, unsigned char ivec[16], int enc); | ||
128 | void bsaes_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, | ||
129 | size_t len, const AES_KEY *key, const unsigned char ivec[16]); | ||
130 | void bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out, | ||
131 | size_t len, const AES_KEY *key1, const AES_KEY *key2, | ||
132 | const unsigned char iv[16]); | ||
133 | void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out, | ||
134 | size_t len, const AES_KEY *key1, const AES_KEY *key2, | ||
135 | const unsigned char iv[16]); | ||
136 | #endif | ||
137 | #ifdef AES_CTR_ASM | 111 | #ifdef AES_CTR_ASM |
138 | void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, | 112 | void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, |
139 | size_t blocks, const AES_KEY *key, | 113 | size_t blocks, const AES_KEY *key, |
@@ -155,12 +129,6 @@ void AES_xts_decrypt(const char *inp, char *out, size_t len, | |||
155 | 129 | ||
156 | #include "x86_arch.h" | 130 | #include "x86_arch.h" |
157 | 131 | ||
158 | #ifdef VPAES_ASM | ||
159 | #define VPAES_CAPABLE (crypto_cpu_caps_ia32() & CPUCAP_MASK_SSSE3) | ||
160 | #endif | ||
161 | #ifdef BSAES_ASM | ||
162 | #define BSAES_CAPABLE VPAES_CAPABLE | ||
163 | #endif | ||
164 | /* | 132 | /* |
165 | * AES-NI section | 133 | * AES-NI section |
166 | */ | 134 | */ |
@@ -366,49 +334,13 @@ aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | |||
366 | 334 | ||
367 | mode = ctx->cipher->flags & EVP_CIPH_MODE; | 335 | mode = ctx->cipher->flags & EVP_CIPH_MODE; |
368 | if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) && | 336 | if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) && |
369 | !enc) | 337 | !enc) { |
370 | #ifdef BSAES_CAPABLE | ||
371 | if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) { | ||
372 | ret = AES_set_decrypt_key(key, ctx->key_len * 8, | ||
373 | &dat->ks); | ||
374 | dat->block = (block128_f)AES_decrypt; | ||
375 | dat->stream.cbc = (cbc128_f)bsaes_cbc_encrypt; | ||
376 | } else | ||
377 | #endif | ||
378 | #ifdef VPAES_CAPABLE | ||
379 | if (VPAES_CAPABLE) { | ||
380 | ret = vpaes_set_decrypt_key(key, ctx->key_len * 8, | ||
381 | &dat->ks); | ||
382 | dat->block = (block128_f)vpaes_decrypt; | ||
383 | dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? | ||
384 | (cbc128_f)vpaes_cbc_encrypt : NULL; | ||
385 | } else | ||
386 | #endif | ||
387 | { | ||
388 | ret = AES_set_decrypt_key(key, ctx->key_len * 8, | 338 | ret = AES_set_decrypt_key(key, ctx->key_len * 8, |
389 | &dat->ks); | 339 | &dat->ks); |
390 | dat->block = (block128_f)AES_decrypt; | 340 | dat->block = (block128_f)AES_decrypt; |
391 | dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? | 341 | dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? |
392 | (cbc128_f)AES_cbc_encrypt : NULL; | 342 | (cbc128_f)AES_cbc_encrypt : NULL; |
393 | } else | 343 | } else { |
394 | #ifdef BSAES_CAPABLE | ||
395 | if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) { | ||
396 | ret = AES_set_encrypt_key(key, ctx->key_len * 8, | ||
397 | &dat->ks); | ||
398 | dat->block = (block128_f)AES_encrypt; | ||
399 | dat->stream.ctr = (ctr128_f)bsaes_ctr32_encrypt_blocks; | ||
400 | } else | ||
401 | #endif | ||
402 | #ifdef VPAES_CAPABLE | ||
403 | if (VPAES_CAPABLE) { | ||
404 | ret = vpaes_set_encrypt_key(key, ctx->key_len * 8, | ||
405 | &dat->ks); | ||
406 | dat->block = (block128_f)vpaes_encrypt; | ||
407 | dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? | ||
408 | (cbc128_f)vpaes_cbc_encrypt : NULL; | ||
409 | } else | ||
410 | #endif | ||
411 | { | ||
412 | ret = AES_set_encrypt_key(key, ctx->key_len * 8, | 344 | ret = AES_set_encrypt_key(key, ctx->key_len * 8, |
413 | &dat->ks); | 345 | &dat->ks); |
414 | dat->block = (block128_f)AES_encrypt; | 346 | dat->block = (block128_f)AES_encrypt; |
@@ -1459,22 +1391,6 @@ static ctr128_f | |||
1459 | aes_gcm_set_key(AES_KEY *aes_key, GCM128_CONTEXT *gcm_ctx, | 1391 | aes_gcm_set_key(AES_KEY *aes_key, GCM128_CONTEXT *gcm_ctx, |
1460 | const unsigned char *key, size_t key_len) | 1392 | const unsigned char *key, size_t key_len) |
1461 | { | 1393 | { |
1462 | #ifdef BSAES_CAPABLE | ||
1463 | if (BSAES_CAPABLE) { | ||
1464 | AES_set_encrypt_key(key, key_len * 8, aes_key); | ||
1465 | CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)AES_encrypt); | ||
1466 | return (ctr128_f)bsaes_ctr32_encrypt_blocks; | ||
1467 | } else | ||
1468 | #endif | ||
1469 | #ifdef VPAES_CAPABLE | ||
1470 | if (VPAES_CAPABLE) { | ||
1471 | vpaes_set_encrypt_key(key, key_len * 8, aes_key); | ||
1472 | CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)vpaes_encrypt); | ||
1473 | return NULL; | ||
1474 | } else | ||
1475 | #endif | ||
1476 | (void)0; /* terminate potentially open 'else' */ | ||
1477 | |||
1478 | AES_set_encrypt_key(key, key_len * 8, aes_key); | 1394 | AES_set_encrypt_key(key, key_len * 8, aes_key); |
1479 | CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)AES_encrypt); | 1395 | CRYPTO_gcm128_init(gcm_ctx, aes_key, (block128_f)AES_encrypt); |
1480 | #ifdef AES_CTR_ASM | 1396 | #ifdef AES_CTR_ASM |
@@ -1825,41 +1741,13 @@ aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | |||
1825 | if (!iv && !key) | 1741 | if (!iv && !key) |
1826 | return 1; | 1742 | return 1; |
1827 | 1743 | ||
1828 | if (key) do { | 1744 | if (key) { |
1829 | #ifdef AES_XTS_ASM | 1745 | #ifdef AES_XTS_ASM |
1830 | xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt; | 1746 | xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt; |
1831 | #else | 1747 | #else |
1832 | xctx->stream = NULL; | 1748 | xctx->stream = NULL; |
1833 | #endif | 1749 | #endif |
1834 | /* key_len is two AES keys */ | 1750 | /* key_len is two AES keys */ |
1835 | #ifdef BSAES_CAPABLE | ||
1836 | if (BSAES_CAPABLE) | ||
1837 | xctx->stream = enc ? bsaes_xts_encrypt : | ||
1838 | bsaes_xts_decrypt; | ||
1839 | else | ||
1840 | #endif | ||
1841 | #ifdef VPAES_CAPABLE | ||
1842 | if (VPAES_CAPABLE) { | ||
1843 | if (enc) { | ||
1844 | vpaes_set_encrypt_key(key, ctx->key_len * 4, | ||
1845 | &xctx->ks1); | ||
1846 | xctx->xts.block1 = (block128_f)vpaes_encrypt; | ||
1847 | } else { | ||
1848 | vpaes_set_decrypt_key(key, ctx->key_len * 4, | ||
1849 | &xctx->ks1); | ||
1850 | xctx->xts.block1 = (block128_f)vpaes_decrypt; | ||
1851 | } | ||
1852 | |||
1853 | vpaes_set_encrypt_key(key + ctx->key_len / 2, | ||
1854 | ctx->key_len * 4, &xctx->ks2); | ||
1855 | xctx->xts.block2 = (block128_f)vpaes_encrypt; | ||
1856 | |||
1857 | xctx->xts.key1 = &xctx->ks1; | ||
1858 | break; | ||
1859 | } else | ||
1860 | #endif | ||
1861 | (void)0; /* terminate potentially open 'else' */ | ||
1862 | |||
1863 | if (enc) { | 1751 | if (enc) { |
1864 | AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1); | 1752 | AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1); |
1865 | xctx->xts.block1 = (block128_f)AES_encrypt; | 1753 | xctx->xts.block1 = (block128_f)AES_encrypt; |
@@ -1873,7 +1761,7 @@ aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | |||
1873 | xctx->xts.block2 = (block128_f)AES_encrypt; | 1761 | xctx->xts.block2 = (block128_f)AES_encrypt; |
1874 | 1762 | ||
1875 | xctx->xts.key1 = &xctx->ks1; | 1763 | xctx->xts.key1 = &xctx->ks1; |
1876 | } while (0); | 1764 | } |
1877 | 1765 | ||
1878 | if (iv) { | 1766 | if (iv) { |
1879 | xctx->xts.key2 = &xctx->ks2; | 1767 | xctx->xts.key2 = &xctx->ks2; |
@@ -2062,23 +1950,13 @@ aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | |||
2062 | 1950 | ||
2063 | if (!iv && !key) | 1951 | if (!iv && !key) |
2064 | return 1; | 1952 | return 1; |
2065 | if (key) do { | 1953 | if (key) { |
2066 | #ifdef VPAES_CAPABLE | ||
2067 | if (VPAES_CAPABLE) { | ||
2068 | vpaes_set_encrypt_key(key, ctx->key_len*8, &cctx->ks); | ||
2069 | CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, | ||
2070 | &cctx->ks, (block128_f)vpaes_encrypt); | ||
2071 | cctx->str = NULL; | ||
2072 | cctx->key_set = 1; | ||
2073 | break; | ||
2074 | } | ||
2075 | #endif | ||
2076 | AES_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks); | 1954 | AES_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks); |
2077 | CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, | 1955 | CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, |
2078 | &cctx->ks, (block128_f)AES_encrypt); | 1956 | &cctx->ks, (block128_f)AES_encrypt); |
2079 | cctx->str = NULL; | 1957 | cctx->str = NULL; |
2080 | cctx->key_set = 1; | 1958 | cctx->key_set = 1; |
2081 | } while (0); | 1959 | } |
2082 | if (iv) { | 1960 | if (iv) { |
2083 | memcpy(ctx->iv, iv, 15 - cctx->L); | 1961 | memcpy(ctx->iv, iv, 15 - cctx->L); |
2084 | cctx->iv_set = 1; | 1962 | cctx->iv_set = 1; |