1 |
wellsi |
1.1 |
diff -up openssl-fips-0.9.8e/crypto/o_init.c.fipsmode openssl-fips-0.9.8e/crypto/o_init.c |
2 |
|
|
--- openssl-fips-0.9.8e/crypto/o_init.c.fipsmode 2007-07-01 02:07:22.000000000 +0200 |
3 |
|
|
+++ openssl-fips-0.9.8e/crypto/o_init.c 2009-04-15 13:48:51.000000000 +0200 |
4 |
|
|
@@ -59,6 +59,45 @@ |
5 |
|
|
#include <e_os.h> |
6 |
|
|
#include <openssl/err.h> |
7 |
|
|
|
8 |
|
|
+#ifdef OPENSSL_FIPS |
9 |
|
|
+#include <sys/types.h> |
10 |
|
|
+#include <sys/stat.h> |
11 |
|
|
+#include <fcntl.h> |
12 |
|
|
+#include <unistd.h> |
13 |
|
|
+#include <errno.h> |
14 |
|
|
+#include <stdlib.h> |
15 |
|
|
+#include <openssl/fips.h> |
16 |
|
|
+#include <openssl/evp.h> |
17 |
|
|
+#include <openssl/rand.h> |
18 |
|
|
+ |
19 |
|
|
+#define FIPS_MODE_SWITCH_FILE "/proc/sys/crypto/fips_enabled" |
20 |
|
|
+ |
21 |
|
|
+static void init_fips_mode(void) |
22 |
|
|
+ { |
23 |
|
|
+ char buf[2] = "0"; |
24 |
|
|
+ int fd; |
25 |
|
|
+ |
26 |
|
|
+ if (getenv("OPENSSL_FORCE_FIPS_MODE") != NULL) |
27 |
|
|
+ { |
28 |
|
|
+ buf[0] = '1'; |
29 |
|
|
+ } |
30 |
|
|
+ else if ((fd = open(FIPS_MODE_SWITCH_FILE, O_RDONLY)) >= 0) |
31 |
|
|
+ { |
32 |
|
|
+ while (read(fd, buf, sizeof(buf)) < 0 && errno == EINTR); |
33 |
|
|
+ close(fd); |
34 |
|
|
+ } |
35 |
|
|
+ /* Failure reading the fips mode switch file means just not |
36 |
|
|
+ * switching into FIPS mode. We would break too many things |
37 |
|
|
+ * otherwise. |
38 |
|
|
+ */ |
39 |
|
|
+ |
40 |
|
|
+ if (buf[0] == '1') |
41 |
|
|
+ { |
42 |
|
|
+ FIPS_mode_set(1); |
43 |
|
|
+ } |
44 |
|
|
+ } |
45 |
|
|
+#endif |
46 |
|
|
+ |
47 |
|
|
/* Perform any essential OpenSSL initialization operations. |
48 |
|
|
* Currently only sets FIPS callbacks |
49 |
|
|
*/ |
50 |
|
|
@@ -73,11 +112,10 @@ void OPENSSL_init(void) |
51 |
|
|
#ifdef CRYPTO_MDEBUG |
52 |
|
|
CRYPTO_malloc_debug_init(); |
53 |
|
|
#endif |
54 |
|
|
-#ifdef OPENSSL_ENGINE |
55 |
|
|
+ init_fips_mode(); |
56 |
|
|
int_EVP_MD_init_engine_callbacks(); |
57 |
|
|
int_EVP_CIPHER_init_engine_callbacks(); |
58 |
|
|
int_RAND_init_engine_callbacks(); |
59 |
|
|
-#endif |
60 |
|
|
done = 1; |
61 |
|
|
} |
62 |
|
|
#endif |
63 |
|
|
diff -up openssl-fips-0.9.8e/ssl/ssl_algs.c.fipsmode openssl-fips-0.9.8e/ssl/ssl_algs.c |
64 |
|
|
--- openssl-fips-0.9.8e/ssl/ssl_algs.c.fipsmode 2007-04-24 13:30:48.000000000 +0200 |
65 |
|
|
+++ openssl-fips-0.9.8e/ssl/ssl_algs.c 2009-04-15 14:09:42.000000000 +0200 |
66 |
|
|
@@ -64,6 +64,8 @@ |
67 |
|
|
int SSL_library_init(void) |
68 |
|
|
{ |
69 |
|
|
|
70 |
|
|
+ OPENSSL_init(); |
71 |
|
|
+ |
72 |
|
|
#ifndef OPENSSL_NO_DES |
73 |
|
|
EVP_add_cipher(EVP_des_cbc()); |
74 |
|
|
EVP_add_cipher(EVP_des_ede3_cbc()); |