summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/rc4/rc4_skey.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/rc4/rc4_skey.c')
-rw-r--r--src/lib/libcrypto/rc4/rc4_skey.c21
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
63const char RC4_version[]="RC4" OPENSSL_VERSION_PTEXT; 68const 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
94void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
95#else
88void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) 96void 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;