summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp
diff options
context:
space:
mode:
authormiod <>2016-11-04 17:30:30 +0000
committermiod <>2016-11-04 17:30:30 +0000
commit723502d9588ba0e1cc08af1b12654917da74d440 (patch)
tree77b413175d422148cfb0ef7b2062340230aa5413 /src/lib/libcrypto/evp
parent391f8ce21bb7929810460a73e2fde2c80540848d (diff)
downloadopenbsd-723502d9588ba0e1cc08af1b12654917da74d440.tar.gz
openbsd-723502d9588ba0e1cc08af1b12654917da74d440.tar.bz2
openbsd-723502d9588ba0e1cc08af1b12654917da74d440.zip
Replace all uses of magic numbers when operating on OPENSSL_ia32_P[] by
meaningful constants in a private header file, so that reviewers can actually get a chance to figure out what the code is attempting to do without knowing all cpuid bits. While there, turn it from an array of two 32-bit ints into a properly aligned 64-bit int. Use of OPENSSL_ia32_P is now restricted to the assembler parts. C code will now always use OPENSSL_cpu_caps() and check for the proper bits in the whole 64-bit word it returns. i386 tests and ok jsing@
Diffstat (limited to 'src/lib/libcrypto/evp')
-rw-r--r--src/lib/libcrypto/evp/e_aes.c8
-rw-r--r--src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c11
-rw-r--r--src/lib/libcrypto/evp/e_rc4_hmac_md5.c8
3 files changed, 13 insertions, 14 deletions
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c
index 25199dca36..b20543a90c 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.30 2016/11/04 13:56:05 miod Exp $ */ 1/* $OpenBSD: e_aes.c,v 1.31 2016/11/04 17:30:30 miod 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 *
@@ -150,10 +150,10 @@ void AES_xts_decrypt(const char *inp, char *out, size_t len,
150 defined(_M_AMD64) || defined(_M_X64) || \ 150 defined(_M_AMD64) || defined(_M_X64) || \
151 defined(__INTEL__) ) 151 defined(__INTEL__) )
152 152
153extern unsigned int OPENSSL_ia32cap_P[]; 153#include "x86_arch.h"
154 154
155#ifdef VPAES_ASM 155#ifdef VPAES_ASM
156#define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) 156#define VPAES_CAPABLE (OPENSSL_cpu_caps() & CPUCAP_MASK_SSSE3)
157#endif 157#endif
158#ifdef BSAES_ASM 158#ifdef BSAES_ASM
159#define BSAES_CAPABLE VPAES_CAPABLE 159#define BSAES_CAPABLE VPAES_CAPABLE
@@ -161,7 +161,7 @@ extern unsigned int OPENSSL_ia32cap_P[];
161/* 161/*
162 * AES-NI section 162 * AES-NI section
163 */ 163 */
164#define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) 164#define AESNI_CAPABLE (OPENSSL_cpu_caps() & CPUCAP_MASK_AESNI)
165 165
166int aesni_set_encrypt_key(const unsigned char *userKey, int bits, 166int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
167 AES_KEY *key); 167 AES_KEY *key);
diff --git a/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c b/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c
index 8574823aed..3f82cf5967 100644
--- a/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c
+++ b/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_aes_cbc_hmac_sha1.c,v 1.12 2016/05/04 15:01:33 tedu Exp $ */ 1/* $OpenBSD: e_aes_cbc_hmac_sha1.c,v 1.13 2016/11/04 17:30:30 miod Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 2011-2013 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 2011-2013 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -87,13 +87,12 @@ typedef struct {
87 defined(_M_AMD64) || defined(_M_X64) || \ 87 defined(_M_AMD64) || defined(_M_X64) || \
88 defined(__INTEL__) ) 88 defined(__INTEL__) )
89 89
90#include "x86_arch.h"
91
90#if defined(__GNUC__) && __GNUC__>=2 92#if defined(__GNUC__) && __GNUC__>=2
91# define BSWAP(x) ({ unsigned int r=(x); asm ("bswapl %0":"=r"(r):"0"(r)); r; }) 93# define BSWAP(x) ({ unsigned int r=(x); asm ("bswapl %0":"=r"(r):"0"(r)); r; })
92#endif 94#endif
93 95
94extern unsigned int OPENSSL_ia32cap_P[2];
95#define AESNI_CAPABLE (1<<(57-32))
96
97int aesni_set_encrypt_key(const unsigned char *userKey, int bits, AES_KEY *key); 96int aesni_set_encrypt_key(const unsigned char *userKey, int bits, AES_KEY *key);
98int aesni_set_decrypt_key(const unsigned char *userKey, int bits, AES_KEY *key); 97int aesni_set_decrypt_key(const unsigned char *userKey, int bits, AES_KEY *key);
99 98
@@ -578,14 +577,14 @@ static EVP_CIPHER aesni_256_cbc_hmac_sha1_cipher = {
578const EVP_CIPHER * 577const EVP_CIPHER *
579EVP_aes_128_cbc_hmac_sha1(void) 578EVP_aes_128_cbc_hmac_sha1(void)
580{ 579{
581 return OPENSSL_ia32cap_P[1] & AESNI_CAPABLE ? 580 return (OPENSSL_cpu_caps() & CPUCAP_MASK_AESNI) ?
582 &aesni_128_cbc_hmac_sha1_cipher : NULL; 581 &aesni_128_cbc_hmac_sha1_cipher : NULL;
583} 582}
584 583
585const EVP_CIPHER * 584const EVP_CIPHER *
586EVP_aes_256_cbc_hmac_sha1(void) 585EVP_aes_256_cbc_hmac_sha1(void)
587{ 586{
588 return OPENSSL_ia32cap_P[1] & AESNI_CAPABLE ? 587 return (OPENSSL_cpu_caps() & CPUCAP_MASK_AESNI) ?
589 &aesni_256_cbc_hmac_sha1_cipher : NULL; 588 &aesni_256_cbc_hmac_sha1_cipher : NULL;
590} 589}
591#else 590#else
diff --git a/src/lib/libcrypto/evp/e_rc4_hmac_md5.c b/src/lib/libcrypto/evp/e_rc4_hmac_md5.c
index 1f085af403..39527cafe6 100644
--- a/src/lib/libcrypto/evp/e_rc4_hmac_md5.c
+++ b/src/lib/libcrypto/evp/e_rc4_hmac_md5.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_rc4_hmac_md5.c,v 1.5 2014/08/11 13:29:43 bcook Exp $ */ 1/* $OpenBSD: e_rc4_hmac_md5.c,v 1.6 2016/11/04 17:30:30 miod Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 2011 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 2011 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -105,6 +105,7 @@ rc4_hmac_md5_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *inkey,
105 defined(__INTEL__) ) && \ 105 defined(__INTEL__) ) && \
106 !(defined(__APPLE__) && defined(__MACH__)) 106 !(defined(__APPLE__) && defined(__MACH__))
107#define STITCHED_CALL 107#define STITCHED_CALL
108#include "x86_arch.h"
108#endif 109#endif
109 110
110#if !defined(STITCHED_CALL) 111#if !defined(STITCHED_CALL)
@@ -122,7 +123,6 @@ rc4_hmac_md5_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
122 md5_off = MD5_CBLOCK - key->md.num, 123 md5_off = MD5_CBLOCK - key->md.num,
123 blocks; 124 blocks;
124 unsigned int l; 125 unsigned int l;
125 extern unsigned int OPENSSL_ia32cap_P[];
126#endif 126#endif
127 size_t plen = key->payload_length; 127 size_t plen = key->payload_length;
128 128
@@ -139,7 +139,7 @@ rc4_hmac_md5_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
139 139
140 if (plen > md5_off && 140 if (plen > md5_off &&
141 (blocks = (plen - md5_off) / MD5_CBLOCK) && 141 (blocks = (plen - md5_off) / MD5_CBLOCK) &&
142 (OPENSSL_ia32cap_P[0]&(1 << 20)) == 0) { 142 (OPENSSL_cpu_caps() & CPUCAP_MASK_INTELP4) == 0) {
143 MD5_Update(&key->md, in, md5_off); 143 MD5_Update(&key->md, in, md5_off);
144 RC4(&key->ks, rc4_off, in, out); 144 RC4(&key->ks, rc4_off, in, out);
145 145
@@ -187,7 +187,7 @@ rc4_hmac_md5_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
187 rc4_off += MD5_CBLOCK; 187 rc4_off += MD5_CBLOCK;
188 188
189 if (len > rc4_off && (blocks = (len - rc4_off) / MD5_CBLOCK) && 189 if (len > rc4_off && (blocks = (len - rc4_off) / MD5_CBLOCK) &&
190 (OPENSSL_ia32cap_P[0] & (1 << 20)) == 0) { 190 (OPENSSL_cpu_caps() & CPUCAP_MASK_INTELP4) == 0) {
191 RC4(&key->ks, rc4_off, in, out); 191 RC4(&key->ks, rc4_off, in, out);
192 MD5_Update(&key->md, out, md5_off); 192 MD5_Update(&key->md, out, md5_off);
193 193