summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pem
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pem')
-rw-r--r--src/lib/libcrypto/pem/Makefile.ssl268
-rw-r--r--src/lib/libcrypto/pem/pem.h33
-rw-r--r--src/lib/libcrypto/pem/pem_all.c23
-rw-r--r--src/lib/libcrypto/pem/pem_err.c4
-rw-r--r--src/lib/libcrypto/pem/pem_info.c14
-rw-r--r--src/lib/libcrypto/pem/pem_lib.c278
-rw-r--r--src/lib/libcrypto/pem/pem_oth.c85
-rw-r--r--src/lib/libcrypto/pem/pem_pk8.c243
-rw-r--r--src/lib/libcrypto/pem/pem_pkey.c139
-rw-r--r--src/lib/libcrypto/pem/pem_seal.c31
-rw-r--r--src/lib/libcrypto/pem/pem_sign.c2
-rw-r--r--src/lib/libcrypto/pem/pem_x509.c69
-rw-r--r--src/lib/libcrypto/pem/pem_xaux.c68
13 files changed, 851 insertions, 406 deletions
diff --git a/src/lib/libcrypto/pem/Makefile.ssl b/src/lib/libcrypto/pem/Makefile.ssl
index 31db6b65a1..2153723509 100644
--- a/src/lib/libcrypto/pem/Makefile.ssl
+++ b/src/lib/libcrypto/pem/Makefile.ssl
@@ -5,13 +5,14 @@
5DIR= pem 5DIR= pem
6TOP= ../.. 6TOP= ../..
7CC= cc 7CC= cc
8INCLUDES= -I.. -I../../include 8INCLUDES= -I.. -I$(TOP) -I../../include
9CFLAG=-g 9CFLAG=-g
10INSTALL_PREFIX= 10INSTALL_PREFIX=
11OPENSSLDIR= /usr/local/ssl 11OPENSSLDIR= /usr/local/ssl
12INSTALLTOP=/usr/local/ssl 12INSTALLTOP=/usr/local/ssl
13MAKE= make -f Makefile.ssl 13MAKE= make -f Makefile.ssl
14MAKEDEPEND= $(TOP)/util/domd $(TOP) 14MAKEDEPPROG= makedepend
15MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
15MAKEFILE= Makefile.ssl 16MAKEFILE= Makefile.ssl
16AR= ar r 17AR= ar r
17 18
@@ -22,9 +23,11 @@ TEST=
22APPS= 23APPS=
23 24
24LIB=$(TOP)/libcrypto.a 25LIB=$(TOP)/libcrypto.a
25LIBSRC= pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c 26LIBSRC= pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c \
27 pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c
26 28
27LIBOBJ= pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o 29LIBOBJ= pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o \
30 pem_x509.o pem_xaux.o pem_oth.o pem_pk8.o pem_pkey.o
28 31
29SRC= $(LIBSRC) 32SRC= $(LIBSRC)
30 33
@@ -40,8 +43,7 @@ all: lib
40 43
41lib: $(LIBOBJ) 44lib: $(LIBOBJ)
42 $(AR) $(LIB) $(LIBOBJ) 45 $(AR) $(LIB) $(LIBOBJ)
43 @echo You may get an error following this line. Please ignore. 46 $(RANLIB) $(LIB) || echo Never mind.
44 - $(RANLIB) $(LIB)
45 @touch lib 47 @touch lib
46 48
47files: 49files:
@@ -80,125 +82,169 @@ clean:
80 82
81# DO NOT DELETE THIS LINE -- make depend depends on it. 83# DO NOT DELETE THIS LINE -- make depend depends on it.
82 84
83pem_all.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 85pem_all.o: ../../e_os.h ../../include/openssl/asn1.h
84pem_all.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 86pem_all.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
85pem_all.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h 87pem_all.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
86pem_all.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
87pem_all.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 88pem_all.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
88pem_all.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h 89pem_all.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
89pem_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h 90pem_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
90pem_all.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
91pem_all.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
92pem_all.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
93pem_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 91pem_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
94pem_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 92pem_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
95pem_all.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 93pem_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
96pem_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h 94pem_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
97pem_all.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 95pem_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
98pem_all.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 96pem_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
99pem_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 97pem_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
100pem_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 98pem_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_all.c
101pem_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
102pem_all.o: ../cryptlib.h
103pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 99pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
104pem_err.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 100pem_err.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
105pem_err.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h 101pem_err.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
106pem_err.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 102pem_err.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
107pem_err.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 103pem_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
108pem_err.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 104pem_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
109pem_err.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
110pem_err.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
111pem_err.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
112pem_err.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
113pem_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 105pem_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
114pem_err.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h 106pem_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
115pem_err.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 107pem_err.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
116pem_err.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h 108pem_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
117pem_err.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h 109pem_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
118pem_err.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 110pem_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
119pem_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 111pem_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
120pem_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 112pem_err.o: pem_err.c
121pem_err.o: ../../include/openssl/x509_vfy.h 113pem_info.o: ../../e_os.h ../../include/openssl/asn1.h
122pem_info.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 114pem_info.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
123pem_info.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 115pem_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
124pem_info.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
125pem_info.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
126pem_info.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 116pem_info.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
127pem_info.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h 117pem_info.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
128pem_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h 118pem_info.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
129pem_info.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
130pem_info.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
131pem_info.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
132pem_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 119pem_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
133pem_info.o: ../../include/openssl/opensslconf.h 120pem_info.o: ../../include/openssl/opensslconf.h
134pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h 121pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
135pem_info.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 122pem_info.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
136pem_info.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h 123pem_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
137pem_info.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h 124pem_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
138pem_info.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 125pem_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
139pem_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 126pem_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
140pem_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 127pem_info.o: ../cryptlib.h pem_info.c
141pem_info.o: ../../include/openssl/x509_vfy.h ../cryptlib.h 128pem_lib.o: ../../e_os.h ../../include/openssl/asn1.h
142pem_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 129pem_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
143pem_lib.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 130pem_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
144pem_lib.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h 131pem_lib.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
145pem_lib.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
146pem_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 132pem_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
147pem_lib.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h 133pem_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
148pem_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 134pem_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
149pem_lib.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
150pem_lib.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
151pem_lib.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
152pem_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 135pem_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
153pem_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 136pem_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
154pem_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 137pem_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
155pem_lib.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 138pem_lib.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
156pem_lib.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h 139pem_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
157pem_lib.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 140pem_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
158pem_lib.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 141pem_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
159pem_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 142pem_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
160pem_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 143pem_lib.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h
161pem_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 144pem_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_lib.c
162pem_lib.o: ../cryptlib.h 145pem_oth.o: ../../e_os.h ../../include/openssl/asn1.h
163pem_seal.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 146pem_oth.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
164pem_seal.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 147pem_oth.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
165pem_seal.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h 148pem_oth.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
166pem_seal.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 149pem_oth.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
150pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
151pem_oth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
152pem_oth.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
153pem_oth.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
154pem_oth.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
155pem_oth.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h
156pem_oth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
157pem_oth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
158pem_oth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
159pem_oth.o: ../cryptlib.h pem_oth.c
160pem_pk8.o: ../../e_os.h ../../include/openssl/asn1.h
161pem_pk8.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
162pem_pk8.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
163pem_pk8.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
164pem_pk8.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
165pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
166pem_pk8.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
167pem_pk8.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
168pem_pk8.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
169pem_pk8.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
170pem_pk8.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
171pem_pk8.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
172pem_pk8.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
173pem_pk8.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
174pem_pk8.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_pk8.c
175pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
176pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
177pem_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
178pem_pkey.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
179pem_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
180pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
181pem_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
182pem_pkey.o: ../../include/openssl/opensslconf.h
183pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
184pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
185pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
186pem_pkey.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h
187pem_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
188pem_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
189pem_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
190pem_pkey.o: ../cryptlib.h pem_pkey.c
191pem_seal.o: ../../e_os.h ../../include/openssl/asn1.h
192pem_seal.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
193pem_seal.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
167pem_seal.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 194pem_seal.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
168pem_seal.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h 195pem_seal.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
169pem_seal.o: ../../include/openssl/err.h ../../include/openssl/evp.h 196pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
170pem_seal.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
171pem_seal.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
172pem_seal.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
173pem_seal.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 197pem_seal.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
174pem_seal.o: ../../include/openssl/opensslconf.h 198pem_seal.o: ../../include/openssl/opensslconf.h
175pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h 199pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
176pem_seal.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 200pem_seal.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
177pem_seal.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h 201pem_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
178pem_seal.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 202pem_seal.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
179pem_seal.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 203pem_seal.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
180pem_seal.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 204pem_seal.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
181pem_seal.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 205pem_seal.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_seal.c
182pem_seal.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 206pem_sign.o: ../../e_os.h ../../include/openssl/asn1.h
183pem_seal.o: ../cryptlib.h 207pem_sign.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
184pem_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 208pem_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
185pem_sign.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
186pem_sign.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
187pem_sign.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
188pem_sign.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 209pem_sign.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
189pem_sign.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h 210pem_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
190pem_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h 211pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
191pem_sign.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
192pem_sign.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
193pem_sign.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
194pem_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 212pem_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
195pem_sign.o: ../../include/openssl/opensslconf.h 213pem_sign.o: ../../include/openssl/opensslconf.h
196pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h 214pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
197pem_sign.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 215pem_sign.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
198pem_sign.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h 216pem_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
199pem_sign.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 217pem_sign.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
200pem_sign.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 218pem_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
201pem_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 219pem_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
202pem_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 220pem_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_sign.c
203pem_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 221pem_x509.o: ../../e_os.h ../../include/openssl/asn1.h
204pem_sign.o: ../cryptlib.h 222pem_x509.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
223pem_x509.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
224pem_x509.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
225pem_x509.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
226pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
227pem_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
228pem_x509.o: ../../include/openssl/opensslconf.h
229pem_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
230pem_x509.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
231pem_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
232pem_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
233pem_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
234pem_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
235pem_x509.o: ../cryptlib.h pem_x509.c
236pem_xaux.o: ../../e_os.h ../../include/openssl/asn1.h
237pem_xaux.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
238pem_xaux.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
239pem_xaux.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
240pem_xaux.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
241pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
242pem_xaux.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
243pem_xaux.o: ../../include/openssl/opensslconf.h
244pem_xaux.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
245pem_xaux.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
246pem_xaux.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
247pem_xaux.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
248pem_xaux.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
249pem_xaux.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
250pem_xaux.o: ../cryptlib.h pem_xaux.c
diff --git a/src/lib/libcrypto/pem/pem.h b/src/lib/libcrypto/pem/pem.h
index 6d3c446577..3785fca77d 100644
--- a/src/lib/libcrypto/pem/pem.h
+++ b/src/lib/libcrypto/pem/pem.h
@@ -59,15 +59,16 @@
59#ifndef HEADER_PEM_H 59#ifndef HEADER_PEM_H
60#define HEADER_PEM_H 60#define HEADER_PEM_H
61 61
62#ifndef NO_BIO 62#ifndef OPENSSL_NO_BIO
63#include <openssl/bio.h> 63#include <openssl/bio.h>
64#endif 64#endif
65#ifndef NO_STACK 65#ifndef OPENSSL_NO_STACK
66#include <openssl/stack.h> 66#include <openssl/stack.h>
67#endif 67#endif
68#include <openssl/evp.h> 68#include <openssl/evp.h>
69#include <openssl/x509.h> 69#include <openssl/x509.h>
70#include <openssl/pem2.h> 70#include <openssl/pem2.h>
71#include <openssl/e_os2.h>
71 72
72#ifdef __cplusplus 73#ifdef __cplusplus
73extern "C" { 74extern "C" {
@@ -126,7 +127,8 @@ extern "C" {
126#define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" 127#define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
127#define PEM_STRING_DSAPARAMS "DSA PARAMETERS" 128#define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
128 129
129 130 /* Note that this structure is initialised by PEM_SealInit and cleaned up
131 by PEM_SealFinal (at least for now) */
130typedef struct PEM_Encode_Seal_st 132typedef struct PEM_Encode_Seal_st
131 { 133 {
132 EVP_ENCODE_CTX encode; 134 EVP_ENCODE_CTX encode;
@@ -171,7 +173,7 @@ typedef struct pem_ctx_st
171 int num_recipient; 173 int num_recipient;
172 PEM_USER **recipient; 174 PEM_USER **recipient;
173 175
174#ifndef NO_STACK 176#ifndef OPENSSL_NO_STACK
175 STACK *x509_chain; /* certificate chain */ 177 STACK *x509_chain; /* certificate chain */
176#else 178#else
177 char *x509_chain; /* certificate chain */ 179 char *x509_chain; /* certificate chain */
@@ -198,7 +200,7 @@ typedef struct pem_ctx_st
198 * IMPLEMENT_PEM_rw(...) or IMPLEMENT_PEM_rw_cb(...) 200 * IMPLEMENT_PEM_rw(...) or IMPLEMENT_PEM_rw_cb(...)
199 */ 201 */
200 202
201#ifdef NO_FP_API 203#ifdef OPENSSL_NO_FP_API
202 204
203#define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ 205#define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/
204#define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ 206#define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/
@@ -275,7 +277,7 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
275 277
276/* These are the same except they are for the declarations */ 278/* These are the same except they are for the declarations */
277 279
278#if defined(WIN16) || defined(NO_FP_API) 280#if defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_NO_FP_API)
279 281
280#define DECLARE_PEM_read_fp(name, type) /**/ 282#define DECLARE_PEM_read_fp(name, type) /**/
281#define DECLARE_PEM_write_fp(name, type) /**/ 283#define DECLARE_PEM_write_fp(name, type) /**/
@@ -295,7 +297,7 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
295 297
296#endif 298#endif
297 299
298#ifndef NO_BIO 300#ifndef OPENSSL_NO_BIO
299#define DECLARE_PEM_read_bio(name, type) \ 301#define DECLARE_PEM_read_bio(name, type) \
300 type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); 302 type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u);
301 303
@@ -483,11 +485,13 @@ int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher);
483int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len, 485int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len,
484 pem_password_cb *callback,void *u); 486 pem_password_cb *callback,void *u);
485 487
486#ifndef NO_BIO 488#ifndef OPENSSL_NO_BIO
487int PEM_read_bio(BIO *bp, char **name, char **header, 489int PEM_read_bio(BIO *bp, char **name, char **header,
488 unsigned char **data,long *len); 490 unsigned char **data,long *len);
489int PEM_write_bio(BIO *bp,const char *name,char *hdr,unsigned char *data, 491int PEM_write_bio(BIO *bp,const char *name,char *hdr,unsigned char *data,
490 long len); 492 long len);
493int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp,
494 pem_password_cb *cb, void *u);
491char * PEM_ASN1_read_bio(char *(*d2i)(),const char *name,BIO *bp,char **x, 495char * PEM_ASN1_read_bio(char *(*d2i)(),const char *name,BIO *bp,char **x,
492 pem_password_cb *cb, void *u); 496 pem_password_cb *cb, void *u);
493int PEM_ASN1_write_bio(int (*i2d)(),const char *name,BIO *bp,char *x, 497int PEM_ASN1_write_bio(int (*i2d)(),const char *name,BIO *bp,char *x,
@@ -498,7 +502,7 @@ int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,
498 unsigned char *kstr, int klen, pem_password_cb *cd, void *u); 502 unsigned char *kstr, int klen, pem_password_cb *cd, void *u);
499#endif 503#endif
500 504
501#ifndef WIN16 505#ifndef OPENSSL_SYS_WIN16
502int PEM_read(FILE *fp, char **name, char **header, 506int PEM_read(FILE *fp, char **name, char **header,
503 unsigned char **data,long *len); 507 unsigned char **data,long *len);
504int PEM_write(FILE *fp,char *name,char *hdr,unsigned char *data,long len); 508int PEM_write(FILE *fp,char *name,char *hdr,unsigned char *data,long len);
@@ -524,8 +528,7 @@ void PEM_SignUpdate(EVP_MD_CTX *ctx,unsigned char *d,unsigned int cnt);
524int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, 528int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
525 unsigned int *siglen, EVP_PKEY *pkey); 529 unsigned int *siglen, EVP_PKEY *pkey);
526 530
527void ERR_load_PEM_strings(void); 531int PEM_def_callback(char *buf, int num, int w, void *key);
528
529void PEM_proc_type(char *buf, int type); 532void PEM_proc_type(char *buf, int type);
530void PEM_dek_info(char *buf, const char *type, int len, char *str); 533void PEM_dek_info(char *buf, const char *type, int len, char *str);
531 534
@@ -550,7 +553,7 @@ DECLARE_PEM_rw(PKCS8, X509_SIG)
550 553
551DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) 554DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO)
552 555
553#ifndef NO_RSA 556#ifndef OPENSSL_NO_RSA
554 557
555DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) 558DECLARE_PEM_rw_cb(RSAPrivateKey, RSA)
556 559
@@ -559,7 +562,7 @@ DECLARE_PEM_rw(RSA_PUBKEY, RSA)
559 562
560#endif 563#endif
561 564
562#ifndef NO_DSA 565#ifndef OPENSSL_NO_DSA
563 566
564DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) 567DECLARE_PEM_rw_cb(DSAPrivateKey, DSA)
565 568
@@ -569,7 +572,7 @@ DECLARE_PEM_rw(DSAparams, DSA)
569 572
570#endif 573#endif
571 574
572#ifndef NO_DH 575#ifndef OPENSSL_NO_DH
573 576
574DECLARE_PEM_rw(DHparams, DH) 577DECLARE_PEM_rw(DHparams, DH)
575 578
@@ -614,6 +617,7 @@ int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
614/* The following lines are auto generated by the script mkerr.pl. Any changes 617/* The following lines are auto generated by the script mkerr.pl. Any changes
615 * made after this point may be overwritten when the script is next run. 618 * made after this point may be overwritten when the script is next run.
616 */ 619 */
620void ERR_load_PEM_strings(void);
617 621
618/* Error codes for the PEM functions. */ 622/* Error codes for the PEM functions. */
619 623
@@ -664,4 +668,3 @@ int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
664} 668}
665#endif 669#endif
666#endif 670#endif
667
diff --git a/src/lib/libcrypto/pem/pem_all.c b/src/lib/libcrypto/pem/pem_all.c
index dc9c35b4b4..e72b7134ce 100644
--- a/src/lib/libcrypto/pem/pem_all.c
+++ b/src/lib/libcrypto/pem/pem_all.c
@@ -65,17 +65,13 @@
65#include <openssl/pkcs7.h> 65#include <openssl/pkcs7.h>
66#include <openssl/pem.h> 66#include <openssl/pem.h>
67 67
68#ifndef NO_RSA 68#ifndef OPENSSL_NO_RSA
69static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa); 69static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa);
70#endif 70#endif
71#ifndef NO_DSA 71#ifndef OPENSSL_NO_DSA
72static DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa); 72static DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa);
73#endif 73#endif
74 74
75IMPLEMENT_PEM_rw(X509, X509, PEM_STRING_X509, X509)
76
77IMPLEMENT_PEM_rw(X509_AUX, X509, PEM_STRING_X509_TRUSTED, X509_AUX)
78
79IMPLEMENT_PEM_rw(X509_REQ, X509_REQ, PEM_STRING_X509_REQ, X509_REQ) 75IMPLEMENT_PEM_rw(X509_REQ, X509_REQ, PEM_STRING_X509_REQ, X509_REQ)
80 76
81IMPLEMENT_PEM_write(X509_REQ_NEW, X509_REQ, PEM_STRING_X509_REQ_OLD, X509_REQ) 77IMPLEMENT_PEM_write(X509_REQ_NEW, X509_REQ, PEM_STRING_X509_REQ_OLD, X509_REQ)
@@ -87,11 +83,8 @@ IMPLEMENT_PEM_rw(PKCS7, PKCS7, PEM_STRING_PKCS7, PKCS7)
87IMPLEMENT_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE, 83IMPLEMENT_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE,
88 PEM_STRING_X509, NETSCAPE_CERT_SEQUENCE) 84 PEM_STRING_X509, NETSCAPE_CERT_SEQUENCE)
89 85
90IMPLEMENT_PEM_rw(PKCS8, X509_SIG, PEM_STRING_PKCS8, X509_SIG)
91IMPLEMENT_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO, PEM_STRING_PKCS8INF,
92 PKCS8_PRIV_KEY_INFO)
93 86
94#ifndef NO_RSA 87#ifndef OPENSSL_NO_RSA
95 88
96/* We treat RSA or DSA private keys as a special case. 89/* We treat RSA or DSA private keys as a special case.
97 * 90 *
@@ -123,7 +116,7 @@ RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **rsa, pem_password_cb *cb,
123 return pkey_get_rsa(pktmp, rsa); 116 return pkey_get_rsa(pktmp, rsa);
124} 117}
125 118
126#ifndef NO_FP_API 119#ifndef OPENSSL_NO_FP_API
127 120
128RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb, 121RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb,
129 void *u) 122 void *u)
@@ -141,7 +134,7 @@ IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY)
141 134
142#endif 135#endif
143 136
144#ifndef NO_DSA 137#ifndef OPENSSL_NO_DSA
145 138
146static DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa) 139static DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa)
147{ 140{
@@ -168,7 +161,7 @@ DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **dsa, pem_password_cb *cb,
168IMPLEMENT_PEM_write_cb(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey) 161IMPLEMENT_PEM_write_cb(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey)
169IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY) 162IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY)
170 163
171#ifndef NO_FP_API 164#ifndef OPENSSL_NO_FP_API
172 165
173DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **dsa, pem_password_cb *cb, 166DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **dsa, pem_password_cb *cb,
174 void *u) 167 void *u)
@@ -184,7 +177,7 @@ IMPLEMENT_PEM_rw(DSAparams, DSA, PEM_STRING_DSAPARAMS, DSAparams)
184 177
185#endif 178#endif
186 179
187#ifndef NO_DH 180#ifndef OPENSSL_NO_DH
188 181
189IMPLEMENT_PEM_rw(DHparams, DH, PEM_STRING_DHPARAMS, DHparams) 182IMPLEMENT_PEM_rw(DHparams, DH, PEM_STRING_DHPARAMS, DHparams)
190 183
@@ -197,7 +190,7 @@ IMPLEMENT_PEM_rw(DHparams, DH, PEM_STRING_DHPARAMS, DHparams)
197 * (When reading, parameter PEM_STRING_EVP_PKEY is a wildcard for anything 190 * (When reading, parameter PEM_STRING_EVP_PKEY is a wildcard for anything
198 * appropriate.) 191 * appropriate.)
199 */ 192 */
200IMPLEMENT_PEM_read(PrivateKey, EVP_PKEY, PEM_STRING_EVP_PKEY, PrivateKey)
201IMPLEMENT_PEM_write_cb(PrivateKey, EVP_PKEY, ((x->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), PrivateKey) 193IMPLEMENT_PEM_write_cb(PrivateKey, EVP_PKEY, ((x->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), PrivateKey)
202 194
203IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY) 195IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY)
196
diff --git a/src/lib/libcrypto/pem/pem_err.c b/src/lib/libcrypto/pem/pem_err.c
index 8b1789b11c..3b39b84d66 100644
--- a/src/lib/libcrypto/pem/pem_err.c
+++ b/src/lib/libcrypto/pem/pem_err.c
@@ -63,7 +63,7 @@
63#include <openssl/pem.h> 63#include <openssl/pem.h>
64 64
65/* BEGIN ERROR CODES */ 65/* BEGIN ERROR CODES */
66#ifndef NO_ERR 66#ifndef OPENSSL_NO_ERR
67static ERR_STRING_DATA PEM_str_functs[]= 67static ERR_STRING_DATA PEM_str_functs[]=
68 { 68 {
69{ERR_PACK(0,PEM_F_D2I_PKCS8PRIVATEKEY_BIO,0), "d2i_PKCS8PrivateKey_bio"}, 69{ERR_PACK(0,PEM_F_D2I_PKCS8PRIVATEKEY_BIO,0), "d2i_PKCS8PrivateKey_bio"},
@@ -122,7 +122,7 @@ void ERR_load_PEM_strings(void)
122 if (init) 122 if (init)
123 { 123 {
124 init=0; 124 init=0;
125#ifndef NO_ERR 125#ifndef OPENSSL_NO_ERR
126 ERR_load_strings(ERR_LIB_PEM,PEM_str_functs); 126 ERR_load_strings(ERR_LIB_PEM,PEM_str_functs);
127 ERR_load_strings(ERR_LIB_PEM,PEM_str_reasons); 127 ERR_load_strings(ERR_LIB_PEM,PEM_str_reasons);
128#endif 128#endif
diff --git a/src/lib/libcrypto/pem/pem_info.c b/src/lib/libcrypto/pem/pem_info.c
index f1694f1125..9a6dffb45c 100644
--- a/src/lib/libcrypto/pem/pem_info.c
+++ b/src/lib/libcrypto/pem/pem_info.c
@@ -64,7 +64,7 @@
64#include <openssl/x509.h> 64#include <openssl/x509.h>
65#include <openssl/pem.h> 65#include <openssl/pem.h>
66 66
67#ifndef NO_FP_API 67#ifndef OPENSSL_NO_FP_API
68STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u) 68STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u)
69 { 69 {
70 BIO *b; 70 BIO *b;
@@ -111,7 +111,7 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pe
111 i=PEM_read_bio(bp,&name,&header,&data,&len); 111 i=PEM_read_bio(bp,&name,&header,&data,&len);
112 if (i == 0) 112 if (i == 0)
113 { 113 {
114 error=ERR_GET_REASON(ERR_peek_error()); 114 error=ERR_GET_REASON(ERR_peek_last_error());
115 if (error == PEM_R_NO_START_LINE) 115 if (error == PEM_R_NO_START_LINE)
116 { 116 {
117 ERR_clear_error(); 117 ERR_clear_error();
@@ -155,7 +155,7 @@ start:
155 pp=(char **)&(xi->crl); 155 pp=(char **)&(xi->crl);
156 } 156 }
157 else 157 else
158#ifndef NO_RSA 158#ifndef OPENSSL_NO_RSA
159 if (strcmp(name,PEM_STRING_RSA) == 0) 159 if (strcmp(name,PEM_STRING_RSA) == 0)
160 { 160 {
161 d2i=(char *(*)())d2i_RSAPrivateKey; 161 d2i=(char *(*)())d2i_RSAPrivateKey;
@@ -179,7 +179,7 @@ start:
179 } 179 }
180 else 180 else
181#endif 181#endif
182#ifndef NO_DSA 182#ifndef OPENSSL_NO_DSA
183 if (strcmp(name,PEM_STRING_DSA) == 0) 183 if (strcmp(name,PEM_STRING_DSA) == 0)
184 { 184 {
185 d2i=(char *(*)())d2i_DSAPrivateKey; 185 d2i=(char *(*)())d2i_DSAPrivateKey;
@@ -326,7 +326,7 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,
326 /* create the right magic header stuff */ 326 /* create the right magic header stuff */
327 buf[0]='\0'; 327 buf[0]='\0';
328 PEM_proc_type(buf,PEM_TYPE_ENCRYPTED); 328 PEM_proc_type(buf,PEM_TYPE_ENCRYPTED);
329 PEM_dek_info(buf,objstr,8,(char *)iv); 329 PEM_dek_info(buf,objstr,enc->iv_len,(char *)iv);
330 330
331 /* use the normal code to write things out */ 331 /* use the normal code to write things out */
332 i=PEM_write_bio(bp,PEM_STRING_RSA,buf,data,i); 332 i=PEM_write_bio(bp,PEM_STRING_RSA,buf,data,i);
@@ -335,7 +335,7 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,
335 else 335 else
336 { 336 {
337 /* Add DSA/DH */ 337 /* Add DSA/DH */
338#ifndef NO_RSA 338#ifndef OPENSSL_NO_RSA
339 /* normal optionally encrypted stuff */ 339 /* normal optionally encrypted stuff */
340 if (PEM_write_bio_RSAPrivateKey(bp, 340 if (PEM_write_bio_RSAPrivateKey(bp,
341 xi->x_pkey->dec_pkey->pkey.rsa, 341 xi->x_pkey->dec_pkey->pkey.rsa,
@@ -346,7 +346,7 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,
346 } 346 }
347 347
348 /* if we have a certificate then write it out now */ 348 /* if we have a certificate then write it out now */
349 if ((xi->x509 != NULL) || (PEM_write_bio_X509(bp,xi->x509) <= 0)) 349 if ((xi->x509 != NULL) && (PEM_write_bio_X509(bp,xi->x509) <= 0))
350 goto err; 350 goto err;
351 351
352 /* we are ignoring anything else that is loaded into the X509_INFO 352 /* we are ignoring anything else that is loaded into the X509_INFO
diff --git a/src/lib/libcrypto/pem/pem_lib.c b/src/lib/libcrypto/pem/pem_lib.c
index a17c3ed57f..18b751a91a 100644
--- a/src/lib/libcrypto/pem/pem_lib.c
+++ b/src/lib/libcrypto/pem/pem_lib.c
@@ -65,7 +65,7 @@
65#include <openssl/x509.h> 65#include <openssl/x509.h>
66#include <openssl/pem.h> 66#include <openssl/pem.h>
67#include <openssl/pkcs12.h> 67#include <openssl/pkcs12.h>
68#ifndef NO_DES 68#ifndef OPENSSL_NO_DES
69#include <openssl/des.h> 69#include <openssl/des.h>
70#endif 70#endif
71 71
@@ -73,21 +73,12 @@ const char *PEM_version="PEM" OPENSSL_VERSION_PTEXT;
73 73
74#define MIN_LENGTH 4 74#define MIN_LENGTH 4
75 75
76static int def_callback(char *buf, int num, int w, void *userdata);
77static int load_iv(unsigned char **fromp,unsigned char *to, int num); 76static int load_iv(unsigned char **fromp,unsigned char *to, int num);
78static int check_pem(const char *nm, const char *name); 77static int check_pem(const char *nm, const char *name);
79static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder, 78
80 int nid, const EVP_CIPHER *enc, 79int PEM_def_callback(char *buf, int num, int w, void *key)
81 char *kstr, int klen,
82 pem_password_cb *cb, void *u);
83static int do_pk8pkey_fp(FILE *bp, EVP_PKEY *x, int isder,
84 int nid, const EVP_CIPHER *enc,
85 char *kstr, int klen,
86 pem_password_cb *cb, void *u);
87
88static int def_callback(char *buf, int num, int w, void *key)
89 { 80 {
90#ifdef NO_FP_API 81#ifdef OPENSSL_NO_FP_API
91 /* We should not ever call the default callback routine from 82 /* We should not ever call the default callback routine from
92 * windows. */ 83 * windows. */
93 PEMerr(PEM_F_DEF_CALLBACK,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 84 PEMerr(PEM_F_DEF_CALLBACK,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
@@ -164,7 +155,7 @@ void PEM_dek_info(char *buf, const char *type, int len, char *str)
164 buf[j+i*2+1]='\0'; 155 buf[j+i*2+1]='\0';
165 } 156 }
166 157
167#ifndef NO_FP_API 158#ifndef OPENSSL_NO_FP_API
168char *PEM_ASN1_read(char *(*d2i)(), const char *name, FILE *fp, char **x, 159char *PEM_ASN1_read(char *(*d2i)(), const char *name, FILE *fp, char **x,
169 pem_password_cb *cb, void *u) 160 pem_password_cb *cb, void *u)
170 { 161 {
@@ -224,14 +215,14 @@ static int check_pem(const char *nm, const char *name)
224 return 0; 215 return 0;
225} 216}
226 217
227char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x, 218int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp,
228 pem_password_cb *cb, void *u) 219 pem_password_cb *cb, void *u)
229 { 220 {
230 EVP_CIPHER_INFO cipher; 221 EVP_CIPHER_INFO cipher;
231 char *nm=NULL,*header=NULL; 222 char *nm=NULL,*header=NULL;
232 unsigned char *p=NULL,*data=NULL; 223 unsigned char *data=NULL;
233 long len; 224 long len;
234 char *ret=NULL; 225 int ret = 0;
235 226
236 for (;;) 227 for (;;)
237 { 228 {
@@ -239,7 +230,7 @@ char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
239 if(ERR_GET_REASON(ERR_peek_error()) == 230 if(ERR_GET_REASON(ERR_peek_error()) ==
240 PEM_R_NO_START_LINE) 231 PEM_R_NO_START_LINE)
241 ERR_add_error_data(2, "Expecting: ", name); 232 ERR_add_error_data(2, "Expecting: ", name);
242 return(NULL); 233 return 0;
243 } 234 }
244 if(check_pem(nm, name)) break; 235 if(check_pem(nm, name)) break;
245 OPENSSL_free(nm); 236 OPENSSL_free(nm);
@@ -248,54 +239,23 @@ char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
248 } 239 }
249 if (!PEM_get_EVP_CIPHER_INFO(header,&cipher)) goto err; 240 if (!PEM_get_EVP_CIPHER_INFO(header,&cipher)) goto err;
250 if (!PEM_do_header(&cipher,data,&len,cb,u)) goto err; 241 if (!PEM_do_header(&cipher,data,&len,cb,u)) goto err;
251 p=data; 242
252 if (strcmp(name,PEM_STRING_EVP_PKEY) == 0) { 243 *pdata = data;
253 if (strcmp(nm,PEM_STRING_RSA) == 0) 244 *plen = len;
254 ret=d2i(EVP_PKEY_RSA,x,&p,len); 245
255 else if (strcmp(nm,PEM_STRING_DSA) == 0) 246 if (pnm)
256 ret=d2i(EVP_PKEY_DSA,x,&p,len); 247 *pnm = nm;
257 else if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) { 248
258 PKCS8_PRIV_KEY_INFO *p8inf; 249 ret = 1;
259 p8inf=d2i_PKCS8_PRIV_KEY_INFO( 250
260 (PKCS8_PRIV_KEY_INFO **) x, &p, len);
261 ret = (char *)EVP_PKCS82PKEY(p8inf);
262 PKCS8_PRIV_KEY_INFO_free(p8inf);
263 } else if (strcmp(nm,PEM_STRING_PKCS8) == 0) {
264 PKCS8_PRIV_KEY_INFO *p8inf;
265 X509_SIG *p8;
266 int klen;
267 char psbuf[PEM_BUFSIZE];
268 p8 = d2i_X509_SIG(NULL, &p, len);
269 if(!p8) goto p8err;
270 if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
271 else klen=def_callback(psbuf,PEM_BUFSIZE,0,u);
272 if (klen <= 0) {
273 PEMerr(PEM_F_PEM_ASN1_READ_BIO,
274 PEM_R_BAD_PASSWORD_READ);
275 goto err;
276 }
277 p8inf = M_PKCS8_decrypt(p8, psbuf, klen);
278 X509_SIG_free(p8);
279 if(!p8inf) goto p8err;
280 ret = (char *)EVP_PKCS82PKEY(p8inf);
281 if(x) {
282 if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
283 *x = ret;
284 }
285 PKCS8_PRIV_KEY_INFO_free(p8inf);
286 }
287 } else ret=d2i(x,&p,len);
288p8err:
289 if (ret == NULL)
290 PEMerr(PEM_F_PEM_ASN1_READ_BIO,ERR_R_ASN1_LIB);
291err: 251err:
292 OPENSSL_free(nm); 252 if (!pnm) OPENSSL_free(nm);
293 OPENSSL_free(header); 253 OPENSSL_free(header);
294 OPENSSL_free(data); 254 if (!ret) OPENSSL_free(data);
295 return(ret); 255 return ret;
296 } 256 }
297 257
298#ifndef NO_FP_API 258#ifndef OPENSSL_NO_FP_API
299int PEM_ASN1_write(int (*i2d)(), const char *name, FILE *fp, char *x, 259int PEM_ASN1_write(int (*i2d)(), const char *name, FILE *fp, char *x,
300 const EVP_CIPHER *enc, unsigned char *kstr, int klen, 260 const EVP_CIPHER *enc, unsigned char *kstr, int klen,
301 pem_password_cb *callback, void *u) 261 pem_password_cb *callback, void *u)
@@ -358,7 +318,7 @@ int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x,
358 if (kstr == NULL) 318 if (kstr == NULL)
359 { 319 {
360 if (callback == NULL) 320 if (callback == NULL)
361 klen=def_callback(buf,PEM_BUFSIZE,1,u); 321 klen=PEM_def_callback(buf,PEM_BUFSIZE,1,u);
362 else 322 else
363 klen=(*callback)(buf,PEM_BUFSIZE,1,u); 323 klen=(*callback)(buf,PEM_BUFSIZE,1,u);
364 if (klen <= 0) 324 if (klen <= 0)
@@ -373,7 +333,7 @@ int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x,
373 kstr=(unsigned char *)buf; 333 kstr=(unsigned char *)buf;
374 } 334 }
375 RAND_add(data,i,0);/* put in the RSA key. */ 335 RAND_add(data,i,0);/* put in the RSA key. */
376 if (RAND_pseudo_bytes(iv,8) < 0) /* Generate a salt */ 336 if (RAND_pseudo_bytes(iv,enc->iv_len) < 0) /* Generate a salt */
377 goto err; 337 goto err;
378 /* The 'iv' is used as the iv and as a salt. It is 338 /* The 'iv' is used as the iv and as a salt. It is
379 * NOT taken from the BytesToKey function */ 339 * NOT taken from the BytesToKey function */
@@ -383,12 +343,14 @@ int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x,
383 343
384 buf[0]='\0'; 344 buf[0]='\0';
385 PEM_proc_type(buf,PEM_TYPE_ENCRYPTED); 345 PEM_proc_type(buf,PEM_TYPE_ENCRYPTED);
386 PEM_dek_info(buf,objstr,8,(char *)iv); 346 PEM_dek_info(buf,objstr,enc->iv_len,(char *)iv);
387 /* k=strlen(buf); */ 347 /* k=strlen(buf); */
388 348
389 EVP_EncryptInit(&ctx,enc,key,iv); 349 EVP_CIPHER_CTX_init(&ctx);
350 EVP_EncryptInit_ex(&ctx,enc,NULL,key,iv);
390 EVP_EncryptUpdate(&ctx,data,&j,data,i); 351 EVP_EncryptUpdate(&ctx,data,&j,data,i);
391 EVP_EncryptFinal(&ctx,&(data[j]),&i); 352 EVP_EncryptFinal_ex(&ctx,&(data[j]),&i);
353 EVP_CIPHER_CTX_cleanup(&ctx);
392 i+=j; 354 i+=j;
393 ret=1; 355 ret=1;
394 } 356 }
@@ -422,7 +384,7 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen,
422 384
423 if (cipher->cipher == NULL) return(1); 385 if (cipher->cipher == NULL) return(1);
424 if (callback == NULL) 386 if (callback == NULL)
425 klen=def_callback(buf,PEM_BUFSIZE,0,u); 387 klen=PEM_def_callback(buf,PEM_BUFSIZE,0,u);
426 else 388 else
427 klen=callback(buf,PEM_BUFSIZE,0,u); 389 klen=callback(buf,PEM_BUFSIZE,0,u);
428 if (klen <= 0) 390 if (klen <= 0)
@@ -439,9 +401,10 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen,
439 (unsigned char *)buf,klen,1,key,NULL); 401 (unsigned char *)buf,klen,1,key,NULL);
440 402
441 j=(int)len; 403 j=(int)len;
442 EVP_DecryptInit(&ctx,cipher->cipher,key,&(cipher->iv[0])); 404 EVP_CIPHER_CTX_init(&ctx);
405 EVP_DecryptInit_ex(&ctx,cipher->cipher,NULL, key,&(cipher->iv[0]));
443 EVP_DecryptUpdate(&ctx,data,&i,data,j); 406 EVP_DecryptUpdate(&ctx,data,&i,data,j);
444 o=EVP_DecryptFinal(&ctx,&(data[i]),&j); 407 o=EVP_DecryptFinal_ex(&ctx,&(data[i]),&j);
445 EVP_CIPHER_CTX_cleanup(&ctx); 408 EVP_CIPHER_CTX_cleanup(&ctx);
446 memset((char *)buf,0,sizeof(buf)); 409 memset((char *)buf,0,sizeof(buf));
447 memset((char *)key,0,sizeof(key)); 410 memset((char *)key,0,sizeof(key));
@@ -506,7 +469,7 @@ int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher)
506 PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION); 469 PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION);
507 return(0); 470 return(0);
508 } 471 }
509 if (!load_iv((unsigned char **)&header,&(cipher->iv[0]),8)) return(0); 472 if (!load_iv((unsigned char **)&header,&(cipher->iv[0]),enc->iv_len)) return(0);
510 473
511 return(1); 474 return(1);
512 } 475 }
@@ -540,7 +503,7 @@ static int load_iv(unsigned char **fromp, unsigned char *to, int num)
540 return(1); 503 return(1);
541 } 504 }
542 505
543#ifndef NO_FP_API 506#ifndef OPENSSL_NO_FP_API
544int PEM_write(FILE *fp, char *name, char *header, unsigned char *data, 507int PEM_write(FILE *fp, char *name, char *header, unsigned char *data,
545 long len) 508 long len)
546 { 509 {
@@ -614,7 +577,7 @@ err:
614 return(0); 577 return(0);
615 } 578 }
616 579
617#ifndef NO_FP_API 580#ifndef OPENSSL_NO_FP_API
618int PEM_read(FILE *fp, char **name, char **header, unsigned char **data, 581int PEM_read(FILE *fp, char **name, char **header, unsigned char **data,
619 long *len) 582 long *len)
620 { 583 {
@@ -794,170 +757,3 @@ err:
794 BUF_MEM_free(dataB); 757 BUF_MEM_free(dataB);
795 return(0); 758 return(0);
796 } 759 }
797
798/* These functions write a private key in PKCS#8 format: it is a "drop in"
799 * replacement for PEM_write_bio_PrivateKey() and friends. As usual if 'enc'
800 * is NULL then it uses the unencrypted private key form. The 'nid' versions
801 * uses PKCS#5 v1.5 PBE algorithms whereas the others use PKCS#5 v2.0.
802 */
803
804int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
805 char *kstr, int klen,
806 pem_password_cb *cb, void *u)
807{
808 return do_pk8pkey(bp, x, 0, nid, NULL, kstr, klen, cb, u);
809}
810
811int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
812 char *kstr, int klen,
813 pem_password_cb *cb, void *u)
814{
815 return do_pk8pkey(bp, x, 0, -1, enc, kstr, klen, cb, u);
816}
817
818int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
819 char *kstr, int klen,
820 pem_password_cb *cb, void *u)
821{
822 return do_pk8pkey(bp, x, 1, -1, enc, kstr, klen, cb, u);
823}
824
825int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
826 char *kstr, int klen,
827 pem_password_cb *cb, void *u)
828{
829 return do_pk8pkey(bp, x, 1, nid, NULL, kstr, klen, cb, u);
830}
831
832static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder, int nid, const EVP_CIPHER *enc,
833 char *kstr, int klen,
834 pem_password_cb *cb, void *u)
835{
836 X509_SIG *p8;
837 PKCS8_PRIV_KEY_INFO *p8inf;
838 char buf[PEM_BUFSIZE];
839 int ret;
840 if(!(p8inf = EVP_PKEY2PKCS8(x))) {
841 PEMerr(PEM_F_PEM_WRITE_BIO_PKCS8PRIVATEKEY,
842 PEM_R_ERROR_CONVERTING_PRIVATE_KEY);
843 return 0;
844 }
845 if(enc || (nid != -1)) {
846 if(!kstr) {
847 if(!cb) klen = def_callback(buf, PEM_BUFSIZE, 1, u);
848 else klen = cb(buf, PEM_BUFSIZE, 1, u);
849 if(klen <= 0) {
850 PEMerr(PEM_F_PEM_WRITE_BIO_PKCS8PRIVATEKEY,
851 PEM_R_READ_KEY);
852 PKCS8_PRIV_KEY_INFO_free(p8inf);
853 return 0;
854 }
855
856 kstr = buf;
857 }
858 p8 = PKCS8_encrypt(nid, enc, kstr, klen, NULL, 0, 0, p8inf);
859 if(kstr == buf) memset(buf, 0, klen);
860 PKCS8_PRIV_KEY_INFO_free(p8inf);
861 if(isder) ret = i2d_PKCS8_bio(bp, p8);
862 else ret = PEM_write_bio_PKCS8(bp, p8);
863 X509_SIG_free(p8);
864 return ret;
865 } else {
866 if(isder) ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
867 else ret = PEM_write_bio_PKCS8_PRIV_KEY_INFO(bp, p8inf);
868 PKCS8_PRIV_KEY_INFO_free(p8inf);
869 return ret;
870 }
871}
872
873/* Finally the DER version to read PKCS#8 encrypted private keys. It has to be
874 * here to access the default callback.
875 */
876
877EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u)
878{
879 PKCS8_PRIV_KEY_INFO *p8inf = NULL;
880 X509_SIG *p8 = NULL;
881 int klen;
882 EVP_PKEY *ret;
883 char psbuf[PEM_BUFSIZE];
884 p8 = d2i_PKCS8_bio(bp, NULL);
885 if(!p8) return NULL;
886 if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
887 else klen=def_callback(psbuf,PEM_BUFSIZE,0,u);
888 if (klen <= 0) {
889 PEMerr(PEM_F_D2I_PKCS8PRIVATEKEY_BIO, PEM_R_BAD_PASSWORD_READ);
890 X509_SIG_free(p8);
891 return NULL;
892 }
893 p8inf = M_PKCS8_decrypt(p8, psbuf, klen);
894 X509_SIG_free(p8);
895 if(!p8inf) return NULL;
896 ret = EVP_PKCS82PKEY(p8inf);
897 PKCS8_PRIV_KEY_INFO_free(p8inf);
898 if(!ret) return NULL;
899 if(x) {
900 if(*x) EVP_PKEY_free(*x);
901 *x = ret;
902 }
903 return ret;
904}
905
906#ifndef NO_FP_API
907
908int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
909 char *kstr, int klen,
910 pem_password_cb *cb, void *u)
911{
912 return do_pk8pkey_fp(fp, x, 1, -1, enc, kstr, klen, cb, u);
913}
914
915int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
916 char *kstr, int klen,
917 pem_password_cb *cb, void *u)
918{
919 return do_pk8pkey_fp(fp, x, 1, nid, NULL, kstr, klen, cb, u);
920}
921
922int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
923 char *kstr, int klen,
924 pem_password_cb *cb, void *u)
925{
926 return do_pk8pkey_fp(fp, x, 0, nid, NULL, kstr, klen, cb, u);
927}
928
929int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
930 char *kstr, int klen, pem_password_cb *cb, void *u)
931{
932 return do_pk8pkey_fp(fp, x, 0, -1, enc, kstr, klen, cb, u);
933}
934
935static int do_pk8pkey_fp(FILE *fp, EVP_PKEY *x, int isder, int nid, const EVP_CIPHER *enc,
936 char *kstr, int klen,
937 pem_password_cb *cb, void *u)
938{
939 BIO *bp;
940 int ret;
941 if(!(bp = BIO_new_fp(fp, BIO_NOCLOSE))) {
942 PEMerr(PEM_F_PEM_F_DO_PK8KEY_FP,ERR_R_BUF_LIB);
943 return(0);
944 }
945 ret = do_pk8pkey(bp, x, isder, nid, enc, kstr, klen, cb, u);
946 BIO_free(bp);
947 return ret;
948}
949
950EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u)
951{
952 BIO *bp;
953 EVP_PKEY *ret;
954 if(!(bp = BIO_new_fp(fp, BIO_NOCLOSE))) {
955 PEMerr(PEM_F_D2I_PKCS8PRIVATEKEY_FP,ERR_R_BUF_LIB);
956 return NULL;
957 }
958 ret = d2i_PKCS8PrivateKey_bio(bp, x, cb, u);
959 BIO_free(bp);
960 return ret;
961}
962
963#endif
diff --git a/src/lib/libcrypto/pem/pem_oth.c b/src/lib/libcrypto/pem/pem_oth.c
new file mode 100644
index 0000000000..8d9064ea7c
--- /dev/null
+++ b/src/lib/libcrypto/pem/pem_oth.c
@@ -0,0 +1,85 @@
1/* crypto/pem/pem_oth.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 "cryptlib.h"
61#include <openssl/buffer.h>
62#include <openssl/objects.h>
63#include <openssl/evp.h>
64#include <openssl/rand.h>
65#include <openssl/x509.h>
66#include <openssl/pem.h>
67
68/* Handle 'other' PEMs: not private keys */
69
70char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
71 pem_password_cb *cb, void *u)
72 {
73 unsigned char *p=NULL,*data=NULL;
74 long len;
75 char *ret=NULL;
76
77 if (!PEM_bytes_read_bio(&data, &len, NULL, name, bp, cb, u))
78 return NULL;
79 p = data;
80 ret=d2i(x,&p,len);
81 if (ret == NULL)
82 PEMerr(PEM_F_PEM_ASN1_READ_BIO,ERR_R_ASN1_LIB);
83 OPENSSL_free(data);
84 return(ret);
85 }
diff --git a/src/lib/libcrypto/pem/pem_pk8.c b/src/lib/libcrypto/pem/pem_pk8.c
new file mode 100644
index 0000000000..f44182ffb5
--- /dev/null
+++ b/src/lib/libcrypto/pem/pem_pk8.c
@@ -0,0 +1,243 @@
1/* crypto/pem/pem_pkey.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 "cryptlib.h"
61#include <openssl/buffer.h>
62#include <openssl/objects.h>
63#include <openssl/evp.h>
64#include <openssl/rand.h>
65#include <openssl/x509.h>
66#include <openssl/pkcs12.h>
67#include <openssl/pem.h>
68
69static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder,
70 int nid, const EVP_CIPHER *enc,
71 char *kstr, int klen,
72 pem_password_cb *cb, void *u);
73static int do_pk8pkey_fp(FILE *bp, EVP_PKEY *x, int isder,
74 int nid, const EVP_CIPHER *enc,
75 char *kstr, int klen,
76 pem_password_cb *cb, void *u);
77
78/* These functions write a private key in PKCS#8 format: it is a "drop in"
79 * replacement for PEM_write_bio_PrivateKey() and friends. As usual if 'enc'
80 * is NULL then it uses the unencrypted private key form. The 'nid' versions
81 * uses PKCS#5 v1.5 PBE algorithms whereas the others use PKCS#5 v2.0.
82 */
83
84int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
85 char *kstr, int klen,
86 pem_password_cb *cb, void *u)
87{
88 return do_pk8pkey(bp, x, 0, nid, NULL, kstr, klen, cb, u);
89}
90
91int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
92 char *kstr, int klen,
93 pem_password_cb *cb, void *u)
94{
95 return do_pk8pkey(bp, x, 0, -1, enc, kstr, klen, cb, u);
96}
97
98int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
99 char *kstr, int klen,
100 pem_password_cb *cb, void *u)
101{
102 return do_pk8pkey(bp, x, 1, -1, enc, kstr, klen, cb, u);
103}
104
105int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
106 char *kstr, int klen,
107 pem_password_cb *cb, void *u)
108{
109 return do_pk8pkey(bp, x, 1, nid, NULL, kstr, klen, cb, u);
110}
111
112static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder, int nid, const EVP_CIPHER *enc,
113 char *kstr, int klen,
114 pem_password_cb *cb, void *u)
115{
116 X509_SIG *p8;
117 PKCS8_PRIV_KEY_INFO *p8inf;
118 char buf[PEM_BUFSIZE];
119 int ret;
120 if(!(p8inf = EVP_PKEY2PKCS8(x))) {
121 PEMerr(PEM_F_PEM_WRITE_BIO_PKCS8PRIVATEKEY,
122 PEM_R_ERROR_CONVERTING_PRIVATE_KEY);
123 return 0;
124 }
125 if(enc || (nid != -1)) {
126 if(!kstr) {
127 if(!cb) klen = PEM_def_callback(buf, PEM_BUFSIZE, 1, u);
128 else klen = cb(buf, PEM_BUFSIZE, 1, u);
129 if(klen <= 0) {
130 PEMerr(PEM_F_PEM_WRITE_BIO_PKCS8PRIVATEKEY,
131 PEM_R_READ_KEY);
132 PKCS8_PRIV_KEY_INFO_free(p8inf);
133 return 0;
134 }
135
136 kstr = buf;
137 }
138 p8 = PKCS8_encrypt(nid, enc, kstr, klen, NULL, 0, 0, p8inf);
139 if(kstr == buf) memset(buf, 0, klen);
140 PKCS8_PRIV_KEY_INFO_free(p8inf);
141 if(isder) ret = i2d_PKCS8_bio(bp, p8);
142 else ret = PEM_write_bio_PKCS8(bp, p8);
143 X509_SIG_free(p8);
144 return ret;
145 } else {
146 if(isder) ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
147 else ret = PEM_write_bio_PKCS8_PRIV_KEY_INFO(bp, p8inf);
148 PKCS8_PRIV_KEY_INFO_free(p8inf);
149 return ret;
150 }
151}
152
153EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u)
154{
155 PKCS8_PRIV_KEY_INFO *p8inf = NULL;
156 X509_SIG *p8 = NULL;
157 int klen;
158 EVP_PKEY *ret;
159 char psbuf[PEM_BUFSIZE];
160 p8 = d2i_PKCS8_bio(bp, NULL);
161 if(!p8) return NULL;
162 if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
163 else klen=PEM_def_callback(psbuf,PEM_BUFSIZE,0,u);
164 if (klen <= 0) {
165 PEMerr(PEM_F_D2I_PKCS8PRIVATEKEY_BIO, PEM_R_BAD_PASSWORD_READ);
166 X509_SIG_free(p8);
167 return NULL;
168 }
169 p8inf = PKCS8_decrypt(p8, psbuf, klen);
170 X509_SIG_free(p8);
171 if(!p8inf) return NULL;
172 ret = EVP_PKCS82PKEY(p8inf);
173 PKCS8_PRIV_KEY_INFO_free(p8inf);
174 if(!ret) return NULL;
175 if(x) {
176 if(*x) EVP_PKEY_free(*x);
177 *x = ret;
178 }
179 return ret;
180}
181
182#ifndef OPENSSL_NO_FP_API
183
184int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
185 char *kstr, int klen,
186 pem_password_cb *cb, void *u)
187{
188 return do_pk8pkey_fp(fp, x, 1, -1, enc, kstr, klen, cb, u);
189}
190
191int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
192 char *kstr, int klen,
193 pem_password_cb *cb, void *u)
194{
195 return do_pk8pkey_fp(fp, x, 1, nid, NULL, kstr, klen, cb, u);
196}
197
198int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
199 char *kstr, int klen,
200 pem_password_cb *cb, void *u)
201{
202 return do_pk8pkey_fp(fp, x, 0, nid, NULL, kstr, klen, cb, u);
203}
204
205int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
206 char *kstr, int klen, pem_password_cb *cb, void *u)
207{
208 return do_pk8pkey_fp(fp, x, 0, -1, enc, kstr, klen, cb, u);
209}
210
211static int do_pk8pkey_fp(FILE *fp, EVP_PKEY *x, int isder, int nid, const EVP_CIPHER *enc,
212 char *kstr, int klen,
213 pem_password_cb *cb, void *u)
214{
215 BIO *bp;
216 int ret;
217 if(!(bp = BIO_new_fp(fp, BIO_NOCLOSE))) {
218 PEMerr(PEM_F_PEM_F_DO_PK8KEY_FP,ERR_R_BUF_LIB);
219 return(0);
220 }
221 ret = do_pk8pkey(bp, x, isder, nid, enc, kstr, klen, cb, u);
222 BIO_free(bp);
223 return ret;
224}
225
226EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u)
227{
228 BIO *bp;
229 EVP_PKEY *ret;
230 if(!(bp = BIO_new_fp(fp, BIO_NOCLOSE))) {
231 PEMerr(PEM_F_D2I_PKCS8PRIVATEKEY_FP,ERR_R_BUF_LIB);
232 return NULL;
233 }
234 ret = d2i_PKCS8PrivateKey_bio(bp, x, cb, u);
235 BIO_free(bp);
236 return ret;
237}
238
239#endif
240
241IMPLEMENT_PEM_rw(PKCS8, X509_SIG, PEM_STRING_PKCS8, X509_SIG)
242IMPLEMENT_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO, PEM_STRING_PKCS8INF,
243 PKCS8_PRIV_KEY_INFO)
diff --git a/src/lib/libcrypto/pem/pem_pkey.c b/src/lib/libcrypto/pem/pem_pkey.c
new file mode 100644
index 0000000000..270892d72b
--- /dev/null
+++ b/src/lib/libcrypto/pem/pem_pkey.c
@@ -0,0 +1,139 @@
1/* crypto/pem/pem_pkey.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 "cryptlib.h"
61#include <openssl/buffer.h>
62#include <openssl/objects.h>
63#include <openssl/evp.h>
64#include <openssl/rand.h>
65#include <openssl/x509.h>
66#include <openssl/pkcs12.h>
67#include <openssl/pem.h>
68
69
70EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u)
71 {
72 char *nm=NULL;
73 unsigned char *p=NULL,*data=NULL;
74 long len;
75 EVP_PKEY *ret=NULL;
76
77 if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_EVP_PKEY, bp, cb, u))
78 return NULL;
79 p = data;
80
81 if (strcmp(nm,PEM_STRING_RSA) == 0)
82 ret=d2i_PrivateKey(EVP_PKEY_RSA,x,&p,len);
83 else if (strcmp(nm,PEM_STRING_DSA) == 0)
84 ret=d2i_PrivateKey(EVP_PKEY_DSA,x,&p,len);
85 else if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) {
86 PKCS8_PRIV_KEY_INFO *p8inf;
87 p8inf=d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len);
88 ret = EVP_PKCS82PKEY(p8inf);
89 PKCS8_PRIV_KEY_INFO_free(p8inf);
90 } else if (strcmp(nm,PEM_STRING_PKCS8) == 0) {
91 PKCS8_PRIV_KEY_INFO *p8inf;
92 X509_SIG *p8;
93 int klen;
94 char psbuf[PEM_BUFSIZE];
95 p8 = d2i_X509_SIG(NULL, &p, len);
96 if(!p8) goto p8err;
97 if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
98 else klen=PEM_def_callback(psbuf,PEM_BUFSIZE,0,u);
99 if (klen <= 0) {
100 PEMerr(PEM_F_PEM_ASN1_READ_BIO,
101 PEM_R_BAD_PASSWORD_READ);
102 goto err;
103 }
104 p8inf = PKCS8_decrypt(p8, psbuf, klen);
105 X509_SIG_free(p8);
106 if(!p8inf) goto p8err;
107 ret = EVP_PKCS82PKEY(p8inf);
108 if(x) {
109 if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
110 *x = ret;
111 }
112 PKCS8_PRIV_KEY_INFO_free(p8inf);
113 }
114p8err:
115 if (ret == NULL)
116 PEMerr(PEM_F_PEM_ASN1_READ_BIO,ERR_R_ASN1_LIB);
117err:
118 OPENSSL_free(nm);
119 OPENSSL_free(data);
120 return(ret);
121 }
122
123#ifndef OPENSSL_NO_FP_API
124EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u)
125 {
126 BIO *b;
127 EVP_PKEY *ret;
128
129 if ((b=BIO_new(BIO_s_file())) == NULL)
130 {
131 PEMerr(PEM_F_PEM_ASN1_READ,ERR_R_BUF_LIB);
132 return(0);
133 }
134 BIO_set_fp(b,fp,BIO_NOCLOSE);
135 ret=PEM_read_bio_PrivateKey(b,x,cb,u);
136 BIO_free(b);
137 return(ret);
138 }
139#endif
diff --git a/src/lib/libcrypto/pem/pem_seal.c b/src/lib/libcrypto/pem/pem_seal.c
index 2a6c513348..ae463a301d 100644
--- a/src/lib/libcrypto/pem/pem_seal.c
+++ b/src/lib/libcrypto/pem/pem_seal.c
@@ -56,7 +56,7 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#ifndef NO_RSA 59#ifndef OPENSSL_NO_RSA
60#include <stdio.h> 60#include <stdio.h>
61#include "cryptlib.h" 61#include "cryptlib.h"
62#include <openssl/evp.h> 62#include <openssl/evp.h>
@@ -91,10 +91,13 @@ int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, EVP_MD *md_type,
91 goto err; 91 goto err;
92 } 92 }
93 93
94 EVP_EncodeInit(&(ctx->encode)); 94 EVP_EncodeInit(&ctx->encode);
95 EVP_SignInit(&(ctx->md),md_type);
96 95
97 ret=EVP_SealInit(&(ctx->cipher),type,ek,ekl,iv,pubk,npubk); 96 EVP_MD_CTX_init(&ctx->md);
97 EVP_SignInit(&ctx->md,md_type);
98
99 EVP_CIPHER_CTX_init(&ctx->cipher);
100 ret=EVP_SealInit(&ctx->cipher,type,ek,ekl,iv,pubk,npubk);
98 if (!ret) goto err; 101 if (!ret) goto err;
99 102
100 /* base64 encode the keys */ 103 /* base64 encode the keys */
@@ -120,7 +123,7 @@ void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl,
120 int i,j; 123 int i,j;
121 124
122 *outl=0; 125 *outl=0;
123 EVP_SignUpdate(&(ctx->md),in,inl); 126 EVP_SignUpdate(&ctx->md,in,inl);
124 for (;;) 127 for (;;)
125 { 128 {
126 if (inl <= 0) break; 129 if (inl <= 0) break;
@@ -128,8 +131,8 @@ void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl,
128 i=1200; 131 i=1200;
129 else 132 else
130 i=inl; 133 i=inl;
131 EVP_EncryptUpdate(&(ctx->cipher),buffer,&j,in,i); 134 EVP_EncryptUpdate(&ctx->cipher,buffer,&j,in,i);
132 EVP_EncodeUpdate(&(ctx->encode),out,&j,buffer,j); 135 EVP_EncodeUpdate(&ctx->encode,out,&j,buffer,j);
133 *outl+=j; 136 *outl+=j;
134 out+=j; 137 out+=j;
135 in+=i; 138 in+=i;
@@ -158,24 +161,24 @@ int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl,
158 goto err; 161 goto err;
159 } 162 }
160 163
161 EVP_EncryptFinal(&(ctx->cipher),s,(int *)&i); 164 EVP_EncryptFinal_ex(&ctx->cipher,s,(int *)&i);
162 EVP_EncodeUpdate(&(ctx->encode),out,&j,s,i); 165 EVP_EncodeUpdate(&ctx->encode,out,&j,s,i);
163 *outl=j; 166 *outl=j;
164 out+=j; 167 out+=j;
165 EVP_EncodeFinal(&(ctx->encode),out,&j); 168 EVP_EncodeFinal(&ctx->encode,out,&j);
166 *outl+=j; 169 *outl+=j;
167 170
168 if (!EVP_SignFinal(&(ctx->md),s,&i,priv)) goto err; 171 if (!EVP_SignFinal(&ctx->md,s,&i,priv)) goto err;
169 *sigl=EVP_EncodeBlock(sig,s,i); 172 *sigl=EVP_EncodeBlock(sig,s,i);
170 173
171 ret=1; 174 ret=1;
172err: 175err:
173 memset((char *)&(ctx->md),0,sizeof(ctx->md)); 176 EVP_MD_CTX_cleanup(&ctx->md);
174 memset((char *)&(ctx->cipher),0,sizeof(ctx->cipher)); 177 EVP_CIPHER_CTX_cleanup(&ctx->cipher);
175 if (s != NULL) OPENSSL_free(s); 178 if (s != NULL) OPENSSL_free(s);
176 return(ret); 179 return(ret);
177 } 180 }
178#else /* !NO_RSA */ 181#else /* !OPENSSL_NO_RSA */
179 182
180# if PEDANTIC 183# if PEDANTIC
181static void *dummy=&dummy; 184static void *dummy=&dummy;
diff --git a/src/lib/libcrypto/pem/pem_sign.c b/src/lib/libcrypto/pem/pem_sign.c
index 42d598dd78..c3b9808cb2 100644
--- a/src/lib/libcrypto/pem/pem_sign.c
+++ b/src/lib/libcrypto/pem/pem_sign.c
@@ -66,7 +66,7 @@
66 66
67void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type) 67void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type)
68 { 68 {
69 EVP_DigestInit(ctx,type); 69 EVP_DigestInit_ex(ctx, type, NULL);
70 } 70 }
71 71
72void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *data, 72void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *data,
diff --git a/src/lib/libcrypto/pem/pem_x509.c b/src/lib/libcrypto/pem/pem_x509.c
new file mode 100644
index 0000000000..19f88d8d3a
--- /dev/null
+++ b/src/lib/libcrypto/pem/pem_x509.c
@@ -0,0 +1,69 @@
1/* pem_x509.c */
2/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
3 * project 2001.
4 */
5/* ====================================================================
6 * Copyright (c) 2001 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59#include <stdio.h>
60#undef SSLEAY_MACROS
61#include "cryptlib.h"
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/x509.h>
65#include <openssl/pkcs7.h>
66#include <openssl/pem.h>
67
68IMPLEMENT_PEM_rw(X509, X509, PEM_STRING_X509, X509)
69
diff --git a/src/lib/libcrypto/pem/pem_xaux.c b/src/lib/libcrypto/pem/pem_xaux.c
new file mode 100644
index 0000000000..2f579b5421
--- /dev/null
+++ b/src/lib/libcrypto/pem/pem_xaux.c
@@ -0,0 +1,68 @@
1/* pem_xaux.c */
2/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
3 * project 2001.
4 */
5/* ====================================================================
6 * Copyright (c) 2001 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59#include <stdio.h>
60#undef SSLEAY_MACROS
61#include "cryptlib.h"
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/x509.h>
65#include <openssl/pkcs7.h>
66#include <openssl/pem.h>
67
68IMPLEMENT_PEM_rw(X509_AUX, X509, PEM_STRING_X509_TRUSTED, X509_AUX)