summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dh
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dh')
-rw-r--r--src/lib/libcrypto/dh/Makefile180
-rw-r--r--src/lib/libcrypto/dh/dh.h20
-rw-r--r--src/lib/libcrypto/dh/dh1024.pem5
-rw-r--r--src/lib/libcrypto/dh/dh192.pem3
-rw-r--r--src/lib/libcrypto/dh/dh2048.pem16
-rw-r--r--src/lib/libcrypto/dh/dh4096.pem14
-rw-r--r--src/lib/libcrypto/dh/dh512.pem4
-rw-r--r--src/lib/libcrypto/dh/dh_err.c7
-rw-r--r--src/lib/libcrypto/dh/dh_gen.c17
-rw-r--r--src/lib/libcrypto/dh/dh_key.c33
-rw-r--r--src/lib/libcrypto/dh/dh_lib.c15
-rw-r--r--src/lib/libcrypto/dh/dhtest.c226
-rw-r--r--src/lib/libcrypto/dh/example50
-rw-r--r--src/lib/libcrypto/dh/generate65
-rw-r--r--src/lib/libcrypto/dh/p1024.c92
-rw-r--r--src/lib/libcrypto/dh/p192.c80
-rw-r--r--src/lib/libcrypto/dh/p512.c85
17 files changed, 824 insertions, 88 deletions
diff --git a/src/lib/libcrypto/dh/Makefile b/src/lib/libcrypto/dh/Makefile
new file mode 100644
index 0000000000..f23b4f7fde
--- /dev/null
+++ b/src/lib/libcrypto/dh/Makefile
@@ -0,0 +1,180 @@
1#
2# OpenSSL/crypto/dh/Makefile
3#
4
5DIR= dh
6TOP= ../..
7CC= cc
8INCLUDES= -I.. -I$(TOP) -I../../include
9CFLAG=-g
10MAKEFILE= Makefile
11AR= ar r
12
13CFLAGS= $(INCLUDES) $(CFLAG)
14
15GENERAL=Makefile
16TEST= dhtest.c
17APPS=
18
19LIB=$(TOP)/libcrypto.a
20LIBSRC= dh_asn1.c dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh_depr.c \
21 dh_ameth.c dh_pmeth.c dh_prn.c
22LIBOBJ= dh_asn1.o dh_gen.o dh_key.o dh_lib.o dh_check.o dh_err.o dh_depr.o \
23 dh_ameth.o dh_pmeth.o dh_prn.o
24
25SRC= $(LIBSRC)
26
27EXHEADER= dh.h
28HEADER= $(EXHEADER)
29
30ALL= $(GENERAL) $(SRC) $(HEADER)
31
32top:
33 (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
34
35all: lib
36
37lib: $(LIBOBJ)
38 $(AR) $(LIB) $(LIBOBJ)
39 $(RANLIB) $(LIB) || echo Never mind.
40 @touch lib
41
42files:
43 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
44
45links:
46 @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
47 @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
48 @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
49
50install:
51 @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
52 @headerlist="$(EXHEADER)"; for i in $$headerlist ; \
53 do \
54 (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
55 chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
56 done;
57
58tags:
59 ctags $(SRC)
60
61tests:
62
63lint:
64 lint -DLINT $(INCLUDES) $(SRC)>fluff
65
66depend:
67 @[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
68 $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
69
70dclean:
71 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
72 mv -f Makefile.new $(MAKEFILE)
73
74clean:
75 rm -f *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
76
77# DO NOT DELETE THIS LINE -- make depend depends on it.
78
79dh_ameth.o: ../../e_os.h ../../include/openssl/asn1.h
80dh_ameth.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
81dh_ameth.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
82dh_ameth.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
83dh_ameth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
84dh_ameth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
85dh_ameth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
86dh_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
87dh_ameth.o: ../../include/openssl/opensslconf.h
88dh_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
89dh_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
90dh_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
91dh_ameth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
92dh_ameth.o: ../../include/openssl/x509_vfy.h ../asn1/asn1_locl.h ../cryptlib.h
93dh_ameth.o: dh_ameth.c
94dh_asn1.o: ../../e_os.h ../../include/openssl/asn1.h
95dh_asn1.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
96dh_asn1.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
97dh_asn1.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
98dh_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
99dh_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
100dh_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
101dh_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
102dh_asn1.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
103dh_asn1.o: ../../include/openssl/symhacks.h ../cryptlib.h dh_asn1.c
104dh_check.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
105dh_check.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
106dh_check.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
107dh_check.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
108dh_check.o: ../../include/openssl/opensslconf.h
109dh_check.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
110dh_check.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
111dh_check.o: ../../include/openssl/symhacks.h ../cryptlib.h dh_check.c
112dh_depr.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
113dh_depr.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
114dh_depr.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
115dh_depr.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
116dh_depr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
117dh_depr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
118dh_depr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
119dh_depr.o: ../cryptlib.h dh_depr.c
120dh_err.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
121dh_err.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
122dh_err.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
123dh_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
124dh_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
125dh_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
126dh_err.o: dh_err.c
127dh_gen.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
128dh_gen.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
129dh_gen.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
130dh_gen.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
131dh_gen.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
132dh_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
133dh_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
134dh_gen.o: ../cryptlib.h dh_gen.c
135dh_key.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
136dh_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
137dh_key.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
138dh_key.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
139dh_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
140dh_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
141dh_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
142dh_key.o: ../../include/openssl/symhacks.h ../cryptlib.h dh_key.c
143dh_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
144dh_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
145dh_lib.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
146dh_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
147dh_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
148dh_lib.o: ../../include/openssl/engine.h ../../include/openssl/err.h
149dh_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
150dh_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
151dh_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
152dh_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
153dh_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
154dh_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
155dh_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
156dh_lib.o: ../cryptlib.h dh_lib.c
157dh_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h
158dh_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
159dh_pmeth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
160dh_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
161dh_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
162dh_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
163dh_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
164dh_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
165dh_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
166dh_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
167dh_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
168dh_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
169dh_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
170dh_pmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ../evp/evp_locl.h
171dh_pmeth.o: dh_pmeth.c
172dh_prn.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
173dh_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
174dh_prn.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
175dh_prn.o: ../../include/openssl/err.h ../../include/openssl/evp.h
176dh_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
177dh_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
178dh_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
179dh_prn.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
180dh_prn.o: ../../include/openssl/symhacks.h ../cryptlib.h dh_prn.c
diff --git a/src/lib/libcrypto/dh/dh.h b/src/lib/libcrypto/dh/dh.h
index ea59e610ef..849309a489 100644
--- a/src/lib/libcrypto/dh/dh.h
+++ b/src/lib/libcrypto/dh/dh.h
@@ -86,21 +86,6 @@
86 * be used for all exponents. 86 * be used for all exponents.
87 */ 87 */
88 88
89/* If this flag is set the DH method is FIPS compliant and can be used
90 * in FIPS mode. This is set in the validated module method. If an
91 * application sets this flag in its own methods it is its reposibility
92 * to ensure the result is compliant.
93 */
94
95#define DH_FLAG_FIPS_METHOD 0x0400
96
97/* If this flag is set the operations normally disabled in FIPS mode are
98 * permitted it is then the applications responsibility to ensure that the
99 * usage is compliant.
100 */
101
102#define DH_FLAG_NON_FIPS_ALLOW 0x0400
103
104#ifdef __cplusplus 89#ifdef __cplusplus
105extern "C" { 90extern "C" {
106#endif 91#endif
@@ -245,9 +230,6 @@ void ERR_load_DH_strings(void);
245#define DH_F_COMPUTE_KEY 102 230#define DH_F_COMPUTE_KEY 102
246#define DH_F_DHPARAMS_PRINT_FP 101 231#define DH_F_DHPARAMS_PRINT_FP 101
247#define DH_F_DH_BUILTIN_GENPARAMS 106 232#define DH_F_DH_BUILTIN_GENPARAMS 106
248#define DH_F_DH_COMPUTE_KEY 114
249#define DH_F_DH_GENERATE_KEY 115
250#define DH_F_DH_GENERATE_PARAMETERS_EX 116
251#define DH_F_DH_NEW_METHOD 105 233#define DH_F_DH_NEW_METHOD 105
252#define DH_F_DH_PARAM_DECODE 107 234#define DH_F_DH_PARAM_DECODE 107
253#define DH_F_DH_PRIV_DECODE 110 235#define DH_F_DH_PRIV_DECODE 110
@@ -267,9 +249,7 @@ void ERR_load_DH_strings(void);
267#define DH_R_DECODE_ERROR 104 249#define DH_R_DECODE_ERROR 104
268#define DH_R_INVALID_PUBKEY 102 250#define DH_R_INVALID_PUBKEY 102
269#define DH_R_KEYS_NOT_SET 108 251#define DH_R_KEYS_NOT_SET 108
270#define DH_R_KEY_SIZE_TOO_SMALL 110
271#define DH_R_MODULUS_TOO_LARGE 103 252#define DH_R_MODULUS_TOO_LARGE 103
272#define DH_R_NON_FIPS_METHOD 111
273#define DH_R_NO_PARAMETERS_SET 107 253#define DH_R_NO_PARAMETERS_SET 107
274#define DH_R_NO_PRIVATE_VALUE 100 254#define DH_R_NO_PRIVATE_VALUE 100
275#define DH_R_PARAMETER_ENCODING_ERROR 105 255#define DH_R_PARAMETER_ENCODING_ERROR 105
diff --git a/src/lib/libcrypto/dh/dh1024.pem b/src/lib/libcrypto/dh/dh1024.pem
new file mode 100644
index 0000000000..81d43f6a3e
--- /dev/null
+++ b/src/lib/libcrypto/dh/dh1024.pem
@@ -0,0 +1,5 @@
1-----BEGIN DH PARAMETERS-----
2MIGHAoGBAJf2QmHKtQXdKCjhPx1ottPb0PMTBH9A6FbaWMsTuKG/K3g6TG1Z1fkq
3/Gz/PWk/eLI9TzFgqVAuPvr3q14a1aZeVUMTgo2oO5/y2UHe6VaJ+trqCTat3xlx
4/mNbIK9HA2RgPC3gWfVLZQrY+gz3ASHHR5nXWHEyvpuZm7m3h+irAgEC
5-----END DH PARAMETERS-----
diff --git a/src/lib/libcrypto/dh/dh192.pem b/src/lib/libcrypto/dh/dh192.pem
new file mode 100644
index 0000000000..521c07271d
--- /dev/null
+++ b/src/lib/libcrypto/dh/dh192.pem
@@ -0,0 +1,3 @@
1-----BEGIN DH PARAMETERS-----
2MB4CGQDUoLoCULb9LsYm5+/WN992xxbiLQlEuIsCAQM=
3-----END DH PARAMETERS-----
diff --git a/src/lib/libcrypto/dh/dh2048.pem b/src/lib/libcrypto/dh/dh2048.pem
new file mode 100644
index 0000000000..295460f508
--- /dev/null
+++ b/src/lib/libcrypto/dh/dh2048.pem
@@ -0,0 +1,16 @@
1-----BEGIN DH PARAMETERS-----
2MIIBCAKCAQEA7ZKJNYJFVcs7+6J2WmkEYb8h86tT0s0h2v94GRFS8Q7B4lW9aG9o
3AFO5Imov5Jo0H2XMWTKKvbHbSe3fpxJmw/0hBHAY8H/W91hRGXKCeyKpNBgdL8sh
4z22SrkO2qCnHJ6PLAMXy5fsKpFmFor2tRfCzrfnggTXu2YOzzK7q62bmqVdmufEo
5pT8igNcLpvZxk5uBDvhakObMym9mX3rAEBoe8PwttggMYiiw7NuJKO4MqD1llGkW
6aVM8U2ATsCun1IKHrRxynkE1/MJ86VHeYYX8GZt2YA8z+GuzylIOKcMH6JAWzMwA
7Gbatw6QwizOhr9iMjZ0B26TE3X8LvW84wwIBAg==
8-----END DH PARAMETERS-----
9-----BEGIN DH PARAMETERS-----
10MIIBCAKCAQEArtA3w73zP6Lu3EOQtwogiXt3AXXpuS6yD4BhzNS1pZFyPHk0/an5
118ydEkPhQZHKDW+BZJxxPLANaTudWo2YT8TgtvUdN6KSgMiEi6McwqDw+SADuvW+F
12SKUYFxG6VFIxyEP6xBdf+vhJxEDbRG2EYsHDRRtJ76gp9cSKTHusf2R+4AAVGqnt
13gRAbNqtcOar/7FSj+Pl8G3v0Bty0LcCSpbqgYlnv6z+rErQmmC6PPvSz97TDMCok
14yKpCE9hFA1zkqK3TH4FmFvGeIaXJUIBZf4mArWuBTjWFW3nmhESRUn1VK3K3x42N
15a5k6c2+EhrMFiLjxuH6JZoqL0/E93FF9SwIBAg==
16-----END DH PARAMETERS-----
diff --git a/src/lib/libcrypto/dh/dh4096.pem b/src/lib/libcrypto/dh/dh4096.pem
new file mode 100644
index 0000000000..390943a21d
--- /dev/null
+++ b/src/lib/libcrypto/dh/dh4096.pem
@@ -0,0 +1,14 @@
1-----BEGIN DH PARAMETERS-----
2MIICCAKCAgEA/urRnb6vkPYc/KEGXWnbCIOaKitq7ySIq9dTH7s+Ri59zs77zty7
3vfVlSe6VFTBWgYjD2XKUFmtqq6CqXMhVX5ElUDoYDpAyTH85xqNFLzFC7nKrff/H
4TFKNttp22cZE9V0IPpzedPfnQkE7aUdmF9JnDyv21Z/818O93u1B4r0szdnmEvEF
5bKuIxEHX+bp0ZR7RqE1AeifXGJX3d6tsd2PMAObxwwsv55RGkn50vHO4QxtTARr1
6rRUV5j3B3oPMgC7Offxx+98Xn45B1/G0Prp11anDsR1PGwtaCYipqsvMwQUSJtyE
7EOQWk+yFkeMe4vWv367eEi0Sd/wnC+TSXBE3pYvpYerJ8n1MceI5GQTdarJ77OW9
8bGTHmxRsLSCM1jpLdPja5jjb4siAa6EHc4qN9c/iFKS3PQPJEnX7pXKBRs5f7AF3
9W3RIGt+G9IVNZfXaS7Z/iCpgzgvKCs0VeqN38QsJGtC1aIkwOeyjPNy2G6jJ4yqH
10ovXYt/0mc00vCWeSNS1wren0pR2EiLxX0ypjjgsU1mk/Z3b/+zVf7fZSIB+nDLjb
11NPtUlJCVGnAeBK1J1nG3TQicqowOXoM6ISkdaXj5GPJdXHab2+S7cqhKGv5qC7rR
12jT6sx7RUr0CNTxzLI7muV2/a4tGmj0PSdXQdsZ7tw7gbXlaWT1+MM2MCAQI=
13-----END DH PARAMETERS-----
14
diff --git a/src/lib/libcrypto/dh/dh512.pem b/src/lib/libcrypto/dh/dh512.pem
new file mode 100644
index 0000000000..0a4d863ebe
--- /dev/null
+++ b/src/lib/libcrypto/dh/dh512.pem
@@ -0,0 +1,4 @@
1-----BEGIN DH PARAMETERS-----
2MEYCQQDaWDwW2YUiidDkr3VvTMqS3UvlM7gE+w/tlO+cikQD7VdGUNNpmdsp13Yn
3a6LT1BLiGPTdHghM9tgAPnxHdOgzAgEC
4-----END DH PARAMETERS-----
diff --git a/src/lib/libcrypto/dh/dh_err.c b/src/lib/libcrypto/dh/dh_err.c
index 56d3df7356..d5cf0c22a3 100644
--- a/src/lib/libcrypto/dh/dh_err.c
+++ b/src/lib/libcrypto/dh/dh_err.c
@@ -1,6 +1,6 @@
1/* crypto/dh/dh_err.c */ 1/* crypto/dh/dh_err.c */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
@@ -73,9 +73,6 @@ static ERR_STRING_DATA DH_str_functs[]=
73{ERR_FUNC(DH_F_COMPUTE_KEY), "COMPUTE_KEY"}, 73{ERR_FUNC(DH_F_COMPUTE_KEY), "COMPUTE_KEY"},
74{ERR_FUNC(DH_F_DHPARAMS_PRINT_FP), "DHparams_print_fp"}, 74{ERR_FUNC(DH_F_DHPARAMS_PRINT_FP), "DHparams_print_fp"},
75{ERR_FUNC(DH_F_DH_BUILTIN_GENPARAMS), "DH_BUILTIN_GENPARAMS"}, 75{ERR_FUNC(DH_F_DH_BUILTIN_GENPARAMS), "DH_BUILTIN_GENPARAMS"},
76{ERR_FUNC(DH_F_DH_COMPUTE_KEY), "DH_compute_key"},
77{ERR_FUNC(DH_F_DH_GENERATE_KEY), "DH_generate_key"},
78{ERR_FUNC(DH_F_DH_GENERATE_PARAMETERS_EX), "DH_generate_parameters_ex"},
79{ERR_FUNC(DH_F_DH_NEW_METHOD), "DH_new_method"}, 76{ERR_FUNC(DH_F_DH_NEW_METHOD), "DH_new_method"},
80{ERR_FUNC(DH_F_DH_PARAM_DECODE), "DH_PARAM_DECODE"}, 77{ERR_FUNC(DH_F_DH_PARAM_DECODE), "DH_PARAM_DECODE"},
81{ERR_FUNC(DH_F_DH_PRIV_DECODE), "DH_PRIV_DECODE"}, 78{ERR_FUNC(DH_F_DH_PRIV_DECODE), "DH_PRIV_DECODE"},
@@ -98,9 +95,7 @@ static ERR_STRING_DATA DH_str_reasons[]=
98{ERR_REASON(DH_R_DECODE_ERROR) ,"decode error"}, 95{ERR_REASON(DH_R_DECODE_ERROR) ,"decode error"},
99{ERR_REASON(DH_R_INVALID_PUBKEY) ,"invalid public key"}, 96{ERR_REASON(DH_R_INVALID_PUBKEY) ,"invalid public key"},
100{ERR_REASON(DH_R_KEYS_NOT_SET) ,"keys not set"}, 97{ERR_REASON(DH_R_KEYS_NOT_SET) ,"keys not set"},
101{ERR_REASON(DH_R_KEY_SIZE_TOO_SMALL) ,"key size too small"},
102{ERR_REASON(DH_R_MODULUS_TOO_LARGE) ,"modulus too large"}, 98{ERR_REASON(DH_R_MODULUS_TOO_LARGE) ,"modulus too large"},
103{ERR_REASON(DH_R_NON_FIPS_METHOD) ,"non fips method"},
104{ERR_REASON(DH_R_NO_PARAMETERS_SET) ,"no parameters set"}, 99{ERR_REASON(DH_R_NO_PARAMETERS_SET) ,"no parameters set"},
105{ERR_REASON(DH_R_NO_PRIVATE_VALUE) ,"no private value"}, 100{ERR_REASON(DH_R_NO_PRIVATE_VALUE) ,"no private value"},
106{ERR_REASON(DH_R_PARAMETER_ENCODING_ERROR),"parameter encoding error"}, 101{ERR_REASON(DH_R_PARAMETER_ENCODING_ERROR),"parameter encoding error"},
diff --git a/src/lib/libcrypto/dh/dh_gen.c b/src/lib/libcrypto/dh/dh_gen.c
index 7b1fe9c9cb..cfd5b11868 100644
--- a/src/lib/libcrypto/dh/dh_gen.c
+++ b/src/lib/libcrypto/dh/dh_gen.c
@@ -66,29 +66,12 @@
66#include <openssl/bn.h> 66#include <openssl/bn.h>
67#include <openssl/dh.h> 67#include <openssl/dh.h>
68 68
69#ifdef OPENSSL_FIPS
70#include <openssl/fips.h>
71#endif
72
73static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb); 69static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb);
74 70
75int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, BN_GENCB *cb) 71int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, BN_GENCB *cb)
76 { 72 {
77#ifdef OPENSSL_FIPS
78 if (FIPS_mode() && !(ret->meth->flags & DH_FLAG_FIPS_METHOD)
79 && !(ret->flags & DH_FLAG_NON_FIPS_ALLOW))
80 {
81 DHerr(DH_F_DH_GENERATE_PARAMETERS_EX, DH_R_NON_FIPS_METHOD);
82 return 0;
83 }
84#endif
85 if(ret->meth->generate_params) 73 if(ret->meth->generate_params)
86 return ret->meth->generate_params(ret, prime_len, generator, cb); 74 return ret->meth->generate_params(ret, prime_len, generator, cb);
87#ifdef OPENSSL_FIPS
88 if (FIPS_mode())
89 return FIPS_dh_generate_parameters_ex(ret, prime_len,
90 generator, cb);
91#endif
92 return dh_builtin_genparams(ret, prime_len, generator, cb); 75 return dh_builtin_genparams(ret, prime_len, generator, cb);
93 } 76 }
94 77
diff --git a/src/lib/libcrypto/dh/dh_key.c b/src/lib/libcrypto/dh/dh_key.c
index 89a74db4e6..e7db440342 100644
--- a/src/lib/libcrypto/dh/dh_key.c
+++ b/src/lib/libcrypto/dh/dh_key.c
@@ -73,27 +73,11 @@ static int dh_finish(DH *dh);
73 73
74int DH_generate_key(DH *dh) 74int DH_generate_key(DH *dh)
75 { 75 {
76#ifdef OPENSSL_FIPS
77 if (FIPS_mode() && !(dh->meth->flags & DH_FLAG_FIPS_METHOD)
78 && !(dh->flags & DH_FLAG_NON_FIPS_ALLOW))
79 {
80 DHerr(DH_F_DH_GENERATE_KEY, DH_R_NON_FIPS_METHOD);
81 return 0;
82 }
83#endif
84 return dh->meth->generate_key(dh); 76 return dh->meth->generate_key(dh);
85 } 77 }
86 78
87int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) 79int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
88 { 80 {
89#ifdef OPENSSL_FIPS
90 if (FIPS_mode() && !(dh->meth->flags & DH_FLAG_FIPS_METHOD)
91 && !(dh->flags & DH_FLAG_NON_FIPS_ALLOW))
92 {
93 DHerr(DH_F_DH_COMPUTE_KEY, DH_R_NON_FIPS_METHOD);
94 return 0;
95 }
96#endif
97 return dh->meth->compute_key(key, pub_key, dh); 81 return dh->meth->compute_key(key, pub_key, dh);
98 } 82 }
99 83
@@ -154,21 +138,8 @@ static int generate_key(DH *dh)
154 138
155 if (generate_new_key) 139 if (generate_new_key)
156 { 140 {
157 if (dh->q) 141 l = dh->length ? dh->length : BN_num_bits(dh->p)-1; /* secret exponent length */
158 { 142 if (!BN_rand(priv_key, l, 0, 0)) goto err;
159 do
160 {
161 if (!BN_rand_range(priv_key, dh->q))
162 goto err;
163 }
164 while (BN_is_zero(priv_key) || BN_is_one(priv_key));
165 }
166 else
167 {
168 /* secret exponent length */
169 l = dh->length ? dh->length : BN_num_bits(dh->p)-1;
170 if (!BN_rand(priv_key, l, 0, 0)) goto err;
171 }
172 } 143 }
173 144
174 { 145 {
diff --git a/src/lib/libcrypto/dh/dh_lib.c b/src/lib/libcrypto/dh/dh_lib.c
index 00218f2b92..7aef080e7a 100644
--- a/src/lib/libcrypto/dh/dh_lib.c
+++ b/src/lib/libcrypto/dh/dh_lib.c
@@ -64,10 +64,6 @@
64#include <openssl/engine.h> 64#include <openssl/engine.h>
65#endif 65#endif
66 66
67#ifdef OPENSSL_FIPS
68#include <openssl/fips.h>
69#endif
70
71const char DH_version[]="Diffie-Hellman" OPENSSL_VERSION_PTEXT; 67const char DH_version[]="Diffie-Hellman" OPENSSL_VERSION_PTEXT;
72 68
73static const DH_METHOD *default_DH_method = NULL; 69static const DH_METHOD *default_DH_method = NULL;
@@ -80,16 +76,7 @@ void DH_set_default_method(const DH_METHOD *meth)
80const DH_METHOD *DH_get_default_method(void) 76const DH_METHOD *DH_get_default_method(void)
81 { 77 {
82 if(!default_DH_method) 78 if(!default_DH_method)
83 {
84#ifdef OPENSSL_FIPS
85 if (FIPS_mode())
86 return FIPS_dh_openssl();
87 else
88 return DH_OpenSSL();
89#else
90 default_DH_method = DH_OpenSSL(); 79 default_DH_method = DH_OpenSSL();
91#endif
92 }
93 return default_DH_method; 80 return default_DH_method;
94 } 81 }
95 82
@@ -169,7 +156,7 @@ DH *DH_new_method(ENGINE *engine)
169 ret->counter = NULL; 156 ret->counter = NULL;
170 ret->method_mont_p=NULL; 157 ret->method_mont_p=NULL;
171 ret->references = 1; 158 ret->references = 1;
172 ret->flags=ret->meth->flags & ~DH_FLAG_NON_FIPS_ALLOW; 159 ret->flags=ret->meth->flags;
173 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data); 160 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
174 if ((ret->meth->init != NULL) && !ret->meth->init(ret)) 161 if ((ret->meth->init != NULL) && !ret->meth->init(ret))
175 { 162 {
diff --git a/src/lib/libcrypto/dh/dhtest.c b/src/lib/libcrypto/dh/dhtest.c
new file mode 100644
index 0000000000..882f5c310a
--- /dev/null
+++ b/src/lib/libcrypto/dh/dhtest.c
@@ -0,0 +1,226 @@
1/* crypto/dh/dhtest.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59/* Until the key-gen callbacks are modified to use newer prototypes, we allow
60 * deprecated functions for openssl-internal code */
61#ifdef OPENSSL_NO_DEPRECATED
62#undef OPENSSL_NO_DEPRECATED
63#endif
64
65#include <stdio.h>
66#include <stdlib.h>
67#include <string.h>
68
69#include "../e_os.h"
70
71#include <openssl/crypto.h>
72#include <openssl/bio.h>
73#include <openssl/bn.h>
74#include <openssl/rand.h>
75#include <openssl/err.h>
76
77#ifdef OPENSSL_NO_DH
78int main(int argc, char *argv[])
79{
80 printf("No DH support\n");
81 return(0);
82}
83#else
84#include <openssl/dh.h>
85
86#ifdef OPENSSL_SYS_WIN16
87#define MS_CALLBACK _far _loadds
88#else
89#define MS_CALLBACK
90#endif
91
92static int MS_CALLBACK cb(int p, int n, BN_GENCB *arg);
93
94static const char rnd_seed[] = "string to make the random number generator think it has entropy";
95
96int main(int argc, char *argv[])
97 {
98 BN_GENCB _cb;
99 DH *a;
100 DH *b=NULL;
101 char buf[12];
102 unsigned char *abuf=NULL,*bbuf=NULL;
103 int i,alen,blen,aout,bout,ret=1;
104 BIO *out;
105
106 CRYPTO_malloc_debug_init();
107 CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);
108 CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
109
110#ifdef OPENSSL_SYS_WIN32
111 CRYPTO_malloc_init();
112#endif
113
114 RAND_seed(rnd_seed, sizeof rnd_seed);
115
116 out=BIO_new(BIO_s_file());
117 if (out == NULL) EXIT(1);
118 BIO_set_fp(out,stdout,BIO_NOCLOSE);
119
120 BN_GENCB_set(&_cb, &cb, out);
121 if(((a = DH_new()) == NULL) || !DH_generate_parameters_ex(a, 64,
122 DH_GENERATOR_5, &_cb))
123 goto err;
124
125 if (!DH_check(a, &i)) goto err;
126 if (i & DH_CHECK_P_NOT_PRIME)
127 BIO_puts(out, "p value is not prime\n");
128 if (i & DH_CHECK_P_NOT_SAFE_PRIME)
129 BIO_puts(out, "p value is not a safe prime\n");
130 if (i & DH_UNABLE_TO_CHECK_GENERATOR)
131 BIO_puts(out, "unable to check the generator value\n");
132 if (i & DH_NOT_SUITABLE_GENERATOR)
133 BIO_puts(out, "the g value is not a generator\n");
134
135 BIO_puts(out,"\np =");
136 BN_print(out,a->p);
137 BIO_puts(out,"\ng =");
138 BN_print(out,a->g);
139 BIO_puts(out,"\n");
140
141 b=DH_new();
142 if (b == NULL) goto err;
143
144 b->p=BN_dup(a->p);
145 b->g=BN_dup(a->g);
146 if ((b->p == NULL) || (b->g == NULL)) goto err;
147
148 /* Set a to run with normal modexp and b to use constant time */
149 a->flags &= ~DH_FLAG_NO_EXP_CONSTTIME;
150 b->flags |= DH_FLAG_NO_EXP_CONSTTIME;
151
152 if (!DH_generate_key(a)) goto err;
153 BIO_puts(out,"pri 1=");
154 BN_print(out,a->priv_key);
155 BIO_puts(out,"\npub 1=");
156 BN_print(out,a->pub_key);
157 BIO_puts(out,"\n");
158
159 if (!DH_generate_key(b)) goto err;
160 BIO_puts(out,"pri 2=");
161 BN_print(out,b->priv_key);
162 BIO_puts(out,"\npub 2=");
163 BN_print(out,b->pub_key);
164 BIO_puts(out,"\n");
165
166 alen=DH_size(a);
167 abuf=(unsigned char *)OPENSSL_malloc(alen);
168 aout=DH_compute_key(abuf,b->pub_key,a);
169
170 BIO_puts(out,"key1 =");
171 for (i=0; i<aout; i++)
172 {
173 sprintf(buf,"%02X",abuf[i]);
174 BIO_puts(out,buf);
175 }
176 BIO_puts(out,"\n");
177
178 blen=DH_size(b);
179 bbuf=(unsigned char *)OPENSSL_malloc(blen);
180 bout=DH_compute_key(bbuf,a->pub_key,b);
181
182 BIO_puts(out,"key2 =");
183 for (i=0; i<bout; i++)
184 {
185 sprintf(buf,"%02X",bbuf[i]);
186 BIO_puts(out,buf);
187 }
188 BIO_puts(out,"\n");
189 if ((aout < 4) || (bout != aout) || (memcmp(abuf,bbuf,aout) != 0))
190 {
191 fprintf(stderr,"Error in DH routines\n");
192 ret=1;
193 }
194 else
195 ret=0;
196err:
197 ERR_print_errors_fp(stderr);
198
199 if (abuf != NULL) OPENSSL_free(abuf);
200 if (bbuf != NULL) OPENSSL_free(bbuf);
201 if(b != NULL) DH_free(b);
202 if(a != NULL) DH_free(a);
203 BIO_free(out);
204#ifdef OPENSSL_SYS_NETWARE
205 if (ret) printf("ERROR: %d\n", ret);
206#endif
207 EXIT(ret);
208 return(ret);
209 }
210
211static int MS_CALLBACK cb(int p, int n, BN_GENCB *arg)
212 {
213 char c='*';
214
215 if (p == 0) c='.';
216 if (p == 1) c='+';
217 if (p == 2) c='*';
218 if (p == 3) c='\n';
219 BIO_write(arg->arg,&c,1);
220 (void)BIO_flush(arg->arg);
221#ifdef LINT
222 p=n;
223#endif
224 return 1;
225 }
226#endif
diff --git a/src/lib/libcrypto/dh/example b/src/lib/libcrypto/dh/example
new file mode 100644
index 0000000000..16a33d2910
--- /dev/null
+++ b/src/lib/libcrypto/dh/example
@@ -0,0 +1,50 @@
1From owner-cypherpunks@toad.com Mon Sep 25 10:50:51 1995
2Received: from minbne.mincom.oz.au by orb.mincom.oz.au with SMTP id AA10562
3 (5.65c/IDA-1.4.4 for eay); Wed, 27 Sep 1995 19:41:55 +1000
4Received: by minbne.mincom.oz.au id AA19958
5 (5.65c/IDA-1.4.4 for eay@orb.mincom.oz.au); Wed, 27 Sep 1995 19:34:59 +1000
6Received: from relay3.UU.NET by bunyip.cc.uq.oz.au with SMTP (PP);
7 Wed, 27 Sep 1995 19:13:05 +1000
8Received: from toad.com by relay3.UU.NET with SMTP id QQzizb16156;
9 Wed, 27 Sep 1995 04:48:46 -0400
10Received: by toad.com id AA07905; Tue, 26 Sep 95 06:31:45 PDT
11Received: from by toad.com id AB07851; Tue, 26 Sep 95 06:31:40 PDT
12Received: from servo.qualcomm.com (servo.qualcomm.com [129.46.128.14])
13 by cygnus.com (8.6.12/8.6.9) with ESMTP id RAA18442
14 for <cypherpunks@toad.com>; Mon, 25 Sep 1995 17:52:47 -0700
15Received: (karn@localhost) by servo.qualcomm.com (8.6.12/QC-BSD-2.5.1)
16 id RAA14732; Mon, 25 Sep 1995 17:50:51 -0700
17Date: Mon, 25 Sep 1995 17:50:51 -0700
18From: Phil Karn <karn@qualcomm.com>
19Message-Id: <199509260050.RAA14732@servo.qualcomm.com>
20To: cypherpunks@toad.com, ipsec-dev@eit.com
21Subject: Primality verification needed
22Sender: owner-cypherpunks@toad.com
23Precedence: bulk
24Status: RO
25X-Status:
26
27Hi. I've generated a 2047-bit "strong" prime number that I would like to
28use with Diffie-Hellman key exchange. I assert that not only is this number
29'p' prime, but so is (p-1)/2.
30
31I've used the mpz_probab_prime() function in the Gnu Math Package (GMP) version
321.3.2 to test this number. This function uses the Miller-Rabin primality test.
33However, to increase my confidence that this number really is a strong prime,
34I'd like to ask others to confirm it with other tests. Here's the number in hex:
35
3672a925f760b2f954ed287f1b0953f3e6aef92e456172f9fe86fdd8822241b9c9788fbc289982743e
37fbcd2ccf062b242d7a567ba8bbb40d79bca7b8e0b6c05f835a5b938d985816bc648985adcff5402a
38a76756b36c845a840a1d059ce02707e19cf47af0b5a882f32315c19d1b86a56c5389c5e9bee16b65
39fde7b1a8d74a7675de9b707d4c5a4633c0290c95ff30a605aeb7ae864ff48370f13cf01d49adb9f2
403d19a439f753ee7703cf342d87f431105c843c78ca4df639931f3458fae8a94d1687e99a76ed99d0
41ba87189f42fd31ad8262c54a8cf5914ae6c28c540d714a5f6087a171fb74f4814c6f968d72386ef3
4256a05180c3bec7ddd5ef6fe76b1f717b
43
44The generator, g, for this prime is 2.
45
46Thanks!
47
48Phil Karn
49
50
diff --git a/src/lib/libcrypto/dh/generate b/src/lib/libcrypto/dh/generate
new file mode 100644
index 0000000000..5d407231df
--- /dev/null
+++ b/src/lib/libcrypto/dh/generate
@@ -0,0 +1,65 @@
1From: stewarts@ix.netcom.com (Bill Stewart)
2Newsgroups: sci.crypt
3Subject: Re: Diffie-Hellman key exchange
4Date: Wed, 11 Oct 1995 23:08:28 GMT
5Organization: Freelance Information Architect
6Lines: 32
7Message-ID: <45hir2$7l8@ixnews7.ix.netcom.com>
8References: <458rhn$76m$1@mhadf.production.compuserve.com>
9NNTP-Posting-Host: ix-pl4-16.ix.netcom.com
10X-NETCOM-Date: Wed Oct 11 4:09:22 PM PDT 1995
11X-Newsreader: Forte Free Agent 1.0.82
12
13Kent Briggs <72124.3234@CompuServe.COM> wrote:
14
15>I have a copy of the 1976 IEEE article describing the
16>Diffie-Hellman public key exchange algorithm: y=a^x mod q. I'm
17>looking for sources that give examples of secure a,q pairs and
18>possible some source code that I could examine.
19
20q should be prime, and ideally should be a "strong prime",
21which means it's of the form 2n+1 where n is also prime.
22q also needs to be long enough to prevent the attacks LaMacchia and
23Odlyzko described (some variant on a factoring attack which generates
24a large pile of simultaneous equations and then solves them);
25long enough is about the same size as factoring, so 512 bits may not
26be secure enough for most applications. (The 192 bits used by
27"secure NFS" was certainly not long enough.)
28
29a should be a generator for q, which means it needs to be
30relatively prime to q-1. Usually a small prime like 2, 3 or 5 will
31work.
32
33....
34
35Date: Tue, 26 Sep 1995 13:52:36 MST
36From: "Richard Schroeppel" <rcs@cs.arizona.edu>
37To: karn
38Cc: ho@cs.arizona.edu
39Subject: random large primes
40
41Since your prime is really random, proving it is hard.
42My personal limit on rigorously proved primes is ~350 digits.
43If you really want a proof, we should talk to Francois Morain,
44or the Australian group.
45
46If you want 2 to be a generator (mod P), then you need it
47to be a non-square. If (P-1)/2 is also prime, then
48non-square == primitive-root for bases << P.
49
50In the case at hand, this means 2 is a generator iff P = 11 (mod 24).
51If you want this, you should restrict your sieve accordingly.
52
533 is a generator iff P = 5 (mod 12).
54
555 is a generator iff P = 3 or 7 (mod 10).
56
572 is perfectly usable as a base even if it's a non-generator, since
58it still covers half the space of possible residues. And an
59eavesdropper can always determine the low-bit of your exponent for
60a generator anyway.
61
62Rich rcs@cs.arizona.edu
63
64
65
diff --git a/src/lib/libcrypto/dh/p1024.c b/src/lib/libcrypto/dh/p1024.c
new file mode 100644
index 0000000000..368ceca4eb
--- /dev/null
+++ b/src/lib/libcrypto/dh/p1024.c
@@ -0,0 +1,92 @@
1/* crypto/dh/p1024.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <openssl/bn.h>
61#include <openssl/asn1.h>
62#include <openssl/dh.h>
63#include <openssl/pem.h>
64
65unsigned char data[]={0x97,0xF6,0x42,0x61,0xCA,0xB5,0x05,0xDD,
66 0x28,0x28,0xE1,0x3F,0x1D,0x68,0xB6,0xD3,
67 0xDB,0xD0,0xF3,0x13,0x04,0x7F,0x40,0xE8,
68 0x56,0xDA,0x58,0xCB,0x13,0xB8,0xA1,0xBF,
69 0x2B,0x78,0x3A,0x4C,0x6D,0x59,0xD5,0xF9,
70 0x2A,0xFC,0x6C,0xFF,0x3D,0x69,0x3F,0x78,
71 0xB2,0x3D,0x4F,0x31,0x60,0xA9,0x50,0x2E,
72 0x3E,0xFA,0xF7,0xAB,0x5E,0x1A,0xD5,0xA6,
73 0x5E,0x55,0x43,0x13,0x82,0x8D,0xA8,0x3B,
74 0x9F,0xF2,0xD9,0x41,0xDE,0xE9,0x56,0x89,
75 0xFA,0xDA,0xEA,0x09,0x36,0xAD,0xDF,0x19,
76 0x71,0xFE,0x63,0x5B,0x20,0xAF,0x47,0x03,
77 0x64,0x60,0x3C,0x2D,0xE0,0x59,0xF5,0x4B,
78 0x65,0x0A,0xD8,0xFA,0x0C,0xF7,0x01,0x21,
79 0xC7,0x47,0x99,0xD7,0x58,0x71,0x32,0xBE,
80 0x9B,0x99,0x9B,0xB9,0xB7,0x87,0xE8,0xAB,
81 };
82
83main()
84 {
85 DH *dh;
86
87 dh=DH_new();
88 dh->p=BN_bin2bn(data,sizeof(data),NULL);
89 dh->g=BN_new();
90 BN_set_word(dh->g,2);
91 PEM_write_DHparams(stdout,dh);
92 }
diff --git a/src/lib/libcrypto/dh/p192.c b/src/lib/libcrypto/dh/p192.c
new file mode 100644
index 0000000000..7bdf40410e
--- /dev/null
+++ b/src/lib/libcrypto/dh/p192.c
@@ -0,0 +1,80 @@
1/* crypto/dh/p192.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <openssl/bn.h>
61#include <openssl/asn1.h>
62#include <openssl/dh.h>
63#include <openssl/pem.h>
64
65unsigned char data[]={
660xD4,0xA0,0xBA,0x02,0x50,0xB6,0xFD,0x2E,
670xC6,0x26,0xE7,0xEF,0xD6,0x37,0xDF,0x76,
680xC7,0x16,0xE2,0x2D,0x09,0x44,0xB8,0x8B,
69 };
70
71main()
72 {
73 DH *dh;
74
75 dh=DH_new();
76 dh->p=BN_bin2bn(data,sizeof(data),NULL);
77 dh->g=BN_new();
78 BN_set_word(dh->g,3);
79 PEM_write_DHparams(stdout,dh);
80 }
diff --git a/src/lib/libcrypto/dh/p512.c b/src/lib/libcrypto/dh/p512.c
new file mode 100644
index 0000000000..a9b6aa83f0
--- /dev/null
+++ b/src/lib/libcrypto/dh/p512.c
@@ -0,0 +1,85 @@
1/* crypto/dh/p512.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <openssl/bn.h>
61#include <openssl/asn1.h>
62#include <openssl/dh.h>
63#include <openssl/pem.h>
64
65unsigned char data[]={
660xDA,0x58,0x3C,0x16,0xD9,0x85,0x22,0x89,
670xD0,0xE4,0xAF,0x75,0x6F,0x4C,0xCA,0x92,
680xDD,0x4B,0xE5,0x33,0xB8,0x04,0xFB,0x0F,
690xED,0x94,0xEF,0x9C,0x8A,0x44,0x03,0xED,
700x57,0x46,0x50,0xD3,0x69,0x99,0xDB,0x29,
710xD7,0x76,0x27,0x6B,0xA2,0xD3,0xD4,0x12,
720xE2,0x18,0xF4,0xDD,0x1E,0x08,0x4C,0xF6,
730xD8,0x00,0x3E,0x7C,0x47,0x74,0xE8,0x33,
74 };
75
76main()
77 {
78 DH *dh;
79
80 dh=DH_new();
81 dh->p=BN_bin2bn(data,sizeof(data),NULL);
82 dh->g=BN_new();
83 BN_set_word(dh->g,2);
84 PEM_write_DHparams(stdout,dh);
85 }