summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/aes/aes_i386.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/aes/aes_i386.c')
-rw-r--r--src/lib/libcrypto/aes/aes_i386.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/lib/libcrypto/aes/aes_i386.c b/src/lib/libcrypto/aes/aes_i386.c
index 7f2241eaf5..85a14454da 100644
--- a/src/lib/libcrypto/aes/aes_i386.c
+++ b/src/lib/libcrypto/aes/aes_i386.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: aes_i386.c,v 1.4 2025/07/21 10:24:23 jsing Exp $ */ 1/* $OpenBSD: aes_i386.c,v 1.5 2025/07/22 09:13:49 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2025 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2025 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -68,6 +68,9 @@ void aesni_ccm64_decrypt_blocks(const unsigned char *in, unsigned char *out,
68void aesni_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, 68void aesni_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
69 size_t blocks, const void *key, const unsigned char *ivec); 69 size_t blocks, const void *key, const unsigned char *ivec);
70 70
71void aesni_ecb_encrypt(const unsigned char *in, unsigned char *out,
72 size_t length, const AES_KEY *key, int enc);
73
71void aesni_xts_encrypt(const unsigned char *in, unsigned char *out, 74void aesni_xts_encrypt(const unsigned char *in, unsigned char *out,
72 size_t length, const AES_KEY *key1, const AES_KEY *key2, 75 size_t length, const AES_KEY *key1, const AES_KEY *key2,
73 const unsigned char iv[16]); 76 const unsigned char iv[16]);
@@ -161,6 +164,27 @@ aes_ctr32_encrypt_internal(const unsigned char *in, unsigned char *out,
161} 164}
162 165
163void 166void
167aes_ecb_encrypt_internal(const unsigned char *in, unsigned char *out,
168 size_t len, const AES_KEY *key, int encrypt)
169{
170 if ((crypto_cpu_caps_i386 & CRYPTO_CPU_CAPS_I386_AES) != 0) {
171 aesni_ecb_encrypt(in, out, len, key, encrypt);
172 return;
173 }
174
175 while (len >= AES_BLOCK_SIZE) {
176 if (encrypt)
177 aes_encrypt_generic(in, out, key);
178 else
179 aes_decrypt_generic(in, out, key);
180
181 in += AES_BLOCK_SIZE;
182 out += AES_BLOCK_SIZE;
183 len -= AES_BLOCK_SIZE;
184 }
185}
186
187void
164aes_xts_encrypt_internal(const unsigned char *in, unsigned char *out, 188aes_xts_encrypt_internal(const unsigned char *in, unsigned char *out,
165 size_t len, const AES_KEY *key1, const AES_KEY *key2, 189 size_t len, const AES_KEY *key1, const AES_KEY *key2,
166 const unsigned char iv[16], int encrypt) 190 const unsigned char iv[16], int encrypt)