diff options
| author | jsing <> | 2025-06-15 15:11:50 +0000 |
|---|---|---|
| committer | jsing <> | 2025-06-15 15:11:50 +0000 |
| commit | eecbed4f973896888f770cfc1dd07f1e0879ccda (patch) | |
| tree | 0878a73d8f7c407a43db41308974923535249794 | |
| parent | 62940b1da1692820726cbd675c763291491be643 (diff) | |
| download | openbsd-eecbed4f973896888f770cfc1dd07f1e0879ccda.tar.gz openbsd-eecbed4f973896888f770cfc1dd07f1e0879ccda.tar.bz2 openbsd-eecbed4f973896888f770cfc1dd07f1e0879ccda.zip | |
Integrate AES-NI into the AES code.
Currently, the AES-NI code is only integrated into EVP - add code to
integrate AES-NI into AES. Rename the assembly provided functions and
provide C versions for the original names, which check for AES-NI support
and dispatch to the appropriate function. This means that the AES_* public
API will now use AES-NI, if available.
ok tb@
| -rw-r--r-- | src/lib/libcrypto/aes/aes_amd64.c | 102 | ||||
| -rw-r--r-- | src/lib/libcrypto/aes/aes_i386.c | 102 | ||||
| -rw-r--r-- | src/lib/libcrypto/aes/asm/aes-586.pl | 30 | ||||
| -rwxr-xr-x | src/lib/libcrypto/aes/asm/aes-x86_64.pl | 90 | ||||
| -rw-r--r-- | src/lib/libcrypto/arch/amd64/Makefile.inc | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/arch/i386/Makefile.inc | 4 |
6 files changed, 270 insertions, 62 deletions
diff --git a/src/lib/libcrypto/aes/aes_amd64.c b/src/lib/libcrypto/aes/aes_amd64.c new file mode 100644 index 0000000000..302d1ac91d --- /dev/null +++ b/src/lib/libcrypto/aes/aes_amd64.c | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | /* $OpenBSD: aes_amd64.c,v 1.1 2025/06/15 15:11:50 jsing Exp $ */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2025 Joel Sing <jsing@openbsd.org> | ||
| 4 | * | ||
| 5 | * Permission to use, copy, modify, and distribute this software for any | ||
| 6 | * purpose with or without fee is hereby granted, provided that the above | ||
| 7 | * copyright notice and this permission notice appear in all copies. | ||
| 8 | * | ||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <openssl/aes.h> | ||
| 19 | |||
| 20 | #include "crypto_arch.h" | ||
| 21 | |||
| 22 | int aes_set_encrypt_key_generic(const unsigned char *userKey, const int bits, | ||
| 23 | AES_KEY *key); | ||
| 24 | int aes_set_decrypt_key_generic(const unsigned char *userKey, const int bits, | ||
| 25 | AES_KEY *key); | ||
| 26 | |||
| 27 | void aes_encrypt_generic(const unsigned char *in, unsigned char *out, | ||
| 28 | const AES_KEY *key); | ||
| 29 | void aes_decrypt_generic(const unsigned char *in, unsigned char *out, | ||
| 30 | const AES_KEY *key); | ||
| 31 | |||
| 32 | void aes_cbc_encrypt_generic(const unsigned char *in, unsigned char *out, | ||
| 33 | size_t len, const AES_KEY *key, unsigned char *ivec, const int enc); | ||
| 34 | |||
| 35 | int aesni_set_encrypt_key(const unsigned char *userKey, int bits, | ||
| 36 | AES_KEY *key); | ||
| 37 | int aesni_set_decrypt_key(const unsigned char *userKey, int bits, | ||
| 38 | AES_KEY *key); | ||
| 39 | |||
| 40 | void aesni_encrypt(const unsigned char *in, unsigned char *out, | ||
| 41 | const AES_KEY *key); | ||
| 42 | void aesni_decrypt(const unsigned char *in, unsigned char *out, | ||
| 43 | const AES_KEY *key); | ||
| 44 | |||
| 45 | void aesni_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||
| 46 | size_t len, const AES_KEY *key, unsigned char *ivec, const int enc); | ||
| 47 | |||
| 48 | int | ||
| 49 | aes_set_encrypt_key_internal(const unsigned char *userKey, const int bits, | ||
| 50 | AES_KEY *key) | ||
| 51 | { | ||
| 52 | if ((crypto_cpu_caps_amd64 & CRYPTO_CPU_CAPS_AMD64_AES) != 0) | ||
| 53 | return aesni_set_encrypt_key(userKey, bits, key); | ||
| 54 | |||
| 55 | return aes_set_encrypt_key_generic(userKey, bits, key); | ||
| 56 | } | ||
| 57 | |||
| 58 | int | ||
| 59 | aes_set_decrypt_key_internal(const unsigned char *userKey, const int bits, | ||
| 60 | AES_KEY *key) | ||
| 61 | { | ||
| 62 | if ((crypto_cpu_caps_amd64 & CRYPTO_CPU_CAPS_AMD64_AES) != 0) | ||
| 63 | return aesni_set_decrypt_key(userKey, bits, key); | ||
| 64 | |||
| 65 | return aes_set_decrypt_key_generic(userKey, bits, key); | ||
| 66 | } | ||
| 67 | |||
| 68 | void | ||
| 69 | aes_encrypt_internal(const unsigned char *in, unsigned char *out, | ||
| 70 | const AES_KEY *key) | ||
| 71 | { | ||
| 72 | if ((crypto_cpu_caps_amd64 & CRYPTO_CPU_CAPS_AMD64_AES) != 0) { | ||
| 73 | aesni_encrypt(in, out, key); | ||
| 74 | return; | ||
| 75 | } | ||
| 76 | |||
| 77 | aes_encrypt_generic(in, out, key); | ||
| 78 | } | ||
| 79 | |||
| 80 | void | ||
| 81 | aes_decrypt_internal(const unsigned char *in, unsigned char *out, | ||
| 82 | const AES_KEY *key) | ||
| 83 | { | ||
| 84 | if ((crypto_cpu_caps_amd64 & CRYPTO_CPU_CAPS_AMD64_AES) != 0) { | ||
| 85 | aesni_decrypt(in, out, key); | ||
| 86 | return; | ||
| 87 | } | ||
| 88 | |||
| 89 | aes_decrypt_generic(in, out, key); | ||
| 90 | } | ||
| 91 | |||
| 92 | void | ||
| 93 | aes_cbc_encrypt_internal(const unsigned char *in, unsigned char *out, | ||
| 94 | size_t len, const AES_KEY *key, unsigned char *ivec, const int enc) | ||
| 95 | { | ||
| 96 | if ((crypto_cpu_caps_amd64 & CRYPTO_CPU_CAPS_AMD64_AES) != 0) { | ||
| 97 | aesni_cbc_encrypt(in, out, len, key, ivec, enc); | ||
| 98 | return; | ||
| 99 | } | ||
| 100 | |||
| 101 | aes_cbc_encrypt_generic(in, out, len, key, ivec, enc); | ||
| 102 | } | ||
diff --git a/src/lib/libcrypto/aes/aes_i386.c b/src/lib/libcrypto/aes/aes_i386.c new file mode 100644 index 0000000000..0b5c89af70 --- /dev/null +++ b/src/lib/libcrypto/aes/aes_i386.c | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | /* $OpenBSD: aes_i386.c,v 1.1 2025/06/15 15:11:50 jsing Exp $ */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2025 Joel Sing <jsing@openbsd.org> | ||
| 4 | * | ||
| 5 | * Permission to use, copy, modify, and distribute this software for any | ||
| 6 | * purpose with or without fee is hereby granted, provided that the above | ||
| 7 | * copyright notice and this permission notice appear in all copies. | ||
| 8 | * | ||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <openssl/aes.h> | ||
| 19 | |||
| 20 | #include "crypto_arch.h" | ||
| 21 | |||
| 22 | int aes_set_encrypt_key_generic(const unsigned char *userKey, const int bits, | ||
| 23 | AES_KEY *key); | ||
| 24 | int aes_set_decrypt_key_generic(const unsigned char *userKey, const int bits, | ||
| 25 | AES_KEY *key); | ||
| 26 | |||
| 27 | void aes_encrypt_generic(const unsigned char *in, unsigned char *out, | ||
| 28 | const AES_KEY *key); | ||
| 29 | void aes_decrypt_generic(const unsigned char *in, unsigned char *out, | ||
| 30 | const AES_KEY *key); | ||
| 31 | |||
| 32 | void aes_cbc_encrypt_generic(const unsigned char *in, unsigned char *out, | ||
| 33 | size_t len, const AES_KEY *key, unsigned char *ivec, const int enc); | ||
| 34 | |||
| 35 | int aesni_set_encrypt_key(const unsigned char *userKey, int bits, | ||
| 36 | AES_KEY *key); | ||
| 37 | int aesni_set_decrypt_key(const unsigned char *userKey, int bits, | ||
| 38 | AES_KEY *key); | ||
| 39 | |||
| 40 | void aesni_encrypt(const unsigned char *in, unsigned char *out, | ||
| 41 | const AES_KEY *key); | ||
| 42 | void aesni_decrypt(const unsigned char *in, unsigned char *out, | ||
| 43 | const AES_KEY *key); | ||
| 44 | |||
| 45 | void aesni_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||
| 46 | size_t len, const AES_KEY *key, unsigned char *ivec, const int enc); | ||
| 47 | |||
| 48 | int | ||
| 49 | aes_set_encrypt_key_internal(const unsigned char *userKey, const int bits, | ||
| 50 | AES_KEY *key) | ||
| 51 | { | ||
| 52 | if ((crypto_cpu_caps_i386 & CRYPTO_CPU_CAPS_I386_AES) != 0) | ||
| 53 | return aesni_set_encrypt_key(userKey, bits, key); | ||
| 54 | |||
| 55 | return aes_set_encrypt_key_generic(userKey, bits, key); | ||
| 56 | } | ||
| 57 | |||
| 58 | int | ||
| 59 | aes_set_decrypt_key_internal(const unsigned char *userKey, const int bits, | ||
| 60 | AES_KEY *key) | ||
| 61 | { | ||
| 62 | if ((crypto_cpu_caps_i386 & CRYPTO_CPU_CAPS_I386_AES) != 0) | ||
| 63 | return aesni_set_decrypt_key(userKey, bits, key); | ||
| 64 | |||
| 65 | return aes_set_decrypt_key_generic(userKey, bits, key); | ||
| 66 | } | ||
| 67 | |||
| 68 | void | ||
| 69 | aes_encrypt_internal(const unsigned char *in, unsigned char *out, | ||
| 70 | const AES_KEY *key) | ||
| 71 | { | ||
| 72 | if ((crypto_cpu_caps_i386 & CRYPTO_CPU_CAPS_I386_AES) != 0) { | ||
| 73 | aesni_encrypt(in, out, key); | ||
| 74 | return; | ||
| 75 | } | ||
| 76 | |||
| 77 | aes_encrypt_generic(in, out, key); | ||
| 78 | } | ||
| 79 | |||
| 80 | void | ||
| 81 | aes_decrypt_internal(const unsigned char *in, unsigned char *out, | ||
| 82 | const AES_KEY *key) | ||
| 83 | { | ||
| 84 | if ((crypto_cpu_caps_i386 & CRYPTO_CPU_CAPS_I386_AES) != 0) { | ||
| 85 | aesni_decrypt(in, out, key); | ||
| 86 | return; | ||
| 87 | } | ||
| 88 | |||
| 89 | aes_decrypt_generic(in, out, key); | ||
| 90 | } | ||
| 91 | |||
| 92 | void | ||
| 93 | aes_cbc_encrypt_internal(const unsigned char *in, unsigned char *out, | ||
| 94 | size_t len, const AES_KEY *key, unsigned char *ivec, const int enc) | ||
| 95 | { | ||
| 96 | if ((crypto_cpu_caps_i386 & CRYPTO_CPU_CAPS_I386_AES) != 0) { | ||
| 97 | aesni_cbc_encrypt(in, out, len, key, ivec, enc); | ||
| 98 | return; | ||
| 99 | } | ||
| 100 | |||
| 101 | aes_cbc_encrypt_generic(in, out, len, key, ivec, enc); | ||
| 102 | } | ||
diff --git a/src/lib/libcrypto/aes/asm/aes-586.pl b/src/lib/libcrypto/aes/asm/aes-586.pl index 364099d4d3..402a1a3c46 100644 --- a/src/lib/libcrypto/aes/asm/aes-586.pl +++ b/src/lib/libcrypto/aes/asm/aes-586.pl | |||
| @@ -1158,8 +1158,8 @@ sub enclast() | |||
| 1158 | &data_word(0x00000000, 0x00000000, 0x00000000, 0x00000000); | 1158 | &data_word(0x00000000, 0x00000000, 0x00000000, 0x00000000); |
| 1159 | &previous(); | 1159 | &previous(); |
| 1160 | 1160 | ||
| 1161 | # void aes_encrypt_internal(const void *inp, void *out, const AES_KEY *key); | 1161 | # void aes_encrypt_generic(const void *inp, void *out, const AES_KEY *key); |
| 1162 | &function_begin("aes_encrypt_internal"); | 1162 | &function_begin("aes_encrypt_generic"); |
| 1163 | &mov ($acc,&wparam(0)); # load inp | 1163 | &mov ($acc,&wparam(0)); # load inp |
| 1164 | &mov ($key,&wparam(2)); # load key | 1164 | &mov ($key,&wparam(2)); # load key |
| 1165 | 1165 | ||
| @@ -1213,7 +1213,7 @@ sub enclast() | |||
| 1213 | &mov (&DWP(4,$acc),$s1); | 1213 | &mov (&DWP(4,$acc),$s1); |
| 1214 | &mov (&DWP(8,$acc),$s2); | 1214 | &mov (&DWP(8,$acc),$s2); |
| 1215 | &mov (&DWP(12,$acc),$s3); | 1215 | &mov (&DWP(12,$acc),$s3); |
| 1216 | &function_end("aes_encrypt_internal"); | 1216 | &function_end("aes_encrypt_generic"); |
| 1217 | 1217 | ||
| 1218 | #--------------------------------------------------------------------# | 1218 | #--------------------------------------------------------------------# |
| 1219 | 1219 | ||
| @@ -1947,8 +1947,8 @@ sub declast() | |||
| 1947 | &data_byte(0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d); | 1947 | &data_byte(0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d); |
| 1948 | &previous(); | 1948 | &previous(); |
| 1949 | 1949 | ||
| 1950 | # void aes_decrypt_internal(const void *inp, void *out, const AES_KEY *key); | 1950 | # void aes_decrypt_generic(const void *inp, void *out, const AES_KEY *key); |
| 1951 | &function_begin("aes_decrypt_internal"); | 1951 | &function_begin("aes_decrypt_generic"); |
| 1952 | &mov ($acc,&wparam(0)); # load inp | 1952 | &mov ($acc,&wparam(0)); # load inp |
| 1953 | &mov ($key,&wparam(2)); # load key | 1953 | &mov ($key,&wparam(2)); # load key |
| 1954 | 1954 | ||
| @@ -2002,9 +2002,9 @@ sub declast() | |||
| 2002 | &mov (&DWP(4,$acc),$s1); | 2002 | &mov (&DWP(4,$acc),$s1); |
| 2003 | &mov (&DWP(8,$acc),$s2); | 2003 | &mov (&DWP(8,$acc),$s2); |
| 2004 | &mov (&DWP(12,$acc),$s3); | 2004 | &mov (&DWP(12,$acc),$s3); |
| 2005 | &function_end("aes_decrypt_internal"); | 2005 | &function_end("aes_decrypt_generic"); |
| 2006 | 2006 | ||
| 2007 | # void aes_cbc_encrypt_internal(const void char *inp, unsigned char *out, | 2007 | # void aes_cbc_encrypt_generic(const void char *inp, unsigned char *out, |
| 2008 | # size_t length, const AES_KEY *key, unsigned char *ivp,const int enc); | 2008 | # size_t length, const AES_KEY *key, unsigned char *ivp,const int enc); |
| 2009 | { | 2009 | { |
| 2010 | # stack frame layout | 2010 | # stack frame layout |
| @@ -2028,7 +2028,7 @@ my $ivec=&DWP(60,"esp"); # ivec[16] | |||
| 2028 | my $aes_key=&DWP(76,"esp"); # copy of aes_key | 2028 | my $aes_key=&DWP(76,"esp"); # copy of aes_key |
| 2029 | my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds | 2029 | my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds |
| 2030 | 2030 | ||
| 2031 | &function_begin("aes_cbc_encrypt_internal"); | 2031 | &function_begin("aes_cbc_encrypt_generic"); |
| 2032 | &mov ($s2 eq "ecx"? $s2 : "",&wparam(2)); # load len | 2032 | &mov ($s2 eq "ecx"? $s2 : "",&wparam(2)); # load len |
| 2033 | &cmp ($s2,0); | 2033 | &cmp ($s2,0); |
| 2034 | &je (&label("drop_out")); | 2034 | &je (&label("drop_out")); |
| @@ -2616,7 +2616,7 @@ my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds | |||
| 2616 | 2616 | ||
| 2617 | &mov ("esp",$_esp); | 2617 | &mov ("esp",$_esp); |
| 2618 | &popf (); | 2618 | &popf (); |
| 2619 | &function_end("aes_cbc_encrypt_internal"); | 2619 | &function_end("aes_cbc_encrypt_generic"); |
| 2620 | } | 2620 | } |
| 2621 | 2621 | ||
| 2622 | #------------------------------------------------------------------# | 2622 | #------------------------------------------------------------------# |
| @@ -2849,12 +2849,12 @@ sub enckey() | |||
| 2849 | &set_label("exit"); | 2849 | &set_label("exit"); |
| 2850 | &function_end("_x86_AES_set_encrypt_key"); | 2850 | &function_end("_x86_AES_set_encrypt_key"); |
| 2851 | 2851 | ||
| 2852 | # int aes_set_encrypt_key_internal(const unsigned char *userKey, const int bits, | 2852 | # int aes_set_encrypt_key_generic(const unsigned char *userKey, const int bits, |
| 2853 | # AES_KEY *key) | 2853 | # AES_KEY *key) |
| 2854 | &function_begin_B("aes_set_encrypt_key_internal"); | 2854 | &function_begin_B("aes_set_encrypt_key_generic"); |
| 2855 | &call ("_x86_AES_set_encrypt_key"); | 2855 | &call ("_x86_AES_set_encrypt_key"); |
| 2856 | &ret (); | 2856 | &ret (); |
| 2857 | &function_end_B("aes_set_encrypt_key_internal"); | 2857 | &function_end_B("aes_set_encrypt_key_generic"); |
| 2858 | 2858 | ||
| 2859 | sub deckey() | 2859 | sub deckey() |
| 2860 | { my ($i,$key,$tp1,$tp2,$tp4,$tp8) = @_; | 2860 | { my ($i,$key,$tp1,$tp2,$tp4,$tp8) = @_; |
| @@ -2911,9 +2911,9 @@ sub deckey() | |||
| 2911 | &mov (&DWP(4*$i,$key),$tp1); | 2911 | &mov (&DWP(4*$i,$key),$tp1); |
| 2912 | } | 2912 | } |
| 2913 | 2913 | ||
| 2914 | # int aes_set_decrypt_key_internal(const unsigned char *userKey, const int bits, | 2914 | # int aes_set_decrypt_key_generic(const unsigned char *userKey, const int bits, |
| 2915 | # AES_KEY *key) | 2915 | # AES_KEY *key) |
| 2916 | &function_begin_B("aes_set_decrypt_key_internal"); | 2916 | &function_begin_B("aes_set_decrypt_key_generic"); |
| 2917 | &call ("_x86_AES_set_encrypt_key"); | 2917 | &call ("_x86_AES_set_encrypt_key"); |
| 2918 | &cmp ("eax",0); | 2918 | &cmp ("eax",0); |
| 2919 | &je (&label("proceed")); | 2919 | &je (&label("proceed")); |
| @@ -2969,6 +2969,6 @@ sub deckey() | |||
| 2969 | &jb (&label("permute")); | 2969 | &jb (&label("permute")); |
| 2970 | 2970 | ||
| 2971 | &xor ("eax","eax"); # return success | 2971 | &xor ("eax","eax"); # return success |
| 2972 | &function_end("aes_set_decrypt_key_internal"); | 2972 | &function_end("aes_set_decrypt_key_generic"); |
| 2973 | 2973 | ||
| 2974 | &asm_finish(); | 2974 | &asm_finish(); |
diff --git a/src/lib/libcrypto/aes/asm/aes-x86_64.pl b/src/lib/libcrypto/aes/asm/aes-x86_64.pl index 324c4a2be2..2c73627546 100755 --- a/src/lib/libcrypto/aes/asm/aes-x86_64.pl +++ b/src/lib/libcrypto/aes/asm/aes-x86_64.pl | |||
| @@ -586,15 +586,15 @@ $code.=<<___; | |||
| 586 | .size _x86_64_AES_encrypt_compact,.-_x86_64_AES_encrypt_compact | 586 | .size _x86_64_AES_encrypt_compact,.-_x86_64_AES_encrypt_compact |
| 587 | ___ | 587 | ___ |
| 588 | 588 | ||
| 589 | # void aes_encrypt_internal(const void *inp, void *out, const AES_KEY *key); | 589 | # void aes_encrypt_generic(const void *inp, void *out, const AES_KEY *key); |
| 590 | $code.=<<___; | 590 | $code.=<<___; |
| 591 | .globl aes_encrypt_internal | 591 | .globl aes_encrypt_generic |
| 592 | .type aes_encrypt_internal,\@function,3 | 592 | .type aes_encrypt_generic,\@function,3 |
| 593 | .align 16 | 593 | .align 16 |
| 594 | .globl asm_AES_encrypt | 594 | .globl asm_AES_encrypt |
| 595 | .hidden asm_AES_encrypt | 595 | .hidden asm_AES_encrypt |
| 596 | asm_AES_encrypt: | 596 | asm_AES_encrypt: |
| 597 | aes_encrypt_internal: | 597 | aes_encrypt_generic: |
| 598 | _CET_ENDBR | 598 | _CET_ENDBR |
| 599 | push %rbx | 599 | push %rbx |
| 600 | push %rbp | 600 | push %rbp |
| @@ -655,7 +655,7 @@ aes_encrypt_internal: | |||
| 655 | lea 48(%rsi),%rsp | 655 | lea 48(%rsi),%rsp |
| 656 | .Lenc_epilogue: | 656 | .Lenc_epilogue: |
| 657 | ret | 657 | ret |
| 658 | .size aes_encrypt_internal,.-aes_encrypt_internal | 658 | .size aes_encrypt_generic,.-aes_encrypt_generic |
| 659 | ___ | 659 | ___ |
| 660 | 660 | ||
| 661 | #------------------------------------------------------------------# | 661 | #------------------------------------------------------------------# |
| @@ -1188,15 +1188,15 @@ $code.=<<___; | |||
| 1188 | .size _x86_64_AES_decrypt_compact,.-_x86_64_AES_decrypt_compact | 1188 | .size _x86_64_AES_decrypt_compact,.-_x86_64_AES_decrypt_compact |
| 1189 | ___ | 1189 | ___ |
| 1190 | 1190 | ||
| 1191 | # void aes_decrypt_internal(const void *inp, void *out, const AES_KEY *key); | 1191 | # void aes_decrypt_generic(const void *inp, void *out, const AES_KEY *key); |
| 1192 | $code.=<<___; | 1192 | $code.=<<___; |
| 1193 | .globl aes_decrypt_internal | 1193 | .globl aes_decrypt_generic |
| 1194 | .type aes_decrypt_internal,\@function,3 | 1194 | .type aes_decrypt_generic,\@function,3 |
| 1195 | .align 16 | 1195 | .align 16 |
| 1196 | .globl asm_AES_decrypt | 1196 | .globl asm_AES_decrypt |
| 1197 | .hidden asm_AES_decrypt | 1197 | .hidden asm_AES_decrypt |
| 1198 | asm_AES_decrypt: | 1198 | asm_AES_decrypt: |
| 1199 | aes_decrypt_internal: | 1199 | aes_decrypt_generic: |
| 1200 | _CET_ENDBR | 1200 | _CET_ENDBR |
| 1201 | push %rbx | 1201 | push %rbx |
| 1202 | push %rbp | 1202 | push %rbp |
| @@ -1259,7 +1259,7 @@ aes_decrypt_internal: | |||
| 1259 | lea 48(%rsi),%rsp | 1259 | lea 48(%rsi),%rsp |
| 1260 | .Ldec_epilogue: | 1260 | .Ldec_epilogue: |
| 1261 | ret | 1261 | ret |
| 1262 | .size aes_decrypt_internal,.-aes_decrypt_internal | 1262 | .size aes_decrypt_generic,.-aes_decrypt_generic |
| 1263 | ___ | 1263 | ___ |
| 1264 | #------------------------------------------------------------------# | 1264 | #------------------------------------------------------------------# |
| 1265 | 1265 | ||
| @@ -1290,13 +1290,13 @@ $code.=<<___; | |||
| 1290 | ___ | 1290 | ___ |
| 1291 | } | 1291 | } |
| 1292 | 1292 | ||
| 1293 | # int aes_set_encrypt_key_internal(const unsigned char *userKey, const int bits, | 1293 | # int aes_set_encrypt_key_generic(const unsigned char *userKey, const int bits, |
| 1294 | # AES_KEY *key) | 1294 | # AES_KEY *key) |
| 1295 | $code.=<<___; | 1295 | $code.=<<___; |
| 1296 | .globl aes_set_encrypt_key_internal | 1296 | .globl aes_set_encrypt_key_generic |
| 1297 | .type aes_set_encrypt_key_internal,\@function,3 | 1297 | .type aes_set_encrypt_key_generic,\@function,3 |
| 1298 | .align 16 | 1298 | .align 16 |
| 1299 | aes_set_encrypt_key_internal: | 1299 | aes_set_encrypt_key_generic: |
| 1300 | _CET_ENDBR | 1300 | _CET_ENDBR |
| 1301 | push %rbx | 1301 | push %rbx |
| 1302 | push %rbp | 1302 | push %rbp |
| @@ -1318,7 +1318,7 @@ aes_set_encrypt_key_internal: | |||
| 1318 | add \$56,%rsp | 1318 | add \$56,%rsp |
| 1319 | .Lenc_key_epilogue: | 1319 | .Lenc_key_epilogue: |
| 1320 | ret | 1320 | ret |
| 1321 | .size aes_set_encrypt_key_internal,.-aes_set_encrypt_key_internal | 1321 | .size aes_set_encrypt_key_generic,.-aes_set_encrypt_key_generic |
| 1322 | 1322 | ||
| 1323 | .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent | 1323 | .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent |
| 1324 | .align 16 | 1324 | .align 16 |
| @@ -1562,13 +1562,13 @@ $code.=<<___; | |||
| 1562 | ___ | 1562 | ___ |
| 1563 | } | 1563 | } |
| 1564 | 1564 | ||
| 1565 | # int aes_set_decrypt_key_internal(const unsigned char *userKey, const int bits, | 1565 | # int aes_set_decrypt_key_generic(const unsigned char *userKey, const int bits, |
| 1566 | # AES_KEY *key) | 1566 | # AES_KEY *key) |
| 1567 | $code.=<<___; | 1567 | $code.=<<___; |
| 1568 | .globl aes_set_decrypt_key_internal | 1568 | .globl aes_set_decrypt_key_generic |
| 1569 | .type aes_set_decrypt_key_internal,\@function,3 | 1569 | .type aes_set_decrypt_key_generic,\@function,3 |
| 1570 | .align 16 | 1570 | .align 16 |
| 1571 | aes_set_decrypt_key_internal: | 1571 | aes_set_decrypt_key_generic: |
| 1572 | _CET_ENDBR | 1572 | _CET_ENDBR |
| 1573 | push %rbx | 1573 | push %rbx |
| 1574 | push %rbp | 1574 | push %rbp |
| @@ -1638,10 +1638,10 @@ $code.=<<___; | |||
| 1638 | add \$56,%rsp | 1638 | add \$56,%rsp |
| 1639 | .Ldec_key_epilogue: | 1639 | .Ldec_key_epilogue: |
| 1640 | ret | 1640 | ret |
| 1641 | .size aes_set_decrypt_key_internal,.-aes_set_decrypt_key_internal | 1641 | .size aes_set_decrypt_key_generic,.-aes_set_decrypt_key_generic |
| 1642 | ___ | 1642 | ___ |
| 1643 | 1643 | ||
| 1644 | # void aes_cbc_encrypt_internal(const void char *inp, unsigned char *out, | 1644 | # void aes_cbc_encrypt_generic(const void char *inp, unsigned char *out, |
| 1645 | # size_t length, const AES_KEY *key, unsigned char *ivp,const int enc); | 1645 | # size_t length, const AES_KEY *key, unsigned char *ivp,const int enc); |
| 1646 | { | 1646 | { |
| 1647 | # stack frame layout | 1647 | # stack frame layout |
| @@ -1659,15 +1659,15 @@ my $aes_key="80(%rsp)"; # copy of aes_key | |||
| 1659 | my $mark="80+240(%rsp)"; # copy of aes_key->rounds | 1659 | my $mark="80+240(%rsp)"; # copy of aes_key->rounds |
| 1660 | 1660 | ||
| 1661 | $code.=<<___; | 1661 | $code.=<<___; |
| 1662 | .globl aes_cbc_encrypt_internal | 1662 | .globl aes_cbc_encrypt_generic |
| 1663 | .type aes_cbc_encrypt_internal,\@function,6 | 1663 | .type aes_cbc_encrypt_generic,\@function,6 |
| 1664 | .align 16 | 1664 | .align 16 |
| 1665 | .extern OPENSSL_ia32cap_P | 1665 | .extern OPENSSL_ia32cap_P |
| 1666 | .hidden OPENSSL_ia32cap_P | 1666 | .hidden OPENSSL_ia32cap_P |
| 1667 | .globl asm_AES_cbc_encrypt | 1667 | .globl asm_AES_cbc_encrypt |
| 1668 | .hidden asm_AES_cbc_encrypt | 1668 | .hidden asm_AES_cbc_encrypt |
| 1669 | asm_AES_cbc_encrypt: | 1669 | asm_AES_cbc_encrypt: |
| 1670 | aes_cbc_encrypt_internal: | 1670 | aes_cbc_encrypt_generic: |
| 1671 | _CET_ENDBR | 1671 | _CET_ENDBR |
| 1672 | cmp \$0,%rdx # check length | 1672 | cmp \$0,%rdx # check length |
| 1673 | je .Lcbc_epilogue | 1673 | je .Lcbc_epilogue |
| @@ -2117,7 +2117,7 @@ aes_cbc_encrypt_internal: | |||
| 2117 | popfq | 2117 | popfq |
| 2118 | .Lcbc_epilogue: | 2118 | .Lcbc_epilogue: |
| 2119 | ret | 2119 | ret |
| 2120 | .size aes_cbc_encrypt_internal,.-aes_cbc_encrypt_internal | 2120 | .size aes_cbc_encrypt_generic,.-aes_cbc_encrypt_generic |
| 2121 | ___ | 2121 | ___ |
| 2122 | } | 2122 | } |
| 2123 | 2123 | ||
| @@ -2782,45 +2782,45 @@ cbc_se_handler: | |||
| 2782 | 2782 | ||
| 2783 | .section .pdata | 2783 | .section .pdata |
| 2784 | .align 4 | 2784 | .align 4 |
| 2785 | .rva .LSEH_begin_aes_encrypt_internal | 2785 | .rva .LSEH_begin_aes_encrypt_generic |
| 2786 | .rva .LSEH_end_aes_encrypt_internal | 2786 | .rva .LSEH_end_aes_encrypt_generic |
| 2787 | .rva .LSEH_info_aes_encrypt_internal | 2787 | .rva .LSEH_info_aes_encrypt_generic |
| 2788 | 2788 | ||
| 2789 | .rva .LSEH_begin_aes_decrypt_internal | 2789 | .rva .LSEH_begin_aes_decrypt_generic |
| 2790 | .rva .LSEH_end_aes_decrypt_internal | 2790 | .rva .LSEH_end_aes_decrypt_generic |
| 2791 | .rva .LSEH_info_aes_decrypt_internal | 2791 | .rva .LSEH_info_aes_decrypt_generic |
| 2792 | 2792 | ||
| 2793 | .rva .LSEH_begin_aes_set_encrypt_key_internal | 2793 | .rva .LSEH_begin_aes_set_encrypt_key_generic |
| 2794 | .rva .LSEH_end_aes_set_encrypt_key_internal | 2794 | .rva .LSEH_end_aes_set_encrypt_key_generic |
| 2795 | .rva .LSEH_info_aes_set_encrypt_key_internal | 2795 | .rva .LSEH_info_aes_set_encrypt_key_generic |
| 2796 | 2796 | ||
| 2797 | .rva .LSEH_begin_aes_set_decrypt_key_internal | 2797 | .rva .LSEH_begin_aes_set_decrypt_key_generic |
| 2798 | .rva .LSEH_end_aes_set_decrypt_key_internal | 2798 | .rva .LSEH_end_aes_set_decrypt_key_generic |
| 2799 | .rva .LSEH_info_aes_set_decrypt_key_internal | 2799 | .rva .LSEH_info_aes_set_decrypt_key_generic |
| 2800 | 2800 | ||
| 2801 | .rva .LSEH_begin_aes_cbc_encrypt_internal | 2801 | .rva .LSEH_begin_aes_cbc_encrypt_generic |
| 2802 | .rva .LSEH_end_aes_cbc_encrypt_internal | 2802 | .rva .LSEH_end_aes_cbc_encrypt_generic |
| 2803 | .rva .LSEH_info_aes_cbc_encrypt_internal | 2803 | .rva .LSEH_info_aes_cbc_encrypt_generic |
| 2804 | 2804 | ||
| 2805 | .section .xdata | 2805 | .section .xdata |
| 2806 | .align 8 | 2806 | .align 8 |
| 2807 | .LSEH_info_aes_encrypt_internal: | 2807 | .LSEH_info_aes_encrypt_generic: |
| 2808 | .byte 9,0,0,0 | 2808 | .byte 9,0,0,0 |
| 2809 | .rva block_se_handler | 2809 | .rva block_se_handler |
| 2810 | .rva .Lenc_prologue,.Lenc_epilogue # HandlerData[] | 2810 | .rva .Lenc_prologue,.Lenc_epilogue # HandlerData[] |
| 2811 | .LSEH_info_aes_decrypt_internal: | 2811 | .LSEH_info_aes_decrypt_generic: |
| 2812 | .byte 9,0,0,0 | 2812 | .byte 9,0,0,0 |
| 2813 | .rva block_se_handler | 2813 | .rva block_se_handler |
| 2814 | .rva .Ldec_prologue,.Ldec_epilogue # HandlerData[] | 2814 | .rva .Ldec_prologue,.Ldec_epilogue # HandlerData[] |
| 2815 | .LSEH_info_aes_set_encrypt_key_internal: | 2815 | .LSEH_info_aes_set_encrypt_key_generic: |
| 2816 | .byte 9,0,0,0 | 2816 | .byte 9,0,0,0 |
| 2817 | .rva key_se_handler | 2817 | .rva key_se_handler |
| 2818 | .rva .Lenc_key_prologue,.Lenc_key_epilogue # HandlerData[] | 2818 | .rva .Lenc_key_prologue,.Lenc_key_epilogue # HandlerData[] |
| 2819 | .LSEH_info_aes_set_decrypt_key_internal: | 2819 | .LSEH_info_aes_set_decrypt_key_generic: |
| 2820 | .byte 9,0,0,0 | 2820 | .byte 9,0,0,0 |
| 2821 | .rva key_se_handler | 2821 | .rva key_se_handler |
| 2822 | .rva .Ldec_key_prologue,.Ldec_key_epilogue # HandlerData[] | 2822 | .rva .Ldec_key_prologue,.Ldec_key_epilogue # HandlerData[] |
| 2823 | .LSEH_info_aes_cbc_encrypt_internal: | 2823 | .LSEH_info_aes_cbc_encrypt_generic: |
| 2824 | .byte 9,0,0,0 | 2824 | .byte 9,0,0,0 |
| 2825 | .rva cbc_se_handler | 2825 | .rva cbc_se_handler |
| 2826 | ___ | 2826 | ___ |
diff --git a/src/lib/libcrypto/arch/amd64/Makefile.inc b/src/lib/libcrypto/arch/amd64/Makefile.inc index b923653532..5ecf8f1390 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.39 2025/06/09 13:51:48 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.40 2025/06/15 15:11:50 jsing Exp $ |
| 2 | 2 | ||
| 3 | # amd64-specific libcrypto build rules | 3 | # amd64-specific libcrypto build rules |
| 4 | 4 | ||
| @@ -11,6 +11,8 @@ SRCS += crypto_cpu_caps.c | |||
| 11 | CFLAGS+= -DAES_ASM | 11 | CFLAGS+= -DAES_ASM |
| 12 | SSLASM+= aes aes-x86_64 | 12 | SSLASM+= aes aes-x86_64 |
| 13 | SSLASM+= aes aesni-x86_64 | 13 | SSLASM+= aes aesni-x86_64 |
| 14 | SRCS += aes_amd64.c | ||
| 15 | |||
| 14 | # bn | 16 | # bn |
| 15 | CFLAGS+= -DRSA_ASM | 17 | CFLAGS+= -DRSA_ASM |
| 16 | SSLASM+= bn modexp512-x86_64 | 18 | SSLASM+= bn modexp512-x86_64 |
diff --git a/src/lib/libcrypto/arch/i386/Makefile.inc b/src/lib/libcrypto/arch/i386/Makefile.inc index e593c31467..8747d389ac 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.29 2025/06/09 14:28:33 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.30 2025/06/15 15:11:50 jsing Exp $ |
| 2 | 2 | ||
| 3 | # i386-specific libcrypto build rules | 3 | # i386-specific libcrypto build rules |
| 4 | 4 | ||
| @@ -11,6 +11,8 @@ SRCS += crypto_cpu_caps.c | |||
| 11 | CFLAGS+= -DAES_ASM | 11 | CFLAGS+= -DAES_ASM |
| 12 | SSLASM+= aes aes-586 | 12 | SSLASM+= aes aes-586 |
| 13 | SSLASM+= aes aesni-x86 | 13 | SSLASM+= aes aesni-x86 |
| 14 | SRCS += aes_i386.c | ||
| 15 | |||
| 14 | # bn | 16 | # bn |
| 15 | SSLASM+= bn bn-586 | 17 | SSLASM+= bn bn-586 |
| 16 | SSLASM+= bn co-586 | 18 | SSLASM+= bn co-586 |
