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 /src | |
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@
Diffstat (limited to 'src')
-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 |