diff options
Diffstat (limited to 'src/lib/libcrypto/rc4/rc4_skey.c')
-rw-r--r-- | src/lib/libcrypto/rc4/rc4_skey.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/lib/libcrypto/rc4/rc4_skey.c b/src/lib/libcrypto/rc4/rc4_skey.c index b22c40b0bd..4478d1a4b3 100644 --- a/src/lib/libcrypto/rc4/rc4_skey.c +++ b/src/lib/libcrypto/rc4/rc4_skey.c | |||
@@ -59,6 +59,11 @@ | |||
59 | #include <openssl/rc4.h> | 59 | #include <openssl/rc4.h> |
60 | #include "rc4_locl.h" | 60 | #include "rc4_locl.h" |
61 | #include <openssl/opensslv.h> | 61 | #include <openssl/opensslv.h> |
62 | #include <openssl/crypto.h> | ||
63 | #ifdef OPENSSL_FIPS | ||
64 | #include <openssl/fips.h> | ||
65 | #endif | ||
66 | |||
62 | 67 | ||
63 | const char RC4_version[]="RC4" OPENSSL_VERSION_PTEXT; | 68 | const char RC4_version[]="RC4" OPENSSL_VERSION_PTEXT; |
64 | 69 | ||
@@ -85,7 +90,11 @@ const char *RC4_options(void) | |||
85 | * Date: Wed, 14 Sep 1994 06:35:31 GMT | 90 | * Date: Wed, 14 Sep 1994 06:35:31 GMT |
86 | */ | 91 | */ |
87 | 92 | ||
93 | #ifdef OPENSSL_FIPS | ||
94 | void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | ||
95 | #else | ||
88 | void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | 96 | void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) |
97 | #endif | ||
89 | { | 98 | { |
90 | register RC4_INT tmp; | 99 | register RC4_INT tmp; |
91 | register int id1,id2; | 100 | register int id1,id2; |
@@ -119,14 +128,20 @@ void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | |||
119 | * implementations suffer from significant performance | 128 | * implementations suffer from significant performance |
120 | * losses then, e.g. PIII exhibits >2x deterioration, | 129 | * losses then, e.g. PIII exhibits >2x deterioration, |
121 | * and so does Opteron. In order to assure optimal | 130 | * and so does Opteron. In order to assure optimal |
122 | * all-round performance, let us [try to] detect P4 at | 131 | * all-round performance, we detect P4 at run-time by |
123 | * run-time by checking upon HTT bit in CPU capability | 132 | * checking upon reserved bit 20 in CPU capability |
124 | * vector and set up compressed key schedule, which is | 133 | * vector and set up compressed key schedule, which is |
125 | * recognized by correspondingly updated assembler | 134 | * recognized by correspondingly updated assembler |
126 | * module... | 135 | * module... Bit 20 is set up by OPENSSL_ia32_cpuid. |
136 | * | ||
127 | * <appro@fy.chalmers.se> | 137 | * <appro@fy.chalmers.se> |
128 | */ | 138 | */ |
139 | #ifdef OPENSSL_FIPS | ||
140 | unsigned long *ia32cap_ptr = OPENSSL_ia32cap_loc(); | ||
141 | if (ia32cap_ptr && (*ia32cap_ptr & (1<<28))) { | ||
142 | #else | ||
129 | if (OPENSSL_ia32cap_P & (1<<28)) { | 143 | if (OPENSSL_ia32cap_P & (1<<28)) { |
144 | #endif | ||
130 | unsigned char *cp=(unsigned char *)d; | 145 | unsigned char *cp=(unsigned char *)d; |
131 | 146 | ||
132 | for (i=0;i<256;i++) cp[i]=i; | 147 | for (i=0;i<256;i++) cp[i]=i; |