summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/arch/amd64
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/arch/amd64')
-rw-r--r--src/lib/libcrypto/arch/amd64/Makefile.inc13
-rw-r--r--src/lib/libcrypto/arch/amd64/crypto_arch.h15
-rw-r--r--src/lib/libcrypto/arch/amd64/crypto_cpu_caps.c16
-rw-r--r--src/lib/libcrypto/arch/amd64/opensslconf.h126
4 files changed, 25 insertions, 145 deletions
diff --git a/src/lib/libcrypto/arch/amd64/Makefile.inc b/src/lib/libcrypto/arch/amd64/Makefile.inc
index b1a6563931..649c507189 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.41 2025/06/28 12:39:10 jsing Exp $
2 2
3# amd64-specific libcrypto build rules 3# amd64-specific libcrypto build rules
4 4
@@ -10,13 +10,10 @@ SRCS += crypto_cpu_caps.c
10# aes 10# aes
11CFLAGS+= -DAES_ASM 11CFLAGS+= -DAES_ASM
12SSLASM+= aes aes-x86_64 12SSLASM+= aes aes-x86_64
13CFLAGS+= -DBSAES_ASM
14SSLASM+= aes bsaes-x86_64
15CFLAGS+= -DVPAES_ASM
16SSLASM+= aes vpaes-x86_64
17SSLASM+= aes aesni-x86_64 13SSLASM+= aes aesni-x86_64
14SRCS += aes_amd64.c
15
18# bn 16# bn
19CFLAGS+= -DOPENSSL_IA32_SSE2
20CFLAGS+= -DRSA_ASM 17CFLAGS+= -DRSA_ASM
21SSLASM+= bn modexp512-x86_64 18SSLASM+= bn modexp512-x86_64
22CFLAGS+= -DOPENSSL_BN_ASM_MONT 19CFLAGS+= -DOPENSSL_BN_ASM_MONT
@@ -41,11 +38,15 @@ SRCS += word_clz.S
41# md5 38# md5
42CFLAGS+= -DMD5_ASM 39CFLAGS+= -DMD5_ASM
43SRCS+= md5_amd64_generic.S 40SRCS+= md5_amd64_generic.S
41
44# modes 42# modes
45CFLAGS+= -DGHASH_ASM 43CFLAGS+= -DGHASH_ASM
46SSLASM+= modes ghash-x86_64 44SSLASM+= modes ghash-x86_64
45SRCS += gcm128_amd64.c
46
47# rc4 47# rc4
48SSLASM+= rc4 rc4-x86_64 48SSLASM+= rc4 rc4-x86_64
49
49# ripemd 50# ripemd
50# sha 51# sha
51SRCS+= sha1_amd64.c 52SRCS+= sha1_amd64.c
diff --git a/src/lib/libcrypto/arch/amd64/crypto_arch.h b/src/lib/libcrypto/arch/amd64/crypto_arch.h
index 951374250d..e869fbba35 100644
--- a/src/lib/libcrypto/arch/amd64/crypto_arch.h
+++ b/src/lib/libcrypto/arch/amd64/crypto_arch.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_arch.h,v 1.5 2025/02/14 12:01:58 jsing Exp $ */ 1/* $OpenBSD: crypto_arch.h,v 1.13 2025/07/22 09:18:02 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -21,21 +21,28 @@
21#define HEADER_CRYPTO_ARCH_H 21#define HEADER_CRYPTO_ARCH_H
22 22
23#define HAVE_CRYPTO_CPU_CAPS_INIT 23#define HAVE_CRYPTO_CPU_CAPS_INIT
24#define HAVE_CRYPTO_CPU_CAPS_IA32
25 24
26#ifndef __ASSEMBLER__ 25#ifndef __ASSEMBLER__
27extern uint64_t crypto_cpu_caps_amd64; 26extern uint64_t crypto_cpu_caps_amd64;
28#endif 27#endif
29 28
30#define CRYPTO_CPU_CAPS_AMD64_SHA (1ULL << 0) 29#define CRYPTO_CPU_CAPS_AMD64_AES (1ULL << 0)
30#define CRYPTO_CPU_CAPS_AMD64_CLMUL (1ULL << 1)
31#define CRYPTO_CPU_CAPS_AMD64_SHA (1ULL << 2)
31 32
32#ifndef OPENSSL_NO_ASM 33#ifndef OPENSSL_NO_ASM
33 34
34#define HAVE_AES_CBC_ENCRYPT_INTERNAL
35#define HAVE_AES_SET_ENCRYPT_KEY_INTERNAL 35#define HAVE_AES_SET_ENCRYPT_KEY_INTERNAL
36#define HAVE_AES_SET_DECRYPT_KEY_INTERNAL 36#define HAVE_AES_SET_DECRYPT_KEY_INTERNAL
37#define HAVE_AES_ENCRYPT_INTERNAL 37#define HAVE_AES_ENCRYPT_INTERNAL
38#define HAVE_AES_DECRYPT_INTERNAL 38#define HAVE_AES_DECRYPT_INTERNAL
39#define HAVE_AES_CBC_ENCRYPT_INTERNAL
40#define HAVE_AES_CCM64_ENCRYPT_INTERNAL
41#define HAVE_AES_CTR32_ENCRYPT_INTERNAL
42#define HAVE_AES_ECB_ENCRYPT_INTERNAL
43#define HAVE_AES_XTS_ENCRYPT_INTERNAL
44
45#define HAVE_GCM128_INIT
39 46
40#define HAVE_RC4_INTERNAL 47#define HAVE_RC4_INTERNAL
41#define HAVE_RC4_SET_KEY_INTERNAL 48#define HAVE_RC4_SET_KEY_INTERNAL
diff --git a/src/lib/libcrypto/arch/amd64/crypto_cpu_caps.c b/src/lib/libcrypto/arch/amd64/crypto_cpu_caps.c
index 63b7b64cda..0bc440d34f 100644
--- a/src/lib/libcrypto/arch/amd64/crypto_cpu_caps.c
+++ b/src/lib/libcrypto/arch/amd64/crypto_cpu_caps.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_cpu_caps.c,v 1.4 2024/11/16 13:05:35 jsing Exp $ */ 1/* $OpenBSD: crypto_cpu_caps.c,v 1.7 2025/07/22 09:18:02 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -98,10 +98,14 @@ crypto_cpu_caps_init(void)
98 if ((edx & IA32CAP_MASK0_SSE2) != 0) 98 if ((edx & IA32CAP_MASK0_SSE2) != 0)
99 caps |= CPUCAP_MASK_SSE2; 99 caps |= CPUCAP_MASK_SSE2;
100 100
101 if ((ecx & IA32CAP_MASK1_AESNI) != 0) 101 if ((ecx & IA32CAP_MASK1_AESNI) != 0) {
102 caps |= CPUCAP_MASK_AESNI; 102 caps |= CPUCAP_MASK_AESNI;
103 if ((ecx & IA32CAP_MASK1_PCLMUL) != 0) 103 crypto_cpu_caps_amd64 |= CRYPTO_CPU_CAPS_AMD64_AES;
104 }
105 if ((ecx & IA32CAP_MASK1_PCLMUL) != 0) {
104 caps |= CPUCAP_MASK_PCLMUL; 106 caps |= CPUCAP_MASK_PCLMUL;
107 crypto_cpu_caps_amd64 |= CRYPTO_CPU_CAPS_AMD64_CLMUL;
108 }
105 if ((ecx & IA32CAP_MASK1_SSSE3) != 0) 109 if ((ecx & IA32CAP_MASK1_SSSE3) != 0)
106 caps |= CPUCAP_MASK_SSSE3; 110 caps |= CPUCAP_MASK_SSSE3;
107 111
@@ -126,9 +130,3 @@ crypto_cpu_caps_init(void)
126 130
127 OPENSSL_ia32cap_P = caps; 131 OPENSSL_ia32cap_P = caps;
128} 132}
129
130uint64_t
131crypto_cpu_caps_ia32(void)
132{
133 return OPENSSL_ia32cap_P;
134}
diff --git a/src/lib/libcrypto/arch/amd64/opensslconf.h b/src/lib/libcrypto/arch/amd64/opensslconf.h
index cc193762f1..868066c75e 100644
--- a/src/lib/libcrypto/arch/amd64/opensslconf.h
+++ b/src/lib/libcrypto/arch/amd64/opensslconf.h
@@ -1,9 +1,4 @@
1#include <openssl/opensslfeatures.h> 1#include <openssl/opensslfeatures.h>
2/* crypto/opensslconf.h.in */
3
4#if defined(HEADER_CRYPTO_LOCAL_H) && !defined(OPENSSLDIR)
5#define OPENSSLDIR "/etc/ssl"
6#endif
7 2
8#undef OPENSSL_EXPORT_VAR_AS_FUNCTION 3#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
9 4
@@ -17,30 +12,7 @@
17#endif 12#endif
18#endif 13#endif
19 14
20#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
21#define IDEA_INT unsigned int
22#endif
23
24#if defined(HEADER_MD2_H) && !defined(MD2_INT)
25#define MD2_INT unsigned int
26#endif
27
28#if defined(HEADER_RC2_H) && !defined(RC2_INT)
29/* I need to put in a mod for the alpha - eay */
30#define RC2_INT unsigned int
31#endif
32
33#if defined(HEADER_RC4_H) 15#if defined(HEADER_RC4_H)
34#if !defined(RC4_INT)
35/* using int types make the structure larger but make the code faster
36 * on most boxes I have tested - up to %20 faster. */
37/*
38 * I don't know what does "most" mean, but declaring "int" is a must on:
39 * - Intel P6 because partial register stalls are very expensive;
40 * - elder Alpha because it lacks byte load/store instructions;
41 */
42#define RC4_INT unsigned int
43#endif
44#if !defined(RC4_CHUNK) 16#if !defined(RC4_CHUNK)
45/* 17/*
46 * This enables code handling data aligned at natural CPU word 18 * This enables code handling data aligned at natural CPU word
@@ -49,101 +21,3 @@
49#define RC4_CHUNK unsigned long 21#define RC4_CHUNK unsigned long
50#endif 22#endif
51#endif 23#endif
52
53#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG)
54/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
55 * %20 speed up (longs are 8 bytes, int's are 4). */
56#ifndef DES_LONG
57#define DES_LONG unsigned int
58#endif
59#endif
60
61#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
62#define CONFIG_HEADER_BN_H
63#undef BN_LLONG
64
65/* Should we define BN_DIV2W here? */
66
67/* Only one for the following should be defined */
68#define SIXTY_FOUR_BIT_LONG
69#undef SIXTY_FOUR_BIT
70#undef THIRTY_TWO_BIT
71#endif
72
73#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
74#define CONFIG_HEADER_BF_LOCL_H
75#undef BF_PTR
76#endif /* HEADER_BF_LOCL_H */
77
78#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
79#define CONFIG_HEADER_DES_LOCL_H
80#ifndef DES_DEFAULT_OPTIONS
81/* the following is tweaked from a config script, that is why it is a
82 * protected undef/define */
83#ifndef DES_PTR
84#undef DES_PTR
85#endif
86
87/* This helps C compiler generate the correct code for multiple functional
88 * units. It reduces register dependencies at the expense of 2 more
89 * registers */
90#ifndef DES_RISC1
91#undef DES_RISC1
92#endif
93
94#ifndef DES_RISC2
95#undef DES_RISC2
96#endif
97
98#if defined(DES_RISC1) && defined(DES_RISC2)
99YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
100#endif
101
102/* Unroll the inner loop, this sometimes helps, sometimes hinders.
103 * Very much CPU dependent */
104#ifndef DES_UNROLL
105#define DES_UNROLL
106#endif
107
108/* These default values were supplied by
109 * Peter Gutman <pgut001@cs.auckland.ac.nz>
110 * They are only used if nothing else has been defined */
111#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
112/* Special defines which change the way the code is built depending on the
113 CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
114 even newer MIPS CPU's, but at the moment one size fits all for
115 optimization options. Older Sparc's work better with only UNROLL, but
116 there's no way to tell at compile time what it is you're running on */
117
118#if defined( sun ) /* Newer Sparc's */
119# define DES_PTR
120# define DES_RISC1
121# define DES_UNROLL
122#elif defined( __ultrix ) /* Older MIPS */
123# define DES_PTR
124# define DES_RISC2
125# define DES_UNROLL
126#elif defined( __osf1__ ) /* Alpha */
127# define DES_PTR
128# define DES_RISC2
129#elif defined ( _AIX ) /* RS6000 */
130 /* Unknown */
131#elif defined( __hpux ) /* HP-PA */
132 /* Unknown */
133#elif defined( __aux ) /* 68K */
134 /* Unknown */
135#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
136# define DES_UNROLL
137#elif defined( __sgi ) /* Newer MIPS */
138# define DES_PTR
139# define DES_RISC2
140# define DES_UNROLL
141#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */
142# define DES_PTR
143# define DES_RISC1
144# define DES_UNROLL
145#endif /* Systems-specific speed defines */
146#endif
147
148#endif /* DES_DEFAULT_OPTIONS */
149#endif /* HEADER_DES_LOCL_H */