summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordjm <>2009-01-09 12:14:09 +0000
committerdjm <>2009-01-09 12:14:09 +0000
commitd895739bce8a14b03d66ef79acb062db0e1d7b41 (patch)
treef7bce8e25320f56d0561cf9c041d4a9426952468 /src
parent6b54ca90c9c20fe7a1bad7bdd709e44e88384cee (diff)
parent76dd4d55fdccad54d20608e7caf577b9d67b216f (diff)
downloadopenbsd-d895739bce8a14b03d66ef79acb062db0e1d7b41.tar.gz
openbsd-d895739bce8a14b03d66ef79acb062db0e1d7b41.tar.bz2
openbsd-d895739bce8a14b03d66ef79acb062db0e1d7b41.zip
This commit was generated by cvs2git to track changes on a CVS vendor
branch.
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/aes/Makefile5
-rw-r--r--src/lib/libcrypto/asn1/Makefile469
-rw-r--r--src/lib/libcrypto/bf/Makefile10
-rw-r--r--src/lib/libcrypto/bio/Makefile2
-rw-r--r--src/lib/libcrypto/bn/bn_opt.c87
-rw-r--r--src/lib/libcrypto/buffer/Makefile13
-rw-r--r--src/lib/libcrypto/cast/Makefile9
-rw-r--r--src/lib/libcrypto/comp/Makefile2
-rw-r--r--src/lib/libcrypto/conf/Makefile17
-rw-r--r--src/lib/libcrypto/des/Makefile33
-rw-r--r--src/lib/libcrypto/des/des_lib.c106
-rw-r--r--src/lib/libcrypto/dsa/dsa_utl.c95
-rw-r--r--src/lib/libcrypto/dso/Makefile2
-rw-r--r--src/lib/libcrypto/dyn_lck.c428
-rw-r--r--src/lib/libcrypto/ec/Makefile2
-rw-r--r--src/lib/libcrypto/err/Makefile49
-rw-r--r--src/lib/libcrypto/err/err_bio.c75
-rw-r--r--src/lib/libcrypto/err/err_def.c665
-rw-r--r--src/lib/libcrypto/err/err_str.c295
-rw-r--r--src/lib/libcrypto/evp/dig_eng.c180
-rw-r--r--src/lib/libcrypto/evp/enc_min.c390
-rw-r--r--src/lib/libcrypto/evp/evp_cnf.c125
-rw-r--r--src/lib/libcrypto/fips_err.c7
-rw-r--r--src/lib/libcrypto/hmac/Makefile15
-rw-r--r--src/lib/libcrypto/idea/Makefile8
-rw-r--r--src/lib/libcrypto/krb5/Makefile2
-rw-r--r--src/lib/libcrypto/lhash/Makefile2
-rw-r--r--src/lib/libcrypto/md2/Makefile6
-rw-r--r--src/lib/libcrypto/md4/Makefile12
-rw-r--r--src/lib/libcrypto/md5/Makefile12
-rw-r--r--src/lib/libcrypto/objects/Makefile2
-rw-r--r--src/lib/libcrypto/ocsp/Makefile81
-rw-r--r--src/lib/libcrypto/pem/Makefile134
-rw-r--r--src/lib/libcrypto/pkcs12/Makefile177
-rw-r--r--src/lib/libcrypto/pkcs7/Makefile43
-rw-r--r--src/lib/libcrypto/pqueue/pq_compat.h5
-rw-r--r--src/lib/libcrypto/rand/rand_eng.c152
-rw-r--r--src/lib/libcrypto/rc2/Makefile8
-rw-r--r--src/lib/libcrypto/rc4/Makefile18
-rw-r--r--src/lib/libcrypto/rc4/rc4_fblk.c75
-rw-r--r--src/lib/libcrypto/rc5/Makefile2
-rw-r--r--src/lib/libcrypto/ripemd/Makefile11
-rw-r--r--src/lib/libcrypto/rsa/rsa_eng.c348
-rw-r--r--src/lib/libcrypto/rsa/rsa_x931g.c255
-rw-r--r--src/lib/libcrypto/sha/Makefile35
-rw-r--r--src/lib/libcrypto/stack/Makefile2
-rw-r--r--src/lib/libcrypto/txt_db/Makefile2
-rw-r--r--src/lib/libcrypto/ui/Makefile2
-rw-r--r--src/lib/libcrypto/util/arx.pl15
-rw-r--r--src/lib/libcrypto/util/fipslink.pl2
-rw-r--r--src/lib/libcrypto/util/mksdef.pl87
-rw-r--r--src/lib/libcrypto/x509/Makefile199
-rw-r--r--src/lib/libcrypto/x509v3/Makefile457
-rw-r--r--src/lib/libssl/src/crypto/aes/Makefile5
-rw-r--r--src/lib/libssl/src/crypto/asn1/Makefile469
-rw-r--r--src/lib/libssl/src/crypto/bf/Makefile10
-rw-r--r--src/lib/libssl/src/crypto/bio/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_opt.c87
-rw-r--r--src/lib/libssl/src/crypto/buffer/Makefile13
-rw-r--r--src/lib/libssl/src/crypto/cast/Makefile9
-rw-r--r--src/lib/libssl/src/crypto/comp/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/conf/Makefile17
-rw-r--r--src/lib/libssl/src/crypto/des/Makefile33
-rw-r--r--src/lib/libssl/src/crypto/des/des_lib.c106
-rw-r--r--src/lib/libssl/src/crypto/dsa/dsa_utl.c95
-rw-r--r--src/lib/libssl/src/crypto/dso/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/dyn_lck.c428
-rw-r--r--src/lib/libssl/src/crypto/ec/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/engine/eng_padlock.c4
-rw-r--r--src/lib/libssl/src/crypto/err/Makefile49
-rw-r--r--src/lib/libssl/src/crypto/err/err_bio.c75
-rw-r--r--src/lib/libssl/src/crypto/err/err_def.c665
-rw-r--r--src/lib/libssl/src/crypto/err/err_str.c295
-rw-r--r--src/lib/libssl/src/crypto/evp/dig_eng.c180
-rw-r--r--src/lib/libssl/src/crypto/evp/enc_min.c390
-rw-r--r--src/lib/libssl/src/crypto/evp/evp_cnf.c125
-rw-r--r--src/lib/libssl/src/crypto/fips_err.c7
-rw-r--r--src/lib/libssl/src/crypto/hmac/Makefile15
-rw-r--r--src/lib/libssl/src/crypto/idea/Makefile8
-rw-r--r--src/lib/libssl/src/crypto/krb5/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/lhash/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/md2/Makefile6
-rw-r--r--src/lib/libssl/src/crypto/md4/Makefile12
-rw-r--r--src/lib/libssl/src/crypto/md5/Makefile12
-rw-r--r--src/lib/libssl/src/crypto/objects/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/ocsp/Makefile81
-rw-r--r--src/lib/libssl/src/crypto/pem/Makefile134
-rw-r--r--src/lib/libssl/src/crypto/pkcs12/Makefile177
-rw-r--r--src/lib/libssl/src/crypto/pkcs7/Makefile43
-rw-r--r--src/lib/libssl/src/crypto/pqueue/pq_compat.h5
-rw-r--r--src/lib/libssl/src/crypto/rand/rand_eng.c152
-rw-r--r--src/lib/libssl/src/crypto/rc2/Makefile8
-rw-r--r--src/lib/libssl/src/crypto/rc4/Makefile18
-rw-r--r--src/lib/libssl/src/crypto/rc4/rc4_fblk.c75
-rw-r--r--src/lib/libssl/src/crypto/rc5/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/ripemd/Makefile11
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa_eng.c348
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa_x931g.c255
-rw-r--r--src/lib/libssl/src/crypto/sha/Makefile35
-rw-r--r--src/lib/libssl/src/crypto/stack/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/txt_db/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/ui/Makefile2
-rw-r--r--src/lib/libssl/src/crypto/x509/Makefile199
-rw-r--r--src/lib/libssl/src/crypto/x509v3/Makefile457
-rw-r--r--src/lib/libssl/src/demos/jpake/Makefile7
-rw-r--r--src/lib/libssl/src/demos/jpake/jpakedemo.c469
-rw-r--r--src/lib/libssl/src/fips/Makefile262
-rw-r--r--src/lib/libssl/src/fips/aes/Makefile68
-rw-r--r--src/lib/libssl/src/fips/aes/fips_aes_selftest.c41
-rw-r--r--src/lib/libssl/src/fips/aes/fips_aesavs.c370
-rw-r--r--src/lib/libssl/src/fips/des/Makefile108
-rw-r--r--src/lib/libssl/src/fips/des/fips_des_selftest.c129
-rw-r--r--src/lib/libssl/src/fips/des/fips_desmovs.c284
-rw-r--r--src/lib/libssl/src/fips/dh/Makefile30
-rw-r--r--src/lib/libssl/src/fips/dh/dh_gen.c179
-rw-r--r--src/lib/libssl/src/fips/dh/fips_dh_check.c34
-rw-r--r--src/lib/libssl/src/fips/dh/fips_dh_gen.c62
-rw-r--r--src/lib/libssl/src/fips/dh/fips_dh_key.c86
-rw-r--r--src/lib/libssl/src/fips/dh/fips_dh_lib.c95
-rw-r--r--src/lib/libssl/src/fips/dsa/Makefile155
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsa_gen.c217
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsa_key.c169
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsa_lib.c95
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsa_ossl.c102
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsa_selftest.c142
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsa_sign.c256
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dsatest.c176
-rw-r--r--src/lib/libssl/src/fips/dsa/fips_dssvs.c508
-rw-r--r--src/lib/libssl/src/fips/fips-lib.com30
-rw-r--r--src/lib/libssl/src/fips/fips-nodiff.txt7
-rw-r--r--src/lib/libssl/src/fips/fips.c429
-rw-r--r--src/lib/libssl/src/fips/fips.h96
-rw-r--r--src/lib/libssl/src/fips/fips_canister.c186
-rw-r--r--src/lib/libssl/src/fips/fips_locl.h12
-rw-r--r--src/lib/libssl/src/fips/fips_premain.c176
-rw-r--r--src/lib/libssl/src/fips/fips_premain.c.sha11
-rw-r--r--src/lib/libssl/src/fips/fips_test_suite.c533
-rw-r--r--src/lib/libssl/src/fips/fips_utl.h343
-rw-r--r--src/lib/libssl/src/fips/fipsalgtest.pl848
-rwxr-xr-xsrc/lib/libssl/src/fips/fipsld170
-rw-r--r--src/lib/libssl/src/fips/fipstests.bat229
-rw-r--r--src/lib/libssl/src/fips/fipstests.sh400
-rw-r--r--src/lib/libssl/src/fips/hmac/Makefile123
-rw-r--r--src/lib/libssl/src/fips/hmac/fips_hmac.c191
-rw-r--r--src/lib/libssl/src/fips/hmac/fips_hmac_selftest.c135
-rw-r--r--src/lib/libssl/src/fips/hmac/fips_hmactest.c328
-rw-r--r--src/lib/libssl/src/fips/install.com6
-rw-r--r--src/lib/libssl/src/fips/mkfipsscr.pl632
-rwxr-xr-xsrc/lib/libssl/src/fips/openssl_fips_fingerprint3
-rw-r--r--src/lib/libssl/src/fips/rand/Makefile85
-rw-r--r--src/lib/libssl/src/fips/rand/fips_rand.c513
-rw-r--r--src/lib/libssl/src/fips/rand/fips_rand.h16
-rw-r--r--src/lib/libssl/src/fips/rand/fips_rand_selftest.c371
-rw-r--r--src/lib/libssl/src/fips/rand/fips_randtest.c301
-rw-r--r--src/lib/libssl/src/fips/rand/fips_rngvs.c230
-rw-r--r--src/lib/libssl/src/fips/rsa/Makefile134
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsa_eay.c773
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsa_gen.c271
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsa_lib.c101
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsa_selftest.c439
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsa_sign.c554
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsa_x931g.c280
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsagtest.c390
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsastest.c370
-rw-r--r--src/lib/libssl/src/fips/rsa/fips_rsavtest.c377
-rw-r--r--src/lib/libssl/src/fips/sha/Makefile158
-rw-r--r--src/lib/libssl/src/fips/sha/fips_sha1_selftest.c97
-rw-r--r--src/lib/libssl/src/fips/sha/fips_shatest.c388
-rw-r--r--src/lib/libssl/src/fips/sha/fips_standalone_sha1.c173
-rw-r--r--src/lib/libssl/src/ms/do_fips.bat204
-rw-r--r--src/lib/libssl/src/ms/segrenam.pl65
-rw-r--r--src/lib/libssl/src/test/CAss.cnf2
-rw-r--r--src/lib/libssl/src/test/SHAmix.r99
-rw-r--r--src/lib/libssl/src/test/SHAmix.x129
-rw-r--r--src/lib/libssl/src/test/Uss.cnf2
-rw-r--r--src/lib/libssl/src/util/arx.pl15
-rw-r--r--src/lib/libssl/src/util/fipslink.pl2
-rw-r--r--src/lib/libssl/src/util/mksdef.pl87
-rw-r--r--src/lib/libssl/test/SHAmix.r99
-rw-r--r--src/lib/libssl/test/SHAmix.x129
180 files changed, 21828 insertions, 4318 deletions
diff --git a/src/lib/libcrypto/aes/Makefile b/src/lib/libcrypto/aes/Makefile
index 22c7203dbb..9d174f4c3e 100644
--- a/src/lib/libcrypto/aes/Makefile
+++ b/src/lib/libcrypto/aes/Makefile
@@ -41,7 +41,7 @@ top:
41all: lib 41all: lib
42 42
43lib: $(LIBOBJ) 43lib: $(LIBOBJ)
44 $(AR) $(LIB) $(LIBOBJ) 44 $(ARX) $(LIB) $(LIBOBJ)
45 $(RANLIB) $(LIB) || echo Never mind. 45 $(RANLIB) $(LIB) || echo Never mind.
46 @touch lib 46 @touch lib
47 47
@@ -103,7 +103,8 @@ aes_cfb.o: ../../e_os.h ../../include/openssl/aes.h
103aes_cfb.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 103aes_cfb.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
104aes_cfb.o: aes_cfb.c aes_locl.h 104aes_cfb.o: aes_cfb.c aes_locl.h
105aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 105aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
106aes_core.o: ../../include/openssl/opensslconf.h aes_core.c aes_locl.h 106aes_core.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
107aes_core.o: aes_core.c aes_locl.h
107aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 108aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
108aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h 109aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h
109aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 110aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
diff --git a/src/lib/libcrypto/asn1/Makefile b/src/lib/libcrypto/asn1/Makefile
index 63066899d0..94a6885804 100644
--- a/src/lib/libcrypto/asn1/Makefile
+++ b/src/lib/libcrypto/asn1/Makefile
@@ -63,7 +63,7 @@ pk: pk.c
63all: lib 63all: lib
64 64
65lib: $(LIBOBJ) 65lib: $(LIBOBJ)
66 $(AR) $(LIB) $(LIBOBJ) 66 $(ARX) $(LIB) $(LIBOBJ)
67 $(RANLIB) $(LIB) || echo Never mind. 67 $(RANLIB) $(LIB) || echo Never mind.
68 @touch lib 68 @touch lib
69 69
@@ -142,9 +142,9 @@ a_digest.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
142a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 142a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
143a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 143a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
144a_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 144a_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
145a_digest.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 145a_digest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
146a_digest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 146a_digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
147a_digest.o: ../../include/openssl/opensslconf.h 147a_digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
148a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 148a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
149a_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 149a_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
150a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 150a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -250,27 +250,27 @@ a_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
250a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 250a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
251a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 251a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
252a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 252a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
253a_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 253a_sign.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
254a_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 254a_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
255a_sign.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 255a_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
256a_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 256a_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
257a_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 257a_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
258a_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 258a_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
259a_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 259a_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
260a_sign.o: ../cryptlib.h a_sign.c 260a_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_sign.c
261a_strex.o: ../../e_os.h ../../include/openssl/asn1.h 261a_strex.o: ../../e_os.h ../../include/openssl/asn1.h
262a_strex.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 262a_strex.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
263a_strex.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 263a_strex.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
264a_strex.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 264a_strex.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
265a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 265a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
266a_strex.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 266a_strex.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
267a_strex.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 267a_strex.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
268a_strex.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 268a_strex.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
269a_strex.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 269a_strex.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
270a_strex.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 270a_strex.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
271a_strex.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 271a_strex.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
272a_strex.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 272a_strex.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
273a_strex.o: ../cryptlib.h a_strex.c charmap.h 273a_strex.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_strex.c charmap.h
274a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h 274a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h
275a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 275a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
276a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 276a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -318,8 +318,9 @@ a_verify.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
318a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 318a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
319a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 319a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
320a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h 320a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h
321a_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 321a_verify.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
322a_verify.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 322a_verify.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
323a_verify.o: ../../include/openssl/opensslconf.h
323a_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 324a_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
324a_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 325a_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
325a_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 326a_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -338,8 +339,9 @@ asn1_gen.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
338asn1_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 339asn1_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
339asn1_gen.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 340asn1_gen.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
340asn1_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h 341asn1_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h
341asn1_gen.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 342asn1_gen.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
342asn1_gen.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 343asn1_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
344asn1_gen.o: ../../include/openssl/opensslconf.h
343asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 345asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
344asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 346asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
345asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 347asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -369,8 +371,9 @@ asn_mime.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
369asn_mime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 371asn_mime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
370asn_mime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 372asn_mime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
371asn_mime.o: ../../include/openssl/err.h ../../include/openssl/evp.h 373asn_mime.o: ../../include/openssl/err.h ../../include/openssl/evp.h
372asn_mime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 374asn_mime.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
373asn_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 375asn_mime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
376asn_mime.o: ../../include/openssl/opensslconf.h
374asn_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 377asn_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
375asn_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 378asn_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
376asn_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 379asn_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -383,9 +386,9 @@ asn_moid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
383asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h 386asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
384asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 387asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
385asn_moid.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 388asn_moid.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
386asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 389asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
387asn_moid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 390asn_moid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
388asn_moid.o: ../../include/openssl/opensslconf.h 391asn_moid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
389asn_moid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 392asn_moid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
390asn_moid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 393asn_moid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
391asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 394asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -404,23 +407,23 @@ d2i_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
404d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 407d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
405d2i_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 408d2i_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
406d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h 409d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
407d2i_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 410d2i_pr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
408d2i_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 411d2i_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
409d2i_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 412d2i_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
410d2i_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 413d2i_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
411d2i_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 414d2i_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
412d2i_pr.o: ../cryptlib.h d2i_pr.c 415d2i_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pr.c
413d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 416d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
414d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 417d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
415d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 418d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
416d2i_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 419d2i_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
417d2i_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h 420d2i_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
418d2i_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 421d2i_pu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
419d2i_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 422d2i_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
420d2i_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 423d2i_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
421d2i_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 424d2i_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
422d2i_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 425d2i_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
423d2i_pu.o: ../cryptlib.h d2i_pu.c 426d2i_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pu.c
424evp_asn1.o: ../../e_os.h ../../include/openssl/asn1.h 427evp_asn1.o: ../../e_os.h ../../include/openssl/asn1.h
425evp_asn1.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h 428evp_asn1.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
426evp_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 429evp_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
@@ -456,71 +459,73 @@ i2d_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
456i2d_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 459i2d_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
457i2d_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 460i2d_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
458i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h 461i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
459i2d_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 462i2d_pr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
460i2d_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 463i2d_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
461i2d_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 464i2d_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
462i2d_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 465i2d_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
463i2d_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 466i2d_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
464i2d_pr.o: ../cryptlib.h i2d_pr.c 467i2d_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pr.c
465i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 468i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
466i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 469i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
467i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 470i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
468i2d_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 471i2d_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
469i2d_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h 472i2d_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
470i2d_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 473i2d_pu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
471i2d_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 474i2d_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
472i2d_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 475i2d_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
473i2d_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 476i2d_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
474i2d_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 477i2d_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
475i2d_pu.o: ../cryptlib.h i2d_pu.c 478i2d_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pu.c
476n_pkey.o: ../../e_os.h ../../include/openssl/asn1.h 479n_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
477n_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h 480n_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h
478n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 481n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
479n_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 482n_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
480n_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 483n_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
481n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 484n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
482n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 485n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
483n_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 486n_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
484n_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 487n_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
485n_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 488n_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
486n_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 489n_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
487n_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 490n_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
488n_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 491n_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
489n_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h n_pkey.c 492n_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
493n_pkey.o: ../cryptlib.h n_pkey.c
490nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 494nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
491nsseq.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 495nsseq.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
492nsseq.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 496nsseq.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
493nsseq.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 497nsseq.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
494nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 498nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
495nsseq.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 499nsseq.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
496nsseq.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 500nsseq.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
497nsseq.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 501nsseq.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
498nsseq.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 502nsseq.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
499nsseq.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 503nsseq.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
500nsseq.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 504nsseq.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
501nsseq.o: ../../include/openssl/x509_vfy.h nsseq.c 505nsseq.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h nsseq.c
502p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h 506p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h
503p5_pbe.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 507p5_pbe.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
504p5_pbe.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 508p5_pbe.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
505p5_pbe.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 509p5_pbe.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
506p5_pbe.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 510p5_pbe.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
507p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h 511p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h
508p5_pbe.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 512p5_pbe.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
509p5_pbe.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 513p5_pbe.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
510p5_pbe.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 514p5_pbe.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
511p5_pbe.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 515p5_pbe.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
512p5_pbe.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 516p5_pbe.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
513p5_pbe.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 517p5_pbe.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
514p5_pbe.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 518p5_pbe.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
515p5_pbe.o: ../cryptlib.h p5_pbe.c 519p5_pbe.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p5_pbe.c
516p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h 520p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h
517p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 521p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
518p5_pbev2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 522p5_pbev2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
519p5_pbev2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 523p5_pbev2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
520p5_pbev2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 524p5_pbev2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
521p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h 525p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h
522p5_pbev2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 526p5_pbev2.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
523p5_pbev2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 527p5_pbev2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
528p5_pbev2.o: ../../include/openssl/opensslconf.h
524p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 529p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
525p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 530p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
526p5_pbev2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 531p5_pbev2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -533,41 +538,42 @@ p8_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
533p8_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 538p8_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
534p8_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 539p8_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
535p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h 540p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
536p8_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 541p8_pkey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
537p8_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 542p8_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
538p8_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 543p8_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
539p8_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 544p8_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
540p8_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 545p8_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
541p8_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 546p8_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
542p8_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p8_pkey.c 547p8_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
548p8_pkey.o: ../cryptlib.h p8_pkey.c
543t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h 549t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h
544t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 550t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
545t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 551t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
546t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 552t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
547t_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 553t_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
548t_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h 554t_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
549t_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 555t_bitst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
550t_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 556t_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
551t_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 557t_bitst.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
552t_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 558t_bitst.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
553t_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 559t_bitst.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
554t_bitst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 560t_bitst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
555t_bitst.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 561t_bitst.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
556t_bitst.o: ../cryptlib.h t_bitst.c 562t_bitst.o: ../../include/openssl/x509v3.h ../cryptlib.h t_bitst.c
557t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 563t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
558t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 564t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
559t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 565t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
560t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 566t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
561t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 567t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
562t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 568t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
563t_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 569t_crl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
564t_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 570t_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
565t_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 571t_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
566t_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 572t_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
567t_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 573t_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
568t_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 574t_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
569t_crl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 575t_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
570t_crl.o: ../cryptlib.h t_crl.c 576t_crl.o: ../../include/openssl/x509v3.h ../cryptlib.h t_crl.c
571t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 577t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
572t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 578t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
573t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h 579t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
@@ -585,57 +591,57 @@ t_req.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
585t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 591t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
586t_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 592t_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
587t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 593t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
588t_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 594t_req.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
589t_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 595t_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
590t_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 596t_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
591t_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 597t_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
592t_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 598t_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
593t_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 599t_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
594t_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 600t_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
595t_req.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 601t_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
596t_req.o: ../cryptlib.h t_req.c 602t_req.o: ../../include/openssl/x509v3.h ../cryptlib.h t_req.c
597t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 603t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
598t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 604t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
599t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 605t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
600t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 606t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
601t_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 607t_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
602t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h 608t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
603t_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 609t_spki.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
604t_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 610t_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
605t_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 611t_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
606t_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h 612t_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
607t_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 613t_spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
608t_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 614t_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
609t_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 615t_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
610t_spki.o: ../cryptlib.h t_spki.c 616t_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_spki.c
611t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 617t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
612t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 618t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
613t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 619t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
614t_x509.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 620t_x509.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
615t_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 621t_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
616t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 622t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
617t_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 623t_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
618t_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 624t_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
619t_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 625t_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
620t_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 626t_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
621t_x509.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 627t_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
622t_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 628t_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
623t_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 629t_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
624t_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 630t_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
625t_x509.o: ../cryptlib.h t_x509.c 631t_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h t_x509.c
626t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h 632t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
627t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 633t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
628t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 634t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
629t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 635t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
630t_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 636t_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
631t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 637t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
632t_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 638t_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
633t_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 639t_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
634t_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 640t_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
635t_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 641t_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
636t_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 642t_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
637t_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 643t_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
638t_x509a.o: ../cryptlib.h t_x509a.c 644t_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_x509a.c
639tasn_dec.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 645tasn_dec.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
640tasn_dec.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 646tasn_dec.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
641tasn_dec.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 647tasn_dec.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -688,21 +694,23 @@ x_algor.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
688x_algor.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 694x_algor.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
689x_algor.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 695x_algor.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
690x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 696x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
691x_algor.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 697x_algor.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
692x_algor.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 698x_algor.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
693x_algor.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 699x_algor.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
694x_algor.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 700x_algor.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
695x_algor.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 701x_algor.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
696x_algor.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 702x_algor.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
697x_algor.o: ../../include/openssl/x509_vfy.h x_algor.c 703x_algor.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
704x_algor.o: x_algor.c
698x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h 705x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h
699x_attrib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 706x_attrib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
700x_attrib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 707x_attrib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
701x_attrib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 708x_attrib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
702x_attrib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 709x_attrib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
703x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 710x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
704x_attrib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 711x_attrib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
705x_attrib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 712x_attrib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
713x_attrib.o: ../../include/openssl/opensslconf.h
706x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 714x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
707x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 715x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
708x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 716x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -723,37 +731,40 @@ x_crl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
723x_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 731x_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
724x_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 732x_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
725x_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 733x_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
726x_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 734x_crl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
727x_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 735x_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
728x_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 736x_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
729x_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 737x_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
730x_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 738x_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
731x_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 739x_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
732x_crl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_crl.c 740x_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
741x_crl.o: ../cryptlib.h x_crl.c
733x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 742x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
734x_exten.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 743x_exten.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
735x_exten.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 744x_exten.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
736x_exten.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 745x_exten.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
737x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 746x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
738x_exten.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 747x_exten.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
739x_exten.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 748x_exten.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
740x_exten.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 749x_exten.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
741x_exten.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 750x_exten.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
742x_exten.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 751x_exten.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
743x_exten.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 752x_exten.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
744x_exten.o: ../../include/openssl/x509_vfy.h x_exten.c 753x_exten.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
754x_exten.o: x_exten.c
745x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 755x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
746x_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 756x_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
747x_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 757x_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
748x_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 758x_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
749x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h 759x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
750x_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 760x_info.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
751x_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 761x_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
752x_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 762x_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
753x_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 763x_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
754x_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 764x_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
755x_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 765x_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
756x_info.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_info.c 766x_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
767x_info.o: ../cryptlib.h x_info.c
757x_long.o: ../../e_os.h ../../include/openssl/asn1.h 768x_long.o: ../../e_os.h ../../include/openssl/asn1.h
758x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 769x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
759x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 770x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
@@ -769,35 +780,37 @@ x_name.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
769x_name.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 780x_name.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
770x_name.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 781x_name.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
771x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h 782x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h
772x_name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 783x_name.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
773x_name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 784x_name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
774x_name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 785x_name.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
775x_name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 786x_name.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
776x_name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 787x_name.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
777x_name.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 788x_name.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
778x_name.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_name.c 789x_name.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
790x_name.o: ../cryptlib.h x_name.c
779x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h 791x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
780x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h 792x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
781x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 793x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
782x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 794x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
783x_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 795x_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
784x_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h 796x_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
785x_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 797x_pkey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
786x_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 798x_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
787x_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 799x_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
788x_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 800x_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
789x_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 801x_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
790x_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 802x_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
791x_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_pkey.c 803x_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
804x_pkey.o: ../cryptlib.h x_pkey.c
792x_pubkey.o: ../../e_os.h ../../include/openssl/asn1.h 805x_pubkey.o: ../../e_os.h ../../include/openssl/asn1.h
793x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 806x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
794x_pubkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 807x_pubkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
795x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 808x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
796x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 809x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
797x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 810x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
798x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 811x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
799x_pubkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 812x_pubkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
800x_pubkey.o: ../../include/openssl/opensslconf.h 813x_pubkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
801x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 814x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
802x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h 815x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
803x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 816x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -810,76 +823,82 @@ x_req.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
810x_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 823x_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
811x_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 824x_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
812x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h 825x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
813x_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 826x_req.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
814x_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 827x_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
815x_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 828x_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
816x_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 829x_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
817x_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 830x_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
818x_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 831x_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
819x_req.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_req.c 832x_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
833x_req.o: ../cryptlib.h x_req.c
820x_sig.o: ../../e_os.h ../../include/openssl/asn1.h 834x_sig.o: ../../e_os.h ../../include/openssl/asn1.h
821x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 835x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
822x_sig.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 836x_sig.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
823x_sig.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 837x_sig.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
824x_sig.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 838x_sig.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
825x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h 839x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h
826x_sig.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 840x_sig.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
827x_sig.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 841x_sig.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
828x_sig.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 842x_sig.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
829x_sig.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 843x_sig.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
830x_sig.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 844x_sig.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
831x_sig.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 845x_sig.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
832x_sig.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_sig.c 846x_sig.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
847x_sig.o: ../cryptlib.h x_sig.c
833x_spki.o: ../../e_os.h ../../include/openssl/asn1.h 848x_spki.o: ../../e_os.h ../../include/openssl/asn1.h
834x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 849x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
835x_spki.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 850x_spki.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
836x_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 851x_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
837x_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 852x_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
838x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h 853x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
839x_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 854x_spki.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
840x_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 855x_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
841x_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 856x_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
842x_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 857x_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
843x_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 858x_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
844x_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 859x_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
845x_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_spki.c 860x_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
861x_spki.o: ../cryptlib.h x_spki.c
846x_val.o: ../../e_os.h ../../include/openssl/asn1.h 862x_val.o: ../../e_os.h ../../include/openssl/asn1.h
847x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 863x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
848x_val.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 864x_val.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
849x_val.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 865x_val.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
850x_val.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 866x_val.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
851x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h 867x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h
852x_val.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 868x_val.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
853x_val.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 869x_val.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
854x_val.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 870x_val.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
855x_val.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 871x_val.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
856x_val.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 872x_val.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
857x_val.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 873x_val.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
858x_val.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_val.c 874x_val.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
875x_val.o: ../cryptlib.h x_val.c
859x_x509.o: ../../e_os.h ../../include/openssl/asn1.h 876x_x509.o: ../../e_os.h ../../include/openssl/asn1.h
860x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 877x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
861x_x509.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 878x_x509.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
862x_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 879x_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
863x_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 880x_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
864x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 881x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
865x_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 882x_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
866x_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 883x_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
867x_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 884x_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
868x_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 885x_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
869x_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 886x_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
870x_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 887x_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
871x_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 888x_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
872x_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h x_x509.c 889x_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
890x_x509.o: ../cryptlib.h x_x509.c
873x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h 891x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
874x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 892x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
875x_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 893x_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
876x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 894x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
877x_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 895x_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
878x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h 896x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h
879x_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 897x_x509a.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
880x_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 898x_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
881x_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 899x_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
882x_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 900x_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
883x_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 901x_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
884x_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 902x_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
885x_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_x509a.c 903x_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
904x_x509a.o: ../cryptlib.h x_x509a.c
diff --git a/src/lib/libcrypto/bf/Makefile b/src/lib/libcrypto/bf/Makefile
index 8441954a8d..7f4f03eb82 100644
--- a/src/lib/libcrypto/bf/Makefile
+++ b/src/lib/libcrypto/bf/Makefile
@@ -40,7 +40,7 @@ top:
40all: lib 40all: lib
41 41
42lib: $(LIBOBJ) 42lib: $(LIBOBJ)
43 $(AR) $(LIB) $(LIBOBJ) 43 $(ARX) $(LIB) $(LIBOBJ)
44 $(RANLIB) $(LIB) || echo Never mind. 44 $(RANLIB) $(LIB) || echo Never mind.
45 @touch lib 45 @touch lib
46 46
@@ -103,5 +103,9 @@ bf_enc.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
103bf_enc.o: ../../include/openssl/opensslconf.h bf_enc.c bf_locl.h 103bf_enc.o: ../../include/openssl/opensslconf.h bf_enc.c bf_locl.h
104bf_ofb64.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h 104bf_ofb64.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
105bf_ofb64.o: ../../include/openssl/opensslconf.h bf_locl.h bf_ofb64.c 105bf_ofb64.o: ../../include/openssl/opensslconf.h bf_locl.h bf_ofb64.c
106bf_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h 106bf_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/crypto.h
107bf_skey.o: ../../include/openssl/opensslconf.h bf_locl.h bf_pi.h bf_skey.c 107bf_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
108bf_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
109bf_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
110bf_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
111bf_skey.o: bf_locl.h bf_pi.h bf_skey.c
diff --git a/src/lib/libcrypto/bio/Makefile b/src/lib/libcrypto/bio/Makefile
index 1ef6c2fb9f..1cd76ce7a2 100644
--- a/src/lib/libcrypto/bio/Makefile
+++ b/src/lib/libcrypto/bio/Makefile
@@ -45,7 +45,7 @@ top:
45all: lib 45all: lib
46 46
47lib: $(LIBOBJ) 47lib: $(LIBOBJ)
48 $(AR) $(LIB) $(LIBOBJ) 48 $(ARX) $(LIB) $(LIBOBJ)
49 $(RANLIB) $(LIB) || echo Never mind. 49 $(RANLIB) $(LIB) || echo Never mind.
50 @touch lib 50 @touch lib
51 51
diff --git a/src/lib/libcrypto/bn/bn_opt.c b/src/lib/libcrypto/bn/bn_opt.c
new file mode 100644
index 0000000000..21cbb38f62
--- /dev/null
+++ b/src/lib/libcrypto/bn/bn_opt.c
@@ -0,0 +1,87 @@
1/* crypto/bn/bn_opt.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#ifndef BN_DEBUG
60# undef NDEBUG /* avoid conflicting definitions */
61# define NDEBUG
62#endif
63
64#include <assert.h>
65#include <limits.h>
66#include <stdio.h>
67#include "cryptlib.h"
68#include "bn_lcl.h"
69
70char *BN_options(void)
71 {
72 static int init=0;
73 static char data[16];
74
75 if (!init)
76 {
77 init++;
78#ifdef BN_LLONG
79 BIO_snprintf(data,sizeof data,"bn(%d,%d)",
80 (int)sizeof(BN_ULLONG)*8,(int)sizeof(BN_ULONG)*8);
81#else
82 BIO_snprintf(data,sizeof data,"bn(%d,%d)",
83 (int)sizeof(BN_ULONG)*8,(int)sizeof(BN_ULONG)*8);
84#endif
85 }
86 return(data);
87 }
diff --git a/src/lib/libcrypto/buffer/Makefile b/src/lib/libcrypto/buffer/Makefile
index 9f3a88d2d6..9e0f46e19a 100644
--- a/src/lib/libcrypto/buffer/Makefile
+++ b/src/lib/libcrypto/buffer/Makefile
@@ -17,8 +17,8 @@ TEST=
17APPS= 17APPS=
18 18
19LIB=$(TOP)/libcrypto.a 19LIB=$(TOP)/libcrypto.a
20LIBSRC= buffer.c buf_err.c 20LIBSRC= buffer.c buf_str.c buf_err.c
21LIBOBJ= buffer.o buf_err.o 21LIBOBJ= buffer.o buf_str.o buf_err.o
22 22
23SRC= $(LIBSRC) 23SRC= $(LIBSRC)
24 24
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -81,6 +81,13 @@ buf_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
81buf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h 81buf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
82buf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 82buf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
83buf_err.o: buf_err.c 83buf_err.o: buf_err.c
84buf_str.o: ../../e_os.h ../../include/openssl/bio.h
85buf_str.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
86buf_str.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
87buf_str.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
88buf_str.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
89buf_str.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
90buf_str.o: ../../include/openssl/symhacks.h ../cryptlib.h buf_str.c
84buffer.o: ../../e_os.h ../../include/openssl/bio.h 91buffer.o: ../../e_os.h ../../include/openssl/bio.h
85buffer.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 92buffer.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
86buffer.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 93buffer.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
diff --git a/src/lib/libcrypto/cast/Makefile b/src/lib/libcrypto/cast/Makefile
index 149956ee90..2e026dbe0d 100644
--- a/src/lib/libcrypto/cast/Makefile
+++ b/src/lib/libcrypto/cast/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -102,5 +102,8 @@ c_ofb64.o: ../../e_os.h ../../include/openssl/cast.h
102c_ofb64.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 102c_ofb64.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
103c_ofb64.o: c_ofb64.c cast_lcl.h 103c_ofb64.o: c_ofb64.c cast_lcl.h
104c_skey.o: ../../e_os.h ../../include/openssl/cast.h 104c_skey.o: ../../e_os.h ../../include/openssl/cast.h
105c_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 105c_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
106c_skey.o: c_skey.c cast_lcl.h cast_s.h 106c_skey.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
107c_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108c_skey.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109c_skey.o: ../../include/openssl/symhacks.h c_skey.c cast_lcl.h cast_s.h
diff --git a/src/lib/libcrypto/comp/Makefile b/src/lib/libcrypto/comp/Makefile
index efda832dce..5d364b8513 100644
--- a/src/lib/libcrypto/comp/Makefile
+++ b/src/lib/libcrypto/comp/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
diff --git a/src/lib/libcrypto/conf/Makefile b/src/lib/libcrypto/conf/Makefile
index 78bb324106..ccd0721332 100644
--- a/src/lib/libcrypto/conf/Makefile
+++ b/src/lib/libcrypto/conf/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
@@ -114,8 +114,8 @@ conf_mall.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
114conf_mall.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 114conf_mall.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
115conf_mall.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h 115conf_mall.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
116conf_mall.o: ../../include/openssl/err.h ../../include/openssl/evp.h 116conf_mall.o: ../../include/openssl/err.h ../../include/openssl/evp.h
117conf_mall.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 117conf_mall.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
118conf_mall.o: ../../include/openssl/objects.h 118conf_mall.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
119conf_mall.o: ../../include/openssl/opensslconf.h 119conf_mall.o: ../../include/openssl/opensslconf.h
120conf_mall.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 120conf_mall.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
121conf_mall.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 121conf_mall.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -128,9 +128,9 @@ conf_mod.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
128conf_mod.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h 128conf_mod.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
129conf_mod.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 129conf_mod.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
130conf_mod.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 130conf_mod.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
131conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 131conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
132conf_mod.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 132conf_mod.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
133conf_mod.o: ../../include/openssl/opensslconf.h 133conf_mod.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
134conf_mod.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 134conf_mod.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
135conf_mod.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 135conf_mod.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
136conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 136conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -143,8 +143,9 @@ conf_sap.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
143conf_sap.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 143conf_sap.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
144conf_sap.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h 144conf_sap.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
145conf_sap.o: ../../include/openssl/err.h ../../include/openssl/evp.h 145conf_sap.o: ../../include/openssl/err.h ../../include/openssl/evp.h
146conf_sap.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 146conf_sap.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
147conf_sap.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 147conf_sap.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
148conf_sap.o: ../../include/openssl/opensslconf.h
148conf_sap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 149conf_sap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
149conf_sap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 150conf_sap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
150conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 151conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
diff --git a/src/lib/libcrypto/des/Makefile b/src/lib/libcrypto/des/Makefile
index 523dfe38f2..786e68802e 100644
--- a/src/lib/libcrypto/des/Makefile
+++ b/src/lib/libcrypto/des/Makefile
@@ -24,7 +24,7 @@ TEST=destest.c
24APPS= 24APPS=
25 25
26LIB=$(TOP)/libcrypto.a 26LIB=$(TOP)/libcrypto.a
27LIBSRC= cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \ 27LIBSRC= des_lib.c cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \
28 ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c \ 28 ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c \
29 fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c \ 29 fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c \
30 qud_cksm.c rand_key.c rpc_enc.c set_key.c \ 30 qud_cksm.c rand_key.c rpc_enc.c set_key.c \
@@ -33,7 +33,7 @@ LIBSRC= cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \
33 str2key.c cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_old.c des_old2.c \ 33 str2key.c cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_old.c des_old2.c \
34 read2pwd.c 34 read2pwd.c
35 35
36LIBOBJ= set_key.o ecb_enc.o cbc_enc.o \ 36LIBOBJ= des_lib.o set_key.o ecb_enc.o cbc_enc.o \
37 ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o ofb64ede.o \ 37 ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o ofb64ede.o \
38 enc_read.o enc_writ.o ofb64enc.o \ 38 enc_read.o enc_writ.o ofb64enc.o \
39 ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o rand_key.o \ 39 ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o rand_key.o \
@@ -54,7 +54,7 @@ top:
54all: lib 54all: lib
55 55
56lib: $(LIBOBJ) 56lib: $(LIBOBJ)
57 $(AR) $(LIB) $(LIBOBJ) 57 $(ARX) $(LIB) $(LIBOBJ)
58 $(RANLIB) $(LIB) || echo Never mind. 58 $(RANLIB) $(LIB) || echo Never mind.
59 @touch lib 59 @touch lib
60 60
@@ -157,6 +157,13 @@ des_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
157des_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 157des_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
158des_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 158des_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
159des_enc.o: des_enc.c des_locl.h ncbc_enc.c 159des_enc.o: des_enc.c des_locl.h ncbc_enc.c
160des_lib.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
161des_lib.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
162des_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
163des_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
164des_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
165des_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
166des_lib.o: ../../include/openssl/ui_compat.h des_lib.c des_locl.h des_ver.h
160des_old.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 167des_old.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
161des_old.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 168des_old.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
162des_old.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h 169des_old.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
@@ -175,14 +182,12 @@ ecb3_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
175ecb3_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 182ecb3_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
176ecb3_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 183ecb3_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
177ecb3_enc.o: des_locl.h ecb3_enc.c 184ecb3_enc.o: des_locl.h ecb3_enc.c
178ecb_enc.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
179ecb_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 185ecb_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
180ecb_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 186ecb_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
181ecb_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 187ecb_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
182ecb_enc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 188ecb_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
183ecb_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h 189ecb_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
184ecb_enc.o: ../../include/openssl/ui_compat.h des_locl.h des_ver.h ecb_enc.c 190ecb_enc.o: des_locl.h ecb_enc.c spr.h
185ecb_enc.o: spr.h
186ede_cbcm_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 191ede_cbcm_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
187ede_cbcm_enc.o: ../../include/openssl/e_os2.h 192ede_cbcm_enc.o: ../../include/openssl/e_os2.h
188ede_cbcm_enc.o: ../../include/openssl/opensslconf.h 193ede_cbcm_enc.o: ../../include/openssl/opensslconf.h
@@ -272,11 +277,11 @@ rpc_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
272rpc_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 277rpc_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
273rpc_enc.o: des_locl.h des_ver.h rpc_des.h rpc_enc.c 278rpc_enc.o: des_locl.h des_ver.h rpc_des.h rpc_enc.c
274set_key.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 279set_key.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
275set_key.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 280set_key.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
276set_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h 281set_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/ossl_typ.h
277set_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 282set_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
278set_key.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 283set_key.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
279set_key.o: des_locl.h set_key.c 284set_key.o: ../../include/openssl/ui_compat.h des_locl.h set_key.c
280str2key.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 285str2key.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
281str2key.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h 286str2key.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
282str2key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 287str2key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
diff --git a/src/lib/libcrypto/des/des_lib.c b/src/lib/libcrypto/des/des_lib.c
new file mode 100644
index 0000000000..d4b3047932
--- /dev/null
+++ b/src/lib/libcrypto/des/des_lib.c
@@ -0,0 +1,106 @@
1/* crypto/des/ecb_enc.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 "des_locl.h"
60#include "des_ver.h"
61#include <openssl/opensslv.h>
62#include <openssl/bio.h>
63
64OPENSSL_GLOBAL const char libdes_version[]="libdes" OPENSSL_VERSION_PTEXT;
65OPENSSL_GLOBAL const char DES_version[]="DES" OPENSSL_VERSION_PTEXT;
66
67const char *DES_options(void)
68 {
69 static int init=1;
70 static char buf[32];
71
72 if (init)
73 {
74 const char *ptr,*unroll,*risc,*size;
75
76#ifdef DES_PTR
77 ptr="ptr";
78#else
79 ptr="idx";
80#endif
81#if defined(DES_RISC1) || defined(DES_RISC2)
82#ifdef DES_RISC1
83 risc="risc1";
84#endif
85#ifdef DES_RISC2
86 risc="risc2";
87#endif
88#else
89 risc="cisc";
90#endif
91#ifdef DES_UNROLL
92 unroll="16";
93#else
94 unroll="4";
95#endif
96 if (sizeof(DES_LONG) != sizeof(long))
97 size="int";
98 else
99 size="long";
100 BIO_snprintf(buf,sizeof buf,"des(%s,%s,%s,%s)",ptr,risc,unroll,
101 size);
102 init=0;
103 }
104 return(buf);
105 }
106
diff --git a/src/lib/libcrypto/dsa/dsa_utl.c b/src/lib/libcrypto/dsa/dsa_utl.c
new file mode 100644
index 0000000000..24c021d120
--- /dev/null
+++ b/src/lib/libcrypto/dsa/dsa_utl.c
@@ -0,0 +1,95 @@
1/* crypto/dsa/dsa_lib.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/* Original version from Steven Schoch <schoch@sheba.arc.nasa.gov> */
60
61#include <stdio.h>
62#include "cryptlib.h"
63#include <openssl/bn.h>
64#include <openssl/dsa.h>
65#include <openssl/asn1.h>
66#ifndef OPENSSL_NO_ENGINE
67#include <openssl/engine.h>
68#endif
69#ifndef OPENSSL_NO_DH
70#include <openssl/dh.h>
71#endif
72
73DSA_SIG *DSA_SIG_new(void)
74 {
75 DSA_SIG *sig;
76 sig = OPENSSL_malloc(sizeof(DSA_SIG));
77 if (!sig)
78 return NULL;
79 sig->r = NULL;
80 sig->s = NULL;
81 return sig;
82 }
83
84void DSA_SIG_free(DSA_SIG *sig)
85 {
86 if (sig)
87 {
88 if (sig->r)
89 BN_free(sig->r);
90 if (sig->s)
91 BN_free(sig->s);
92 OPENSSL_free(sig);
93 }
94 }
95
diff --git a/src/lib/libcrypto/dso/Makefile b/src/lib/libcrypto/dso/Makefile
index 07f5d8d159..52f152888c 100644
--- a/src/lib/libcrypto/dso/Makefile
+++ b/src/lib/libcrypto/dso/Makefile
@@ -35,7 +35,7 @@ top:
35all: lib 35all: lib
36 36
37lib: $(LIBOBJ) 37lib: $(LIBOBJ)
38 $(AR) $(LIB) $(LIBOBJ) 38 $(ARX) $(LIB) $(LIBOBJ)
39 $(RANLIB) $(LIB) || echo Never mind. 39 $(RANLIB) $(LIB) || echo Never mind.
40 @touch lib 40 @touch lib
41 41
diff --git a/src/lib/libcrypto/dyn_lck.c b/src/lib/libcrypto/dyn_lck.c
new file mode 100644
index 0000000000..7f82c41264
--- /dev/null
+++ b/src/lib/libcrypto/dyn_lck.c
@@ -0,0 +1,428 @@
1/* crypto/cryptlib.c */
2/* ====================================================================
3 * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@openssl.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
56 * All rights reserved.
57 *
58 * This package is an SSL implementation written
59 * by Eric Young (eay@cryptsoft.com).
60 * The implementation was written so as to conform with Netscapes SSL.
61 *
62 * This library is free for commercial and non-commercial use as long as
63 * the following conditions are aheared to. The following conditions
64 * apply to all code found in this distribution, be it the RC4, RSA,
65 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
66 * included with this distribution is covered by the same copyright terms
67 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
68 *
69 * Copyright remains Eric Young's, and as such any Copyright notices in
70 * the code are not to be removed.
71 * If this package is used in a product, Eric Young should be given attribution
72 * as the author of the parts of the library used.
73 * This can be in the form of a textual message at program startup or
74 * in documentation (online or textual) provided with the package.
75 *
76 * Redistribution and use in source and binary forms, with or without
77 * modification, are permitted provided that the following conditions
78 * are met:
79 * 1. Redistributions of source code must retain the copyright
80 * notice, this list of conditions and the following disclaimer.
81 * 2. Redistributions in binary form must reproduce the above copyright
82 * notice, this list of conditions and the following disclaimer in the
83 * documentation and/or other materials provided with the distribution.
84 * 3. All advertising materials mentioning features or use of this software
85 * must display the following acknowledgement:
86 * "This product includes cryptographic software written by
87 * Eric Young (eay@cryptsoft.com)"
88 * The word 'cryptographic' can be left out if the rouines from the library
89 * being used are not cryptographic related :-).
90 * 4. If you include any Windows specific code (or a derivative thereof) from
91 * the apps directory (application code) you must include an acknowledgement:
92 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
93 *
94 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
95 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
96 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
97 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
98 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
99 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
100 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
101 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
102 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
103 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
104 * SUCH DAMAGE.
105 *
106 * The licence and distribution terms for any publically available version or
107 * derivative of this code cannot be changed. i.e. this code cannot simply be
108 * copied and put under another distribution licence
109 * [including the GNU Public Licence.]
110 */
111/* ====================================================================
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113 * ECDH support in OpenSSL originally developed by
114 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115 */
116
117#include "cryptlib.h"
118#include <openssl/safestack.h>
119
120#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16)
121static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */
122#endif
123
124DECLARE_STACK_OF(CRYPTO_dynlock)
125IMPLEMENT_STACK_OF(CRYPTO_dynlock)
126
127/* real #defines in crypto.h, keep these upto date */
128static const char* const lock_names[CRYPTO_NUM_LOCKS] =
129 {
130 "<<ERROR>>",
131 "err",
132 "ex_data",
133 "x509",
134 "x509_info",
135 "x509_pkey",
136 "x509_crl",
137 "x509_req",
138 "dsa",
139 "rsa",
140 "evp_pkey",
141 "x509_store",
142 "ssl_ctx",
143 "ssl_cert",
144 "ssl_session",
145 "ssl_sess_cert",
146 "ssl",
147 "ssl_method",
148 "rand",
149 "rand2",
150 "debug_malloc",
151 "BIO",
152 "gethostbyname",
153 "getservbyname",
154 "readdir",
155 "RSA_blinding",
156 "dh",
157 "debug_malloc2",
158 "dso",
159 "dynlock",
160 "engine",
161 "ui",
162 "ecdsa",
163 "ec",
164 "ecdh",
165 "bn",
166 "ec_pre_comp",
167 "store",
168 "comp",
169#ifndef OPENSSL_FIPS
170# if CRYPTO_NUM_LOCKS != 39
171# error "Inconsistency between crypto.h and cryptlib.c"
172# endif
173#else
174 "fips",
175 "fips2",
176# if CRYPTO_NUM_LOCKS != 41
177# error "Inconsistency between crypto.h and cryptlib.c"
178# endif
179#endif
180 };
181
182/* This is for applications to allocate new type names in the non-dynamic
183 array of lock names. These are numbered with positive numbers. */
184static STACK *app_locks=NULL;
185
186/* For applications that want a more dynamic way of handling threads, the
187 following stack is used. These are externally numbered with negative
188 numbers. */
189static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
190
191
192static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
193 (const char *file,int line)=NULL;
194static void (MS_FAR *dynlock_lock_callback)(int mode,
195 struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
196static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
197 const char *file,int line)=NULL;
198
199int CRYPTO_get_new_lockid(char *name)
200 {
201 char *str;
202 int i;
203
204#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16)
205 /* A hack to make Visual C++ 5.0 work correctly when linking as
206 * a DLL using /MT. Without this, the application cannot use
207 * and floating point printf's.
208 * It also seems to be needed for Visual C 1.5 (win16) */
209 SSLeay_MSVC5_hack=(double)name[0]*(double)name[1];
210#endif
211
212 if ((app_locks == NULL) && ((app_locks=sk_new_null()) == NULL))
213 {
214 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE);
215 return(0);
216 }
217 if ((str=BUF_strdup(name)) == NULL)
218 {
219 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE);
220 return(0);
221 }
222 i=sk_push(app_locks,str);
223 if (!i)
224 OPENSSL_free(str);
225 else
226 i+=CRYPTO_NUM_LOCKS; /* gap of one :-) */
227 return(i);
228 }
229
230int CRYPTO_get_new_dynlockid(void)
231 {
232 int i = 0;
233 CRYPTO_dynlock *pointer = NULL;
234
235 if (dynlock_create_callback == NULL)
236 {
237 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK);
238 return(0);
239 }
240 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
241 if ((dyn_locks == NULL)
242 && ((dyn_locks=sk_CRYPTO_dynlock_new_null()) == NULL))
243 {
244 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
245 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
246 return(0);
247 }
248 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
249
250 pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock));
251 if (pointer == NULL)
252 {
253 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
254 return(0);
255 }
256 pointer->references = 1;
257 pointer->data = dynlock_create_callback(__FILE__,__LINE__);
258 if (pointer->data == NULL)
259 {
260 OPENSSL_free(pointer);
261 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
262 return(0);
263 }
264
265 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
266 /* First, try to find an existing empty slot */
267 i=sk_CRYPTO_dynlock_find(dyn_locks,NULL);
268 /* If there was none, push, thereby creating a new one */
269 if (i == -1)
270 /* Since sk_push() returns the number of items on the
271 stack, not the location of the pushed item, we need
272 to transform the returned number into a position,
273 by decreasing it. */
274 i=sk_CRYPTO_dynlock_push(dyn_locks,pointer) - 1;
275 else
276 /* If we found a place with a NULL pointer, put our pointer
277 in it. */
278 (void)sk_CRYPTO_dynlock_set(dyn_locks,i,pointer);
279 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
280
281 if (i == -1)
282 {
283 dynlock_destroy_callback(pointer->data,__FILE__,__LINE__);
284 OPENSSL_free(pointer);
285 }
286 else
287 i += 1; /* to avoid 0 */
288 return -i;
289 }
290
291void CRYPTO_destroy_dynlockid(int i)
292 {
293 CRYPTO_dynlock *pointer = NULL;
294 if (i)
295 i = -i-1;
296 if (dynlock_destroy_callback == NULL)
297 return;
298
299 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
300
301 if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks))
302 {
303 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
304 return;
305 }
306 pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
307 if (pointer != NULL)
308 {
309 --pointer->references;
310#ifdef REF_CHECK
311 if (pointer->references < 0)
312 {
313 fprintf(stderr,"CRYPTO_destroy_dynlockid, bad reference count\n");
314 abort();
315 }
316 else
317#endif
318 if (pointer->references <= 0)
319 {
320 (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL);
321 }
322 else
323 pointer = NULL;
324 }
325 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
326
327 if (pointer)
328 {
329 dynlock_destroy_callback(pointer->data,__FILE__,__LINE__);
330 OPENSSL_free(pointer);
331 }
332 }
333
334struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i)
335 {
336 CRYPTO_dynlock *pointer = NULL;
337 if (i)
338 i = -i-1;
339
340 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
341
342 if (dyn_locks != NULL && i < sk_CRYPTO_dynlock_num(dyn_locks))
343 pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
344 if (pointer)
345 pointer->references++;
346
347 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
348
349 if (pointer)
350 return pointer->data;
351 return NULL;
352 }
353
354struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))
355 (const char *file,int line)
356 {
357 return(dynlock_create_callback);
358 }
359
360void (*CRYPTO_get_dynlock_lock_callback(void))(int mode,
361 struct CRYPTO_dynlock_value *l, const char *file,int line)
362 {
363 return(dynlock_lock_callback);
364 }
365
366void (*CRYPTO_get_dynlock_destroy_callback(void))
367 (struct CRYPTO_dynlock_value *l, const char *file,int line)
368 {
369 return(dynlock_destroy_callback);
370 }
371
372void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func)
373 (const char *file, int line))
374 {
375 dynlock_create_callback=func;
376 }
377
378static void do_dynlock(int mode, int type, const char *file, int line)
379 {
380 if (dynlock_lock_callback != NULL)
381 {
382 struct CRYPTO_dynlock_value *pointer
383 = CRYPTO_get_dynlock_value(type);
384
385 OPENSSL_assert(pointer != NULL);
386
387 dynlock_lock_callback(mode, pointer, file, line);
388
389 CRYPTO_destroy_dynlockid(type);
390 }
391 }
392
393void CRYPTO_set_dynlock_lock_callback(void (*func)(int mode,
394 struct CRYPTO_dynlock_value *l, const char *file, int line))
395 {
396 /* Set callback so CRYPTO_lock() can now handle dynamic locks.
397 * This is OK because at this point and application shouldn't be using
398 * OpenSSL from multiple threads because it is setting up the locking
399 * callbacks.
400 */
401 static int done = 0;
402 if (!done)
403 {
404 int_CRYPTO_set_do_dynlock_callback(do_dynlock);
405 done = 1;
406 }
407
408 dynlock_lock_callback=func;
409 }
410
411void CRYPTO_set_dynlock_destroy_callback(void (*func)
412 (struct CRYPTO_dynlock_value *l, const char *file, int line))
413 {
414 dynlock_destroy_callback=func;
415 }
416
417const char *CRYPTO_get_lock_name(int type)
418 {
419 if (type < 0)
420 return("dynamic");
421 else if (type < CRYPTO_NUM_LOCKS)
422 return(lock_names[type]);
423 else if (type-CRYPTO_NUM_LOCKS > sk_num(app_locks))
424 return("ERROR");
425 else
426 return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS));
427 }
428
diff --git a/src/lib/libcrypto/ec/Makefile b/src/lib/libcrypto/ec/Makefile
index 42f7bb7fc8..b5bbc9faa1 100644
--- a/src/lib/libcrypto/ec/Makefile
+++ b/src/lib/libcrypto/ec/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
diff --git a/src/lib/libcrypto/err/Makefile b/src/lib/libcrypto/err/Makefile
index 23e38409c8..91d1379d41 100644
--- a/src/lib/libcrypto/err/Makefile
+++ b/src/lib/libcrypto/err/Makefile
@@ -17,8 +17,8 @@ TEST=
17APPS= 17APPS=
18 18
19LIB=$(TOP)/libcrypto.a 19LIB=$(TOP)/libcrypto.a
20LIBSRC=err.c err_all.c err_prn.c 20LIBSRC=err.c err_def.c err_all.c err_prn.c err_str.c err_bio.c
21LIBOBJ=err.o err_all.o err_prn.o 21LIBOBJ=err.o err_def.o err_all.o err_prn.o err_str.o err_bio.o
22 22
23SRC= $(LIBSRC) 23SRC= $(LIBSRC)
24 24
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -89,17 +89,31 @@ err_all.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
89err_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 89err_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
90err_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h 90err_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
91err_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h 91err_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h
92err_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 92err_all.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
93err_all.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 93err_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
94err_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 94err_all.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
95err_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem2.h 95err_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
96err_all.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 96err_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
97err_all.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h 97err_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
98err_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 98err_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
99err_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 99err_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
100err_all.o: ../../include/openssl/ui.h ../../include/openssl/x509.h 100err_all.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
101err_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 101err_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
102err_all.o: err_all.c 102err_all.o: ../../include/openssl/x509v3.h err_all.c
103err_bio.o: ../../e_os.h ../../include/openssl/bio.h
104err_bio.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
105err_bio.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
106err_bio.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
107err_bio.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108err_bio.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109err_bio.o: ../../include/openssl/symhacks.h ../cryptlib.h err_bio.c
110err_def.o: ../../e_os.h ../../include/openssl/bio.h
111err_def.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
112err_def.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
113err_def.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
114err_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
115err_def.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
116err_def.o: ../../include/openssl/symhacks.h ../cryptlib.h err_def.c
103err_prn.o: ../../e_os.h ../../include/openssl/bio.h 117err_prn.o: ../../e_os.h ../../include/openssl/bio.h
104err_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 118err_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
105err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 119err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
@@ -107,3 +121,10 @@ err_prn.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
107err_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 121err_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108err_prn.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 122err_prn.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109err_prn.o: ../../include/openssl/symhacks.h ../cryptlib.h err_prn.c 123err_prn.o: ../../include/openssl/symhacks.h ../cryptlib.h err_prn.c
124err_str.o: ../../e_os.h ../../include/openssl/bio.h
125err_str.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
126err_str.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
127err_str.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
128err_str.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
129err_str.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
130err_str.o: ../../include/openssl/symhacks.h ../cryptlib.h err_str.c
diff --git a/src/lib/libcrypto/err/err_bio.c b/src/lib/libcrypto/err/err_bio.c
new file mode 100644
index 0000000000..a42f804840
--- /dev/null
+++ b/src/lib/libcrypto/err/err_bio.c
@@ -0,0 +1,75 @@
1/* crypto/err/err_prn.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/lhash.h>
62#include <openssl/crypto.h>
63#include <openssl/buffer.h>
64#include <openssl/err.h>
65
66static int print_bio(const char *str, size_t len, void *bp)
67 {
68 return BIO_write((BIO *)bp, str, len);
69 }
70void ERR_print_errors(BIO *bp)
71 {
72 ERR_print_errors_cb(print_bio, bp);
73 }
74
75
diff --git a/src/lib/libcrypto/err/err_def.c b/src/lib/libcrypto/err/err_def.c
new file mode 100644
index 0000000000..7ed3d84955
--- /dev/null
+++ b/src/lib/libcrypto/err/err_def.c
@@ -0,0 +1,665 @@
1/* crypto/err/err_def.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 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#include <stdio.h>
113#include <stdarg.h>
114#include <string.h>
115#include "cryptlib.h"
116#include <openssl/lhash.h>
117#include <openssl/crypto.h>
118#include <openssl/buffer.h>
119#include <openssl/bio.h>
120#include <openssl/err.h>
121
122#define err_clear_data(p,i) \
123 do { \
124 if (((p)->err_data[i] != NULL) && \
125 (p)->err_data_flags[i] & ERR_TXT_MALLOCED) \
126 { \
127 OPENSSL_free((p)->err_data[i]); \
128 (p)->err_data[i]=NULL; \
129 } \
130 (p)->err_data_flags[i]=0; \
131 } while(0)
132
133#define err_clear(p,i) \
134 do { \
135 (p)->err_flags[i]=0; \
136 (p)->err_buffer[i]=0; \
137 err_clear_data(p,i); \
138 (p)->err_file[i]=NULL; \
139 (p)->err_line[i]= -1; \
140 } while(0)
141
142static void err_load_strings(int lib, ERR_STRING_DATA *str);
143
144static void ERR_STATE_free(ERR_STATE *s);
145
146/* Define the predeclared (but externally opaque) "ERR_FNS" type */
147struct st_ERR_FNS
148 {
149 /* Works on the "error_hash" string table */
150 LHASH *(*cb_err_get)(int create);
151 void (*cb_err_del)(void);
152 ERR_STRING_DATA *(*cb_err_get_item)(const ERR_STRING_DATA *);
153 ERR_STRING_DATA *(*cb_err_set_item)(ERR_STRING_DATA *);
154 ERR_STRING_DATA *(*cb_err_del_item)(ERR_STRING_DATA *);
155 /* Works on the "thread_hash" error-state table */
156 LHASH *(*cb_thread_get)(int create);
157 void (*cb_thread_release)(LHASH **hash);
158 ERR_STATE *(*cb_thread_get_item)(const ERR_STATE *);
159 ERR_STATE *(*cb_thread_set_item)(ERR_STATE *);
160 void (*cb_thread_del_item)(const ERR_STATE *);
161 /* Returns the next available error "library" numbers */
162 int (*cb_get_next_lib)(void);
163 };
164
165/* Predeclarations of the "err_defaults" functions */
166static LHASH *int_err_get(int create);
167static void int_err_del(void);
168static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *);
169static ERR_STRING_DATA *int_err_set_item(ERR_STRING_DATA *);
170static ERR_STRING_DATA *int_err_del_item(ERR_STRING_DATA *);
171static LHASH *int_thread_get(int create);
172static void int_thread_release(LHASH **hash);
173static ERR_STATE *int_thread_get_item(const ERR_STATE *);
174static ERR_STATE *int_thread_set_item(ERR_STATE *);
175static void int_thread_del_item(const ERR_STATE *);
176static int int_err_get_next_lib(void);
177/* The static ERR_FNS table using these defaults functions */
178static const ERR_FNS err_defaults =
179 {
180 int_err_get,
181 int_err_del,
182 int_err_get_item,
183 int_err_set_item,
184 int_err_del_item,
185 int_thread_get,
186 int_thread_release,
187 int_thread_get_item,
188 int_thread_set_item,
189 int_thread_del_item,
190 int_err_get_next_lib
191 };
192
193/* The replacable table of ERR_FNS functions we use at run-time */
194static const ERR_FNS *err_fns = NULL;
195
196/* Eg. rather than using "err_get()", use "ERRFN(err_get)()". */
197#define ERRFN(a) err_fns->cb_##a
198
199/* The internal state used by "err_defaults" - as such, the setting, reading,
200 * creating, and deleting of this data should only be permitted via the
201 * "err_defaults" functions. This way, a linked module can completely defer all
202 * ERR state operation (together with requisite locking) to the implementations
203 * and state in the loading application. */
204static LHASH *int_error_hash = NULL;
205static LHASH *int_thread_hash = NULL;
206static int int_thread_hash_references = 0;
207static int int_err_library_number= ERR_LIB_USER;
208
209/* Internal function that checks whether "err_fns" is set and if not, sets it to
210 * the defaults. */
211static void err_fns_check(void)
212 {
213 if (err_fns) return;
214
215 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
216 if (!err_fns)
217 err_fns = &err_defaults;
218 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
219 }
220
221/* API functions to get or set the underlying ERR functions. */
222
223const ERR_FNS *ERR_get_implementation(void)
224 {
225 err_fns_check();
226 return err_fns;
227 }
228
229int ERR_set_implementation(const ERR_FNS *fns)
230 {
231 int ret = 0;
232
233 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
234 /* It's too late if 'err_fns' is non-NULL. BTW: not much point setting
235 * an error is there?! */
236 if (!err_fns)
237 {
238 err_fns = fns;
239 ret = 1;
240 }
241 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
242 return ret;
243 }
244
245/* These are the callbacks provided to "lh_new()" when creating the LHASH tables
246 * internal to the "err_defaults" implementation. */
247
248/* static unsigned long err_hash(ERR_STRING_DATA *a); */
249static unsigned long err_hash(const void *a_void);
250/* static int err_cmp(ERR_STRING_DATA *a, ERR_STRING_DATA *b); */
251static int err_cmp(const void *a_void, const void *b_void);
252/* static unsigned long pid_hash(ERR_STATE *pid); */
253static unsigned long pid_hash(const void *pid_void);
254/* static int pid_cmp(ERR_STATE *a,ERR_STATE *pid); */
255static int pid_cmp(const void *a_void,const void *pid_void);
256
257/* The internal functions used in the "err_defaults" implementation */
258
259static LHASH *int_err_get(int create)
260 {
261 LHASH *ret = NULL;
262
263 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
264 if (!int_error_hash && create)
265 {
266 CRYPTO_push_info("int_err_get (err.c)");
267 int_error_hash = lh_new(err_hash, err_cmp);
268 CRYPTO_pop_info();
269 }
270 if (int_error_hash)
271 ret = int_error_hash;
272 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
273
274 return ret;
275 }
276
277static void int_err_del(void)
278 {
279 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
280 if (int_error_hash)
281 {
282 lh_free(int_error_hash);
283 int_error_hash = NULL;
284 }
285 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
286 }
287
288static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *d)
289 {
290 ERR_STRING_DATA *p;
291 LHASH *hash;
292
293 err_fns_check();
294 hash = ERRFN(err_get)(0);
295 if (!hash)
296 return NULL;
297
298 CRYPTO_r_lock(CRYPTO_LOCK_ERR);
299 p = (ERR_STRING_DATA *)lh_retrieve(hash, d);
300 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
301
302 return p;
303 }
304
305static ERR_STRING_DATA *int_err_set_item(ERR_STRING_DATA *d)
306 {
307 ERR_STRING_DATA *p;
308 LHASH *hash;
309
310 err_fns_check();
311 hash = ERRFN(err_get)(1);
312 if (!hash)
313 return NULL;
314
315 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
316 p = (ERR_STRING_DATA *)lh_insert(hash, d);
317 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
318
319 return p;
320 }
321
322static ERR_STRING_DATA *int_err_del_item(ERR_STRING_DATA *d)
323 {
324 ERR_STRING_DATA *p;
325 LHASH *hash;
326
327 err_fns_check();
328 hash = ERRFN(err_get)(0);
329 if (!hash)
330 return NULL;
331
332 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
333 p = (ERR_STRING_DATA *)lh_delete(hash, d);
334 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
335
336 return p;
337 }
338
339static LHASH *int_thread_get(int create)
340 {
341 LHASH *ret = NULL;
342
343 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
344 if (!int_thread_hash && create)
345 {
346 CRYPTO_push_info("int_thread_get (err.c)");
347 int_thread_hash = lh_new(pid_hash, pid_cmp);
348 CRYPTO_pop_info();
349 }
350 if (int_thread_hash)
351 {
352 int_thread_hash_references++;
353 ret = int_thread_hash;
354 }
355 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
356 return ret;
357 }
358
359static void int_thread_release(LHASH **hash)
360 {
361 int i;
362
363 if (hash == NULL || *hash == NULL)
364 return;
365
366 i = CRYPTO_add(&int_thread_hash_references, -1, CRYPTO_LOCK_ERR);
367
368#ifdef REF_PRINT
369 fprintf(stderr,"%4d:%s\n",int_thread_hash_references,"ERR");
370#endif
371 if (i > 0) return;
372#ifdef REF_CHECK
373 if (i < 0)
374 {
375 fprintf(stderr,"int_thread_release, bad reference count\n");
376 abort(); /* ok */
377 }
378#endif
379 *hash = NULL;
380 }
381
382static ERR_STATE *int_thread_get_item(const ERR_STATE *d)
383 {
384 ERR_STATE *p;
385 LHASH *hash;
386
387 err_fns_check();
388 hash = ERRFN(thread_get)(0);
389 if (!hash)
390 return NULL;
391
392 CRYPTO_r_lock(CRYPTO_LOCK_ERR);
393 p = (ERR_STATE *)lh_retrieve(hash, d);
394 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
395
396 ERRFN(thread_release)(&hash);
397 return p;
398 }
399
400static ERR_STATE *int_thread_set_item(ERR_STATE *d)
401 {
402 ERR_STATE *p;
403 LHASH *hash;
404
405 err_fns_check();
406 hash = ERRFN(thread_get)(1);
407 if (!hash)
408 return NULL;
409
410 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
411 p = (ERR_STATE *)lh_insert(hash, d);
412 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
413
414 ERRFN(thread_release)(&hash);
415 return p;
416 }
417
418static void int_thread_del_item(const ERR_STATE *d)
419 {
420 ERR_STATE *p;
421 LHASH *hash;
422
423 err_fns_check();
424 hash = ERRFN(thread_get)(0);
425 if (!hash)
426 return;
427
428 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
429 p = (ERR_STATE *)lh_delete(hash, d);
430 /* make sure we don't leak memory */
431 if (int_thread_hash_references == 1
432 && int_thread_hash && (lh_num_items(int_thread_hash) == 0))
433 {
434 lh_free(int_thread_hash);
435 int_thread_hash = NULL;
436 }
437 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
438
439 ERRFN(thread_release)(&hash);
440 if (p)
441 ERR_STATE_free(p);
442 }
443
444static int int_err_get_next_lib(void)
445 {
446 int ret;
447
448 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
449 ret = int_err_library_number++;
450 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
451
452 return ret;
453 }
454
455static void ERR_STATE_free(ERR_STATE *s)
456 {
457 int i;
458
459 if (s == NULL)
460 return;
461
462 for (i=0; i<ERR_NUM_ERRORS; i++)
463 {
464 err_clear_data(s,i);
465 }
466 OPENSSL_free(s);
467 }
468
469static void err_load_strings(int lib, ERR_STRING_DATA *str)
470 {
471 while (str->error)
472 {
473 if (lib)
474 str->error|=ERR_PACK(lib,0,0);
475 ERRFN(err_set_item)(str);
476 str++;
477 }
478 }
479
480void ERR_load_strings(int lib, ERR_STRING_DATA *str)
481 {
482 err_fns_check();
483 err_load_strings(lib, str);
484 }
485
486void ERR_unload_strings(int lib, ERR_STRING_DATA *str)
487 {
488 while (str->error)
489 {
490 if (lib)
491 str->error|=ERR_PACK(lib,0,0);
492 ERRFN(err_del_item)(str);
493 str++;
494 }
495 }
496
497void ERR_free_strings(void)
498 {
499 err_fns_check();
500 ERRFN(err_del)();
501 }
502
503LHASH *ERR_get_string_table(void)
504 {
505 err_fns_check();
506 return ERRFN(err_get)(0);
507 }
508
509LHASH *ERR_get_err_state_table(void)
510 {
511 err_fns_check();
512 return ERRFN(thread_get)(0);
513 }
514
515void ERR_release_err_state_table(LHASH **hash)
516 {
517 err_fns_check();
518 ERRFN(thread_release)(hash);
519 }
520
521const char *ERR_lib_error_string(unsigned long e)
522 {
523 ERR_STRING_DATA d,*p;
524 unsigned long l;
525
526 err_fns_check();
527 l=ERR_GET_LIB(e);
528 d.error=ERR_PACK(l,0,0);
529 p=ERRFN(err_get_item)(&d);
530 return((p == NULL)?NULL:p->string);
531 }
532
533const char *ERR_func_error_string(unsigned long e)
534 {
535 ERR_STRING_DATA d,*p;
536 unsigned long l,f;
537
538 err_fns_check();
539 l=ERR_GET_LIB(e);
540 f=ERR_GET_FUNC(e);
541 d.error=ERR_PACK(l,f,0);
542 p=ERRFN(err_get_item)(&d);
543 return((p == NULL)?NULL:p->string);
544 }
545
546const char *ERR_reason_error_string(unsigned long e)
547 {
548 ERR_STRING_DATA d,*p=NULL;
549 unsigned long l,r;
550
551 err_fns_check();
552 l=ERR_GET_LIB(e);
553 r=ERR_GET_REASON(e);
554 d.error=ERR_PACK(l,0,r);
555 p=ERRFN(err_get_item)(&d);
556 if (!p)
557 {
558 d.error=ERR_PACK(0,0,r);
559 p=ERRFN(err_get_item)(&d);
560 }
561 return((p == NULL)?NULL:p->string);
562 }
563
564/* static unsigned long err_hash(ERR_STRING_DATA *a) */
565static unsigned long err_hash(const void *a_void)
566 {
567 unsigned long ret,l;
568
569 l=((const ERR_STRING_DATA *)a_void)->error;
570 ret=l^ERR_GET_LIB(l)^ERR_GET_FUNC(l);
571 return(ret^ret%19*13);
572 }
573
574/* static int err_cmp(ERR_STRING_DATA *a, ERR_STRING_DATA *b) */
575static int err_cmp(const void *a_void, const void *b_void)
576 {
577 return((int)(((const ERR_STRING_DATA *)a_void)->error -
578 ((const ERR_STRING_DATA *)b_void)->error));
579 }
580
581/* static unsigned long pid_hash(ERR_STATE *a) */
582static unsigned long pid_hash(const void *a_void)
583 {
584 return(((const ERR_STATE *)a_void)->pid*13);
585 }
586
587/* static int pid_cmp(ERR_STATE *a, ERR_STATE *b) */
588static int pid_cmp(const void *a_void, const void *b_void)
589 {
590 return((int)((long)((const ERR_STATE *)a_void)->pid -
591 (long)((const ERR_STATE *)b_void)->pid));
592 }
593#ifdef OPENSSL_FIPS
594static void int_err_remove_state(unsigned long pid)
595#else
596void ERR_remove_state(unsigned long pid)
597#endif
598 {
599 ERR_STATE tmp;
600
601 err_fns_check();
602 if (pid == 0)
603 pid=(unsigned long)CRYPTO_thread_id();
604 tmp.pid=pid;
605 /* thread_del_item automatically destroys the LHASH if the number of
606 * items reaches zero. */
607 ERRFN(thread_del_item)(&tmp);
608 }
609
610#ifdef OPENSSL_FIPS
611 static ERR_STATE *int_err_get_state(void)
612#else
613ERR_STATE *ERR_get_state(void)
614#endif
615 {
616 static ERR_STATE fallback;
617 ERR_STATE *ret,tmp,*tmpp=NULL;
618 int i;
619 unsigned long pid;
620
621 err_fns_check();
622 pid=(unsigned long)CRYPTO_thread_id();
623 tmp.pid=pid;
624 ret=ERRFN(thread_get_item)(&tmp);
625
626 /* ret == the error state, if NULL, make a new one */
627 if (ret == NULL)
628 {
629 ret=(ERR_STATE *)OPENSSL_malloc(sizeof(ERR_STATE));
630 if (ret == NULL) return(&fallback);
631 ret->pid=pid;
632 ret->top=0;
633 ret->bottom=0;
634 for (i=0; i<ERR_NUM_ERRORS; i++)
635 {
636 ret->err_data[i]=NULL;
637 ret->err_data_flags[i]=0;
638 }
639 tmpp = ERRFN(thread_set_item)(ret);
640 /* To check if insertion failed, do a get. */
641 if (ERRFN(thread_get_item)(ret) != ret)
642 {
643 ERR_STATE_free(ret); /* could not insert it */
644 return(&fallback);
645 }
646 /* If a race occured in this function and we came second, tmpp
647 * is the first one that we just replaced. */
648 if (tmpp)
649 ERR_STATE_free(tmpp);
650 }
651 return ret;
652 }
653
654#ifdef OPENSSL_FIPS
655void int_ERR_lib_init(void)
656 {
657 int_ERR_set_state_func(int_err_get_state, int_err_remove_state);
658 }
659#endif
660
661int ERR_get_next_error_library(void)
662 {
663 err_fns_check();
664 return ERRFN(get_next_lib)();
665 }
diff --git a/src/lib/libcrypto/err/err_str.c b/src/lib/libcrypto/err/err_str.c
new file mode 100644
index 0000000000..d39040888d
--- /dev/null
+++ b/src/lib/libcrypto/err/err_str.c
@@ -0,0 +1,295 @@
1/* crypto/err/err_str.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 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#include <stdio.h>
113#include <stdarg.h>
114#include <string.h>
115#include "cryptlib.h"
116#include <openssl/lhash.h>
117#include <openssl/crypto.h>
118#include <openssl/buffer.h>
119#include <openssl/bio.h>
120#include <openssl/err.h>
121
122#ifndef OPENSSL_NO_ERR
123static ERR_STRING_DATA ERR_str_libraries[]=
124 {
125{ERR_PACK(ERR_LIB_NONE,0,0) ,"unknown library"},
126{ERR_PACK(ERR_LIB_SYS,0,0) ,"system library"},
127{ERR_PACK(ERR_LIB_BN,0,0) ,"bignum routines"},
128{ERR_PACK(ERR_LIB_RSA,0,0) ,"rsa routines"},
129{ERR_PACK(ERR_LIB_DH,0,0) ,"Diffie-Hellman routines"},
130{ERR_PACK(ERR_LIB_EVP,0,0) ,"digital envelope routines"},
131{ERR_PACK(ERR_LIB_BUF,0,0) ,"memory buffer routines"},
132{ERR_PACK(ERR_LIB_OBJ,0,0) ,"object identifier routines"},
133{ERR_PACK(ERR_LIB_PEM,0,0) ,"PEM routines"},
134{ERR_PACK(ERR_LIB_DSA,0,0) ,"dsa routines"},
135{ERR_PACK(ERR_LIB_X509,0,0) ,"x509 certificate routines"},
136{ERR_PACK(ERR_LIB_ASN1,0,0) ,"asn1 encoding routines"},
137{ERR_PACK(ERR_LIB_CONF,0,0) ,"configuration file routines"},
138{ERR_PACK(ERR_LIB_CRYPTO,0,0) ,"common libcrypto routines"},
139{ERR_PACK(ERR_LIB_EC,0,0) ,"elliptic curve routines"},
140{ERR_PACK(ERR_LIB_SSL,0,0) ,"SSL routines"},
141{ERR_PACK(ERR_LIB_BIO,0,0) ,"BIO routines"},
142{ERR_PACK(ERR_LIB_PKCS7,0,0) ,"PKCS7 routines"},
143{ERR_PACK(ERR_LIB_X509V3,0,0) ,"X509 V3 routines"},
144{ERR_PACK(ERR_LIB_PKCS12,0,0) ,"PKCS12 routines"},
145{ERR_PACK(ERR_LIB_RAND,0,0) ,"random number generator"},
146{ERR_PACK(ERR_LIB_DSO,0,0) ,"DSO support routines"},
147{ERR_PACK(ERR_LIB_ENGINE,0,0) ,"engine routines"},
148{ERR_PACK(ERR_LIB_OCSP,0,0) ,"OCSP routines"},
149{ERR_PACK(ERR_LIB_FIPS,0,0) ,"FIPS routines"},
150{ERR_PACK(ERR_LIB_CMS,0,0) ,"CMS routines"},
151{ERR_PACK(ERR_LIB_JPAKE,0,0) ,"JPAKE routines"},
152{0,NULL},
153 };
154
155static ERR_STRING_DATA ERR_str_functs[]=
156 {
157 {ERR_PACK(0,SYS_F_FOPEN,0), "fopen"},
158 {ERR_PACK(0,SYS_F_CONNECT,0), "connect"},
159 {ERR_PACK(0,SYS_F_GETSERVBYNAME,0), "getservbyname"},
160 {ERR_PACK(0,SYS_F_SOCKET,0), "socket"},
161 {ERR_PACK(0,SYS_F_IOCTLSOCKET,0), "ioctlsocket"},
162 {ERR_PACK(0,SYS_F_BIND,0), "bind"},
163 {ERR_PACK(0,SYS_F_LISTEN,0), "listen"},
164 {ERR_PACK(0,SYS_F_ACCEPT,0), "accept"},
165#ifdef OPENSSL_SYS_WINDOWS
166 {ERR_PACK(0,SYS_F_WSASTARTUP,0), "WSAstartup"},
167#endif
168 {ERR_PACK(0,SYS_F_OPENDIR,0), "opendir"},
169 {ERR_PACK(0,SYS_F_FREAD,0), "fread"},
170 {0,NULL},
171 };
172
173static ERR_STRING_DATA ERR_str_reasons[]=
174 {
175{ERR_R_SYS_LIB ,"system lib"},
176{ERR_R_BN_LIB ,"BN lib"},
177{ERR_R_RSA_LIB ,"RSA lib"},
178{ERR_R_DH_LIB ,"DH lib"},
179{ERR_R_EVP_LIB ,"EVP lib"},
180{ERR_R_BUF_LIB ,"BUF lib"},
181{ERR_R_OBJ_LIB ,"OBJ lib"},
182{ERR_R_PEM_LIB ,"PEM lib"},
183{ERR_R_DSA_LIB ,"DSA lib"},
184{ERR_R_X509_LIB ,"X509 lib"},
185{ERR_R_ASN1_LIB ,"ASN1 lib"},
186{ERR_R_CONF_LIB ,"CONF lib"},
187{ERR_R_CRYPTO_LIB ,"CRYPTO lib"},
188{ERR_R_EC_LIB ,"EC lib"},
189{ERR_R_SSL_LIB ,"SSL lib"},
190{ERR_R_BIO_LIB ,"BIO lib"},
191{ERR_R_PKCS7_LIB ,"PKCS7 lib"},
192{ERR_R_X509V3_LIB ,"X509V3 lib"},
193{ERR_R_PKCS12_LIB ,"PKCS12 lib"},
194{ERR_R_RAND_LIB ,"RAND lib"},
195{ERR_R_DSO_LIB ,"DSO lib"},
196{ERR_R_ENGINE_LIB ,"ENGINE lib"},
197{ERR_R_OCSP_LIB ,"OCSP lib"},
198
199{ERR_R_NESTED_ASN1_ERROR ,"nested asn1 error"},
200{ERR_R_BAD_ASN1_OBJECT_HEADER ,"bad asn1 object header"},
201{ERR_R_BAD_GET_ASN1_OBJECT_CALL ,"bad get asn1 object call"},
202{ERR_R_EXPECTING_AN_ASN1_SEQUENCE ,"expecting an asn1 sequence"},
203{ERR_R_ASN1_LENGTH_MISMATCH ,"asn1 length mismatch"},
204{ERR_R_MISSING_ASN1_EOS ,"missing asn1 eos"},
205
206{ERR_R_FATAL ,"fatal"},
207{ERR_R_MALLOC_FAILURE ,"malloc failure"},
208{ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED ,"called a function you should not call"},
209{ERR_R_PASSED_NULL_PARAMETER ,"passed a null parameter"},
210{ERR_R_INTERNAL_ERROR ,"internal error"},
211{ERR_R_DISABLED ,"called a function that was disabled at compile-time"},
212
213{0,NULL},
214 };
215#endif
216
217#ifndef OPENSSL_NO_ERR
218#define NUM_SYS_STR_REASONS 127
219#define LEN_SYS_STR_REASON 32
220
221static ERR_STRING_DATA SYS_str_reasons[NUM_SYS_STR_REASONS + 1];
222/* SYS_str_reasons is filled with copies of strerror() results at
223 * initialization.
224 * 'errno' values up to 127 should cover all usual errors,
225 * others will be displayed numerically by ERR_error_string.
226 * It is crucial that we have something for each reason code
227 * that occurs in ERR_str_reasons, or bogus reason strings
228 * will be returned for SYSerr, which always gets an errno
229 * value and never one of those 'standard' reason codes. */
230
231static void build_SYS_str_reasons(void)
232 {
233 /* OPENSSL_malloc cannot be used here, use static storage instead */
234 static char strerror_tab[NUM_SYS_STR_REASONS][LEN_SYS_STR_REASON];
235 int i;
236 static int init = 1;
237
238 CRYPTO_r_lock(CRYPTO_LOCK_ERR);
239 if (!init)
240 {
241 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
242 return;
243 }
244
245 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
246 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
247 if (!init)
248 {
249 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
250 return;
251 }
252
253 for (i = 1; i <= NUM_SYS_STR_REASONS; i++)
254 {
255 ERR_STRING_DATA *str = &SYS_str_reasons[i - 1];
256
257 str->error = (unsigned long)i;
258 if (str->string == NULL)
259 {
260 char (*dest)[LEN_SYS_STR_REASON] = &(strerror_tab[i - 1]);
261 char *src = strerror(i);
262 if (src != NULL)
263 {
264 strncpy(*dest, src, sizeof *dest);
265 (*dest)[sizeof *dest - 1] = '\0';
266 str->string = *dest;
267 }
268 }
269 if (str->string == NULL)
270 str->string = "unknown";
271 }
272
273 /* Now we still have SYS_str_reasons[NUM_SYS_STR_REASONS] = {0, NULL},
274 * as required by ERR_load_strings. */
275
276 init = 0;
277
278 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
279 }
280#endif
281
282void ERR_load_ERR_strings(void)
283 {
284#ifndef OPENSSL_NO_ERR
285 if (ERR_func_error_string(ERR_str_functs[0].error) == NULL)
286 {
287 ERR_load_strings(0,ERR_str_libraries);
288 ERR_load_strings(0,ERR_str_reasons);
289 ERR_load_strings(ERR_LIB_SYS,ERR_str_functs);
290 build_SYS_str_reasons();
291 ERR_load_strings(ERR_LIB_SYS,SYS_str_reasons);
292 }
293#endif
294 }
295
diff --git a/src/lib/libcrypto/evp/dig_eng.c b/src/lib/libcrypto/evp/dig_eng.c
new file mode 100644
index 0000000000..64cdf9366c
--- /dev/null
+++ b/src/lib/libcrypto/evp/dig_eng.c
@@ -0,0 +1,180 @@
1/* crypto/evp/digest.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 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#include <stdio.h>
113#include "cryptlib.h"
114#include <openssl/objects.h>
115#include <openssl/evp.h>
116#ifndef OPENSSL_NO_ENGINE
117#include <openssl/engine.h>
118#endif
119#include "evp_locl.h"
120
121#ifndef OPENSSL_NO_ENGINE
122
123#ifdef OPENSSL_FIPS
124
125static int do_evp_md_engine_full(EVP_MD_CTX *ctx, const EVP_MD **ptype, ENGINE *impl)
126 {
127 if (*ptype)
128 {
129 /* Ensure an ENGINE left lying around from last time is cleared
130 * (the previous check attempted to avoid this if the same
131 * ENGINE and EVP_MD could be used). */
132 if(ctx->engine)
133 ENGINE_finish(ctx->engine);
134 if(impl)
135 {
136 if (!ENGINE_init(impl))
137 {
138 EVPerr(EVP_F_DO_EVP_MD_ENGINE_FULL,EVP_R_INITIALIZATION_ERROR);
139 return 0;
140 }
141 }
142 else
143 /* Ask if an ENGINE is reserved for this job */
144 impl = ENGINE_get_digest_engine((*ptype)->type);
145 if(impl)
146 {
147 /* There's an ENGINE for this job ... (apparently) */
148 const EVP_MD *d = ENGINE_get_digest(impl, (*ptype)->type);
149 if(!d)
150 {
151 /* Same comment from evp_enc.c */
152 EVPerr(EVP_F_DO_EVP_MD_ENGINE_FULL,EVP_R_INITIALIZATION_ERROR);
153 return 0;
154 }
155 /* We'll use the ENGINE's private digest definition */
156 *ptype = d;
157 /* Store the ENGINE functional reference so we know
158 * 'type' came from an ENGINE and we need to release
159 * it when done. */
160 ctx->engine = impl;
161 }
162 else
163 ctx->engine = NULL;
164 }
165 else
166 if(!ctx->digest)
167 {
168 EVPerr(EVP_F_DO_EVP_MD_ENGINE_FULL,EVP_R_NO_DIGEST_SET);
169 return 0;
170 }
171 return 1;
172 }
173
174void int_EVP_MD_init_engine_callbacks(void)
175 {
176 int_EVP_MD_set_engine_callbacks(
177 ENGINE_init, ENGINE_finish, do_evp_md_engine_full);
178 }
179#endif
180#endif
diff --git a/src/lib/libcrypto/evp/enc_min.c b/src/lib/libcrypto/evp/enc_min.c
new file mode 100644
index 0000000000..3cb4626bef
--- /dev/null
+++ b/src/lib/libcrypto/evp/enc_min.c
@@ -0,0 +1,390 @@
1/* crypto/evp/enc_min.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/evp.h>
62#include <openssl/err.h>
63#include <openssl/rand.h>
64#ifndef OPENSSL_NO_ENGINE
65#include <openssl/engine.h>
66#endif
67#include "evp_locl.h"
68
69void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx)
70 {
71#ifdef OPENSSL_FIPS
72 FIPS_selftest_check();
73#endif
74 memset(ctx,0,sizeof(EVP_CIPHER_CTX));
75 /* ctx->cipher=NULL; */
76 }
77
78#ifdef OPENSSL_FIPS
79
80/* The purpose of these is to trap programs that attempt to use non FIPS
81 * algorithms in FIPS mode and ignore the errors.
82 */
83
84static int bad_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
85 const unsigned char *iv, int enc)
86 { FIPS_ERROR_IGNORED("Cipher init"); return 0;}
87
88static int bad_do_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
89 const unsigned char *in, unsigned int inl)
90 { FIPS_ERROR_IGNORED("Cipher update"); return 0;}
91
92/* NB: no cleanup because it is allowed after failed init */
93
94static int bad_set_asn1(EVP_CIPHER_CTX *ctx, ASN1_TYPE *typ)
95 { FIPS_ERROR_IGNORED("Cipher set_asn1"); return 0;}
96static int bad_get_asn1(EVP_CIPHER_CTX *ctx, ASN1_TYPE *typ)
97 { FIPS_ERROR_IGNORED("Cipher get_asn1"); return 0;}
98static int bad_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
99 { FIPS_ERROR_IGNORED("Cipher ctrl"); return 0;}
100
101static const EVP_CIPHER bad_cipher =
102 {
103 0,
104 0,
105 0,
106 0,
107 0,
108 bad_init,
109 bad_do_cipher,
110 NULL,
111 0,
112 bad_set_asn1,
113 bad_get_asn1,
114 bad_ctrl,
115 NULL
116 };
117
118#endif
119
120#ifndef OPENSSL_NO_ENGINE
121
122#ifdef OPENSSL_FIPS
123
124static int do_engine_null(ENGINE *impl) { return 0;}
125static int do_evp_enc_engine_null(EVP_CIPHER_CTX *ctx,
126 const EVP_CIPHER **pciph, ENGINE *impl)
127 { return 1; }
128
129static int (*do_engine_finish)(ENGINE *impl)
130 = do_engine_null;
131
132static int (*do_evp_enc_engine)
133 (EVP_CIPHER_CTX *ctx, const EVP_CIPHER **pciph, ENGINE *impl)
134 = do_evp_enc_engine_null;
135
136void int_EVP_CIPHER_set_engine_callbacks(
137 int (*eng_ciph_fin)(ENGINE *impl),
138 int (*eng_ciph_evp)
139 (EVP_CIPHER_CTX *ctx, const EVP_CIPHER **pciph, ENGINE *impl))
140 {
141 do_engine_finish = eng_ciph_fin;
142 do_evp_enc_engine = eng_ciph_evp;
143 }
144
145#else
146
147#define do_engine_finish ENGINE_finish
148
149static int do_evp_enc_engine(EVP_CIPHER_CTX *ctx, const EVP_CIPHER **pcipher, ENGINE *impl)
150 {
151 if(impl)
152 {
153 if (!ENGINE_init(impl))
154 {
155 EVPerr(EVP_F_DO_EVP_ENC_ENGINE, EVP_R_INITIALIZATION_ERROR);
156 return 0;
157 }
158 }
159 else
160 /* Ask if an ENGINE is reserved for this job */
161 impl = ENGINE_get_cipher_engine((*pcipher)->nid);
162 if(impl)
163 {
164 /* There's an ENGINE for this job ... (apparently) */
165 const EVP_CIPHER *c = ENGINE_get_cipher(impl, (*pcipher)->nid);
166 if(!c)
167 {
168 /* One positive side-effect of US's export
169 * control history, is that we should at least
170 * be able to avoid using US mispellings of
171 * "initialisation"? */
172 EVPerr(EVP_F_DO_EVP_ENC_ENGINE, EVP_R_INITIALIZATION_ERROR);
173 return 0;
174 }
175 /* We'll use the ENGINE's private cipher definition */
176 *pcipher = c;
177 /* Store the ENGINE functional reference so we know
178 * 'cipher' came from an ENGINE and we need to release
179 * it when done. */
180 ctx->engine = impl;
181 }
182 else
183 ctx->engine = NULL;
184 return 1;
185 }
186
187#endif
188
189#endif
190
191int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl,
192 const unsigned char *key, const unsigned char *iv, int enc)
193 {
194 if (enc == -1)
195 enc = ctx->encrypt;
196 else
197 {
198 if (enc)
199 enc = 1;
200 ctx->encrypt = enc;
201 }
202#ifdef OPENSSL_NO_FIPS
203 if(FIPS_selftest_failed())
204 {
205 FIPSerr(FIPS_F_EVP_CIPHERINIT_EX,FIPS_R_FIPS_SELFTEST_FAILED);
206 ctx->cipher = &bad_cipher;
207 return 0;
208 }
209#endif
210#ifndef OPENSSL_NO_ENGINE
211 /* Whether it's nice or not, "Inits" can be used on "Final"'d contexts
212 * so this context may already have an ENGINE! Try to avoid releasing
213 * the previous handle, re-querying for an ENGINE, and having a
214 * reinitialisation, when it may all be unecessary. */
215 if (ctx->engine && ctx->cipher && (!cipher ||
216 (cipher && (cipher->nid == ctx->cipher->nid))))
217 goto skip_to_init;
218#endif
219 if (cipher)
220 {
221 /* Ensure a context left lying around from last time is cleared
222 * (the previous check attempted to avoid this if the same
223 * ENGINE and EVP_CIPHER could be used). */
224 EVP_CIPHER_CTX_cleanup(ctx);
225
226 /* Restore encrypt field: it is zeroed by cleanup */
227 ctx->encrypt = enc;
228#ifndef OPENSSL_NO_ENGINE
229 if (!do_evp_enc_engine(ctx, &cipher, impl))
230 return 0;
231#endif
232
233 ctx->cipher=cipher;
234 if (ctx->cipher->ctx_size)
235 {
236 ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size);
237 if (!ctx->cipher_data)
238 {
239 EVPerr(EVP_F_EVP_CIPHERINIT_EX, ERR_R_MALLOC_FAILURE);
240 return 0;
241 }
242 }
243 else
244 {
245 ctx->cipher_data = NULL;
246 }
247 ctx->key_len = cipher->key_len;
248 ctx->flags = 0;
249 if(ctx->cipher->flags & EVP_CIPH_CTRL_INIT)
250 {
251 if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_INIT, 0, NULL))
252 {
253 EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR);
254 return 0;
255 }
256 }
257 }
258 else if(!ctx->cipher)
259 {
260 EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_NO_CIPHER_SET);
261 return 0;
262 }
263#ifndef OPENSSL_NO_ENGINE
264skip_to_init:
265#endif
266 /* we assume block size is a power of 2 in *cryptUpdate */
267 OPENSSL_assert(ctx->cipher->block_size == 1
268 || ctx->cipher->block_size == 8
269 || ctx->cipher->block_size == 16);
270
271 if(!(EVP_CIPHER_CTX_flags(ctx) & EVP_CIPH_CUSTOM_IV)) {
272 switch(EVP_CIPHER_CTX_mode(ctx)) {
273
274 case EVP_CIPH_STREAM_CIPHER:
275 case EVP_CIPH_ECB_MODE:
276 break;
277
278 case EVP_CIPH_CFB_MODE:
279 case EVP_CIPH_OFB_MODE:
280
281 ctx->num = 0;
282
283 case EVP_CIPH_CBC_MODE:
284
285 OPENSSL_assert(EVP_CIPHER_CTX_iv_length(ctx) <=
286 (int)sizeof(ctx->iv));
287 if(iv) memcpy(ctx->oiv, iv, EVP_CIPHER_CTX_iv_length(ctx));
288 memcpy(ctx->iv, ctx->oiv, EVP_CIPHER_CTX_iv_length(ctx));
289 break;
290
291 default:
292 return 0;
293 break;
294 }
295 }
296
297#ifdef OPENSSL_FIPS
298 /* After 'key' is set no further parameters changes are permissible.
299 * So only check for non FIPS enabling at this point.
300 */
301 if (key && FIPS_mode())
302 {
303 if (!(ctx->cipher->flags & EVP_CIPH_FLAG_FIPS)
304 & !(ctx->flags & EVP_CIPH_FLAG_NON_FIPS_ALLOW))
305 {
306 EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_DISABLED_FOR_FIPS);
307#if 0
308 ERR_add_error_data(2, "cipher=",
309 EVP_CIPHER_name(ctx->cipher));
310#endif
311 ctx->cipher = &bad_cipher;
312 return 0;
313 }
314 }
315#endif
316
317 if(key || (ctx->cipher->flags & EVP_CIPH_ALWAYS_CALL_INIT)) {
318 if(!ctx->cipher->init(ctx,key,iv,enc)) return 0;
319 }
320 ctx->buf_len=0;
321 ctx->final_used=0;
322 ctx->block_mask=ctx->cipher->block_size-1;
323 return 1;
324 }
325
326int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
327 {
328 if (c->cipher != NULL)
329 {
330 if(c->cipher->cleanup && !c->cipher->cleanup(c))
331 return 0;
332 /* Cleanse cipher context data */
333 if (c->cipher_data)
334 OPENSSL_cleanse(c->cipher_data, c->cipher->ctx_size);
335 }
336 if (c->cipher_data)
337 OPENSSL_free(c->cipher_data);
338#ifndef OPENSSL_NO_ENGINE
339 if (c->engine)
340 /* The EVP_CIPHER we used belongs to an ENGINE, release the
341 * functional reference we held for this reason. */
342 do_engine_finish(c->engine);
343#endif
344 memset(c,0,sizeof(EVP_CIPHER_CTX));
345 return 1;
346 }
347
348int EVP_Cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl)
349 {
350#ifdef OPENSSL_FIPS
351 FIPS_selftest_check();
352#endif
353 return ctx->cipher->do_cipher(ctx,out,in,inl);
354 }
355
356int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
357{
358 int ret;
359 if(!ctx->cipher) {
360 EVPerr(EVP_F_EVP_CIPHER_CTX_CTRL, EVP_R_NO_CIPHER_SET);
361 return 0;
362 }
363
364 if(!ctx->cipher->ctrl) {
365 EVPerr(EVP_F_EVP_CIPHER_CTX_CTRL, EVP_R_CTRL_NOT_IMPLEMENTED);
366 return 0;
367 }
368
369 ret = ctx->cipher->ctrl(ctx, type, arg, ptr);
370 if(ret == -1) {
371 EVPerr(EVP_F_EVP_CIPHER_CTX_CTRL, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED);
372 return 0;
373 }
374 return ret;
375}
376
377unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx)
378 {
379 return ctx->cipher->flags;
380 }
381
382int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx)
383 {
384 return ctx->cipher->iv_len;
385 }
386
387int EVP_CIPHER_nid(const EVP_CIPHER *cipher)
388 {
389 return cipher->nid;
390 }
diff --git a/src/lib/libcrypto/evp/evp_cnf.c b/src/lib/libcrypto/evp/evp_cnf.c
new file mode 100644
index 0000000000..2e4db30235
--- /dev/null
+++ b/src/lib/libcrypto/evp/evp_cnf.c
@@ -0,0 +1,125 @@
1/* evp_cnf.c */
2/* Written by Stephen Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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#include <ctype.h>
61#include <openssl/crypto.h>
62#include "cryptlib.h"
63#include <openssl/conf.h>
64#include <openssl/dso.h>
65#include <openssl/x509.h>
66#include <openssl/x509v3.h>
67#ifdef OPENSSL_FIPS
68#include <openssl/fips.h>
69#endif
70
71
72/* Algorithm configuration module. */
73
74static int alg_module_init(CONF_IMODULE *md, const CONF *cnf)
75 {
76 int i;
77 const char *oid_section;
78 STACK_OF(CONF_VALUE) *sktmp;
79 CONF_VALUE *oval;
80 oid_section = CONF_imodule_get_value(md);
81 if(!(sktmp = NCONF_get_section(cnf, oid_section)))
82 {
83 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_ERROR_LOADING_SECTION);
84 return 0;
85 }
86 for(i = 0; i < sk_CONF_VALUE_num(sktmp); i++)
87 {
88 oval = sk_CONF_VALUE_value(sktmp, i);
89 if (!strcmp(oval->name, "fips_mode"))
90 {
91 int m;
92 if (!X509V3_get_value_bool(oval, &m))
93 {
94 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_INVALID_FIPS_MODE);
95 return 0;
96 }
97 if (m > 0)
98 {
99#ifdef OPENSSL_FIPS
100 if (!FIPS_mode() && !FIPS_mode_set(1))
101 {
102 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_ERROR_SETTING_FIPS_MODE);
103 return 0;
104 }
105#else
106 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_FIPS_MODE_NOT_SUPPORTED);
107 return 0;
108#endif
109 }
110 }
111 else
112 {
113 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_UNKNOWN_OPTION);
114 ERR_add_error_data(4, "name=", oval->name,
115 ", value=", oval->value);
116 }
117
118 }
119 return 1;
120 }
121
122void EVP_add_alg_module(void)
123 {
124 CONF_module_add("alg_section", alg_module_init, 0);
125 }
diff --git a/src/lib/libcrypto/fips_err.c b/src/lib/libcrypto/fips_err.c
new file mode 100644
index 0000000000..09f11748f6
--- /dev/null
+++ b/src/lib/libcrypto/fips_err.c
@@ -0,0 +1,7 @@
1#include <openssl/opensslconf.h>
2
3#ifdef OPENSSL_FIPS
4# include "fips_err.h"
5#else
6static void *dummy=&dummy;
7#endif
diff --git a/src/lib/libcrypto/hmac/Makefile b/src/lib/libcrypto/hmac/Makefile
index 01f10c396f..5cfa37d99c 100644
--- a/src/lib/libcrypto/hmac/Makefile
+++ b/src/lib/libcrypto/hmac/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -77,9 +77,10 @@ clean:
77hmac.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 77hmac.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
78hmac.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 78hmac.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
79hmac.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 79hmac.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
80hmac.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h 80hmac.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
81hmac.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 81hmac.o: ../../include/openssl/hmac.h ../../include/openssl/lhash.h
82hmac.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 82hmac.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
83hmac.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 83hmac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
84hmac.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 84hmac.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
85hmac.o: ../../include/openssl/symhacks.h ../cryptlib.h hmac.c 85hmac.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
86hmac.o: ../cryptlib.h hmac.c
diff --git a/src/lib/libcrypto/idea/Makefile b/src/lib/libcrypto/idea/Makefile
index b2e7add666..55c0d4dbff 100644
--- a/src/lib/libcrypto/idea/Makefile
+++ b/src/lib/libcrypto/idea/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -82,5 +82,9 @@ i_ecb.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h
82i_ecb.o: ../../include/openssl/opensslv.h i_ecb.c idea_lcl.h 82i_ecb.o: ../../include/openssl/opensslv.h i_ecb.c idea_lcl.h
83i_ofb64.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h 83i_ofb64.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h
84i_ofb64.o: i_ofb64.c idea_lcl.h 84i_ofb64.o: i_ofb64.c idea_lcl.h
85i_skey.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h 85i_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
86i_skey.o: ../../include/openssl/fips.h ../../include/openssl/idea.h
87i_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
88i_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
89i_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
86i_skey.o: i_skey.c idea_lcl.h 90i_skey.o: i_skey.c idea_lcl.h
diff --git a/src/lib/libcrypto/krb5/Makefile b/src/lib/libcrypto/krb5/Makefile
index 14077390d6..8efb9e8910 100644
--- a/src/lib/libcrypto/krb5/Makefile
+++ b/src/lib/libcrypto/krb5/Makefile
@@ -34,7 +34,7 @@ top:
34all: lib 34all: lib
35 35
36lib: $(LIBOBJ) 36lib: $(LIBOBJ)
37 $(AR) $(LIB) $(LIBOBJ) 37 $(ARX) $(LIB) $(LIBOBJ)
38 $(RANLIB) $(LIB) || echo Never mind. 38 $(RANLIB) $(LIB) || echo Never mind.
39 @touch lib 39 @touch lib
40 40
diff --git a/src/lib/libcrypto/lhash/Makefile b/src/lib/libcrypto/lhash/Makefile
index 82bddac474..35f0932971 100644
--- a/src/lib/libcrypto/lhash/Makefile
+++ b/src/lib/libcrypto/lhash/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
diff --git a/src/lib/libcrypto/md2/Makefile b/src/lib/libcrypto/md2/Makefile
index 17f878aeb7..7f43321ab2 100644
--- a/src/lib/libcrypto/md2/Makefile
+++ b/src/lib/libcrypto/md2/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -74,7 +74,9 @@ clean:
74 74
75# DO NOT DELETE THIS LINE -- make depend depends on it. 75# DO NOT DELETE THIS LINE -- make depend depends on it.
76 76
77md2_dgst.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 77md2_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
78md2_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
79md2_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
78md2_dgst.o: ../../include/openssl/md2.h ../../include/openssl/opensslconf.h 80md2_dgst.o: ../../include/openssl/md2.h ../../include/openssl/opensslconf.h
79md2_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 81md2_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
80md2_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 82md2_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
diff --git a/src/lib/libcrypto/md4/Makefile b/src/lib/libcrypto/md4/Makefile
index ef97bb0cbe..0bc4896585 100644
--- a/src/lib/libcrypto/md4/Makefile
+++ b/src/lib/libcrypto/md4/Makefile
@@ -34,7 +34,7 @@ top:
34all: lib 34all: lib
35 35
36lib: $(LIBOBJ) 36lib: $(LIBOBJ)
37 $(AR) $(LIB) $(LIBOBJ) 37 $(ARX) $(LIB) $(LIBOBJ)
38 $(RANLIB) $(LIB) || echo Never mind. 38 $(RANLIB) $(LIB) || echo Never mind.
39 @touch lib 39 @touch lib
40 40
@@ -75,9 +75,13 @@ clean:
75 75
76# DO NOT DELETE THIS LINE -- make depend depends on it. 76# DO NOT DELETE THIS LINE -- make depend depends on it.
77 77
78md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md4.h 78md4_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
79md4_dgst.o: ../../include/openssl/opensslconf.h 79md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
80md4_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md4_dgst.c 80md4_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
81md4_dgst.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
82md4_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
83md4_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
84md4_dgst.o: ../../include/openssl/symhacks.h ../md32_common.h md4_dgst.c
81md4_dgst.o: md4_locl.h 85md4_dgst.o: md4_locl.h
82md4_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 86md4_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
83md4_one.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h 87md4_one.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
diff --git a/src/lib/libcrypto/md5/Makefile b/src/lib/libcrypto/md5/Makefile
index ceb00e8956..3c450fcfc0 100644
--- a/src/lib/libcrypto/md5/Makefile
+++ b/src/lib/libcrypto/md5/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -91,9 +91,13 @@ clean:
91 91
92# DO NOT DELETE THIS LINE -- make depend depends on it. 92# DO NOT DELETE THIS LINE -- make depend depends on it.
93 93
94md5_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md5.h 94md5_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
95md5_dgst.o: ../../include/openssl/opensslconf.h 95md5_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
96md5_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md5_dgst.c 96md5_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
97md5_dgst.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h
98md5_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
99md5_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
100md5_dgst.o: ../../include/openssl/symhacks.h ../md32_common.h md5_dgst.c
97md5_dgst.o: md5_locl.h 101md5_dgst.o: md5_locl.h
98md5_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 102md5_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
99md5_one.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h 103md5_one.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h
diff --git a/src/lib/libcrypto/objects/Makefile b/src/lib/libcrypto/objects/Makefile
index 9c5615099c..25e8b23b5d 100644
--- a/src/lib/libcrypto/objects/Makefile
+++ b/src/lib/libcrypto/objects/Makefile
@@ -34,7 +34,7 @@ top:
34all: obj_dat.h lib 34all: obj_dat.h lib
35 35
36lib: $(LIBOBJ) 36lib: $(LIBOBJ)
37 $(AR) $(LIB) $(LIBOBJ) 37 $(ARX) $(LIB) $(LIBOBJ)
38 $(RANLIB) $(LIB) || echo Never mind. 38 $(RANLIB) $(LIB) || echo Never mind.
39 @touch lib 39 @touch lib
40 40
diff --git a/src/lib/libcrypto/ocsp/Makefile b/src/lib/libcrypto/ocsp/Makefile
index 0fe028960e..30a00b3372 100644
--- a/src/lib/libcrypto/ocsp/Makefile
+++ b/src/lib/libcrypto/ocsp/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
@@ -82,9 +82,10 @@ ocsp_asn.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
82ocsp_asn.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 82ocsp_asn.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
83ocsp_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 83ocsp_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
84ocsp_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 84ocsp_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
85ocsp_asn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 85ocsp_asn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
86ocsp_asn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 86ocsp_asn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
87ocsp_asn.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 87ocsp_asn.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
88ocsp_asn.o: ../../include/openssl/opensslconf.h
88ocsp_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 89ocsp_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
89ocsp_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 90ocsp_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
90ocsp_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 91ocsp_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -97,24 +98,25 @@ ocsp_cl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
97ocsp_cl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 98ocsp_cl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
98ocsp_cl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 99ocsp_cl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
99ocsp_cl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 100ocsp_cl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
100ocsp_cl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 101ocsp_cl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
101ocsp_cl.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 102ocsp_cl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
102ocsp_cl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 103ocsp_cl.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
103ocsp_cl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 104ocsp_cl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
104ocsp_cl.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 105ocsp_cl.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
105ocsp_cl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 106ocsp_cl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
106ocsp_cl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 107ocsp_cl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
107ocsp_cl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 108ocsp_cl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
108ocsp_cl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 109ocsp_cl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
109ocsp_cl.o: ../cryptlib.h ocsp_cl.c 110ocsp_cl.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_cl.c
110ocsp_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 111ocsp_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
111ocsp_err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 112ocsp_err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
112ocsp_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 113ocsp_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
113ocsp_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 114ocsp_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
114ocsp_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 115ocsp_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
115ocsp_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 116ocsp_err.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
116ocsp_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 117ocsp_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
117ocsp_err.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 118ocsp_err.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
119ocsp_err.o: ../../include/openssl/opensslconf.h
118ocsp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 120ocsp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
119ocsp_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 121ocsp_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
120ocsp_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 122ocsp_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -127,21 +129,22 @@ ocsp_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
127ocsp_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 129ocsp_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
128ocsp_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 130ocsp_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
129ocsp_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h 131ocsp_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h
130ocsp_ext.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 132ocsp_ext.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
131ocsp_ext.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 133ocsp_ext.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
132ocsp_ext.o: ../../include/openssl/opensslconf.h 134ocsp_ext.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
133ocsp_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 135ocsp_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
134ocsp_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 136ocsp_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
135ocsp_ext.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 137ocsp_ext.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
136ocsp_ext.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 138ocsp_ext.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
137ocsp_ext.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 139ocsp_ext.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
138ocsp_ext.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_ext.c 140ocsp_ext.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_ext.c
139ocsp_ht.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 141ocsp_ht.o: ../../e_os.h ../../include/openssl/asn1.h
140ocsp_ht.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 142ocsp_ht.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
141ocsp_ht.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 143ocsp_ht.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
142ocsp_ht.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 144ocsp_ht.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
143ocsp_ht.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 145ocsp_ht.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
144ocsp_ht.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 146ocsp_ht.o: ../../include/openssl/err.h ../../include/openssl/evp.h
147ocsp_ht.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
145ocsp_ht.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 148ocsp_ht.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
146ocsp_ht.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 149ocsp_ht.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
147ocsp_ht.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 150ocsp_ht.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
@@ -156,9 +159,9 @@ ocsp_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
156ocsp_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 159ocsp_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
157ocsp_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 160ocsp_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
158ocsp_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 161ocsp_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
159ocsp_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 162ocsp_lib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
160ocsp_lib.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 163ocsp_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
161ocsp_lib.o: ../../include/openssl/opensslconf.h 164ocsp_lib.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
162ocsp_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 165ocsp_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
163ocsp_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 166ocsp_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
164ocsp_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 167ocsp_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -171,9 +174,10 @@ ocsp_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
171ocsp_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 174ocsp_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
172ocsp_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 175ocsp_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
173ocsp_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 176ocsp_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
174ocsp_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 177ocsp_prn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
175ocsp_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 178ocsp_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
176ocsp_prn.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 179ocsp_prn.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
180ocsp_prn.o: ../../include/openssl/opensslconf.h
177ocsp_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 181ocsp_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
178ocsp_prn.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 182ocsp_prn.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
179ocsp_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 183ocsp_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -187,9 +191,9 @@ ocsp_srv.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
187ocsp_srv.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 191ocsp_srv.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
188ocsp_srv.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 192ocsp_srv.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
189ocsp_srv.o: ../../include/openssl/err.h ../../include/openssl/evp.h 193ocsp_srv.o: ../../include/openssl/err.h ../../include/openssl/evp.h
190ocsp_srv.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 194ocsp_srv.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
191ocsp_srv.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 195ocsp_srv.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
192ocsp_srv.o: ../../include/openssl/opensslconf.h 196ocsp_srv.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
193ocsp_srv.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 197ocsp_srv.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
194ocsp_srv.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 198ocsp_srv.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
195ocsp_srv.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 199ocsp_srv.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -202,9 +206,10 @@ ocsp_vfy.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
202ocsp_vfy.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 206ocsp_vfy.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
203ocsp_vfy.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 207ocsp_vfy.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
204ocsp_vfy.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 208ocsp_vfy.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
205ocsp_vfy.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 209ocsp_vfy.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
206ocsp_vfy.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 210ocsp_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
207ocsp_vfy.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 211ocsp_vfy.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
212ocsp_vfy.o: ../../include/openssl/opensslconf.h
208ocsp_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 213ocsp_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
209ocsp_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 214ocsp_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
210ocsp_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 215ocsp_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
diff --git a/src/lib/libcrypto/pem/Makefile b/src/lib/libcrypto/pem/Makefile
index 742194fd24..669f36612c 100644
--- a/src/lib/libcrypto/pem/Makefile
+++ b/src/lib/libcrypto/pem/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
@@ -83,36 +83,39 @@ pem_all.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
83pem_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 83pem_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
84pem_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 84pem_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
85pem_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 85pem_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
86pem_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 86pem_all.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
87pem_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 87pem_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
88pem_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 88pem_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
89pem_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 89pem_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
90pem_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 90pem_all.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
91pem_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 91pem_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
92pem_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 92pem_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
93pem_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 93pem_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
94pem_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_all.c 94pem_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
95pem_all.o: ../cryptlib.h pem_all.c
95pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 96pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
96pem_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 97pem_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
97pem_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 98pem_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
98pem_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 99pem_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
99pem_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h 100pem_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
100pem_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 101pem_err.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
101pem_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 102pem_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
102pem_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 103pem_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
103pem_err.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 104pem_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
104pem_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 105pem_err.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
105pem_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 106pem_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
106pem_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 107pem_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
107pem_err.o: ../../include/openssl/x509_vfy.h pem_err.c 108pem_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
109pem_err.o: pem_err.c
108pem_info.o: ../../e_os.h ../../include/openssl/asn1.h 110pem_info.o: ../../e_os.h ../../include/openssl/asn1.h
109pem_info.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 111pem_info.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
110pem_info.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 112pem_info.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
111pem_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 113pem_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
112pem_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 114pem_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
113pem_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h 115pem_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
114pem_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 116pem_info.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
115pem_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 117pem_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
118pem_info.o: ../../include/openssl/opensslconf.h
116pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 119pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
117pem_info.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 120pem_info.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
118pem_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h 121pem_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
@@ -126,54 +129,55 @@ pem_lib.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
126pem_lib.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h 129pem_lib.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
127pem_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 130pem_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
128pem_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 131pem_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
129pem_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 132pem_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
130pem_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 133pem_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
131pem_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 134pem_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
132pem_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 135pem_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
133pem_lib.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h 136pem_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
134pem_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 137pem_lib.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
135pem_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 138pem_lib.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
136pem_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 139pem_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
137pem_lib.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 140pem_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
138pem_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 141pem_lib.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h
139pem_lib.o: ../cryptlib.h pem_lib.c 142pem_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_lib.c
140pem_oth.o: ../../e_os.h ../../include/openssl/asn1.h 143pem_oth.o: ../../e_os.h ../../include/openssl/asn1.h
141pem_oth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 144pem_oth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
142pem_oth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 145pem_oth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
143pem_oth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 146pem_oth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
144pem_oth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 147pem_oth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
145pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 148pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
146pem_oth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 149pem_oth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
147pem_oth.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 150pem_oth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
148pem_oth.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 151pem_oth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
149pem_oth.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 152pem_oth.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
150pem_oth.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 153pem_oth.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
151pem_oth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 154pem_oth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
152pem_oth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 155pem_oth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
153pem_oth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_oth.c 156pem_oth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
157pem_oth.o: ../cryptlib.h pem_oth.c
154pem_pk8.o: ../../e_os.h ../../include/openssl/asn1.h 158pem_pk8.o: ../../e_os.h ../../include/openssl/asn1.h
155pem_pk8.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 159pem_pk8.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
156pem_pk8.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 160pem_pk8.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
157pem_pk8.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 161pem_pk8.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
158pem_pk8.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 162pem_pk8.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
159pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 163pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
160pem_pk8.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 164pem_pk8.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
161pem_pk8.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 165pem_pk8.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
162pem_pk8.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 166pem_pk8.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
163pem_pk8.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h 167pem_pk8.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
164pem_pk8.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 168pem_pk8.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
165pem_pk8.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 169pem_pk8.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
166pem_pk8.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 170pem_pk8.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
167pem_pk8.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 171pem_pk8.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
168pem_pk8.o: ../cryptlib.h pem_pk8.c 172pem_pk8.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_pk8.c
169pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h 173pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
170pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 174pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
171pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 175pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
172pem_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 176pem_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
173pem_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 177pem_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
174pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 178pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
175pem_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 179pem_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
176pem_pkey.o: ../../include/openssl/opensslconf.h 180pem_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
177pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 181pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
178pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 182pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
179pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 183pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
@@ -186,9 +190,9 @@ pem_seal.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
186pem_seal.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 190pem_seal.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
187pem_seal.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 191pem_seal.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
188pem_seal.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 192pem_seal.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
189pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 193pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
190pem_seal.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 194pem_seal.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
191pem_seal.o: ../../include/openssl/opensslconf.h 195pem_seal.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
192pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 196pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
193pem_seal.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 197pem_seal.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
194pem_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 198pem_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -201,9 +205,9 @@ pem_sign.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
201pem_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 205pem_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
202pem_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 206pem_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
203pem_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 207pem_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
204pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 208pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
205pem_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 209pem_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
206pem_sign.o: ../../include/openssl/opensslconf.h 210pem_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
207pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 211pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
208pem_sign.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 212pem_sign.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
209pem_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 213pem_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -216,9 +220,9 @@ pem_x509.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
216pem_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 220pem_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
217pem_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 221pem_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
218pem_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 222pem_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
219pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 223pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
220pem_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 224pem_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
221pem_x509.o: ../../include/openssl/opensslconf.h 225pem_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
222pem_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 226pem_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
223pem_x509.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 227pem_x509.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
224pem_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 228pem_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -230,9 +234,9 @@ pem_xaux.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
230pem_xaux.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 234pem_xaux.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
231pem_xaux.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 235pem_xaux.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
232pem_xaux.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 236pem_xaux.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
233pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 237pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
234pem_xaux.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 238pem_xaux.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
235pem_xaux.o: ../../include/openssl/opensslconf.h 239pem_xaux.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
236pem_xaux.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 240pem_xaux.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
237pem_xaux.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 241pem_xaux.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
238pem_xaux.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 242pem_xaux.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
diff --git a/src/lib/libcrypto/pkcs12/Makefile b/src/lib/libcrypto/pkcs12/Makefile
index 3a7498fe7a..eed226b30d 100644
--- a/src/lib/libcrypto/pkcs12/Makefile
+++ b/src/lib/libcrypto/pkcs12/Makefile
@@ -39,7 +39,7 @@ test:
39all: lib 39all: lib
40 40
41lib: $(LIBOBJ) 41lib: $(LIBOBJ)
42 $(AR) $(LIB) $(LIBOBJ) 42 $(ARX) $(LIB) $(LIBOBJ)
43 $(RANLIB) $(LIB) || echo Never mind. 43 $(RANLIB) $(LIB) || echo Never mind.
44 @touch lib 44 @touch lib
45 45
@@ -85,36 +85,37 @@ p12_add.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
85p12_add.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 85p12_add.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
86p12_add.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 86p12_add.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
87p12_add.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 87p12_add.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
88p12_add.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 88p12_add.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
89p12_add.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 89p12_add.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
90p12_add.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 90p12_add.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
91p12_add.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 91p12_add.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
92p12_add.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 92p12_add.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
93p12_add.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 93p12_add.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
94p12_add.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 94p12_add.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
95p12_add.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_add.c 95p12_add.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
96p12_add.o: ../cryptlib.h p12_add.c
96p12_asn.o: ../../e_os.h ../../include/openssl/asn1.h 97p12_asn.o: ../../e_os.h ../../include/openssl/asn1.h
97p12_asn.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 98p12_asn.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
98p12_asn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 99p12_asn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
99p12_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 100p12_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
100p12_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 101p12_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
101p12_asn.o: ../../include/openssl/err.h ../../include/openssl/evp.h 102p12_asn.o: ../../include/openssl/err.h ../../include/openssl/evp.h
102p12_asn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 103p12_asn.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
103p12_asn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 104p12_asn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
104p12_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 105p12_asn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
105p12_asn.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 106p12_asn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h
106p12_asn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 107p12_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
107p12_asn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 108p12_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
108p12_asn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 109p12_asn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
109p12_asn.o: ../cryptlib.h p12_asn.c 110p12_asn.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_asn.c
110p12_attr.o: ../../e_os.h ../../include/openssl/asn1.h 111p12_attr.o: ../../e_os.h ../../include/openssl/asn1.h
111p12_attr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 112p12_attr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
112p12_attr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 113p12_attr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
113p12_attr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 114p12_attr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
114p12_attr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 115p12_attr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
115p12_attr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 116p12_attr.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
116p12_attr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 117p12_attr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
117p12_attr.o: ../../include/openssl/opensslconf.h 118p12_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
118p12_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 119p12_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
119p12_attr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 120p12_attr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
120p12_attr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 121p12_attr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -126,9 +127,9 @@ p12_crpt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
126p12_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 127p12_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
127p12_crpt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 128p12_crpt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
128p12_crpt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 129p12_crpt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
129p12_crpt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 130p12_crpt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
130p12_crpt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 131p12_crpt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
131p12_crpt.o: ../../include/openssl/opensslconf.h 132p12_crpt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
132p12_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 133p12_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
133p12_crpt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 134p12_crpt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
134p12_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 135p12_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -140,22 +141,23 @@ p12_crt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
140p12_crt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 141p12_crt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
141p12_crt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 142p12_crt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
142p12_crt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 143p12_crt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
143p12_crt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 144p12_crt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
144p12_crt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 145p12_crt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
145p12_crt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 146p12_crt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
146p12_crt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 147p12_crt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
147p12_crt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 148p12_crt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
148p12_crt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 149p12_crt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
149p12_crt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 150p12_crt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
150p12_crt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_crt.c 151p12_crt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
152p12_crt.o: ../cryptlib.h p12_crt.c
151p12_decr.o: ../../e_os.h ../../include/openssl/asn1.h 153p12_decr.o: ../../e_os.h ../../include/openssl/asn1.h
152p12_decr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 154p12_decr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
153p12_decr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 155p12_decr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
154p12_decr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 156p12_decr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
155p12_decr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 157p12_decr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
156p12_decr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 158p12_decr.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
157p12_decr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 159p12_decr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
158p12_decr.o: ../../include/openssl/opensslconf.h 160p12_decr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
159p12_decr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 161p12_decr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
160p12_decr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 162p12_decr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
161p12_decr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 163p12_decr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -167,9 +169,9 @@ p12_init.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
167p12_init.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 169p12_init.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
168p12_init.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 170p12_init.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
169p12_init.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 171p12_init.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
170p12_init.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 172p12_init.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
171p12_init.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 173p12_init.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
172p12_init.o: ../../include/openssl/opensslconf.h 174p12_init.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
173p12_init.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 175p12_init.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
174p12_init.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 176p12_init.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
175p12_init.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 177p12_init.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -182,22 +184,22 @@ p12_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
182p12_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 184p12_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
183p12_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 185p12_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
184p12_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h 186p12_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h
185p12_key.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 187p12_key.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
186p12_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 188p12_key.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
187p12_key.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 189p12_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
188p12_key.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 190p12_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h
189p12_key.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 191p12_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
190p12_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 192p12_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
191p12_key.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 193p12_key.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
192p12_key.o: ../cryptlib.h p12_key.c 194p12_key.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_key.c
193p12_kiss.o: ../../e_os.h ../../include/openssl/asn1.h 195p12_kiss.o: ../../e_os.h ../../include/openssl/asn1.h
194p12_kiss.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 196p12_kiss.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
195p12_kiss.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 197p12_kiss.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
196p12_kiss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 198p12_kiss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
197p12_kiss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 199p12_kiss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
198p12_kiss.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 200p12_kiss.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
199p12_kiss.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 201p12_kiss.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
200p12_kiss.o: ../../include/openssl/opensslconf.h 202p12_kiss.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
201p12_kiss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 203p12_kiss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
202p12_kiss.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 204p12_kiss.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
203p12_kiss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 205p12_kiss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -209,9 +211,10 @@ p12_mutl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
209p12_mutl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 211p12_mutl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
210p12_mutl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 212p12_mutl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
211p12_mutl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 213p12_mutl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
212p12_mutl.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h 214p12_mutl.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
213p12_mutl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 215p12_mutl.o: ../../include/openssl/hmac.h ../../include/openssl/lhash.h
214p12_mutl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 216p12_mutl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
217p12_mutl.o: ../../include/openssl/opensslconf.h
215p12_mutl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 218p12_mutl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
216p12_mutl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 219p12_mutl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
217p12_mutl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 220p12_mutl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
@@ -223,8 +226,9 @@ p12_npas.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
223p12_npas.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 226p12_npas.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
224p12_npas.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 227p12_npas.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
225p12_npas.o: ../../include/openssl/err.h ../../include/openssl/evp.h 228p12_npas.o: ../../include/openssl/err.h ../../include/openssl/evp.h
226p12_npas.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 229p12_npas.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
227p12_npas.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 230p12_npas.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
231p12_npas.o: ../../include/openssl/opensslconf.h
228p12_npas.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 232p12_npas.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
229p12_npas.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 233p12_npas.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
230p12_npas.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 234p12_npas.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
@@ -237,50 +241,53 @@ p12_p8d.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
237p12_p8d.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 241p12_p8d.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
238p12_p8d.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 242p12_p8d.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
239p12_p8d.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 243p12_p8d.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
240p12_p8d.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 244p12_p8d.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
241p12_p8d.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 245p12_p8d.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
242p12_p8d.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 246p12_p8d.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
243p12_p8d.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 247p12_p8d.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
244p12_p8d.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 248p12_p8d.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
245p12_p8d.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 249p12_p8d.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
246p12_p8d.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 250p12_p8d.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
247p12_p8d.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_p8d.c 251p12_p8d.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
252p12_p8d.o: ../cryptlib.h p12_p8d.c
248p12_p8e.o: ../../e_os.h ../../include/openssl/asn1.h 253p12_p8e.o: ../../e_os.h ../../include/openssl/asn1.h
249p12_p8e.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 254p12_p8e.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
250p12_p8e.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 255p12_p8e.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
251p12_p8e.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 256p12_p8e.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
252p12_p8e.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 257p12_p8e.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
253p12_p8e.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 258p12_p8e.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
254p12_p8e.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 259p12_p8e.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
255p12_p8e.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 260p12_p8e.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
256p12_p8e.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 261p12_p8e.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
257p12_p8e.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 262p12_p8e.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
258p12_p8e.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 263p12_p8e.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
259p12_p8e.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 264p12_p8e.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
260p12_p8e.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_p8e.c 265p12_p8e.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
266p12_p8e.o: ../cryptlib.h p12_p8e.c
261p12_utl.o: ../../e_os.h ../../include/openssl/asn1.h 267p12_utl.o: ../../e_os.h ../../include/openssl/asn1.h
262p12_utl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 268p12_utl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
263p12_utl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 269p12_utl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
264p12_utl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 270p12_utl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
265p12_utl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 271p12_utl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
266p12_utl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 272p12_utl.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
267p12_utl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 273p12_utl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
268p12_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 274p12_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
269p12_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 275p12_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
270p12_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 276p12_utl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
271p12_utl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 277p12_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
272p12_utl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 278p12_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
273p12_utl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_utl.c 279p12_utl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
280p12_utl.o: ../cryptlib.h p12_utl.c
274pk12err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 281pk12err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
275pk12err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 282pk12err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
276pk12err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 283pk12err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
277pk12err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 284pk12err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
278pk12err.o: ../../include/openssl/err.h ../../include/openssl/evp.h 285pk12err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
279pk12err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 286pk12err.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
280pk12err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 287pk12err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
281pk12err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 288pk12err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
282pk12err.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 289pk12err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h
283pk12err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 290pk12err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
284pk12err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 291pk12err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
285pk12err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 292pk12err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
286pk12err.o: pk12err.c 293pk12err.o: ../../include/openssl/x509_vfy.h pk12err.c
diff --git a/src/lib/libcrypto/pkcs7/Makefile b/src/lib/libcrypto/pkcs7/Makefile
index 3f7e88b40f..790d8edf36 100644
--- a/src/lib/libcrypto/pkcs7/Makefile
+++ b/src/lib/libcrypto/pkcs7/Makefile
@@ -54,7 +54,7 @@ verify: verify.o example.o lib
54 $(CC) $(CFLAGS) -o verify verify.o $(PEX_LIBS) example.o $(LIB) $(EX_LIBS) 54 $(CC) $(CFLAGS) -o verify verify.o $(PEX_LIBS) example.o $(LIB) $(EX_LIBS)
55 55
56lib: $(LIBOBJ) 56lib: $(LIBOBJ)
57 $(AR) $(LIB) $(LIBOBJ) 57 $(ARX) $(LIB) $(LIBOBJ)
58 $(RANLIB) $(LIB) || echo Never mind. 58 $(RANLIB) $(LIB) || echo Never mind.
59 @touch lib 59 @touch lib
60 60
@@ -101,8 +101,9 @@ pk7_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
101pk7_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 101pk7_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
102pk7_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 102pk7_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
103pk7_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h 103pk7_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h
104pk7_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 104pk7_asn1.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
105pk7_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 105pk7_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
106pk7_asn1.o: ../../include/openssl/opensslconf.h
106pk7_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 107pk7_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
107pk7_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 108pk7_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
108pk7_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 109pk7_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -113,8 +114,9 @@ pk7_attr.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
113pk7_attr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 114pk7_attr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
114pk7_attr.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 115pk7_attr.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
115pk7_attr.o: ../../include/openssl/err.h ../../include/openssl/evp.h 116pk7_attr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
116pk7_attr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 117pk7_attr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
117pk7_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 118pk7_attr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
119pk7_attr.o: ../../include/openssl/opensslconf.h
118pk7_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 120pk7_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
119pk7_attr.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 121pk7_attr.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
120pk7_attr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 122pk7_attr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -127,8 +129,9 @@ pk7_doit.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
127pk7_doit.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 129pk7_doit.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
128pk7_doit.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 130pk7_doit.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
129pk7_doit.o: ../../include/openssl/err.h ../../include/openssl/evp.h 131pk7_doit.o: ../../include/openssl/err.h ../../include/openssl/evp.h
130pk7_doit.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 132pk7_doit.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
131pk7_doit.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 133pk7_doit.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
134pk7_doit.o: ../../include/openssl/opensslconf.h
132pk7_doit.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 135pk7_doit.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
133pk7_doit.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 136pk7_doit.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
134pk7_doit.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 137pk7_doit.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -140,22 +143,22 @@ pk7_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
140pk7_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 143pk7_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
141pk7_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 144pk7_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
142pk7_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 145pk7_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
143pk7_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 146pk7_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
144pk7_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 147pk7_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
145pk7_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 148pk7_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
146pk7_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 149pk7_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
147pk7_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 150pk7_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
148pk7_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 151pk7_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
149pk7_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 152pk7_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
150pk7_lib.o: ../cryptlib.h pk7_lib.c 153pk7_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pk7_lib.c
151pk7_mime.o: ../../e_os.h ../../include/openssl/asn1.h 154pk7_mime.o: ../../e_os.h ../../include/openssl/asn1.h
152pk7_mime.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 155pk7_mime.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
153pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 156pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
154pk7_mime.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 157pk7_mime.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
155pk7_mime.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 158pk7_mime.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
156pk7_mime.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 159pk7_mime.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
157pk7_mime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 160pk7_mime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
158pk7_mime.o: ../../include/openssl/opensslconf.h 161pk7_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
159pk7_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 162pk7_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
160pk7_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 163pk7_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
161pk7_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 164pk7_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -168,8 +171,8 @@ pk7_smime.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
168pk7_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 171pk7_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
169pk7_smime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 172pk7_smime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
170pk7_smime.o: ../../include/openssl/err.h ../../include/openssl/evp.h 173pk7_smime.o: ../../include/openssl/err.h ../../include/openssl/evp.h
171pk7_smime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 174pk7_smime.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
172pk7_smime.o: ../../include/openssl/objects.h 175pk7_smime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
173pk7_smime.o: ../../include/openssl/opensslconf.h 176pk7_smime.o: ../../include/openssl/opensslconf.h
174pk7_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 177pk7_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
175pk7_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 178pk7_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
diff --git a/src/lib/libcrypto/pqueue/pq_compat.h b/src/lib/libcrypto/pqueue/pq_compat.h
index fd36578882..7b2c32725c 100644
--- a/src/lib/libcrypto/pqueue/pq_compat.h
+++ b/src/lib/libcrypto/pqueue/pq_compat.h
@@ -57,6 +57,9 @@
57 * 57 *
58 */ 58 */
59 59
60#ifndef HEADER_PQ_COMPAT_H
61#define HEADER_PQ_COMPAT_H
62
60#include <openssl/opensslconf.h> 63#include <openssl/opensslconf.h>
61#include <openssl/bn.h> 64#include <openssl/bn.h>
62 65
@@ -145,3 +148,5 @@
145 *(x) |= mask; \ 148 *(x) |= mask; \
146 } while(0) 149 } while(0)
147#endif /* OPENSSL_SYS_VMS */ 150#endif /* OPENSSL_SYS_VMS */
151
152#endif
diff --git a/src/lib/libcrypto/rand/rand_eng.c b/src/lib/libcrypto/rand/rand_eng.c
new file mode 100644
index 0000000000..1669cef43c
--- /dev/null
+++ b/src/lib/libcrypto/rand/rand_eng.c
@@ -0,0 +1,152 @@
1/* crypto/rand/rand_lib.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 <time.h>
61#include "cryptlib.h"
62#include "rand_lcl.h"
63#include <openssl/rand.h>
64#ifdef OPENSSL_FIPS
65#include <openssl/fips.h>
66#include <openssl/fips_rand.h>
67#endif
68
69#ifndef OPENSSL_NO_ENGINE
70#include <openssl/engine.h>
71#endif
72
73#if defined(OPENSSL_FIPS) && !defined(OPENSSL_NO_ENGINE)
74
75/* non-NULL if default_RAND_meth is ENGINE-provided */
76static ENGINE *funct_ref =NULL;
77
78int eng_RAND_set_rand_method(const RAND_METHOD *meth, const RAND_METHOD **pmeth)
79 {
80 if(funct_ref)
81 {
82 ENGINE_finish(funct_ref);
83 funct_ref = NULL;
84 }
85 *pmeth = meth;
86 return 1;
87 }
88
89const RAND_METHOD *eng_RAND_get_rand_method(const RAND_METHOD **pmeth)
90 {
91 if (!*pmeth)
92 {
93 ENGINE *e = ENGINE_get_default_RAND();
94 if(e)
95 {
96 *pmeth = ENGINE_get_RAND(e);
97 if(!*pmeth)
98 {
99 ENGINE_finish(e);
100 e = NULL;
101 }
102 }
103 if(e)
104 funct_ref = e;
105 else
106 if(FIPS_mode())
107 *pmeth=FIPS_rand_method();
108 else
109 *pmeth = RAND_SSLeay();
110 }
111
112 if(FIPS_mode()
113 && *pmeth != FIPS_rand_check())
114 {
115 RANDerr(RAND_F_ENG_RAND_GET_RAND_METHOD,RAND_R_NON_FIPS_METHOD);
116 return 0;
117 }
118
119 return *pmeth;
120 }
121
122int RAND_set_rand_engine(ENGINE *engine)
123 {
124 const RAND_METHOD *tmp_meth = NULL;
125 if(engine)
126 {
127 if(!ENGINE_init(engine))
128 return 0;
129 tmp_meth = ENGINE_get_RAND(engine);
130 if(!tmp_meth)
131 {
132 ENGINE_finish(engine);
133 return 0;
134 }
135 }
136 /* This function releases any prior ENGINE so call it first */
137 RAND_set_rand_method(tmp_meth);
138 funct_ref = engine;
139 return 1;
140 }
141
142void int_RAND_init_engine_callbacks(void)
143 {
144 static int done = 0;
145 if (done)
146 return;
147 int_RAND_set_callbacks(eng_RAND_set_rand_method,
148 eng_RAND_get_rand_method);
149 done = 1;
150 }
151
152#endif
diff --git a/src/lib/libcrypto/rc2/Makefile b/src/lib/libcrypto/rc2/Makefile
index 73eac347e7..4b6292b65f 100644
--- a/src/lib/libcrypto/rc2/Makefile
+++ b/src/lib/libcrypto/rc2/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -78,7 +78,11 @@ rc2_cbc.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h
78rc2_cbc.o: rc2_cbc.c rc2_locl.h 78rc2_cbc.o: rc2_cbc.c rc2_locl.h
79rc2_ecb.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 79rc2_ecb.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
80rc2_ecb.o: ../../include/openssl/rc2.h rc2_ecb.c rc2_locl.h 80rc2_ecb.o: ../../include/openssl/rc2.h rc2_ecb.c rc2_locl.h
81rc2_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h 81rc2_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
82rc2_skey.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
83rc2_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
84rc2_skey.o: ../../include/openssl/rc2.h ../../include/openssl/safestack.h
85rc2_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
82rc2_skey.o: rc2_locl.h rc2_skey.c 86rc2_skey.o: rc2_locl.h rc2_skey.c
83rc2cfb64.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h 87rc2cfb64.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h
84rc2cfb64.o: rc2_locl.h rc2cfb64.c 88rc2cfb64.o: rc2_locl.h rc2cfb64.c
diff --git a/src/lib/libcrypto/rc4/Makefile b/src/lib/libcrypto/rc4/Makefile
index 187ed5c668..f0bd7678fc 100644
--- a/src/lib/libcrypto/rc4/Makefile
+++ b/src/lib/libcrypto/rc4/Makefile
@@ -21,8 +21,8 @@ TEST=rc4test.c
21APPS= 21APPS=
22 22
23LIB=$(TOP)/libcrypto.a 23LIB=$(TOP)/libcrypto.a
24LIBSRC=rc4_skey.c rc4_enc.c 24LIBSRC=rc4_skey.c rc4_enc.c rc4_fblk.c
25LIBOBJ=$(RC4_ENC) 25LIBOBJ=$(RC4_ENC) rc4_fblk.o
26 26
27SRC= $(LIBSRC) 27SRC= $(LIBSRC)
28 28
@@ -37,7 +37,7 @@ top:
37all: lib 37all: lib
38 38
39lib: $(LIBOBJ) 39lib: $(LIBOBJ)
40 $(AR) $(LIB) $(LIBOBJ) 40 $(ARX) $(LIB) $(LIBOBJ)
41 $(RANLIB) $(LIB) || echo Never mind. 41 $(RANLIB) $(LIB) || echo Never mind.
42 @touch lib 42 @touch lib
43 43
@@ -105,10 +105,20 @@ rc4_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
105rc4_enc.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h 105rc4_enc.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h
106rc4_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 106rc4_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
107rc4_enc.o: ../cryptlib.h rc4_enc.c rc4_locl.h 107rc4_enc.o: ../cryptlib.h rc4_enc.c rc4_locl.h
108rc4_fblk.o: ../../e_os.h ../../include/openssl/bio.h
109rc4_fblk.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
110rc4_fblk.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
111rc4_fblk.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
112rc4_fblk.o: ../../include/openssl/opensslconf.h
113rc4_fblk.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
114rc4_fblk.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h
115rc4_fblk.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
116rc4_fblk.o: ../cryptlib.h rc4_fblk.c rc4_locl.h
108rc4_skey.o: ../../e_os.h ../../include/openssl/bio.h 117rc4_skey.o: ../../e_os.h ../../include/openssl/bio.h
109rc4_skey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 118rc4_skey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
110rc4_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 119rc4_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
111rc4_skey.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h 120rc4_skey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
121rc4_skey.o: ../../include/openssl/opensslconf.h
112rc4_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 122rc4_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
113rc4_skey.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h 123rc4_skey.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h
114rc4_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 124rc4_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
diff --git a/src/lib/libcrypto/rc4/rc4_fblk.c b/src/lib/libcrypto/rc4/rc4_fblk.c
new file mode 100644
index 0000000000..1b2a42979b
--- /dev/null
+++ b/src/lib/libcrypto/rc4/rc4_fblk.c
@@ -0,0 +1,75 @@
1/* crypto/rc4/rc4_fblk.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project.
4 */
5/* ====================================================================
6 * Copyright (c) 2008 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
54
55#include <openssl/rc4.h>
56#include "rc4_locl.h"
57#include <openssl/opensslv.h>
58#include <openssl/crypto.h>
59#ifdef OPENSSL_FIPS
60#include <openssl/fips.h>
61#endif
62
63/* FIPS mode blocking for RC4 has to be done separately since RC4_set_key
64 * may be implemented in an assembly language file.
65 */
66
67#ifdef OPENSSL_FIPS
68void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
69 {
70 if (FIPS_mode())
71 FIPS_BAD_ABORT(RC4)
72 private_RC4_set_key(key, len, data);
73 }
74#endif
75
diff --git a/src/lib/libcrypto/rc5/Makefile b/src/lib/libcrypto/rc5/Makefile
index efb0f36b59..b4e21c9bb2 100644
--- a/src/lib/libcrypto/rc5/Makefile
+++ b/src/lib/libcrypto/rc5/Makefile
@@ -40,7 +40,7 @@ top:
40all: lib 40all: lib
41 41
42lib: $(LIBOBJ) 42lib: $(LIBOBJ)
43 $(AR) $(LIB) $(LIBOBJ) 43 $(ARX) $(LIB) $(LIBOBJ)
44 $(RANLIB) $(LIB) || echo Never mind. 44 $(RANLIB) $(LIB) || echo Never mind.
45 @touch lib 45 @touch lib
46 46
diff --git a/src/lib/libcrypto/ripemd/Makefile b/src/lib/libcrypto/ripemd/Makefile
index d55875c20c..6145f13699 100644
--- a/src/lib/libcrypto/ripemd/Makefile
+++ b/src/lib/libcrypto/ripemd/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -89,8 +89,13 @@ clean:
89 89
90# DO NOT DELETE THIS LINE -- make depend depends on it. 90# DO NOT DELETE THIS LINE -- make depend depends on it.
91 91
92rmd_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 92rmd_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
93rmd_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ripemd.h 93rmd_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
94rmd_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
95rmd_dgst.o: ../../include/openssl/opensslconf.h
96rmd_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
97rmd_dgst.o: ../../include/openssl/ripemd.h ../../include/openssl/safestack.h
98rmd_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
94rmd_dgst.o: ../md32_common.h rmd_dgst.c rmd_locl.h rmdconst.h 99rmd_dgst.o: ../md32_common.h rmd_dgst.c rmd_locl.h rmdconst.h
95rmd_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 100rmd_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
96rmd_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 101rmd_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
diff --git a/src/lib/libcrypto/rsa/rsa_eng.c b/src/lib/libcrypto/rsa/rsa_eng.c
new file mode 100644
index 0000000000..383a7045b2
--- /dev/null
+++ b/src/lib/libcrypto/rsa/rsa_eng.c
@@ -0,0 +1,348 @@
1/* crypto/rsa/rsa_lib.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/crypto.h>
61#include "cryptlib.h"
62#include <openssl/lhash.h>
63#include <openssl/bn.h>
64#include <openssl/rsa.h>
65#include <openssl/rand.h>
66#ifndef OPENSSL_NO_ENGINE
67#include <openssl/engine.h>
68#endif
69
70const char RSA_version[]="RSA" OPENSSL_VERSION_PTEXT;
71
72static const RSA_METHOD *default_RSA_meth=NULL;
73
74RSA *RSA_new(void)
75 {
76 RSA *r=RSA_new_method(NULL);
77
78 return r;
79 }
80
81void RSA_set_default_method(const RSA_METHOD *meth)
82 {
83#ifdef OPENSSL_FIPS
84 if (FIPS_mode() && !(meth->flags & RSA_FLAG_FIPS_METHOD))
85 {
86 RSAerr(RSA_F_RSA_SET_DEFAULT_METHOD, RSA_R_NON_FIPS_METHOD);
87 return;
88 }
89#endif
90 default_RSA_meth = meth;
91 }
92
93const RSA_METHOD *RSA_get_default_method(void)
94 {
95 if (default_RSA_meth == NULL)
96 {
97#ifdef RSA_NULL
98 default_RSA_meth=RSA_null_method();
99#else
100#if 0 /* was: #ifdef RSAref */
101 default_RSA_meth=RSA_PKCS1_RSAref();
102#else
103 default_RSA_meth=RSA_PKCS1_SSLeay();
104#endif
105#endif
106 }
107
108 return default_RSA_meth;
109 }
110
111const RSA_METHOD *RSA_get_method(const RSA *rsa)
112 {
113 return rsa->meth;
114 }
115
116int RSA_set_method(RSA *rsa, const RSA_METHOD *meth)
117 {
118 /* NB: The caller is specifically setting a method, so it's not up to us
119 * to deal with which ENGINE it comes from. */
120 const RSA_METHOD *mtmp;
121#ifdef OPENSSL_FIPS
122 if (FIPS_mode() && !(meth->flags & RSA_FLAG_FIPS_METHOD))
123 {
124 RSAerr(RSA_F_RSA_SET_METHOD, RSA_R_NON_FIPS_METHOD);
125 return 0;
126 }
127#endif
128 mtmp = rsa->meth;
129 if (mtmp->finish) mtmp->finish(rsa);
130#ifndef OPENSSL_NO_ENGINE
131 if (rsa->engine)
132 {
133 ENGINE_finish(rsa->engine);
134 rsa->engine = NULL;
135 }
136#endif
137 rsa->meth = meth;
138 if (meth->init) meth->init(rsa);
139 return 1;
140 }
141
142RSA *RSA_new_method(ENGINE *engine)
143 {
144 RSA *ret;
145
146 ret=(RSA *)OPENSSL_malloc(sizeof(RSA));
147 if (ret == NULL)
148 {
149 RSAerr(RSA_F_RSA_NEW_METHOD,ERR_R_MALLOC_FAILURE);
150 return NULL;
151 }
152
153 ret->meth = RSA_get_default_method();
154#ifndef OPENSSL_NO_ENGINE
155 if (engine)
156 {
157 if (!ENGINE_init(engine))
158 {
159 RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_ENGINE_LIB);
160 OPENSSL_free(ret);
161 return NULL;
162 }
163 ret->engine = engine;
164 }
165 else
166 ret->engine = ENGINE_get_default_RSA();
167 if(ret->engine)
168 {
169 ret->meth = ENGINE_get_RSA(ret->engine);
170 if(!ret->meth)
171 {
172 RSAerr(RSA_F_RSA_NEW_METHOD,
173 ERR_R_ENGINE_LIB);
174 ENGINE_finish(ret->engine);
175 OPENSSL_free(ret);
176 return NULL;
177 }
178 }
179#endif
180#ifdef OPENSSL_FIPS
181 if (FIPS_mode() && !(ret->meth->flags & RSA_FLAG_FIPS_METHOD))
182 {
183 RSAerr(RSA_F_RSA_NEW_METHOD, RSA_R_NON_FIPS_METHOD);
184#ifndef OPENSSL_NO_ENGINE
185 if (ret->engine)
186 ENGINE_finish(ret->engine);
187#endif
188 OPENSSL_free(ret);
189 return NULL;
190 }
191#endif
192
193 ret->pad=0;
194 ret->version=0;
195 ret->n=NULL;
196 ret->e=NULL;
197 ret->d=NULL;
198 ret->p=NULL;
199 ret->q=NULL;
200 ret->dmp1=NULL;
201 ret->dmq1=NULL;
202 ret->iqmp=NULL;
203 ret->references=1;
204 ret->_method_mod_n=NULL;
205 ret->_method_mod_p=NULL;
206 ret->_method_mod_q=NULL;
207 ret->blinding=NULL;
208 ret->mt_blinding=NULL;
209 ret->bignum_data=NULL;
210 ret->flags=ret->meth->flags;
211 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
212 if ((ret->meth->init != NULL) && !ret->meth->init(ret))
213 {
214#ifndef OPENSSL_NO_ENGINE
215 if (ret->engine)
216 ENGINE_finish(ret->engine);
217#endif
218 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
219 OPENSSL_free(ret);
220 ret=NULL;
221 }
222 return(ret);
223 }
224
225void RSA_free(RSA *r)
226 {
227 int i;
228
229 if (r == NULL) return;
230
231 i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA);
232#ifdef REF_PRINT
233 REF_PRINT("RSA",r);
234#endif
235 if (i > 0) return;
236#ifdef REF_CHECK
237 if (i < 0)
238 {
239 fprintf(stderr,"RSA_free, bad reference count\n");
240 abort();
241 }
242#endif
243
244 if (r->meth->finish)
245 r->meth->finish(r);
246#ifndef OPENSSL_NO_ENGINE
247 if (r->engine)
248 ENGINE_finish(r->engine);
249#endif
250
251 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, r, &r->ex_data);
252
253 if (r->n != NULL) BN_clear_free(r->n);
254 if (r->e != NULL) BN_clear_free(r->e);
255 if (r->d != NULL) BN_clear_free(r->d);
256 if (r->p != NULL) BN_clear_free(r->p);
257 if (r->q != NULL) BN_clear_free(r->q);
258 if (r->dmp1 != NULL) BN_clear_free(r->dmp1);
259 if (r->dmq1 != NULL) BN_clear_free(r->dmq1);
260 if (r->iqmp != NULL) BN_clear_free(r->iqmp);
261 if (r->blinding != NULL) BN_BLINDING_free(r->blinding);
262 if (r->mt_blinding != NULL) BN_BLINDING_free(r->mt_blinding);
263 if (r->bignum_data != NULL) OPENSSL_free_locked(r->bignum_data);
264 OPENSSL_free(r);
265 }
266
267int RSA_up_ref(RSA *r)
268 {
269 int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_RSA);
270#ifdef REF_PRINT
271 REF_PRINT("RSA",r);
272#endif
273#ifdef REF_CHECK
274 if (i < 2)
275 {
276 fprintf(stderr, "RSA_up_ref, bad reference count\n");
277 abort();
278 }
279#endif
280 return ((i > 1) ? 1 : 0);
281 }
282
283int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
284 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
285 {
286 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, argl, argp,
287 new_func, dup_func, free_func);
288 }
289
290int RSA_set_ex_data(RSA *r, int idx, void *arg)
291 {
292 return(CRYPTO_set_ex_data(&r->ex_data,idx,arg));
293 }
294
295void *RSA_get_ex_data(const RSA *r, int idx)
296 {
297 return(CRYPTO_get_ex_data(&r->ex_data,idx));
298 }
299
300int RSA_flags(const RSA *r)
301 {
302 return((r == NULL)?0:r->meth->flags);
303 }
304
305int RSA_memory_lock(RSA *r)
306 {
307 int i,j,k,off;
308 char *p;
309 BIGNUM *bn,**t[6],*b;
310 BN_ULONG *ul;
311
312 if (r->d == NULL) return(1);
313 t[0]= &r->d;
314 t[1]= &r->p;
315 t[2]= &r->q;
316 t[3]= &r->dmp1;
317 t[4]= &r->dmq1;
318 t[5]= &r->iqmp;
319 k=sizeof(BIGNUM)*6;
320 off=k/sizeof(BN_ULONG)+1;
321 j=1;
322 for (i=0; i<6; i++)
323 j+= (*t[i])->top;
324 if ((p=OPENSSL_malloc_locked((off+j)*sizeof(BN_ULONG))) == NULL)
325 {
326 RSAerr(RSA_F_RSA_MEMORY_LOCK,ERR_R_MALLOC_FAILURE);
327 return(0);
328 }
329 bn=(BIGNUM *)p;
330 ul=(BN_ULONG *)&(p[off]);
331 for (i=0; i<6; i++)
332 {
333 b= *(t[i]);
334 *(t[i])= &(bn[i]);
335 memcpy((char *)&(bn[i]),(char *)b,sizeof(BIGNUM));
336 bn[i].flags=BN_FLG_STATIC_DATA;
337 bn[i].d=ul;
338 memcpy((char *)ul,b->d,sizeof(BN_ULONG)*b->top);
339 ul+=b->top;
340 BN_clear_free(b);
341 }
342
343 /* I should fix this so it can still be done */
344 r->flags&= ~(RSA_FLAG_CACHE_PRIVATE|RSA_FLAG_CACHE_PUBLIC);
345
346 r->bignum_data=p;
347 return(1);
348 }
diff --git a/src/lib/libcrypto/rsa/rsa_x931g.c b/src/lib/libcrypto/rsa/rsa_x931g.c
new file mode 100644
index 0000000000..c640cc2ec9
--- /dev/null
+++ b/src/lib/libcrypto/rsa/rsa_x931g.c
@@ -0,0 +1,255 @@
1/* crypto/rsa/rsa_gen.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 <string.h>
61#include <time.h>
62#include <openssl/err.h>
63#include <openssl/bn.h>
64#include <openssl/rsa.h>
65
66#ifndef OPENSSL_FIPS
67
68/* X9.31 RSA key derivation and generation */
69
70int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, BIGNUM *q2,
71 const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *Xp,
72 const BIGNUM *Xq1, const BIGNUM *Xq2, const BIGNUM *Xq,
73 const BIGNUM *e, BN_GENCB *cb)
74 {
75 BIGNUM *r0=NULL,*r1=NULL,*r2=NULL,*r3=NULL;
76 BN_CTX *ctx=NULL,*ctx2=NULL;
77
78 if (!rsa)
79 goto err;
80
81 ctx = BN_CTX_new();
82 BN_CTX_start(ctx);
83 if (!ctx)
84 goto err;
85
86 r0 = BN_CTX_get(ctx);
87 r1 = BN_CTX_get(ctx);
88 r2 = BN_CTX_get(ctx);
89 r3 = BN_CTX_get(ctx);
90
91 if (r3 == NULL)
92 goto err;
93 if (!rsa->e)
94 {
95 rsa->e = BN_dup(e);
96 if (!rsa->e)
97 goto err;
98 }
99 else
100 e = rsa->e;
101
102 /* If not all parameters present only calculate what we can.
103 * This allows test programs to output selective parameters.
104 */
105
106 if (Xp && !rsa->p)
107 {
108 rsa->p = BN_new();
109 if (!rsa->p)
110 goto err;
111
112 if (!BN_X931_derive_prime_ex(rsa->p, p1, p2,
113 Xp, Xp1, Xp2, e, ctx, cb))
114 goto err;
115 }
116
117 if (Xq && !rsa->q)
118 {
119 rsa->q = BN_new();
120 if (!rsa->q)
121 goto err;
122 if (!BN_X931_derive_prime_ex(rsa->q, q1, q2,
123 Xq, Xq1, Xq2, e, ctx, cb))
124 goto err;
125 }
126
127 if (!rsa->p || !rsa->q)
128 {
129 BN_CTX_end(ctx);
130 BN_CTX_free(ctx);
131 return 2;
132 }
133
134 /* Since both primes are set we can now calculate all remaining
135 * components.
136 */
137
138 /* calculate n */
139 rsa->n=BN_new();
140 if (rsa->n == NULL)
141 goto err;
142 if (!BN_mul(rsa->n,rsa->p,rsa->q,ctx))
143 goto err;
144
145 /* calculate d */
146 if (!BN_sub(r1,rsa->p,BN_value_one()))
147 goto err; /* p-1 */
148 if (!BN_sub(r2,rsa->q,BN_value_one()))
149 goto err; /* q-1 */
150 if (!BN_mul(r0,r1,r2,ctx))
151 goto err; /* (p-1)(q-1) */
152
153 if (!BN_gcd(r3, r1, r2, ctx))
154 goto err;
155
156 if (!BN_div(r0, NULL, r0, r3, ctx))
157 goto err; /* LCM((p-1)(q-1)) */
158
159 ctx2 = BN_CTX_new();
160 if (!ctx2)
161 goto err;
162
163 rsa->d=BN_mod_inverse(NULL,rsa->e,r0,ctx2); /* d */
164 if (rsa->d == NULL)
165 goto err;
166
167 /* calculate d mod (p-1) */
168 rsa->dmp1=BN_new();
169 if (rsa->dmp1 == NULL)
170 goto err;
171 if (!BN_mod(rsa->dmp1,rsa->d,r1,ctx))
172 goto err;
173
174 /* calculate d mod (q-1) */
175 rsa->dmq1=BN_new();
176 if (rsa->dmq1 == NULL)
177 goto err;
178 if (!BN_mod(rsa->dmq1,rsa->d,r2,ctx))
179 goto err;
180
181 /* calculate inverse of q mod p */
182 rsa->iqmp=BN_mod_inverse(NULL,rsa->q,rsa->p,ctx2);
183
184 err:
185 if (ctx)
186 {
187 BN_CTX_end(ctx);
188 BN_CTX_free(ctx);
189 }
190 if (ctx2)
191 BN_CTX_free(ctx2);
192 /* If this is set all calls successful */
193 if (rsa->iqmp != NULL)
194 return 1;
195
196 return 0;
197
198 }
199
200int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, BN_GENCB *cb)
201 {
202 int ok = 0;
203 BIGNUM *Xp = NULL, *Xq = NULL;
204 BN_CTX *ctx = NULL;
205
206 ctx = BN_CTX_new();
207 if (!ctx)
208 goto error;
209
210 BN_CTX_start(ctx);
211 Xp = BN_CTX_get(ctx);
212 Xq = BN_CTX_get(ctx);
213 if (!BN_X931_generate_Xpq(Xp, Xq, bits, ctx))
214 goto error;
215
216 rsa->p = BN_new();
217 rsa->q = BN_new();
218 if (!rsa->p || !rsa->q)
219 goto error;
220
221 /* Generate two primes from Xp, Xq */
222
223 if (!BN_X931_generate_prime_ex(rsa->p, NULL, NULL, NULL, NULL, Xp,
224 e, ctx, cb))
225 goto error;
226
227 if (!BN_X931_generate_prime_ex(rsa->q, NULL, NULL, NULL, NULL, Xq,
228 e, ctx, cb))
229 goto error;
230
231 /* Since rsa->p and rsa->q are valid this call will just derive
232 * remaining RSA components.
233 */
234
235 if (!RSA_X931_derive_ex(rsa, NULL, NULL, NULL, NULL,
236 NULL, NULL, NULL, NULL, NULL, NULL, e, cb))
237 goto error;
238
239 ok = 1;
240
241 error:
242 if (ctx)
243 {
244 BN_CTX_end(ctx);
245 BN_CTX_free(ctx);
246 }
247
248 if (ok)
249 return 1;
250
251 return 0;
252
253 }
254
255#endif
diff --git a/src/lib/libcrypto/sha/Makefile b/src/lib/libcrypto/sha/Makefile
index ac64fb61d3..f4741b9ee6 100644
--- a/src/lib/libcrypto/sha/Makefile
+++ b/src/lib/libcrypto/sha/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -59,7 +59,7 @@ s512sse2-out.s: asm/sha512-sse2.pl ../perlasm/x86asm.pl
59 (cd asm; $(PERL) sha512-sse2.pl a.out $(CFLAGS) $(PROCESSOR) > ../$@) 59 (cd asm; $(PERL) sha512-sse2.pl a.out $(CFLAGS) $(PROCESSOR) > ../$@)
60 60
61sha1-ia64.s: asm/sha1-ia64.pl 61sha1-ia64.s: asm/sha1-ia64.pl
62 (cd asm; $(PERL) sha1-ia64.pl $(CFLAGS) ) > $@ 62 (cd asm; $(PERL) sha1-ia64.pl ../$@ $(CFLAGS))
63sha256-ia64.s: asm/sha512-ia64.pl 63sha256-ia64.s: asm/sha512-ia64.pl
64 (cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS)) 64 (cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS))
65sha512-ia64.s: asm/sha512-ia64.pl 65sha512-ia64.s: asm/sha512-ia64.pl
@@ -113,24 +113,31 @@ sha1_one.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
113sha1_one.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 113sha1_one.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
114sha1_one.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 114sha1_one.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
115sha1_one.o: sha1_one.c 115sha1_one.o: sha1_one.c
116sha1dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 116sha1dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
117sha1dgst.o: ../../include/openssl/opensslconf.h
117sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h 118sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h
118sha1dgst.o: ../md32_common.h sha1dgst.c sha_locl.h 119sha1dgst.o: ../md32_common.h sha1dgst.c sha_locl.h
119sha256.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 120sha256.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
120sha256.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 121sha256.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
121sha256.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h 122sha256.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
122sha256.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 123sha256.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
123sha256.o: ../../include/openssl/symhacks.h ../md32_common.h sha256.c 124sha256.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
125sha256.o: ../md32_common.h sha256.c
124sha512.o: ../../e_os.h ../../include/openssl/bio.h 126sha512.o: ../../e_os.h ../../include/openssl/bio.h
125sha512.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 127sha512.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
126sha512.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 128sha512.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
127sha512.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h 129sha512.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
128sha512.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 130sha512.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
129sha512.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 131sha512.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
130sha512.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 132sha512.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
131sha512.o: ../cryptlib.h sha512.c 133sha512.o: ../../include/openssl/symhacks.h ../cryptlib.h sha512.c
132sha_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 134sha_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
133sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h 135sha_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
136sha_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
137sha_dgst.o: ../../include/openssl/opensslconf.h
138sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
139sha_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
140sha_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
134sha_dgst.o: ../md32_common.h sha_dgst.c sha_locl.h 141sha_dgst.o: ../md32_common.h sha_dgst.c sha_locl.h
135sha_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 142sha_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
136sha_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 143sha_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
diff --git a/src/lib/libcrypto/stack/Makefile b/src/lib/libcrypto/stack/Makefile
index 5327692ac8..489a77b93c 100644
--- a/src/lib/libcrypto/stack/Makefile
+++ b/src/lib/libcrypto/stack/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
diff --git a/src/lib/libcrypto/txt_db/Makefile b/src/lib/libcrypto/txt_db/Makefile
index e6f30331d8..87e57b49f6 100644
--- a/src/lib/libcrypto/txt_db/Makefile
+++ b/src/lib/libcrypto/txt_db/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
diff --git a/src/lib/libcrypto/ui/Makefile b/src/lib/libcrypto/ui/Makefile
index a685659fb4..4755e206f6 100644
--- a/src/lib/libcrypto/ui/Makefile
+++ b/src/lib/libcrypto/ui/Makefile
@@ -37,7 +37,7 @@ top:
37all: lib 37all: lib
38 38
39lib: $(LIBOBJ) 39lib: $(LIBOBJ)
40 $(AR) $(LIB) $(LIBOBJ) 40 $(ARX) $(LIB) $(LIBOBJ)
41 $(RANLIB) $(LIB) || echo Never mind. 41 $(RANLIB) $(LIB) || echo Never mind.
42 @touch lib 42 @touch lib
43 43
diff --git a/src/lib/libcrypto/util/arx.pl b/src/lib/libcrypto/util/arx.pl
new file mode 100644
index 0000000000..ce62625c33
--- /dev/null
+++ b/src/lib/libcrypto/util/arx.pl
@@ -0,0 +1,15 @@
1#!/bin/perl
2
3# Simple perl script to wrap round "ar" program and exclude any
4# object files in the environment variable EXCL_OBJ
5
6map { s/^.*\/([^\/]*)$/$1/ ; $EXCL{$_} = 1} split(' ', $ENV{EXCL_OBJ});
7
8#my @ks = keys %EXCL;
9#print STDERR "Excluding: @ks \n";
10
11my @ARGS = grep { !exists $EXCL{$_} } @ARGV;
12
13system @ARGS;
14
15exit $? >> 8;
diff --git a/src/lib/libcrypto/util/fipslink.pl b/src/lib/libcrypto/util/fipslink.pl
index a893833c5c..3597bc1740 100644
--- a/src/lib/libcrypto/util/fipslink.pl
+++ b/src/lib/libcrypto/util/fipslink.pl
@@ -28,7 +28,7 @@ if (exists $ENV{"PREMAIN_DSO_EXE"})
28 } 28 }
29 29
30check_hash($sha1_exe, "fips_premain.c"); 30check_hash($sha1_exe, "fips_premain.c");
31check_hash($sha1_exe, "fipscanister.o"); 31check_hash($sha1_exe, "fipscanister.lib");
32 32
33 33
34print "Integrity check OK\n"; 34print "Integrity check OK\n";
diff --git a/src/lib/libcrypto/util/mksdef.pl b/src/lib/libcrypto/util/mksdef.pl
new file mode 100644
index 0000000000..065dc675f1
--- /dev/null
+++ b/src/lib/libcrypto/util/mksdef.pl
@@ -0,0 +1,87 @@
1
2# Perl script to split libeay32.def into two distinct DEF files for use in
3# fipdso mode. It works out symbols in each case by running "link" command and
4# parsing the output to find the list of missing symbols then splitting
5# libeay32.def based on the result.
6
7
8# Get list of unknown symbols
9
10my @deferr = `link @ARGV`;
11
12my $preamble = "";
13my @fipsdll;
14my @fipsrest;
15my %nosym;
16
17# Add symbols to a hash for easy lookup
18
19foreach (@deferr)
20 {
21 if (/^.*symbol (\S+)$/)
22 {
23 $nosym{$1} = 1;
24 }
25 }
26
27open (IN, "ms/libeay32.def") || die "Can't Open DEF file for spliting";
28
29my $started = 0;
30
31# Parse libeay32.def into two arrays depending on whether the symbol matches
32# the missing list.
33
34
35foreach (<IN>)
36 {
37 if (/^\s*(\S+)\s*(\@\S+)\s*$/)
38 {
39 $started = 1;
40 if (exists $nosym{$1})
41 {
42 push @fipsrest, $_;
43 }
44 else
45 {
46 my $imptmp = sprintf " %-39s %s\n",
47 "$1=libosslfips.$1", $2;
48 push @fipsrest, $imptmp;
49 push @fipsdll, "\t$1\n";
50 }
51 }
52 $preamble .= $_ unless $started;
53 }
54
55close IN;
56
57# Hack! Add some additional exports needed for libcryptofips.dll
58#
59
60push @fipsdll, "\tOPENSSL_showfatal\n";
61push @fipsdll, "\tOPENSSL_cpuid_setup\n";
62
63# Write out DEF files for each array
64
65write_def("ms/libosslfips.def", "LIBOSSLFIPS", $preamble, \@fipsdll);
66write_def("ms/libeayfips.def", "", $preamble, \@fipsrest);
67
68
69sub write_def
70 {
71 my ($fnam, $defname, $preamble, $rdefs) = @_;
72 open (OUT, ">$fnam") || die "Can't Open DEF file $fnam for Writing\n";
73
74 if ($defname ne "")
75 {
76 $preamble =~ s/LIBEAY32/$defname/g;
77 $preamble =~ s/LIBEAY/$defname/g;
78 }
79 print OUT $preamble;
80 foreach (@$rdefs)
81 {
82 print OUT $_;
83 }
84 close OUT;
85 }
86
87
diff --git a/src/lib/libcrypto/x509/Makefile b/src/lib/libcrypto/x509/Makefile
index ddcc3124a7..464752b159 100644
--- a/src/lib/libcrypto/x509/Makefile
+++ b/src/lib/libcrypto/x509/Makefile
@@ -43,7 +43,7 @@ top:
43all: lib 43all: lib
44 44
45lib: $(LIBOBJ) 45lib: $(LIBOBJ)
46 $(AR) $(LIB) $(LIBOBJ) 46 $(ARX) $(LIB) $(LIBOBJ)
47 $(RANLIB) $(LIB) || echo Never mind. 47 $(RANLIB) $(LIB) || echo Never mind.
48 @touch lib 48 @touch lib
49 49
@@ -89,35 +89,37 @@ by_dir.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
89by_dir.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 89by_dir.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
90by_dir.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 90by_dir.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
91by_dir.o: ../../include/openssl/err.h ../../include/openssl/evp.h 91by_dir.o: ../../include/openssl/err.h ../../include/openssl/evp.h
92by_dir.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 92by_dir.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
93by_dir.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 93by_dir.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
94by_dir.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 94by_dir.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
95by_dir.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 95by_dir.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
96by_dir.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 96by_dir.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
97by_dir.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 97by_dir.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
98by_dir.o: ../../include/openssl/x509_vfy.h ../cryptlib.h by_dir.c 98by_dir.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
99by_dir.o: ../cryptlib.h by_dir.c
99by_file.o: ../../e_os.h ../../include/openssl/asn1.h 100by_file.o: ../../e_os.h ../../include/openssl/asn1.h
100by_file.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 101by_file.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
101by_file.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 102by_file.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
102by_file.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 103by_file.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
103by_file.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 104by_file.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
104by_file.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 105by_file.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
105by_file.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 106by_file.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
106by_file.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 107by_file.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
107by_file.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 108by_file.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108by_file.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 109by_file.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
109by_file.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 110by_file.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
110by_file.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 111by_file.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
111by_file.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 112by_file.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
112by_file.o: ../cryptlib.h by_file.c 113by_file.o: ../../include/openssl/x509_vfy.h ../cryptlib.h by_file.c
113x509_att.o: ../../e_os.h ../../include/openssl/asn1.h 114x509_att.o: ../../e_os.h ../../include/openssl/asn1.h
114x509_att.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 115x509_att.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
115x509_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 116x509_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
116x509_att.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 117x509_att.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
117x509_att.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 118x509_att.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
118x509_att.o: ../../include/openssl/err.h ../../include/openssl/evp.h 119x509_att.o: ../../include/openssl/err.h ../../include/openssl/evp.h
119x509_att.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 120x509_att.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
120x509_att.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 121x509_att.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
122x509_att.o: ../../include/openssl/opensslconf.h
121x509_att.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 123x509_att.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
122x509_att.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 124x509_att.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
123x509_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 125x509_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -130,8 +132,9 @@ x509_cmp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
130x509_cmp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 132x509_cmp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
131x509_cmp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 133x509_cmp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
132x509_cmp.o: ../../include/openssl/err.h ../../include/openssl/evp.h 134x509_cmp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
133x509_cmp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 135x509_cmp.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
134x509_cmp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 136x509_cmp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
137x509_cmp.o: ../../include/openssl/opensslconf.h
135x509_cmp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 138x509_cmp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
136x509_cmp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 139x509_cmp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
137x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 140x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -143,22 +146,22 @@ x509_d2.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
143x509_d2.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 146x509_d2.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
144x509_d2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 147x509_d2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
145x509_d2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 148x509_d2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
146x509_d2.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 149x509_d2.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
147x509_d2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 150x509_d2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
148x509_d2.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 151x509_d2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
149x509_d2.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 152x509_d2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
150x509_d2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 153x509_d2.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
151x509_d2.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 154x509_d2.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
152x509_d2.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 155x509_d2.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
153x509_d2.o: ../cryptlib.h x509_d2.c 156x509_d2.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_d2.c
154x509_def.o: ../../e_os.h ../../include/openssl/asn1.h 157x509_def.o: ../../e_os.h ../../include/openssl/asn1.h
155x509_def.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 158x509_def.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
156x509_def.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 159x509_def.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
157x509_def.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 160x509_def.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
158x509_def.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 161x509_def.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
159x509_def.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 162x509_def.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
160x509_def.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 163x509_def.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
161x509_def.o: ../../include/openssl/opensslconf.h 164x509_def.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
162x509_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 165x509_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
163x509_def.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 166x509_def.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
164x509_def.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 167x509_def.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -169,8 +172,9 @@ x509_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
169x509_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 172x509_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
170x509_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 173x509_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
171x509_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h 174x509_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
172x509_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 175x509_err.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
173x509_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 176x509_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
177x509_err.o: ../../include/openssl/opensslconf.h
174x509_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 178x509_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
175x509_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 179x509_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
176x509_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 180x509_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -182,8 +186,9 @@ x509_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
182x509_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 186x509_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
183x509_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 187x509_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
184x509_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h 188x509_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h
185x509_ext.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 189x509_ext.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
186x509_ext.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 190x509_ext.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
191x509_ext.o: ../../include/openssl/opensslconf.h
187x509_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 192x509_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
188x509_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 193x509_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
189x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 194x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -196,22 +201,22 @@ x509_lu.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
196x509_lu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 201x509_lu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
197x509_lu.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 202x509_lu.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
198x509_lu.o: ../../include/openssl/err.h ../../include/openssl/evp.h 203x509_lu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
199x509_lu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 204x509_lu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
200x509_lu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 205x509_lu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
201x509_lu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 206x509_lu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
202x509_lu.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 207x509_lu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
203x509_lu.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 208x509_lu.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
204x509_lu.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 209x509_lu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
205x509_lu.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 210x509_lu.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
206x509_lu.o: ../cryptlib.h x509_lu.c 211x509_lu.o: ../../include/openssl/x509v3.h ../cryptlib.h x509_lu.c
207x509_obj.o: ../../e_os.h ../../include/openssl/asn1.h 212x509_obj.o: ../../e_os.h ../../include/openssl/asn1.h
208x509_obj.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 213x509_obj.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
209x509_obj.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 214x509_obj.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
210x509_obj.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 215x509_obj.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
211x509_obj.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 216x509_obj.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
212x509_obj.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 217x509_obj.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
213x509_obj.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 218x509_obj.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
214x509_obj.o: ../../include/openssl/opensslconf.h 219x509_obj.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
215x509_obj.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 220x509_obj.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
216x509_obj.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 221x509_obj.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
217x509_obj.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 222x509_obj.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -223,8 +228,9 @@ x509_r2x.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
223x509_r2x.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 228x509_r2x.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
224x509_r2x.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 229x509_r2x.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
225x509_r2x.o: ../../include/openssl/err.h ../../include/openssl/evp.h 230x509_r2x.o: ../../include/openssl/err.h ../../include/openssl/evp.h
226x509_r2x.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 231x509_r2x.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
227x509_r2x.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 232x509_r2x.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
233x509_r2x.o: ../../include/openssl/opensslconf.h
228x509_r2x.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 234x509_r2x.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
229x509_r2x.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 235x509_r2x.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
230x509_r2x.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 236x509_r2x.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -236,8 +242,9 @@ x509_req.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
236x509_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 242x509_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
237x509_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 243x509_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
238x509_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h 244x509_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
239x509_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 245x509_req.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
240x509_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 246x509_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
247x509_req.o: ../../include/openssl/opensslconf.h
241x509_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 248x509_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
242x509_req.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 249x509_req.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
243x509_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 250x509_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -249,9 +256,9 @@ x509_set.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
249x509_set.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 256x509_set.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
250x509_set.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 257x509_set.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
251x509_set.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 258x509_set.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
252x509_set.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 259x509_set.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
253x509_set.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 260x509_set.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
254x509_set.o: ../../include/openssl/opensslconf.h 261x509_set.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
255x509_set.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 262x509_set.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
256x509_set.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 263x509_set.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
257x509_set.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 264x509_set.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -263,8 +270,9 @@ x509_trs.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
263x509_trs.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 270x509_trs.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
264x509_trs.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 271x509_trs.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
265x509_trs.o: ../../include/openssl/err.h ../../include/openssl/evp.h 272x509_trs.o: ../../include/openssl/err.h ../../include/openssl/evp.h
266x509_trs.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 273x509_trs.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
267x509_trs.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 274x509_trs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
275x509_trs.o: ../../include/openssl/opensslconf.h
268x509_trs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 276x509_trs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
269x509_trs.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 277x509_trs.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
270x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 278x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -276,9 +284,9 @@ x509_txt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
276x509_txt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 284x509_txt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
277x509_txt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 285x509_txt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
278x509_txt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 286x509_txt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
279x509_txt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 287x509_txt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
280x509_txt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 288x509_txt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
281x509_txt.o: ../../include/openssl/opensslconf.h 289x509_txt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
282x509_txt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 290x509_txt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
283x509_txt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 291x509_txt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
284x509_txt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 292x509_txt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -290,22 +298,23 @@ x509_v3.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
290x509_v3.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 298x509_v3.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
291x509_v3.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 299x509_v3.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
292x509_v3.o: ../../include/openssl/err.h ../../include/openssl/evp.h 300x509_v3.o: ../../include/openssl/err.h ../../include/openssl/evp.h
293x509_v3.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 301x509_v3.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
294x509_v3.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 302x509_v3.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
295x509_v3.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 303x509_v3.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
296x509_v3.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 304x509_v3.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
297x509_v3.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 305x509_v3.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
298x509_v3.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 306x509_v3.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
299x509_v3.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 307x509_v3.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
300x509_v3.o: ../cryptlib.h x509_v3.c 308x509_v3.o: ../../include/openssl/x509v3.h ../cryptlib.h x509_v3.c
301x509_vfy.o: ../../e_os.h ../../include/openssl/asn1.h 309x509_vfy.o: ../../e_os.h ../../include/openssl/asn1.h
302x509_vfy.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 310x509_vfy.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
303x509_vfy.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 311x509_vfy.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
304x509_vfy.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 312x509_vfy.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
305x509_vfy.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 313x509_vfy.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
306x509_vfy.o: ../../include/openssl/err.h ../../include/openssl/evp.h 314x509_vfy.o: ../../include/openssl/err.h ../../include/openssl/evp.h
307x509_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 315x509_vfy.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
308x509_vfy.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 316x509_vfy.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
317x509_vfy.o: ../../include/openssl/opensslconf.h
309x509_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 318x509_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
310x509_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 319x509_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
311x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 320x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -318,8 +327,9 @@ x509_vpm.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
318x509_vpm.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 327x509_vpm.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
319x509_vpm.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 328x509_vpm.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
320x509_vpm.o: ../../include/openssl/err.h ../../include/openssl/evp.h 329x509_vpm.o: ../../include/openssl/err.h ../../include/openssl/evp.h
321x509_vpm.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 330x509_vpm.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
322x509_vpm.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 331x509_vpm.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
332x509_vpm.o: ../../include/openssl/opensslconf.h
323x509_vpm.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 333x509_vpm.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
324x509_vpm.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 334x509_vpm.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
325x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 335x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -331,9 +341,9 @@ x509cset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
331x509cset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 341x509cset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
332x509cset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 342x509cset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
333x509cset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 343x509cset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
334x509cset.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 344x509cset.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
335x509cset.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 345x509cset.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
336x509cset.o: ../../include/openssl/opensslconf.h 346x509cset.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
337x509cset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 347x509cset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
338x509cset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 348x509cset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
339x509cset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 349x509cset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -344,9 +354,9 @@ x509name.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
344x509name.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 354x509name.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
345x509name.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 355x509name.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
346x509name.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 356x509name.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
347x509name.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 357x509name.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
348x509name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 358x509name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
349x509name.o: ../../include/openssl/opensslconf.h 359x509name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
350x509name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 360x509name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
351x509name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 361x509name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
352x509name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 362x509name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -357,9 +367,9 @@ x509rset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
357x509rset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 367x509rset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
358x509rset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 368x509rset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
359x509rset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 369x509rset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
360x509rset.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 370x509rset.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
361x509rset.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 371x509rset.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
362x509rset.o: ../../include/openssl/opensslconf.h 372x509rset.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
363x509rset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 373x509rset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
364x509rset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 374x509rset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
365x509rset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 375x509rset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -370,9 +380,9 @@ x509spki.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
370x509spki.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 380x509spki.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
371x509spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 381x509spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
372x509spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 382x509spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
373x509spki.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 383x509spki.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
374x509spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 384x509spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
375x509spki.o: ../../include/openssl/opensslconf.h 385x509spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
376x509spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 386x509spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
377x509spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 387x509spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
378x509spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 388x509spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -383,9 +393,9 @@ x509type.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
383x509type.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 393x509type.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
384x509type.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 394x509type.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
385x509type.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 395x509type.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
386x509type.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 396x509type.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
387x509type.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 397x509type.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
388x509type.o: ../../include/openssl/opensslconf.h 398x509type.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
389x509type.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 399x509type.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
390x509type.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 400x509type.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
391x509type.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 401x509type.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -396,11 +406,12 @@ x_all.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
396x_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 406x_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
397x_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 407x_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
398x_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 408x_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
399x_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 409x_all.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
400x_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 410x_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
401x_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 411x_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
402x_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 412x_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
403x_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 413x_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
404x_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 414x_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
405x_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 415x_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
406x_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_all.c 416x_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
417x_all.o: ../cryptlib.h x_all.c
diff --git a/src/lib/libcrypto/x509v3/Makefile b/src/lib/libcrypto/x509v3/Makefile
index 556ef351bf..e71dc42f9f 100644
--- a/src/lib/libcrypto/x509v3/Makefile
+++ b/src/lib/libcrypto/x509v3/Makefile
@@ -43,7 +43,7 @@ top:
43all: lib 43all: lib
44 44
45lib: $(LIBOBJ) 45lib: $(LIBOBJ)
46 $(AR) $(LIB) $(LIBOBJ) 46 $(ARX) $(LIB) $(LIBOBJ)
47 $(RANLIB) $(LIB) || echo Never mind. 47 $(RANLIB) $(LIB) || echo Never mind.
48 @touch lib 48 @touch lib
49 49
@@ -90,8 +90,8 @@ pcy_cache.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
90pcy_cache.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 90pcy_cache.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
91pcy_cache.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 91pcy_cache.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
92pcy_cache.o: ../../include/openssl/err.h ../../include/openssl/evp.h 92pcy_cache.o: ../../include/openssl/err.h ../../include/openssl/evp.h
93pcy_cache.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 93pcy_cache.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
94pcy_cache.o: ../../include/openssl/objects.h 94pcy_cache.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
95pcy_cache.o: ../../include/openssl/opensslconf.h 95pcy_cache.o: ../../include/openssl/opensslconf.h
96pcy_cache.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 96pcy_cache.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
97pcy_cache.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 97pcy_cache.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -105,8 +105,9 @@ pcy_data.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
105pcy_data.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 105pcy_data.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
106pcy_data.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 106pcy_data.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
107pcy_data.o: ../../include/openssl/err.h ../../include/openssl/evp.h 107pcy_data.o: ../../include/openssl/err.h ../../include/openssl/evp.h
108pcy_data.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 108pcy_data.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
109pcy_data.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 109pcy_data.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
110pcy_data.o: ../../include/openssl/opensslconf.h
110pcy_data.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 111pcy_data.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
111pcy_data.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 112pcy_data.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
112pcy_data.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 113pcy_data.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -119,35 +120,36 @@ pcy_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
119pcy_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 120pcy_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
120pcy_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 121pcy_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
121pcy_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 122pcy_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
122pcy_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 123pcy_lib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
123pcy_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 124pcy_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
124pcy_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 125pcy_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
125pcy_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 126pcy_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
126pcy_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 127pcy_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
127pcy_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 128pcy_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
128pcy_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 129pcy_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
129pcy_lib.o: ../cryptlib.h pcy_int.h pcy_lib.c 130pcy_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h pcy_int.h pcy_lib.c
130pcy_map.o: ../../e_os.h ../../include/openssl/asn1.h 131pcy_map.o: ../../e_os.h ../../include/openssl/asn1.h
131pcy_map.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 132pcy_map.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
132pcy_map.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 133pcy_map.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
133pcy_map.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 134pcy_map.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
134pcy_map.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 135pcy_map.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
135pcy_map.o: ../../include/openssl/err.h ../../include/openssl/evp.h 136pcy_map.o: ../../include/openssl/err.h ../../include/openssl/evp.h
136pcy_map.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 137pcy_map.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
137pcy_map.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 138pcy_map.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
138pcy_map.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 139pcy_map.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
139pcy_map.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 140pcy_map.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
140pcy_map.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 141pcy_map.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
141pcy_map.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 142pcy_map.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
142pcy_map.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 143pcy_map.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
143pcy_map.o: ../cryptlib.h pcy_int.h pcy_map.c 144pcy_map.o: ../../include/openssl/x509v3.h ../cryptlib.h pcy_int.h pcy_map.c
144pcy_node.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 145pcy_node.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
145pcy_node.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 146pcy_node.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
146pcy_node.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 147pcy_node.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
147pcy_node.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 148pcy_node.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
148pcy_node.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 149pcy_node.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
149pcy_node.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 150pcy_node.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
150pcy_node.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 151pcy_node.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
152pcy_node.o: ../../include/openssl/opensslconf.h
151pcy_node.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 153pcy_node.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
152pcy_node.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 154pcy_node.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
153pcy_node.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 155pcy_node.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -160,8 +162,9 @@ pcy_tree.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
160pcy_tree.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 162pcy_tree.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
161pcy_tree.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 163pcy_tree.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
162pcy_tree.o: ../../include/openssl/err.h ../../include/openssl/evp.h 164pcy_tree.o: ../../include/openssl/err.h ../../include/openssl/evp.h
163pcy_tree.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 165pcy_tree.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
164pcy_tree.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 166pcy_tree.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
167pcy_tree.o: ../../include/openssl/opensslconf.h
165pcy_tree.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 168pcy_tree.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
166pcy_tree.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 169pcy_tree.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
167pcy_tree.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 170pcy_tree.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -174,37 +177,39 @@ v3_addr.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
174v3_addr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 177v3_addr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
175v3_addr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 178v3_addr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
176v3_addr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 179v3_addr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
177v3_addr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 180v3_addr.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
178v3_addr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 181v3_addr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
179v3_addr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 182v3_addr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
180v3_addr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 183v3_addr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
181v3_addr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 184v3_addr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
182v3_addr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 185v3_addr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
183v3_addr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 186v3_addr.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
184v3_addr.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_addr.c 187v3_addr.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
188v3_addr.o: ../cryptlib.h v3_addr.c
185v3_akey.o: ../../e_os.h ../../include/openssl/asn1.h 189v3_akey.o: ../../e_os.h ../../include/openssl/asn1.h
186v3_akey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 190v3_akey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
187v3_akey.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 191v3_akey.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
188v3_akey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 192v3_akey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
189v3_akey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 193v3_akey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
190v3_akey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 194v3_akey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
191v3_akey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 195v3_akey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
192v3_akey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 196v3_akey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
193v3_akey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 197v3_akey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
194v3_akey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 198v3_akey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
195v3_akey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 199v3_akey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
196v3_akey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 200v3_akey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
197v3_akey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 201v3_akey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
198v3_akey.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_akey.c 202v3_akey.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
203v3_akey.o: ../cryptlib.h v3_akey.c
199v3_akeya.o: ../../e_os.h ../../include/openssl/asn1.h 204v3_akeya.o: ../../e_os.h ../../include/openssl/asn1.h
200v3_akeya.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 205v3_akeya.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
201v3_akeya.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 206v3_akeya.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
202v3_akeya.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 207v3_akeya.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
203v3_akeya.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 208v3_akeya.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
204v3_akeya.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 209v3_akeya.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
205v3_akeya.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 210v3_akeya.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
206v3_akeya.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 211v3_akeya.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
207v3_akeya.o: ../../include/openssl/opensslconf.h 212v3_akeya.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
208v3_akeya.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 213v3_akeya.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
209v3_akeya.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 214v3_akeya.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
210v3_akeya.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 215v3_akeya.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -216,14 +221,15 @@ v3_alt.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
216v3_alt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 221v3_alt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
217v3_alt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 222v3_alt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
218v3_alt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 223v3_alt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
219v3_alt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 224v3_alt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
220v3_alt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 225v3_alt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
221v3_alt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 226v3_alt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
222v3_alt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 227v3_alt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
223v3_alt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 228v3_alt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
224v3_alt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 229v3_alt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
225v3_alt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 230v3_alt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
226v3_alt.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_alt.c 231v3_alt.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
232v3_alt.o: ../cryptlib.h v3_alt.c
227v3_asid.o: ../../e_os.h ../../include/openssl/asn1.h 233v3_asid.o: ../../e_os.h ../../include/openssl/asn1.h
228v3_asid.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 234v3_asid.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
229v3_asid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 235v3_asid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
@@ -231,23 +237,23 @@ v3_asid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
231v3_asid.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 237v3_asid.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
232v3_asid.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 238v3_asid.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
233v3_asid.o: ../../include/openssl/err.h ../../include/openssl/evp.h 239v3_asid.o: ../../include/openssl/err.h ../../include/openssl/evp.h
234v3_asid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 240v3_asid.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
235v3_asid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 241v3_asid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
236v3_asid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 242v3_asid.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
237v3_asid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 243v3_asid.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
238v3_asid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 244v3_asid.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
239v3_asid.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 245v3_asid.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
240v3_asid.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 246v3_asid.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
241v3_asid.o: ../cryptlib.h v3_asid.c 247v3_asid.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_asid.c
242v3_bcons.o: ../../e_os.h ../../include/openssl/asn1.h 248v3_bcons.o: ../../e_os.h ../../include/openssl/asn1.h
243v3_bcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 249v3_bcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
244v3_bcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 250v3_bcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
245v3_bcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 251v3_bcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
246v3_bcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 252v3_bcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
247v3_bcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 253v3_bcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
248v3_bcons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 254v3_bcons.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
249v3_bcons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 255v3_bcons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
250v3_bcons.o: ../../include/openssl/opensslconf.h 256v3_bcons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
251v3_bcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 257v3_bcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
252v3_bcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 258v3_bcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
253v3_bcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 259v3_bcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -260,8 +266,9 @@ v3_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
260v3_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 266v3_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
261v3_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 267v3_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
262v3_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h 268v3_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
263v3_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 269v3_bitst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
264v3_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 270v3_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
271v3_bitst.o: ../../include/openssl/opensslconf.h
265v3_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 272v3_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
266v3_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 273v3_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
267v3_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 274v3_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -274,23 +281,23 @@ v3_conf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
274v3_conf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 281v3_conf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
275v3_conf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 282v3_conf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
276v3_conf.o: ../../include/openssl/err.h ../../include/openssl/evp.h 283v3_conf.o: ../../include/openssl/err.h ../../include/openssl/evp.h
277v3_conf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 284v3_conf.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
278v3_conf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 285v3_conf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
279v3_conf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 286v3_conf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
280v3_conf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 287v3_conf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
281v3_conf.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 288v3_conf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
282v3_conf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 289v3_conf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
283v3_conf.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 290v3_conf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
284v3_conf.o: ../cryptlib.h v3_conf.c 291v3_conf.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_conf.c
285v3_cpols.o: ../../e_os.h ../../include/openssl/asn1.h 292v3_cpols.o: ../../e_os.h ../../include/openssl/asn1.h
286v3_cpols.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 293v3_cpols.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
287v3_cpols.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 294v3_cpols.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
288v3_cpols.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 295v3_cpols.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
289v3_cpols.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 296v3_cpols.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
290v3_cpols.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 297v3_cpols.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
291v3_cpols.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 298v3_cpols.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
292v3_cpols.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 299v3_cpols.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
293v3_cpols.o: ../../include/openssl/opensslconf.h 300v3_cpols.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
294v3_cpols.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 301v3_cpols.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
295v3_cpols.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 302v3_cpols.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
296v3_cpols.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 303v3_cpols.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -303,37 +310,38 @@ v3_crld.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
303v3_crld.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 310v3_crld.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
304v3_crld.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 311v3_crld.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
305v3_crld.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 312v3_crld.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
306v3_crld.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 313v3_crld.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
307v3_crld.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 314v3_crld.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
308v3_crld.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 315v3_crld.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
309v3_crld.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 316v3_crld.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
310v3_crld.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 317v3_crld.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
311v3_crld.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 318v3_crld.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
312v3_crld.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 319v3_crld.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
313v3_crld.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_crld.c 320v3_crld.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
321v3_crld.o: ../cryptlib.h v3_crld.c
314v3_enum.o: ../../e_os.h ../../include/openssl/asn1.h 322v3_enum.o: ../../e_os.h ../../include/openssl/asn1.h
315v3_enum.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 323v3_enum.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
316v3_enum.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 324v3_enum.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
317v3_enum.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 325v3_enum.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
318v3_enum.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 326v3_enum.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
319v3_enum.o: ../../include/openssl/err.h ../../include/openssl/evp.h 327v3_enum.o: ../../include/openssl/err.h ../../include/openssl/evp.h
320v3_enum.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 328v3_enum.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
321v3_enum.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 329v3_enum.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
322v3_enum.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 330v3_enum.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
323v3_enum.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 331v3_enum.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
324v3_enum.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 332v3_enum.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
325v3_enum.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 333v3_enum.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
326v3_enum.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 334v3_enum.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
327v3_enum.o: ../cryptlib.h v3_enum.c 335v3_enum.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_enum.c
328v3_extku.o: ../../e_os.h ../../include/openssl/asn1.h 336v3_extku.o: ../../e_os.h ../../include/openssl/asn1.h
329v3_extku.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 337v3_extku.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
330v3_extku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 338v3_extku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
331v3_extku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 339v3_extku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
332v3_extku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 340v3_extku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
333v3_extku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 341v3_extku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
334v3_extku.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 342v3_extku.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
335v3_extku.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 343v3_extku.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
336v3_extku.o: ../../include/openssl/opensslconf.h 344v3_extku.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
337v3_extku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 345v3_extku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
338v3_extku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 346v3_extku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
339v3_extku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 347v3_extku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -346,76 +354,81 @@ v3_genn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
346v3_genn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 354v3_genn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
347v3_genn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 355v3_genn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
348v3_genn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 356v3_genn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
349v3_genn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 357v3_genn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
350v3_genn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 358v3_genn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
351v3_genn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 359v3_genn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
352v3_genn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 360v3_genn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
353v3_genn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 361v3_genn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
354v3_genn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 362v3_genn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
355v3_genn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 363v3_genn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
356v3_genn.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_genn.c 364v3_genn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
365v3_genn.o: ../cryptlib.h v3_genn.c
357v3_ia5.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 366v3_ia5.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
358v3_ia5.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 367v3_ia5.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
359v3_ia5.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 368v3_ia5.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
360v3_ia5.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 369v3_ia5.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
361v3_ia5.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 370v3_ia5.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
362v3_ia5.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 371v3_ia5.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
363v3_ia5.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 372v3_ia5.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
364v3_ia5.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 373v3_ia5.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
365v3_ia5.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 374v3_ia5.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
366v3_ia5.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 375v3_ia5.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
367v3_ia5.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 376v3_ia5.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
368v3_ia5.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 377v3_ia5.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
369v3_ia5.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_ia5.c 378v3_ia5.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
379v3_ia5.o: ../cryptlib.h v3_ia5.c
370v3_info.o: ../../e_os.h ../../include/openssl/asn1.h 380v3_info.o: ../../e_os.h ../../include/openssl/asn1.h
371v3_info.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 381v3_info.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
372v3_info.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 382v3_info.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
373v3_info.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 383v3_info.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
374v3_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 384v3_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
375v3_info.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 385v3_info.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
376v3_info.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 386v3_info.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
377v3_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 387v3_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
378v3_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 388v3_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
379v3_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 389v3_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
380v3_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 390v3_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
381v3_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 391v3_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
382v3_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 392v3_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
383v3_info.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_info.c 393v3_info.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
394v3_info.o: ../cryptlib.h v3_info.c
384v3_int.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 395v3_int.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
385v3_int.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 396v3_int.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
386v3_int.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 397v3_int.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
387v3_int.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 398v3_int.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
388v3_int.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 399v3_int.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
389v3_int.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 400v3_int.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
390v3_int.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 401v3_int.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
391v3_int.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 402v3_int.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
392v3_int.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 403v3_int.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
393v3_int.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 404v3_int.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
394v3_int.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 405v3_int.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
395v3_int.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 406v3_int.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
396v3_int.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_int.c 407v3_int.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
408v3_int.o: ../cryptlib.h v3_int.c
397v3_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 409v3_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
398v3_lib.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 410v3_lib.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
399v3_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 411v3_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
400v3_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 412v3_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
401v3_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 413v3_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
402v3_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 414v3_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
403v3_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 415v3_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
404v3_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 416v3_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
405v3_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 417v3_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
406v3_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 418v3_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
407v3_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 419v3_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
408v3_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 420v3_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
409v3_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h ext_dat.h v3_lib.c 421v3_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
422v3_lib.o: ../cryptlib.h ext_dat.h v3_lib.c
410v3_ncons.o: ../../e_os.h ../../include/openssl/asn1.h 423v3_ncons.o: ../../e_os.h ../../include/openssl/asn1.h
411v3_ncons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 424v3_ncons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
412v3_ncons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 425v3_ncons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
413v3_ncons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 426v3_ncons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
414v3_ncons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 427v3_ncons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
415v3_ncons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 428v3_ncons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
416v3_ncons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 429v3_ncons.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
417v3_ncons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 430v3_ncons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
418v3_ncons.o: ../../include/openssl/opensslconf.h 431v3_ncons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
419v3_ncons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 432v3_ncons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
420v3_ncons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 433v3_ncons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
421v3_ncons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 434v3_ncons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -428,49 +441,52 @@ v3_ocsp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
428v3_ocsp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 441v3_ocsp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
429v3_ocsp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 442v3_ocsp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
430v3_ocsp.o: ../../include/openssl/err.h ../../include/openssl/evp.h 443v3_ocsp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
431v3_ocsp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 444v3_ocsp.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
432v3_ocsp.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 445v3_ocsp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
433v3_ocsp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 446v3_ocsp.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
434v3_ocsp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 447v3_ocsp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
435v3_ocsp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 448v3_ocsp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
436v3_ocsp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 449v3_ocsp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
437v3_ocsp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 450v3_ocsp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
438v3_ocsp.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_ocsp.c 451v3_ocsp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
452v3_ocsp.o: ../cryptlib.h v3_ocsp.c
439v3_pci.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 453v3_pci.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
440v3_pci.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 454v3_pci.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
441v3_pci.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 455v3_pci.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
442v3_pci.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 456v3_pci.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
443v3_pci.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 457v3_pci.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
444v3_pci.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 458v3_pci.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
445v3_pci.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 459v3_pci.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
446v3_pci.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 460v3_pci.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
447v3_pci.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 461v3_pci.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
448v3_pci.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 462v3_pci.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
449v3_pci.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 463v3_pci.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
450v3_pci.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 464v3_pci.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
451v3_pci.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_pci.c 465v3_pci.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
466v3_pci.o: ../cryptlib.h v3_pci.c
452v3_pcia.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 467v3_pcia.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
453v3_pcia.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 468v3_pcia.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
454v3_pcia.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 469v3_pcia.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
455v3_pcia.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 470v3_pcia.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
456v3_pcia.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 471v3_pcia.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
457v3_pcia.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 472v3_pcia.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
458v3_pcia.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 473v3_pcia.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
459v3_pcia.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 474v3_pcia.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
460v3_pcia.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 475v3_pcia.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
461v3_pcia.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 476v3_pcia.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
462v3_pcia.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 477v3_pcia.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
463v3_pcia.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 478v3_pcia.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
464v3_pcia.o: ../../include/openssl/x509v3.h v3_pcia.c 479v3_pcia.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
480v3_pcia.o: v3_pcia.c
465v3_pcons.o: ../../e_os.h ../../include/openssl/asn1.h 481v3_pcons.o: ../../e_os.h ../../include/openssl/asn1.h
466v3_pcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 482v3_pcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
467v3_pcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 483v3_pcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
468v3_pcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 484v3_pcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
469v3_pcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 485v3_pcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
470v3_pcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 486v3_pcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
471v3_pcons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 487v3_pcons.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
472v3_pcons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 488v3_pcons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
473v3_pcons.o: ../../include/openssl/opensslconf.h 489v3_pcons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
474v3_pcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 490v3_pcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
475v3_pcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 491v3_pcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
476v3_pcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 492v3_pcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -483,23 +499,24 @@ v3_pku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
483v3_pku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 499v3_pku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
484v3_pku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 500v3_pku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
485v3_pku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 501v3_pku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
486v3_pku.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 502v3_pku.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
487v3_pku.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 503v3_pku.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
488v3_pku.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 504v3_pku.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
489v3_pku.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 505v3_pku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
490v3_pku.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 506v3_pku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
491v3_pku.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 507v3_pku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
492v3_pku.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 508v3_pku.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
493v3_pku.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_pku.c 509v3_pku.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
510v3_pku.o: ../cryptlib.h v3_pku.c
494v3_pmaps.o: ../../e_os.h ../../include/openssl/asn1.h 511v3_pmaps.o: ../../e_os.h ../../include/openssl/asn1.h
495v3_pmaps.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 512v3_pmaps.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
496v3_pmaps.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 513v3_pmaps.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
497v3_pmaps.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 514v3_pmaps.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
498v3_pmaps.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 515v3_pmaps.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
499v3_pmaps.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 516v3_pmaps.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
500v3_pmaps.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 517v3_pmaps.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
501v3_pmaps.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 518v3_pmaps.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
502v3_pmaps.o: ../../include/openssl/opensslconf.h 519v3_pmaps.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
503v3_pmaps.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 520v3_pmaps.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
504v3_pmaps.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 521v3_pmaps.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
505v3_pmaps.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 522v3_pmaps.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -511,51 +528,52 @@ v3_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
511v3_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 528v3_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
512v3_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 529v3_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
513v3_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 530v3_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
514v3_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 531v3_prn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
515v3_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 532v3_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
516v3_prn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 533v3_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
517v3_prn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 534v3_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
518v3_prn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 535v3_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
519v3_prn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 536v3_prn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
520v3_prn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 537v3_prn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
521v3_prn.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_prn.c 538v3_prn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
539v3_prn.o: ../cryptlib.h v3_prn.c
522v3_purp.o: ../../e_os.h ../../include/openssl/asn1.h 540v3_purp.o: ../../e_os.h ../../include/openssl/asn1.h
523v3_purp.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 541v3_purp.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
524v3_purp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 542v3_purp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
525v3_purp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 543v3_purp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
526v3_purp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 544v3_purp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
527v3_purp.o: ../../include/openssl/err.h ../../include/openssl/evp.h 545v3_purp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
528v3_purp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 546v3_purp.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
529v3_purp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 547v3_purp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
530v3_purp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 548v3_purp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
531v3_purp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 549v3_purp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
532v3_purp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 550v3_purp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
533v3_purp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 551v3_purp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
534v3_purp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 552v3_purp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
535v3_purp.o: ../cryptlib.h v3_purp.c 553v3_purp.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_purp.c
536v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h 554v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h
537v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 555v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
538v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 556v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
539v3_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 557v3_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
540v3_skey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 558v3_skey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
541v3_skey.o: ../../include/openssl/err.h ../../include/openssl/evp.h 559v3_skey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
542v3_skey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 560v3_skey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
543v3_skey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 561v3_skey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
544v3_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 562v3_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
545v3_skey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 563v3_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
546v3_skey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 564v3_skey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
547v3_skey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 565v3_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
548v3_skey.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 566v3_skey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
549v3_skey.o: ../cryptlib.h v3_skey.c 567v3_skey.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_skey.c
550v3_sxnet.o: ../../e_os.h ../../include/openssl/asn1.h 568v3_sxnet.o: ../../e_os.h ../../include/openssl/asn1.h
551v3_sxnet.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 569v3_sxnet.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
552v3_sxnet.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 570v3_sxnet.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
553v3_sxnet.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 571v3_sxnet.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
554v3_sxnet.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 572v3_sxnet.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
555v3_sxnet.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 573v3_sxnet.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
556v3_sxnet.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 574v3_sxnet.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
557v3_sxnet.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 575v3_sxnet.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
558v3_sxnet.o: ../../include/openssl/opensslconf.h 576v3_sxnet.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
559v3_sxnet.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 577v3_sxnet.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
560v3_sxnet.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 578v3_sxnet.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
561v3_sxnet.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 579v3_sxnet.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -568,24 +586,25 @@ v3_utl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
568v3_utl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 586v3_utl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
569v3_utl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 587v3_utl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
570v3_utl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 588v3_utl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
571v3_utl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 589v3_utl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
572v3_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 590v3_utl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
573v3_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 591v3_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
574v3_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 592v3_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
575v3_utl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 593v3_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
576v3_utl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 594v3_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
577v3_utl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 595v3_utl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
578v3_utl.o: ../cryptlib.h v3_utl.c 596v3_utl.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_utl.c
579v3err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 597v3err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
580v3err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 598v3err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
581v3err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 599v3err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
582v3err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 600v3err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
583v3err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 601v3err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
584v3err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 602v3err.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
585v3err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 603v3err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
586v3err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 604v3err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
587v3err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 605v3err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
588v3err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 606v3err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
589v3err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 607v3err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
590v3err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 608v3err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
591v3err.o: ../../include/openssl/x509v3.h v3err.c 609v3err.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
610v3err.o: v3err.c
diff --git a/src/lib/libssl/src/crypto/aes/Makefile b/src/lib/libssl/src/crypto/aes/Makefile
index 22c7203dbb..9d174f4c3e 100644
--- a/src/lib/libssl/src/crypto/aes/Makefile
+++ b/src/lib/libssl/src/crypto/aes/Makefile
@@ -41,7 +41,7 @@ top:
41all: lib 41all: lib
42 42
43lib: $(LIBOBJ) 43lib: $(LIBOBJ)
44 $(AR) $(LIB) $(LIBOBJ) 44 $(ARX) $(LIB) $(LIBOBJ)
45 $(RANLIB) $(LIB) || echo Never mind. 45 $(RANLIB) $(LIB) || echo Never mind.
46 @touch lib 46 @touch lib
47 47
@@ -103,7 +103,8 @@ aes_cfb.o: ../../e_os.h ../../include/openssl/aes.h
103aes_cfb.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 103aes_cfb.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
104aes_cfb.o: aes_cfb.c aes_locl.h 104aes_cfb.o: aes_cfb.c aes_locl.h
105aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 105aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
106aes_core.o: ../../include/openssl/opensslconf.h aes_core.c aes_locl.h 106aes_core.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
107aes_core.o: aes_core.c aes_locl.h
107aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 108aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
108aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h 109aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h
109aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 110aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
diff --git a/src/lib/libssl/src/crypto/asn1/Makefile b/src/lib/libssl/src/crypto/asn1/Makefile
index 63066899d0..94a6885804 100644
--- a/src/lib/libssl/src/crypto/asn1/Makefile
+++ b/src/lib/libssl/src/crypto/asn1/Makefile
@@ -63,7 +63,7 @@ pk: pk.c
63all: lib 63all: lib
64 64
65lib: $(LIBOBJ) 65lib: $(LIBOBJ)
66 $(AR) $(LIB) $(LIBOBJ) 66 $(ARX) $(LIB) $(LIBOBJ)
67 $(RANLIB) $(LIB) || echo Never mind. 67 $(RANLIB) $(LIB) || echo Never mind.
68 @touch lib 68 @touch lib
69 69
@@ -142,9 +142,9 @@ a_digest.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
142a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 142a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
143a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 143a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
144a_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 144a_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
145a_digest.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 145a_digest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
146a_digest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 146a_digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
147a_digest.o: ../../include/openssl/opensslconf.h 147a_digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
148a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 148a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
149a_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 149a_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
150a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 150a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -250,27 +250,27 @@ a_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
250a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 250a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
251a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 251a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
252a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 252a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
253a_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 253a_sign.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
254a_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 254a_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
255a_sign.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 255a_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
256a_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 256a_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
257a_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 257a_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
258a_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 258a_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
259a_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 259a_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
260a_sign.o: ../cryptlib.h a_sign.c 260a_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_sign.c
261a_strex.o: ../../e_os.h ../../include/openssl/asn1.h 261a_strex.o: ../../e_os.h ../../include/openssl/asn1.h
262a_strex.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 262a_strex.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
263a_strex.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 263a_strex.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
264a_strex.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 264a_strex.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
265a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 265a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
266a_strex.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 266a_strex.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
267a_strex.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 267a_strex.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
268a_strex.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 268a_strex.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
269a_strex.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 269a_strex.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
270a_strex.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 270a_strex.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
271a_strex.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 271a_strex.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
272a_strex.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 272a_strex.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
273a_strex.o: ../cryptlib.h a_strex.c charmap.h 273a_strex.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_strex.c charmap.h
274a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h 274a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h
275a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 275a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
276a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 276a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -318,8 +318,9 @@ a_verify.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
318a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 318a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
319a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 319a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
320a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h 320a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h
321a_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 321a_verify.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
322a_verify.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 322a_verify.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
323a_verify.o: ../../include/openssl/opensslconf.h
323a_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 324a_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
324a_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 325a_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
325a_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 326a_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -338,8 +339,9 @@ asn1_gen.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
338asn1_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 339asn1_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
339asn1_gen.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 340asn1_gen.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
340asn1_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h 341asn1_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h
341asn1_gen.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 342asn1_gen.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
342asn1_gen.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 343asn1_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
344asn1_gen.o: ../../include/openssl/opensslconf.h
343asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 345asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
344asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 346asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
345asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 347asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -369,8 +371,9 @@ asn_mime.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
369asn_mime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 371asn_mime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
370asn_mime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 372asn_mime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
371asn_mime.o: ../../include/openssl/err.h ../../include/openssl/evp.h 373asn_mime.o: ../../include/openssl/err.h ../../include/openssl/evp.h
372asn_mime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 374asn_mime.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
373asn_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 375asn_mime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
376asn_mime.o: ../../include/openssl/opensslconf.h
374asn_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 377asn_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
375asn_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 378asn_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
376asn_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 379asn_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -383,9 +386,9 @@ asn_moid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
383asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h 386asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
384asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 387asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
385asn_moid.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 388asn_moid.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
386asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 389asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
387asn_moid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 390asn_moid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
388asn_moid.o: ../../include/openssl/opensslconf.h 391asn_moid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
389asn_moid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 392asn_moid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
390asn_moid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 393asn_moid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
391asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 394asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -404,23 +407,23 @@ d2i_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
404d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 407d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
405d2i_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 408d2i_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
406d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h 409d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
407d2i_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 410d2i_pr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
408d2i_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 411d2i_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
409d2i_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 412d2i_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
410d2i_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 413d2i_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
411d2i_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 414d2i_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
412d2i_pr.o: ../cryptlib.h d2i_pr.c 415d2i_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pr.c
413d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 416d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
414d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 417d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
415d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 418d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
416d2i_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 419d2i_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
417d2i_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h 420d2i_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
418d2i_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 421d2i_pu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
419d2i_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 422d2i_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
420d2i_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 423d2i_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
421d2i_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 424d2i_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
422d2i_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 425d2i_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
423d2i_pu.o: ../cryptlib.h d2i_pu.c 426d2i_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pu.c
424evp_asn1.o: ../../e_os.h ../../include/openssl/asn1.h 427evp_asn1.o: ../../e_os.h ../../include/openssl/asn1.h
425evp_asn1.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h 428evp_asn1.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
426evp_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 429evp_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
@@ -456,71 +459,73 @@ i2d_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
456i2d_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 459i2d_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
457i2d_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 460i2d_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
458i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h 461i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
459i2d_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 462i2d_pr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
460i2d_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 463i2d_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
461i2d_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 464i2d_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
462i2d_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 465i2d_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
463i2d_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 466i2d_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
464i2d_pr.o: ../cryptlib.h i2d_pr.c 467i2d_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pr.c
465i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 468i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
466i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 469i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
467i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 470i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
468i2d_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 471i2d_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
469i2d_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h 472i2d_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
470i2d_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 473i2d_pu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
471i2d_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 474i2d_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
472i2d_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 475i2d_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
473i2d_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 476i2d_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
474i2d_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 477i2d_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
475i2d_pu.o: ../cryptlib.h i2d_pu.c 478i2d_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pu.c
476n_pkey.o: ../../e_os.h ../../include/openssl/asn1.h 479n_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
477n_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h 480n_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h
478n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 481n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
479n_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 482n_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
480n_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 483n_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
481n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 484n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
482n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 485n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
483n_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 486n_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
484n_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 487n_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
485n_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 488n_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
486n_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 489n_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
487n_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 490n_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
488n_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 491n_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
489n_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h n_pkey.c 492n_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
493n_pkey.o: ../cryptlib.h n_pkey.c
490nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 494nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
491nsseq.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 495nsseq.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
492nsseq.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 496nsseq.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
493nsseq.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 497nsseq.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
494nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 498nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
495nsseq.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 499nsseq.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
496nsseq.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 500nsseq.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
497nsseq.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 501nsseq.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
498nsseq.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 502nsseq.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
499nsseq.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 503nsseq.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
500nsseq.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 504nsseq.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
501nsseq.o: ../../include/openssl/x509_vfy.h nsseq.c 505nsseq.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h nsseq.c
502p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h 506p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h
503p5_pbe.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 507p5_pbe.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
504p5_pbe.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 508p5_pbe.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
505p5_pbe.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 509p5_pbe.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
506p5_pbe.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 510p5_pbe.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
507p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h 511p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h
508p5_pbe.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 512p5_pbe.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
509p5_pbe.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 513p5_pbe.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
510p5_pbe.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 514p5_pbe.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
511p5_pbe.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 515p5_pbe.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
512p5_pbe.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 516p5_pbe.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
513p5_pbe.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 517p5_pbe.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
514p5_pbe.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 518p5_pbe.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
515p5_pbe.o: ../cryptlib.h p5_pbe.c 519p5_pbe.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p5_pbe.c
516p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h 520p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h
517p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 521p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
518p5_pbev2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 522p5_pbev2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
519p5_pbev2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 523p5_pbev2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
520p5_pbev2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 524p5_pbev2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
521p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h 525p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h
522p5_pbev2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 526p5_pbev2.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
523p5_pbev2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 527p5_pbev2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
528p5_pbev2.o: ../../include/openssl/opensslconf.h
524p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 529p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
525p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 530p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
526p5_pbev2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 531p5_pbev2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -533,41 +538,42 @@ p8_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
533p8_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 538p8_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
534p8_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 539p8_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
535p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h 540p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
536p8_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 541p8_pkey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
537p8_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 542p8_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
538p8_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 543p8_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
539p8_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 544p8_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
540p8_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 545p8_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
541p8_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 546p8_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
542p8_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p8_pkey.c 547p8_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
548p8_pkey.o: ../cryptlib.h p8_pkey.c
543t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h 549t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h
544t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 550t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
545t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 551t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
546t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 552t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
547t_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 553t_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
548t_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h 554t_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
549t_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 555t_bitst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
550t_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 556t_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
551t_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 557t_bitst.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
552t_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 558t_bitst.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
553t_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 559t_bitst.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
554t_bitst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 560t_bitst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
555t_bitst.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 561t_bitst.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
556t_bitst.o: ../cryptlib.h t_bitst.c 562t_bitst.o: ../../include/openssl/x509v3.h ../cryptlib.h t_bitst.c
557t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 563t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
558t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 564t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
559t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 565t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
560t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 566t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
561t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 567t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
562t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 568t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
563t_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 569t_crl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
564t_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 570t_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
565t_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 571t_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
566t_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 572t_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
567t_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 573t_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
568t_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 574t_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
569t_crl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 575t_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
570t_crl.o: ../cryptlib.h t_crl.c 576t_crl.o: ../../include/openssl/x509v3.h ../cryptlib.h t_crl.c
571t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 577t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
572t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 578t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
573t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h 579t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
@@ -585,57 +591,57 @@ t_req.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
585t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 591t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
586t_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 592t_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
587t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 593t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
588t_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 594t_req.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
589t_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 595t_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
590t_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 596t_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
591t_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 597t_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
592t_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 598t_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
593t_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 599t_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
594t_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 600t_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
595t_req.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 601t_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
596t_req.o: ../cryptlib.h t_req.c 602t_req.o: ../../include/openssl/x509v3.h ../cryptlib.h t_req.c
597t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 603t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
598t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 604t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
599t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 605t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
600t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 606t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
601t_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 607t_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
602t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h 608t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
603t_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 609t_spki.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
604t_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 610t_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
605t_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 611t_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
606t_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h 612t_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
607t_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 613t_spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
608t_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 614t_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
609t_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 615t_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
610t_spki.o: ../cryptlib.h t_spki.c 616t_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_spki.c
611t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 617t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
612t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 618t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
613t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 619t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
614t_x509.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 620t_x509.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
615t_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 621t_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
616t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 622t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
617t_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 623t_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
618t_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 624t_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
619t_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 625t_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
620t_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 626t_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
621t_x509.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 627t_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
622t_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 628t_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
623t_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 629t_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
624t_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 630t_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
625t_x509.o: ../cryptlib.h t_x509.c 631t_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h t_x509.c
626t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h 632t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
627t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 633t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
628t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 634t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
629t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 635t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
630t_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 636t_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
631t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 637t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
632t_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 638t_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
633t_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 639t_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
634t_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 640t_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
635t_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 641t_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
636t_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 642t_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
637t_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 643t_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
638t_x509a.o: ../cryptlib.h t_x509a.c 644t_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_x509a.c
639tasn_dec.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 645tasn_dec.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
640tasn_dec.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 646tasn_dec.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
641tasn_dec.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 647tasn_dec.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -688,21 +694,23 @@ x_algor.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
688x_algor.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 694x_algor.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
689x_algor.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 695x_algor.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
690x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 696x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
691x_algor.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 697x_algor.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
692x_algor.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 698x_algor.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
693x_algor.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 699x_algor.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
694x_algor.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 700x_algor.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
695x_algor.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 701x_algor.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
696x_algor.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 702x_algor.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
697x_algor.o: ../../include/openssl/x509_vfy.h x_algor.c 703x_algor.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
704x_algor.o: x_algor.c
698x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h 705x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h
699x_attrib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 706x_attrib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
700x_attrib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 707x_attrib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
701x_attrib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 708x_attrib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
702x_attrib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 709x_attrib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
703x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 710x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
704x_attrib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 711x_attrib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
705x_attrib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 712x_attrib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
713x_attrib.o: ../../include/openssl/opensslconf.h
706x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 714x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
707x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 715x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
708x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 716x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -723,37 +731,40 @@ x_crl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
723x_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 731x_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
724x_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 732x_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
725x_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 733x_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
726x_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 734x_crl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
727x_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 735x_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
728x_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 736x_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
729x_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 737x_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
730x_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 738x_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
731x_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 739x_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
732x_crl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_crl.c 740x_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
741x_crl.o: ../cryptlib.h x_crl.c
733x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 742x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
734x_exten.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 743x_exten.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
735x_exten.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 744x_exten.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
736x_exten.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 745x_exten.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
737x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 746x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
738x_exten.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 747x_exten.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
739x_exten.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 748x_exten.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
740x_exten.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 749x_exten.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
741x_exten.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 750x_exten.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
742x_exten.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 751x_exten.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
743x_exten.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 752x_exten.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
744x_exten.o: ../../include/openssl/x509_vfy.h x_exten.c 753x_exten.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
754x_exten.o: x_exten.c
745x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 755x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
746x_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 756x_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
747x_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 757x_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
748x_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 758x_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
749x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h 759x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
750x_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 760x_info.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
751x_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 761x_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
752x_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 762x_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
753x_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 763x_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
754x_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 764x_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
755x_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 765x_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
756x_info.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_info.c 766x_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
767x_info.o: ../cryptlib.h x_info.c
757x_long.o: ../../e_os.h ../../include/openssl/asn1.h 768x_long.o: ../../e_os.h ../../include/openssl/asn1.h
758x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 769x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
759x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 770x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
@@ -769,35 +780,37 @@ x_name.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
769x_name.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 780x_name.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
770x_name.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 781x_name.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
771x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h 782x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h
772x_name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 783x_name.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
773x_name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 784x_name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
774x_name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 785x_name.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
775x_name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 786x_name.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
776x_name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 787x_name.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
777x_name.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 788x_name.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
778x_name.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_name.c 789x_name.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
790x_name.o: ../cryptlib.h x_name.c
779x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h 791x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
780x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h 792x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
781x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 793x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
782x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 794x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
783x_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 795x_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
784x_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h 796x_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
785x_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 797x_pkey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
786x_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 798x_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
787x_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 799x_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
788x_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 800x_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
789x_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 801x_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
790x_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 802x_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
791x_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_pkey.c 803x_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
804x_pkey.o: ../cryptlib.h x_pkey.c
792x_pubkey.o: ../../e_os.h ../../include/openssl/asn1.h 805x_pubkey.o: ../../e_os.h ../../include/openssl/asn1.h
793x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 806x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
794x_pubkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 807x_pubkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
795x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 808x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
796x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 809x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
797x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 810x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
798x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 811x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
799x_pubkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 812x_pubkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
800x_pubkey.o: ../../include/openssl/opensslconf.h 813x_pubkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
801x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 814x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
802x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h 815x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
803x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 816x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -810,76 +823,82 @@ x_req.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
810x_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 823x_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
811x_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 824x_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
812x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h 825x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
813x_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 826x_req.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
814x_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 827x_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
815x_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 828x_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
816x_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 829x_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
817x_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 830x_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
818x_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 831x_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
819x_req.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_req.c 832x_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
833x_req.o: ../cryptlib.h x_req.c
820x_sig.o: ../../e_os.h ../../include/openssl/asn1.h 834x_sig.o: ../../e_os.h ../../include/openssl/asn1.h
821x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 835x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
822x_sig.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 836x_sig.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
823x_sig.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 837x_sig.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
824x_sig.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 838x_sig.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
825x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h 839x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h
826x_sig.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 840x_sig.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
827x_sig.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 841x_sig.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
828x_sig.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 842x_sig.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
829x_sig.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 843x_sig.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
830x_sig.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 844x_sig.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
831x_sig.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 845x_sig.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
832x_sig.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_sig.c 846x_sig.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
847x_sig.o: ../cryptlib.h x_sig.c
833x_spki.o: ../../e_os.h ../../include/openssl/asn1.h 848x_spki.o: ../../e_os.h ../../include/openssl/asn1.h
834x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 849x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
835x_spki.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 850x_spki.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
836x_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 851x_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
837x_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 852x_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
838x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h 853x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
839x_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 854x_spki.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
840x_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 855x_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
841x_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 856x_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
842x_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 857x_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
843x_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 858x_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
844x_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 859x_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
845x_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_spki.c 860x_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
861x_spki.o: ../cryptlib.h x_spki.c
846x_val.o: ../../e_os.h ../../include/openssl/asn1.h 862x_val.o: ../../e_os.h ../../include/openssl/asn1.h
847x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 863x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
848x_val.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 864x_val.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
849x_val.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 865x_val.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
850x_val.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 866x_val.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
851x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h 867x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h
852x_val.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 868x_val.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
853x_val.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 869x_val.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
854x_val.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 870x_val.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
855x_val.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 871x_val.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
856x_val.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 872x_val.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
857x_val.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 873x_val.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
858x_val.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_val.c 874x_val.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
875x_val.o: ../cryptlib.h x_val.c
859x_x509.o: ../../e_os.h ../../include/openssl/asn1.h 876x_x509.o: ../../e_os.h ../../include/openssl/asn1.h
860x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 877x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
861x_x509.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 878x_x509.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
862x_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 879x_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
863x_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 880x_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
864x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 881x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
865x_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 882x_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
866x_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 883x_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
867x_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 884x_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
868x_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 885x_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
869x_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 886x_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
870x_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 887x_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
871x_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 888x_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
872x_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h x_x509.c 889x_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
890x_x509.o: ../cryptlib.h x_x509.c
873x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h 891x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
874x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 892x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
875x_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 893x_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
876x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 894x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
877x_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 895x_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
878x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h 896x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h
879x_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 897x_x509a.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
880x_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 898x_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
881x_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 899x_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
882x_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 900x_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
883x_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 901x_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
884x_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 902x_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
885x_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_x509a.c 903x_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
904x_x509a.o: ../cryptlib.h x_x509a.c
diff --git a/src/lib/libssl/src/crypto/bf/Makefile b/src/lib/libssl/src/crypto/bf/Makefile
index 8441954a8d..7f4f03eb82 100644
--- a/src/lib/libssl/src/crypto/bf/Makefile
+++ b/src/lib/libssl/src/crypto/bf/Makefile
@@ -40,7 +40,7 @@ top:
40all: lib 40all: lib
41 41
42lib: $(LIBOBJ) 42lib: $(LIBOBJ)
43 $(AR) $(LIB) $(LIBOBJ) 43 $(ARX) $(LIB) $(LIBOBJ)
44 $(RANLIB) $(LIB) || echo Never mind. 44 $(RANLIB) $(LIB) || echo Never mind.
45 @touch lib 45 @touch lib
46 46
@@ -103,5 +103,9 @@ bf_enc.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
103bf_enc.o: ../../include/openssl/opensslconf.h bf_enc.c bf_locl.h 103bf_enc.o: ../../include/openssl/opensslconf.h bf_enc.c bf_locl.h
104bf_ofb64.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h 104bf_ofb64.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
105bf_ofb64.o: ../../include/openssl/opensslconf.h bf_locl.h bf_ofb64.c 105bf_ofb64.o: ../../include/openssl/opensslconf.h bf_locl.h bf_ofb64.c
106bf_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h 106bf_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/crypto.h
107bf_skey.o: ../../include/openssl/opensslconf.h bf_locl.h bf_pi.h bf_skey.c 107bf_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
108bf_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
109bf_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
110bf_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
111bf_skey.o: bf_locl.h bf_pi.h bf_skey.c
diff --git a/src/lib/libssl/src/crypto/bio/Makefile b/src/lib/libssl/src/crypto/bio/Makefile
index 1ef6c2fb9f..1cd76ce7a2 100644
--- a/src/lib/libssl/src/crypto/bio/Makefile
+++ b/src/lib/libssl/src/crypto/bio/Makefile
@@ -45,7 +45,7 @@ top:
45all: lib 45all: lib
46 46
47lib: $(LIBOBJ) 47lib: $(LIBOBJ)
48 $(AR) $(LIB) $(LIBOBJ) 48 $(ARX) $(LIB) $(LIBOBJ)
49 $(RANLIB) $(LIB) || echo Never mind. 49 $(RANLIB) $(LIB) || echo Never mind.
50 @touch lib 50 @touch lib
51 51
diff --git a/src/lib/libssl/src/crypto/bn/bn_opt.c b/src/lib/libssl/src/crypto/bn/bn_opt.c
new file mode 100644
index 0000000000..21cbb38f62
--- /dev/null
+++ b/src/lib/libssl/src/crypto/bn/bn_opt.c
@@ -0,0 +1,87 @@
1/* crypto/bn/bn_opt.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#ifndef BN_DEBUG
60# undef NDEBUG /* avoid conflicting definitions */
61# define NDEBUG
62#endif
63
64#include <assert.h>
65#include <limits.h>
66#include <stdio.h>
67#include "cryptlib.h"
68#include "bn_lcl.h"
69
70char *BN_options(void)
71 {
72 static int init=0;
73 static char data[16];
74
75 if (!init)
76 {
77 init++;
78#ifdef BN_LLONG
79 BIO_snprintf(data,sizeof data,"bn(%d,%d)",
80 (int)sizeof(BN_ULLONG)*8,(int)sizeof(BN_ULONG)*8);
81#else
82 BIO_snprintf(data,sizeof data,"bn(%d,%d)",
83 (int)sizeof(BN_ULONG)*8,(int)sizeof(BN_ULONG)*8);
84#endif
85 }
86 return(data);
87 }
diff --git a/src/lib/libssl/src/crypto/buffer/Makefile b/src/lib/libssl/src/crypto/buffer/Makefile
index 9f3a88d2d6..9e0f46e19a 100644
--- a/src/lib/libssl/src/crypto/buffer/Makefile
+++ b/src/lib/libssl/src/crypto/buffer/Makefile
@@ -17,8 +17,8 @@ TEST=
17APPS= 17APPS=
18 18
19LIB=$(TOP)/libcrypto.a 19LIB=$(TOP)/libcrypto.a
20LIBSRC= buffer.c buf_err.c 20LIBSRC= buffer.c buf_str.c buf_err.c
21LIBOBJ= buffer.o buf_err.o 21LIBOBJ= buffer.o buf_str.o buf_err.o
22 22
23SRC= $(LIBSRC) 23SRC= $(LIBSRC)
24 24
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -81,6 +81,13 @@ buf_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
81buf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h 81buf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
82buf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 82buf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
83buf_err.o: buf_err.c 83buf_err.o: buf_err.c
84buf_str.o: ../../e_os.h ../../include/openssl/bio.h
85buf_str.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
86buf_str.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
87buf_str.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
88buf_str.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
89buf_str.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
90buf_str.o: ../../include/openssl/symhacks.h ../cryptlib.h buf_str.c
84buffer.o: ../../e_os.h ../../include/openssl/bio.h 91buffer.o: ../../e_os.h ../../include/openssl/bio.h
85buffer.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 92buffer.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
86buffer.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 93buffer.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
diff --git a/src/lib/libssl/src/crypto/cast/Makefile b/src/lib/libssl/src/crypto/cast/Makefile
index 149956ee90..2e026dbe0d 100644
--- a/src/lib/libssl/src/crypto/cast/Makefile
+++ b/src/lib/libssl/src/crypto/cast/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -102,5 +102,8 @@ c_ofb64.o: ../../e_os.h ../../include/openssl/cast.h
102c_ofb64.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 102c_ofb64.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
103c_ofb64.o: c_ofb64.c cast_lcl.h 103c_ofb64.o: c_ofb64.c cast_lcl.h
104c_skey.o: ../../e_os.h ../../include/openssl/cast.h 104c_skey.o: ../../e_os.h ../../include/openssl/cast.h
105c_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 105c_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
106c_skey.o: c_skey.c cast_lcl.h cast_s.h 106c_skey.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
107c_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108c_skey.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109c_skey.o: ../../include/openssl/symhacks.h c_skey.c cast_lcl.h cast_s.h
diff --git a/src/lib/libssl/src/crypto/comp/Makefile b/src/lib/libssl/src/crypto/comp/Makefile
index efda832dce..5d364b8513 100644
--- a/src/lib/libssl/src/crypto/comp/Makefile
+++ b/src/lib/libssl/src/crypto/comp/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
diff --git a/src/lib/libssl/src/crypto/conf/Makefile b/src/lib/libssl/src/crypto/conf/Makefile
index 78bb324106..ccd0721332 100644
--- a/src/lib/libssl/src/crypto/conf/Makefile
+++ b/src/lib/libssl/src/crypto/conf/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
@@ -114,8 +114,8 @@ conf_mall.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
114conf_mall.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 114conf_mall.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
115conf_mall.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h 115conf_mall.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
116conf_mall.o: ../../include/openssl/err.h ../../include/openssl/evp.h 116conf_mall.o: ../../include/openssl/err.h ../../include/openssl/evp.h
117conf_mall.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 117conf_mall.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
118conf_mall.o: ../../include/openssl/objects.h 118conf_mall.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
119conf_mall.o: ../../include/openssl/opensslconf.h 119conf_mall.o: ../../include/openssl/opensslconf.h
120conf_mall.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 120conf_mall.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
121conf_mall.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 121conf_mall.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -128,9 +128,9 @@ conf_mod.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
128conf_mod.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h 128conf_mod.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
129conf_mod.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 129conf_mod.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
130conf_mod.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 130conf_mod.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
131conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 131conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
132conf_mod.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 132conf_mod.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
133conf_mod.o: ../../include/openssl/opensslconf.h 133conf_mod.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
134conf_mod.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 134conf_mod.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
135conf_mod.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 135conf_mod.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
136conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 136conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -143,8 +143,9 @@ conf_sap.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
143conf_sap.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 143conf_sap.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
144conf_sap.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h 144conf_sap.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
145conf_sap.o: ../../include/openssl/err.h ../../include/openssl/evp.h 145conf_sap.o: ../../include/openssl/err.h ../../include/openssl/evp.h
146conf_sap.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 146conf_sap.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
147conf_sap.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 147conf_sap.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
148conf_sap.o: ../../include/openssl/opensslconf.h
148conf_sap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 149conf_sap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
149conf_sap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 150conf_sap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
150conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 151conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
diff --git a/src/lib/libssl/src/crypto/des/Makefile b/src/lib/libssl/src/crypto/des/Makefile
index 523dfe38f2..786e68802e 100644
--- a/src/lib/libssl/src/crypto/des/Makefile
+++ b/src/lib/libssl/src/crypto/des/Makefile
@@ -24,7 +24,7 @@ TEST=destest.c
24APPS= 24APPS=
25 25
26LIB=$(TOP)/libcrypto.a 26LIB=$(TOP)/libcrypto.a
27LIBSRC= cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \ 27LIBSRC= des_lib.c cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \
28 ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c \ 28 ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c \
29 fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c \ 29 fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c \
30 qud_cksm.c rand_key.c rpc_enc.c set_key.c \ 30 qud_cksm.c rand_key.c rpc_enc.c set_key.c \
@@ -33,7 +33,7 @@ LIBSRC= cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \
33 str2key.c cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_old.c des_old2.c \ 33 str2key.c cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_old.c des_old2.c \
34 read2pwd.c 34 read2pwd.c
35 35
36LIBOBJ= set_key.o ecb_enc.o cbc_enc.o \ 36LIBOBJ= des_lib.o set_key.o ecb_enc.o cbc_enc.o \
37 ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o ofb64ede.o \ 37 ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o ofb64ede.o \
38 enc_read.o enc_writ.o ofb64enc.o \ 38 enc_read.o enc_writ.o ofb64enc.o \
39 ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o rand_key.o \ 39 ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o rand_key.o \
@@ -54,7 +54,7 @@ top:
54all: lib 54all: lib
55 55
56lib: $(LIBOBJ) 56lib: $(LIBOBJ)
57 $(AR) $(LIB) $(LIBOBJ) 57 $(ARX) $(LIB) $(LIBOBJ)
58 $(RANLIB) $(LIB) || echo Never mind. 58 $(RANLIB) $(LIB) || echo Never mind.
59 @touch lib 59 @touch lib
60 60
@@ -157,6 +157,13 @@ des_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
157des_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 157des_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
158des_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 158des_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
159des_enc.o: des_enc.c des_locl.h ncbc_enc.c 159des_enc.o: des_enc.c des_locl.h ncbc_enc.c
160des_lib.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
161des_lib.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
162des_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
163des_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
164des_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
165des_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
166des_lib.o: ../../include/openssl/ui_compat.h des_lib.c des_locl.h des_ver.h
160des_old.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 167des_old.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
161des_old.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 168des_old.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
162des_old.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h 169des_old.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
@@ -175,14 +182,12 @@ ecb3_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
175ecb3_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 182ecb3_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
176ecb3_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 183ecb3_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
177ecb3_enc.o: des_locl.h ecb3_enc.c 184ecb3_enc.o: des_locl.h ecb3_enc.c
178ecb_enc.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
179ecb_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 185ecb_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
180ecb_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 186ecb_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
181ecb_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 187ecb_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
182ecb_enc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 188ecb_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
183ecb_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h 189ecb_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
184ecb_enc.o: ../../include/openssl/ui_compat.h des_locl.h des_ver.h ecb_enc.c 190ecb_enc.o: des_locl.h ecb_enc.c spr.h
185ecb_enc.o: spr.h
186ede_cbcm_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 191ede_cbcm_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
187ede_cbcm_enc.o: ../../include/openssl/e_os2.h 192ede_cbcm_enc.o: ../../include/openssl/e_os2.h
188ede_cbcm_enc.o: ../../include/openssl/opensslconf.h 193ede_cbcm_enc.o: ../../include/openssl/opensslconf.h
@@ -272,11 +277,11 @@ rpc_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
272rpc_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 277rpc_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
273rpc_enc.o: des_locl.h des_ver.h rpc_des.h rpc_enc.c 278rpc_enc.o: des_locl.h des_ver.h rpc_des.h rpc_enc.c
274set_key.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 279set_key.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
275set_key.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 280set_key.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
276set_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h 281set_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/ossl_typ.h
277set_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 282set_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
278set_key.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 283set_key.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
279set_key.o: des_locl.h set_key.c 284set_key.o: ../../include/openssl/ui_compat.h des_locl.h set_key.c
280str2key.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 285str2key.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
281str2key.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h 286str2key.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
282str2key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 287str2key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
diff --git a/src/lib/libssl/src/crypto/des/des_lib.c b/src/lib/libssl/src/crypto/des/des_lib.c
new file mode 100644
index 0000000000..d4b3047932
--- /dev/null
+++ b/src/lib/libssl/src/crypto/des/des_lib.c
@@ -0,0 +1,106 @@
1/* crypto/des/ecb_enc.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 "des_locl.h"
60#include "des_ver.h"
61#include <openssl/opensslv.h>
62#include <openssl/bio.h>
63
64OPENSSL_GLOBAL const char libdes_version[]="libdes" OPENSSL_VERSION_PTEXT;
65OPENSSL_GLOBAL const char DES_version[]="DES" OPENSSL_VERSION_PTEXT;
66
67const char *DES_options(void)
68 {
69 static int init=1;
70 static char buf[32];
71
72 if (init)
73 {
74 const char *ptr,*unroll,*risc,*size;
75
76#ifdef DES_PTR
77 ptr="ptr";
78#else
79 ptr="idx";
80#endif
81#if defined(DES_RISC1) || defined(DES_RISC2)
82#ifdef DES_RISC1
83 risc="risc1";
84#endif
85#ifdef DES_RISC2
86 risc="risc2";
87#endif
88#else
89 risc="cisc";
90#endif
91#ifdef DES_UNROLL
92 unroll="16";
93#else
94 unroll="4";
95#endif
96 if (sizeof(DES_LONG) != sizeof(long))
97 size="int";
98 else
99 size="long";
100 BIO_snprintf(buf,sizeof buf,"des(%s,%s,%s,%s)",ptr,risc,unroll,
101 size);
102 init=0;
103 }
104 return(buf);
105 }
106
diff --git a/src/lib/libssl/src/crypto/dsa/dsa_utl.c b/src/lib/libssl/src/crypto/dsa/dsa_utl.c
new file mode 100644
index 0000000000..24c021d120
--- /dev/null
+++ b/src/lib/libssl/src/crypto/dsa/dsa_utl.c
@@ -0,0 +1,95 @@
1/* crypto/dsa/dsa_lib.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/* Original version from Steven Schoch <schoch@sheba.arc.nasa.gov> */
60
61#include <stdio.h>
62#include "cryptlib.h"
63#include <openssl/bn.h>
64#include <openssl/dsa.h>
65#include <openssl/asn1.h>
66#ifndef OPENSSL_NO_ENGINE
67#include <openssl/engine.h>
68#endif
69#ifndef OPENSSL_NO_DH
70#include <openssl/dh.h>
71#endif
72
73DSA_SIG *DSA_SIG_new(void)
74 {
75 DSA_SIG *sig;
76 sig = OPENSSL_malloc(sizeof(DSA_SIG));
77 if (!sig)
78 return NULL;
79 sig->r = NULL;
80 sig->s = NULL;
81 return sig;
82 }
83
84void DSA_SIG_free(DSA_SIG *sig)
85 {
86 if (sig)
87 {
88 if (sig->r)
89 BN_free(sig->r);
90 if (sig->s)
91 BN_free(sig->s);
92 OPENSSL_free(sig);
93 }
94 }
95
diff --git a/src/lib/libssl/src/crypto/dso/Makefile b/src/lib/libssl/src/crypto/dso/Makefile
index 07f5d8d159..52f152888c 100644
--- a/src/lib/libssl/src/crypto/dso/Makefile
+++ b/src/lib/libssl/src/crypto/dso/Makefile
@@ -35,7 +35,7 @@ top:
35all: lib 35all: lib
36 36
37lib: $(LIBOBJ) 37lib: $(LIBOBJ)
38 $(AR) $(LIB) $(LIBOBJ) 38 $(ARX) $(LIB) $(LIBOBJ)
39 $(RANLIB) $(LIB) || echo Never mind. 39 $(RANLIB) $(LIB) || echo Never mind.
40 @touch lib 40 @touch lib
41 41
diff --git a/src/lib/libssl/src/crypto/dyn_lck.c b/src/lib/libssl/src/crypto/dyn_lck.c
new file mode 100644
index 0000000000..7f82c41264
--- /dev/null
+++ b/src/lib/libssl/src/crypto/dyn_lck.c
@@ -0,0 +1,428 @@
1/* crypto/cryptlib.c */
2/* ====================================================================
3 * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@openssl.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
56 * All rights reserved.
57 *
58 * This package is an SSL implementation written
59 * by Eric Young (eay@cryptsoft.com).
60 * The implementation was written so as to conform with Netscapes SSL.
61 *
62 * This library is free for commercial and non-commercial use as long as
63 * the following conditions are aheared to. The following conditions
64 * apply to all code found in this distribution, be it the RC4, RSA,
65 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
66 * included with this distribution is covered by the same copyright terms
67 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
68 *
69 * Copyright remains Eric Young's, and as such any Copyright notices in
70 * the code are not to be removed.
71 * If this package is used in a product, Eric Young should be given attribution
72 * as the author of the parts of the library used.
73 * This can be in the form of a textual message at program startup or
74 * in documentation (online or textual) provided with the package.
75 *
76 * Redistribution and use in source and binary forms, with or without
77 * modification, are permitted provided that the following conditions
78 * are met:
79 * 1. Redistributions of source code must retain the copyright
80 * notice, this list of conditions and the following disclaimer.
81 * 2. Redistributions in binary form must reproduce the above copyright
82 * notice, this list of conditions and the following disclaimer in the
83 * documentation and/or other materials provided with the distribution.
84 * 3. All advertising materials mentioning features or use of this software
85 * must display the following acknowledgement:
86 * "This product includes cryptographic software written by
87 * Eric Young (eay@cryptsoft.com)"
88 * The word 'cryptographic' can be left out if the rouines from the library
89 * being used are not cryptographic related :-).
90 * 4. If you include any Windows specific code (or a derivative thereof) from
91 * the apps directory (application code) you must include an acknowledgement:
92 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
93 *
94 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
95 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
96 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
97 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
98 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
99 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
100 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
101 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
102 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
103 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
104 * SUCH DAMAGE.
105 *
106 * The licence and distribution terms for any publically available version or
107 * derivative of this code cannot be changed. i.e. this code cannot simply be
108 * copied and put under another distribution licence
109 * [including the GNU Public Licence.]
110 */
111/* ====================================================================
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113 * ECDH support in OpenSSL originally developed by
114 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115 */
116
117#include "cryptlib.h"
118#include <openssl/safestack.h>
119
120#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16)
121static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */
122#endif
123
124DECLARE_STACK_OF(CRYPTO_dynlock)
125IMPLEMENT_STACK_OF(CRYPTO_dynlock)
126
127/* real #defines in crypto.h, keep these upto date */
128static const char* const lock_names[CRYPTO_NUM_LOCKS] =
129 {
130 "<<ERROR>>",
131 "err",
132 "ex_data",
133 "x509",
134 "x509_info",
135 "x509_pkey",
136 "x509_crl",
137 "x509_req",
138 "dsa",
139 "rsa",
140 "evp_pkey",
141 "x509_store",
142 "ssl_ctx",
143 "ssl_cert",
144 "ssl_session",
145 "ssl_sess_cert",
146 "ssl",
147 "ssl_method",
148 "rand",
149 "rand2",
150 "debug_malloc",
151 "BIO",
152 "gethostbyname",
153 "getservbyname",
154 "readdir",
155 "RSA_blinding",
156 "dh",
157 "debug_malloc2",
158 "dso",
159 "dynlock",
160 "engine",
161 "ui",
162 "ecdsa",
163 "ec",
164 "ecdh",
165 "bn",
166 "ec_pre_comp",
167 "store",
168 "comp",
169#ifndef OPENSSL_FIPS
170# if CRYPTO_NUM_LOCKS != 39
171# error "Inconsistency between crypto.h and cryptlib.c"
172# endif
173#else
174 "fips",
175 "fips2",
176# if CRYPTO_NUM_LOCKS != 41
177# error "Inconsistency between crypto.h and cryptlib.c"
178# endif
179#endif
180 };
181
182/* This is for applications to allocate new type names in the non-dynamic
183 array of lock names. These are numbered with positive numbers. */
184static STACK *app_locks=NULL;
185
186/* For applications that want a more dynamic way of handling threads, the
187 following stack is used. These are externally numbered with negative
188 numbers. */
189static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
190
191
192static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
193 (const char *file,int line)=NULL;
194static void (MS_FAR *dynlock_lock_callback)(int mode,
195 struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
196static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
197 const char *file,int line)=NULL;
198
199int CRYPTO_get_new_lockid(char *name)
200 {
201 char *str;
202 int i;
203
204#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16)
205 /* A hack to make Visual C++ 5.0 work correctly when linking as
206 * a DLL using /MT. Without this, the application cannot use
207 * and floating point printf's.
208 * It also seems to be needed for Visual C 1.5 (win16) */
209 SSLeay_MSVC5_hack=(double)name[0]*(double)name[1];
210#endif
211
212 if ((app_locks == NULL) && ((app_locks=sk_new_null()) == NULL))
213 {
214 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE);
215 return(0);
216 }
217 if ((str=BUF_strdup(name)) == NULL)
218 {
219 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE);
220 return(0);
221 }
222 i=sk_push(app_locks,str);
223 if (!i)
224 OPENSSL_free(str);
225 else
226 i+=CRYPTO_NUM_LOCKS; /* gap of one :-) */
227 return(i);
228 }
229
230int CRYPTO_get_new_dynlockid(void)
231 {
232 int i = 0;
233 CRYPTO_dynlock *pointer = NULL;
234
235 if (dynlock_create_callback == NULL)
236 {
237 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK);
238 return(0);
239 }
240 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
241 if ((dyn_locks == NULL)
242 && ((dyn_locks=sk_CRYPTO_dynlock_new_null()) == NULL))
243 {
244 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
245 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
246 return(0);
247 }
248 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
249
250 pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock));
251 if (pointer == NULL)
252 {
253 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
254 return(0);
255 }
256 pointer->references = 1;
257 pointer->data = dynlock_create_callback(__FILE__,__LINE__);
258 if (pointer->data == NULL)
259 {
260 OPENSSL_free(pointer);
261 CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
262 return(0);
263 }
264
265 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
266 /* First, try to find an existing empty slot */
267 i=sk_CRYPTO_dynlock_find(dyn_locks,NULL);
268 /* If there was none, push, thereby creating a new one */
269 if (i == -1)
270 /* Since sk_push() returns the number of items on the
271 stack, not the location of the pushed item, we need
272 to transform the returned number into a position,
273 by decreasing it. */
274 i=sk_CRYPTO_dynlock_push(dyn_locks,pointer) - 1;
275 else
276 /* If we found a place with a NULL pointer, put our pointer
277 in it. */
278 (void)sk_CRYPTO_dynlock_set(dyn_locks,i,pointer);
279 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
280
281 if (i == -1)
282 {
283 dynlock_destroy_callback(pointer->data,__FILE__,__LINE__);
284 OPENSSL_free(pointer);
285 }
286 else
287 i += 1; /* to avoid 0 */
288 return -i;
289 }
290
291void CRYPTO_destroy_dynlockid(int i)
292 {
293 CRYPTO_dynlock *pointer = NULL;
294 if (i)
295 i = -i-1;
296 if (dynlock_destroy_callback == NULL)
297 return;
298
299 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
300
301 if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks))
302 {
303 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
304 return;
305 }
306 pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
307 if (pointer != NULL)
308 {
309 --pointer->references;
310#ifdef REF_CHECK
311 if (pointer->references < 0)
312 {
313 fprintf(stderr,"CRYPTO_destroy_dynlockid, bad reference count\n");
314 abort();
315 }
316 else
317#endif
318 if (pointer->references <= 0)
319 {
320 (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL);
321 }
322 else
323 pointer = NULL;
324 }
325 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
326
327 if (pointer)
328 {
329 dynlock_destroy_callback(pointer->data,__FILE__,__LINE__);
330 OPENSSL_free(pointer);
331 }
332 }
333
334struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i)
335 {
336 CRYPTO_dynlock *pointer = NULL;
337 if (i)
338 i = -i-1;
339
340 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
341
342 if (dyn_locks != NULL && i < sk_CRYPTO_dynlock_num(dyn_locks))
343 pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
344 if (pointer)
345 pointer->references++;
346
347 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
348
349 if (pointer)
350 return pointer->data;
351 return NULL;
352 }
353
354struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))
355 (const char *file,int line)
356 {
357 return(dynlock_create_callback);
358 }
359
360void (*CRYPTO_get_dynlock_lock_callback(void))(int mode,
361 struct CRYPTO_dynlock_value *l, const char *file,int line)
362 {
363 return(dynlock_lock_callback);
364 }
365
366void (*CRYPTO_get_dynlock_destroy_callback(void))
367 (struct CRYPTO_dynlock_value *l, const char *file,int line)
368 {
369 return(dynlock_destroy_callback);
370 }
371
372void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func)
373 (const char *file, int line))
374 {
375 dynlock_create_callback=func;
376 }
377
378static void do_dynlock(int mode, int type, const char *file, int line)
379 {
380 if (dynlock_lock_callback != NULL)
381 {
382 struct CRYPTO_dynlock_value *pointer
383 = CRYPTO_get_dynlock_value(type);
384
385 OPENSSL_assert(pointer != NULL);
386
387 dynlock_lock_callback(mode, pointer, file, line);
388
389 CRYPTO_destroy_dynlockid(type);
390 }
391 }
392
393void CRYPTO_set_dynlock_lock_callback(void (*func)(int mode,
394 struct CRYPTO_dynlock_value *l, const char *file, int line))
395 {
396 /* Set callback so CRYPTO_lock() can now handle dynamic locks.
397 * This is OK because at this point and application shouldn't be using
398 * OpenSSL from multiple threads because it is setting up the locking
399 * callbacks.
400 */
401 static int done = 0;
402 if (!done)
403 {
404 int_CRYPTO_set_do_dynlock_callback(do_dynlock);
405 done = 1;
406 }
407
408 dynlock_lock_callback=func;
409 }
410
411void CRYPTO_set_dynlock_destroy_callback(void (*func)
412 (struct CRYPTO_dynlock_value *l, const char *file, int line))
413 {
414 dynlock_destroy_callback=func;
415 }
416
417const char *CRYPTO_get_lock_name(int type)
418 {
419 if (type < 0)
420 return("dynamic");
421 else if (type < CRYPTO_NUM_LOCKS)
422 return(lock_names[type]);
423 else if (type-CRYPTO_NUM_LOCKS > sk_num(app_locks))
424 return("ERROR");
425 else
426 return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS));
427 }
428
diff --git a/src/lib/libssl/src/crypto/ec/Makefile b/src/lib/libssl/src/crypto/ec/Makefile
index 42f7bb7fc8..b5bbc9faa1 100644
--- a/src/lib/libssl/src/crypto/ec/Makefile
+++ b/src/lib/libssl/src/crypto/ec/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
diff --git a/src/lib/libssl/src/crypto/engine/eng_padlock.c b/src/lib/libssl/src/crypto/engine/eng_padlock.c
index 1ba9d85db4..743558ab33 100644
--- a/src/lib/libssl/src/crypto/engine/eng_padlock.c
+++ b/src/lib/libssl/src/crypto/engine/eng_padlock.c
@@ -234,8 +234,8 @@ padlock_bind_fn(ENGINE *e, const char *id)
234 return 1; 234 return 1;
235} 235}
236 236
237IMPLEMENT_DYNAMIC_CHECK_FN (); 237IMPLEMENT_DYNAMIC_CHECK_FN ()
238IMPLEMENT_DYNAMIC_BIND_FN (padlock_bind_fn); 238IMPLEMENT_DYNAMIC_BIND_FN (padlock_bind_fn)
239#endif /* DYNAMIC_ENGINE */ 239#endif /* DYNAMIC_ENGINE */
240 240
241/* ===== Here comes the "real" engine ===== */ 241/* ===== Here comes the "real" engine ===== */
diff --git a/src/lib/libssl/src/crypto/err/Makefile b/src/lib/libssl/src/crypto/err/Makefile
index 23e38409c8..91d1379d41 100644
--- a/src/lib/libssl/src/crypto/err/Makefile
+++ b/src/lib/libssl/src/crypto/err/Makefile
@@ -17,8 +17,8 @@ TEST=
17APPS= 17APPS=
18 18
19LIB=$(TOP)/libcrypto.a 19LIB=$(TOP)/libcrypto.a
20LIBSRC=err.c err_all.c err_prn.c 20LIBSRC=err.c err_def.c err_all.c err_prn.c err_str.c err_bio.c
21LIBOBJ=err.o err_all.o err_prn.o 21LIBOBJ=err.o err_def.o err_all.o err_prn.o err_str.o err_bio.o
22 22
23SRC= $(LIBSRC) 23SRC= $(LIBSRC)
24 24
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -89,17 +89,31 @@ err_all.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
89err_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 89err_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
90err_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h 90err_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
91err_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h 91err_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h
92err_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 92err_all.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
93err_all.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 93err_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
94err_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 94err_all.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
95err_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem2.h 95err_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
96err_all.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 96err_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
97err_all.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h 97err_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
98err_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 98err_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
99err_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 99err_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
100err_all.o: ../../include/openssl/ui.h ../../include/openssl/x509.h 100err_all.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
101err_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 101err_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
102err_all.o: err_all.c 102err_all.o: ../../include/openssl/x509v3.h err_all.c
103err_bio.o: ../../e_os.h ../../include/openssl/bio.h
104err_bio.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
105err_bio.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
106err_bio.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
107err_bio.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108err_bio.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109err_bio.o: ../../include/openssl/symhacks.h ../cryptlib.h err_bio.c
110err_def.o: ../../e_os.h ../../include/openssl/bio.h
111err_def.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
112err_def.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
113err_def.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
114err_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
115err_def.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
116err_def.o: ../../include/openssl/symhacks.h ../cryptlib.h err_def.c
103err_prn.o: ../../e_os.h ../../include/openssl/bio.h 117err_prn.o: ../../e_os.h ../../include/openssl/bio.h
104err_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 118err_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
105err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 119err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
@@ -107,3 +121,10 @@ err_prn.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
107err_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 121err_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108err_prn.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 122err_prn.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109err_prn.o: ../../include/openssl/symhacks.h ../cryptlib.h err_prn.c 123err_prn.o: ../../include/openssl/symhacks.h ../cryptlib.h err_prn.c
124err_str.o: ../../e_os.h ../../include/openssl/bio.h
125err_str.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
126err_str.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
127err_str.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
128err_str.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
129err_str.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
130err_str.o: ../../include/openssl/symhacks.h ../cryptlib.h err_str.c
diff --git a/src/lib/libssl/src/crypto/err/err_bio.c b/src/lib/libssl/src/crypto/err/err_bio.c
new file mode 100644
index 0000000000..a42f804840
--- /dev/null
+++ b/src/lib/libssl/src/crypto/err/err_bio.c
@@ -0,0 +1,75 @@
1/* crypto/err/err_prn.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/lhash.h>
62#include <openssl/crypto.h>
63#include <openssl/buffer.h>
64#include <openssl/err.h>
65
66static int print_bio(const char *str, size_t len, void *bp)
67 {
68 return BIO_write((BIO *)bp, str, len);
69 }
70void ERR_print_errors(BIO *bp)
71 {
72 ERR_print_errors_cb(print_bio, bp);
73 }
74
75
diff --git a/src/lib/libssl/src/crypto/err/err_def.c b/src/lib/libssl/src/crypto/err/err_def.c
new file mode 100644
index 0000000000..7ed3d84955
--- /dev/null
+++ b/src/lib/libssl/src/crypto/err/err_def.c
@@ -0,0 +1,665 @@
1/* crypto/err/err_def.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 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#include <stdio.h>
113#include <stdarg.h>
114#include <string.h>
115#include "cryptlib.h"
116#include <openssl/lhash.h>
117#include <openssl/crypto.h>
118#include <openssl/buffer.h>
119#include <openssl/bio.h>
120#include <openssl/err.h>
121
122#define err_clear_data(p,i) \
123 do { \
124 if (((p)->err_data[i] != NULL) && \
125 (p)->err_data_flags[i] & ERR_TXT_MALLOCED) \
126 { \
127 OPENSSL_free((p)->err_data[i]); \
128 (p)->err_data[i]=NULL; \
129 } \
130 (p)->err_data_flags[i]=0; \
131 } while(0)
132
133#define err_clear(p,i) \
134 do { \
135 (p)->err_flags[i]=0; \
136 (p)->err_buffer[i]=0; \
137 err_clear_data(p,i); \
138 (p)->err_file[i]=NULL; \
139 (p)->err_line[i]= -1; \
140 } while(0)
141
142static void err_load_strings(int lib, ERR_STRING_DATA *str);
143
144static void ERR_STATE_free(ERR_STATE *s);
145
146/* Define the predeclared (but externally opaque) "ERR_FNS" type */
147struct st_ERR_FNS
148 {
149 /* Works on the "error_hash" string table */
150 LHASH *(*cb_err_get)(int create);
151 void (*cb_err_del)(void);
152 ERR_STRING_DATA *(*cb_err_get_item)(const ERR_STRING_DATA *);
153 ERR_STRING_DATA *(*cb_err_set_item)(ERR_STRING_DATA *);
154 ERR_STRING_DATA *(*cb_err_del_item)(ERR_STRING_DATA *);
155 /* Works on the "thread_hash" error-state table */
156 LHASH *(*cb_thread_get)(int create);
157 void (*cb_thread_release)(LHASH **hash);
158 ERR_STATE *(*cb_thread_get_item)(const ERR_STATE *);
159 ERR_STATE *(*cb_thread_set_item)(ERR_STATE *);
160 void (*cb_thread_del_item)(const ERR_STATE *);
161 /* Returns the next available error "library" numbers */
162 int (*cb_get_next_lib)(void);
163 };
164
165/* Predeclarations of the "err_defaults" functions */
166static LHASH *int_err_get(int create);
167static void int_err_del(void);
168static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *);
169static ERR_STRING_DATA *int_err_set_item(ERR_STRING_DATA *);
170static ERR_STRING_DATA *int_err_del_item(ERR_STRING_DATA *);
171static LHASH *int_thread_get(int create);
172static void int_thread_release(LHASH **hash);
173static ERR_STATE *int_thread_get_item(const ERR_STATE *);
174static ERR_STATE *int_thread_set_item(ERR_STATE *);
175static void int_thread_del_item(const ERR_STATE *);
176static int int_err_get_next_lib(void);
177/* The static ERR_FNS table using these defaults functions */
178static const ERR_FNS err_defaults =
179 {
180 int_err_get,
181 int_err_del,
182 int_err_get_item,
183 int_err_set_item,
184 int_err_del_item,
185 int_thread_get,
186 int_thread_release,
187 int_thread_get_item,
188 int_thread_set_item,
189 int_thread_del_item,
190 int_err_get_next_lib
191 };
192
193/* The replacable table of ERR_FNS functions we use at run-time */
194static const ERR_FNS *err_fns = NULL;
195
196/* Eg. rather than using "err_get()", use "ERRFN(err_get)()". */
197#define ERRFN(a) err_fns->cb_##a
198
199/* The internal state used by "err_defaults" - as such, the setting, reading,
200 * creating, and deleting of this data should only be permitted via the
201 * "err_defaults" functions. This way, a linked module can completely defer all
202 * ERR state operation (together with requisite locking) to the implementations
203 * and state in the loading application. */
204static LHASH *int_error_hash = NULL;
205static LHASH *int_thread_hash = NULL;
206static int int_thread_hash_references = 0;
207static int int_err_library_number= ERR_LIB_USER;
208
209/* Internal function that checks whether "err_fns" is set and if not, sets it to
210 * the defaults. */
211static void err_fns_check(void)
212 {
213 if (err_fns) return;
214
215 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
216 if (!err_fns)
217 err_fns = &err_defaults;
218 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
219 }
220
221/* API functions to get or set the underlying ERR functions. */
222
223const ERR_FNS *ERR_get_implementation(void)
224 {
225 err_fns_check();
226 return err_fns;
227 }
228
229int ERR_set_implementation(const ERR_FNS *fns)
230 {
231 int ret = 0;
232
233 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
234 /* It's too late if 'err_fns' is non-NULL. BTW: not much point setting
235 * an error is there?! */
236 if (!err_fns)
237 {
238 err_fns = fns;
239 ret = 1;
240 }
241 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
242 return ret;
243 }
244
245/* These are the callbacks provided to "lh_new()" when creating the LHASH tables
246 * internal to the "err_defaults" implementation. */
247
248/* static unsigned long err_hash(ERR_STRING_DATA *a); */
249static unsigned long err_hash(const void *a_void);
250/* static int err_cmp(ERR_STRING_DATA *a, ERR_STRING_DATA *b); */
251static int err_cmp(const void *a_void, const void *b_void);
252/* static unsigned long pid_hash(ERR_STATE *pid); */
253static unsigned long pid_hash(const void *pid_void);
254/* static int pid_cmp(ERR_STATE *a,ERR_STATE *pid); */
255static int pid_cmp(const void *a_void,const void *pid_void);
256
257/* The internal functions used in the "err_defaults" implementation */
258
259static LHASH *int_err_get(int create)
260 {
261 LHASH *ret = NULL;
262
263 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
264 if (!int_error_hash && create)
265 {
266 CRYPTO_push_info("int_err_get (err.c)");
267 int_error_hash = lh_new(err_hash, err_cmp);
268 CRYPTO_pop_info();
269 }
270 if (int_error_hash)
271 ret = int_error_hash;
272 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
273
274 return ret;
275 }
276
277static void int_err_del(void)
278 {
279 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
280 if (int_error_hash)
281 {
282 lh_free(int_error_hash);
283 int_error_hash = NULL;
284 }
285 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
286 }
287
288static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *d)
289 {
290 ERR_STRING_DATA *p;
291 LHASH *hash;
292
293 err_fns_check();
294 hash = ERRFN(err_get)(0);
295 if (!hash)
296 return NULL;
297
298 CRYPTO_r_lock(CRYPTO_LOCK_ERR);
299 p = (ERR_STRING_DATA *)lh_retrieve(hash, d);
300 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
301
302 return p;
303 }
304
305static ERR_STRING_DATA *int_err_set_item(ERR_STRING_DATA *d)
306 {
307 ERR_STRING_DATA *p;
308 LHASH *hash;
309
310 err_fns_check();
311 hash = ERRFN(err_get)(1);
312 if (!hash)
313 return NULL;
314
315 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
316 p = (ERR_STRING_DATA *)lh_insert(hash, d);
317 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
318
319 return p;
320 }
321
322static ERR_STRING_DATA *int_err_del_item(ERR_STRING_DATA *d)
323 {
324 ERR_STRING_DATA *p;
325 LHASH *hash;
326
327 err_fns_check();
328 hash = ERRFN(err_get)(0);
329 if (!hash)
330 return NULL;
331
332 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
333 p = (ERR_STRING_DATA *)lh_delete(hash, d);
334 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
335
336 return p;
337 }
338
339static LHASH *int_thread_get(int create)
340 {
341 LHASH *ret = NULL;
342
343 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
344 if (!int_thread_hash && create)
345 {
346 CRYPTO_push_info("int_thread_get (err.c)");
347 int_thread_hash = lh_new(pid_hash, pid_cmp);
348 CRYPTO_pop_info();
349 }
350 if (int_thread_hash)
351 {
352 int_thread_hash_references++;
353 ret = int_thread_hash;
354 }
355 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
356 return ret;
357 }
358
359static void int_thread_release(LHASH **hash)
360 {
361 int i;
362
363 if (hash == NULL || *hash == NULL)
364 return;
365
366 i = CRYPTO_add(&int_thread_hash_references, -1, CRYPTO_LOCK_ERR);
367
368#ifdef REF_PRINT
369 fprintf(stderr,"%4d:%s\n",int_thread_hash_references,"ERR");
370#endif
371 if (i > 0) return;
372#ifdef REF_CHECK
373 if (i < 0)
374 {
375 fprintf(stderr,"int_thread_release, bad reference count\n");
376 abort(); /* ok */
377 }
378#endif
379 *hash = NULL;
380 }
381
382static ERR_STATE *int_thread_get_item(const ERR_STATE *d)
383 {
384 ERR_STATE *p;
385 LHASH *hash;
386
387 err_fns_check();
388 hash = ERRFN(thread_get)(0);
389 if (!hash)
390 return NULL;
391
392 CRYPTO_r_lock(CRYPTO_LOCK_ERR);
393 p = (ERR_STATE *)lh_retrieve(hash, d);
394 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
395
396 ERRFN(thread_release)(&hash);
397 return p;
398 }
399
400static ERR_STATE *int_thread_set_item(ERR_STATE *d)
401 {
402 ERR_STATE *p;
403 LHASH *hash;
404
405 err_fns_check();
406 hash = ERRFN(thread_get)(1);
407 if (!hash)
408 return NULL;
409
410 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
411 p = (ERR_STATE *)lh_insert(hash, d);
412 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
413
414 ERRFN(thread_release)(&hash);
415 return p;
416 }
417
418static void int_thread_del_item(const ERR_STATE *d)
419 {
420 ERR_STATE *p;
421 LHASH *hash;
422
423 err_fns_check();
424 hash = ERRFN(thread_get)(0);
425 if (!hash)
426 return;
427
428 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
429 p = (ERR_STATE *)lh_delete(hash, d);
430 /* make sure we don't leak memory */
431 if (int_thread_hash_references == 1
432 && int_thread_hash && (lh_num_items(int_thread_hash) == 0))
433 {
434 lh_free(int_thread_hash);
435 int_thread_hash = NULL;
436 }
437 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
438
439 ERRFN(thread_release)(&hash);
440 if (p)
441 ERR_STATE_free(p);
442 }
443
444static int int_err_get_next_lib(void)
445 {
446 int ret;
447
448 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
449 ret = int_err_library_number++;
450 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
451
452 return ret;
453 }
454
455static void ERR_STATE_free(ERR_STATE *s)
456 {
457 int i;
458
459 if (s == NULL)
460 return;
461
462 for (i=0; i<ERR_NUM_ERRORS; i++)
463 {
464 err_clear_data(s,i);
465 }
466 OPENSSL_free(s);
467 }
468
469static void err_load_strings(int lib, ERR_STRING_DATA *str)
470 {
471 while (str->error)
472 {
473 if (lib)
474 str->error|=ERR_PACK(lib,0,0);
475 ERRFN(err_set_item)(str);
476 str++;
477 }
478 }
479
480void ERR_load_strings(int lib, ERR_STRING_DATA *str)
481 {
482 err_fns_check();
483 err_load_strings(lib, str);
484 }
485
486void ERR_unload_strings(int lib, ERR_STRING_DATA *str)
487 {
488 while (str->error)
489 {
490 if (lib)
491 str->error|=ERR_PACK(lib,0,0);
492 ERRFN(err_del_item)(str);
493 str++;
494 }
495 }
496
497void ERR_free_strings(void)
498 {
499 err_fns_check();
500 ERRFN(err_del)();
501 }
502
503LHASH *ERR_get_string_table(void)
504 {
505 err_fns_check();
506 return ERRFN(err_get)(0);
507 }
508
509LHASH *ERR_get_err_state_table(void)
510 {
511 err_fns_check();
512 return ERRFN(thread_get)(0);
513 }
514
515void ERR_release_err_state_table(LHASH **hash)
516 {
517 err_fns_check();
518 ERRFN(thread_release)(hash);
519 }
520
521const char *ERR_lib_error_string(unsigned long e)
522 {
523 ERR_STRING_DATA d,*p;
524 unsigned long l;
525
526 err_fns_check();
527 l=ERR_GET_LIB(e);
528 d.error=ERR_PACK(l,0,0);
529 p=ERRFN(err_get_item)(&d);
530 return((p == NULL)?NULL:p->string);
531 }
532
533const char *ERR_func_error_string(unsigned long e)
534 {
535 ERR_STRING_DATA d,*p;
536 unsigned long l,f;
537
538 err_fns_check();
539 l=ERR_GET_LIB(e);
540 f=ERR_GET_FUNC(e);
541 d.error=ERR_PACK(l,f,0);
542 p=ERRFN(err_get_item)(&d);
543 return((p == NULL)?NULL:p->string);
544 }
545
546const char *ERR_reason_error_string(unsigned long e)
547 {
548 ERR_STRING_DATA d,*p=NULL;
549 unsigned long l,r;
550
551 err_fns_check();
552 l=ERR_GET_LIB(e);
553 r=ERR_GET_REASON(e);
554 d.error=ERR_PACK(l,0,r);
555 p=ERRFN(err_get_item)(&d);
556 if (!p)
557 {
558 d.error=ERR_PACK(0,0,r);
559 p=ERRFN(err_get_item)(&d);
560 }
561 return((p == NULL)?NULL:p->string);
562 }
563
564/* static unsigned long err_hash(ERR_STRING_DATA *a) */
565static unsigned long err_hash(const void *a_void)
566 {
567 unsigned long ret,l;
568
569 l=((const ERR_STRING_DATA *)a_void)->error;
570 ret=l^ERR_GET_LIB(l)^ERR_GET_FUNC(l);
571 return(ret^ret%19*13);
572 }
573
574/* static int err_cmp(ERR_STRING_DATA *a, ERR_STRING_DATA *b) */
575static int err_cmp(const void *a_void, const void *b_void)
576 {
577 return((int)(((const ERR_STRING_DATA *)a_void)->error -
578 ((const ERR_STRING_DATA *)b_void)->error));
579 }
580
581/* static unsigned long pid_hash(ERR_STATE *a) */
582static unsigned long pid_hash(const void *a_void)
583 {
584 return(((const ERR_STATE *)a_void)->pid*13);
585 }
586
587/* static int pid_cmp(ERR_STATE *a, ERR_STATE *b) */
588static int pid_cmp(const void *a_void, const void *b_void)
589 {
590 return((int)((long)((const ERR_STATE *)a_void)->pid -
591 (long)((const ERR_STATE *)b_void)->pid));
592 }
593#ifdef OPENSSL_FIPS
594static void int_err_remove_state(unsigned long pid)
595#else
596void ERR_remove_state(unsigned long pid)
597#endif
598 {
599 ERR_STATE tmp;
600
601 err_fns_check();
602 if (pid == 0)
603 pid=(unsigned long)CRYPTO_thread_id();
604 tmp.pid=pid;
605 /* thread_del_item automatically destroys the LHASH if the number of
606 * items reaches zero. */
607 ERRFN(thread_del_item)(&tmp);
608 }
609
610#ifdef OPENSSL_FIPS
611 static ERR_STATE *int_err_get_state(void)
612#else
613ERR_STATE *ERR_get_state(void)
614#endif
615 {
616 static ERR_STATE fallback;
617 ERR_STATE *ret,tmp,*tmpp=NULL;
618 int i;
619 unsigned long pid;
620
621 err_fns_check();
622 pid=(unsigned long)CRYPTO_thread_id();
623 tmp.pid=pid;
624 ret=ERRFN(thread_get_item)(&tmp);
625
626 /* ret == the error state, if NULL, make a new one */
627 if (ret == NULL)
628 {
629 ret=(ERR_STATE *)OPENSSL_malloc(sizeof(ERR_STATE));
630 if (ret == NULL) return(&fallback);
631 ret->pid=pid;
632 ret->top=0;
633 ret->bottom=0;
634 for (i=0; i<ERR_NUM_ERRORS; i++)
635 {
636 ret->err_data[i]=NULL;
637 ret->err_data_flags[i]=0;
638 }
639 tmpp = ERRFN(thread_set_item)(ret);
640 /* To check if insertion failed, do a get. */
641 if (ERRFN(thread_get_item)(ret) != ret)
642 {
643 ERR_STATE_free(ret); /* could not insert it */
644 return(&fallback);
645 }
646 /* If a race occured in this function and we came second, tmpp
647 * is the first one that we just replaced. */
648 if (tmpp)
649 ERR_STATE_free(tmpp);
650 }
651 return ret;
652 }
653
654#ifdef OPENSSL_FIPS
655void int_ERR_lib_init(void)
656 {
657 int_ERR_set_state_func(int_err_get_state, int_err_remove_state);
658 }
659#endif
660
661int ERR_get_next_error_library(void)
662 {
663 err_fns_check();
664 return ERRFN(get_next_lib)();
665 }
diff --git a/src/lib/libssl/src/crypto/err/err_str.c b/src/lib/libssl/src/crypto/err/err_str.c
new file mode 100644
index 0000000000..d39040888d
--- /dev/null
+++ b/src/lib/libssl/src/crypto/err/err_str.c
@@ -0,0 +1,295 @@
1/* crypto/err/err_str.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 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#include <stdio.h>
113#include <stdarg.h>
114#include <string.h>
115#include "cryptlib.h"
116#include <openssl/lhash.h>
117#include <openssl/crypto.h>
118#include <openssl/buffer.h>
119#include <openssl/bio.h>
120#include <openssl/err.h>
121
122#ifndef OPENSSL_NO_ERR
123static ERR_STRING_DATA ERR_str_libraries[]=
124 {
125{ERR_PACK(ERR_LIB_NONE,0,0) ,"unknown library"},
126{ERR_PACK(ERR_LIB_SYS,0,0) ,"system library"},
127{ERR_PACK(ERR_LIB_BN,0,0) ,"bignum routines"},
128{ERR_PACK(ERR_LIB_RSA,0,0) ,"rsa routines"},
129{ERR_PACK(ERR_LIB_DH,0,0) ,"Diffie-Hellman routines"},
130{ERR_PACK(ERR_LIB_EVP,0,0) ,"digital envelope routines"},
131{ERR_PACK(ERR_LIB_BUF,0,0) ,"memory buffer routines"},
132{ERR_PACK(ERR_LIB_OBJ,0,0) ,"object identifier routines"},
133{ERR_PACK(ERR_LIB_PEM,0,0) ,"PEM routines"},
134{ERR_PACK(ERR_LIB_DSA,0,0) ,"dsa routines"},
135{ERR_PACK(ERR_LIB_X509,0,0) ,"x509 certificate routines"},
136{ERR_PACK(ERR_LIB_ASN1,0,0) ,"asn1 encoding routines"},
137{ERR_PACK(ERR_LIB_CONF,0,0) ,"configuration file routines"},
138{ERR_PACK(ERR_LIB_CRYPTO,0,0) ,"common libcrypto routines"},
139{ERR_PACK(ERR_LIB_EC,0,0) ,"elliptic curve routines"},
140{ERR_PACK(ERR_LIB_SSL,0,0) ,"SSL routines"},
141{ERR_PACK(ERR_LIB_BIO,0,0) ,"BIO routines"},
142{ERR_PACK(ERR_LIB_PKCS7,0,0) ,"PKCS7 routines"},
143{ERR_PACK(ERR_LIB_X509V3,0,0) ,"X509 V3 routines"},
144{ERR_PACK(ERR_LIB_PKCS12,0,0) ,"PKCS12 routines"},
145{ERR_PACK(ERR_LIB_RAND,0,0) ,"random number generator"},
146{ERR_PACK(ERR_LIB_DSO,0,0) ,"DSO support routines"},
147{ERR_PACK(ERR_LIB_ENGINE,0,0) ,"engine routines"},
148{ERR_PACK(ERR_LIB_OCSP,0,0) ,"OCSP routines"},
149{ERR_PACK(ERR_LIB_FIPS,0,0) ,"FIPS routines"},
150{ERR_PACK(ERR_LIB_CMS,0,0) ,"CMS routines"},
151{ERR_PACK(ERR_LIB_JPAKE,0,0) ,"JPAKE routines"},
152{0,NULL},
153 };
154
155static ERR_STRING_DATA ERR_str_functs[]=
156 {
157 {ERR_PACK(0,SYS_F_FOPEN,0), "fopen"},
158 {ERR_PACK(0,SYS_F_CONNECT,0), "connect"},
159 {ERR_PACK(0,SYS_F_GETSERVBYNAME,0), "getservbyname"},
160 {ERR_PACK(0,SYS_F_SOCKET,0), "socket"},
161 {ERR_PACK(0,SYS_F_IOCTLSOCKET,0), "ioctlsocket"},
162 {ERR_PACK(0,SYS_F_BIND,0), "bind"},
163 {ERR_PACK(0,SYS_F_LISTEN,0), "listen"},
164 {ERR_PACK(0,SYS_F_ACCEPT,0), "accept"},
165#ifdef OPENSSL_SYS_WINDOWS
166 {ERR_PACK(0,SYS_F_WSASTARTUP,0), "WSAstartup"},
167#endif
168 {ERR_PACK(0,SYS_F_OPENDIR,0), "opendir"},
169 {ERR_PACK(0,SYS_F_FREAD,0), "fread"},
170 {0,NULL},
171 };
172
173static ERR_STRING_DATA ERR_str_reasons[]=
174 {
175{ERR_R_SYS_LIB ,"system lib"},
176{ERR_R_BN_LIB ,"BN lib"},
177{ERR_R_RSA_LIB ,"RSA lib"},
178{ERR_R_DH_LIB ,"DH lib"},
179{ERR_R_EVP_LIB ,"EVP lib"},
180{ERR_R_BUF_LIB ,"BUF lib"},
181{ERR_R_OBJ_LIB ,"OBJ lib"},
182{ERR_R_PEM_LIB ,"PEM lib"},
183{ERR_R_DSA_LIB ,"DSA lib"},
184{ERR_R_X509_LIB ,"X509 lib"},
185{ERR_R_ASN1_LIB ,"ASN1 lib"},
186{ERR_R_CONF_LIB ,"CONF lib"},
187{ERR_R_CRYPTO_LIB ,"CRYPTO lib"},
188{ERR_R_EC_LIB ,"EC lib"},
189{ERR_R_SSL_LIB ,"SSL lib"},
190{ERR_R_BIO_LIB ,"BIO lib"},
191{ERR_R_PKCS7_LIB ,"PKCS7 lib"},
192{ERR_R_X509V3_LIB ,"X509V3 lib"},
193{ERR_R_PKCS12_LIB ,"PKCS12 lib"},
194{ERR_R_RAND_LIB ,"RAND lib"},
195{ERR_R_DSO_LIB ,"DSO lib"},
196{ERR_R_ENGINE_LIB ,"ENGINE lib"},
197{ERR_R_OCSP_LIB ,"OCSP lib"},
198
199{ERR_R_NESTED_ASN1_ERROR ,"nested asn1 error"},
200{ERR_R_BAD_ASN1_OBJECT_HEADER ,"bad asn1 object header"},
201{ERR_R_BAD_GET_ASN1_OBJECT_CALL ,"bad get asn1 object call"},
202{ERR_R_EXPECTING_AN_ASN1_SEQUENCE ,"expecting an asn1 sequence"},
203{ERR_R_ASN1_LENGTH_MISMATCH ,"asn1 length mismatch"},
204{ERR_R_MISSING_ASN1_EOS ,"missing asn1 eos"},
205
206{ERR_R_FATAL ,"fatal"},
207{ERR_R_MALLOC_FAILURE ,"malloc failure"},
208{ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED ,"called a function you should not call"},
209{ERR_R_PASSED_NULL_PARAMETER ,"passed a null parameter"},
210{ERR_R_INTERNAL_ERROR ,"internal error"},
211{ERR_R_DISABLED ,"called a function that was disabled at compile-time"},
212
213{0,NULL},
214 };
215#endif
216
217#ifndef OPENSSL_NO_ERR
218#define NUM_SYS_STR_REASONS 127
219#define LEN_SYS_STR_REASON 32
220
221static ERR_STRING_DATA SYS_str_reasons[NUM_SYS_STR_REASONS + 1];
222/* SYS_str_reasons is filled with copies of strerror() results at
223 * initialization.
224 * 'errno' values up to 127 should cover all usual errors,
225 * others will be displayed numerically by ERR_error_string.
226 * It is crucial that we have something for each reason code
227 * that occurs in ERR_str_reasons, or bogus reason strings
228 * will be returned for SYSerr, which always gets an errno
229 * value and never one of those 'standard' reason codes. */
230
231static void build_SYS_str_reasons(void)
232 {
233 /* OPENSSL_malloc cannot be used here, use static storage instead */
234 static char strerror_tab[NUM_SYS_STR_REASONS][LEN_SYS_STR_REASON];
235 int i;
236 static int init = 1;
237
238 CRYPTO_r_lock(CRYPTO_LOCK_ERR);
239 if (!init)
240 {
241 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
242 return;
243 }
244
245 CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
246 CRYPTO_w_lock(CRYPTO_LOCK_ERR);
247 if (!init)
248 {
249 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
250 return;
251 }
252
253 for (i = 1; i <= NUM_SYS_STR_REASONS; i++)
254 {
255 ERR_STRING_DATA *str = &SYS_str_reasons[i - 1];
256
257 str->error = (unsigned long)i;
258 if (str->string == NULL)
259 {
260 char (*dest)[LEN_SYS_STR_REASON] = &(strerror_tab[i - 1]);
261 char *src = strerror(i);
262 if (src != NULL)
263 {
264 strncpy(*dest, src, sizeof *dest);
265 (*dest)[sizeof *dest - 1] = '\0';
266 str->string = *dest;
267 }
268 }
269 if (str->string == NULL)
270 str->string = "unknown";
271 }
272
273 /* Now we still have SYS_str_reasons[NUM_SYS_STR_REASONS] = {0, NULL},
274 * as required by ERR_load_strings. */
275
276 init = 0;
277
278 CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
279 }
280#endif
281
282void ERR_load_ERR_strings(void)
283 {
284#ifndef OPENSSL_NO_ERR
285 if (ERR_func_error_string(ERR_str_functs[0].error) == NULL)
286 {
287 ERR_load_strings(0,ERR_str_libraries);
288 ERR_load_strings(0,ERR_str_reasons);
289 ERR_load_strings(ERR_LIB_SYS,ERR_str_functs);
290 build_SYS_str_reasons();
291 ERR_load_strings(ERR_LIB_SYS,SYS_str_reasons);
292 }
293#endif
294 }
295
diff --git a/src/lib/libssl/src/crypto/evp/dig_eng.c b/src/lib/libssl/src/crypto/evp/dig_eng.c
new file mode 100644
index 0000000000..64cdf9366c
--- /dev/null
+++ b/src/lib/libssl/src/crypto/evp/dig_eng.c
@@ -0,0 +1,180 @@
1/* crypto/evp/digest.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 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#include <stdio.h>
113#include "cryptlib.h"
114#include <openssl/objects.h>
115#include <openssl/evp.h>
116#ifndef OPENSSL_NO_ENGINE
117#include <openssl/engine.h>
118#endif
119#include "evp_locl.h"
120
121#ifndef OPENSSL_NO_ENGINE
122
123#ifdef OPENSSL_FIPS
124
125static int do_evp_md_engine_full(EVP_MD_CTX *ctx, const EVP_MD **ptype, ENGINE *impl)
126 {
127 if (*ptype)
128 {
129 /* Ensure an ENGINE left lying around from last time is cleared
130 * (the previous check attempted to avoid this if the same
131 * ENGINE and EVP_MD could be used). */
132 if(ctx->engine)
133 ENGINE_finish(ctx->engine);
134 if(impl)
135 {
136 if (!ENGINE_init(impl))
137 {
138 EVPerr(EVP_F_DO_EVP_MD_ENGINE_FULL,EVP_R_INITIALIZATION_ERROR);
139 return 0;
140 }
141 }
142 else
143 /* Ask if an ENGINE is reserved for this job */
144 impl = ENGINE_get_digest_engine((*ptype)->type);
145 if(impl)
146 {
147 /* There's an ENGINE for this job ... (apparently) */
148 const EVP_MD *d = ENGINE_get_digest(impl, (*ptype)->type);
149 if(!d)
150 {
151 /* Same comment from evp_enc.c */
152 EVPerr(EVP_F_DO_EVP_MD_ENGINE_FULL,EVP_R_INITIALIZATION_ERROR);
153 return 0;
154 }
155 /* We'll use the ENGINE's private digest definition */
156 *ptype = d;
157 /* Store the ENGINE functional reference so we know
158 * 'type' came from an ENGINE and we need to release
159 * it when done. */
160 ctx->engine = impl;
161 }
162 else
163 ctx->engine = NULL;
164 }
165 else
166 if(!ctx->digest)
167 {
168 EVPerr(EVP_F_DO_EVP_MD_ENGINE_FULL,EVP_R_NO_DIGEST_SET);
169 return 0;
170 }
171 return 1;
172 }
173
174void int_EVP_MD_init_engine_callbacks(void)
175 {
176 int_EVP_MD_set_engine_callbacks(
177 ENGINE_init, ENGINE_finish, do_evp_md_engine_full);
178 }
179#endif
180#endif
diff --git a/src/lib/libssl/src/crypto/evp/enc_min.c b/src/lib/libssl/src/crypto/evp/enc_min.c
new file mode 100644
index 0000000000..3cb4626bef
--- /dev/null
+++ b/src/lib/libssl/src/crypto/evp/enc_min.c
@@ -0,0 +1,390 @@
1/* crypto/evp/enc_min.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/evp.h>
62#include <openssl/err.h>
63#include <openssl/rand.h>
64#ifndef OPENSSL_NO_ENGINE
65#include <openssl/engine.h>
66#endif
67#include "evp_locl.h"
68
69void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx)
70 {
71#ifdef OPENSSL_FIPS
72 FIPS_selftest_check();
73#endif
74 memset(ctx,0,sizeof(EVP_CIPHER_CTX));
75 /* ctx->cipher=NULL; */
76 }
77
78#ifdef OPENSSL_FIPS
79
80/* The purpose of these is to trap programs that attempt to use non FIPS
81 * algorithms in FIPS mode and ignore the errors.
82 */
83
84static int bad_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
85 const unsigned char *iv, int enc)
86 { FIPS_ERROR_IGNORED("Cipher init"); return 0;}
87
88static int bad_do_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
89 const unsigned char *in, unsigned int inl)
90 { FIPS_ERROR_IGNORED("Cipher update"); return 0;}
91
92/* NB: no cleanup because it is allowed after failed init */
93
94static int bad_set_asn1(EVP_CIPHER_CTX *ctx, ASN1_TYPE *typ)
95 { FIPS_ERROR_IGNORED("Cipher set_asn1"); return 0;}
96static int bad_get_asn1(EVP_CIPHER_CTX *ctx, ASN1_TYPE *typ)
97 { FIPS_ERROR_IGNORED("Cipher get_asn1"); return 0;}
98static int bad_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
99 { FIPS_ERROR_IGNORED("Cipher ctrl"); return 0;}
100
101static const EVP_CIPHER bad_cipher =
102 {
103 0,
104 0,
105 0,
106 0,
107 0,
108 bad_init,
109 bad_do_cipher,
110 NULL,
111 0,
112 bad_set_asn1,
113 bad_get_asn1,
114 bad_ctrl,
115 NULL
116 };
117
118#endif
119
120#ifndef OPENSSL_NO_ENGINE
121
122#ifdef OPENSSL_FIPS
123
124static int do_engine_null(ENGINE *impl) { return 0;}
125static int do_evp_enc_engine_null(EVP_CIPHER_CTX *ctx,
126 const EVP_CIPHER **pciph, ENGINE *impl)
127 { return 1; }
128
129static int (*do_engine_finish)(ENGINE *impl)
130 = do_engine_null;
131
132static int (*do_evp_enc_engine)
133 (EVP_CIPHER_CTX *ctx, const EVP_CIPHER **pciph, ENGINE *impl)
134 = do_evp_enc_engine_null;
135
136void int_EVP_CIPHER_set_engine_callbacks(
137 int (*eng_ciph_fin)(ENGINE *impl),
138 int (*eng_ciph_evp)
139 (EVP_CIPHER_CTX *ctx, const EVP_CIPHER **pciph, ENGINE *impl))
140 {
141 do_engine_finish = eng_ciph_fin;
142 do_evp_enc_engine = eng_ciph_evp;
143 }
144
145#else
146
147#define do_engine_finish ENGINE_finish
148
149static int do_evp_enc_engine(EVP_CIPHER_CTX *ctx, const EVP_CIPHER **pcipher, ENGINE *impl)
150 {
151 if(impl)
152 {
153 if (!ENGINE_init(impl))
154 {
155 EVPerr(EVP_F_DO_EVP_ENC_ENGINE, EVP_R_INITIALIZATION_ERROR);
156 return 0;
157 }
158 }
159 else
160 /* Ask if an ENGINE is reserved for this job */
161 impl = ENGINE_get_cipher_engine((*pcipher)->nid);
162 if(impl)
163 {
164 /* There's an ENGINE for this job ... (apparently) */
165 const EVP_CIPHER *c = ENGINE_get_cipher(impl, (*pcipher)->nid);
166 if(!c)
167 {
168 /* One positive side-effect of US's export
169 * control history, is that we should at least
170 * be able to avoid using US mispellings of
171 * "initialisation"? */
172 EVPerr(EVP_F_DO_EVP_ENC_ENGINE, EVP_R_INITIALIZATION_ERROR);
173 return 0;
174 }
175 /* We'll use the ENGINE's private cipher definition */
176 *pcipher = c;
177 /* Store the ENGINE functional reference so we know
178 * 'cipher' came from an ENGINE and we need to release
179 * it when done. */
180 ctx->engine = impl;
181 }
182 else
183 ctx->engine = NULL;
184 return 1;
185 }
186
187#endif
188
189#endif
190
191int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl,
192 const unsigned char *key, const unsigned char *iv, int enc)
193 {
194 if (enc == -1)
195 enc = ctx->encrypt;
196 else
197 {
198 if (enc)
199 enc = 1;
200 ctx->encrypt = enc;
201 }
202#ifdef OPENSSL_NO_FIPS
203 if(FIPS_selftest_failed())
204 {
205 FIPSerr(FIPS_F_EVP_CIPHERINIT_EX,FIPS_R_FIPS_SELFTEST_FAILED);
206 ctx->cipher = &bad_cipher;
207 return 0;
208 }
209#endif
210#ifndef OPENSSL_NO_ENGINE
211 /* Whether it's nice or not, "Inits" can be used on "Final"'d contexts
212 * so this context may already have an ENGINE! Try to avoid releasing
213 * the previous handle, re-querying for an ENGINE, and having a
214 * reinitialisation, when it may all be unecessary. */
215 if (ctx->engine && ctx->cipher && (!cipher ||
216 (cipher && (cipher->nid == ctx->cipher->nid))))
217 goto skip_to_init;
218#endif
219 if (cipher)
220 {
221 /* Ensure a context left lying around from last time is cleared
222 * (the previous check attempted to avoid this if the same
223 * ENGINE and EVP_CIPHER could be used). */
224 EVP_CIPHER_CTX_cleanup(ctx);
225
226 /* Restore encrypt field: it is zeroed by cleanup */
227 ctx->encrypt = enc;
228#ifndef OPENSSL_NO_ENGINE
229 if (!do_evp_enc_engine(ctx, &cipher, impl))
230 return 0;
231#endif
232
233 ctx->cipher=cipher;
234 if (ctx->cipher->ctx_size)
235 {
236 ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size);
237 if (!ctx->cipher_data)
238 {
239 EVPerr(EVP_F_EVP_CIPHERINIT_EX, ERR_R_MALLOC_FAILURE);
240 return 0;
241 }
242 }
243 else
244 {
245 ctx->cipher_data = NULL;
246 }
247 ctx->key_len = cipher->key_len;
248 ctx->flags = 0;
249 if(ctx->cipher->flags & EVP_CIPH_CTRL_INIT)
250 {
251 if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_INIT, 0, NULL))
252 {
253 EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR);
254 return 0;
255 }
256 }
257 }
258 else if(!ctx->cipher)
259 {
260 EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_NO_CIPHER_SET);
261 return 0;
262 }
263#ifndef OPENSSL_NO_ENGINE
264skip_to_init:
265#endif
266 /* we assume block size is a power of 2 in *cryptUpdate */
267 OPENSSL_assert(ctx->cipher->block_size == 1
268 || ctx->cipher->block_size == 8
269 || ctx->cipher->block_size == 16);
270
271 if(!(EVP_CIPHER_CTX_flags(ctx) & EVP_CIPH_CUSTOM_IV)) {
272 switch(EVP_CIPHER_CTX_mode(ctx)) {
273
274 case EVP_CIPH_STREAM_CIPHER:
275 case EVP_CIPH_ECB_MODE:
276 break;
277
278 case EVP_CIPH_CFB_MODE:
279 case EVP_CIPH_OFB_MODE:
280
281 ctx->num = 0;
282
283 case EVP_CIPH_CBC_MODE:
284
285 OPENSSL_assert(EVP_CIPHER_CTX_iv_length(ctx) <=
286 (int)sizeof(ctx->iv));
287 if(iv) memcpy(ctx->oiv, iv, EVP_CIPHER_CTX_iv_length(ctx));
288 memcpy(ctx->iv, ctx->oiv, EVP_CIPHER_CTX_iv_length(ctx));
289 break;
290
291 default:
292 return 0;
293 break;
294 }
295 }
296
297#ifdef OPENSSL_FIPS
298 /* After 'key' is set no further parameters changes are permissible.
299 * So only check for non FIPS enabling at this point.
300 */
301 if (key && FIPS_mode())
302 {
303 if (!(ctx->cipher->flags & EVP_CIPH_FLAG_FIPS)
304 & !(ctx->flags & EVP_CIPH_FLAG_NON_FIPS_ALLOW))
305 {
306 EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_DISABLED_FOR_FIPS);
307#if 0
308 ERR_add_error_data(2, "cipher=",
309 EVP_CIPHER_name(ctx->cipher));
310#endif
311 ctx->cipher = &bad_cipher;
312 return 0;
313 }
314 }
315#endif
316
317 if(key || (ctx->cipher->flags & EVP_CIPH_ALWAYS_CALL_INIT)) {
318 if(!ctx->cipher->init(ctx,key,iv,enc)) return 0;
319 }
320 ctx->buf_len=0;
321 ctx->final_used=0;
322 ctx->block_mask=ctx->cipher->block_size-1;
323 return 1;
324 }
325
326int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
327 {
328 if (c->cipher != NULL)
329 {
330 if(c->cipher->cleanup && !c->cipher->cleanup(c))
331 return 0;
332 /* Cleanse cipher context data */
333 if (c->cipher_data)
334 OPENSSL_cleanse(c->cipher_data, c->cipher->ctx_size);
335 }
336 if (c->cipher_data)
337 OPENSSL_free(c->cipher_data);
338#ifndef OPENSSL_NO_ENGINE
339 if (c->engine)
340 /* The EVP_CIPHER we used belongs to an ENGINE, release the
341 * functional reference we held for this reason. */
342 do_engine_finish(c->engine);
343#endif
344 memset(c,0,sizeof(EVP_CIPHER_CTX));
345 return 1;
346 }
347
348int EVP_Cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl)
349 {
350#ifdef OPENSSL_FIPS
351 FIPS_selftest_check();
352#endif
353 return ctx->cipher->do_cipher(ctx,out,in,inl);
354 }
355
356int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
357{
358 int ret;
359 if(!ctx->cipher) {
360 EVPerr(EVP_F_EVP_CIPHER_CTX_CTRL, EVP_R_NO_CIPHER_SET);
361 return 0;
362 }
363
364 if(!ctx->cipher->ctrl) {
365 EVPerr(EVP_F_EVP_CIPHER_CTX_CTRL, EVP_R_CTRL_NOT_IMPLEMENTED);
366 return 0;
367 }
368
369 ret = ctx->cipher->ctrl(ctx, type, arg, ptr);
370 if(ret == -1) {
371 EVPerr(EVP_F_EVP_CIPHER_CTX_CTRL, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED);
372 return 0;
373 }
374 return ret;
375}
376
377unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx)
378 {
379 return ctx->cipher->flags;
380 }
381
382int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx)
383 {
384 return ctx->cipher->iv_len;
385 }
386
387int EVP_CIPHER_nid(const EVP_CIPHER *cipher)
388 {
389 return cipher->nid;
390 }
diff --git a/src/lib/libssl/src/crypto/evp/evp_cnf.c b/src/lib/libssl/src/crypto/evp/evp_cnf.c
new file mode 100644
index 0000000000..2e4db30235
--- /dev/null
+++ b/src/lib/libssl/src/crypto/evp/evp_cnf.c
@@ -0,0 +1,125 @@
1/* evp_cnf.c */
2/* Written by Stephen Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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#include <ctype.h>
61#include <openssl/crypto.h>
62#include "cryptlib.h"
63#include <openssl/conf.h>
64#include <openssl/dso.h>
65#include <openssl/x509.h>
66#include <openssl/x509v3.h>
67#ifdef OPENSSL_FIPS
68#include <openssl/fips.h>
69#endif
70
71
72/* Algorithm configuration module. */
73
74static int alg_module_init(CONF_IMODULE *md, const CONF *cnf)
75 {
76 int i;
77 const char *oid_section;
78 STACK_OF(CONF_VALUE) *sktmp;
79 CONF_VALUE *oval;
80 oid_section = CONF_imodule_get_value(md);
81 if(!(sktmp = NCONF_get_section(cnf, oid_section)))
82 {
83 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_ERROR_LOADING_SECTION);
84 return 0;
85 }
86 for(i = 0; i < sk_CONF_VALUE_num(sktmp); i++)
87 {
88 oval = sk_CONF_VALUE_value(sktmp, i);
89 if (!strcmp(oval->name, "fips_mode"))
90 {
91 int m;
92 if (!X509V3_get_value_bool(oval, &m))
93 {
94 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_INVALID_FIPS_MODE);
95 return 0;
96 }
97 if (m > 0)
98 {
99#ifdef OPENSSL_FIPS
100 if (!FIPS_mode() && !FIPS_mode_set(1))
101 {
102 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_ERROR_SETTING_FIPS_MODE);
103 return 0;
104 }
105#else
106 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_FIPS_MODE_NOT_SUPPORTED);
107 return 0;
108#endif
109 }
110 }
111 else
112 {
113 EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_UNKNOWN_OPTION);
114 ERR_add_error_data(4, "name=", oval->name,
115 ", value=", oval->value);
116 }
117
118 }
119 return 1;
120 }
121
122void EVP_add_alg_module(void)
123 {
124 CONF_module_add("alg_section", alg_module_init, 0);
125 }
diff --git a/src/lib/libssl/src/crypto/fips_err.c b/src/lib/libssl/src/crypto/fips_err.c
new file mode 100644
index 0000000000..09f11748f6
--- /dev/null
+++ b/src/lib/libssl/src/crypto/fips_err.c
@@ -0,0 +1,7 @@
1#include <openssl/opensslconf.h>
2
3#ifdef OPENSSL_FIPS
4# include "fips_err.h"
5#else
6static void *dummy=&dummy;
7#endif
diff --git a/src/lib/libssl/src/crypto/hmac/Makefile b/src/lib/libssl/src/crypto/hmac/Makefile
index 01f10c396f..5cfa37d99c 100644
--- a/src/lib/libssl/src/crypto/hmac/Makefile
+++ b/src/lib/libssl/src/crypto/hmac/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -77,9 +77,10 @@ clean:
77hmac.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 77hmac.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
78hmac.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 78hmac.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
79hmac.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 79hmac.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
80hmac.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h 80hmac.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
81hmac.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 81hmac.o: ../../include/openssl/hmac.h ../../include/openssl/lhash.h
82hmac.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 82hmac.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
83hmac.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 83hmac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
84hmac.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 84hmac.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
85hmac.o: ../../include/openssl/symhacks.h ../cryptlib.h hmac.c 85hmac.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
86hmac.o: ../cryptlib.h hmac.c
diff --git a/src/lib/libssl/src/crypto/idea/Makefile b/src/lib/libssl/src/crypto/idea/Makefile
index b2e7add666..55c0d4dbff 100644
--- a/src/lib/libssl/src/crypto/idea/Makefile
+++ b/src/lib/libssl/src/crypto/idea/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -82,5 +82,9 @@ i_ecb.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h
82i_ecb.o: ../../include/openssl/opensslv.h i_ecb.c idea_lcl.h 82i_ecb.o: ../../include/openssl/opensslv.h i_ecb.c idea_lcl.h
83i_ofb64.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h 83i_ofb64.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h
84i_ofb64.o: i_ofb64.c idea_lcl.h 84i_ofb64.o: i_ofb64.c idea_lcl.h
85i_skey.o: ../../include/openssl/idea.h ../../include/openssl/opensslconf.h 85i_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
86i_skey.o: ../../include/openssl/fips.h ../../include/openssl/idea.h
87i_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
88i_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
89i_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
86i_skey.o: i_skey.c idea_lcl.h 90i_skey.o: i_skey.c idea_lcl.h
diff --git a/src/lib/libssl/src/crypto/krb5/Makefile b/src/lib/libssl/src/crypto/krb5/Makefile
index 14077390d6..8efb9e8910 100644
--- a/src/lib/libssl/src/crypto/krb5/Makefile
+++ b/src/lib/libssl/src/crypto/krb5/Makefile
@@ -34,7 +34,7 @@ top:
34all: lib 34all: lib
35 35
36lib: $(LIBOBJ) 36lib: $(LIBOBJ)
37 $(AR) $(LIB) $(LIBOBJ) 37 $(ARX) $(LIB) $(LIBOBJ)
38 $(RANLIB) $(LIB) || echo Never mind. 38 $(RANLIB) $(LIB) || echo Never mind.
39 @touch lib 39 @touch lib
40 40
diff --git a/src/lib/libssl/src/crypto/lhash/Makefile b/src/lib/libssl/src/crypto/lhash/Makefile
index 82bddac474..35f0932971 100644
--- a/src/lib/libssl/src/crypto/lhash/Makefile
+++ b/src/lib/libssl/src/crypto/lhash/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
diff --git a/src/lib/libssl/src/crypto/md2/Makefile b/src/lib/libssl/src/crypto/md2/Makefile
index 17f878aeb7..7f43321ab2 100644
--- a/src/lib/libssl/src/crypto/md2/Makefile
+++ b/src/lib/libssl/src/crypto/md2/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -74,7 +74,9 @@ clean:
74 74
75# DO NOT DELETE THIS LINE -- make depend depends on it. 75# DO NOT DELETE THIS LINE -- make depend depends on it.
76 76
77md2_dgst.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 77md2_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
78md2_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
79md2_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
78md2_dgst.o: ../../include/openssl/md2.h ../../include/openssl/opensslconf.h 80md2_dgst.o: ../../include/openssl/md2.h ../../include/openssl/opensslconf.h
79md2_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 81md2_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
80md2_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 82md2_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
diff --git a/src/lib/libssl/src/crypto/md4/Makefile b/src/lib/libssl/src/crypto/md4/Makefile
index ef97bb0cbe..0bc4896585 100644
--- a/src/lib/libssl/src/crypto/md4/Makefile
+++ b/src/lib/libssl/src/crypto/md4/Makefile
@@ -34,7 +34,7 @@ top:
34all: lib 34all: lib
35 35
36lib: $(LIBOBJ) 36lib: $(LIBOBJ)
37 $(AR) $(LIB) $(LIBOBJ) 37 $(ARX) $(LIB) $(LIBOBJ)
38 $(RANLIB) $(LIB) || echo Never mind. 38 $(RANLIB) $(LIB) || echo Never mind.
39 @touch lib 39 @touch lib
40 40
@@ -75,9 +75,13 @@ clean:
75 75
76# DO NOT DELETE THIS LINE -- make depend depends on it. 76# DO NOT DELETE THIS LINE -- make depend depends on it.
77 77
78md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md4.h 78md4_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
79md4_dgst.o: ../../include/openssl/opensslconf.h 79md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
80md4_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md4_dgst.c 80md4_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
81md4_dgst.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
82md4_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
83md4_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
84md4_dgst.o: ../../include/openssl/symhacks.h ../md32_common.h md4_dgst.c
81md4_dgst.o: md4_locl.h 85md4_dgst.o: md4_locl.h
82md4_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 86md4_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
83md4_one.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h 87md4_one.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
diff --git a/src/lib/libssl/src/crypto/md5/Makefile b/src/lib/libssl/src/crypto/md5/Makefile
index ceb00e8956..3c450fcfc0 100644
--- a/src/lib/libssl/src/crypto/md5/Makefile
+++ b/src/lib/libssl/src/crypto/md5/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -91,9 +91,13 @@ clean:
91 91
92# DO NOT DELETE THIS LINE -- make depend depends on it. 92# DO NOT DELETE THIS LINE -- make depend depends on it.
93 93
94md5_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md5.h 94md5_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
95md5_dgst.o: ../../include/openssl/opensslconf.h 95md5_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
96md5_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md5_dgst.c 96md5_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
97md5_dgst.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h
98md5_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
99md5_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
100md5_dgst.o: ../../include/openssl/symhacks.h ../md32_common.h md5_dgst.c
97md5_dgst.o: md5_locl.h 101md5_dgst.o: md5_locl.h
98md5_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 102md5_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
99md5_one.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h 103md5_one.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h
diff --git a/src/lib/libssl/src/crypto/objects/Makefile b/src/lib/libssl/src/crypto/objects/Makefile
index 9c5615099c..25e8b23b5d 100644
--- a/src/lib/libssl/src/crypto/objects/Makefile
+++ b/src/lib/libssl/src/crypto/objects/Makefile
@@ -34,7 +34,7 @@ top:
34all: obj_dat.h lib 34all: obj_dat.h lib
35 35
36lib: $(LIBOBJ) 36lib: $(LIBOBJ)
37 $(AR) $(LIB) $(LIBOBJ) 37 $(ARX) $(LIB) $(LIBOBJ)
38 $(RANLIB) $(LIB) || echo Never mind. 38 $(RANLIB) $(LIB) || echo Never mind.
39 @touch lib 39 @touch lib
40 40
diff --git a/src/lib/libssl/src/crypto/ocsp/Makefile b/src/lib/libssl/src/crypto/ocsp/Makefile
index 0fe028960e..30a00b3372 100644
--- a/src/lib/libssl/src/crypto/ocsp/Makefile
+++ b/src/lib/libssl/src/crypto/ocsp/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
@@ -82,9 +82,10 @@ ocsp_asn.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
82ocsp_asn.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 82ocsp_asn.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
83ocsp_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 83ocsp_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
84ocsp_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 84ocsp_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
85ocsp_asn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 85ocsp_asn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
86ocsp_asn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 86ocsp_asn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
87ocsp_asn.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 87ocsp_asn.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
88ocsp_asn.o: ../../include/openssl/opensslconf.h
88ocsp_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 89ocsp_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
89ocsp_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 90ocsp_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
90ocsp_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 91ocsp_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -97,24 +98,25 @@ ocsp_cl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
97ocsp_cl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 98ocsp_cl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
98ocsp_cl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 99ocsp_cl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
99ocsp_cl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 100ocsp_cl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
100ocsp_cl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 101ocsp_cl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
101ocsp_cl.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 102ocsp_cl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
102ocsp_cl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 103ocsp_cl.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
103ocsp_cl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 104ocsp_cl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
104ocsp_cl.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 105ocsp_cl.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
105ocsp_cl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 106ocsp_cl.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
106ocsp_cl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 107ocsp_cl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
107ocsp_cl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 108ocsp_cl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
108ocsp_cl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 109ocsp_cl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
109ocsp_cl.o: ../cryptlib.h ocsp_cl.c 110ocsp_cl.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_cl.c
110ocsp_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 111ocsp_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
111ocsp_err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 112ocsp_err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
112ocsp_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 113ocsp_err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
113ocsp_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 114ocsp_err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
114ocsp_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 115ocsp_err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
115ocsp_err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 116ocsp_err.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
116ocsp_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 117ocsp_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
117ocsp_err.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 118ocsp_err.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
119ocsp_err.o: ../../include/openssl/opensslconf.h
118ocsp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 120ocsp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
119ocsp_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 121ocsp_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
120ocsp_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 122ocsp_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -127,21 +129,22 @@ ocsp_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
127ocsp_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 129ocsp_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
128ocsp_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 130ocsp_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
129ocsp_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h 131ocsp_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h
130ocsp_ext.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 132ocsp_ext.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
131ocsp_ext.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 133ocsp_ext.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
132ocsp_ext.o: ../../include/openssl/opensslconf.h 134ocsp_ext.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
133ocsp_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 135ocsp_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
134ocsp_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 136ocsp_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
135ocsp_ext.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 137ocsp_ext.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
136ocsp_ext.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 138ocsp_ext.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
137ocsp_ext.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 139ocsp_ext.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
138ocsp_ext.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_ext.c 140ocsp_ext.o: ../../include/openssl/x509v3.h ../cryptlib.h ocsp_ext.c
139ocsp_ht.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 141ocsp_ht.o: ../../e_os.h ../../include/openssl/asn1.h
140ocsp_ht.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 142ocsp_ht.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
141ocsp_ht.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 143ocsp_ht.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
142ocsp_ht.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 144ocsp_ht.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
143ocsp_ht.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 145ocsp_ht.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
144ocsp_ht.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 146ocsp_ht.o: ../../include/openssl/err.h ../../include/openssl/evp.h
147ocsp_ht.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
145ocsp_ht.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 148ocsp_ht.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
146ocsp_ht.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 149ocsp_ht.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
147ocsp_ht.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 150ocsp_ht.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
@@ -156,9 +159,9 @@ ocsp_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
156ocsp_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 159ocsp_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
157ocsp_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 160ocsp_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
158ocsp_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 161ocsp_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
159ocsp_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 162ocsp_lib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
160ocsp_lib.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 163ocsp_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
161ocsp_lib.o: ../../include/openssl/opensslconf.h 164ocsp_lib.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
162ocsp_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 165ocsp_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
163ocsp_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 166ocsp_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
164ocsp_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 167ocsp_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -171,9 +174,10 @@ ocsp_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
171ocsp_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 174ocsp_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
172ocsp_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 175ocsp_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
173ocsp_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 176ocsp_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
174ocsp_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 177ocsp_prn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
175ocsp_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 178ocsp_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
176ocsp_prn.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 179ocsp_prn.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
180ocsp_prn.o: ../../include/openssl/opensslconf.h
177ocsp_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 181ocsp_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
178ocsp_prn.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 182ocsp_prn.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
179ocsp_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 183ocsp_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -187,9 +191,9 @@ ocsp_srv.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
187ocsp_srv.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 191ocsp_srv.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
188ocsp_srv.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 192ocsp_srv.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
189ocsp_srv.o: ../../include/openssl/err.h ../../include/openssl/evp.h 193ocsp_srv.o: ../../include/openssl/err.h ../../include/openssl/evp.h
190ocsp_srv.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 194ocsp_srv.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
191ocsp_srv.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 195ocsp_srv.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
192ocsp_srv.o: ../../include/openssl/opensslconf.h 196ocsp_srv.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
193ocsp_srv.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 197ocsp_srv.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
194ocsp_srv.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 198ocsp_srv.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
195ocsp_srv.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 199ocsp_srv.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -202,9 +206,10 @@ ocsp_vfy.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
202ocsp_vfy.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 206ocsp_vfy.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
203ocsp_vfy.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 207ocsp_vfy.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
204ocsp_vfy.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 208ocsp_vfy.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
205ocsp_vfy.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 209ocsp_vfy.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
206ocsp_vfy.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 210ocsp_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
207ocsp_vfy.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h 211ocsp_vfy.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
212ocsp_vfy.o: ../../include/openssl/opensslconf.h
208ocsp_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 213ocsp_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
209ocsp_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 214ocsp_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
210ocsp_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 215ocsp_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
diff --git a/src/lib/libssl/src/crypto/pem/Makefile b/src/lib/libssl/src/crypto/pem/Makefile
index 742194fd24..669f36612c 100644
--- a/src/lib/libssl/src/crypto/pem/Makefile
+++ b/src/lib/libssl/src/crypto/pem/Makefile
@@ -36,7 +36,7 @@ top:
36all: lib 36all: lib
37 37
38lib: $(LIBOBJ) 38lib: $(LIBOBJ)
39 $(AR) $(LIB) $(LIBOBJ) 39 $(ARX) $(LIB) $(LIBOBJ)
40 $(RANLIB) $(LIB) || echo Never mind. 40 $(RANLIB) $(LIB) || echo Never mind.
41 @touch lib 41 @touch lib
42 42
@@ -83,36 +83,39 @@ pem_all.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
83pem_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 83pem_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
84pem_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 84pem_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
85pem_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 85pem_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
86pem_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 86pem_all.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
87pem_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 87pem_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
88pem_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 88pem_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
89pem_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 89pem_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
90pem_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 90pem_all.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
91pem_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 91pem_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
92pem_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 92pem_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
93pem_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 93pem_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
94pem_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_all.c 94pem_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
95pem_all.o: ../cryptlib.h pem_all.c
95pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 96pem_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
96pem_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 97pem_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
97pem_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 98pem_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
98pem_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 99pem_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
99pem_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h 100pem_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
100pem_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 101pem_err.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
101pem_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 102pem_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
102pem_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 103pem_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
103pem_err.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 104pem_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
104pem_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 105pem_err.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
105pem_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 106pem_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
106pem_err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 107pem_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
107pem_err.o: ../../include/openssl/x509_vfy.h pem_err.c 108pem_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
109pem_err.o: pem_err.c
108pem_info.o: ../../e_os.h ../../include/openssl/asn1.h 110pem_info.o: ../../e_os.h ../../include/openssl/asn1.h
109pem_info.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 111pem_info.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
110pem_info.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h 112pem_info.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
111pem_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 113pem_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
112pem_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 114pem_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
113pem_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h 115pem_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
114pem_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 116pem_info.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
115pem_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 117pem_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
118pem_info.o: ../../include/openssl/opensslconf.h
116pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 119pem_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
117pem_info.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 120pem_info.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
118pem_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h 121pem_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
@@ -126,54 +129,55 @@ pem_lib.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
126pem_lib.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h 129pem_lib.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
127pem_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 130pem_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
128pem_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 131pem_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
129pem_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 132pem_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
130pem_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 133pem_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
131pem_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 134pem_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
132pem_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 135pem_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
133pem_lib.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h 136pem_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
134pem_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 137pem_lib.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
135pem_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 138pem_lib.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
136pem_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 139pem_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
137pem_lib.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 140pem_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
138pem_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 141pem_lib.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h
139pem_lib.o: ../cryptlib.h pem_lib.c 142pem_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_lib.c
140pem_oth.o: ../../e_os.h ../../include/openssl/asn1.h 143pem_oth.o: ../../e_os.h ../../include/openssl/asn1.h
141pem_oth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 144pem_oth.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
142pem_oth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 145pem_oth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
143pem_oth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 146pem_oth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
144pem_oth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 147pem_oth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
145pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 148pem_oth.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
146pem_oth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 149pem_oth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
147pem_oth.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 150pem_oth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
148pem_oth.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 151pem_oth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
149pem_oth.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 152pem_oth.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
150pem_oth.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 153pem_oth.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
151pem_oth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 154pem_oth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
152pem_oth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 155pem_oth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
153pem_oth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_oth.c 156pem_oth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
157pem_oth.o: ../cryptlib.h pem_oth.c
154pem_pk8.o: ../../e_os.h ../../include/openssl/asn1.h 158pem_pk8.o: ../../e_os.h ../../include/openssl/asn1.h
155pem_pk8.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 159pem_pk8.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
156pem_pk8.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 160pem_pk8.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
157pem_pk8.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 161pem_pk8.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
158pem_pk8.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 162pem_pk8.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
159pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 163pem_pk8.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
160pem_pk8.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 164pem_pk8.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
161pem_pk8.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 165pem_pk8.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
162pem_pk8.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 166pem_pk8.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
163pem_pk8.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h 167pem_pk8.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
164pem_pk8.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 168pem_pk8.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
165pem_pk8.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 169pem_pk8.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
166pem_pk8.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 170pem_pk8.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
167pem_pk8.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 171pem_pk8.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
168pem_pk8.o: ../cryptlib.h pem_pk8.c 172pem_pk8.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pem_pk8.c
169pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h 173pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
170pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 174pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
171pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 175pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
172pem_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 176pem_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
173pem_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 177pem_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
174pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 178pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
175pem_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 179pem_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
176pem_pkey.o: ../../include/openssl/opensslconf.h 180pem_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
177pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 181pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
178pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 182pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
179pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 183pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
@@ -186,9 +190,9 @@ pem_seal.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
186pem_seal.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 190pem_seal.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
187pem_seal.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 191pem_seal.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
188pem_seal.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 192pem_seal.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
189pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 193pem_seal.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
190pem_seal.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 194pem_seal.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
191pem_seal.o: ../../include/openssl/opensslconf.h 195pem_seal.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
192pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 196pem_seal.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
193pem_seal.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 197pem_seal.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
194pem_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 198pem_seal.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -201,9 +205,9 @@ pem_sign.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
201pem_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 205pem_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
202pem_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 206pem_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
203pem_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 207pem_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
204pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 208pem_sign.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
205pem_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 209pem_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
206pem_sign.o: ../../include/openssl/opensslconf.h 210pem_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
207pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 211pem_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
208pem_sign.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 212pem_sign.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
209pem_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 213pem_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
@@ -216,9 +220,9 @@ pem_x509.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
216pem_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 220pem_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
217pem_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 221pem_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
218pem_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 222pem_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
219pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 223pem_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
220pem_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 224pem_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
221pem_x509.o: ../../include/openssl/opensslconf.h 225pem_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
222pem_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 226pem_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
223pem_x509.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 227pem_x509.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
224pem_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 228pem_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -230,9 +234,9 @@ pem_xaux.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
230pem_xaux.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 234pem_xaux.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
231pem_xaux.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 235pem_xaux.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
232pem_xaux.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 236pem_xaux.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
233pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 237pem_xaux.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
234pem_xaux.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 238pem_xaux.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
235pem_xaux.o: ../../include/openssl/opensslconf.h 239pem_xaux.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
236pem_xaux.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 240pem_xaux.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
237pem_xaux.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 241pem_xaux.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
238pem_xaux.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 242pem_xaux.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
diff --git a/src/lib/libssl/src/crypto/pkcs12/Makefile b/src/lib/libssl/src/crypto/pkcs12/Makefile
index 3a7498fe7a..eed226b30d 100644
--- a/src/lib/libssl/src/crypto/pkcs12/Makefile
+++ b/src/lib/libssl/src/crypto/pkcs12/Makefile
@@ -39,7 +39,7 @@ test:
39all: lib 39all: lib
40 40
41lib: $(LIBOBJ) 41lib: $(LIBOBJ)
42 $(AR) $(LIB) $(LIBOBJ) 42 $(ARX) $(LIB) $(LIBOBJ)
43 $(RANLIB) $(LIB) || echo Never mind. 43 $(RANLIB) $(LIB) || echo Never mind.
44 @touch lib 44 @touch lib
45 45
@@ -85,36 +85,37 @@ p12_add.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
85p12_add.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 85p12_add.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
86p12_add.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 86p12_add.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
87p12_add.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 87p12_add.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
88p12_add.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 88p12_add.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
89p12_add.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 89p12_add.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
90p12_add.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 90p12_add.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
91p12_add.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 91p12_add.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
92p12_add.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 92p12_add.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
93p12_add.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 93p12_add.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
94p12_add.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 94p12_add.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
95p12_add.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_add.c 95p12_add.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
96p12_add.o: ../cryptlib.h p12_add.c
96p12_asn.o: ../../e_os.h ../../include/openssl/asn1.h 97p12_asn.o: ../../e_os.h ../../include/openssl/asn1.h
97p12_asn.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 98p12_asn.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
98p12_asn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 99p12_asn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
99p12_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 100p12_asn.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
100p12_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 101p12_asn.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
101p12_asn.o: ../../include/openssl/err.h ../../include/openssl/evp.h 102p12_asn.o: ../../include/openssl/err.h ../../include/openssl/evp.h
102p12_asn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 103p12_asn.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
103p12_asn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 104p12_asn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
104p12_asn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 105p12_asn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
105p12_asn.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 106p12_asn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h
106p12_asn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 107p12_asn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
107p12_asn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 108p12_asn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
108p12_asn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 109p12_asn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
109p12_asn.o: ../cryptlib.h p12_asn.c 110p12_asn.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_asn.c
110p12_attr.o: ../../e_os.h ../../include/openssl/asn1.h 111p12_attr.o: ../../e_os.h ../../include/openssl/asn1.h
111p12_attr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 112p12_attr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
112p12_attr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 113p12_attr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
113p12_attr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 114p12_attr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
114p12_attr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 115p12_attr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
115p12_attr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 116p12_attr.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
116p12_attr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 117p12_attr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
117p12_attr.o: ../../include/openssl/opensslconf.h 118p12_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
118p12_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 119p12_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
119p12_attr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 120p12_attr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
120p12_attr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 121p12_attr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -126,9 +127,9 @@ p12_crpt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
126p12_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 127p12_crpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
127p12_crpt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 128p12_crpt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
128p12_crpt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 129p12_crpt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
129p12_crpt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 130p12_crpt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
130p12_crpt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 131p12_crpt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
131p12_crpt.o: ../../include/openssl/opensslconf.h 132p12_crpt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
132p12_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 133p12_crpt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
133p12_crpt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 134p12_crpt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
134p12_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 135p12_crpt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -140,22 +141,23 @@ p12_crt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
140p12_crt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 141p12_crt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
141p12_crt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 142p12_crt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
142p12_crt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 143p12_crt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
143p12_crt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 144p12_crt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
144p12_crt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 145p12_crt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
145p12_crt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 146p12_crt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
146p12_crt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 147p12_crt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
147p12_crt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 148p12_crt.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
148p12_crt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 149p12_crt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
149p12_crt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 150p12_crt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
150p12_crt.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_crt.c 151p12_crt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
152p12_crt.o: ../cryptlib.h p12_crt.c
151p12_decr.o: ../../e_os.h ../../include/openssl/asn1.h 153p12_decr.o: ../../e_os.h ../../include/openssl/asn1.h
152p12_decr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 154p12_decr.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
153p12_decr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 155p12_decr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
154p12_decr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 156p12_decr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
155p12_decr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 157p12_decr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
156p12_decr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 158p12_decr.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
157p12_decr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 159p12_decr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
158p12_decr.o: ../../include/openssl/opensslconf.h 160p12_decr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
159p12_decr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 161p12_decr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
160p12_decr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 162p12_decr.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
161p12_decr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 163p12_decr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -167,9 +169,9 @@ p12_init.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
167p12_init.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 169p12_init.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
168p12_init.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 170p12_init.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
169p12_init.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 171p12_init.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
170p12_init.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 172p12_init.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
171p12_init.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 173p12_init.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
172p12_init.o: ../../include/openssl/opensslconf.h 174p12_init.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
173p12_init.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 175p12_init.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
174p12_init.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 176p12_init.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
175p12_init.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 177p12_init.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -182,22 +184,22 @@ p12_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
182p12_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 184p12_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
183p12_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 185p12_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
184p12_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h 186p12_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h
185p12_key.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 187p12_key.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
186p12_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 188p12_key.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
187p12_key.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 189p12_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
188p12_key.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 190p12_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h
189p12_key.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 191p12_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
190p12_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 192p12_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
191p12_key.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 193p12_key.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
192p12_key.o: ../cryptlib.h p12_key.c 194p12_key.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_key.c
193p12_kiss.o: ../../e_os.h ../../include/openssl/asn1.h 195p12_kiss.o: ../../e_os.h ../../include/openssl/asn1.h
194p12_kiss.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 196p12_kiss.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
195p12_kiss.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 197p12_kiss.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
196p12_kiss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 198p12_kiss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
197p12_kiss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 199p12_kiss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
198p12_kiss.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 200p12_kiss.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
199p12_kiss.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 201p12_kiss.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
200p12_kiss.o: ../../include/openssl/opensslconf.h 202p12_kiss.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
201p12_kiss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 203p12_kiss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
202p12_kiss.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 204p12_kiss.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
203p12_kiss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 205p12_kiss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -209,9 +211,10 @@ p12_mutl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
209p12_mutl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 211p12_mutl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
210p12_mutl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 212p12_mutl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
211p12_mutl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 213p12_mutl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
212p12_mutl.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h 214p12_mutl.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
213p12_mutl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 215p12_mutl.o: ../../include/openssl/hmac.h ../../include/openssl/lhash.h
214p12_mutl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 216p12_mutl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
217p12_mutl.o: ../../include/openssl/opensslconf.h
215p12_mutl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 218p12_mutl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
216p12_mutl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 219p12_mutl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
217p12_mutl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 220p12_mutl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
@@ -223,8 +226,9 @@ p12_npas.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
223p12_npas.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 226p12_npas.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
224p12_npas.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 227p12_npas.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
225p12_npas.o: ../../include/openssl/err.h ../../include/openssl/evp.h 228p12_npas.o: ../../include/openssl/err.h ../../include/openssl/evp.h
226p12_npas.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 229p12_npas.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
227p12_npas.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 230p12_npas.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
231p12_npas.o: ../../include/openssl/opensslconf.h
228p12_npas.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 232p12_npas.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
229p12_npas.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 233p12_npas.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
230p12_npas.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 234p12_npas.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
@@ -237,50 +241,53 @@ p12_p8d.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
237p12_p8d.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 241p12_p8d.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
238p12_p8d.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 242p12_p8d.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
239p12_p8d.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 243p12_p8d.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
240p12_p8d.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 244p12_p8d.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
241p12_p8d.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 245p12_p8d.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
242p12_p8d.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 246p12_p8d.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
243p12_p8d.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 247p12_p8d.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
244p12_p8d.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 248p12_p8d.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
245p12_p8d.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 249p12_p8d.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
246p12_p8d.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 250p12_p8d.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
247p12_p8d.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_p8d.c 251p12_p8d.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
252p12_p8d.o: ../cryptlib.h p12_p8d.c
248p12_p8e.o: ../../e_os.h ../../include/openssl/asn1.h 253p12_p8e.o: ../../e_os.h ../../include/openssl/asn1.h
249p12_p8e.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 254p12_p8e.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
250p12_p8e.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 255p12_p8e.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
251p12_p8e.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 256p12_p8e.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
252p12_p8e.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 257p12_p8e.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
253p12_p8e.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 258p12_p8e.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
254p12_p8e.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 259p12_p8e.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
255p12_p8e.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 260p12_p8e.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
256p12_p8e.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 261p12_p8e.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
257p12_p8e.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 262p12_p8e.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
258p12_p8e.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 263p12_p8e.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
259p12_p8e.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 264p12_p8e.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
260p12_p8e.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_p8e.c 265p12_p8e.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
266p12_p8e.o: ../cryptlib.h p12_p8e.c
261p12_utl.o: ../../e_os.h ../../include/openssl/asn1.h 267p12_utl.o: ../../e_os.h ../../include/openssl/asn1.h
262p12_utl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 268p12_utl.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
263p12_utl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 269p12_utl.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
264p12_utl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 270p12_utl.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
265p12_utl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 271p12_utl.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
266p12_utl.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 272p12_utl.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
267p12_utl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 273p12_utl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
268p12_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 274p12_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
269p12_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h 275p12_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
270p12_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 276p12_utl.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
271p12_utl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 277p12_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
272p12_utl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 278p12_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
273p12_utl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p12_utl.c 279p12_utl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
280p12_utl.o: ../cryptlib.h p12_utl.c
274pk12err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 281pk12err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
275pk12err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 282pk12err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
276pk12err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 283pk12err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
277pk12err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 284pk12err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
278pk12err.o: ../../include/openssl/err.h ../../include/openssl/evp.h 285pk12err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
279pk12err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 286pk12err.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
280pk12err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 287pk12err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
281pk12err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 288pk12err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
282pk12err.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h 289pk12err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs12.h
283pk12err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 290pk12err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
284pk12err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 291pk12err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
285pk12err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 292pk12err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
286pk12err.o: pk12err.c 293pk12err.o: ../../include/openssl/x509_vfy.h pk12err.c
diff --git a/src/lib/libssl/src/crypto/pkcs7/Makefile b/src/lib/libssl/src/crypto/pkcs7/Makefile
index 3f7e88b40f..790d8edf36 100644
--- a/src/lib/libssl/src/crypto/pkcs7/Makefile
+++ b/src/lib/libssl/src/crypto/pkcs7/Makefile
@@ -54,7 +54,7 @@ verify: verify.o example.o lib
54 $(CC) $(CFLAGS) -o verify verify.o $(PEX_LIBS) example.o $(LIB) $(EX_LIBS) 54 $(CC) $(CFLAGS) -o verify verify.o $(PEX_LIBS) example.o $(LIB) $(EX_LIBS)
55 55
56lib: $(LIBOBJ) 56lib: $(LIBOBJ)
57 $(AR) $(LIB) $(LIBOBJ) 57 $(ARX) $(LIB) $(LIBOBJ)
58 $(RANLIB) $(LIB) || echo Never mind. 58 $(RANLIB) $(LIB) || echo Never mind.
59 @touch lib 59 @touch lib
60 60
@@ -101,8 +101,9 @@ pk7_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
101pk7_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 101pk7_asn1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
102pk7_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 102pk7_asn1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
103pk7_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h 103pk7_asn1.o: ../../include/openssl/err.h ../../include/openssl/evp.h
104pk7_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 104pk7_asn1.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
105pk7_asn1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 105pk7_asn1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
106pk7_asn1.o: ../../include/openssl/opensslconf.h
106pk7_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 107pk7_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
107pk7_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 108pk7_asn1.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
108pk7_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 109pk7_asn1.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -113,8 +114,9 @@ pk7_attr.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
113pk7_attr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 114pk7_attr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
114pk7_attr.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 115pk7_attr.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
115pk7_attr.o: ../../include/openssl/err.h ../../include/openssl/evp.h 116pk7_attr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
116pk7_attr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 117pk7_attr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
117pk7_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 118pk7_attr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
119pk7_attr.o: ../../include/openssl/opensslconf.h
118pk7_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 120pk7_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
119pk7_attr.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 121pk7_attr.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
120pk7_attr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 122pk7_attr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -127,8 +129,9 @@ pk7_doit.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
127pk7_doit.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 129pk7_doit.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
128pk7_doit.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 130pk7_doit.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
129pk7_doit.o: ../../include/openssl/err.h ../../include/openssl/evp.h 131pk7_doit.o: ../../include/openssl/err.h ../../include/openssl/evp.h
130pk7_doit.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 132pk7_doit.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
131pk7_doit.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 133pk7_doit.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
134pk7_doit.o: ../../include/openssl/opensslconf.h
132pk7_doit.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 135pk7_doit.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
133pk7_doit.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 136pk7_doit.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
134pk7_doit.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 137pk7_doit.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -140,22 +143,22 @@ pk7_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
140pk7_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 143pk7_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
141pk7_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 144pk7_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
142pk7_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 145pk7_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
143pk7_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 146pk7_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
144pk7_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 147pk7_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
145pk7_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 148pk7_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
146pk7_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 149pk7_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
147pk7_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 150pk7_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
148pk7_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 151pk7_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
149pk7_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 152pk7_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
150pk7_lib.o: ../cryptlib.h pk7_lib.c 153pk7_lib.o: ../../include/openssl/x509_vfy.h ../cryptlib.h pk7_lib.c
151pk7_mime.o: ../../e_os.h ../../include/openssl/asn1.h 154pk7_mime.o: ../../e_os.h ../../include/openssl/asn1.h
152pk7_mime.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 155pk7_mime.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
153pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 156pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
154pk7_mime.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 157pk7_mime.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
155pk7_mime.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 158pk7_mime.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
156pk7_mime.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 159pk7_mime.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
157pk7_mime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 160pk7_mime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
158pk7_mime.o: ../../include/openssl/opensslconf.h 161pk7_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
159pk7_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 162pk7_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
160pk7_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h 163pk7_mime.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
161pk7_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 164pk7_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
@@ -168,8 +171,8 @@ pk7_smime.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
168pk7_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 171pk7_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
169pk7_smime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 172pk7_smime.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
170pk7_smime.o: ../../include/openssl/err.h ../../include/openssl/evp.h 173pk7_smime.o: ../../include/openssl/err.h ../../include/openssl/evp.h
171pk7_smime.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 174pk7_smime.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
172pk7_smime.o: ../../include/openssl/objects.h 175pk7_smime.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
173pk7_smime.o: ../../include/openssl/opensslconf.h 176pk7_smime.o: ../../include/openssl/opensslconf.h
174pk7_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 177pk7_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
175pk7_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 178pk7_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
diff --git a/src/lib/libssl/src/crypto/pqueue/pq_compat.h b/src/lib/libssl/src/crypto/pqueue/pq_compat.h
index fd36578882..7b2c32725c 100644
--- a/src/lib/libssl/src/crypto/pqueue/pq_compat.h
+++ b/src/lib/libssl/src/crypto/pqueue/pq_compat.h
@@ -57,6 +57,9 @@
57 * 57 *
58 */ 58 */
59 59
60#ifndef HEADER_PQ_COMPAT_H
61#define HEADER_PQ_COMPAT_H
62
60#include <openssl/opensslconf.h> 63#include <openssl/opensslconf.h>
61#include <openssl/bn.h> 64#include <openssl/bn.h>
62 65
@@ -145,3 +148,5 @@
145 *(x) |= mask; \ 148 *(x) |= mask; \
146 } while(0) 149 } while(0)
147#endif /* OPENSSL_SYS_VMS */ 150#endif /* OPENSSL_SYS_VMS */
151
152#endif
diff --git a/src/lib/libssl/src/crypto/rand/rand_eng.c b/src/lib/libssl/src/crypto/rand/rand_eng.c
new file mode 100644
index 0000000000..1669cef43c
--- /dev/null
+++ b/src/lib/libssl/src/crypto/rand/rand_eng.c
@@ -0,0 +1,152 @@
1/* crypto/rand/rand_lib.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 <time.h>
61#include "cryptlib.h"
62#include "rand_lcl.h"
63#include <openssl/rand.h>
64#ifdef OPENSSL_FIPS
65#include <openssl/fips.h>
66#include <openssl/fips_rand.h>
67#endif
68
69#ifndef OPENSSL_NO_ENGINE
70#include <openssl/engine.h>
71#endif
72
73#if defined(OPENSSL_FIPS) && !defined(OPENSSL_NO_ENGINE)
74
75/* non-NULL if default_RAND_meth is ENGINE-provided */
76static ENGINE *funct_ref =NULL;
77
78int eng_RAND_set_rand_method(const RAND_METHOD *meth, const RAND_METHOD **pmeth)
79 {
80 if(funct_ref)
81 {
82 ENGINE_finish(funct_ref);
83 funct_ref = NULL;
84 }
85 *pmeth = meth;
86 return 1;
87 }
88
89const RAND_METHOD *eng_RAND_get_rand_method(const RAND_METHOD **pmeth)
90 {
91 if (!*pmeth)
92 {
93 ENGINE *e = ENGINE_get_default_RAND();
94 if(e)
95 {
96 *pmeth = ENGINE_get_RAND(e);
97 if(!*pmeth)
98 {
99 ENGINE_finish(e);
100 e = NULL;
101 }
102 }
103 if(e)
104 funct_ref = e;
105 else
106 if(FIPS_mode())
107 *pmeth=FIPS_rand_method();
108 else
109 *pmeth = RAND_SSLeay();
110 }
111
112 if(FIPS_mode()
113 && *pmeth != FIPS_rand_check())
114 {
115 RANDerr(RAND_F_ENG_RAND_GET_RAND_METHOD,RAND_R_NON_FIPS_METHOD);
116 return 0;
117 }
118
119 return *pmeth;
120 }
121
122int RAND_set_rand_engine(ENGINE *engine)
123 {
124 const RAND_METHOD *tmp_meth = NULL;
125 if(engine)
126 {
127 if(!ENGINE_init(engine))
128 return 0;
129 tmp_meth = ENGINE_get_RAND(engine);
130 if(!tmp_meth)
131 {
132 ENGINE_finish(engine);
133 return 0;
134 }
135 }
136 /* This function releases any prior ENGINE so call it first */
137 RAND_set_rand_method(tmp_meth);
138 funct_ref = engine;
139 return 1;
140 }
141
142void int_RAND_init_engine_callbacks(void)
143 {
144 static int done = 0;
145 if (done)
146 return;
147 int_RAND_set_callbacks(eng_RAND_set_rand_method,
148 eng_RAND_get_rand_method);
149 done = 1;
150 }
151
152#endif
diff --git a/src/lib/libssl/src/crypto/rc2/Makefile b/src/lib/libssl/src/crypto/rc2/Makefile
index 73eac347e7..4b6292b65f 100644
--- a/src/lib/libssl/src/crypto/rc2/Makefile
+++ b/src/lib/libssl/src/crypto/rc2/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
@@ -78,7 +78,11 @@ rc2_cbc.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h
78rc2_cbc.o: rc2_cbc.c rc2_locl.h 78rc2_cbc.o: rc2_cbc.c rc2_locl.h
79rc2_ecb.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 79rc2_ecb.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
80rc2_ecb.o: ../../include/openssl/rc2.h rc2_ecb.c rc2_locl.h 80rc2_ecb.o: ../../include/openssl/rc2.h rc2_ecb.c rc2_locl.h
81rc2_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h 81rc2_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
82rc2_skey.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
83rc2_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
84rc2_skey.o: ../../include/openssl/rc2.h ../../include/openssl/safestack.h
85rc2_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
82rc2_skey.o: rc2_locl.h rc2_skey.c 86rc2_skey.o: rc2_locl.h rc2_skey.c
83rc2cfb64.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h 87rc2cfb64.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc2.h
84rc2cfb64.o: rc2_locl.h rc2cfb64.c 88rc2cfb64.o: rc2_locl.h rc2cfb64.c
diff --git a/src/lib/libssl/src/crypto/rc4/Makefile b/src/lib/libssl/src/crypto/rc4/Makefile
index 187ed5c668..f0bd7678fc 100644
--- a/src/lib/libssl/src/crypto/rc4/Makefile
+++ b/src/lib/libssl/src/crypto/rc4/Makefile
@@ -21,8 +21,8 @@ TEST=rc4test.c
21APPS= 21APPS=
22 22
23LIB=$(TOP)/libcrypto.a 23LIB=$(TOP)/libcrypto.a
24LIBSRC=rc4_skey.c rc4_enc.c 24LIBSRC=rc4_skey.c rc4_enc.c rc4_fblk.c
25LIBOBJ=$(RC4_ENC) 25LIBOBJ=$(RC4_ENC) rc4_fblk.o
26 26
27SRC= $(LIBSRC) 27SRC= $(LIBSRC)
28 28
@@ -37,7 +37,7 @@ top:
37all: lib 37all: lib
38 38
39lib: $(LIBOBJ) 39lib: $(LIBOBJ)
40 $(AR) $(LIB) $(LIBOBJ) 40 $(ARX) $(LIB) $(LIBOBJ)
41 $(RANLIB) $(LIB) || echo Never mind. 41 $(RANLIB) $(LIB) || echo Never mind.
42 @touch lib 42 @touch lib
43 43
@@ -105,10 +105,20 @@ rc4_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
105rc4_enc.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h 105rc4_enc.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h
106rc4_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 106rc4_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
107rc4_enc.o: ../cryptlib.h rc4_enc.c rc4_locl.h 107rc4_enc.o: ../cryptlib.h rc4_enc.c rc4_locl.h
108rc4_fblk.o: ../../e_os.h ../../include/openssl/bio.h
109rc4_fblk.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
110rc4_fblk.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
111rc4_fblk.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
112rc4_fblk.o: ../../include/openssl/opensslconf.h
113rc4_fblk.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
114rc4_fblk.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h
115rc4_fblk.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
116rc4_fblk.o: ../cryptlib.h rc4_fblk.c rc4_locl.h
108rc4_skey.o: ../../e_os.h ../../include/openssl/bio.h 117rc4_skey.o: ../../e_os.h ../../include/openssl/bio.h
109rc4_skey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 118rc4_skey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
110rc4_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 119rc4_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
111rc4_skey.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h 120rc4_skey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
121rc4_skey.o: ../../include/openssl/opensslconf.h
112rc4_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 122rc4_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
113rc4_skey.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h 123rc4_skey.o: ../../include/openssl/rc4.h ../../include/openssl/safestack.h
114rc4_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 124rc4_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
diff --git a/src/lib/libssl/src/crypto/rc4/rc4_fblk.c b/src/lib/libssl/src/crypto/rc4/rc4_fblk.c
new file mode 100644
index 0000000000..1b2a42979b
--- /dev/null
+++ b/src/lib/libssl/src/crypto/rc4/rc4_fblk.c
@@ -0,0 +1,75 @@
1/* crypto/rc4/rc4_fblk.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project.
4 */
5/* ====================================================================
6 * Copyright (c) 2008 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
54
55#include <openssl/rc4.h>
56#include "rc4_locl.h"
57#include <openssl/opensslv.h>
58#include <openssl/crypto.h>
59#ifdef OPENSSL_FIPS
60#include <openssl/fips.h>
61#endif
62
63/* FIPS mode blocking for RC4 has to be done separately since RC4_set_key
64 * may be implemented in an assembly language file.
65 */
66
67#ifdef OPENSSL_FIPS
68void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
69 {
70 if (FIPS_mode())
71 FIPS_BAD_ABORT(RC4)
72 private_RC4_set_key(key, len, data);
73 }
74#endif
75
diff --git a/src/lib/libssl/src/crypto/rc5/Makefile b/src/lib/libssl/src/crypto/rc5/Makefile
index efb0f36b59..b4e21c9bb2 100644
--- a/src/lib/libssl/src/crypto/rc5/Makefile
+++ b/src/lib/libssl/src/crypto/rc5/Makefile
@@ -40,7 +40,7 @@ top:
40all: lib 40all: lib
41 41
42lib: $(LIBOBJ) 42lib: $(LIBOBJ)
43 $(AR) $(LIB) $(LIBOBJ) 43 $(ARX) $(LIB) $(LIBOBJ)
44 $(RANLIB) $(LIB) || echo Never mind. 44 $(RANLIB) $(LIB) || echo Never mind.
45 @touch lib 45 @touch lib
46 46
diff --git a/src/lib/libssl/src/crypto/ripemd/Makefile b/src/lib/libssl/src/crypto/ripemd/Makefile
index d55875c20c..6145f13699 100644
--- a/src/lib/libssl/src/crypto/ripemd/Makefile
+++ b/src/lib/libssl/src/crypto/ripemd/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -89,8 +89,13 @@ clean:
89 89
90# DO NOT DELETE THIS LINE -- make depend depends on it. 90# DO NOT DELETE THIS LINE -- make depend depends on it.
91 91
92rmd_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 92rmd_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
93rmd_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ripemd.h 93rmd_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
94rmd_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
95rmd_dgst.o: ../../include/openssl/opensslconf.h
96rmd_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
97rmd_dgst.o: ../../include/openssl/ripemd.h ../../include/openssl/safestack.h
98rmd_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
94rmd_dgst.o: ../md32_common.h rmd_dgst.c rmd_locl.h rmdconst.h 99rmd_dgst.o: ../md32_common.h rmd_dgst.c rmd_locl.h rmdconst.h
95rmd_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 100rmd_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
96rmd_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 101rmd_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
diff --git a/src/lib/libssl/src/crypto/rsa/rsa_eng.c b/src/lib/libssl/src/crypto/rsa/rsa_eng.c
new file mode 100644
index 0000000000..383a7045b2
--- /dev/null
+++ b/src/lib/libssl/src/crypto/rsa/rsa_eng.c
@@ -0,0 +1,348 @@
1/* crypto/rsa/rsa_lib.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/crypto.h>
61#include "cryptlib.h"
62#include <openssl/lhash.h>
63#include <openssl/bn.h>
64#include <openssl/rsa.h>
65#include <openssl/rand.h>
66#ifndef OPENSSL_NO_ENGINE
67#include <openssl/engine.h>
68#endif
69
70const char RSA_version[]="RSA" OPENSSL_VERSION_PTEXT;
71
72static const RSA_METHOD *default_RSA_meth=NULL;
73
74RSA *RSA_new(void)
75 {
76 RSA *r=RSA_new_method(NULL);
77
78 return r;
79 }
80
81void RSA_set_default_method(const RSA_METHOD *meth)
82 {
83#ifdef OPENSSL_FIPS
84 if (FIPS_mode() && !(meth->flags & RSA_FLAG_FIPS_METHOD))
85 {
86 RSAerr(RSA_F_RSA_SET_DEFAULT_METHOD, RSA_R_NON_FIPS_METHOD);
87 return;
88 }
89#endif
90 default_RSA_meth = meth;
91 }
92
93const RSA_METHOD *RSA_get_default_method(void)
94 {
95 if (default_RSA_meth == NULL)
96 {
97#ifdef RSA_NULL
98 default_RSA_meth=RSA_null_method();
99#else
100#if 0 /* was: #ifdef RSAref */
101 default_RSA_meth=RSA_PKCS1_RSAref();
102#else
103 default_RSA_meth=RSA_PKCS1_SSLeay();
104#endif
105#endif
106 }
107
108 return default_RSA_meth;
109 }
110
111const RSA_METHOD *RSA_get_method(const RSA *rsa)
112 {
113 return rsa->meth;
114 }
115
116int RSA_set_method(RSA *rsa, const RSA_METHOD *meth)
117 {
118 /* NB: The caller is specifically setting a method, so it's not up to us
119 * to deal with which ENGINE it comes from. */
120 const RSA_METHOD *mtmp;
121#ifdef OPENSSL_FIPS
122 if (FIPS_mode() && !(meth->flags & RSA_FLAG_FIPS_METHOD))
123 {
124 RSAerr(RSA_F_RSA_SET_METHOD, RSA_R_NON_FIPS_METHOD);
125 return 0;
126 }
127#endif
128 mtmp = rsa->meth;
129 if (mtmp->finish) mtmp->finish(rsa);
130#ifndef OPENSSL_NO_ENGINE
131 if (rsa->engine)
132 {
133 ENGINE_finish(rsa->engine);
134 rsa->engine = NULL;
135 }
136#endif
137 rsa->meth = meth;
138 if (meth->init) meth->init(rsa);
139 return 1;
140 }
141
142RSA *RSA_new_method(ENGINE *engine)
143 {
144 RSA *ret;
145
146 ret=(RSA *)OPENSSL_malloc(sizeof(RSA));
147 if (ret == NULL)
148 {
149 RSAerr(RSA_F_RSA_NEW_METHOD,ERR_R_MALLOC_FAILURE);
150 return NULL;
151 }
152
153 ret->meth = RSA_get_default_method();
154#ifndef OPENSSL_NO_ENGINE
155 if (engine)
156 {
157 if (!ENGINE_init(engine))
158 {
159 RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_ENGINE_LIB);
160 OPENSSL_free(ret);
161 return NULL;
162 }
163 ret->engine = engine;
164 }
165 else
166 ret->engine = ENGINE_get_default_RSA();
167 if(ret->engine)
168 {
169 ret->meth = ENGINE_get_RSA(ret->engine);
170 if(!ret->meth)
171 {
172 RSAerr(RSA_F_RSA_NEW_METHOD,
173 ERR_R_ENGINE_LIB);
174 ENGINE_finish(ret->engine);
175 OPENSSL_free(ret);
176 return NULL;
177 }
178 }
179#endif
180#ifdef OPENSSL_FIPS
181 if (FIPS_mode() && !(ret->meth->flags & RSA_FLAG_FIPS_METHOD))
182 {
183 RSAerr(RSA_F_RSA_NEW_METHOD, RSA_R_NON_FIPS_METHOD);
184#ifndef OPENSSL_NO_ENGINE
185 if (ret->engine)
186 ENGINE_finish(ret->engine);
187#endif
188 OPENSSL_free(ret);
189 return NULL;
190 }
191#endif
192
193 ret->pad=0;
194 ret->version=0;
195 ret->n=NULL;
196 ret->e=NULL;
197 ret->d=NULL;
198 ret->p=NULL;
199 ret->q=NULL;
200 ret->dmp1=NULL;
201 ret->dmq1=NULL;
202 ret->iqmp=NULL;
203 ret->references=1;
204 ret->_method_mod_n=NULL;
205 ret->_method_mod_p=NULL;
206 ret->_method_mod_q=NULL;
207 ret->blinding=NULL;
208 ret->mt_blinding=NULL;
209 ret->bignum_data=NULL;
210 ret->flags=ret->meth->flags;
211 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
212 if ((ret->meth->init != NULL) && !ret->meth->init(ret))
213 {
214#ifndef OPENSSL_NO_ENGINE
215 if (ret->engine)
216 ENGINE_finish(ret->engine);
217#endif
218 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
219 OPENSSL_free(ret);
220 ret=NULL;
221 }
222 return(ret);
223 }
224
225void RSA_free(RSA *r)
226 {
227 int i;
228
229 if (r == NULL) return;
230
231 i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA);
232#ifdef REF_PRINT
233 REF_PRINT("RSA",r);
234#endif
235 if (i > 0) return;
236#ifdef REF_CHECK
237 if (i < 0)
238 {
239 fprintf(stderr,"RSA_free, bad reference count\n");
240 abort();
241 }
242#endif
243
244 if (r->meth->finish)
245 r->meth->finish(r);
246#ifndef OPENSSL_NO_ENGINE
247 if (r->engine)
248 ENGINE_finish(r->engine);
249#endif
250
251 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, r, &r->ex_data);
252
253 if (r->n != NULL) BN_clear_free(r->n);
254 if (r->e != NULL) BN_clear_free(r->e);
255 if (r->d != NULL) BN_clear_free(r->d);
256 if (r->p != NULL) BN_clear_free(r->p);
257 if (r->q != NULL) BN_clear_free(r->q);
258 if (r->dmp1 != NULL) BN_clear_free(r->dmp1);
259 if (r->dmq1 != NULL) BN_clear_free(r->dmq1);
260 if (r->iqmp != NULL) BN_clear_free(r->iqmp);
261 if (r->blinding != NULL) BN_BLINDING_free(r->blinding);
262 if (r->mt_blinding != NULL) BN_BLINDING_free(r->mt_blinding);
263 if (r->bignum_data != NULL) OPENSSL_free_locked(r->bignum_data);
264 OPENSSL_free(r);
265 }
266
267int RSA_up_ref(RSA *r)
268 {
269 int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_RSA);
270#ifdef REF_PRINT
271 REF_PRINT("RSA",r);
272#endif
273#ifdef REF_CHECK
274 if (i < 2)
275 {
276 fprintf(stderr, "RSA_up_ref, bad reference count\n");
277 abort();
278 }
279#endif
280 return ((i > 1) ? 1 : 0);
281 }
282
283int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
284 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
285 {
286 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, argl, argp,
287 new_func, dup_func, free_func);
288 }
289
290int RSA_set_ex_data(RSA *r, int idx, void *arg)
291 {
292 return(CRYPTO_set_ex_data(&r->ex_data,idx,arg));
293 }
294
295void *RSA_get_ex_data(const RSA *r, int idx)
296 {
297 return(CRYPTO_get_ex_data(&r->ex_data,idx));
298 }
299
300int RSA_flags(const RSA *r)
301 {
302 return((r == NULL)?0:r->meth->flags);
303 }
304
305int RSA_memory_lock(RSA *r)
306 {
307 int i,j,k,off;
308 char *p;
309 BIGNUM *bn,**t[6],*b;
310 BN_ULONG *ul;
311
312 if (r->d == NULL) return(1);
313 t[0]= &r->d;
314 t[1]= &r->p;
315 t[2]= &r->q;
316 t[3]= &r->dmp1;
317 t[4]= &r->dmq1;
318 t[5]= &r->iqmp;
319 k=sizeof(BIGNUM)*6;
320 off=k/sizeof(BN_ULONG)+1;
321 j=1;
322 for (i=0; i<6; i++)
323 j+= (*t[i])->top;
324 if ((p=OPENSSL_malloc_locked((off+j)*sizeof(BN_ULONG))) == NULL)
325 {
326 RSAerr(RSA_F_RSA_MEMORY_LOCK,ERR_R_MALLOC_FAILURE);
327 return(0);
328 }
329 bn=(BIGNUM *)p;
330 ul=(BN_ULONG *)&(p[off]);
331 for (i=0; i<6; i++)
332 {
333 b= *(t[i]);
334 *(t[i])= &(bn[i]);
335 memcpy((char *)&(bn[i]),(char *)b,sizeof(BIGNUM));
336 bn[i].flags=BN_FLG_STATIC_DATA;
337 bn[i].d=ul;
338 memcpy((char *)ul,b->d,sizeof(BN_ULONG)*b->top);
339 ul+=b->top;
340 BN_clear_free(b);
341 }
342
343 /* I should fix this so it can still be done */
344 r->flags&= ~(RSA_FLAG_CACHE_PRIVATE|RSA_FLAG_CACHE_PUBLIC);
345
346 r->bignum_data=p;
347 return(1);
348 }
diff --git a/src/lib/libssl/src/crypto/rsa/rsa_x931g.c b/src/lib/libssl/src/crypto/rsa/rsa_x931g.c
new file mode 100644
index 0000000000..c640cc2ec9
--- /dev/null
+++ b/src/lib/libssl/src/crypto/rsa/rsa_x931g.c
@@ -0,0 +1,255 @@
1/* crypto/rsa/rsa_gen.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 <string.h>
61#include <time.h>
62#include <openssl/err.h>
63#include <openssl/bn.h>
64#include <openssl/rsa.h>
65
66#ifndef OPENSSL_FIPS
67
68/* X9.31 RSA key derivation and generation */
69
70int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, BIGNUM *q2,
71 const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *Xp,
72 const BIGNUM *Xq1, const BIGNUM *Xq2, const BIGNUM *Xq,
73 const BIGNUM *e, BN_GENCB *cb)
74 {
75 BIGNUM *r0=NULL,*r1=NULL,*r2=NULL,*r3=NULL;
76 BN_CTX *ctx=NULL,*ctx2=NULL;
77
78 if (!rsa)
79 goto err;
80
81 ctx = BN_CTX_new();
82 BN_CTX_start(ctx);
83 if (!ctx)
84 goto err;
85
86 r0 = BN_CTX_get(ctx);
87 r1 = BN_CTX_get(ctx);
88 r2 = BN_CTX_get(ctx);
89 r3 = BN_CTX_get(ctx);
90
91 if (r3 == NULL)
92 goto err;
93 if (!rsa->e)
94 {
95 rsa->e = BN_dup(e);
96 if (!rsa->e)
97 goto err;
98 }
99 else
100 e = rsa->e;
101
102 /* If not all parameters present only calculate what we can.
103 * This allows test programs to output selective parameters.
104 */
105
106 if (Xp && !rsa->p)
107 {
108 rsa->p = BN_new();
109 if (!rsa->p)
110 goto err;
111
112 if (!BN_X931_derive_prime_ex(rsa->p, p1, p2,
113 Xp, Xp1, Xp2, e, ctx, cb))
114 goto err;
115 }
116
117 if (Xq && !rsa->q)
118 {
119 rsa->q = BN_new();
120 if (!rsa->q)
121 goto err;
122 if (!BN_X931_derive_prime_ex(rsa->q, q1, q2,
123 Xq, Xq1, Xq2, e, ctx, cb))
124 goto err;
125 }
126
127 if (!rsa->p || !rsa->q)
128 {
129 BN_CTX_end(ctx);
130 BN_CTX_free(ctx);
131 return 2;
132 }
133
134 /* Since both primes are set we can now calculate all remaining
135 * components.
136 */
137
138 /* calculate n */
139 rsa->n=BN_new();
140 if (rsa->n == NULL)
141 goto err;
142 if (!BN_mul(rsa->n,rsa->p,rsa->q,ctx))
143 goto err;
144
145 /* calculate d */
146 if (!BN_sub(r1,rsa->p,BN_value_one()))
147 goto err; /* p-1 */
148 if (!BN_sub(r2,rsa->q,BN_value_one()))
149 goto err; /* q-1 */
150 if (!BN_mul(r0,r1,r2,ctx))
151 goto err; /* (p-1)(q-1) */
152
153 if (!BN_gcd(r3, r1, r2, ctx))
154 goto err;
155
156 if (!BN_div(r0, NULL, r0, r3, ctx))
157 goto err; /* LCM((p-1)(q-1)) */
158
159 ctx2 = BN_CTX_new();
160 if (!ctx2)
161 goto err;
162
163 rsa->d=BN_mod_inverse(NULL,rsa->e,r0,ctx2); /* d */
164 if (rsa->d == NULL)
165 goto err;
166
167 /* calculate d mod (p-1) */
168 rsa->dmp1=BN_new();
169 if (rsa->dmp1 == NULL)
170 goto err;
171 if (!BN_mod(rsa->dmp1,rsa->d,r1,ctx))
172 goto err;
173
174 /* calculate d mod (q-1) */
175 rsa->dmq1=BN_new();
176 if (rsa->dmq1 == NULL)
177 goto err;
178 if (!BN_mod(rsa->dmq1,rsa->d,r2,ctx))
179 goto err;
180
181 /* calculate inverse of q mod p */
182 rsa->iqmp=BN_mod_inverse(NULL,rsa->q,rsa->p,ctx2);
183
184 err:
185 if (ctx)
186 {
187 BN_CTX_end(ctx);
188 BN_CTX_free(ctx);
189 }
190 if (ctx2)
191 BN_CTX_free(ctx2);
192 /* If this is set all calls successful */
193 if (rsa->iqmp != NULL)
194 return 1;
195
196 return 0;
197
198 }
199
200int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, BN_GENCB *cb)
201 {
202 int ok = 0;
203 BIGNUM *Xp = NULL, *Xq = NULL;
204 BN_CTX *ctx = NULL;
205
206 ctx = BN_CTX_new();
207 if (!ctx)
208 goto error;
209
210 BN_CTX_start(ctx);
211 Xp = BN_CTX_get(ctx);
212 Xq = BN_CTX_get(ctx);
213 if (!BN_X931_generate_Xpq(Xp, Xq, bits, ctx))
214 goto error;
215
216 rsa->p = BN_new();
217 rsa->q = BN_new();
218 if (!rsa->p || !rsa->q)
219 goto error;
220
221 /* Generate two primes from Xp, Xq */
222
223 if (!BN_X931_generate_prime_ex(rsa->p, NULL, NULL, NULL, NULL, Xp,
224 e, ctx, cb))
225 goto error;
226
227 if (!BN_X931_generate_prime_ex(rsa->q, NULL, NULL, NULL, NULL, Xq,
228 e, ctx, cb))
229 goto error;
230
231 /* Since rsa->p and rsa->q are valid this call will just derive
232 * remaining RSA components.
233 */
234
235 if (!RSA_X931_derive_ex(rsa, NULL, NULL, NULL, NULL,
236 NULL, NULL, NULL, NULL, NULL, NULL, e, cb))
237 goto error;
238
239 ok = 1;
240
241 error:
242 if (ctx)
243 {
244 BN_CTX_end(ctx);
245 BN_CTX_free(ctx);
246 }
247
248 if (ok)
249 return 1;
250
251 return 0;
252
253 }
254
255#endif
diff --git a/src/lib/libssl/src/crypto/sha/Makefile b/src/lib/libssl/src/crypto/sha/Makefile
index ac64fb61d3..f4741b9ee6 100644
--- a/src/lib/libssl/src/crypto/sha/Makefile
+++ b/src/lib/libssl/src/crypto/sha/Makefile
@@ -38,7 +38,7 @@ top:
38all: lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 $(ARX) $(LIB) $(LIBOBJ)
42 $(RANLIB) $(LIB) || echo Never mind. 42 $(RANLIB) $(LIB) || echo Never mind.
43 @touch lib 43 @touch lib
44 44
@@ -59,7 +59,7 @@ s512sse2-out.s: asm/sha512-sse2.pl ../perlasm/x86asm.pl
59 (cd asm; $(PERL) sha512-sse2.pl a.out $(CFLAGS) $(PROCESSOR) > ../$@) 59 (cd asm; $(PERL) sha512-sse2.pl a.out $(CFLAGS) $(PROCESSOR) > ../$@)
60 60
61sha1-ia64.s: asm/sha1-ia64.pl 61sha1-ia64.s: asm/sha1-ia64.pl
62 (cd asm; $(PERL) sha1-ia64.pl $(CFLAGS) ) > $@ 62 (cd asm; $(PERL) sha1-ia64.pl ../$@ $(CFLAGS))
63sha256-ia64.s: asm/sha512-ia64.pl 63sha256-ia64.s: asm/sha512-ia64.pl
64 (cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS)) 64 (cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS))
65sha512-ia64.s: asm/sha512-ia64.pl 65sha512-ia64.s: asm/sha512-ia64.pl
@@ -113,24 +113,31 @@ sha1_one.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
113sha1_one.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 113sha1_one.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
114sha1_one.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 114sha1_one.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
115sha1_one.o: sha1_one.c 115sha1_one.o: sha1_one.c
116sha1dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 116sha1dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
117sha1dgst.o: ../../include/openssl/opensslconf.h
117sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h 118sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h
118sha1dgst.o: ../md32_common.h sha1dgst.c sha_locl.h 119sha1dgst.o: ../md32_common.h sha1dgst.c sha_locl.h
119sha256.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 120sha256.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
120sha256.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 121sha256.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
121sha256.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h 122sha256.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
122sha256.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 123sha256.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
123sha256.o: ../../include/openssl/symhacks.h ../md32_common.h sha256.c 124sha256.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
125sha256.o: ../md32_common.h sha256.c
124sha512.o: ../../e_os.h ../../include/openssl/bio.h 126sha512.o: ../../e_os.h ../../include/openssl/bio.h
125sha512.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 127sha512.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
126sha512.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 128sha512.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
127sha512.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h 129sha512.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
128sha512.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 130sha512.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
129sha512.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 131sha512.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
130sha512.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 132sha512.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
131sha512.o: ../cryptlib.h sha512.c 133sha512.o: ../../include/openssl/symhacks.h ../cryptlib.h sha512.c
132sha_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h 134sha_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
133sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h 135sha_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
136sha_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
137sha_dgst.o: ../../include/openssl/opensslconf.h
138sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
139sha_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
140sha_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
134sha_dgst.o: ../md32_common.h sha_dgst.c sha_locl.h 141sha_dgst.o: ../md32_common.h sha_dgst.c sha_locl.h
135sha_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 142sha_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
136sha_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 143sha_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
diff --git a/src/lib/libssl/src/crypto/stack/Makefile b/src/lib/libssl/src/crypto/stack/Makefile
index 5327692ac8..489a77b93c 100644
--- a/src/lib/libssl/src/crypto/stack/Makefile
+++ b/src/lib/libssl/src/crypto/stack/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
diff --git a/src/lib/libssl/src/crypto/txt_db/Makefile b/src/lib/libssl/src/crypto/txt_db/Makefile
index e6f30331d8..87e57b49f6 100644
--- a/src/lib/libssl/src/crypto/txt_db/Makefile
+++ b/src/lib/libssl/src/crypto/txt_db/Makefile
@@ -33,7 +33,7 @@ top:
33all: lib 33all: lib
34 34
35lib: $(LIBOBJ) 35lib: $(LIBOBJ)
36 $(AR) $(LIB) $(LIBOBJ) 36 $(ARX) $(LIB) $(LIBOBJ)
37 $(RANLIB) $(LIB) || echo Never mind. 37 $(RANLIB) $(LIB) || echo Never mind.
38 @touch lib 38 @touch lib
39 39
diff --git a/src/lib/libssl/src/crypto/ui/Makefile b/src/lib/libssl/src/crypto/ui/Makefile
index a685659fb4..4755e206f6 100644
--- a/src/lib/libssl/src/crypto/ui/Makefile
+++ b/src/lib/libssl/src/crypto/ui/Makefile
@@ -37,7 +37,7 @@ top:
37all: lib 37all: lib
38 38
39lib: $(LIBOBJ) 39lib: $(LIBOBJ)
40 $(AR) $(LIB) $(LIBOBJ) 40 $(ARX) $(LIB) $(LIBOBJ)
41 $(RANLIB) $(LIB) || echo Never mind. 41 $(RANLIB) $(LIB) || echo Never mind.
42 @touch lib 42 @touch lib
43 43
diff --git a/src/lib/libssl/src/crypto/x509/Makefile b/src/lib/libssl/src/crypto/x509/Makefile
index ddcc3124a7..464752b159 100644
--- a/src/lib/libssl/src/crypto/x509/Makefile
+++ b/src/lib/libssl/src/crypto/x509/Makefile
@@ -43,7 +43,7 @@ top:
43all: lib 43all: lib
44 44
45lib: $(LIBOBJ) 45lib: $(LIBOBJ)
46 $(AR) $(LIB) $(LIBOBJ) 46 $(ARX) $(LIB) $(LIBOBJ)
47 $(RANLIB) $(LIB) || echo Never mind. 47 $(RANLIB) $(LIB) || echo Never mind.
48 @touch lib 48 @touch lib
49 49
@@ -89,35 +89,37 @@ by_dir.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
89by_dir.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 89by_dir.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
90by_dir.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 90by_dir.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
91by_dir.o: ../../include/openssl/err.h ../../include/openssl/evp.h 91by_dir.o: ../../include/openssl/err.h ../../include/openssl/evp.h
92by_dir.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 92by_dir.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
93by_dir.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 93by_dir.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
94by_dir.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 94by_dir.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
95by_dir.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 95by_dir.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
96by_dir.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 96by_dir.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
97by_dir.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 97by_dir.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
98by_dir.o: ../../include/openssl/x509_vfy.h ../cryptlib.h by_dir.c 98by_dir.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
99by_dir.o: ../cryptlib.h by_dir.c
99by_file.o: ../../e_os.h ../../include/openssl/asn1.h 100by_file.o: ../../e_os.h ../../include/openssl/asn1.h
100by_file.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 101by_file.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
101by_file.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 102by_file.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
102by_file.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 103by_file.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
103by_file.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 104by_file.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
104by_file.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 105by_file.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
105by_file.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 106by_file.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
106by_file.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 107by_file.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
107by_file.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h 108by_file.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
108by_file.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h 109by_file.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
109by_file.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 110by_file.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
110by_file.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 111by_file.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
111by_file.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 112by_file.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
112by_file.o: ../cryptlib.h by_file.c 113by_file.o: ../../include/openssl/x509_vfy.h ../cryptlib.h by_file.c
113x509_att.o: ../../e_os.h ../../include/openssl/asn1.h 114x509_att.o: ../../e_os.h ../../include/openssl/asn1.h
114x509_att.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 115x509_att.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
115x509_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 116x509_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
116x509_att.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 117x509_att.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
117x509_att.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 118x509_att.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
118x509_att.o: ../../include/openssl/err.h ../../include/openssl/evp.h 119x509_att.o: ../../include/openssl/err.h ../../include/openssl/evp.h
119x509_att.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 120x509_att.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
120x509_att.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 121x509_att.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
122x509_att.o: ../../include/openssl/opensslconf.h
121x509_att.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 123x509_att.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
122x509_att.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 124x509_att.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
123x509_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 125x509_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -130,8 +132,9 @@ x509_cmp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
130x509_cmp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 132x509_cmp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
131x509_cmp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 133x509_cmp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
132x509_cmp.o: ../../include/openssl/err.h ../../include/openssl/evp.h 134x509_cmp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
133x509_cmp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 135x509_cmp.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
134x509_cmp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 136x509_cmp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
137x509_cmp.o: ../../include/openssl/opensslconf.h
135x509_cmp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 138x509_cmp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
136x509_cmp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 139x509_cmp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
137x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 140x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -143,22 +146,22 @@ x509_d2.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
143x509_d2.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 146x509_d2.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
144x509_d2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 147x509_d2.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
145x509_d2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 148x509_d2.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
146x509_d2.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 149x509_d2.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
147x509_d2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 150x509_d2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
148x509_d2.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 151x509_d2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
149x509_d2.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 152x509_d2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
150x509_d2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 153x509_d2.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
151x509_d2.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 154x509_d2.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
152x509_d2.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 155x509_d2.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
153x509_d2.o: ../cryptlib.h x509_d2.c 156x509_d2.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509_d2.c
154x509_def.o: ../../e_os.h ../../include/openssl/asn1.h 157x509_def.o: ../../e_os.h ../../include/openssl/asn1.h
155x509_def.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 158x509_def.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
156x509_def.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 159x509_def.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
157x509_def.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 160x509_def.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
158x509_def.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 161x509_def.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
159x509_def.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 162x509_def.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
160x509_def.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 163x509_def.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
161x509_def.o: ../../include/openssl/opensslconf.h 164x509_def.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
162x509_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 165x509_def.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
163x509_def.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 166x509_def.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
164x509_def.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 167x509_def.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -169,8 +172,9 @@ x509_err.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
169x509_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 172x509_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
170x509_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 173x509_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
171x509_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h 174x509_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
172x509_err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 175x509_err.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
173x509_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 176x509_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
177x509_err.o: ../../include/openssl/opensslconf.h
174x509_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 178x509_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
175x509_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 179x509_err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
176x509_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 180x509_err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -182,8 +186,9 @@ x509_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
182x509_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 186x509_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
183x509_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 187x509_ext.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
184x509_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h 188x509_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h
185x509_ext.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 189x509_ext.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
186x509_ext.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 190x509_ext.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
191x509_ext.o: ../../include/openssl/opensslconf.h
187x509_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 192x509_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
188x509_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 193x509_ext.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
189x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 194x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -196,22 +201,22 @@ x509_lu.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
196x509_lu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 201x509_lu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
197x509_lu.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 202x509_lu.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
198x509_lu.o: ../../include/openssl/err.h ../../include/openssl/evp.h 203x509_lu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
199x509_lu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 204x509_lu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
200x509_lu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 205x509_lu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
201x509_lu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 206x509_lu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
202x509_lu.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 207x509_lu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
203x509_lu.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 208x509_lu.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
204x509_lu.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 209x509_lu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
205x509_lu.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 210x509_lu.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
206x509_lu.o: ../cryptlib.h x509_lu.c 211x509_lu.o: ../../include/openssl/x509v3.h ../cryptlib.h x509_lu.c
207x509_obj.o: ../../e_os.h ../../include/openssl/asn1.h 212x509_obj.o: ../../e_os.h ../../include/openssl/asn1.h
208x509_obj.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 213x509_obj.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
209x509_obj.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 214x509_obj.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
210x509_obj.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 215x509_obj.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
211x509_obj.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 216x509_obj.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
212x509_obj.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 217x509_obj.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
213x509_obj.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 218x509_obj.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
214x509_obj.o: ../../include/openssl/opensslconf.h 219x509_obj.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
215x509_obj.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 220x509_obj.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
216x509_obj.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 221x509_obj.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
217x509_obj.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 222x509_obj.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -223,8 +228,9 @@ x509_r2x.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
223x509_r2x.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 228x509_r2x.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
224x509_r2x.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 229x509_r2x.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
225x509_r2x.o: ../../include/openssl/err.h ../../include/openssl/evp.h 230x509_r2x.o: ../../include/openssl/err.h ../../include/openssl/evp.h
226x509_r2x.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 231x509_r2x.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
227x509_r2x.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 232x509_r2x.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
233x509_r2x.o: ../../include/openssl/opensslconf.h
228x509_r2x.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 234x509_r2x.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
229x509_r2x.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 235x509_r2x.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
230x509_r2x.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 236x509_r2x.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -236,8 +242,9 @@ x509_req.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
236x509_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 242x509_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
237x509_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 243x509_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
238x509_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h 244x509_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
239x509_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 245x509_req.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
240x509_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 246x509_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
247x509_req.o: ../../include/openssl/opensslconf.h
241x509_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 248x509_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
242x509_req.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h 249x509_req.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
243x509_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 250x509_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -249,9 +256,9 @@ x509_set.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
249x509_set.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 256x509_set.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
250x509_set.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 257x509_set.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
251x509_set.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 258x509_set.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
252x509_set.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 259x509_set.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
253x509_set.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 260x509_set.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
254x509_set.o: ../../include/openssl/opensslconf.h 261x509_set.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
255x509_set.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 262x509_set.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
256x509_set.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 263x509_set.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
257x509_set.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 264x509_set.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -263,8 +270,9 @@ x509_trs.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
263x509_trs.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 270x509_trs.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
264x509_trs.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 271x509_trs.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
265x509_trs.o: ../../include/openssl/err.h ../../include/openssl/evp.h 272x509_trs.o: ../../include/openssl/err.h ../../include/openssl/evp.h
266x509_trs.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 273x509_trs.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
267x509_trs.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 274x509_trs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
275x509_trs.o: ../../include/openssl/opensslconf.h
268x509_trs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 276x509_trs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
269x509_trs.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 277x509_trs.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
270x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 278x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -276,9 +284,9 @@ x509_txt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
276x509_txt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 284x509_txt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
277x509_txt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 285x509_txt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
278x509_txt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 286x509_txt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
279x509_txt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 287x509_txt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
280x509_txt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 288x509_txt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
281x509_txt.o: ../../include/openssl/opensslconf.h 289x509_txt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
282x509_txt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 290x509_txt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
283x509_txt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 291x509_txt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
284x509_txt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 292x509_txt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -290,22 +298,23 @@ x509_v3.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
290x509_v3.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 298x509_v3.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
291x509_v3.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 299x509_v3.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
292x509_v3.o: ../../include/openssl/err.h ../../include/openssl/evp.h 300x509_v3.o: ../../include/openssl/err.h ../../include/openssl/evp.h
293x509_v3.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 301x509_v3.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
294x509_v3.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 302x509_v3.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
295x509_v3.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 303x509_v3.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
296x509_v3.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 304x509_v3.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
297x509_v3.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 305x509_v3.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
298x509_v3.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 306x509_v3.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
299x509_v3.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 307x509_v3.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
300x509_v3.o: ../cryptlib.h x509_v3.c 308x509_v3.o: ../../include/openssl/x509v3.h ../cryptlib.h x509_v3.c
301x509_vfy.o: ../../e_os.h ../../include/openssl/asn1.h 309x509_vfy.o: ../../e_os.h ../../include/openssl/asn1.h
302x509_vfy.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 310x509_vfy.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
303x509_vfy.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 311x509_vfy.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
304x509_vfy.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 312x509_vfy.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
305x509_vfy.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 313x509_vfy.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
306x509_vfy.o: ../../include/openssl/err.h ../../include/openssl/evp.h 314x509_vfy.o: ../../include/openssl/err.h ../../include/openssl/evp.h
307x509_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 315x509_vfy.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
308x509_vfy.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 316x509_vfy.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
317x509_vfy.o: ../../include/openssl/opensslconf.h
309x509_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 318x509_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
310x509_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 319x509_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
311x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 320x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -318,8 +327,9 @@ x509_vpm.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
318x509_vpm.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 327x509_vpm.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
319x509_vpm.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 328x509_vpm.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
320x509_vpm.o: ../../include/openssl/err.h ../../include/openssl/evp.h 329x509_vpm.o: ../../include/openssl/err.h ../../include/openssl/evp.h
321x509_vpm.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 330x509_vpm.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
322x509_vpm.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 331x509_vpm.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
332x509_vpm.o: ../../include/openssl/opensslconf.h
323x509_vpm.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 333x509_vpm.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
324x509_vpm.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 334x509_vpm.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
325x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 335x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -331,9 +341,9 @@ x509cset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
331x509cset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 341x509cset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
332x509cset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 342x509cset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
333x509cset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 343x509cset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
334x509cset.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 344x509cset.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
335x509cset.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 345x509cset.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
336x509cset.o: ../../include/openssl/opensslconf.h 346x509cset.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
337x509cset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 347x509cset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
338x509cset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 348x509cset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
339x509cset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 349x509cset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -344,9 +354,9 @@ x509name.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
344x509name.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 354x509name.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
345x509name.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 355x509name.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
346x509name.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 356x509name.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
347x509name.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 357x509name.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
348x509name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 358x509name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
349x509name.o: ../../include/openssl/opensslconf.h 359x509name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
350x509name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 360x509name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
351x509name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 361x509name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
352x509name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 362x509name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -357,9 +367,9 @@ x509rset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
357x509rset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 367x509rset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
358x509rset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 368x509rset.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
359x509rset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 369x509rset.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
360x509rset.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 370x509rset.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
361x509rset.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 371x509rset.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
362x509rset.o: ../../include/openssl/opensslconf.h 372x509rset.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
363x509rset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 373x509rset.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
364x509rset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 374x509rset.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
365x509rset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 375x509rset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -370,9 +380,9 @@ x509spki.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
370x509spki.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 380x509spki.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
371x509spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 381x509spki.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
372x509spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 382x509spki.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
373x509spki.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 383x509spki.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
374x509spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 384x509spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
375x509spki.o: ../../include/openssl/opensslconf.h 385x509spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
376x509spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 386x509spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
377x509spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 387x509spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
378x509spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 388x509spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -383,9 +393,9 @@ x509type.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
383x509type.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 393x509type.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
384x509type.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 394x509type.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
385x509type.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 395x509type.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
386x509type.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 396x509type.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
387x509type.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 397x509type.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
388x509type.o: ../../include/openssl/opensslconf.h 398x509type.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
389x509type.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 399x509type.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
390x509type.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 400x509type.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
391x509type.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 401x509type.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -396,11 +406,12 @@ x_all.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
396x_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 406x_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
397x_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 407x_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
398x_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 408x_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
399x_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 409x_all.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
400x_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 410x_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
401x_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 411x_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
402x_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 412x_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
403x_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 413x_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
404x_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 414x_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
405x_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 415x_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
406x_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_all.c 416x_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
417x_all.o: ../cryptlib.h x_all.c
diff --git a/src/lib/libssl/src/crypto/x509v3/Makefile b/src/lib/libssl/src/crypto/x509v3/Makefile
index 556ef351bf..e71dc42f9f 100644
--- a/src/lib/libssl/src/crypto/x509v3/Makefile
+++ b/src/lib/libssl/src/crypto/x509v3/Makefile
@@ -43,7 +43,7 @@ top:
43all: lib 43all: lib
44 44
45lib: $(LIBOBJ) 45lib: $(LIBOBJ)
46 $(AR) $(LIB) $(LIBOBJ) 46 $(ARX) $(LIB) $(LIBOBJ)
47 $(RANLIB) $(LIB) || echo Never mind. 47 $(RANLIB) $(LIB) || echo Never mind.
48 @touch lib 48 @touch lib
49 49
@@ -90,8 +90,8 @@ pcy_cache.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
90pcy_cache.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 90pcy_cache.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
91pcy_cache.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 91pcy_cache.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
92pcy_cache.o: ../../include/openssl/err.h ../../include/openssl/evp.h 92pcy_cache.o: ../../include/openssl/err.h ../../include/openssl/evp.h
93pcy_cache.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 93pcy_cache.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
94pcy_cache.o: ../../include/openssl/objects.h 94pcy_cache.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
95pcy_cache.o: ../../include/openssl/opensslconf.h 95pcy_cache.o: ../../include/openssl/opensslconf.h
96pcy_cache.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 96pcy_cache.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
97pcy_cache.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 97pcy_cache.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
@@ -105,8 +105,9 @@ pcy_data.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
105pcy_data.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 105pcy_data.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
106pcy_data.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 106pcy_data.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
107pcy_data.o: ../../include/openssl/err.h ../../include/openssl/evp.h 107pcy_data.o: ../../include/openssl/err.h ../../include/openssl/evp.h
108pcy_data.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 108pcy_data.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
109pcy_data.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 109pcy_data.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
110pcy_data.o: ../../include/openssl/opensslconf.h
110pcy_data.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 111pcy_data.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
111pcy_data.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 112pcy_data.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
112pcy_data.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 113pcy_data.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -119,35 +120,36 @@ pcy_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
119pcy_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 120pcy_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
120pcy_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 121pcy_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
121pcy_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h 122pcy_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
122pcy_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 123pcy_lib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
123pcy_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 124pcy_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
124pcy_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 125pcy_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
125pcy_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 126pcy_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
126pcy_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 127pcy_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
127pcy_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 128pcy_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
128pcy_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 129pcy_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
129pcy_lib.o: ../cryptlib.h pcy_int.h pcy_lib.c 130pcy_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h pcy_int.h pcy_lib.c
130pcy_map.o: ../../e_os.h ../../include/openssl/asn1.h 131pcy_map.o: ../../e_os.h ../../include/openssl/asn1.h
131pcy_map.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 132pcy_map.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
132pcy_map.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 133pcy_map.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
133pcy_map.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 134pcy_map.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
134pcy_map.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 135pcy_map.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
135pcy_map.o: ../../include/openssl/err.h ../../include/openssl/evp.h 136pcy_map.o: ../../include/openssl/err.h ../../include/openssl/evp.h
136pcy_map.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 137pcy_map.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
137pcy_map.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 138pcy_map.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
138pcy_map.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 139pcy_map.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
139pcy_map.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 140pcy_map.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
140pcy_map.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 141pcy_map.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
141pcy_map.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 142pcy_map.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
142pcy_map.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 143pcy_map.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
143pcy_map.o: ../cryptlib.h pcy_int.h pcy_map.c 144pcy_map.o: ../../include/openssl/x509v3.h ../cryptlib.h pcy_int.h pcy_map.c
144pcy_node.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 145pcy_node.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
145pcy_node.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 146pcy_node.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
146pcy_node.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 147pcy_node.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
147pcy_node.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 148pcy_node.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
148pcy_node.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h 149pcy_node.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
149pcy_node.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 150pcy_node.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
150pcy_node.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 151pcy_node.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
152pcy_node.o: ../../include/openssl/opensslconf.h
151pcy_node.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 153pcy_node.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
152pcy_node.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 154pcy_node.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
153pcy_node.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 155pcy_node.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -160,8 +162,9 @@ pcy_tree.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
160pcy_tree.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 162pcy_tree.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
161pcy_tree.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 163pcy_tree.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
162pcy_tree.o: ../../include/openssl/err.h ../../include/openssl/evp.h 164pcy_tree.o: ../../include/openssl/err.h ../../include/openssl/evp.h
163pcy_tree.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 165pcy_tree.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
164pcy_tree.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 166pcy_tree.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
167pcy_tree.o: ../../include/openssl/opensslconf.h
165pcy_tree.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 168pcy_tree.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
166pcy_tree.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 169pcy_tree.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
167pcy_tree.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 170pcy_tree.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -174,37 +177,39 @@ v3_addr.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
174v3_addr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 177v3_addr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
175v3_addr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 178v3_addr.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
176v3_addr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 179v3_addr.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
177v3_addr.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 180v3_addr.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
178v3_addr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 181v3_addr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
179v3_addr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 182v3_addr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
180v3_addr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 183v3_addr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
181v3_addr.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 184v3_addr.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
182v3_addr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 185v3_addr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
183v3_addr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 186v3_addr.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
184v3_addr.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_addr.c 187v3_addr.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
188v3_addr.o: ../cryptlib.h v3_addr.c
185v3_akey.o: ../../e_os.h ../../include/openssl/asn1.h 189v3_akey.o: ../../e_os.h ../../include/openssl/asn1.h
186v3_akey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 190v3_akey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
187v3_akey.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 191v3_akey.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
188v3_akey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 192v3_akey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
189v3_akey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 193v3_akey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
190v3_akey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 194v3_akey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
191v3_akey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 195v3_akey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
192v3_akey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 196v3_akey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
193v3_akey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 197v3_akey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
194v3_akey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 198v3_akey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
195v3_akey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 199v3_akey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
196v3_akey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 200v3_akey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
197v3_akey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 201v3_akey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
198v3_akey.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_akey.c 202v3_akey.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
203v3_akey.o: ../cryptlib.h v3_akey.c
199v3_akeya.o: ../../e_os.h ../../include/openssl/asn1.h 204v3_akeya.o: ../../e_os.h ../../include/openssl/asn1.h
200v3_akeya.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 205v3_akeya.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
201v3_akeya.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 206v3_akeya.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
202v3_akeya.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 207v3_akeya.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
203v3_akeya.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 208v3_akeya.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
204v3_akeya.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 209v3_akeya.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
205v3_akeya.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 210v3_akeya.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
206v3_akeya.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 211v3_akeya.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
207v3_akeya.o: ../../include/openssl/opensslconf.h 212v3_akeya.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
208v3_akeya.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 213v3_akeya.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
209v3_akeya.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 214v3_akeya.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
210v3_akeya.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 215v3_akeya.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -216,14 +221,15 @@ v3_alt.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
216v3_alt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 221v3_alt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
217v3_alt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 222v3_alt.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
218v3_alt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 223v3_alt.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
219v3_alt.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 224v3_alt.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
220v3_alt.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 225v3_alt.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
221v3_alt.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 226v3_alt.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
222v3_alt.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 227v3_alt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
223v3_alt.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 228v3_alt.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
224v3_alt.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 229v3_alt.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
225v3_alt.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 230v3_alt.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
226v3_alt.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_alt.c 231v3_alt.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
232v3_alt.o: ../cryptlib.h v3_alt.c
227v3_asid.o: ../../e_os.h ../../include/openssl/asn1.h 233v3_asid.o: ../../e_os.h ../../include/openssl/asn1.h
228v3_asid.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 234v3_asid.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
229v3_asid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h 235v3_asid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
@@ -231,23 +237,23 @@ v3_asid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
231v3_asid.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 237v3_asid.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
232v3_asid.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 238v3_asid.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
233v3_asid.o: ../../include/openssl/err.h ../../include/openssl/evp.h 239v3_asid.o: ../../include/openssl/err.h ../../include/openssl/evp.h
234v3_asid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 240v3_asid.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
235v3_asid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 241v3_asid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
236v3_asid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 242v3_asid.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
237v3_asid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 243v3_asid.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
238v3_asid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 244v3_asid.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
239v3_asid.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 245v3_asid.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
240v3_asid.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 246v3_asid.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
241v3_asid.o: ../cryptlib.h v3_asid.c 247v3_asid.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_asid.c
242v3_bcons.o: ../../e_os.h ../../include/openssl/asn1.h 248v3_bcons.o: ../../e_os.h ../../include/openssl/asn1.h
243v3_bcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 249v3_bcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
244v3_bcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 250v3_bcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
245v3_bcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 251v3_bcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
246v3_bcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 252v3_bcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
247v3_bcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 253v3_bcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
248v3_bcons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 254v3_bcons.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
249v3_bcons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 255v3_bcons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
250v3_bcons.o: ../../include/openssl/opensslconf.h 256v3_bcons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
251v3_bcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 257v3_bcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
252v3_bcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 258v3_bcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
253v3_bcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 259v3_bcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -260,8 +266,9 @@ v3_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
260v3_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 266v3_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
261v3_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 267v3_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
262v3_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h 268v3_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
263v3_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 269v3_bitst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
264v3_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 270v3_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
271v3_bitst.o: ../../include/openssl/opensslconf.h
265v3_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 272v3_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
266v3_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 273v3_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
267v3_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 274v3_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -274,23 +281,23 @@ v3_conf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
274v3_conf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 281v3_conf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
275v3_conf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 282v3_conf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
276v3_conf.o: ../../include/openssl/err.h ../../include/openssl/evp.h 283v3_conf.o: ../../include/openssl/err.h ../../include/openssl/evp.h
277v3_conf.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 284v3_conf.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
278v3_conf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 285v3_conf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
279v3_conf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 286v3_conf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
280v3_conf.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 287v3_conf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
281v3_conf.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 288v3_conf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
282v3_conf.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 289v3_conf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
283v3_conf.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 290v3_conf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
284v3_conf.o: ../cryptlib.h v3_conf.c 291v3_conf.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_conf.c
285v3_cpols.o: ../../e_os.h ../../include/openssl/asn1.h 292v3_cpols.o: ../../e_os.h ../../include/openssl/asn1.h
286v3_cpols.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 293v3_cpols.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
287v3_cpols.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 294v3_cpols.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
288v3_cpols.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 295v3_cpols.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
289v3_cpols.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 296v3_cpols.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
290v3_cpols.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 297v3_cpols.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
291v3_cpols.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 298v3_cpols.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
292v3_cpols.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 299v3_cpols.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
293v3_cpols.o: ../../include/openssl/opensslconf.h 300v3_cpols.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
294v3_cpols.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 301v3_cpols.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
295v3_cpols.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 302v3_cpols.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
296v3_cpols.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 303v3_cpols.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -303,37 +310,38 @@ v3_crld.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
303v3_crld.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 310v3_crld.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
304v3_crld.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 311v3_crld.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
305v3_crld.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 312v3_crld.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
306v3_crld.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 313v3_crld.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
307v3_crld.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 314v3_crld.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
308v3_crld.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 315v3_crld.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
309v3_crld.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 316v3_crld.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
310v3_crld.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 317v3_crld.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
311v3_crld.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 318v3_crld.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
312v3_crld.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 319v3_crld.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
313v3_crld.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_crld.c 320v3_crld.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
321v3_crld.o: ../cryptlib.h v3_crld.c
314v3_enum.o: ../../e_os.h ../../include/openssl/asn1.h 322v3_enum.o: ../../e_os.h ../../include/openssl/asn1.h
315v3_enum.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 323v3_enum.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
316v3_enum.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 324v3_enum.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
317v3_enum.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 325v3_enum.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
318v3_enum.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 326v3_enum.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
319v3_enum.o: ../../include/openssl/err.h ../../include/openssl/evp.h 327v3_enum.o: ../../include/openssl/err.h ../../include/openssl/evp.h
320v3_enum.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 328v3_enum.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
321v3_enum.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 329v3_enum.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
322v3_enum.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 330v3_enum.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
323v3_enum.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 331v3_enum.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
324v3_enum.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 332v3_enum.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
325v3_enum.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 333v3_enum.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
326v3_enum.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 334v3_enum.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
327v3_enum.o: ../cryptlib.h v3_enum.c 335v3_enum.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_enum.c
328v3_extku.o: ../../e_os.h ../../include/openssl/asn1.h 336v3_extku.o: ../../e_os.h ../../include/openssl/asn1.h
329v3_extku.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 337v3_extku.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
330v3_extku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 338v3_extku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
331v3_extku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 339v3_extku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
332v3_extku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 340v3_extku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
333v3_extku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 341v3_extku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
334v3_extku.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 342v3_extku.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
335v3_extku.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 343v3_extku.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
336v3_extku.o: ../../include/openssl/opensslconf.h 344v3_extku.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
337v3_extku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 345v3_extku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
338v3_extku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 346v3_extku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
339v3_extku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 347v3_extku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -346,76 +354,81 @@ v3_genn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
346v3_genn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 354v3_genn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
347v3_genn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 355v3_genn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
348v3_genn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 356v3_genn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
349v3_genn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 357v3_genn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
350v3_genn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 358v3_genn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
351v3_genn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 359v3_genn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
352v3_genn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 360v3_genn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
353v3_genn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 361v3_genn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
354v3_genn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 362v3_genn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
355v3_genn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 363v3_genn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
356v3_genn.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_genn.c 364v3_genn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
365v3_genn.o: ../cryptlib.h v3_genn.c
357v3_ia5.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 366v3_ia5.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
358v3_ia5.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 367v3_ia5.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
359v3_ia5.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 368v3_ia5.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
360v3_ia5.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 369v3_ia5.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
361v3_ia5.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 370v3_ia5.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
362v3_ia5.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 371v3_ia5.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
363v3_ia5.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 372v3_ia5.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
364v3_ia5.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 373v3_ia5.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
365v3_ia5.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 374v3_ia5.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
366v3_ia5.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 375v3_ia5.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
367v3_ia5.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 376v3_ia5.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
368v3_ia5.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 377v3_ia5.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
369v3_ia5.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_ia5.c 378v3_ia5.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
379v3_ia5.o: ../cryptlib.h v3_ia5.c
370v3_info.o: ../../e_os.h ../../include/openssl/asn1.h 380v3_info.o: ../../e_os.h ../../include/openssl/asn1.h
371v3_info.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 381v3_info.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
372v3_info.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 382v3_info.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
373v3_info.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 383v3_info.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
374v3_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 384v3_info.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
375v3_info.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 385v3_info.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
376v3_info.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 386v3_info.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
377v3_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 387v3_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
378v3_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 388v3_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
379v3_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 389v3_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
380v3_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 390v3_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
381v3_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 391v3_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
382v3_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 392v3_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
383v3_info.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_info.c 393v3_info.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
394v3_info.o: ../cryptlib.h v3_info.c
384v3_int.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 395v3_int.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
385v3_int.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 396v3_int.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
386v3_int.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 397v3_int.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
387v3_int.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 398v3_int.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
388v3_int.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 399v3_int.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
389v3_int.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 400v3_int.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
390v3_int.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 401v3_int.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
391v3_int.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 402v3_int.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
392v3_int.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 403v3_int.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
393v3_int.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 404v3_int.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
394v3_int.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 405v3_int.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
395v3_int.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 406v3_int.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
396v3_int.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_int.c 407v3_int.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
408v3_int.o: ../cryptlib.h v3_int.c
397v3_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 409v3_lib.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
398v3_lib.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 410v3_lib.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
399v3_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 411v3_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
400v3_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 412v3_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
401v3_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 413v3_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
402v3_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 414v3_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
403v3_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 415v3_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
404v3_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 416v3_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
405v3_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 417v3_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
406v3_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 418v3_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
407v3_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 419v3_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
408v3_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 420v3_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
409v3_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h ext_dat.h v3_lib.c 421v3_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
422v3_lib.o: ../cryptlib.h ext_dat.h v3_lib.c
410v3_ncons.o: ../../e_os.h ../../include/openssl/asn1.h 423v3_ncons.o: ../../e_os.h ../../include/openssl/asn1.h
411v3_ncons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 424v3_ncons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
412v3_ncons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 425v3_ncons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
413v3_ncons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 426v3_ncons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
414v3_ncons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 427v3_ncons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
415v3_ncons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 428v3_ncons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
416v3_ncons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 429v3_ncons.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
417v3_ncons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 430v3_ncons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
418v3_ncons.o: ../../include/openssl/opensslconf.h 431v3_ncons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
419v3_ncons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 432v3_ncons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
420v3_ncons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 433v3_ncons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
421v3_ncons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 434v3_ncons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -428,49 +441,52 @@ v3_ocsp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
428v3_ocsp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 441v3_ocsp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
429v3_ocsp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 442v3_ocsp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
430v3_ocsp.o: ../../include/openssl/err.h ../../include/openssl/evp.h 443v3_ocsp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
431v3_ocsp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 444v3_ocsp.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
432v3_ocsp.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h 445v3_ocsp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
433v3_ocsp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 446v3_ocsp.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
434v3_ocsp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 447v3_ocsp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
435v3_ocsp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 448v3_ocsp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
436v3_ocsp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 449v3_ocsp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
437v3_ocsp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 450v3_ocsp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
438v3_ocsp.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_ocsp.c 451v3_ocsp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
452v3_ocsp.o: ../cryptlib.h v3_ocsp.c
439v3_pci.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 453v3_pci.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
440v3_pci.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 454v3_pci.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
441v3_pci.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 455v3_pci.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
442v3_pci.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 456v3_pci.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
443v3_pci.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 457v3_pci.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
444v3_pci.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 458v3_pci.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
445v3_pci.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 459v3_pci.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
446v3_pci.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 460v3_pci.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
447v3_pci.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 461v3_pci.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
448v3_pci.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 462v3_pci.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
449v3_pci.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 463v3_pci.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
450v3_pci.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 464v3_pci.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
451v3_pci.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_pci.c 465v3_pci.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
466v3_pci.o: ../cryptlib.h v3_pci.c
452v3_pcia.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h 467v3_pcia.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
453v3_pcia.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 468v3_pcia.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
454v3_pcia.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 469v3_pcia.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
455v3_pcia.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 470v3_pcia.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
456v3_pcia.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 471v3_pcia.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
457v3_pcia.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 472v3_pcia.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
458v3_pcia.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 473v3_pcia.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
459v3_pcia.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 474v3_pcia.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
460v3_pcia.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 475v3_pcia.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
461v3_pcia.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 476v3_pcia.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
462v3_pcia.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 477v3_pcia.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
463v3_pcia.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 478v3_pcia.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
464v3_pcia.o: ../../include/openssl/x509v3.h v3_pcia.c 479v3_pcia.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
480v3_pcia.o: v3_pcia.c
465v3_pcons.o: ../../e_os.h ../../include/openssl/asn1.h 481v3_pcons.o: ../../e_os.h ../../include/openssl/asn1.h
466v3_pcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 482v3_pcons.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
467v3_pcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 483v3_pcons.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
468v3_pcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 484v3_pcons.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
469v3_pcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 485v3_pcons.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
470v3_pcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 486v3_pcons.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
471v3_pcons.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 487v3_pcons.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
472v3_pcons.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 488v3_pcons.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
473v3_pcons.o: ../../include/openssl/opensslconf.h 489v3_pcons.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
474v3_pcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 490v3_pcons.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
475v3_pcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 491v3_pcons.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
476v3_pcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 492v3_pcons.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -483,23 +499,24 @@ v3_pku.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
483v3_pku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 499v3_pku.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
484v3_pku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 500v3_pku.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
485v3_pku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 501v3_pku.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
486v3_pku.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 502v3_pku.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
487v3_pku.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 503v3_pku.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
488v3_pku.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 504v3_pku.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
489v3_pku.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 505v3_pku.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
490v3_pku.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 506v3_pku.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
491v3_pku.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 507v3_pku.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
492v3_pku.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 508v3_pku.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
493v3_pku.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_pku.c 509v3_pku.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
510v3_pku.o: ../cryptlib.h v3_pku.c
494v3_pmaps.o: ../../e_os.h ../../include/openssl/asn1.h 511v3_pmaps.o: ../../e_os.h ../../include/openssl/asn1.h
495v3_pmaps.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 512v3_pmaps.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
496v3_pmaps.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 513v3_pmaps.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
497v3_pmaps.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 514v3_pmaps.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
498v3_pmaps.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 515v3_pmaps.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
499v3_pmaps.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 516v3_pmaps.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
500v3_pmaps.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 517v3_pmaps.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
501v3_pmaps.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 518v3_pmaps.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
502v3_pmaps.o: ../../include/openssl/opensslconf.h 519v3_pmaps.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
503v3_pmaps.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 520v3_pmaps.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
504v3_pmaps.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 521v3_pmaps.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
505v3_pmaps.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 522v3_pmaps.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -511,51 +528,52 @@ v3_prn.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
511v3_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 528v3_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
512v3_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 529v3_prn.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
513v3_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 530v3_prn.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
514v3_prn.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 531v3_prn.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
515v3_prn.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 532v3_prn.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
516v3_prn.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 533v3_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
517v3_prn.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 534v3_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
518v3_prn.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 535v3_prn.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
519v3_prn.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 536v3_prn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
520v3_prn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 537v3_prn.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
521v3_prn.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_prn.c 538v3_prn.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
539v3_prn.o: ../cryptlib.h v3_prn.c
522v3_purp.o: ../../e_os.h ../../include/openssl/asn1.h 540v3_purp.o: ../../e_os.h ../../include/openssl/asn1.h
523v3_purp.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 541v3_purp.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
524v3_purp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 542v3_purp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
525v3_purp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 543v3_purp.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
526v3_purp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 544v3_purp.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
527v3_purp.o: ../../include/openssl/err.h ../../include/openssl/evp.h 545v3_purp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
528v3_purp.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 546v3_purp.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
529v3_purp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 547v3_purp.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
530v3_purp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 548v3_purp.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
531v3_purp.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 549v3_purp.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
532v3_purp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 550v3_purp.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
533v3_purp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 551v3_purp.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
534v3_purp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 552v3_purp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
535v3_purp.o: ../cryptlib.h v3_purp.c 553v3_purp.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_purp.c
536v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h 554v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h
537v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 555v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
538v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h 556v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
539v3_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 557v3_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
540v3_skey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 558v3_skey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
541v3_skey.o: ../../include/openssl/err.h ../../include/openssl/evp.h 559v3_skey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
542v3_skey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 560v3_skey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
543v3_skey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 561v3_skey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
544v3_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 562v3_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
545v3_skey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 563v3_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
546v3_skey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 564v3_skey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
547v3_skey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 565v3_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
548v3_skey.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 566v3_skey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
549v3_skey.o: ../cryptlib.h v3_skey.c 567v3_skey.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_skey.c
550v3_sxnet.o: ../../e_os.h ../../include/openssl/asn1.h 568v3_sxnet.o: ../../e_os.h ../../include/openssl/asn1.h
551v3_sxnet.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h 569v3_sxnet.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
552v3_sxnet.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 570v3_sxnet.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
553v3_sxnet.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 571v3_sxnet.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
554v3_sxnet.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 572v3_sxnet.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
555v3_sxnet.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 573v3_sxnet.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
556v3_sxnet.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 574v3_sxnet.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
557v3_sxnet.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 575v3_sxnet.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
558v3_sxnet.o: ../../include/openssl/opensslconf.h 576v3_sxnet.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
559v3_sxnet.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 577v3_sxnet.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
560v3_sxnet.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 578v3_sxnet.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
561v3_sxnet.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 579v3_sxnet.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -568,24 +586,25 @@ v3_utl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
568v3_utl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 586v3_utl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
569v3_utl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 587v3_utl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
570v3_utl.o: ../../include/openssl/err.h ../../include/openssl/evp.h 588v3_utl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
571v3_utl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 589v3_utl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
572v3_utl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 590v3_utl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
573v3_utl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 591v3_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
574v3_utl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h 592v3_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
575v3_utl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 593v3_utl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
576v3_utl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h 594v3_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
577v3_utl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h 595v3_utl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
578v3_utl.o: ../cryptlib.h v3_utl.c 596v3_utl.o: ../../include/openssl/x509v3.h ../cryptlib.h v3_utl.c
579v3err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 597v3err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
580v3err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h 598v3err.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
581v3err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 599v3err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
582v3err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 600v3err.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
583v3err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 601v3err.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
584v3err.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 602v3err.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
585v3err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 603v3err.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
586v3err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 604v3err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
587v3err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h 605v3err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
588v3err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 606v3err.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
589v3err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 607v3err.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
590v3err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h 608v3err.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
591v3err.o: ../../include/openssl/x509v3.h v3err.c 609v3err.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
610v3err.o: v3err.c
diff --git a/src/lib/libssl/src/demos/jpake/Makefile b/src/lib/libssl/src/demos/jpake/Makefile
new file mode 100644
index 0000000000..09b8f03d0c
--- /dev/null
+++ b/src/lib/libssl/src/demos/jpake/Makefile
@@ -0,0 +1,7 @@
1LDFLAGS=-L../.. -lcrypto
2CFLAGS=-I../../include -Wall -Werror -g
3
4all: jpakedemo
5
6jpakedemo: jpakedemo.o
7 $(CC) -g -o jpakedemo jpakedemo.o $(LDFLAGS)
diff --git a/src/lib/libssl/src/demos/jpake/jpakedemo.c b/src/lib/libssl/src/demos/jpake/jpakedemo.c
new file mode 100644
index 0000000000..338a8810d9
--- /dev/null
+++ b/src/lib/libssl/src/demos/jpake/jpakedemo.c
@@ -0,0 +1,469 @@
1#include "openssl/bn.h"
2#include "openssl/sha.h"
3#include <assert.h>
4#include <string.h>
5#include <stdlib.h>
6
7/* Copyright (C) 2008 Ben Laurie (ben@links.org) */
8
9/*
10 * Implement J-PAKE, as described in
11 * http://grouper.ieee.org/groups/1363/Research/contributions/hao-ryan-2008.pdf
12 *
13 * With hints from http://www.cl.cam.ac.uk/~fh240/software/JPAKE2.java.
14 */
15
16static void showbn(const char *name, const BIGNUM *bn)
17 {
18 fputs(name, stdout);
19 fputs(" = ", stdout);
20 BN_print_fp(stdout, bn);
21 putc('\n', stdout);
22 }
23
24typedef struct
25 {
26 BN_CTX *ctx; // Perhaps not the best place for this?
27 BIGNUM *p;
28 BIGNUM *q;
29 BIGNUM *g;
30 } JPakeParameters;
31
32static void JPakeParametersInit(JPakeParameters *params)
33 {
34 params->ctx = BN_CTX_new();
35
36 // For now use p, q, g from Java sample code. Later, generate them.
37 params->p = NULL;
38 BN_hex2bn(&params->p, "fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7");
39 params->q = NULL;
40 BN_hex2bn(&params->q, "9760508f15230bccb292b982a2eb840bf0581cf5");
41 params->g = NULL;
42 BN_hex2bn(&params->g, "f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a");
43
44 showbn("p", params->p);
45 showbn("q", params->q);
46 showbn("g", params->g);
47 }
48
49typedef struct
50 {
51 BIGNUM *gr; // g^r (r random)
52 BIGNUM *b; // b = r - x*h, h=hash(g, g^r, g^x, name)
53 } JPakeZKP;
54
55typedef struct
56 {
57 BIGNUM *gx; // g^x
58 JPakeZKP zkpx; // ZKP(x)
59 } JPakeStep1;
60
61typedef struct
62 {
63 BIGNUM *X; // g^(xa + xc + xd) * xb * s
64 JPakeZKP zkpxbs; // ZKP(xb * s)
65 } JPakeStep2;
66
67typedef struct
68 {
69 const char *name; // Must be unique
70 int base; // 1 for Alice, 3 for Bob. Only used for printing stuff.
71 JPakeStep1 s1c; // Alice's g^x3, ZKP(x3) or Bob's g^x1, ZKP(x1)
72 JPakeStep1 s1d; // Alice's g^x4, ZKP(x4) or Bob's g^x2, ZKP(x2)
73 JPakeStep2 s2; // Alice's A, ZKP(x2 * s) or Bob's B, ZKP(x4 * s)
74 } JPakeUserPublic;
75
76/*
77 * The user structure. In the definition, (xa, xb, xc, xd) are Alice's
78 * (x1, x2, x3, x4) or Bob's (x3, x4, x1, x2). If you see what I mean.
79 */
80typedef struct
81 {
82 JPakeUserPublic p;
83 BIGNUM *secret; // The shared secret
84 BIGNUM *key; // The calculated (shared) key
85 BIGNUM *xa; // Alice's x1 or Bob's x3
86 BIGNUM *xb; // Alice's x2 or Bob's x4
87 } JPakeUser;
88
89// Generate each party's random numbers. xa is in [0, q), xb is in [1, q).
90static void genrand(JPakeUser *user, const JPakeParameters *params)
91 {
92 BIGNUM *qm1;
93
94 // xa in [0, q)
95 user->xa = BN_new();
96 BN_rand_range(user->xa, params->q);
97
98 // q-1
99 qm1 = BN_new();
100 BN_copy(qm1, params->q);
101 BN_sub_word(qm1, 1);
102
103 // ... and xb in [0, q-1)
104 user->xb = BN_new();
105 BN_rand_range(user->xb, qm1);
106 // [1, q)
107 BN_add_word(user->xb, 1);
108
109 // cleanup
110 BN_free(qm1);
111
112 // Show
113 printf("x%d", user->p.base);
114 showbn("", user->xa);
115 printf("x%d", user->p.base+1);
116 showbn("", user->xb);
117 }
118
119static void hashlength(SHA_CTX *sha, size_t l)
120 {
121 unsigned char b[2];
122
123 assert(l <= 0xffff);
124 b[0] = l >> 8;
125 b[1] = l&0xff;
126 SHA1_Update(sha, b, 2);
127 }
128
129static void hashstring(SHA_CTX *sha, const char *string)
130 {
131 size_t l = strlen(string);
132
133 hashlength(sha, l);
134 SHA1_Update(sha, string, l);
135 }
136
137static void hashbn(SHA_CTX *sha, const BIGNUM *bn)
138 {
139 size_t l = BN_num_bytes(bn);
140 unsigned char *bin = alloca(l);
141
142 hashlength(sha, l);
143 BN_bn2bin(bn, bin);
144 SHA1_Update(sha, bin, l);
145 }
146
147// h=hash(g, g^r, g^x, name)
148static void zkpHash(BIGNUM *h, const JPakeZKP *zkp, const BIGNUM *gx,
149 const JPakeUserPublic *from, const JPakeParameters *params)
150 {
151 unsigned char md[SHA_DIGEST_LENGTH];
152 SHA_CTX sha;
153
154 // XXX: hash should not allow moving of the boundaries - Java code
155 // is flawed in this respect. Length encoding seems simplest.
156 SHA1_Init(&sha);
157 hashbn(&sha, params->g);
158 hashbn(&sha, zkp->gr);
159 hashbn(&sha, gx);
160 hashstring(&sha, from->name);
161 SHA1_Final(md, &sha);
162 BN_bin2bn(md, SHA_DIGEST_LENGTH, h);
163 }
164
165// Prove knowledge of x
166// Note that we don't send g^x because, as it happens, we've always
167// sent it elsewhere. Also note that because of that, we could avoid
168// calculating it here, but we don't, for clarity...
169static void CreateZKP(JPakeZKP *zkp, const BIGNUM *x, const JPakeUser *us,
170 const BIGNUM *zkpg, const JPakeParameters *params,
171 int n, const char *suffix)
172 {
173 BIGNUM *r = BN_new();
174 BIGNUM *gx = BN_new();
175 BIGNUM *h = BN_new();
176 BIGNUM *t = BN_new();
177
178 // r in [0,q)
179 // XXX: Java chooses r in [0, 2^160) - i.e. distribution not uniform
180 BN_rand_range(r, params->q);
181 // g^r
182 zkp->gr = BN_new();
183 BN_mod_exp(zkp->gr, zkpg, r, params->p, params->ctx);
184 // g^x
185 BN_mod_exp(gx, zkpg, x, params->p, params->ctx);
186
187 // h=hash...
188 zkpHash(h, zkp, gx, &us->p, params);
189
190 // b = r - x*h
191 BN_mod_mul(t, x, h, params->q, params->ctx);
192 zkp->b = BN_new();
193 BN_mod_sub(zkp->b, r, t, params->q, params->ctx);
194
195 // show
196 printf(" ZKP(x%d%s)\n", n, suffix);
197 showbn(" zkpg", zkpg);
198 showbn(" g^x", gx);
199 showbn(" g^r", zkp->gr);
200 showbn(" b", zkp->b);
201
202 // cleanup
203 BN_free(t);
204 BN_free(h);
205 BN_free(gx);
206 BN_free(r);
207 }
208
209static int VerifyZKP(const JPakeZKP *zkp, BIGNUM *gx,
210 const JPakeUserPublic *them, const BIGNUM *zkpg,
211 const JPakeParameters *params, int n, const char *suffix)
212 {
213 BIGNUM *h = BN_new();
214 BIGNUM *t1 = BN_new();
215 BIGNUM *t2 = BN_new();
216 BIGNUM *t3 = BN_new();
217 int ret = 0;
218
219 zkpHash(h, zkp, gx, them, params);
220
221 // t1 = g^b
222 BN_mod_exp(t1, zkpg, zkp->b, params->p, params->ctx);
223 // t2 = (g^x)^h = g^{hx}
224 BN_mod_exp(t2, gx, h, params->p, params->ctx);
225 // t3 = t1 * t2 = g^{hx} * g^b = g^{hx+b} = g^r (allegedly)
226 BN_mod_mul(t3, t1, t2, params->p, params->ctx);
227
228 printf(" ZKP(x%d%s)\n", n, suffix);
229 showbn(" zkpg", zkpg);
230 showbn(" g^r'", t3);
231
232 // verify t3 == g^r
233 if(BN_cmp(t3, zkp->gr) == 0)
234 ret = 1;
235
236 // cleanup
237 BN_free(t3);
238 BN_free(t2);
239 BN_free(t1);
240 BN_free(h);
241
242 if(ret)
243 puts(" OK");
244 else
245 puts(" FAIL");
246
247 return ret;
248 }
249
250static void sendstep1_substep(JPakeStep1 *s1, const BIGNUM *x,
251 const JPakeUser *us,
252 const JPakeParameters *params, int n)
253 {
254 s1->gx = BN_new();
255 BN_mod_exp(s1->gx, params->g, x, params->p, params->ctx);
256 printf(" g^{x%d}", n);
257 showbn("", s1->gx);
258
259 CreateZKP(&s1->zkpx, x, us, params->g, params, n, "");
260 }
261
262static void sendstep1(const JPakeUser *us, JPakeUserPublic *them,
263 const JPakeParameters *params)
264 {
265 printf("\n%s sends %s:\n\n", us->p.name, them->name);
266
267 // from's g^xa (which becomes to's g^xc) and ZKP(xa)
268 sendstep1_substep(&them->s1c, us->xa, us, params, us->p.base);
269 // from's g^xb (which becomes to's g^xd) and ZKP(xb)
270 sendstep1_substep(&them->s1d, us->xb, us, params, us->p.base+1);
271 }
272
273static int verifystep1(const JPakeUser *us, const JPakeUserPublic *them,
274 const JPakeParameters *params)
275 {
276 printf("\n%s verifies %s:\n\n", us->p.name, them->name);
277
278 // verify their ZKP(xc)
279 if(!VerifyZKP(&us->p.s1c.zkpx, us->p.s1c.gx, them, params->g, params,
280 them->base, ""))
281 return 0;
282
283 // verify their ZKP(xd)
284 if(!VerifyZKP(&us->p.s1d.zkpx, us->p.s1d.gx, them, params->g, params,
285 them->base+1, ""))
286 return 0;
287
288 // g^xd != 1
289 printf(" g^{x%d} != 1: ", them->base+1);
290 if(BN_is_one(us->p.s1d.gx))
291 {
292 puts("FAIL");
293 return 0;
294 }
295 puts("OK");
296
297 return 1;
298 }
299
300static void sendstep2(const JPakeUser *us, JPakeUserPublic *them,
301 const JPakeParameters *params)
302 {
303 BIGNUM *t1 = BN_new();
304 BIGNUM *t2 = BN_new();
305
306 printf("\n%s sends %s:\n\n", us->p.name, them->name);
307
308 // X = g^{(xa + xc + xd) * xb * s}
309 // t1 = g^xa
310 BN_mod_exp(t1, params->g, us->xa, params->p, params->ctx);
311 // t2 = t1 * g^{xc} = g^{xa} * g^{xc} = g^{xa + xc}
312 BN_mod_mul(t2, t1, us->p.s1c.gx, params->p, params->ctx);
313 // t1 = t2 * g^{xd} = g^{xa + xc + xd}
314 BN_mod_mul(t1, t2, us->p.s1d.gx, params->p, params->ctx);
315 // t2 = xb * s
316 BN_mod_mul(t2, us->xb, us->secret, params->q, params->ctx);
317 // X = t1^{t2} = t1^{xb * s} = g^{(xa + xc + xd) * xb * s}
318 them->s2.X = BN_new();
319 BN_mod_exp(them->s2.X, t1, t2, params->p, params->ctx);
320
321 // Show
322 printf(" g^{(x%d + x%d + x%d) * x%d * s)", us->p.base, them->base,
323 them->base+1, us->p.base+1);
324 showbn("", them->s2.X);
325
326 // ZKP(xb * s)
327 // XXX: this is kinda funky, because we're using
328 //
329 // g' = g^{xa + xc + xd}
330 //
331 // as the generator, which means X is g'^{xb * s}
332 CreateZKP(&them->s2.zkpxbs, t2, us, t1, params, us->p.base+1, " * s");
333
334 // cleanup
335 BN_free(t1);
336 BN_free(t2);
337 }
338
339static int verifystep2(const JPakeUser *us, const JPakeUserPublic *them,
340 const JPakeParameters *params)
341 {
342 BIGNUM *t1 = BN_new();
343 BIGNUM *t2 = BN_new();
344 int ret = 0;
345
346 printf("\n%s verifies %s:\n\n", us->p.name, them->name);
347
348 // g' = g^{xc + xa + xb} [from our POV]
349 // t1 = xa + xb
350 BN_mod_add(t1, us->xa, us->xb, params->q, params->ctx);
351 // t2 = g^{t1} = g^{xa+xb}
352 BN_mod_exp(t2, params->g, t1, params->p, params->ctx);
353 // t1 = g^{xc} * t2 = g^{xc + xa + xb}
354 BN_mod_mul(t1, us->p.s1c.gx, t2, params->p, params->ctx);
355
356 if(VerifyZKP(&us->p.s2.zkpxbs, us->p.s2.X, them, t1, params, them->base+1,
357 " * s"))
358 ret = 1;
359
360 // cleanup
361 BN_free(t2);
362 BN_free(t1);
363
364 return ret;
365 }
366
367static void computekey(JPakeUser *us, const JPakeParameters *params)
368 {
369 BIGNUM *t1 = BN_new();
370 BIGNUM *t2 = BN_new();
371 BIGNUM *t3 = BN_new();
372
373 printf("\n%s calculates the shared key:\n\n", us->p.name);
374
375 // K = (X/g^{xb * xd * s})^{xb}
376 // = (g^{(xc + xa + xb) * xd * s - xb * xd *s})^{xb}
377 // = (g^{(xa + xc) * xd * s})^{xb}
378 // = g^{(xa + xc) * xb * xd * s}
379 // [which is the same regardless of who calculates it]
380
381 // t1 = (g^{xd})^{xb} = g^{xb * xd}
382 BN_mod_exp(t1, us->p.s1d.gx, us->xb, params->p, params->ctx);
383 // t2 = -s = q-s
384 BN_sub(t2, params->q, us->secret);
385 // t3 = t1^t2 = g^{-xb * xd * s}
386 BN_mod_exp(t3, t1, t2, params->p, params->ctx);
387 // t1 = X * t3 = X/g^{xb * xd * s}
388 BN_mod_mul(t1, us->p.s2.X, t3, params->p, params->ctx);
389 // K = t1^{xb}
390 us->key = BN_new();
391 BN_mod_exp(us->key, t1, us->xb, params->p, params->ctx);
392
393 // show
394 showbn(" K", us->key);
395
396 // cleanup
397 BN_free(t3);
398 BN_free(t2);
399 BN_free(t1);
400 }
401
402int main(int argc, char **argv)
403 {
404 JPakeParameters params;
405 JPakeUser alice, bob;
406
407 alice.p.name = "Alice";
408 alice.p.base = 1;
409 bob.p.name = "Bob";
410 bob.p.base = 3;
411
412 JPakeParametersInit(&params);
413
414 // Shared secret
415 alice.secret = BN_new();
416 BN_rand(alice.secret, 32, -1, 0);
417 bob.secret = alice.secret;
418 showbn("secret", alice.secret);
419
420 assert(BN_cmp(alice.secret, params.q) < 0);
421
422 // Alice's x1, x2
423 genrand(&alice, &params);
424
425 // Bob's x3, x4
426 genrand(&bob, &params);
427
428 // Now send stuff to each other...
429 sendstep1(&alice, &bob.p, &params);
430 sendstep1(&bob, &alice.p, &params);
431
432 // And verify what each other sent
433 if(!verifystep1(&alice, &bob.p, &params))
434 return 1;
435 if(!verifystep1(&bob, &alice.p, &params))
436 return 2;
437
438 // Second send
439 sendstep2(&alice, &bob.p, &params);
440 sendstep2(&bob, &alice.p, &params);
441
442 // And second verify
443 if(!verifystep2(&alice, &bob.p, &params))
444 return 3;
445 if(!verifystep2(&bob, &alice.p, &params))
446 return 4;
447
448 // Compute common key
449 computekey(&alice, &params);
450 computekey(&bob, &params);
451
452 // Confirm the common key is identical
453 // XXX: if the two secrets are not the same, everything works up
454 // to this point, so the only way to detect a failure is by the
455 // difference in the calculated keys.
456 // Since we're all the same code, just compare them directly. In a
457 // real system, Alice sends Bob H(H(K)), Bob checks it, then sends
458 // back H(K), which Alice checks, or something equivalent.
459 puts("\nAlice and Bob check keys are the same:");
460 if(BN_cmp(alice.key, bob.key) == 0)
461 puts(" OK");
462 else
463 {
464 puts(" FAIL");
465 return 5;
466 }
467
468 return 0;
469 }
diff --git a/src/lib/libssl/src/fips/Makefile b/src/lib/libssl/src/fips/Makefile
index 63e4cf82be..d6dcb79a28 100644
--- a/src/lib/libssl/src/fips/Makefile
+++ b/src/lib/libssl/src/fips/Makefile
@@ -1,199 +1,219 @@
1# 1#
2# SSLeay/fips/Makefile 2# OpenSSL/crypto/Makefile
3# 3#
4 4
5DIR= fips 5DIR= fips
6TOP= .. 6TOP= ..
7CC= cc 7CC= cc
8INCLUDE= -I. -I$(TOP) -I../include 8INCLUDE= -I. -I$(TOP) -I../include
9# INCLUDES targets sudbirs!
9INCLUDES= -I.. -I../.. -I../../include 10INCLUDES= -I.. -I../.. -I../../include
10CFLAG= -g 11CFLAG= -g
11INSTALL_PREFIX=
12OPENSSLDIR= /usr/local/ssl
13INSTALLTOP= /usr/local/ssl
14MAKEDEPPROG= makedepend 12MAKEDEPPROG= makedepend
15MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG) 13MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
16MAKEFILE= Makefile 14MAKEFILE= Makefile
17RM= rm -f 15RM= rm -f
18AR= ar r 16AR= ar r
17ARD= ar d
18TEST= fips_test_suite.c
19FIPS_TVDIR= testvectors
20FIPS_TVOK= $$HOME/fips/tv.ok
19 21
20PEX_LIBS= 22FIPSCANLOC= $(FIPSLIBDIR)fipscanister.o
21EX_LIBS=
22 23
23CFLAGS= $(INCLUDE) $(CFLAG) 24RECURSIVE_MAKE= [ -n "$(FDIRS)" ] && for i in $(FDIRS) ; do \
25 (cd $$i && echo "making $$target in $(DIR)/$$i..." && \
26 $(MAKE) -e TOP=../.. DIR=$$i INCLUDES='${INCLUDES}' $$target ) || exit 1; \
27 done;
24 28
29PEX_LIBS=
30EX_LIBS=
31
32CFLAGS= $(INCLUDE) $(CFLAG) -DHMAC_EXT=\"$${HMAC_EXT:-sha1}\"
33ASFLAGS= $(INCLUDE) $(ASFLAG)
34AFLAGS=$(ASFLAGS)
25 35
26LIBS= 36LIBS=
27 37
28FDIRS=sha1 rand des aes dsa rsa dh 38FDIRS=sha rand des aes dsa rsa dh hmac
29 39
30GENERAL=Makefile README fips-lib.com install.com 40GENERAL=Makefile README fips-lib.com install.com
31 41
32LIB= $(TOP)/libcrypto.a 42LIB= $(TOP)/libcrypto.a
33SHARED_LIB= libcrypto$(SHLIB_EXT) 43SHARED_LIB= $(FIPSCANLIB)$(SHLIB_EXT)
34LIBSRC=fips.c fips_err_wrapper.c 44LIBSRC=fips.c
35LIBOBJ=fips.o fips_err_wrapper.o 45LIBOBJ=fips.o
46
47FIPS_OBJ_LISTS=sha/lib hmac/lib rand/lib des/lib aes/lib dsa/lib rsa/lib dh/lib
36 48
37SRC= $(LIBSRC) 49SRC= $(LIBSRC)
38 50
39EXHEADER=fips.h 51EXHEADER=fips.h
40HEADER=$(EXHEADER) fips_err.h 52HEADER=$(EXHEADER) fips_utl.h fips_locl.h
41EXE=openssl_fips_fingerprint 53EXE=fipsld
42 54
43ALL= $(GENERAL) $(SRC) $(HEADER) 55ALL= $(GENERAL) $(SRC) $(HEADER)
44 56
45top: 57top:
46 @(cd ..; $(MAKE) DIRS=$(DIR) all) 58 @(cd ..; $(MAKE) DIRS=$(DIR) all)
47 59
60testapps:
61 @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
62
48all: 63all:
49 @if egrep 'define OPENSSL_FIPS' $(TOP)/include/openssl/opensslconf.h > /dev/null; then \ 64 @if [ -z "$(FIPSLIBDIR)" ]; then \
50 $(MAKE) -e subdirs check lib shared; \ 65 $(MAKE) -e subdirs lib fips_premain_dso$(EXE_EXT); \
66 else \
67 $(MAKE) -e lib fips_premain_dso$(EXE_EXT) fips_standalone_sha1$(EXE_EXT); \
51 fi 68 fi
52 69
53check: 70# Idea behind fipscanister.o is to "seize" the sequestered code between
54 TOP=`pwd`/$(TOP) ./fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER) 71# known symbols for fingerprinting purposes, which would be commonly
72# done with ld -r start.o ... end.o. The latter however presents a minor
73# challenge on multi-ABI platforms. As just implied, we'd rather use ld,
74# but the trouble is that we don't generally know how ABI-selection
75# compiler flag is translated to corresponding linker flag. All compiler
76# drivers seem to recognize -r flag and pass it down to linker, but some
77# of them, including gcc, erroneously add -lc, as well as run-time
78# components, such as crt1.o and alike. Fortunately among those vendor
79# compilers which were observed to misinterpret -r flag multi-ABI ones
80# are equipped with smart linkers, which don't require any ABI-selection
81# flag and simply assume that all objects are of the same type as first
82# one in command line. So the idea is to identify gcc and deficient
83# vendor compiler drivers...
84
85fipscanister.o: fips_start.o $(LIBOBJ) $(FIPS_OBJ_LISTS) fips_end.o
86 FIPS_ASM=""; \
87 list="$(BN_ASM)"; for i in $$list; do FIPS_ASM="$$FIPS_ASM ../crypto/bn/$$i" ; done; \
88 list="$(AES_ASM_OBJ)"; for i in $$list; do FIPS_ASM="$$FIPS_ASM ../crypto/aes/$$i" ; done; \
89 list="$(DES_ENC)"; for i in $$list; do FIPS_ASM="$$FIPS_ASM ../crypto/des/$$i" ; done; \
90 list="$(SHA1_ASM_OBJ)"; for i in $$list; do FIPS_ASM="$$FIPS_ASM ../crypto/sha/$$i" ; done; \
91 if [ -n "$(CPUID_OBJ)" ]; then \
92 CPUID=../crypto/$(CPUID_OBJ) ; \
93 else \
94 CPUID="" ; \
95 fi ; \
96 objs="fips_start.o $(LIBOBJ) $(FIPS_EX_OBJ) $$CPUID $$FIPS_ASM"; \
97 for i in $(FIPS_OBJ_LISTS); do \
98 dir=`dirname $$i`; script="s|^|$$dir/|;s| | $$dir/|g"; \
99 objs="$$objs `sed "$$script" $$i`"; \
100 done; \
101 objs="$$objs fips_end.o" ; \
102 os="`(uname -s) 2>/dev/null`"; cflags="$(CFLAGS)"; \
103 [ "$$os" = "AIX" ] && cflags="$$cflags -Wl,-bnoobjreorder"; \
104 if [ -n "${FIPS_SITE_LD}" ]; then \
105 set -x; ${FIPS_SITE_LD} -r -o $@ $$objs; \
106 elif $(CC) -dumpversion >/dev/null 2>&1; then \
107 set -x; $(CC) $$cflags -r -nostdlib -o $@ $$objs ; \
108 else case "$$os" in \
109 HP-UX|OSF1|SunOS) set -x; /usr/ccs/bin/ld -r -o $@ $$objs ;; \
110 *) set -x; $(CC) $$cflags -r -o $@ $$objs ;; \
111 esac fi
112 ./fips_standalone_sha1 fipscanister.o > fipscanister.o.sha1
113
114# If another exception is immediately required, assign approprite
115# site-specific ld command to FIPS_SITE_LD environment variable.
116
117fips_start.o: fips_canister.c
118 $(CC) $(CFLAGS) -DFIPS_START -c -o $@ fips_canister.c
119fips_end.o: fips_canister.c
120 $(CC) $(CFLAGS) -DFIPS_END -c -o $@ fips_canister.c
121fips_premain_dso$(EXE_EXT): fips_premain.c
122 $(CC) $(CFLAGS) -DFINGERPRINT_PREMAIN_DSO_LOAD -o $@ fips_premain.c \
123 $(FIPSLIBDIR)fipscanister.o ../libcrypto.a $(EX_LIBS)
124# this is executed only when linking with external fipscanister.o
125fips_standalone_sha1$(EXE_EXT): sha/fips_standalone_sha1.c
126 $(CC) $(CFLAGS) -DFIPSCANISTER_O -o $@ sha/fips_standalone_sha1.c $(FIPSLIBDIR)fipscanister.o
55 127
56subdirs: 128subdirs:
57 @for i in $(FDIRS) ;\ 129 @target=all; $(RECURSIVE_MAKE)
58 do \
59 (cd $$i && echo "making all in fips/$$i..." && \
60 $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; \
61 done;
62
63sub_target:
64 @for i in $(FDIRS) ;\
65 do \
66 (cd $$i && echo "making $(TARGET) in fips/$$i..." && \
67 $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' $(TARGET) ) || exit 1; \
68 done;
69 130
70files: 131files:
71 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 132 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
72 @for i in $(FDIRS) ;\ 133 @target=files; $(RECURSIVE_MAKE)
73 do \
74 (cd $$i && echo "making 'files' in fips/$$i..." && \
75 $(MAKE) PERL='${PERL}' files ); \
76 done;
77 134
78links: 135links:
79 @$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER) 136 @$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
80 @for i in $(FDIRS); do \ 137 @$(PERL) $(TOP)/util/mklink.pl ../test $(TEST)
81 (cd $$i && echo "making links in fips/$$i..." && \ 138 @target=links; $(RECURSIVE_MAKE)
82 $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PERL='${PERL}' links ); \
83 done;
84 139
85lib: $(LIBOBJ) 140# lib: and $(LIB): are splitted to avoid end-less loop
86 $(AR) $(LIB) $(LIBOBJ) 141lib: $(LIB)
87 $(RANLIB) $(LIB) || echo Never mind. 142 if [ "$(FIPSCANISTERINTERNAL)" = "n" -a -n "$(FIPSCANLOC)" ]; then $(AR) ../$(FIPSCANLIB).a $(FIPSCANLOC); fi
88 @touch lib 143 @touch lib
89 144
90shared: 145$(LIB): $(FIPSLIBDIR)fipscanister.o
91 if [ -n "$(SHARED_LIBS)" ]; then \ 146 $(AR) $(LIB) $(FIPSLIBDIR)fipscanister.o
92 (cd ..; $(MAKE) $(SHARED_LIB)); \ 147 $(RANLIB) $(LIB) || echo Never mind.
148
149$(FIPSCANLIB): $(FIPSCANLOC)
150 $(AR) ../$(FIPSCANLIB).a $(FIPSCANLOC)
151 if [ "$(FIPSCANLIB)" = "libfips" ]; then \
152 $(AR) $(LIB) $(FIPSCANLOC) ; \
153 $(RANLIB) $(LIB) || echo Never Mind. ; \
93 fi 154 fi
155 $(RANLIB) ../$(FIPSCANLIB).a || echo Never mind.
156 @touch lib
94 157
95libs: 158shared: lib subdirs fips_premain_dso$(EXE_EXT)
96 @for i in $(FDIRS) ;\
97 do \
98 (cd $$i && echo "making libs in fips/$$i..." && \
99 $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' lib ); \
100 done;
101 159
102tests: 160libs:
103 @for i in $(FDIRS) ;\ 161 @target=lib; $(RECURSIVE_MAKE)
104 do \
105 (cd $$i && echo "making tests in fips/$$i..." && \
106 $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' tests ); \
107 done;
108 162
109top_fips_test_suite: 163fips_test: top
110 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=. TARGET=fips_test_suite sub_target) 164 @target=fips_test; $(RECURSIVE_MAKE)
111 165
112fips_test_suite: fips_test_suite.o $(TOP)/libcrypto.a 166fips_test_diff:
113 $(CC) $(CFLAGS) -o fips_test_suite fips_test_suite.o $(PEX_LIBS) $(TOP)/libcrypto.a $(EX_LIBS) 167 @if diff -b -B -I '^\#' -cr -X fips-nodiff.txt $(FIPS_TVDIR) $(FIPS_TVOK) ; then \
114 TOP=$(TOP) $(TOP)/fips/openssl_fips_fingerprint $(TOP)/libcrypto.a fips_test_suite || { rm fips_test_suite; false; } 168 echo "FIPS diff OK" ; \
169 else \
170 echo "***FIPS DIFF ERROR***" ; exit 1 ; \
171 fi
115 172
116fips_test: top top_fips_test_suite
117 cd testvectors && perl -p -i -e 's/COUNT=/COUNT = /' des[23]/req/*.req
118 @for i in dsa sha1 aes des ; \
119 do \
120 (cd $$i && echo "making fips_test in fips/$$i..." && $(MAKE) fips_test) \
121 done;
122 173
123install: 174install:
175 @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
124 @headerlist="$(EXHEADER)"; for i in $$headerlist ;\ 176 @headerlist="$(EXHEADER)"; for i in $$headerlist ;\
125 do \ 177 do \
126 (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ 178 (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
127 chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ 179 chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
128 done;
129 @for i in $(FDIRS) ;\
130 do \
131 (cd $$i && echo "making install in fips/$$i..." && \
132 $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' install ); \
133 done; 180 done;
134 @for i in $(EXE) ; \ 181 @target=install; $(RECURSIVE_MAKE)
135 do \ 182 @cp -p -f fipscanister.o fipscanister.o.sha1 fips_premain.c \
136 echo "installing $$i"; \ 183 fips_premain.c.sha1 \
137 cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \ 184 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/; \
138 chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \ 185 chmod 0444 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/fips*
139 mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
140 done
141 186
142lint: 187lint:
143 @for i in $(FDIRS) ;\ 188 @target=lint; $(RECURSIVE_MAKE)
144 do \
145 (cd $$i && echo "making lint in fips/$$i..." && \
146 $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' lint ); \
147 done;
148 189
149depend: 190depend:
150 if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does not exist 191 @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
151 $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(SRC) 192 @[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
152 if [ ! -s buildinf.h ]; then rm buildinf.h; fi 193 @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
153 @for i in $(FDIRS) ;\
154 do \
155 (cd $$i && echo "making depend in fips/$$i..." && \
156 $(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ); \
157 done;
158 194
159clean: 195clean:
160 rm -f buildinf.h *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff 196 rm -f fipscanister.o.sha1 fips_premain_dso$(EXE_EXT) fips_standalone_sha1$(EXE_EXT) \
161 @for i in $(FDIRS) ;\ 197 *.s *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
162 do \ 198 @target=clean; $(RECURSIVE_MAKE)
163 (cd $$i && echo "making clean in fips/$$i..." && \
164 $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' clean ); \
165 done;
166 199
167dclean: 200dclean:
168 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new 201 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
169 mv -f Makefile.new $(MAKEFILE) 202 mv -f Makefile.new $(MAKEFILE)
170 @for i in $(FDIRS) ;\ 203 @target=dclean; $(RECURSIVE_MAKE)
171 do \
172 (cd $$i && echo "making dclean in fips/$$i..." && \
173 $(MAKE) PERL='${PERL}' CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' dclean ); \
174 done;
175 204
176# DO NOT DELETE THIS LINE -- make depend depends on it. 205# DO NOT DELETE THIS LINE -- make depend depends on it.
177 206
178fips.o: ../include/openssl/aes.h ../include/openssl/asn1.h 207fips.o: ../include/openssl/asn1.h ../include/openssl/bio.h
179fips.o: ../include/openssl/bio.h ../include/openssl/blowfish.h
180fips.o: ../include/openssl/bn.h ../include/openssl/cast.h
181fips.o: ../include/openssl/crypto.h ../include/openssl/des.h 208fips.o: ../include/openssl/crypto.h ../include/openssl/des.h
182fips.o: ../include/openssl/des_old.h ../include/openssl/dh.h 209fips.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h
183fips.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
184fips.o: ../include/openssl/err.h ../include/openssl/evp.h 210fips.o: ../include/openssl/err.h ../include/openssl/evp.h
185fips.o: ../include/openssl/fips.h ../include/openssl/fips_rand.h 211fips.o: ../include/openssl/fips.h ../include/openssl/fips_rand.h
186fips.o: ../include/openssl/hmac.h ../include/openssl/idea.h 212fips.o: ../include/openssl/hmac.h ../include/openssl/lhash.h
187fips.o: ../include/openssl/lhash.h ../include/openssl/md2.h 213fips.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
188fips.o: ../include/openssl/md4.h ../include/openssl/md5.h 214fips.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
189fips.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h 215fips.o: ../include/openssl/ossl_typ.h ../include/openssl/rand.h
190fips.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h 216fips.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
191fips.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
192fips.o: ../include/openssl/rand.h ../include/openssl/rc2.h
193fips.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
194fips.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
195fips.o: ../include/openssl/safestack.h ../include/openssl/sha.h
196fips.o: ../include/openssl/stack.h ../include/openssl/symhacks.h 217fips.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
197fips.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h fips.c 218fips.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h fips.c
198fips.o: fips_locl.h 219fips.o: fips_locl.h
199fips_err_wrapper.o: ../include/openssl/opensslconf.h fips_err_wrapper.c
diff --git a/src/lib/libssl/src/fips/aes/Makefile b/src/lib/libssl/src/fips/aes/Makefile
index fce5eeb5f7..403525d4c0 100644
--- a/src/lib/libssl/src/fips/aes/Makefile
+++ b/src/lib/libssl/src/fips/aes/Makefile
@@ -1,5 +1,5 @@
1# 1#
2# SSLeay/fips/aes/Makefile 2# OpenSSL/fips/aes/Makefile
3# 3#
4 4
5DIR= aes 5DIR= aes
@@ -15,6 +15,9 @@ MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
15MAKEFILE= Makefile 15MAKEFILE= Makefile
16AR= ar r 16AR= ar r
17 17
18ASFLAGS= $(INCLUDES) $(ASFLAG)
19AFLAGS= $(ASFLAGS)
20
18CFLAGS= $(INCLUDES) $(CFLAG) 21CFLAGS= $(INCLUDES) $(CFLAG)
19 22
20GENERAL=Makefile 23GENERAL=Makefile
@@ -23,28 +26,23 @@ TESTDATA=fips_aes_data
23APPS= 26APPS=
24 27
25LIB=$(TOP)/libcrypto.a 28LIB=$(TOP)/libcrypto.a
26LIBSRC=fips_aes_core.c fips_aes_selftest.c 29LIBSRC=fips_aes_selftest.c
27LIBOBJ=fips_aes_core.o fips_aes_selftest.o 30LIBOBJ=fips_aes_selftest.o
28 31
29SRC= $(LIBSRC) 32SRC= $(LIBSRC)
30 33
31EXHEADER= 34EXHEADER=
32HEADER= $(EXHEADER) fips_aes_locl.h 35HEADER=
33 36
34ALL= $(GENERAL) $(SRC) $(HEADER) 37ALL= $(GENERAL) $(SRC) $(HEADER)
35 38
36top: 39top:
37 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all) 40 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
38 41
39all: check lib 42all: lib
40
41check:
42 TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
43 43
44lib: $(LIBOBJ) 44lib: $(LIBOBJ)
45 $(AR) $(LIB) $(LIBOBJ) 45 @echo $(LIBOBJ) > lib
46 $(RANLIB) $(LIB) || echo Never mind.
47 @sleep 2; touch lib
48 46
49files: 47files:
50 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 48 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -67,18 +65,11 @@ tags:
67 65
68tests: 66tests:
69 67
70top_fips_aesavs: 68fips_test:
71 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) TARGET=fips_aesavs sub_target) 69 -find ../testvectors/aes/req -name '*.req' > testlist
72
73fips_aesavs: fips_aesavs.o $(TOP)/libcrypto.a
74 $(CC) $(CFLAGS) -o fips_aesavs fips_aesavs.o $(PEX_LIBS) $(TOP)/libcrypto.a $(EX_LIBS)
75 TOP=$(TOP) $(TOP)/fips/openssl_fips_fingerprint $(TOP)/libcrypto.a fips_aesavs
76
77fips_test: top top_fips_aesavs
78 find ../testvectors/aes/req -name '*.req' > testlist
79 -rm -rf ../testvectors/aes/rsp 70 -rm -rf ../testvectors/aes/rsp
80 mkdir ../testvectors/aes/rsp 71 mkdir ../testvectors/aes/rsp
81 ./fips_aesavs -d testlist 72 if [ -s testlist ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_aesavs -d testlist; fi
82 73
83lint: 74lint:
84 lint -DLINT $(INCLUDES) $(SRC)>fluff 75 lint -DLINT $(INCLUDES) $(SRC)>fluff
@@ -92,40 +83,31 @@ dclean:
92 mv -f Makefile.new $(MAKEFILE) 83 mv -f Makefile.new $(MAKEFILE)
93 84
94clean: 85clean:
95 rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff 86 rm -f *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff testlist
96# DO NOT DELETE THIS LINE -- make depend depends on it. 87# DO NOT DELETE THIS LINE -- make depend depends on it.
97 88
98fips_aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h 89fips_aes_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
99fips_aes_core.o: ../../include/openssl/fips.h
100fips_aes_core.o: ../../include/openssl/opensslconf.h fips_aes_core.c
101fips_aes_core.o: fips_aes_locl.h
102fips_aes_selftest.o: ../../include/openssl/aes.h ../../include/openssl/bio.h
103fips_aes_selftest.o: ../../include/openssl/crypto.h 90fips_aes_selftest.o: ../../include/openssl/crypto.h
104fips_aes_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 91fips_aes_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
105fips_aes_selftest.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h 92fips_aes_selftest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
93fips_aes_selftest.o: ../../include/openssl/lhash.h
94fips_aes_selftest.o: ../../include/openssl/obj_mac.h
95fips_aes_selftest.o: ../../include/openssl/objects.h
106fips_aes_selftest.o: ../../include/openssl/opensslconf.h 96fips_aes_selftest.o: ../../include/openssl/opensslconf.h
107fips_aes_selftest.o: ../../include/openssl/opensslv.h 97fips_aes_selftest.o: ../../include/openssl/opensslv.h
98fips_aes_selftest.o: ../../include/openssl/ossl_typ.h
108fips_aes_selftest.o: ../../include/openssl/safestack.h 99fips_aes_selftest.o: ../../include/openssl/safestack.h
109fips_aes_selftest.o: ../../include/openssl/stack.h 100fips_aes_selftest.o: ../../include/openssl/stack.h
110fips_aes_selftest.o: ../../include/openssl/symhacks.h fips_aes_selftest.c 101fips_aes_selftest.o: ../../include/openssl/symhacks.h fips_aes_selftest.c
111fips_aesavs.o: ../../e_os.h ../../include/openssl/aes.h 102fips_aesavs.o: ../../e_os.h ../../include/openssl/aes.h
112fips_aesavs.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 103fips_aesavs.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
113fips_aesavs.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 104fips_aesavs.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
114fips_aesavs.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
115fips_aesavs.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
116fips_aesavs.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
117fips_aesavs.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 105fips_aesavs.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
118fips_aesavs.o: ../../include/openssl/evp.h ../../include/openssl/fips.h 106fips_aesavs.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
119fips_aesavs.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h 107fips_aesavs.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
120fips_aesavs.o: ../../include/openssl/md2.h ../../include/openssl/md4.h 108fips_aesavs.o: ../../include/openssl/objects.h
121fips_aesavs.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
122fips_aesavs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
123fips_aesavs.o: ../../include/openssl/opensslconf.h 109fips_aesavs.o: ../../include/openssl/opensslconf.h
124fips_aesavs.o: ../../include/openssl/opensslv.h 110fips_aesavs.o: ../../include/openssl/opensslv.h
125fips_aesavs.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rc2.h 111fips_aesavs.o: ../../include/openssl/ossl_typ.h
126fips_aesavs.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 112fips_aesavs.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
127fips_aesavs.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 113fips_aesavs.o: ../../include/openssl/symhacks.h ../fips_utl.h fips_aesavs.c
128fips_aesavs.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
129fips_aesavs.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
130fips_aesavs.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
131fips_aesavs.o: fips_aesavs.c
diff --git a/src/lib/libssl/src/fips/aes/fips_aes_selftest.c b/src/lib/libssl/src/fips/aes/fips_aes_selftest.c
index 0e53d21bd0..441bbc18e7 100644
--- a/src/lib/libssl/src/fips/aes/fips_aes_selftest.c
+++ b/src/lib/libssl/src/fips/aes/fips_aes_selftest.c
@@ -50,7 +50,7 @@
50#include <string.h> 50#include <string.h>
51#include <openssl/err.h> 51#include <openssl/err.h>
52#include <openssl/fips.h> 52#include <openssl/fips.h>
53#include <openssl/aes.h> 53#include <openssl/evp.h>
54 54
55#ifdef OPENSSL_FIPS 55#ifdef OPENSSL_FIPS
56static struct 56static struct
@@ -78,35 +78,24 @@ void FIPS_corrupt_aes()
78int FIPS_selftest_aes() 78int FIPS_selftest_aes()
79 { 79 {
80 int n; 80 int n;
81 int ret = 0;
82 EVP_CIPHER_CTX ctx;
83 EVP_CIPHER_CTX_init(&ctx);
81 84
82 /* Encrypt and check against known ciphertext */
83 for(n=0 ; n < 1 ; ++n) 85 for(n=0 ; n < 1 ; ++n)
84 { 86 {
85 AES_KEY key; 87 if (fips_cipher_test(&ctx, EVP_aes_128_ecb(),
86 unsigned char buf[16]; 88 tests[n].key, NULL,
87 89 tests[n].plaintext,
88 AES_set_encrypt_key(tests[n].key,128,&key); 90 tests[n].ciphertext,
89 AES_encrypt(tests[n].plaintext,buf,&key); 91 16) <= 0)
90 if(memcmp(buf,tests[n].ciphertext,sizeof buf)) 92 goto err;
91 {
92 FIPSerr(FIPS_F_FIPS_SELFTEST_AES,FIPS_R_SELFTEST_FAILED);
93 return 0;
94 }
95 } 93 }
96 /* Decrypt and check against known plaintext */ 94 ret = 1;
97 for(n=0 ; n < 1 ; ++n) 95 err:
98 { 96 EVP_CIPHER_CTX_cleanup(&ctx);
99 AES_KEY key; 97 if (ret == 0)
100 unsigned char buf[16];
101
102 AES_set_decrypt_key(tests[n].key,128,&key);
103 AES_decrypt(tests[n].ciphertext,buf,&key);
104 if(memcmp(buf,tests[n].plaintext,sizeof buf))
105 {
106 FIPSerr(FIPS_F_FIPS_SELFTEST_AES,FIPS_R_SELFTEST_FAILED); 98 FIPSerr(FIPS_F_FIPS_SELFTEST_AES,FIPS_R_SELFTEST_FAILED);
107 return 0; 99 return ret;
108 }
109 }
110 return 1;
111 } 100 }
112#endif 101#endif
diff --git a/src/lib/libssl/src/fips/aes/fips_aesavs.c b/src/lib/libssl/src/fips/aes/fips_aesavs.c
index 5fc2879067..9ce613b96d 100644
--- a/src/lib/libssl/src/fips/aes/fips_aesavs.c
+++ b/src/lib/libssl/src/fips/aes/fips_aesavs.c
@@ -62,16 +62,30 @@
62#include <string.h> 62#include <string.h>
63#include <errno.h> 63#include <errno.h>
64#include <assert.h> 64#include <assert.h>
65 65#include <ctype.h>
66#include <openssl/aes.h> 66#include <openssl/aes.h>
67#include <openssl/evp.h> 67#include <openssl/evp.h>
68#include <openssl/fips.h> 68#include <openssl/bn.h>
69
69#include <openssl/err.h> 70#include <openssl/err.h>
70#include "e_os.h" 71#include "e_os.h"
71 72
73#ifndef OPENSSL_FIPS
74
75int main(int argc, char *argv[])
76{
77 printf("No FIPS AES support\n");
78 return(0);
79}
80
81#else
82
83#include <openssl/fips.h>
84#include "fips_utl.h"
85
72#define AES_BLOCK_SIZE 16 86#define AES_BLOCK_SIZE 16
73 87
74#define VERBOSE 1 88#define VERBOSE 0
75 89
76/*-----------------------------------------------*/ 90/*-----------------------------------------------*/
77 91
@@ -82,232 +96,130 @@ int AESTest(EVP_CIPHER_CTX *ctx,
82 unsigned char *plaintext, unsigned char *ciphertext, int len) 96 unsigned char *plaintext, unsigned char *ciphertext, int len)
83 { 97 {
84 const EVP_CIPHER *cipher = NULL; 98 const EVP_CIPHER *cipher = NULL;
85 int ret = 1;
86 int kt = 0;
87
88 if (ctx)
89 memset(ctx, 0, sizeof(EVP_CIPHER_CTX));
90 99
91 if (strcasecmp(amode, "CBC") == 0) 100 if (strcasecmp(amode, "CBC") == 0)
92 kt = 1000;
93 else if (strcasecmp(amode, "ECB") == 0)
94 kt = 2000;
95 else if (strcasecmp(amode, "CFB128") == 0)
96 kt = 3000;
97 else if (strncasecmp(amode, "OFB", 3) == 0)
98 kt = 4000;
99 else if(!strcasecmp(amode,"CFB1"))
100 kt=5000;
101 else if(!strcasecmp(amode,"CFB8"))
102 kt=6000;
103 else
104 {
105 printf("Unknown mode: %s\n", amode);
106 EXIT(1);
107 }
108 if (ret)
109 { 101 {
110 if ((akeysz != 128) && (akeysz != 192) && (akeysz != 256)) 102 switch (akeysz)
111 {
112 printf("Invalid key size: %d\n", akeysz);
113 ret = 0;
114 }
115 else
116 {
117 kt += akeysz;
118 switch (kt)
119 { 103 {
120 case 1128: /* CBC 128 */ 104 case 128:
121 cipher = EVP_aes_128_cbc(); 105 cipher = EVP_aes_128_cbc();
122 break; 106 break;
123 case 1192: /* CBC 192 */ 107
108 case 192:
124 cipher = EVP_aes_192_cbc(); 109 cipher = EVP_aes_192_cbc();
125 break; 110 break;
126 case 1256: /* CBC 256 */ 111
112 case 256:
127 cipher = EVP_aes_256_cbc(); 113 cipher = EVP_aes_256_cbc();
128 break; 114 break;
129 case 2128: /* ECB 128 */ 115 }
116
117 }
118 else if (strcasecmp(amode, "ECB") == 0)
119 {
120 switch (akeysz)
121 {
122 case 128:
130 cipher = EVP_aes_128_ecb(); 123 cipher = EVP_aes_128_ecb();
131 break; 124 break;
132 case 2192: /* ECB 192 */ 125
126 case 192:
133 cipher = EVP_aes_192_ecb(); 127 cipher = EVP_aes_192_ecb();
134 break; 128 break;
135 case 2256: /* ECB 256 */ 129
130 case 256:
136 cipher = EVP_aes_256_ecb(); 131 cipher = EVP_aes_256_ecb();
137 break; 132 break;
138 case 3128: /* CFB 128 */ 133 }
139 cipher = EVP_aes_128_cfb(); 134 }
135 else if (strcasecmp(amode, "CFB128") == 0)
136 {
137 switch (akeysz)
138 {
139 case 128:
140 cipher = EVP_aes_128_cfb128();
140 break; 141 break;
141 case 3192: /* CFB 192 */ 142
142 cipher = EVP_aes_192_cfb(); 143 case 192:
144 cipher = EVP_aes_192_cfb128();
143 break; 145 break;
144 case 3256: /* CFB 256 */ 146
145 cipher = EVP_aes_256_cfb(); 147 case 256:
148 cipher = EVP_aes_256_cfb128();
146 break; 149 break;
147 case 4128: /* OFB 128 */ 150 }
151
152 }
153 else if (strncasecmp(amode, "OFB", 3) == 0)
154 {
155 switch (akeysz)
156 {
157 case 128:
148 cipher = EVP_aes_128_ofb(); 158 cipher = EVP_aes_128_ofb();
149 break; 159 break;
150 case 4192: /* OFB 192 */ 160
161 case 192:
151 cipher = EVP_aes_192_ofb(); 162 cipher = EVP_aes_192_ofb();
152 break; 163 break;
153 case 4256: /* OFB 256 */ 164
165 case 256:
154 cipher = EVP_aes_256_ofb(); 166 cipher = EVP_aes_256_ofb();
155 break; 167 break;
156 case 5128: 168 }
157 cipher=EVP_aes_128_cfb1(); 169 }
170 else if(!strcasecmp(amode,"CFB1"))
171 {
172 switch (akeysz)
173 {
174 case 128:
175 cipher = EVP_aes_128_cfb1();
158 break; 176 break;
159 case 5192: 177
160 cipher=EVP_aes_192_cfb1(); 178 case 192:
179 cipher = EVP_aes_192_cfb1();
161 break; 180 break;
162 case 5256: 181
163 cipher=EVP_aes_256_cfb1(); 182 case 256:
183 cipher = EVP_aes_256_cfb1();
164 break; 184 break;
165 case 6128: 185 }
166 cipher=EVP_aes_128_cfb8(); 186 }
187 else if(!strcasecmp(amode,"CFB8"))
188 {
189 switch (akeysz)
190 {
191 case 128:
192 cipher = EVP_aes_128_cfb8();
167 break; 193 break;
168 case 6192: 194
169 cipher=EVP_aes_192_cfb8(); 195 case 192:
196 cipher = EVP_aes_192_cfb8();
170 break; 197 break;
171 case 6256: 198
172 cipher=EVP_aes_256_cfb8(); 199 case 256:
200 cipher = EVP_aes_256_cfb8();
173 break; 201 break;
174 default:
175 printf("Didn't handle mode %d\n",kt);
176 EXIT(1);
177 }
178 if (dir)
179 { /* encrypt */
180 if(!EVP_CipherInit(ctx, cipher, aKey, iVec, AES_ENCRYPT))
181 {
182 ERR_print_errors_fp(stderr);
183 EXIT(1);
184 }
185
186 EVP_Cipher(ctx, ciphertext, (unsigned char*)plaintext, len);
187 }
188 else
189 { /* decrypt */
190 if(!EVP_CipherInit(ctx, cipher, aKey, iVec, AES_DECRYPT))
191 {
192 ERR_print_errors_fp(stderr);
193 EXIT(1);
194 }
195 EVP_Cipher(ctx, (unsigned char*)plaintext, ciphertext, len);
196 } 202 }
197 }
198 } 203 }
199 return ret;
200 }
201
202/*-----------------------------------------------*/
203
204int hex2bin(char *in, int len, unsigned char *out)
205{
206 int n1, n2;
207 unsigned char ch;
208
209 for (n1 = 0, n2 = 0; n1 < len; )
210 { /* first byte */
211 if ((in[n1] >= '0') && (in[n1] <= '9'))
212 ch = in[n1++] - '0';
213 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
214 ch = in[n1++] - 'A' + 10;
215 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
216 ch = in[n1++] - 'a' + 10;
217 else
218 return -1;
219 if(len == 1)
220 {
221 out[n2++]=ch;
222 break;
223 }
224 out[n2] = ch << 4;
225 /* second byte */
226 if ((in[n1] >= '0') && (in[n1] <= '9'))
227 ch = in[n1++] - '0';
228 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
229 ch = in[n1++] - 'A' + 10;
230 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
231 ch = in[n1++] - 'a' + 10;
232 else
233 return -1;
234 out[n2++] |= ch;
235 }
236 return n2;
237}
238
239/*-----------------------------------------------*/
240
241int bin2hex(unsigned char *in, int len, char *out)
242{
243 int n1, n2;
244 unsigned char ch;
245
246 for (n1 = 0, n2 = 0; n1 < len; ++n1)
247 {
248 /* first nibble */
249 ch = in[n1] >> 4;
250 if (ch <= 0x09)
251 out[n2++] = ch + '0';
252 else
253 out[n2++] = ch - 10 + 'a';
254 /* second nibble */
255 ch = in[n1] & 0x0f;
256 if (ch <= 0x09)
257 out[n2++] = ch + '0';
258 else
259 out[n2++] = ch - 10 + 'a';
260 }
261 return n2;
262}
263
264/* NB: this return the number of _bits_ read */
265int bint2bin(const char *in, int len, unsigned char *out)
266 {
267 int n;
268
269 memset(out,0,len);
270 for(n=0 ; n < len ; ++n)
271 if(in[n] == '1')
272 out[n/8]|=(0x80 >> (n%8));
273 return len;
274 }
275
276int bin2bint(const unsigned char *in,int len,char *out)
277 {
278 int n;
279
280 for(n=0 ; n < len ; ++n)
281 out[n]=(in[n/8]&(0x80 >> (n%8))) ? '1' : '0';
282 return n;
283 }
284
285/*-----------------------------------------------*/
286
287void PrintValue(char *tag, unsigned char *val, int len)
288{
289#if VERBOSE
290 char obuf[2048];
291 int olen;
292 olen = bin2hex(val, len, obuf);
293 printf("%s = %.*s\n", tag, olen, obuf);
294#endif
295}
296
297void OutputValue(char *tag, unsigned char *val, int len, FILE *rfp,int bitmode)
298 {
299 char obuf[2048];
300 int olen;
301
302 if(bitmode)
303 olen=bin2bint(val,len,obuf);
304 else 204 else
305 olen=bin2hex(val,len,obuf); 205 {
306 206 printf("Unknown mode: %s\n", amode);
307 fprintf(rfp, "%s = %.*s\n", tag, olen, obuf); 207 return 0;
308#if VERBOSE 208 }
309 printf("%s = %.*s\n", tag, olen, obuf); 209 if (!cipher)
310#endif 210 {
211 printf("Invalid key size: %d\n", akeysz);
212 return 0;
213 }
214 if (EVP_CipherInit_ex(ctx, cipher, NULL, aKey, iVec, dir) <= 0)
215 return 0;
216 if(!strcasecmp(amode,"CFB1"))
217 M_EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS);
218 if (dir)
219 EVP_Cipher(ctx, ciphertext, plaintext, len);
220 else
221 EVP_Cipher(ctx, plaintext, ciphertext, len);
222 return 1;
311 } 223 }
312 224
313/*-----------------------------------------------*/ 225/*-----------------------------------------------*/
@@ -340,6 +252,7 @@ int do_mct(char *amode,
340 int i, j, n, n1, n2; 252 int i, j, n, n1, n2;
341 int imode = 0, nkeysz = akeysz/8; 253 int imode = 0, nkeysz = akeysz/8;
342 EVP_CIPHER_CTX ctx; 254 EVP_CIPHER_CTX ctx;
255 EVP_CIPHER_CTX_init(&ctx);
343 256
344 if (len > 32) 257 if (len > 32)
345 { 258 {
@@ -467,10 +380,12 @@ int do_mct(char *amode,
467 case CFB1: 380 case CFB1:
468 if(j == 0) 381 if(j == 0)
469 { 382 {
383#if 0
470 /* compensate for wrong endianness of input file */ 384 /* compensate for wrong endianness of input file */
471 if(i == 0) 385 if(i == 0)
472 ptext[0][0]<<=7; 386 ptext[0][0]<<=7;
473 ret=AESTest(&ctx,amode,akeysz,key[i],iv[i],dir, 387#endif
388 ret = AESTest(&ctx,amode,akeysz,key[i],iv[i],dir,
474 ptext[j], ctext[j], len); 389 ptext[j], ctext[j], len);
475 } 390 }
476 else 391 else
@@ -631,11 +546,12 @@ int do_mct(char *amode,
631 # Fri Aug 30 04:07:22 PM 546 # Fri Aug 30 04:07:22 PM
632 ----------------------------*/ 547 ----------------------------*/
633 548
634int proc_file(char *rqfile) 549int proc_file(char *rqfile, char *rspfile)
635 { 550 {
636 char afn[256], rfn[256]; 551 char afn[256], rfn[256];
637 FILE *afp = NULL, *rfp = NULL; 552 FILE *afp = NULL, *rfp = NULL;
638 char ibuf[2048]; 553 char ibuf[2048];
554 char tbuf[2048];
639 int ilen, len, ret = 0; 555 int ilen, len, ret = 0;
640 char algo[8] = ""; 556 char algo[8] = "";
641 char amode[8] = ""; 557 char amode[8] = "";
@@ -647,6 +563,7 @@ int proc_file(char *rqfile)
647 unsigned char ciphertext[2048]; 563 unsigned char ciphertext[2048];
648 char *rp; 564 char *rp;
649 EVP_CIPHER_CTX ctx; 565 EVP_CIPHER_CTX ctx;
566 EVP_CIPHER_CTX_init(&ctx);
650 567
651 if (!rqfile || !(*rqfile)) 568 if (!rqfile || !(*rqfile))
652 { 569 {
@@ -661,13 +578,21 @@ int proc_file(char *rqfile)
661 afn, strerror(errno)); 578 afn, strerror(errno));
662 return -1; 579 return -1;
663 } 580 }
664 strcpy(rfn,afn); 581 if (!rspfile)
665 rp=strstr(rfn,"req/"); 582 {
666 assert(rp); 583 strcpy(rfn,afn);
667 memcpy(rp,"rsp",3); 584 rp=strstr(rfn,"req/");
668 rp = strstr(rfn, ".req"); 585#ifdef OPENSSL_SYS_WIN32
669 memcpy(rp, ".rsp", 4); 586 if (!rp)
670 if ((rfp = fopen(rfn, "w")) == NULL) 587 rp=strstr(rfn,"req\\");
588#endif
589 assert(rp);
590 memcpy(rp,"rsp",3);
591 rp = strstr(rfn, ".req");
592 memcpy(rp, ".rsp", 4);
593 rspfile = rfn;
594 }
595 if ((rfp = fopen(rspfile, "w")) == NULL)
671 { 596 {
672 printf("Cannot open file: %s, %s\n", 597 printf("Cannot open file: %s, %s\n",
673 rfn, strerror(errno)); 598 rfn, strerror(errno));
@@ -677,6 +602,7 @@ int proc_file(char *rqfile)
677 } 602 }
678 while (!err && (fgets(ibuf, sizeof(ibuf), afp)) != NULL) 603 while (!err && (fgets(ibuf, sizeof(ibuf), afp)) != NULL)
679 { 604 {
605 tidy_line(tbuf, ibuf);
680 ilen = strlen(ibuf); 606 ilen = strlen(ibuf);
681 /* printf("step=%d ibuf=%s",step,ibuf); */ 607 /* printf("step=%d ibuf=%s",step,ibuf); */
682 switch (step) 608 switch (step)
@@ -730,12 +656,14 @@ int proc_file(char *rqfile)
730 strncpy(amode, xp+1, n); 656 strncpy(amode, xp+1, n);
731 amode[n] = '\0'; 657 amode[n] = '\0';
732 /* amode[3] = '\0'; */ 658 /* amode[3] = '\0'; */
733 printf("Test = %s, Mode = %s\n", atest, amode); 659 if (VERBOSE)
660 printf("Test = %s, Mode = %s\n", atest, amode);
734 } 661 }
735 else if (strncasecmp(pp, "Key Length : ", 13) == 0) 662 else if (strncasecmp(pp, "Key Length : ", 13) == 0)
736 { 663 {
737 akeysz = atoi(pp+13); 664 akeysz = atoi(pp+13);
738 printf("Key size = %d\n", akeysz); 665 if (VERBOSE)
666 printf("Key size = %d\n", akeysz);
739 } 667 }
740 } 668 }
741 } 669 }
@@ -780,7 +708,7 @@ int proc_file(char *rqfile)
780 } 708 }
781 else 709 else
782 { 710 {
783 len = hex2bin((char*)ibuf+6, strlen(ibuf+6)-1, aKey); 711 len = hex2bin((char*)ibuf+6, aKey);
784 if (len < 0) 712 if (len < 0)
785 { 713 {
786 printf("Invalid KEY\n"); 714 printf("Invalid KEY\n");
@@ -807,7 +735,7 @@ int proc_file(char *rqfile)
807 } 735 }
808 else 736 else
809 { 737 {
810 len = hex2bin((char*)ibuf+5, strlen(ibuf+5)-1, iVec); 738 len = hex2bin((char*)ibuf+5, iVec);
811 if (len < 0) 739 if (len < 0)
812 { 740 {
813 printf("Invalid IV\n"); 741 printf("Invalid IV\n");
@@ -832,7 +760,7 @@ int proc_file(char *rqfile)
832 if(!strcmp(amode,"CFB1")) 760 if(!strcmp(amode,"CFB1"))
833 len=bint2bin(ibuf+12,nn-1,plaintext); 761 len=bint2bin(ibuf+12,nn-1,plaintext);
834 else 762 else
835 len=hex2bin(ibuf+12, nn-1,plaintext); 763 len=hex2bin(ibuf+12, plaintext);
836 if (len < 0) 764 if (len < 0)
837 { 765 {
838 printf("Invalid PLAINTEXT: %s", ibuf+12); 766 printf("Invalid PLAINTEXT: %s", ibuf+12);
@@ -875,7 +803,7 @@ int proc_file(char *rqfile)
875 if(!strcmp(amode,"CFB1")) 803 if(!strcmp(amode,"CFB1"))
876 len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext); 804 len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
877 else 805 else
878 len = hex2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext); 806 len = hex2bin(ibuf+13,ciphertext);
879 if (len < 0) 807 if (len < 0)
880 { 808 {
881 printf("Invalid CIPHERTEXT\n"); 809 printf("Invalid CIPHERTEXT\n");
@@ -933,19 +861,18 @@ int proc_file(char *rqfile)
933--------------------------------------------------*/ 861--------------------------------------------------*/
934int main(int argc, char **argv) 862int main(int argc, char **argv)
935 { 863 {
936 char *rqlist = "req.txt"; 864 char *rqlist = "req.txt", *rspfile = NULL;
937 FILE *fp = NULL; 865 FILE *fp = NULL;
938 char fn[250] = "", rfn[256] = ""; 866 char fn[250] = "", rfn[256] = "";
939 int f_opt = 0, d_opt = 1; 867 int f_opt = 0, d_opt = 1;
940 868
941#ifdef OPENSSL_FIPS 869#ifdef OPENSSL_FIPS
942 if(!FIPS_mode_set(1,argv[0])) 870 if(!FIPS_mode_set(1))
943 { 871 {
944 ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE)); 872 do_print_errors();
945 EXIT(1); 873 EXIT(1);
946 } 874 }
947#endif 875#endif
948 ERR_load_crypto_strings();
949 if (argc > 1) 876 if (argc > 1)
950 { 877 {
951 if (strcasecmp(argv[1], "-d") == 0) 878 if (strcasecmp(argv[1], "-d") == 0)
@@ -970,7 +897,10 @@ int main(int argc, char **argv)
970 if (d_opt) 897 if (d_opt)
971 rqlist = argv[2]; 898 rqlist = argv[2];
972 else 899 else
900 {
973 strcpy(fn, argv[2]); 901 strcpy(fn, argv[2]);
902 rspfile = argv[3];
903 }
974 } 904 }
975 if (d_opt) 905 if (d_opt)
976 { /* list of files (directory) */ 906 { /* list of files (directory) */
@@ -983,8 +913,9 @@ int main(int argc, char **argv)
983 { 913 {
984 strtok(fn, "\r\n"); 914 strtok(fn, "\r\n");
985 strcpy(rfn, fn); 915 strcpy(rfn, fn);
986 printf("Processing: %s\n", rfn); 916 if (VERBOSE)
987 if (proc_file(rfn)) 917 printf("Processing: %s\n", rfn);
918 if (proc_file(rfn, rspfile))
988 { 919 {
989 printf(">>> Processing failed for: %s <<<\n", rfn); 920 printf(">>> Processing failed for: %s <<<\n", rfn);
990 EXIT(1); 921 EXIT(1);
@@ -994,8 +925,9 @@ int main(int argc, char **argv)
994 } 925 }
995 else /* single file */ 926 else /* single file */
996 { 927 {
997 printf("Processing: %s\n", fn); 928 if (VERBOSE)
998 if (proc_file(fn)) 929 printf("Processing: %s\n", fn);
930 if (proc_file(fn, rspfile))
999 { 931 {
1000 printf(">>> Processing failed for: %s <<<\n", fn); 932 printf(">>> Processing failed for: %s <<<\n", fn);
1001 } 933 }
@@ -1003,3 +935,5 @@ int main(int argc, char **argv)
1003 EXIT(0); 935 EXIT(0);
1004 return 0; 936 return 0;
1005 } 937 }
938
939#endif
diff --git a/src/lib/libssl/src/fips/des/Makefile b/src/lib/libssl/src/fips/des/Makefile
index 87a5329d53..ba1d0952b9 100644
--- a/src/lib/libssl/src/fips/des/Makefile
+++ b/src/lib/libssl/src/fips/des/Makefile
@@ -1,5 +1,5 @@
1# 1#
2# SSLeay/fips/des/Makefile 2# OpenSSL/fips/des/Makefile
3# 3#
4 4
5DIR= des 5DIR= des
@@ -15,7 +15,8 @@ MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
15MAKEFILE= Makefile 15MAKEFILE= Makefile
16AR= ar r 16AR= ar r
17 17
18FIPS_DES_ENC=fips_des_enc.o 18ASFLAGS= $(INCLUDES) $(ASFLAG)
19AFLAGS= $(ASFLAGS)
19 20
20CFLAGS= $(INCLUDES) $(CFLAG) 21CFLAGS= $(INCLUDES) $(CFLAG)
21 22
@@ -24,28 +25,23 @@ TEST= fips_desmovs.c
24APPS= 25APPS=
25 26
26LIB=$(TOP)/libcrypto.a 27LIB=$(TOP)/libcrypto.a
27LIBSRC=fips_des_enc.c asm/fips-dx86-elf.s fips_des_selftest.c fips_set_key.c 28LIBSRC=fips_des_selftest.c
28LIBOBJ=$(FIPS_DES_ENC) fips_des_selftest.o fips_set_key.o 29LIBOBJ=fips_des_selftest.o
29 30
30SRC= $(LIBSRC) 31SRC= $(LIBSRC)
31 32
32EXHEADER= 33EXHEADER=
33HEADER= $(EXHEADER) fips_des_locl.h 34HEADER=
34 35
35ALL= $(GENERAL) $(SRC) $(HEADER) 36ALL= $(GENERAL) $(SRC) $(HEADER)
36 37
37top: 38top:
38 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all) 39 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
39 40
40all: check lib 41all: lib
41
42check:
43 TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
44 42
45lib: $(LIBOBJ) 43lib: $(LIBOBJ)
46 $(AR) $(LIB) $(LIBOBJ) 44 @echo $(LIBOBJ) > lib
47 $(RANLIB) $(LIB) || echo Never mind.
48 @sleep 2; touch lib
49 45
50files: 46files:
51 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 47 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -67,26 +63,11 @@ tags:
67 63
68tests: 64tests:
69 65
70top_fips_desmovs: 66fips_test:
71 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) TARGET=fips_desmovs sub_target) 67 -find ../testvectors/tdes/req -name '*.req' > testlist
72 68 -rm -rf ../testvectors/tdes/rsp
73fips_desmovs: fips_desmovs.o $(TOP)/libcrypto.a 69 mkdir ../testvectors/tdes/rsp
74 $(CC) $(CFLAGS) -o fips_desmovs fips_desmovs.o $(PEX_LIBS) $(TOP)/libcrypto.a $(EX_LIBS) 70 if [ -s testlist ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_desmovs -d testlist; fi
75 TOP=$(TOP) $(TOP)/fips/openssl_fips_fingerprint $(TOP)/libcrypto.a fips_desmovs
76
77fips_test: top_fips_desmovs
78 find ../testvectors/des/req -name '*.req' > testlist
79 -rm -rf ../testvectors/des/rsp
80 mkdir ../testvectors/des/rsp
81 ./fips_desmovs -d testlist
82 find ../testvectors/des2/req -name '*.req' > testlist
83 -rm -rf ../testvectors/des2/rsp
84 mkdir ../testvectors/des2/rsp
85 ./fips_desmovs -d testlist
86 find ../testvectors/des3/req -name '*.req' > testlist
87 -rm -rf ../testvectors/des3/rsp
88 mkdir ../testvectors/des3/rsp
89 ./fips_desmovs -d testlist
90 71
91lint: 72lint:
92 lint -DLINT $(INCLUDES) $(SRC)>fluff 73 lint -DLINT $(INCLUDES) $(SRC)>fluff
@@ -99,57 +80,32 @@ dclean:
99 mv -f Makefile.new $(MAKEFILE) 80 mv -f Makefile.new $(MAKEFILE)
100 81
101clean: 82clean:
102 rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff 83 rm -f *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff testlist
103# DO NOT DELETE THIS LINE -- make depend depends on it. 84# DO NOT DELETE THIS LINE -- make depend depends on it.
104 85
105fips_des_enc.o: ../../e_os.h ../../include/openssl/crypto.h 86fips_des_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
106fips_des_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h 87fips_des_selftest.o: ../../include/openssl/crypto.h
107fips_des_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
108fips_des_enc.o: ../../include/openssl/opensslconf.h
109fips_des_enc.o: ../../include/openssl/opensslv.h
110fips_des_enc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
111fips_des_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
112fips_des_enc.o: ../../include/openssl/ui_compat.h fips_des_enc.c
113fips_des_enc.o: fips_des_locl.h
114fips_des_selftest.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
115fips_des_selftest.o: ../../include/openssl/des.h
116fips_des_selftest.o: ../../include/openssl/des_old.h
117fips_des_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 88fips_des_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
118fips_des_selftest.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h 89fips_des_selftest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
90fips_des_selftest.o: ../../include/openssl/lhash.h
91fips_des_selftest.o: ../../include/openssl/obj_mac.h
92fips_des_selftest.o: ../../include/openssl/objects.h
119fips_des_selftest.o: ../../include/openssl/opensslconf.h 93fips_des_selftest.o: ../../include/openssl/opensslconf.h
120fips_des_selftest.o: ../../include/openssl/opensslv.h 94fips_des_selftest.o: ../../include/openssl/opensslv.h
95fips_des_selftest.o: ../../include/openssl/ossl_typ.h
121fips_des_selftest.o: ../../include/openssl/safestack.h 96fips_des_selftest.o: ../../include/openssl/safestack.h
122fips_des_selftest.o: ../../include/openssl/stack.h 97fips_des_selftest.o: ../../include/openssl/stack.h
123fips_des_selftest.o: ../../include/openssl/symhacks.h 98fips_des_selftest.o: ../../include/openssl/symhacks.h fips_des_selftest.c
124fips_des_selftest.o: ../../include/openssl/ui.h 99fips_desmovs.o: ../../e_os.h ../../include/openssl/asn1.h
125fips_des_selftest.o: ../../include/openssl/ui_compat.h fips_des_selftest.c 100fips_desmovs.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
126fips_desmovs.o: ../../e_os.h ../../include/openssl/aes.h 101fips_desmovs.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
127fips_desmovs.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 102fips_desmovs.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
128fips_desmovs.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 103fips_desmovs.o: ../../include/openssl/err.h ../../include/openssl/evp.h
129fips_desmovs.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h 104fips_desmovs.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
130fips_desmovs.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
131fips_desmovs.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
132fips_desmovs.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
133fips_desmovs.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
134fips_desmovs.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
135fips_desmovs.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
136fips_desmovs.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
137fips_desmovs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 105fips_desmovs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
138fips_desmovs.o: ../../include/openssl/opensslconf.h 106fips_desmovs.o: ../../include/openssl/opensslconf.h
139fips_desmovs.o: ../../include/openssl/opensslv.h 107fips_desmovs.o: ../../include/openssl/opensslv.h
140fips_desmovs.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rc2.h 108fips_desmovs.o: ../../include/openssl/ossl_typ.h
141fips_desmovs.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 109fips_desmovs.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
142fips_desmovs.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 110fips_desmovs.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
143fips_desmovs.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 111fips_desmovs.o: ../../include/openssl/ui_compat.h ../fips_utl.h fips_desmovs.c
144fips_desmovs.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
145fips_desmovs.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
146fips_desmovs.o: fips_desmovs.c
147fips_set_key.o: ../../e_os.h ../../include/openssl/crypto.h
148fips_set_key.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
149fips_set_key.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
150fips_set_key.o: ../../include/openssl/opensslconf.h
151fips_set_key.o: ../../include/openssl/opensslv.h
152fips_set_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
153fips_set_key.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
154fips_set_key.o: ../../include/openssl/ui_compat.h fips_des_locl.h
155fips_set_key.o: fips_set_key.c
diff --git a/src/lib/libssl/src/fips/des/fips_des_selftest.c b/src/lib/libssl/src/fips/des/fips_des_selftest.c
index 3e0778eb5e..61c39ce80b 100644
--- a/src/lib/libssl/src/fips/des/fips_des_selftest.c
+++ b/src/lib/libssl/src/fips/des/fips_des_selftest.c
@@ -50,46 +50,27 @@
50#include <string.h> 50#include <string.h>
51#include <openssl/err.h> 51#include <openssl/err.h>
52#include <openssl/fips.h> 52#include <openssl/fips.h>
53#include <openssl/des.h> 53#include <openssl/evp.h>
54#include <openssl/opensslconf.h> 54#include <openssl/opensslconf.h>
55 55
56#ifdef OPENSSL_FIPS 56#ifdef OPENSSL_FIPS
57static struct
58 {
59 DES_cblock key;
60 unsigned char plaintext[8];
61 unsigned char ciphertext[8];
62 } tests[]=
63 {
64 {
65 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
66 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
67 { 0x8C,0xA6,0x4D,0xE9,0xC1,0xB1,0x23,0xA7 }
68 },
69 {
70 { 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10 },
71 { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF },
72 { 0xED,0x39,0xD9,0x50,0xFA,0x74,0xBC,0xC4 },
73 },
74 };
75 57
76static struct 58static struct
77 { 59 {
78 DES_cblock key1; 60 unsigned char key[16];
79 DES_cblock key2;
80 unsigned char plaintext[8]; 61 unsigned char plaintext[8];
81 unsigned char ciphertext[8]; 62 unsigned char ciphertext[8];
82 } tests2[]= 63 } tests2[]=
83 { 64 {
84 { 65 {
85 { 0x7c,0x4f,0x6e,0xf7,0xa2,0x04,0x16,0xec }, 66 { 0x7c,0x4f,0x6e,0xf7,0xa2,0x04,0x16,0xec,
86 { 0x0b,0x6b,0x7c,0x9e,0x5e,0x19,0xa7,0xc4 }, 67 0x0b,0x6b,0x7c,0x9e,0x5e,0x19,0xa7,0xc4 },
87 { 0x06,0xa7,0xd8,0x79,0xaa,0xce,0x69,0xef }, 68 { 0x06,0xa7,0xd8,0x79,0xaa,0xce,0x69,0xef },
88 { 0x4c,0x11,0x17,0x55,0xbf,0xc4,0x4e,0xfd } 69 { 0x4c,0x11,0x17,0x55,0xbf,0xc4,0x4e,0xfd }
89 }, 70 },
90 { 71 {
91 { 0x5d,0x9e,0x01,0xd3,0x25,0xc7,0x3e,0x34 }, 72 { 0x5d,0x9e,0x01,0xd3,0x25,0xc7,0x3e,0x34,
92 { 0x01,0x16,0x7c,0x85,0x23,0xdf,0xe0,0x68 }, 73 0x01,0x16,0x7c,0x85,0x23,0xdf,0xe0,0x68 },
93 { 0x9c,0x50,0x09,0x0f,0x5e,0x7d,0x69,0x7e }, 74 { 0x9c,0x50,0x09,0x0f,0x5e,0x7d,0x69,0x7e },
94 { 0xd2,0x0b,0x18,0xdf,0xd9,0x0d,0x9e,0xff }, 75 { 0xd2,0x0b,0x18,0xdf,0xd9,0x0d,0x9e,0xff },
95 } 76 }
@@ -97,24 +78,22 @@ static struct
97 78
98static struct 79static struct
99 { 80 {
100 DES_cblock key1; 81 unsigned char key[24];
101 DES_cblock key2;
102 DES_cblock key3;
103 unsigned char plaintext[8]; 82 unsigned char plaintext[8];
104 unsigned char ciphertext[8]; 83 unsigned char ciphertext[8];
105 } tests3[]= 84 } tests3[]=
106 { 85 {
107 { 86 {
108 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 87 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
109 { 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10 }, 88 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,
110 { 0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0 }, 89 0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0 },
111 { 0x8f,0x8f,0xbf,0x9b,0x5d,0x48,0xb4,0x1c}, 90 { 0x8f,0x8f,0xbf,0x9b,0x5d,0x48,0xb4,0x1c },
112 { 0x59,0x8c,0xe5,0xd3,0x6c,0xa2,0xea,0x1b}, 91 { 0x59,0x8c,0xe5,0xd3,0x6c,0xa2,0xea,0x1b },
113 }, 92 },
114 { 93 {
115 { 0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,0xFE }, 94 { 0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,0xFE,
116 { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF }, 95 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
117 { 0xED,0x39,0xD9,0x50,0xFA,0x74,0xBC,0xC4 }, 96 0xED,0x39,0xD9,0x50,0xFA,0x74,0xBC,0xC4 },
118 { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF }, 97 { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF },
119 { 0x11,0x25,0xb0,0x35,0xbe,0xa0,0x82,0x86 }, 98 { 0x11,0x25,0xb0,0x35,0xbe,0xa0,0x82,0x86 },
120 }, 99 },
@@ -122,79 +101,37 @@ static struct
122 101
123void FIPS_corrupt_des() 102void FIPS_corrupt_des()
124 { 103 {
125 tests[0].plaintext[0]++; 104 tests2[0].plaintext[0]++;
126 } 105 }
127 106
128int FIPS_selftest_des() 107int FIPS_selftest_des()
129 { 108 {
130 int n; 109 int n, ret = 0;
131 110 EVP_CIPHER_CTX ctx;
132 /* Encrypt/decrypt with DES and compare to known answers */ 111 EVP_CIPHER_CTX_init(&ctx);
133 for(n=0 ; n < 2 ; ++n)
134 {
135 DES_key_schedule key;
136 DES_cblock buf;
137
138 DES_set_key(&tests[n].key,&key);
139 DES_ecb_encrypt(&tests[n].plaintext,&buf,&key,1);
140 if(memcmp(buf,tests[n].ciphertext,sizeof buf))
141 {
142 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
143 return 0;
144 }
145 DES_ecb_encrypt(&tests[n].ciphertext,&buf,&key,0);
146 if(memcmp(buf,tests[n].plaintext,sizeof buf))
147 {
148 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
149 return 0;
150 }
151 }
152
153 /* Encrypt/decrypt with 2-key 3DES and compare to known answers */ 112 /* Encrypt/decrypt with 2-key 3DES and compare to known answers */
154 for(n=0 ; n < 2 ; ++n) 113 for(n=0 ; n < 2 ; ++n)
155 { 114 {
156 DES_key_schedule key1, key2; 115 if (!fips_cipher_test(&ctx, EVP_des_ede_ecb(),
157 unsigned char buf[8]; 116 tests2[n].key, NULL,
158 117 tests2[n].plaintext, tests2[n].ciphertext, 8))
159 DES_set_key(&tests2[n].key1,&key1); 118 goto err;
160 DES_set_key(&tests2[n].key2,&key2);
161 DES_ecb2_encrypt(tests2[n].plaintext,buf,&key1,&key2,1);
162 if(memcmp(buf,tests2[n].ciphertext,sizeof buf))
163 {
164 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
165 return 0;
166 }
167 DES_ecb2_encrypt(tests2[n].ciphertext,buf,&key1,&key2,0);
168 if(memcmp(buf,tests2[n].plaintext,sizeof buf))
169 {
170 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
171 return 0;
172 }
173 } 119 }
174 120
175 /* Encrypt/decrypt with 3DES and compare to known answers */ 121 /* Encrypt/decrypt with 3DES and compare to known answers */
176 for(n=0 ; n < 2 ; ++n) 122 for(n=0 ; n < 2 ; ++n)
177 { 123 {
178 DES_key_schedule key1, key2, key3; 124 if (!fips_cipher_test(&ctx, EVP_des_ede3_ecb(),
179 unsigned char buf[8]; 125 tests3[n].key, NULL,
180 126 tests3[n].plaintext, tests3[n].ciphertext, 8))
181 DES_set_key(&tests3[n].key1,&key1); 127 goto err;
182 DES_set_key(&tests3[n].key2,&key2);
183 DES_set_key(&tests3[n].key3,&key3);
184 DES_ecb3_encrypt(tests3[n].plaintext,buf,&key1,&key2,&key3,1);
185 if(memcmp(buf,tests3[n].ciphertext,sizeof buf))
186 {
187 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
188 return 0;
189 }
190 DES_ecb3_encrypt(tests3[n].ciphertext,buf,&key1,&key2,&key3,0);
191 if(memcmp(buf,tests3[n].plaintext,sizeof buf))
192 {
193 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
194 return 0;
195 }
196 } 128 }
129 ret = 1;
130 err:
131 EVP_CIPHER_CTX_cleanup(&ctx);
132 if (ret == 0)
133 FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
197 134
198 return 1; 135 return ret;
199 } 136 }
200#endif 137#endif
diff --git a/src/lib/libssl/src/fips/des/fips_desmovs.c b/src/lib/libssl/src/fips/des/fips_desmovs.c
index d1b60c1a40..2d3424cf9f 100644
--- a/src/lib/libssl/src/fips/des/fips_desmovs.c
+++ b/src/lib/libssl/src/fips/des/fips_desmovs.c
@@ -63,18 +63,30 @@
63#include <string.h> 63#include <string.h>
64#include <errno.h> 64#include <errno.h>
65#include <assert.h> 65#include <assert.h>
66 66#include <ctype.h>
67#include <openssl/des.h> 67#include <openssl/des.h>
68#include <openssl/evp.h> 68#include <openssl/evp.h>
69#include <openssl/fips.h> 69#include <openssl/bn.h>
70
70#include <openssl/err.h> 71#include <openssl/err.h>
71#include "e_os.h" 72#include "e_os.h"
72 73
73/*#define AES_BLOCK_SIZE 16*/ 74#ifndef OPENSSL_FIPS
74 75
75#define VERBOSE 0 76int main(int argc, char *argv[])
77{
78 printf("No FIPS DES support\n");
79 return(0);
80}
76 81
77/*-----------------------------------------------*/ 82#else
83
84#include <openssl/fips.h>
85#include "fips_utl.h"
86
87#define DES_BLOCK_SIZE 8
88
89#define VERBOSE 0
78 90
79int DESTest(EVP_CIPHER_CTX *ctx, 91int DESTest(EVP_CIPHER_CTX *ctx,
80 char *amode, int akeysz, unsigned char *aKey, 92 char *amode, int akeysz, unsigned char *aKey,
@@ -83,181 +95,41 @@ int DESTest(EVP_CIPHER_CTX *ctx,
83 unsigned char *out, unsigned char *in, int len) 95 unsigned char *out, unsigned char *in, int len)
84 { 96 {
85 const EVP_CIPHER *cipher = NULL; 97 const EVP_CIPHER *cipher = NULL;
86 int kt = 0;
87 98
88 if (ctx) 99 if (akeysz != 192)
89 memset(ctx, 0, sizeof(EVP_CIPHER_CTX)); 100 {
101 printf("Invalid key size: %d\n", akeysz);
102 EXIT(1);
103 }
90 104
91 if (strcasecmp(amode, "CBC") == 0) 105 if (strcasecmp(amode, "CBC") == 0)
92 kt = 1000; 106 cipher = EVP_des_ede3_cbc();
93 else if (strcasecmp(amode, "ECB") == 0) 107 else if (strcasecmp(amode, "ECB") == 0)
94 kt = 2000; 108 cipher = EVP_des_ede3_ecb();
95 else if (strcasecmp(amode, "CFB64") == 0) 109 else if (strcasecmp(amode, "CFB64") == 0)
96 kt = 3000; 110 cipher = EVP_des_ede3_cfb64();
97 else if (strncasecmp(amode, "OFB", 3) == 0) 111 else if (strncasecmp(amode, "OFB", 3) == 0)
98 kt = 4000; 112 cipher = EVP_des_ede3_ofb();
113#if 0
99 else if(!strcasecmp(amode,"CFB1")) 114 else if(!strcasecmp(amode,"CFB1"))
100 kt=5000; 115 {
116 ctx->cbits = 1;
117 ctx->cmode = EVP_CIPH_CFB_MODE;
118 }
119#endif
101 else if(!strcasecmp(amode,"CFB8")) 120 else if(!strcasecmp(amode,"CFB8"))
102 kt=6000; 121 cipher = EVP_des_ede3_cfb8();
103 else 122 else
104 { 123 {
105 printf("Unknown mode: %s\n", amode); 124 printf("Unknown mode: %s\n", amode);
106 EXIT(1); 125 EXIT(1);
107 } 126 }
108 if (akeysz != 64 && akeysz != 192)
109 {
110 printf("Invalid key size: %d\n", akeysz);
111 EXIT(1);
112 }
113 else
114 {
115 kt += akeysz;
116 switch (kt)
117 {
118 case 1064:
119 cipher=EVP_des_cbc();
120 break;
121 case 1192:
122 cipher=EVP_des_ede3_cbc();
123 break;
124 case 2064:
125 cipher=EVP_des_ecb();
126 break;
127 case 2192:
128 cipher=EVP_des_ede3_ecb();
129 break;
130 case 3064:
131 cipher=EVP_des_cfb64();
132 break;
133 case 3192:
134 cipher=EVP_des_ede3_cfb64();
135 break;
136 case 4064:
137 cipher=EVP_des_ofb();
138 break;
139 case 4192:
140 cipher=EVP_des_ede3_ofb();
141 break;
142 case 5064:
143 cipher=EVP_des_cfb1();
144 break;
145 case 5192:
146 cipher=EVP_des_ede3_cfb1();
147 break;
148 case 6064:
149 cipher=EVP_des_cfb8();
150 break;
151 case 6192:
152 cipher=EVP_des_ede3_cfb8();
153 break;
154 default:
155 printf("Didn't handle mode %d\n",kt);
156 EXIT(1);
157 }
158 if(!EVP_CipherInit(ctx, cipher, aKey, iVec, dir))
159 {
160 ERR_print_errors_fp(stderr);
161 EXIT(1);
162 }
163 EVP_Cipher(ctx, out, in, len);
164 }
165 return 1;
166 }
167
168/*-----------------------------------------------*/
169
170int hex2bin(char *in, int len, unsigned char *out)
171 {
172 int n1, n2;
173 unsigned char ch;
174
175 for (n1 = 0, n2 = 0; n1 < len; )
176 { /* first byte */
177 if ((in[n1] >= '0') && (in[n1] <= '9'))
178 ch = in[n1++] - '0';
179 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
180 ch = in[n1++] - 'A' + 10;
181 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
182 ch = in[n1++] - 'a' + 10;
183 else
184 return -1;
185 if(len == 1)
186 {
187 out[n2++]=ch;
188 break;
189 }
190 out[n2] = ch << 4;
191 /* second byte */
192 if ((in[n1] >= '0') && (in[n1] <= '9'))
193 ch = in[n1++] - '0';
194 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
195 ch = in[n1++] - 'A' + 10;
196 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
197 ch = in[n1++] - 'a' + 10;
198 else
199 return -1;
200 out[n2++] |= ch;
201 }
202 return n2;
203 }
204
205/*-----------------------------------------------*/
206
207int bin2hex(unsigned char *in, int len, char *out)
208 {
209 int n1, n2;
210 unsigned char ch;
211
212 for (n1 = 0, n2 = 0; n1 < len; ++n1)
213 {
214 /* first nibble */
215 ch = in[n1] >> 4;
216 if (ch <= 0x09)
217 out[n2++] = ch + '0';
218 else
219 out[n2++] = ch - 10 + 'a';
220 /* second nibble */
221 ch = in[n1] & 0x0f;
222 if (ch <= 0x09)
223 out[n2++] = ch + '0';
224 else
225 out[n2++] = ch - 10 + 'a';
226 }
227 return n2;
228 }
229 127
230/* NB: this return the number of _bits_ read */ 128 if (EVP_CipherInit_ex(ctx, cipher, NULL, aKey, iVec, dir) <= 0)
231int bint2bin(const char *in, int len, unsigned char *out) 129 return 0;
232 { 130 EVP_Cipher(ctx, out, in, len);
233 int n;
234 131
235 memset(out,0,len); 132 return 1;
236 for(n=0 ; n < len ; ++n)
237 if(in[n] == '1')
238 out[n/8]|=(0x80 >> (n%8));
239 return len;
240 }
241
242int bin2bint(const unsigned char *in,int len,char *out)
243 {
244 int n;
245
246 for(n=0 ; n < len ; ++n)
247 out[n]=(in[n/8]&(0x80 >> (n%8))) ? '1' : '0';
248 return n;
249 }
250
251/*-----------------------------------------------*/
252
253void PrintValue(char *tag, unsigned char *val, int len)
254 {
255#if VERBOSE
256 char obuf[2048];
257 int olen;
258 olen = bin2hex(val, len, obuf);
259 printf("%s = %.*s\n", tag, olen, obuf);
260#endif
261 } 133 }
262 134
263void DebugValue(char *tag, unsigned char *val, int len) 135void DebugValue(char *tag, unsigned char *val, int len)
@@ -268,22 +140,6 @@ void DebugValue(char *tag, unsigned char *val, int len)
268 printf("%s = %.*s\n", tag, olen, obuf); 140 printf("%s = %.*s\n", tag, olen, obuf);
269 } 141 }
270 142
271void OutputValue(char *tag, unsigned char *val, int len, FILE *rfp,int bitmode)
272 {
273 char obuf[2048];
274 int olen;
275
276 if(bitmode)
277 olen=bin2bint(val,len,obuf);
278 else
279 olen=bin2hex(val,len,obuf);
280
281 fprintf(rfp, "%s = %.*s\n", tag, olen, obuf);
282#if VERBOSE
283 printf("%s = %.*s\n", tag, olen, obuf);
284#endif
285 }
286
287void shiftin(unsigned char *dst,unsigned char *src,int nbits) 143void shiftin(unsigned char *dst,unsigned char *src,int nbits)
288 { 144 {
289 int n; 145 int n;
@@ -326,9 +182,10 @@ void do_mct(char *amode,
326 { 182 {
327 int j; 183 int j;
328 int n; 184 int n;
329 EVP_CIPHER_CTX ctx;
330 int kp=akeysz/64; 185 int kp=akeysz/64;
331 unsigned char old_iv[8]; 186 unsigned char old_iv[8];
187 EVP_CIPHER_CTX ctx;
188 EVP_CIPHER_CTX_init(&ctx);
332 189
333 fprintf(rfp,"\nCOUNT = %d\n",i); 190 fprintf(rfp,"\nCOUNT = %d\n",i);
334 if(kp == 1) 191 if(kp == 1)
@@ -410,11 +267,11 @@ void do_mct(char *amode,
410 } 267 }
411 } 268 }
412 269
413int proc_file(char *rqfile) 270int proc_file(char *rqfile, char *rspfile)
414 { 271 {
415 char afn[256], rfn[256]; 272 char afn[256], rfn[256];
416 FILE *afp = NULL, *rfp = NULL; 273 FILE *afp = NULL, *rfp = NULL;
417 char ibuf[2048]; 274 char ibuf[2048], tbuf[2048];
418 int ilen, len, ret = 0; 275 int ilen, len, ret = 0;
419 char amode[8] = ""; 276 char amode[8] = "";
420 char atest[100] = ""; 277 char atest[100] = "";
@@ -426,6 +283,7 @@ int proc_file(char *rqfile)
426 char *rp; 283 char *rp;
427 EVP_CIPHER_CTX ctx; 284 EVP_CIPHER_CTX ctx;
428 int numkeys=1; 285 int numkeys=1;
286 EVP_CIPHER_CTX_init(&ctx);
429 287
430 if (!rqfile || !(*rqfile)) 288 if (!rqfile || !(*rqfile))
431 { 289 {
@@ -440,13 +298,21 @@ int proc_file(char *rqfile)
440 afn, strerror(errno)); 298 afn, strerror(errno));
441 return -1; 299 return -1;
442 } 300 }
443 strcpy(rfn,afn); 301 if (!rspfile)
444 rp=strstr(rfn,"req/"); 302 {
445 assert(rp); 303 strcpy(rfn,afn);
446 memcpy(rp,"rsp",3); 304 rp=strstr(rfn,"req/");
447 rp = strstr(rfn, ".req"); 305#ifdef OPENSSL_SYS_WIN32
448 memcpy(rp, ".rsp", 4); 306 if (!rp)
449 if ((rfp = fopen(rfn, "w")) == NULL) 307 rp=strstr(rfn,"req\\");
308#endif
309 assert(rp);
310 memcpy(rp,"rsp",3);
311 rp = strstr(rfn, ".req");
312 memcpy(rp, ".rsp", 4);
313 rspfile = rfn;
314 }
315 if ((rfp = fopen(rspfile, "w")) == NULL)
450 { 316 {
451 printf("Cannot open file: %s, %s\n", 317 printf("Cannot open file: %s, %s\n",
452 rfn, strerror(errno)); 318 rfn, strerror(errno));
@@ -456,6 +322,7 @@ int proc_file(char *rqfile)
456 } 322 }
457 while (!err && (fgets(ibuf, sizeof(ibuf), afp)) != NULL) 323 while (!err && (fgets(ibuf, sizeof(ibuf), afp)) != NULL)
458 { 324 {
325 tidy_line(tbuf, ibuf);
459 ilen = strlen(ibuf); 326 ilen = strlen(ibuf);
460 /* printf("step=%d ibuf=%s",step,ibuf);*/ 327 /* printf("step=%d ibuf=%s",step,ibuf);*/
461 if(step == 3 && !strcmp(amode,"ECB")) 328 if(step == 3 && !strcmp(amode,"ECB"))
@@ -517,7 +384,8 @@ int proc_file(char *rqfile)
517 strncpy(amode, xp+1, n); 384 strncpy(amode, xp+1, n);
518 amode[n] = '\0'; 385 amode[n] = '\0';
519 /* amode[3] = '\0'; */ 386 /* amode[3] = '\0'; */
520 printf("Test=%s, Mode=%s\n",atest,amode); 387 if (VERBOSE)
388 printf("Test=%s, Mode=%s\n",atest,amode);
521 } 389 }
522 } 390 }
523 } 391 }
@@ -576,7 +444,7 @@ int proc_file(char *rqfile)
576 if(!strncasecmp(ibuf,"KEY = ",6)) 444 if(!strncasecmp(ibuf,"KEY = ",6))
577 { 445 {
578 akeysz=64; 446 akeysz=64;
579 len = hex2bin((char*)ibuf+6, strlen(ibuf+6)-1, aKey); 447 len = hex2bin((char*)ibuf+6, aKey);
580 if (len < 0) 448 if (len < 0)
581 { 449 {
582 printf("Invalid KEY\n"); 450 printf("Invalid KEY\n");
@@ -589,7 +457,7 @@ int proc_file(char *rqfile)
589 else if(!strncasecmp(ibuf,"KEYs = ",7)) 457 else if(!strncasecmp(ibuf,"KEYs = ",7))
590 { 458 {
591 akeysz=64*3; 459 akeysz=64*3;
592 len=hex2bin(ibuf+7,strlen(ibuf+7)-1,aKey); 460 len=hex2bin(ibuf+7,aKey);
593 if(len != 8) 461 if(len != 8)
594 { 462 {
595 printf("Invalid KEY\n"); 463 printf("Invalid KEY\n");
@@ -607,7 +475,7 @@ int proc_file(char *rqfile)
607 int n=ibuf[3]-'1'; 475 int n=ibuf[3]-'1';
608 476
609 akeysz=64*3; 477 akeysz=64*3;
610 len=hex2bin(ibuf+7,strlen(ibuf+7)-1,aKey+n*8); 478 len=hex2bin(ibuf+7,aKey+n*8);
611 if(len != 8) 479 if(len != 8)
612 { 480 {
613 printf("Invalid KEY\n"); 481 printf("Invalid KEY\n");
@@ -635,7 +503,7 @@ int proc_file(char *rqfile)
635 } 503 }
636 else 504 else
637 { 505 {
638 len = hex2bin((char*)ibuf+5, strlen(ibuf+5)-1, iVec); 506 len = hex2bin((char*)ibuf+5, iVec);
639 if (len < 0) 507 if (len < 0)
640 { 508 {
641 printf("Invalid IV\n"); 509 printf("Invalid IV\n");
@@ -660,7 +528,7 @@ int proc_file(char *rqfile)
660 if(!strcmp(amode,"CFB1")) 528 if(!strcmp(amode,"CFB1"))
661 len=bint2bin(ibuf+12,nn-1,plaintext); 529 len=bint2bin(ibuf+12,nn-1,plaintext);
662 else 530 else
663 len=hex2bin(ibuf+12, nn-1,plaintext); 531 len=hex2bin(ibuf+12, plaintext);
664 if (len < 0) 532 if (len < 0)
665 { 533 {
666 printf("Invalid PLAINTEXT: %s", ibuf+12); 534 printf("Invalid PLAINTEXT: %s", ibuf+12);
@@ -701,7 +569,7 @@ int proc_file(char *rqfile)
701 if(!strcmp(amode,"CFB1")) 569 if(!strcmp(amode,"CFB1"))
702 len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext); 570 len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
703 else 571 else
704 len = hex2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext); 572 len = hex2bin(ibuf+13,ciphertext);
705 if (len < 0) 573 if (len < 0)
706 { 574 {
707 printf("Invalid CIPHERTEXT\n"); 575 printf("Invalid CIPHERTEXT\n");
@@ -760,20 +628,18 @@ int proc_file(char *rqfile)
760--------------------------------------------------*/ 628--------------------------------------------------*/
761int main(int argc, char **argv) 629int main(int argc, char **argv)
762 { 630 {
763 char *rqlist = "req.txt"; 631 char *rqlist = "req.txt", *rspfile = NULL;
764 FILE *fp = NULL; 632 FILE *fp = NULL;
765 char fn[250] = "", rfn[256] = ""; 633 char fn[250] = "", rfn[256] = "";
766 int f_opt = 0, d_opt = 1; 634 int f_opt = 0, d_opt = 1;
767 635
768#ifdef OPENSSL_FIPS 636#ifdef OPENSSL_FIPS
769 if(!FIPS_mode_set(1,argv[0])) 637 if(!FIPS_mode_set(1))
770 { 638 {
771 ERR_load_crypto_strings(); 639 do_print_errors();
772 ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
773 EXIT(1); 640 EXIT(1);
774 } 641 }
775#endif 642#endif
776 ERR_load_crypto_strings();
777 if (argc > 1) 643 if (argc > 1)
778 { 644 {
779 if (strcasecmp(argv[1], "-d") == 0) 645 if (strcasecmp(argv[1], "-d") == 0)
@@ -798,7 +664,10 @@ int main(int argc, char **argv)
798 if (d_opt) 664 if (d_opt)
799 rqlist = argv[2]; 665 rqlist = argv[2];
800 else 666 else
667 {
801 strcpy(fn, argv[2]); 668 strcpy(fn, argv[2]);
669 rspfile = argv[3];
670 }
802 } 671 }
803 if (d_opt) 672 if (d_opt)
804 { /* list of files (directory) */ 673 { /* list of files (directory) */
@@ -812,7 +681,7 @@ int main(int argc, char **argv)
812 strtok(fn, "\r\n"); 681 strtok(fn, "\r\n");
813 strcpy(rfn, fn); 682 strcpy(rfn, fn);
814 printf("Processing: %s\n", rfn); 683 printf("Processing: %s\n", rfn);
815 if (proc_file(rfn)) 684 if (proc_file(rfn, rspfile))
816 { 685 {
817 printf(">>> Processing failed for: %s <<<\n", rfn); 686 printf(">>> Processing failed for: %s <<<\n", rfn);
818 EXIT(1); 687 EXIT(1);
@@ -822,8 +691,9 @@ int main(int argc, char **argv)
822 } 691 }
823 else /* single file */ 692 else /* single file */
824 { 693 {
825 printf("Processing: %s\n", fn); 694 if (VERBOSE)
826 if (proc_file(fn)) 695 printf("Processing: %s\n", fn);
696 if (proc_file(fn, rspfile))
827 { 697 {
828 printf(">>> Processing failed for: %s <<<\n", fn); 698 printf(">>> Processing failed for: %s <<<\n", fn);
829 } 699 }
@@ -831,3 +701,5 @@ int main(int argc, char **argv)
831 EXIT(0); 701 EXIT(0);
832 return 0; 702 return 0;
833 } 703 }
704
705#endif
diff --git a/src/lib/libssl/src/fips/dh/Makefile b/src/lib/libssl/src/fips/dh/Makefile
index 10b40aa9f6..2d3833a822 100644
--- a/src/lib/libssl/src/fips/dh/Makefile
+++ b/src/lib/libssl/src/fips/dh/Makefile
@@ -1,5 +1,5 @@
1# 1#
2# SSLeay/fips/dh/Makefile 2# OpenSSL/fips/dh/Makefile
3# 3#
4 4
5DIR= dh 5DIR= dh
@@ -22,8 +22,8 @@ TEST=
22APPS= 22APPS=
23 23
24LIB=$(TOP)/libcrypto.a 24LIB=$(TOP)/libcrypto.a
25LIBSRC=fips_dh_check.c fips_dh_gen.c fips_dh_key.c 25LIBSRC=fips_dh_check.c fips_dh_gen.c fips_dh_key.c fips_dh_lib.c
26LIBOBJ=fips_dh_check.o fips_dh_gen.o fips_dh_key.o 26LIBOBJ=fips_dh_check.o fips_dh_gen.o fips_dh_key.o fips_dh_lib.o
27 27
28SRC= $(LIBSRC) 28SRC= $(LIBSRC)
29 29
@@ -35,15 +35,10 @@ ALL= $(GENERAL) $(SRC) $(HEADER)
35top: 35top:
36 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all) 36 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
37 37
38all: check lib 38all: lib
39 39
40lib: $(LIBOBJ) 40lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 41 @echo $(LIBOBJ) > lib
42 $(RANLIB) $(LIB) || echo Never mind.
43 @sleep 2; touch lib
44
45check:
46 TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
47 42
48files: 43files:
49 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 44 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -65,6 +60,8 @@ tags:
65 60
66tests: 61tests:
67 62
63fips_test:
64
68lint: 65lint:
69 lint -DLINT $(INCLUDES) $(SRC)>fluff 66 lint -DLINT $(INCLUDES) $(SRC)>fluff
70 67
@@ -82,7 +79,8 @@ clean:
82 79
83fips_dh_check.o: ../../include/openssl/bio.h ../../include/openssl/bn.h 80fips_dh_check.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
84fips_dh_check.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h 81fips_dh_check.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
85fips_dh_check.o: ../../include/openssl/e_os2.h 82fips_dh_check.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
83fips_dh_check.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
86fips_dh_check.o: ../../include/openssl/opensslconf.h 84fips_dh_check.o: ../../include/openssl/opensslconf.h
87fips_dh_check.o: ../../include/openssl/opensslv.h 85fips_dh_check.o: ../../include/openssl/opensslv.h
88fips_dh_check.o: ../../include/openssl/ossl_typ.h 86fips_dh_check.o: ../../include/openssl/ossl_typ.h
@@ -101,9 +99,17 @@ fips_dh_gen.o: ../../include/openssl/symhacks.h fips_dh_gen.c
101fips_dh_key.o: ../../include/openssl/bio.h ../../include/openssl/bn.h 99fips_dh_key.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
102fips_dh_key.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h 100fips_dh_key.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
103fips_dh_key.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 101fips_dh_key.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
104fips_dh_key.o: ../../include/openssl/lhash.h 102fips_dh_key.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
105fips_dh_key.o: ../../include/openssl/opensslconf.h 103fips_dh_key.o: ../../include/openssl/opensslconf.h
106fips_dh_key.o: ../../include/openssl/opensslv.h 104fips_dh_key.o: ../../include/openssl/opensslv.h
107fips_dh_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h 105fips_dh_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
108fips_dh_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 106fips_dh_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
109fips_dh_key.o: ../../include/openssl/symhacks.h fips_dh_key.c 107fips_dh_key.o: ../../include/openssl/symhacks.h fips_dh_key.c
108fips_dh_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
109fips_dh_lib.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
110fips_dh_lib.o: ../../include/openssl/e_os2.h
111fips_dh_lib.o: ../../include/openssl/opensslconf.h
112fips_dh_lib.o: ../../include/openssl/opensslv.h
113fips_dh_lib.o: ../../include/openssl/ossl_typ.h
114fips_dh_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
115fips_dh_lib.o: ../../include/openssl/symhacks.h fips_dh_lib.c
diff --git a/src/lib/libssl/src/fips/dh/dh_gen.c b/src/lib/libssl/src/fips/dh/dh_gen.c
new file mode 100644
index 0000000000..999e1deb40
--- /dev/null
+++ b/src/lib/libssl/src/fips/dh/dh_gen.c
@@ -0,0 +1,179 @@
1/* crypto/dh/dh_gen.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/* NB: These functions have been upgraded - the previous prototypes are in
60 * dh_depr.c as wrappers to these ones.
61 * - Geoff
62 */
63
64#include <stdio.h>
65#include "cryptlib.h"
66#include <openssl/bn.h>
67#include <openssl/dh.h>
68
69#ifndef OPENSSL_FIPS
70
71static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb);
72
73int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, BN_GENCB *cb)
74 {
75 if(ret->meth->generate_params)
76 return ret->meth->generate_params(ret, prime_len, generator, cb);
77 return dh_builtin_genparams(ret, prime_len, generator, cb);
78 }
79
80/* We generate DH parameters as follows
81 * find a prime q which is prime_len/2 bits long.
82 * p=(2*q)+1 or (p-1)/2 = q
83 * For this case, g is a generator if
84 * g^((p-1)/q) mod p != 1 for values of q which are the factors of p-1.
85 * Since the factors of p-1 are q and 2, we just need to check
86 * g^2 mod p != 1 and g^q mod p != 1.
87 *
88 * Having said all that,
89 * there is another special case method for the generators 2, 3 and 5.
90 * for 2, p mod 24 == 11
91 * for 3, p mod 12 == 5 <<<<< does not work for safe primes.
92 * for 5, p mod 10 == 3 or 7
93 *
94 * Thanks to Phil Karn <karn@qualcomm.com> for the pointers about the
95 * special generators and for answering some of my questions.
96 *
97 * I've implemented the second simple method :-).
98 * Since DH should be using a safe prime (both p and q are prime),
99 * this generator function can take a very very long time to run.
100 */
101/* Actually there is no reason to insist that 'generator' be a generator.
102 * It's just as OK (and in some sense better) to use a generator of the
103 * order-q subgroup.
104 */
105static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb)
106 {
107 BIGNUM *t1,*t2;
108 int g,ok= -1;
109 BN_CTX *ctx=NULL;
110
111 ctx=BN_CTX_new();
112 if (ctx == NULL) goto err;
113 BN_CTX_start(ctx);
114 t1 = BN_CTX_get(ctx);
115 t2 = BN_CTX_get(ctx);
116 if (t1 == NULL || t2 == NULL) goto err;
117
118 /* Make sure 'ret' has the necessary elements */
119 if(!ret->p && ((ret->p = BN_new()) == NULL)) goto err;
120 if(!ret->g && ((ret->g = BN_new()) == NULL)) goto err;
121
122 if (generator <= 1)
123 {
124 DHerr(DH_F_DH_BUILTIN_GENPARAMS, DH_R_BAD_GENERATOR);
125 goto err;
126 }
127 if (generator == DH_GENERATOR_2)
128 {
129 if (!BN_set_word(t1,24)) goto err;
130 if (!BN_set_word(t2,11)) goto err;
131 g=2;
132 }
133#if 0 /* does not work for safe primes */
134 else if (generator == DH_GENERATOR_3)
135 {
136 if (!BN_set_word(t1,12)) goto err;
137 if (!BN_set_word(t2,5)) goto err;
138 g=3;
139 }
140#endif
141 else if (generator == DH_GENERATOR_5)
142 {
143 if (!BN_set_word(t1,10)) goto err;
144 if (!BN_set_word(t2,3)) goto err;
145 /* BN_set_word(t3,7); just have to miss
146 * out on these ones :-( */
147 g=5;
148 }
149 else
150 {
151 /* in the general case, don't worry if 'generator' is a
152 * generator or not: since we are using safe primes,
153 * it will generate either an order-q or an order-2q group,
154 * which both is OK */
155 if (!BN_set_word(t1,2)) goto err;
156 if (!BN_set_word(t2,1)) goto err;
157 g=generator;
158 }
159
160 if(!BN_generate_prime_ex(ret->p,prime_len,1,t1,t2,cb)) goto err;
161 if(!BN_GENCB_call(cb, 3, 0)) goto err;
162 if (!BN_set_word(ret->g,g)) goto err;
163 ok=1;
164err:
165 if (ok == -1)
166 {
167 DHerr(DH_F_DH_BUILTIN_GENPARAMS,ERR_R_BN_LIB);
168 ok=0;
169 }
170
171 if (ctx != NULL)
172 {
173 BN_CTX_end(ctx);
174 BN_CTX_free(ctx);
175 }
176 return ok;
177 }
178
179#endif
diff --git a/src/lib/libssl/src/fips/dh/fips_dh_check.c b/src/lib/libssl/src/fips/dh/fips_dh_check.c
index 874920b466..7333f7c80f 100644
--- a/src/lib/libssl/src/fips/dh/fips_dh_check.c
+++ b/src/lib/libssl/src/fips/dh/fips_dh_check.c
@@ -58,10 +58,9 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <openssl/bn.h> 60#include <openssl/bn.h>
61#ifndef OPENSSL_NO_DH
62#include <openssl/dh.h> 61#include <openssl/dh.h>
63 62#include <openssl/err.h>
64#ifdef OPENSSL_FIPS 63#include <openssl/fips.h>
65 64
66/* Check that p is a safe prime and 65/* Check that p is a safe prime and
67 * if g is 2, 3 or 5, check that is is a suitable generator 66 * if g is 2, 3 or 5, check that is is a suitable generator
@@ -72,6 +71,8 @@
72 * should hold. 71 * should hold.
73 */ 72 */
74 73
74#ifdef OPENSSL_FIPS
75
75int DH_check(const DH *dh, int *ret) 76int DH_check(const DH *dh, int *ret)
76 { 77 {
77 int ok=0; 78 int ok=0;
@@ -106,12 +107,12 @@ int DH_check(const DH *dh, int *ret)
106 else 107 else
107 *ret|=DH_UNABLE_TO_CHECK_GENERATOR; 108 *ret|=DH_UNABLE_TO_CHECK_GENERATOR;
108 109
109 if (!BN_is_prime(dh->p,BN_prime_checks,NULL,ctx,NULL)) 110 if (!BN_is_prime_ex(dh->p,BN_prime_checks,ctx,NULL))
110 *ret|=DH_CHECK_P_NOT_PRIME; 111 *ret|=DH_CHECK_P_NOT_PRIME;
111 else 112 else
112 { 113 {
113 if (!BN_rshift1(q,dh->p)) goto err; 114 if (!BN_rshift1(q,dh->p)) goto err;
114 if (!BN_is_prime(q,BN_prime_checks,NULL,ctx,NULL)) 115 if (!BN_is_prime_ex(q,BN_prime_checks,ctx,NULL))
115 *ret|=DH_CHECK_P_NOT_SAFE_PRIME; 116 *ret|=DH_CHECK_P_NOT_SAFE_PRIME;
116 } 117 }
117 ok=1; 118 ok=1;
@@ -121,5 +122,26 @@ err:
121 return(ok); 122 return(ok);
122 } 123 }
123 124
124#endif 125int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret)
126 {
127 int ok=0;
128 BIGNUM *q=NULL;
129
130 *ret=0;
131 q=BN_new();
132 if (q == NULL) goto err;
133 BN_set_word(q,1);
134 if (BN_cmp(pub_key,q) <= 0)
135 *ret|=DH_CHECK_PUBKEY_TOO_SMALL;
136 BN_copy(q,dh->p);
137 BN_sub_word(q,1);
138 if (BN_cmp(pub_key,q) >= 0)
139 *ret|=DH_CHECK_PUBKEY_TOO_LARGE;
140
141 ok = 1;
142err:
143 if (q != NULL) BN_free(q);
144 return(ok);
145 }
146
125#endif 147#endif
diff --git a/src/lib/libssl/src/fips/dh/fips_dh_gen.c b/src/lib/libssl/src/fips/dh/fips_dh_gen.c
index b569e3912d..d115f9d5d2 100644
--- a/src/lib/libssl/src/fips/dh/fips_dh_gen.c
+++ b/src/lib/libssl/src/fips/dh/fips_dh_gen.c
@@ -56,18 +56,28 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59/* NB: These functions have been upgraded - the previous prototypes are in
60 * dh_depr.c as wrappers to these ones.
61 * - Geoff
62 */
63
59#include <stdio.h> 64#include <stdio.h>
60#include <string.h>
61#include <openssl/err.h>
62#include <openssl/bn.h> 65#include <openssl/bn.h>
63#ifndef OPENSSL_NO_DH
64#include <openssl/dh.h> 66#include <openssl/dh.h>
65#endif 67#include <openssl/err.h>
66#include <openssl/fips.h> 68#include <openssl/fips.h>
67 69
68#ifndef OPENSSL_NO_DH
69#ifdef OPENSSL_FIPS 70#ifdef OPENSSL_FIPS
70 71
72static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb);
73
74int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, BN_GENCB *cb)
75 {
76 if(ret->meth->generate_params)
77 return ret->meth->generate_params(ret, prime_len, generator, cb);
78 return dh_builtin_genparams(ret, prime_len, generator, cb);
79 }
80
71/* We generate DH parameters as follows 81/* We generate DH parameters as follows
72 * find a prime q which is prime_len/2 bits long. 82 * find a prime q which is prime_len/2 bits long.
73 * p=(2*q)+1 or (p-1)/2 = q 83 * p=(2*q)+1 or (p-1)/2 = q
@@ -93,33 +103,38 @@
93 * It's just as OK (and in some sense better) to use a generator of the 103 * It's just as OK (and in some sense better) to use a generator of the
94 * order-q subgroup. 104 * order-q subgroup.
95 */ 105 */
96 106static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb)
97DH *DH_generate_parameters(int prime_len, int generator,
98 void (*callback)(int,int,void *), void *cb_arg)
99 { 107 {
100 BIGNUM *p=NULL,*t1,*t2; 108 BIGNUM *t1,*t2;
101 DH *ret=NULL;
102 int g,ok= -1; 109 int g,ok= -1;
103 BN_CTX *ctx=NULL; 110 BN_CTX *ctx=NULL;
104 111
105 if(FIPS_selftest_failed()) 112 if(FIPS_selftest_failed())
106 { 113 {
107 FIPSerr(FIPS_F_DH_GENERATE_PARAMETERS,FIPS_R_FIPS_SELFTEST_FAILED); 114 FIPSerr(FIPS_F_DH_BUILTIN_GENPARAMS,FIPS_R_FIPS_SELFTEST_FAILED);
108 return NULL; 115 return 0;
116 }
117
118 if (FIPS_mode() && (prime_len < OPENSSL_DH_FIPS_MIN_MODULUS_BITS))
119 {
120 DHerr(DH_F_DH_BUILTIN_GENPARAMS, DH_R_KEY_SIZE_TOO_SMALL);
121 goto err;
109 } 122 }
110 123
111 ret=DH_new();
112 if (ret == NULL) goto err;
113 ctx=BN_CTX_new(); 124 ctx=BN_CTX_new();
114 if (ctx == NULL) goto err; 125 if (ctx == NULL) goto err;
115 BN_CTX_start(ctx); 126 BN_CTX_start(ctx);
116 t1 = BN_CTX_get(ctx); 127 t1 = BN_CTX_get(ctx);
117 t2 = BN_CTX_get(ctx); 128 t2 = BN_CTX_get(ctx);
118 if (t1 == NULL || t2 == NULL) goto err; 129 if (t1 == NULL || t2 == NULL) goto err;
130
131 /* Make sure 'ret' has the necessary elements */
132 if(!ret->p && ((ret->p = BN_new()) == NULL)) goto err;
133 if(!ret->g && ((ret->g = BN_new()) == NULL)) goto err;
119 134
120 if (generator <= 1) 135 if (generator <= 1)
121 { 136 {
122 DHerr(DH_F_DH_GENERATE_PARAMETERS, DH_R_BAD_GENERATOR); 137 DHerr(DH_F_DH_BUILTIN_GENPARAMS, DH_R_BAD_GENERATOR);
123 goto err; 138 goto err;
124 } 139 }
125 if (generator == DH_GENERATOR_2) 140 if (generator == DH_GENERATOR_2)
@@ -155,17 +170,14 @@ DH *DH_generate_parameters(int prime_len, int generator,
155 g=generator; 170 g=generator;
156 } 171 }
157 172
158 p=BN_generate_prime(NULL,prime_len,1,t1,t2,callback,cb_arg); 173 if(!BN_generate_prime_ex(ret->p,prime_len,1,t1,t2,cb)) goto err;
159 if (p == NULL) goto err; 174 if(!BN_GENCB_call(cb, 3, 0)) goto err;
160 if (callback != NULL) callback(3,0,cb_arg);
161 ret->p=p;
162 ret->g=BN_new();
163 if (!BN_set_word(ret->g,g)) goto err; 175 if (!BN_set_word(ret->g,g)) goto err;
164 ok=1; 176 ok=1;
165err: 177err:
166 if (ok == -1) 178 if (ok == -1)
167 { 179 {
168 DHerr(DH_F_DH_GENERATE_PARAMETERS,ERR_R_BN_LIB); 180 DHerr(DH_F_DH_BUILTIN_GENPARAMS,ERR_R_BN_LIB);
169 ok=0; 181 ok=0;
170 } 182 }
171 183
@@ -174,13 +186,7 @@ err:
174 BN_CTX_end(ctx); 186 BN_CTX_end(ctx);
175 BN_CTX_free(ctx); 187 BN_CTX_free(ctx);
176 } 188 }
177 if (!ok && (ret != NULL)) 189 return ok;
178 {
179 DH_free(ret);
180 ret=NULL;
181 }
182 return(ret);
183 } 190 }
184 191
185#endif 192#endif
186#endif
diff --git a/src/lib/libssl/src/fips/dh/fips_dh_key.c b/src/lib/libssl/src/fips/dh/fips_dh_key.c
index 41e3a661c0..d20fa91d5e 100644
--- a/src/lib/libssl/src/fips/dh/fips_dh_key.c
+++ b/src/lib/libssl/src/fips/dh/fips_dh_key.c
@@ -64,6 +64,7 @@
64#endif 64#endif
65#ifndef OPENSSL_NO_DH 65#ifndef OPENSSL_NO_DH
66#include <openssl/dh.h> 66#include <openssl/dh.h>
67#include <openssl/fips.h>
67 68
68#ifdef OPENSSL_FIPS 69#ifdef OPENSSL_FIPS
69 70
@@ -86,7 +87,7 @@ int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
86 return dh->meth->compute_key(key, pub_key, dh); 87 return dh->meth->compute_key(key, pub_key, dh);
87 } 88 }
88 89
89static DH_METHOD dh_ossl = { 90static const DH_METHOD dh_ossl = {
90"OpenSSL DH Method", 91"OpenSSL DH Method",
91generate_key, 92generate_key,
92compute_key, 93compute_key,
@@ -108,9 +109,15 @@ static int generate_key(DH *dh)
108 int generate_new_key=0; 109 int generate_new_key=0;
109 unsigned l; 110 unsigned l;
110 BN_CTX *ctx; 111 BN_CTX *ctx;
111 BN_MONT_CTX *mont; 112 BN_MONT_CTX *mont=NULL;
112 BIGNUM *pub_key=NULL,*priv_key=NULL; 113 BIGNUM *pub_key=NULL,*priv_key=NULL;
113 114
115 if (FIPS_mode() && (BN_num_bits(dh->p) < OPENSSL_DH_FIPS_MIN_MODULUS_BITS))
116 {
117 DHerr(DH_F_GENERATE_KEY, DH_R_KEY_SIZE_TOO_SMALL);
118 return 0;
119 }
120
114 ctx = BN_CTX_new(); 121 ctx = BN_CTX_new();
115 if (ctx == NULL) goto err; 122 if (ctx == NULL) goto err;
116 123
@@ -131,28 +138,44 @@ static int generate_key(DH *dh)
131 else 138 else
132 pub_key=dh->pub_key; 139 pub_key=dh->pub_key;
133 140
134 if ((dh->method_mont_p == NULL) && (dh->flags & DH_FLAG_CACHE_MONT_P)) 141 if (dh->flags & DH_FLAG_CACHE_MONT_P)
135 { 142 {
136 if ((dh->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL) 143 mont = BN_MONT_CTX_set_locked(
137 if (!BN_MONT_CTX_set((BN_MONT_CTX *)dh->method_mont_p, 144 (BN_MONT_CTX **)&dh->method_mont_p,
138 dh->p,ctx)) goto err; 145 CRYPTO_LOCK_DH, dh->p, ctx);
146 if (!mont)
147 goto err;
139 } 148 }
140 mont=(BN_MONT_CTX *)dh->method_mont_p;
141 149
142 if (generate_new_key) 150 if (generate_new_key)
143 { 151 {
144 l = dh->length ? dh->length : BN_num_bits(dh->p)-1; /* secret exponent length */ 152 l = dh->length ? dh->length : BN_num_bits(dh->p)-1; /* secret exponent length */
145 if (!BN_rand(priv_key, l, 0, 0)) goto err; 153 if (!BN_rand(priv_key, l, 0, 0)) goto err;
146 } 154 }
147 if (!dh->meth->bn_mod_exp(dh, pub_key, dh->g, priv_key,dh->p,ctx,mont)) 155
148 goto err; 156 {
157 BIGNUM local_prk;
158 BIGNUM *prk;
159
160 if ((dh->flags & DH_FLAG_NO_EXP_CONSTTIME) == 0)
161 {
162 BN_init(&local_prk);
163 prk = &local_prk;
164 BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME);
165 }
166 else
167 prk = priv_key;
168
169 if (!dh->meth->bn_mod_exp(dh, pub_key, dh->g, prk, dh->p, ctx, mont))
170 goto err;
171 }
149 172
150 dh->pub_key=pub_key; 173 dh->pub_key=pub_key;
151 dh->priv_key=priv_key; 174 dh->priv_key=priv_key;
152 ok=1; 175 ok=1;
153err: 176err:
154 if (ok != 1) 177 if (ok != 1)
155 DHerr(DH_F_DH_GENERATE_KEY,ERR_R_BN_LIB); 178 DHerr(DH_F_GENERATE_KEY,ERR_R_BN_LIB);
156 179
157 if ((pub_key != NULL) && (dh->pub_key == NULL)) BN_free(pub_key); 180 if ((pub_key != NULL) && (dh->pub_key == NULL)) BN_free(pub_key);
158 if ((priv_key != NULL) && (dh->priv_key == NULL)) BN_free(priv_key); 181 if ((priv_key != NULL) && (dh->priv_key == NULL)) BN_free(priv_key);
@@ -163,7 +186,7 @@ err:
163static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) 186static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
164 { 187 {
165 BN_CTX *ctx; 188 BN_CTX *ctx;
166 BN_MONT_CTX *mont; 189 BN_MONT_CTX *mont=NULL;
167 BIGNUM *tmp; 190 BIGNUM *tmp;
168 int ret= -1; 191 int ret= -1;
169 192
@@ -171,23 +194,42 @@ static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
171 if (ctx == NULL) goto err; 194 if (ctx == NULL) goto err;
172 BN_CTX_start(ctx); 195 BN_CTX_start(ctx);
173 tmp = BN_CTX_get(ctx); 196 tmp = BN_CTX_get(ctx);
174 197
198 if (BN_num_bits(dh->p) > OPENSSL_DH_MAX_MODULUS_BITS)
199 {
200 DHerr(DH_F_COMPUTE_KEY,DH_R_MODULUS_TOO_LARGE);
201 goto err;
202 }
203
204 if (FIPS_mode() && (BN_num_bits(dh->p) < OPENSSL_DH_FIPS_MIN_MODULUS_BITS))
205 {
206 DHerr(DH_F_COMPUTE_KEY, DH_R_KEY_SIZE_TOO_SMALL);
207 goto err;
208 }
209
175 if (dh->priv_key == NULL) 210 if (dh->priv_key == NULL)
176 { 211 {
177 DHerr(DH_F_DH_COMPUTE_KEY,DH_R_NO_PRIVATE_VALUE); 212 DHerr(DH_F_COMPUTE_KEY,DH_R_NO_PRIVATE_VALUE);
178 goto err; 213 goto err;
179 } 214 }
180 if ((dh->method_mont_p == NULL) && (dh->flags & DH_FLAG_CACHE_MONT_P)) 215
216 if (dh->flags & DH_FLAG_CACHE_MONT_P)
181 { 217 {
182 if ((dh->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL) 218 mont = BN_MONT_CTX_set_locked(
183 if (!BN_MONT_CTX_set((BN_MONT_CTX *)dh->method_mont_p, 219 (BN_MONT_CTX **)&dh->method_mont_p,
184 dh->p,ctx)) goto err; 220 CRYPTO_LOCK_DH, dh->p, ctx);
221 if ((dh->flags & DH_FLAG_NO_EXP_CONSTTIME) == 0)
222 {
223 /* XXX */
224 BN_set_flags(dh->priv_key, BN_FLG_CONSTTIME);
225 }
226 if (!mont)
227 goto err;
185 } 228 }
186 229
187 mont=(BN_MONT_CTX *)dh->method_mont_p;
188 if (!dh->meth->bn_mod_exp(dh, tmp, pub_key, dh->priv_key,dh->p,ctx,mont)) 230 if (!dh->meth->bn_mod_exp(dh, tmp, pub_key, dh->priv_key,dh->p,ctx,mont))
189 { 231 {
190 DHerr(DH_F_DH_COMPUTE_KEY,ERR_R_BN_LIB); 232 DHerr(DH_F_COMPUTE_KEY,ERR_R_BN_LIB);
191 goto err; 233 goto err;
192 } 234 }
193 235
@@ -203,7 +245,10 @@ static int dh_bn_mod_exp(const DH *dh, BIGNUM *r,
203 const BIGNUM *m, BN_CTX *ctx, 245 const BIGNUM *m, BN_CTX *ctx,
204 BN_MONT_CTX *m_ctx) 246 BN_MONT_CTX *m_ctx)
205 { 247 {
206 if (a->top == 1) 248 /* If a is only one word long and constant time is false, use the faster
249 * exponenentiation function.
250 */
251 if (a->top == 1 && ((dh->flags & DH_FLAG_NO_EXP_CONSTTIME) != 0))
207 { 252 {
208 BN_ULONG A = a->d[0]; 253 BN_ULONG A = a->d[0];
209 return BN_mod_exp_mont_word(r,A,p,m,ctx,m_ctx); 254 return BN_mod_exp_mont_word(r,A,p,m,ctx,m_ctx);
@@ -215,6 +260,7 @@ static int dh_bn_mod_exp(const DH *dh, BIGNUM *r,
215 260
216static int dh_init(DH *dh) 261static int dh_init(DH *dh)
217 { 262 {
263 FIPS_selftest_check();
218 dh->flags |= DH_FLAG_CACHE_MONT_P; 264 dh->flags |= DH_FLAG_CACHE_MONT_P;
219 return(1); 265 return(1);
220 } 266 }
diff --git a/src/lib/libssl/src/fips/dh/fips_dh_lib.c b/src/lib/libssl/src/fips/dh/fips_dh_lib.c
new file mode 100644
index 0000000000..4a822cf192
--- /dev/null
+++ b/src/lib/libssl/src/fips/dh/fips_dh_lib.c
@@ -0,0 +1,95 @@
1/* fips_dh_lib.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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 <string.h>
60#include <openssl/bn.h>
61#include <openssl/dh.h>
62
63/* Minimal FIPS versions of FIPS_dh_new() and FIPS_dh_free(): to
64 * reduce external dependencies.
65 */
66
67DH *FIPS_dh_new(void)
68 {
69 DH *ret;
70 ret = OPENSSL_malloc(sizeof(DH));
71 if (!ret)
72 return NULL;
73 memset(ret, 0, sizeof(DH));
74 ret->meth = DH_OpenSSL();
75 if (ret->meth->init)
76 ret->meth->init(ret);
77 return ret;
78 }
79
80void FIPS_dh_free(DH *r)
81 {
82 if (!r)
83 return;
84 if (r->meth->finish)
85 r->meth->finish(r);
86 if (r->p != NULL) BN_clear_free(r->p);
87 if (r->g != NULL) BN_clear_free(r->g);
88 if (r->q != NULL) BN_clear_free(r->q);
89 if (r->j != NULL) BN_clear_free(r->j);
90 if (r->seed) OPENSSL_free(r->seed);
91 if (r->counter != NULL) BN_clear_free(r->counter);
92 if (r->pub_key != NULL) BN_clear_free(r->pub_key);
93 if (r->priv_key != NULL) BN_clear_free(r->priv_key);
94 OPENSSL_free(r);
95 }
diff --git a/src/lib/libssl/src/fips/dsa/Makefile b/src/lib/libssl/src/fips/dsa/Makefile
index 0cc5704ed1..251615e9ad 100644
--- a/src/lib/libssl/src/fips/dsa/Makefile
+++ b/src/lib/libssl/src/fips/dsa/Makefile
@@ -1,5 +1,5 @@
1# 1#
2# SSLeay/fips/dsa/Makefile 2# OpenSSL/fips/dsa/Makefile
3# 3#
4 4
5DIR= dsa 5DIR= dsa
@@ -18,12 +18,14 @@ AR= ar r
18CFLAGS= $(INCLUDES) $(CFLAG) 18CFLAGS= $(INCLUDES) $(CFLAG)
19 19
20GENERAL=Makefile 20GENERAL=Makefile
21TEST=fips_dsatest.c 21TEST=fips_dsatest.c fips_dssvs.c
22APPS= 22APPS=
23 23
24LIB=$(TOP)/libcrypto.a 24LIB=$(TOP)/libcrypto.a
25LIBSRC=fips_dsa_ossl.c fips_dsa_gen.c fips_dsa_selftest.c 25LIBSRC=fips_dsa_ossl.c fips_dsa_gen.c fips_dsa_selftest.c fips_dsa_key.c \
26LIBOBJ=fips_dsa_ossl.o fips_dsa_gen.o fips_dsa_selftest.o 26 fips_dsa_lib.c fips_dsa_sign.c
27LIBOBJ=fips_dsa_ossl.o fips_dsa_gen.o fips_dsa_selftest.o fips_dsa_key.o \
28 fips_dsa_lib.o fips_dsa_sign.o
27 29
28SRC= $(LIBSRC) 30SRC= $(LIBSRC)
29 31
@@ -35,15 +37,10 @@ ALL= $(GENERAL) $(SRC) $(HEADER)
35top: 37top:
36 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all) 38 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
37 39
38all: check lib 40all: lib
39 41
40lib: $(LIBOBJ) 42lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 43 @echo $(LIBOBJ) > lib
42 $(RANLIB) $(LIB) || echo Never mind.
43 @sleep 2; touch lib
44
45check:
46 TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
47 44
48files: 45files:
49 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 46 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -65,23 +62,16 @@ tags:
65 62
66tests: 63tests:
67 64
68top_fips_dssvs:
69 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) TARGET=fips_dssvs sub_target)
70
71fips_dssvs: fips_dssvs.o $(TOP)/libcrypto.a
72 $(CC) $(CFLAGS) -o fips_dssvs fips_dssvs.o $(PEX_LIBS) $(TOP)/libcrypto.a $(EX_LIBS)
73 TOP=$(TOP) $(TOP)/fips/openssl_fips_fingerprint $(TOP)/libcrypto.a fips_dssvs
74
75Q=../testvectors/dsa/req 65Q=../testvectors/dsa/req
76A=../testvectors/dsa/rsp 66A=../testvectors/dsa/rsp
77 67
78fips_test: top_fips_dssvs 68fips_test:
79 -rm -rf $A 69 -rm -rf $A
80 mkdir $A 70 mkdir $A
81 ./fips_dssvs pqg < $Q/PQGGen.req > $A/PQGGen.rsp 71 if [ -f $(Q)/PQGGen.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_dssvs pqg < $(Q)/PQGGen.req > $(A)/PQGGen.rsp; fi
82 ./fips_dssvs keypair < $Q/KeyPair.req > $A/KeyPair.rsp 72 if [ -f $(Q)/KeyPair.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_dssvs keypair < $(Q)/KeyPair.req > $(A)/KeyPair.rsp; fi
83 ./fips_dssvs siggen < $Q/SigGen.req > $A/SigGen.rsp 73 if [ -f $(Q)/SigGen.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_dssvs siggen < $(Q)/SigGen.req > $(A)/SigGen.rsp; fi
84 ./fips_dssvs sigver < $Q/SigVer.req > $A/SigVer.rsp 74 if [ -f $(Q)/SigVer.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_dssvs sigver < $Q/SigVer.req > $A/SigVer.rsp; fi
85 75
86lint: 76lint:
87 lint -DLINT $(INCLUDES) $(SRC)>fluff 77 lint -DLINT $(INCLUDES) $(SRC)>fluff
@@ -97,62 +87,105 @@ clean:
97 rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff 87 rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
98# DO NOT DELETE THIS LINE -- make depend depends on it. 88# DO NOT DELETE THIS LINE -- make depend depends on it.
99 89
100fips_dsa_gen.o: ../../include/openssl/aes.h ../../include/openssl/asn1.h 90fips_dsa_gen.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
101fips_dsa_gen.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h 91fips_dsa_gen.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
102fips_dsa_gen.o: ../../include/openssl/bn.h ../../include/openssl/cast.h
103fips_dsa_gen.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
104fips_dsa_gen.o: ../../include/openssl/des_old.h ../../include/openssl/dh.h
105fips_dsa_gen.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 92fips_dsa_gen.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
106fips_dsa_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h 93fips_dsa_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h
107fips_dsa_gen.o: ../../include/openssl/fips.h ../../include/openssl/idea.h 94fips_dsa_gen.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
108fips_dsa_gen.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h 95fips_dsa_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
109fips_dsa_gen.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
110fips_dsa_gen.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
111fips_dsa_gen.o: ../../include/openssl/objects.h
112fips_dsa_gen.o: ../../include/openssl/opensslconf.h 96fips_dsa_gen.o: ../../include/openssl/opensslconf.h
113fips_dsa_gen.o: ../../include/openssl/opensslv.h 97fips_dsa_gen.o: ../../include/openssl/opensslv.h
114fips_dsa_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h 98fips_dsa_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
115fips_dsa_gen.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h 99fips_dsa_gen.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
116fips_dsa_gen.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h 100fips_dsa_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
117fips_dsa_gen.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 101fips_dsa_gen.o: fips_dsa_gen.c
118fips_dsa_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 102fips_dsa_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
119fips_dsa_gen.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h 103fips_dsa_key.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
120fips_dsa_gen.o: ../../include/openssl/ui_compat.h fips_dsa_gen.c 104fips_dsa_key.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
105fips_dsa_key.o: ../../include/openssl/err.h ../../include/openssl/evp.h
106fips_dsa_key.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
107fips_dsa_key.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
108fips_dsa_key.o: ../../include/openssl/opensslconf.h
109fips_dsa_key.o: ../../include/openssl/opensslv.h
110fips_dsa_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
111fips_dsa_key.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
112fips_dsa_key.o: ../../include/openssl/symhacks.h ../fips_locl.h fips_dsa_key.c
113fips_dsa_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
114fips_dsa_lib.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
115fips_dsa_lib.o: ../../include/openssl/e_os2.h
116fips_dsa_lib.o: ../../include/openssl/opensslconf.h
117fips_dsa_lib.o: ../../include/openssl/opensslv.h
118fips_dsa_lib.o: ../../include/openssl/ossl_typ.h
119fips_dsa_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
120fips_dsa_lib.o: ../../include/openssl/symhacks.h fips_dsa_lib.c
121fips_dsa_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 121fips_dsa_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
122fips_dsa_ossl.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h 122fips_dsa_ossl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
123fips_dsa_ossl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h 123fips_dsa_ossl.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
124fips_dsa_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h 124fips_dsa_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
125fips_dsa_ossl.o: ../../include/openssl/err.h ../../include/openssl/fips.h 125fips_dsa_ossl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
126fips_dsa_ossl.o: ../../include/openssl/lhash.h 126fips_dsa_ossl.o: ../../include/openssl/engine.h ../../include/openssl/err.h
127fips_dsa_ossl.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
128fips_dsa_ossl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
129fips_dsa_ossl.o: ../../include/openssl/objects.h
127fips_dsa_ossl.o: ../../include/openssl/opensslconf.h 130fips_dsa_ossl.o: ../../include/openssl/opensslconf.h
128fips_dsa_ossl.o: ../../include/openssl/opensslv.h 131fips_dsa_ossl.o: ../../include/openssl/opensslv.h
129fips_dsa_ossl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h 132fips_dsa_ossl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
130fips_dsa_ossl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 133fips_dsa_ossl.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
131fips_dsa_ossl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 134fips_dsa_ossl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
132fips_dsa_ossl.o: ../../include/openssl/ui.h fips_dsa_ossl.c 135fips_dsa_ossl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
133fips_dsa_selftest.o: ../../include/openssl/bio.h ../../include/openssl/bn.h 136fips_dsa_ossl.o: ../../include/openssl/x509_vfy.h fips_dsa_ossl.c
134fips_dsa_selftest.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h 137fips_dsa_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
138fips_dsa_selftest.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
135fips_dsa_selftest.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 139fips_dsa_selftest.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
136fips_dsa_selftest.o: ../../include/openssl/err.h ../../include/openssl/fips.h 140fips_dsa_selftest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
137fips_dsa_selftest.o: ../../include/openssl/lhash.h 141fips_dsa_selftest.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
142fips_dsa_selftest.o: ../../include/openssl/obj_mac.h
143fips_dsa_selftest.o: ../../include/openssl/objects.h
138fips_dsa_selftest.o: ../../include/openssl/opensslconf.h 144fips_dsa_selftest.o: ../../include/openssl/opensslconf.h
139fips_dsa_selftest.o: ../../include/openssl/opensslv.h 145fips_dsa_selftest.o: ../../include/openssl/opensslv.h
140fips_dsa_selftest.o: ../../include/openssl/ossl_typ.h 146fips_dsa_selftest.o: ../../include/openssl/ossl_typ.h
141fips_dsa_selftest.o: ../../include/openssl/safestack.h 147fips_dsa_selftest.o: ../../include/openssl/safestack.h
142fips_dsa_selftest.o: ../../include/openssl/stack.h 148fips_dsa_selftest.o: ../../include/openssl/stack.h
143fips_dsa_selftest.o: ../../include/openssl/symhacks.h fips_dsa_selftest.c 149fips_dsa_selftest.o: ../../include/openssl/symhacks.h fips_dsa_selftest.c
150fips_dsa_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
151fips_dsa_sign.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
152fips_dsa_sign.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
153fips_dsa_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h
154fips_dsa_sign.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
155fips_dsa_sign.o: ../../include/openssl/obj_mac.h
156fips_dsa_sign.o: ../../include/openssl/objects.h
157fips_dsa_sign.o: ../../include/openssl/opensslconf.h
158fips_dsa_sign.o: ../../include/openssl/opensslv.h
159fips_dsa_sign.o: ../../include/openssl/ossl_typ.h
160fips_dsa_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
161fips_dsa_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
162fips_dsa_sign.o: fips_dsa_sign.c
144fips_dsatest.o: ../../e_os.h ../../include/openssl/asn1.h 163fips_dsatest.o: ../../e_os.h ../../include/openssl/asn1.h
145fips_dsatest.o: ../../include/openssl/bio.h ../../include/openssl/bn.h 164fips_dsatest.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
146fips_dsatest.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 165fips_dsatest.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
147fips_dsatest.o: ../../include/openssl/des_old.h ../../include/openssl/dh.h 166fips_dsatest.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
148fips_dsatest.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 167fips_dsatest.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
149fips_dsatest.o: ../../include/openssl/engine.h ../../include/openssl/err.h 168fips_dsatest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
169fips_dsatest.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
170fips_dsatest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
150fips_dsatest.o: ../../include/openssl/fips.h ../../include/openssl/fips_rand.h 171fips_dsatest.o: ../../include/openssl/fips.h ../../include/openssl/fips_rand.h
151fips_dsatest.o: ../../include/openssl/lhash.h 172fips_dsatest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
173fips_dsatest.o: ../../include/openssl/objects.h
152fips_dsatest.o: ../../include/openssl/opensslconf.h 174fips_dsatest.o: ../../include/openssl/opensslconf.h
153fips_dsatest.o: ../../include/openssl/opensslv.h 175fips_dsatest.o: ../../include/openssl/opensslv.h
154fips_dsatest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h 176fips_dsatest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
155fips_dsatest.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h 177fips_dsatest.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
156fips_dsatest.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 178fips_dsatest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
157fips_dsatest.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 179fips_dsatest.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
158fips_dsatest.o: fips_dsatest.c 180fips_dsatest.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h
181fips_dsatest.o: ../../include/openssl/x509_vfy.h ../fips_utl.h fips_dsatest.c
182fips_dssvs.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
183fips_dssvs.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
184fips_dssvs.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
185fips_dssvs.o: ../../include/openssl/err.h ../../include/openssl/evp.h
186fips_dssvs.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
187fips_dssvs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
188fips_dssvs.o: ../../include/openssl/opensslconf.h
189fips_dssvs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
190fips_dssvs.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
191fips_dssvs.o: ../../include/openssl/symhacks.h ../fips_utl.h fips_dssvs.c
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsa_gen.c b/src/lib/libssl/src/fips/dsa/fips_dsa_gen.c
index 21fa3d1783..0cecf34ab2 100644
--- a/src/lib/libssl/src/fips/dsa/fips_dsa_gen.c
+++ b/src/lib/libssl/src/fips/dsa/fips_dsa_gen.c
@@ -69,47 +69,40 @@
69#define HASH EVP_sha1() 69#define HASH EVP_sha1()
70#endif 70#endif
71 71
72#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_SHA is defined */
73
74#ifndef OPENSSL_NO_SHA
75
72#include <stdio.h> 76#include <stdio.h>
73#include <string.h>
74#include <time.h> 77#include <time.h>
75/*#include "cryptlib.h"*/ 78#include <string.h>
76#include <openssl/evp.h> 79#include <openssl/evp.h>
77#include <openssl/bn.h> 80#include <openssl/bn.h>
78#ifndef OPENSSL_NO_DSA
79#include <openssl/dsa.h> 81#include <openssl/dsa.h>
80#endif
81#ifndef OPENSSL_NO_RAND
82#include <openssl/rand.h> 82#include <openssl/rand.h>
83#endif
84#ifndef OPENSSL_NO_SHA
85#include <openssl/sha.h> 83#include <openssl/sha.h>
86#endif
87#include <openssl/fips.h>
88#include <openssl/err.h> 84#include <openssl/err.h>
89 85
90#ifndef OPENSSL_NO_DSA
91#ifdef OPENSSL_FIPS 86#ifdef OPENSSL_FIPS
92 87
93static int fips_check_dsa(DSA *dsa) 88static int dsa_builtin_paramgen(DSA *ret, int bits,
94 { 89 unsigned char *seed_in, int seed_len,
95 static const unsigned char str1[]="12345678901234567890"; 90 int *counter_ret, unsigned long *h_ret, BN_GENCB *cb);
96 unsigned char sig[256];
97 unsigned int siglen;
98 91
99 DSA_sign(0, str1, 20, sig, &siglen, dsa); 92int DSA_generate_parameters_ex(DSA *ret, int bits,
100 if(DSA_verify(0, str1, 20, sig, siglen, dsa) != 1) 93 unsigned char *seed_in, int seed_len,
94 int *counter_ret, unsigned long *h_ret, BN_GENCB *cb)
101 { 95 {
102 FIPSerr(FIPS_F_FIPS_CHECK_DSA,FIPS_R_PAIRWISE_TEST_FAILED); 96 if(ret->meth->dsa_paramgen)
103 return 0; 97 return ret->meth->dsa_paramgen(ret, bits, seed_in, seed_len,
98 counter_ret, h_ret, cb);
99 return dsa_builtin_paramgen(ret, bits, seed_in, seed_len,
100 counter_ret, h_ret, cb);
104 } 101 }
105 return 1; 102
106 } 103static int dsa_builtin_paramgen(DSA *ret, int bits,
107 104 unsigned char *seed_in, int seed_len,
108DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits, 105 int *counter_ret, unsigned long *h_ret, BN_GENCB *cb)
109 unsigned char *seed_in, FIPS_DSA_SIZE_T seed_len,
110 int *counter_ret, unsigned long *h_ret,
111 void (*callback)(int, int, void *),
112 void *cb_arg)
113 { 106 {
114 int ok=0; 107 int ok=0;
115 unsigned char seed[SHA_DIGEST_LENGTH]; 108 unsigned char seed[SHA_DIGEST_LENGTH];
@@ -121,47 +114,56 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
121 int k,n=0,i,b,m=0; 114 int k,n=0,i,b,m=0;
122 int counter=0; 115 int counter=0;
123 int r=0; 116 int r=0;
124 BN_CTX *ctx=NULL,*ctx2=NULL,*ctx3=NULL; 117 BN_CTX *ctx=NULL;
125 unsigned int h=2; 118 unsigned int h=2;
126 DSA *ret=NULL;
127 unsigned char *seed_out=seed_in;
128 119
129 if(FIPS_selftest_failed()) 120 if(FIPS_selftest_failed())
130 { 121 {
131 FIPSerr(FIPS_F_DSA_GENERATE_PARAMETERS, 122 FIPSerr(FIPS_F_DSA_BUILTIN_PARAMGEN,
132 FIPS_R_FIPS_SELFTEST_FAILED); 123 FIPS_R_FIPS_SELFTEST_FAILED);
133 goto err; 124 goto err;
134 } 125 }
135 126
127 if (FIPS_mode() && (bits < OPENSSL_DSA_FIPS_MIN_MODULUS_BITS))
128 {
129 DSAerr(DSA_F_DSA_BUILTIN_PARAMGEN, DSA_R_KEY_SIZE_TOO_SMALL);
130 goto err;
131 }
132
136 if (bits < 512) bits=512; 133 if (bits < 512) bits=512;
137 bits=(bits+63)/64*64; 134 bits=(bits+63)/64*64;
138 135
139 if (seed_len < 20) 136 /* NB: seed_len == 0 is special case: copy generated seed to
137 * seed_in if it is not NULL.
138 */
139 if (seed_len && (seed_len < 20))
140 seed_in = NULL; /* seed buffer too small -- ignore */ 140 seed_in = NULL; /* seed buffer too small -- ignore */
141 if (seed_len > 20) 141 if (seed_len > 20)
142 seed_len = 20; /* App. 2.2 of FIPS PUB 186 allows larger SEED, 142 seed_len = 20; /* App. 2.2 of FIPS PUB 186 allows larger SEED,
143 * but our internal buffers are restricted to 160 bits*/ 143 * but our internal buffers are restricted to 160 bits*/
144 if ((seed_in != NULL) && (seed_len == 20)) 144 if ((seed_in != NULL) && (seed_len == 20))
145 {
145 memcpy(seed,seed_in,seed_len); 146 memcpy(seed,seed_in,seed_len);
147 /* set seed_in to NULL to avoid it being copied back */
148 seed_in = NULL;
149 }
146 150
147 if ((ctx=BN_CTX_new()) == NULL) goto err; 151 if ((ctx=BN_CTX_new()) == NULL) goto err;
148 if ((ctx2=BN_CTX_new()) == NULL) goto err;
149 if ((ctx3=BN_CTX_new()) == NULL) goto err;
150 if ((ret=DSA_new()) == NULL) goto err;
151 152
152 if ((mont=BN_MONT_CTX_new()) == NULL) goto err; 153 if ((mont=BN_MONT_CTX_new()) == NULL) goto err;
153 154
154 BN_CTX_start(ctx2); 155 BN_CTX_start(ctx);
155 r0 = BN_CTX_get(ctx2); 156 r0 = BN_CTX_get(ctx);
156 g = BN_CTX_get(ctx2); 157 g = BN_CTX_get(ctx);
157 W = BN_CTX_get(ctx2); 158 W = BN_CTX_get(ctx);
158 q = BN_CTX_get(ctx2); 159 q = BN_CTX_get(ctx);
159 X = BN_CTX_get(ctx2); 160 X = BN_CTX_get(ctx);
160 c = BN_CTX_get(ctx2); 161 c = BN_CTX_get(ctx);
161 p = BN_CTX_get(ctx2); 162 p = BN_CTX_get(ctx);
162 test = BN_CTX_get(ctx2); 163 test = BN_CTX_get(ctx);
163 164
164 BN_lshift(test,BN_value_one(),bits-1); 165 if (!BN_lshift(test,BN_value_one(),bits-1))
166 goto err;
165 167
166 for (;;) 168 for (;;)
167 { 169 {
@@ -170,12 +172,12 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
170 int seed_is_random; 172 int seed_is_random;
171 173
172 /* step 1 */ 174 /* step 1 */
173 if (callback != NULL) callback(0,m++,cb_arg); 175 if(!BN_GENCB_call(cb, 0, m++))
176 goto err;
174 177
175 if (!seed_len) 178 if (!seed_len)
176 { 179 {
177 if(RAND_pseudo_bytes(seed,SHA_DIGEST_LENGTH) < 0) 180 RAND_pseudo_bytes(seed,SHA_DIGEST_LENGTH);
178 goto err;
179 seed_is_random = 1; 181 seed_is_random = 1;
180 } 182 }
181 else 183 else
@@ -204,7 +206,8 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
204 if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,q)) goto err; 206 if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,q)) goto err;
205 207
206 /* step 4 */ 208 /* step 4 */
207 r = BN_is_prime_fasttest(q, DSS_prime_checks, callback, ctx3, cb_arg, seed_is_random); 209 r = BN_is_prime_fasttest_ex(q, DSS_prime_checks, ctx,
210 seed_is_random, cb);
208 if (r > 0) 211 if (r > 0)
209 break; 212 break;
210 if (r != 0) 213 if (r != 0)
@@ -214,8 +217,8 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
214 /* step 5 */ 217 /* step 5 */
215 } 218 }
216 219
217 if (callback != NULL) callback(2,0,cb_arg); 220 if(!BN_GENCB_call(cb, 2, 0)) goto err;
218 if (callback != NULL) callback(3,0,cb_arg); 221 if(!BN_GENCB_call(cb, 3, 0)) goto err;
219 222
220 /* step 6 */ 223 /* step 6 */
221 counter=0; 224 counter=0;
@@ -226,8 +229,8 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
226 229
227 for (;;) 230 for (;;)
228 { 231 {
229 if (callback != NULL && counter != 0) 232 if ((counter != 0) && !BN_GENCB_call(cb, 0, counter))
230 callback(0,counter,cb_arg); 233 goto err;
231 234
232 /* step 7 */ 235 /* step 7 */
233 BN_zero(W); 236 BN_zero(W);
@@ -246,26 +249,27 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
246 /* step 8 */ 249 /* step 8 */
247 if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0)) 250 if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0))
248 goto err; 251 goto err;
249 BN_lshift(r0,r0,160*k); 252 if (!BN_lshift(r0,r0,160*k)) goto err;
250 BN_add(W,W,r0); 253 if (!BN_add(W,W,r0)) goto err;
251 } 254 }
252 255
253 /* more of step 8 */ 256 /* more of step 8 */
254 BN_mask_bits(W,bits-1); 257 if (!BN_mask_bits(W,bits-1)) goto err;
255 BN_copy(X,W); /* this should be ok */ 258 if (!BN_copy(X,W)) goto err;
256 BN_add(X,X,test); /* this should be ok */ 259 if (!BN_add(X,X,test)) goto err;
257 260
258 /* step 9 */ 261 /* step 9 */
259 BN_lshift1(r0,q); 262 if (!BN_lshift1(r0,q)) goto err;
260 BN_mod(c,X,r0,ctx); 263 if (!BN_mod(c,X,r0,ctx)) goto err;
261 BN_sub(r0,c,BN_value_one()); 264 if (!BN_sub(r0,c,BN_value_one())) goto err;
262 BN_sub(p,X,r0); 265 if (!BN_sub(p,X,r0)) goto err;
263 266
264 /* step 10 */ 267 /* step 10 */
265 if (BN_cmp(p,test) >= 0) 268 if (BN_cmp(p,test) >= 0)
266 { 269 {
267 /* step 11 */ 270 /* step 11 */
268 r = BN_is_prime_fasttest(p, DSS_prime_checks, callback, ctx3, cb_arg, 1); 271 r = BN_is_prime_fasttest_ex(p, DSS_prime_checks,
272 ctx, 1, cb);
269 if (r > 0) 273 if (r > 0)
270 goto end; /* found it */ 274 goto end; /* found it */
271 if (r != 0) 275 if (r != 0)
@@ -281,94 +285,55 @@ DSA *DSA_generate_parameters(FIPS_DSA_SIZE_T bits,
281 } 285 }
282 } 286 }
283end: 287end:
284 if (callback != NULL) callback(2,1,cb_arg); 288 if(!BN_GENCB_call(cb, 2, 1))
289 goto err;
285 290
286 /* We now need to generate g */ 291 /* We now need to generate g */
287 /* Set r0=(p-1)/q */ 292 /* Set r0=(p-1)/q */
288 BN_sub(test,p,BN_value_one()); 293 if (!BN_sub(test,p,BN_value_one())) goto err;
289 BN_div(r0,NULL,test,q,ctx); 294 if (!BN_div(r0,NULL,test,q,ctx)) goto err;
290 295
291 BN_set_word(test,h); 296 if (!BN_set_word(test,h)) goto err;
292 BN_MONT_CTX_set(mont,p,ctx); 297 if (!BN_MONT_CTX_set(mont,p,ctx)) goto err;
293 298
294 for (;;) 299 for (;;)
295 { 300 {
296 /* g=test^r0%p */ 301 /* g=test^r0%p */
297 BN_mod_exp_mont(g,test,r0,p,ctx,mont); 302 if (!BN_mod_exp_mont(g,test,r0,p,ctx,mont)) goto err;
298 if (!BN_is_one(g)) break; 303 if (!BN_is_one(g)) break;
299 BN_add(test,test,BN_value_one()); 304 if (!BN_add(test,test,BN_value_one())) goto err;
300 h++; 305 h++;
301 } 306 }
302 307
303 if (callback != NULL) callback(3,1,cb_arg); 308 if(!BN_GENCB_call(cb, 3, 1))
309 goto err;
304 310
305 ok=1; 311 ok=1;
306err: 312err:
307 if (!ok) 313 if (ok)
308 {
309 if (ret != NULL) DSA_free(ret);
310 }
311 else
312 { 314 {
315 if(ret->p) BN_free(ret->p);
316 if(ret->q) BN_free(ret->q);
317 if(ret->g) BN_free(ret->g);
313 ret->p=BN_dup(p); 318 ret->p=BN_dup(p);
314 ret->q=BN_dup(q); 319 ret->q=BN_dup(q);
315 ret->g=BN_dup(g); 320 ret->g=BN_dup(g);
316 if(seed_out != NULL) memcpy(seed_out,seed,20); 321 if (ret->p == NULL || ret->q == NULL || ret->g == NULL)
322 {
323 ok=0;
324 goto err;
325 }
326 if (seed_in != NULL) memcpy(seed_in,seed,20);
317 if (counter_ret != NULL) *counter_ret=counter; 327 if (counter_ret != NULL) *counter_ret=counter;
318 if (h_ret != NULL) *h_ret=h; 328 if (h_ret != NULL) *h_ret=h;
319 } 329 }
320 if (ctx != NULL) BN_CTX_free(ctx); 330 if(ctx)
321 if (ctx2 != NULL)
322 { 331 {
323 BN_CTX_end(ctx2); 332 BN_CTX_end(ctx);
324 BN_CTX_free(ctx2); 333 BN_CTX_free(ctx);
325 } 334 }
326 if (ctx3 != NULL) BN_CTX_free(ctx3);
327 if (mont != NULL) BN_MONT_CTX_free(mont); 335 if (mont != NULL) BN_MONT_CTX_free(mont);
328 return(ok?ret:NULL); 336 return ok;
329 }
330
331int DSA_generate_key(DSA *dsa)
332 {
333 int ok=0;
334 BN_CTX *ctx=NULL;
335 BIGNUM *pub_key=NULL,*priv_key=NULL;
336
337 if ((ctx=BN_CTX_new()) == NULL) goto err;
338
339 if (dsa->priv_key == NULL)
340 {
341 if ((priv_key=BN_new()) == NULL) goto err;
342 }
343 else
344 priv_key=dsa->priv_key;
345
346 do
347 if (!BN_rand_range(priv_key,dsa->q)) goto err;
348 while (BN_is_zero(priv_key));
349
350 if (dsa->pub_key == NULL)
351 {
352 if ((pub_key=BN_new()) == NULL) goto err;
353 }
354 else
355 pub_key=dsa->pub_key;
356
357 if (!BN_mod_exp(pub_key,dsa->g,priv_key,dsa->p,ctx)) goto err;
358
359 dsa->priv_key=priv_key;
360 dsa->pub_key=pub_key;
361
362 if(!fips_check_dsa(dsa))
363 goto err;
364
365 ok=1;
366
367err:
368 if ((pub_key != NULL) && (dsa->pub_key == NULL)) BN_free(pub_key);
369 if ((priv_key != NULL) && (dsa->priv_key == NULL)) BN_free(priv_key);
370 if (ctx != NULL) BN_CTX_free(ctx);
371 return(ok);
372 } 337 }
373#endif 338#endif
374#endif 339#endif
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsa_key.c b/src/lib/libssl/src/fips/dsa/fips_dsa_key.c
new file mode 100644
index 0000000000..b5f8cfa1d0
--- /dev/null
+++ b/src/lib/libssl/src/fips/dsa/fips_dsa_key.c
@@ -0,0 +1,169 @@
1/* crypto/dsa/dsa_key.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 <time.h>
61#ifndef OPENSSL_NO_SHA
62#include <openssl/bn.h>
63#include <openssl/dsa.h>
64#include <openssl/rand.h>
65#include <openssl/err.h>
66#include <openssl/evp.h>
67#include <openssl/fips.h>
68#include "fips_locl.h"
69
70#ifdef OPENSSL_FIPS
71
72static int fips_dsa_pairwise_fail = 0;
73
74void FIPS_corrupt_dsa_keygen(void)
75 {
76 fips_dsa_pairwise_fail = 1;
77 }
78
79static int dsa_builtin_keygen(DSA *dsa);
80
81int fips_check_dsa(DSA *dsa)
82 {
83 EVP_PKEY pk;
84 unsigned char tbs[] = "DSA Pairwise Check Data";
85 pk.type = EVP_PKEY_DSA;
86 pk.pkey.dsa = dsa;
87
88 if (!fips_pkey_signature_test(&pk, tbs, -1,
89 NULL, 0, EVP_dss1(), 0, NULL))
90 {
91 FIPSerr(FIPS_F_FIPS_CHECK_DSA,FIPS_R_PAIRWISE_TEST_FAILED);
92 fips_set_selftest_fail();
93 return 0;
94 }
95 return 1;
96 }
97
98int DSA_generate_key(DSA *dsa)
99 {
100 if(dsa->meth->dsa_keygen)
101 return dsa->meth->dsa_keygen(dsa);
102 return dsa_builtin_keygen(dsa);
103 }
104
105static int dsa_builtin_keygen(DSA *dsa)
106 {
107 int ok=0;
108 BN_CTX *ctx=NULL;
109 BIGNUM *pub_key=NULL,*priv_key=NULL;
110
111 if (FIPS_mode() && (BN_num_bits(dsa->p) < OPENSSL_DSA_FIPS_MIN_MODULUS_BITS))
112 {
113 DSAerr(DSA_F_DSA_BUILTIN_KEYGEN, DSA_R_KEY_SIZE_TOO_SMALL);
114 goto err;
115 }
116
117 if ((ctx=BN_CTX_new()) == NULL) goto err;
118
119 if (dsa->priv_key == NULL)
120 {
121 if ((priv_key=BN_new()) == NULL) goto err;
122 }
123 else
124 priv_key=dsa->priv_key;
125
126 do
127 if (!BN_rand_range(priv_key,dsa->q)) goto err;
128 while (BN_is_zero(priv_key));
129
130 if (dsa->pub_key == NULL)
131 {
132 if ((pub_key=BN_new()) == NULL) goto err;
133 }
134 else
135 pub_key=dsa->pub_key;
136
137 {
138 BIGNUM local_prk;
139 BIGNUM *prk;
140
141 if ((dsa->flags & DSA_FLAG_NO_EXP_CONSTTIME) == 0)
142 {
143 BN_init(&local_prk);
144 prk = &local_prk;
145 BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME);
146 }
147 else
148 prk = priv_key;
149
150 if (!BN_mod_exp(pub_key,dsa->g,prk,dsa->p,ctx)) goto err;
151 }
152
153 dsa->priv_key=priv_key;
154 dsa->pub_key=pub_key;
155 if (fips_dsa_pairwise_fail)
156 BN_add_word(dsa->pub_key, 1);
157 if(!fips_check_dsa(dsa))
158 goto err;
159 ok=1;
160
161err:
162 if ((pub_key != NULL) && (dsa->pub_key == NULL)) BN_free(pub_key);
163 if ((priv_key != NULL) && (dsa->priv_key == NULL)) BN_free(priv_key);
164 if (ctx != NULL) BN_CTX_free(ctx);
165 return(ok);
166 }
167#endif
168
169#endif
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsa_lib.c b/src/lib/libssl/src/fips/dsa/fips_dsa_lib.c
new file mode 100644
index 0000000000..2545966d2a
--- /dev/null
+++ b/src/lib/libssl/src/fips/dsa/fips_dsa_lib.c
@@ -0,0 +1,95 @@
1/* fips_dsa_lib.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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 <string.h>
60#include <openssl/dsa.h>
61#include <openssl/bn.h>
62
63/* Minimal FIPS versions of FIPS_dsa_new() and FIPS_dsa_free: to
64 * reduce external dependencies.
65 */
66
67DSA *FIPS_dsa_new(void)
68 {
69 DSA *ret;
70 ret = OPENSSL_malloc(sizeof(DSA));
71 if (!ret)
72 return NULL;
73 memset(ret, 0, sizeof(DSA));
74 ret->meth = DSA_OpenSSL();
75 if (ret->meth->init)
76 ret->meth->init(ret);
77 return ret;
78 }
79
80void FIPS_dsa_free(DSA *r)
81 {
82 if (!r)
83 return;
84 if (r->meth->finish)
85 r->meth->finish(r);
86 if (r->p != NULL) BN_clear_free(r->p);
87 if (r->q != NULL) BN_clear_free(r->q);
88 if (r->g != NULL) BN_clear_free(r->g);
89 if (r->pub_key != NULL) BN_clear_free(r->pub_key);
90 if (r->priv_key != NULL) BN_clear_free(r->priv_key);
91 if (r->kinv != NULL) BN_clear_free(r->kinv);
92 if (r->r != NULL) BN_clear_free(r->r);
93 OPENSSL_free(r);
94 }
95
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsa_ossl.c b/src/lib/libssl/src/fips/dsa/fips_dsa_ossl.c
index 0ae5eb4b9e..50a6c13318 100644
--- a/src/lib/libssl/src/fips/dsa/fips_dsa_ossl.c
+++ b/src/lib/libssl/src/fips/dsa/fips_dsa_ossl.c
@@ -63,6 +63,7 @@
63#include <openssl/dsa.h> 63#include <openssl/dsa.h>
64#include <openssl/rand.h> 64#include <openssl/rand.h>
65#include <openssl/asn1.h> 65#include <openssl/asn1.h>
66#include <openssl/err.h>
66#ifndef OPENSSL_NO_ENGINE 67#ifndef OPENSSL_NO_ENGINE
67#include <openssl/engine.h> 68#include <openssl/engine.h>
68#endif 69#endif
@@ -83,7 +84,7 @@ static int dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
83 const BIGNUM *m, BN_CTX *ctx, 84 const BIGNUM *m, BN_CTX *ctx,
84 BN_MONT_CTX *m_ctx); 85 BN_MONT_CTX *m_ctx);
85 86
86static DSA_METHOD openssl_dsa_meth = { 87static const DSA_METHOD openssl_dsa_meth = {
87"OpenSSL FIPS DSA method", 88"OpenSSL FIPS DSA method",
88dsa_do_sign, 89dsa_do_sign,
89dsa_sign_setup, 90dsa_sign_setup,
@@ -92,10 +93,10 @@ dsa_mod_exp,
92dsa_bn_mod_exp, 93dsa_bn_mod_exp,
93dsa_init, 94dsa_init,
94dsa_finish, 95dsa_finish,
950, 96DSA_FLAG_FIPS_METHOD,
96NULL 97NULL
97}; 98};
98 99#if 0
99int FIPS_dsa_check(struct dsa_st *dsa) 100int FIPS_dsa_check(struct dsa_st *dsa)
100 { 101 {
101 if(dsa->meth != &openssl_dsa_meth || dsa->meth->dsa_do_sign != dsa_do_sign 102 if(dsa->meth != &openssl_dsa_meth || dsa->meth->dsa_do_sign != dsa_do_sign
@@ -110,6 +111,7 @@ int FIPS_dsa_check(struct dsa_st *dsa)
110 } 111 }
111 return 1; 112 return 1;
112 } 113 }
114#endif
113 115
114const DSA_METHOD *DSA_OpenSSL(void) 116const DSA_METHOD *DSA_OpenSSL(void)
115{ 117{
@@ -131,6 +133,12 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, FIPS_DSA_SIZE_T dlen, DSA
131 return NULL; 133 return NULL;
132 } 134 }
133 135
136 if (FIPS_mode() && (BN_num_bits(dsa->p) < OPENSSL_DSA_FIPS_MIN_MODULUS_BITS))
137 {
138 DSAerr(DSA_F_DSA_DO_SIGN, DSA_R_KEY_SIZE_TOO_SMALL);
139 return NULL;
140 }
141
134 BN_init(&m); 142 BN_init(&m);
135 BN_init(&xr); 143 BN_init(&xr);
136 144
@@ -153,17 +161,7 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, FIPS_DSA_SIZE_T dlen, DSA
153 ctx=BN_CTX_new(); 161 ctx=BN_CTX_new();
154 if (ctx == NULL) goto err; 162 if (ctx == NULL) goto err;
155 163
156 if ((dsa->kinv == NULL) || (dsa->r == NULL)) 164 if (!dsa->meth->dsa_sign_setup(dsa,ctx,&kinv,&r)) goto err;
157 {
158 if (!DSA_sign_setup(dsa,ctx,&kinv,&r)) goto err;
159 }
160 else
161 {
162 kinv=dsa->kinv;
163 dsa->kinv=NULL;
164 r=dsa->r;
165 dsa->r=NULL;
166 }
167 165
168 if (BN_bin2bn(dgst,dlen,&m) == NULL) goto err; 166 if (BN_bin2bn(dgst,dlen,&m) == NULL) goto err;
169 167
@@ -174,7 +172,7 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, FIPS_DSA_SIZE_T dlen, DSA
174 BN_sub(s,s,dsa->q); 172 BN_sub(s,s,dsa->q);
175 if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err; 173 if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err;
176 174
177 ret=DSA_SIG_new(); 175 ret= DSA_SIG_new();
178 if (ret == NULL) goto err; 176 if (ret == NULL) goto err;
179 ret->r = r; 177 ret->r = r;
180 ret->s = s; 178 ret->s = s;
@@ -197,7 +195,7 @@ err:
197static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) 195static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
198 { 196 {
199 BN_CTX *ctx; 197 BN_CTX *ctx;
200 BIGNUM k,*kinv=NULL,*r=NULL; 198 BIGNUM k,kq,*K,*kinv=NULL,*r=NULL;
201 int ret=0; 199 int ret=0;
202 200
203 if (!dsa->p || !dsa->q || !dsa->g) 201 if (!dsa->p || !dsa->q || !dsa->g)
@@ -207,6 +205,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
207 } 205 }
208 206
209 BN_init(&k); 207 BN_init(&k);
208 BN_init(&kq);
210 209
211 if (ctx_in == NULL) 210 if (ctx_in == NULL)
212 { 211 {
@@ -216,22 +215,49 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
216 ctx=ctx_in; 215 ctx=ctx_in;
217 216
218 if ((r=BN_new()) == NULL) goto err; 217 if ((r=BN_new()) == NULL) goto err;
219 kinv=NULL;
220 218
221 /* Get random k */ 219 /* Get random k */
222 do 220 do
223 if (!BN_rand_range(&k, dsa->q)) goto err; 221 if (!BN_rand_range(&k, dsa->q)) goto err;
224 while (BN_is_zero(&k)); 222 while (BN_is_zero(&k));
223 if ((dsa->flags & DSA_FLAG_NO_EXP_CONSTTIME) == 0)
224 {
225 BN_set_flags(&k, BN_FLG_CONSTTIME);
226 }
225 227
226 if ((dsa->method_mont_p == NULL) && (dsa->flags & DSA_FLAG_CACHE_MONT_P)) 228 if (dsa->flags & DSA_FLAG_CACHE_MONT_P)
227 { 229 {
228 if ((dsa->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL) 230 if (!BN_MONT_CTX_set_locked((BN_MONT_CTX **)&dsa->method_mont_p,
229 if (!BN_MONT_CTX_set((BN_MONT_CTX *)dsa->method_mont_p, 231 CRYPTO_LOCK_DSA,
230 dsa->p,ctx)) goto err; 232 dsa->p, ctx))
233 goto err;
231 } 234 }
232 235
233 /* Compute r = (g^k mod p) mod q */ 236 /* Compute r = (g^k mod p) mod q */
234 if (!dsa->meth->bn_mod_exp(dsa, r,dsa->g,&k,dsa->p,ctx, 237
238 if ((dsa->flags & DSA_FLAG_NO_EXP_CONSTTIME) == 0)
239 {
240 if (!BN_copy(&kq, &k)) goto err;
241
242 /* We do not want timing information to leak the length of k,
243 * so we compute g^k using an equivalent exponent of fixed length.
244 *
245 * (This is a kludge that we need because the BN_mod_exp_mont()
246 * does not let us specify the desired timing behaviour.) */
247
248 if (!BN_add(&kq, &kq, dsa->q)) goto err;
249 if (BN_num_bits(&kq) <= BN_num_bits(dsa->q))
250 {
251 if (!BN_add(&kq, &kq, dsa->q)) goto err;
252 }
253
254 K = &kq;
255 }
256 else
257 {
258 K = &k;
259 }
260 if (!dsa->meth->bn_mod_exp(dsa, r,dsa->g,K,dsa->p,ctx,
235 (BN_MONT_CTX *)dsa->method_mont_p)) goto err; 261 (BN_MONT_CTX *)dsa->method_mont_p)) goto err;
236 if (!BN_mod(r,r,dsa->q,ctx)) goto err; 262 if (!BN_mod(r,r,dsa->q,ctx)) goto err;
237 263
@@ -254,6 +280,7 @@ err:
254 if (ctx_in == NULL) BN_CTX_free(ctx); 280 if (ctx_in == NULL) BN_CTX_free(ctx);
255 if (kinv != NULL) BN_clear_free(kinv); 281 if (kinv != NULL) BN_clear_free(kinv);
256 BN_clear_free(&k); 282 BN_clear_free(&k);
283 BN_clear_free(&kq);
257 return(ret); 284 return(ret);
258 } 285 }
259 286
@@ -277,6 +304,24 @@ static int dsa_do_verify(const unsigned char *dgst, FIPS_DSA_SIZE_T dgst_len, DS
277 return -1; 304 return -1;
278 } 305 }
279 306
307 if (BN_num_bits(dsa->q) != 160)
308 {
309 DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_BAD_Q_VALUE);
310 return -1;
311 }
312
313 if (BN_num_bits(dsa->p) > OPENSSL_DSA_MAX_MODULUS_BITS)
314 {
315 DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_MODULUS_TOO_LARGE);
316 return -1;
317 }
318
319 if (FIPS_mode() && (BN_num_bits(dsa->p) < OPENSSL_DSA_FIPS_MIN_MODULUS_BITS))
320 {
321 DSAerr(DSA_F_DSA_DO_VERIFY, DSA_R_KEY_SIZE_TOO_SMALL);
322 return -1;
323 }
324
280 BN_init(&u1); 325 BN_init(&u1);
281 BN_init(&u2); 326 BN_init(&u2);
282 BN_init(&t1); 327 BN_init(&t1);
@@ -307,13 +352,15 @@ static int dsa_do_verify(const unsigned char *dgst, FIPS_DSA_SIZE_T dgst_len, DS
307 /* u2 = r * w mod q */ 352 /* u2 = r * w mod q */
308 if (!BN_mod_mul(&u2,sig->r,&u2,dsa->q,ctx)) goto err; 353 if (!BN_mod_mul(&u2,sig->r,&u2,dsa->q,ctx)) goto err;
309 354
310 if ((dsa->method_mont_p == NULL) && (dsa->flags & DSA_FLAG_CACHE_MONT_P)) 355
356 if (dsa->flags & DSA_FLAG_CACHE_MONT_P)
311 { 357 {
312 if ((dsa->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL) 358 mont = BN_MONT_CTX_set_locked(
313 if (!BN_MONT_CTX_set((BN_MONT_CTX *)dsa->method_mont_p, 359 (BN_MONT_CTX **)&dsa->method_mont_p,
314 dsa->p,ctx)) goto err; 360 CRYPTO_LOCK_DSA, dsa->p, ctx);
361 if (!mont)
362 goto err;
315 } 363 }
316 mont=(BN_MONT_CTX *)dsa->method_mont_p;
317 364
318#if 0 365#if 0
319 { 366 {
@@ -355,6 +402,7 @@ static int dsa_do_verify(const unsigned char *dgst, FIPS_DSA_SIZE_T dgst_len, DS
355 402
356static int dsa_init(DSA *dsa) 403static int dsa_init(DSA *dsa)
357{ 404{
405 FIPS_selftest_check();
358 dsa->flags|=DSA_FLAG_CACHE_MONT_P; 406 dsa->flags|=DSA_FLAG_CACHE_MONT_P;
359 return(1); 407 return(1);
360} 408}
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsa_selftest.c b/src/lib/libssl/src/fips/dsa/fips_dsa_selftest.c
index 2c88f0af44..6880760a77 100644
--- a/src/lib/libssl/src/fips/dsa/fips_dsa_selftest.c
+++ b/src/lib/libssl/src/fips/dsa/fips_dsa_selftest.c
@@ -61,42 +61,49 @@
61#include <openssl/dsa.h> 61#include <openssl/dsa.h>
62#include <openssl/fips.h> 62#include <openssl/fips.h>
63#include <openssl/err.h> 63#include <openssl/err.h>
64#include <openssl/evp.h>
65#include <openssl/bn.h>
64 66
65#ifdef OPENSSL_FIPS 67#ifdef OPENSSL_FIPS
66 68
67/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to 69/* seed, out_p, out_q, out_g are taken the NIST test vectors */
68 * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */ 70
69static unsigned char seed[20]={ 71static unsigned char seed[20] = {
70 0xd5,0x01,0x4e,0x4b,0x60,0xef,0x2b,0xa8,0xb6,0x21,0x1b,0x40, 72 0x77, 0x8f, 0x40, 0x74, 0x6f, 0x66, 0xbe, 0x33, 0xce, 0xbe, 0x99, 0x34,
71 0x62,0xba,0x32,0x24,0xe0,0x42,0x7d,0xd3, 73 0x4c, 0xfc, 0xf3, 0x28, 0xaa, 0x70, 0x2d, 0x3a
72 }; 74 };
73 75
74static unsigned char out_p[]={ 76static unsigned char out_p[] = {
75 0x8d,0xf2,0xa4,0x94,0x49,0x22,0x76,0xaa, 77 0xf7, 0x7c, 0x1b, 0x83, 0xd8, 0xe8, 0x5c, 0x7f, 0x85, 0x30, 0x17, 0x57,
76 0x3d,0x25,0x75,0x9b,0xb0,0x68,0x69,0xcb, 78 0x21, 0x95, 0xfe, 0x26, 0x04, 0xeb, 0x47, 0x4c, 0x3a, 0x4a, 0x81, 0x4b,
77 0xea,0xc0,0xd8,0x3a,0xfb,0x8d,0x0c,0xf7, 79 0x71, 0x2e, 0xed, 0x6e, 0x4f, 0x3d, 0x11, 0x0f, 0x7c, 0xfe, 0x36, 0x43,
78 0xcb,0xb8,0x32,0x4f,0x0d,0x78,0x82,0xe5, 80 0x51, 0xd9, 0x81, 0x39, 0x17, 0xdf, 0x62, 0xf6, 0x9c, 0x01, 0xa8, 0x69,
79 0xd0,0x76,0x2f,0xc5,0xb7,0x21,0x0e,0xaf, 81 0x71, 0xdd, 0x29, 0x7f, 0x47, 0xe6, 0x65, 0xa6, 0x22, 0xe8, 0x6a, 0x12,
80 0xc2,0xe9,0xad,0xac,0x32,0xab,0x7a,0xac, 82 0x2b, 0xc2, 0x81, 0xff, 0x32, 0x70, 0x2f, 0x9e, 0xca, 0x53, 0x26, 0x47,
81 0x49,0x69,0x3d,0xfb,0xf8,0x37,0x24,0xc2, 83 0x0f, 0x59, 0xd7, 0x9e, 0x2c, 0xa5, 0x07, 0xc4, 0x49, 0x52, 0xa3, 0xe4,
82 0xec,0x07,0x36,0xee,0x31,0xc8,0x02,0x91, 84 0x6b, 0x04, 0x00, 0x25, 0x49, 0xe2, 0xe6, 0x7f, 0x28, 0x78, 0x97, 0xb8,
85 0x3a, 0x32, 0x14, 0x38, 0xa2, 0x51, 0x33, 0x22, 0x44, 0x7e, 0xd7, 0xef,
86 0x45, 0xdb, 0x06, 0x4a, 0xd2, 0x82, 0x4a, 0x82, 0x2c, 0xb1, 0xd7, 0xd8,
87 0xb6, 0x73, 0x00, 0x4d, 0x94, 0x77, 0x94, 0xef
83 }; 88 };
84 89
85static unsigned char out_q[]={ 90static unsigned char out_q[] = {
86 0xc7,0x73,0x21,0x8c,0x73,0x7e,0xc8,0xee, 91 0xd4, 0x0a, 0xac, 0x9f, 0xbd, 0x8c, 0x80, 0xc2, 0x38, 0x7e, 0x2e, 0x0c,
87 0x99,0x3b,0x4f,0x2d,0xed,0x30,0xf4,0x8e, 92 0x52, 0x5c, 0xea, 0x34, 0xa1, 0x83, 0x32, 0xf3
88 0xda,0xce,0x91,0x5f,
89 }; 93 };
90 94
91static unsigned char out_g[]={ 95static unsigned char out_g[] = {
92 0x62,0x6d,0x02,0x78,0x39,0xea,0x0a,0x13, 96 0x34, 0x73, 0x8b, 0x57, 0x84, 0x8e, 0x55, 0xbf, 0x57, 0xcc, 0x41, 0xbb,
93 0x41,0x31,0x63,0xa5,0x5b,0x4c,0xb5,0x00, 97 0x5e, 0x2b, 0xd5, 0x42, 0xdd, 0x24, 0x22, 0x2a, 0x09, 0xea, 0x26, 0x1e,
94 0x29,0x9d,0x55,0x22,0x95,0x6c,0xef,0xcb, 98 0x17, 0x65, 0xcb, 0x1a, 0xb3, 0x12, 0x44, 0xa3, 0x9e, 0x99, 0xe9, 0x63,
95 0x3b,0xff,0x10,0xf3,0x99,0xce,0x2c,0x2e, 99 0xeb, 0x30, 0xb1, 0x78, 0x7b, 0x09, 0x40, 0x30, 0xfa, 0x83, 0xc2, 0x35,
96 0x71,0xcb,0x9d,0xe5,0xfa,0x24,0xba,0xbf, 100 0xe1, 0xc4, 0x2d, 0x74, 0x1a, 0xb1, 0x83, 0x54, 0xd8, 0x29, 0xf4, 0xcf,
97 0x58,0xe5,0xb7,0x95,0x21,0x92,0x5c,0x9c, 101 0x7f, 0x6f, 0x67, 0x1c, 0x36, 0x49, 0xee, 0x6c, 0xa2, 0x3c, 0x2d, 0x6a,
98 0xc4,0x2e,0x9f,0x6f,0x46,0x4b,0x08,0x8c, 102 0xe9, 0xd3, 0x9a, 0xf6, 0x57, 0x78, 0x6f, 0xfd, 0x33, 0xcd, 0x3c, 0xed,
99 0xc5,0x72,0xaf,0x53,0xe6,0xd7,0x88,0x02, 103 0xfd, 0xd4, 0x41, 0xe6, 0x5c, 0x8b, 0xe0, 0x68, 0x31, 0x47, 0x47, 0xaf,
104 0x12, 0xa7, 0xf9, 0x32, 0x0d, 0x94, 0x15, 0x48, 0xd0, 0x54, 0x85, 0xb2,
105 0x04, 0xb5, 0x4d, 0xd4, 0x9d, 0x05, 0x22, 0x25, 0xd9, 0xfd, 0x6c, 0x36,
106 0xef, 0xbe, 0x69, 0x6c, 0x55, 0xf4, 0xee, 0xec
100 }; 107 };
101 108
102static const unsigned char str1[]="12345678901234567890"; 109static const unsigned char str1[]="12345678901234567890";
@@ -109,60 +116,65 @@ void FIPS_corrupt_dsa()
109int FIPS_selftest_dsa() 116int FIPS_selftest_dsa()
110 { 117 {
111 DSA *dsa=NULL; 118 DSA *dsa=NULL;
112 int counter,i,j; 119 int counter,i,j, ret = 0;
120 unsigned int slen;
113 unsigned char buf[256]; 121 unsigned char buf[256];
114 unsigned long h; 122 unsigned long h;
115 unsigned char sig[256]; 123 EVP_MD_CTX mctx;
116 unsigned int siglen; 124 EVP_PKEY pk;
117 125
118 dsa=DSA_generate_parameters(512,seed,20,&counter,&h,NULL,NULL); 126 EVP_MD_CTX_init(&mctx);
127
128 dsa = FIPS_dsa_new();
119 129
120 if(dsa == NULL) 130 if(dsa == NULL)
121 { 131 goto err;
122 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED); 132 if(!DSA_generate_parameters_ex(dsa, 1024,seed,20,&counter,&h,NULL))
123 return 0; 133 goto err;
124 } 134 if (counter != 378)
125 if (counter != 105) 135 goto err;
126 {
127 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED);
128 return 0;
129 }
130 if (h != 2) 136 if (h != 2)
131 { 137 goto err;
132 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED);
133 return 0;
134 }
135 i=BN_bn2bin(dsa->q,buf); 138 i=BN_bn2bin(dsa->q,buf);
136 j=sizeof(out_q); 139 j=sizeof(out_q);
137 if (i != j || memcmp(buf,out_q,i) != 0) 140 if (i != j || memcmp(buf,out_q,i) != 0)
138 { 141 goto err;
139 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED);
140 return 0;
141 }
142 142
143 i=BN_bn2bin(dsa->p,buf); 143 i=BN_bn2bin(dsa->p,buf);
144 j=sizeof(out_p); 144 j=sizeof(out_p);
145 if (i != j || memcmp(buf,out_p,i) != 0) 145 if (i != j || memcmp(buf,out_p,i) != 0)
146 { 146 goto err;
147 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED);
148 return 0;
149 }
150 147
151 i=BN_bn2bin(dsa->g,buf); 148 i=BN_bn2bin(dsa->g,buf);
152 j=sizeof(out_g); 149 j=sizeof(out_g);
153 if (i != j || memcmp(buf,out_g,i) != 0) 150 if (i != j || memcmp(buf,out_g,i) != 0)
154 { 151 goto err;
155 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED);
156 return 0;
157 }
158 DSA_generate_key(dsa); 152 DSA_generate_key(dsa);
159 DSA_sign(0, str1, 20, sig, &siglen, dsa); 153 pk.type = EVP_PKEY_DSA;
160 if(DSA_verify(0, str1, 20, sig, siglen, dsa) != 1) 154 pk.pkey.dsa = dsa;
161 { 155
162 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED); 156 if (!EVP_SignInit_ex(&mctx, EVP_dss1(), NULL))
163 return 0; 157 goto err;
164 } 158 if (!EVP_SignUpdate(&mctx, str1, 20))
165 DSA_free(dsa); 159 goto err;
166 return 1; 160 if (!EVP_SignFinal(&mctx, buf, &slen, &pk))
161 goto err;
162
163 if (!EVP_VerifyInit_ex(&mctx, EVP_dss1(), NULL))
164 goto err;
165 if (!EVP_VerifyUpdate(&mctx, str1, 20))
166 goto err;
167 if (EVP_VerifyFinal(&mctx, buf, slen, &pk) != 1)
168 goto err;
169
170 ret = 1;
171
172 err:
173 EVP_MD_CTX_cleanup(&mctx);
174 if (dsa)
175 FIPS_dsa_free(dsa);
176 if (ret == 0)
177 FIPSerr(FIPS_F_FIPS_SELFTEST_DSA,FIPS_R_SELFTEST_FAILED);
178 return ret;
167 } 179 }
168#endif 180#endif
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsa_sign.c b/src/lib/libssl/src/fips/dsa/fips_dsa_sign.c
new file mode 100644
index 0000000000..32ea0b0fea
--- /dev/null
+++ b/src/lib/libssl/src/fips/dsa/fips_dsa_sign.c
@@ -0,0 +1,256 @@
1/* fips_dsa_sign.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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 <string.h>
60#include <openssl/evp.h>
61#include <openssl/dsa.h>
62#include <openssl/err.h>
63#include <openssl/sha.h>
64#include <openssl/bn.h>
65
66#ifdef OPENSSL_FIPS
67
68/* FIPS versions of DSA_sign() and DSA_verify().
69 * These include a tiny ASN1 encoder/decoder to handle the specific
70 * case of a DSA signature.
71 */
72
73int FIPS_dsa_size(DSA *r)
74 {
75 int ilen;
76 ilen = BN_num_bytes(r->q);
77 if (ilen > 20)
78 return -1;
79 /* If MSB set need padding byte */
80 ilen ++;
81 /* Also need 2 bytes INTEGER header for r and s plus
82 * 2 bytes SEQUENCE header making 6 in total.
83 */
84 return ilen * 2 + 6;
85 }
86
87/* Tiny ASN1 encoder for DSA_SIG structure. We can assume r, s smaller than
88 * 0x80 octets as by the DSA standards they will be less than 2^160
89 */
90
91int FIPS_dsa_sig_encode(unsigned char *out, DSA_SIG *sig)
92 {
93 int rlen, slen, rpad, spad, seqlen;
94 rlen = BN_num_bytes(sig->r);
95 if (rlen > 20)
96 return -1;
97 if (BN_num_bits(sig->r) & 0x7)
98 rpad = 0;
99 else
100 rpad = 1;
101 slen = BN_num_bytes(sig->s);
102 if (slen > 20)
103 return -1;
104 if (BN_num_bits(sig->s) & 0x7)
105 spad = 0;
106 else
107 spad = 1;
108 /* Length of SEQUENCE, (1 tag + 1 len octet) * 2 + content octets */
109 seqlen = rlen + rpad + slen + spad + 4;
110 /* Actual encoded length: include SEQUENCE header */
111 if (!out)
112 return seqlen + 2;
113
114 /* Output SEQUENCE header */
115 *out++ = V_ASN1_SEQUENCE|V_ASN1_CONSTRUCTED;
116 *out++ = (unsigned char)seqlen;
117
118 /* Output r */
119 *out++ = V_ASN1_INTEGER;
120 *out++ = (unsigned char)(rlen + rpad);
121 if (rpad)
122 *out++ = 0;
123 BN_bn2bin(sig->r, out);
124 out += rlen;
125
126 /* Output s */
127 *out++ = V_ASN1_INTEGER;
128 *out++ = (unsigned char)(slen + spad);
129 if (spad)
130 *out++ = 0;
131 BN_bn2bin(sig->s, out);
132 return seqlen + 2;
133 }
134
135/* Companion DSA_SIG decoder */
136
137int FIPS_dsa_sig_decode(DSA_SIG *sig, const unsigned char *in, int inlen)
138 {
139 int seqlen, rlen, slen;
140 const unsigned char *rbin;
141 /* Sanity check */
142
143 /* Need SEQUENCE tag */
144 if (*in++ != (V_ASN1_SEQUENCE|V_ASN1_CONSTRUCTED))
145 return 0;
146 /* Get length octet */
147 seqlen = *in++;
148 /* Check sensible length value */
149 if (seqlen < 4 || seqlen > 0x7F)
150 return 0;
151 /* Check INTEGER tag */
152 if (*in++ != V_ASN1_INTEGER)
153 return 0;
154 rlen = *in++;
155 seqlen -= 2 + rlen;
156 /* Check sensible seqlen value */
157 if (seqlen < 2)
158 return 0;
159 rbin = in;
160 in += rlen;
161 /* Check INTEGER tag */
162 if (*in++ != V_ASN1_INTEGER)
163 return 0;
164 slen = *in++;
165 /* Remaining bytes of SEQUENCE should exactly match
166 * encoding of s
167 */
168 if (seqlen != (slen + 2))
169 return 0;
170 if (!sig->r && !(sig->r = BN_new()))
171 return 0;
172 if (!sig->s && !(sig->s = BN_new()))
173 return 0;
174 if (!BN_bin2bn(rbin, rlen, sig->r))
175 return 0;
176 if (!BN_bin2bn(in, slen, sig->s))
177 return 0;
178 return 1;
179 }
180
181static int fips_dsa_sign(int type, const unsigned char *x, int y,
182 unsigned char *sig, unsigned int *siglen, EVP_MD_SVCTX *sv)
183 {
184 DSA *dsa = sv->key;
185 unsigned char dig[EVP_MAX_MD_SIZE];
186 unsigned int dlen;
187 DSA_SIG *s;
188 EVP_DigestFinal_ex(sv->mctx, dig, &dlen);
189 s=dsa->meth->dsa_do_sign(dig,dlen,dsa);
190 OPENSSL_cleanse(dig, dlen);
191 if (s == NULL)
192 {
193 *siglen=0;
194 return 0;
195 }
196 *siglen= FIPS_dsa_sig_encode(sig, s);
197 DSA_SIG_free(s);
198 if (*siglen < 0)
199 return 0;
200 return 1;
201 }
202
203static int fips_dsa_verify(int type, const unsigned char *x, int y,
204 const unsigned char *sigbuf, unsigned int siglen, EVP_MD_SVCTX *sv)
205 {
206 DSA *dsa = sv->key;
207 DSA_SIG *s;
208 int ret=-1;
209 unsigned char dig[EVP_MAX_MD_SIZE];
210 unsigned int dlen;
211
212 s = DSA_SIG_new();
213 if (s == NULL)
214 return ret;
215 if (!FIPS_dsa_sig_decode(s,sigbuf,siglen))
216 goto err;
217 EVP_DigestFinal_ex(sv->mctx, dig, &dlen);
218 ret=dsa->meth->dsa_do_verify(dig,dlen,s,dsa);
219 OPENSSL_cleanse(dig, dlen);
220err:
221 DSA_SIG_free(s);
222 return ret;
223 }
224
225static int init(EVP_MD_CTX *ctx)
226 { return SHA1_Init(ctx->md_data); }
227
228static int update(EVP_MD_CTX *ctx,const void *data,size_t count)
229 { return SHA1_Update(ctx->md_data,data,count); }
230
231static int final(EVP_MD_CTX *ctx,unsigned char *md)
232 { return SHA1_Final(md,ctx->md_data); }
233
234static const EVP_MD dss1_md=
235 {
236 NID_dsa,
237 NID_dsaWithSHA1,
238 SHA_DIGEST_LENGTH,
239 EVP_MD_FLAG_FIPS|EVP_MD_FLAG_SVCTX,
240 init,
241 update,
242 final,
243 NULL,
244 NULL,
245 (evp_sign_method *)fips_dsa_sign,
246 (evp_verify_method *)fips_dsa_verify,
247 {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, EVP_PKEY_DSA4,0},
248 SHA_CBLOCK,
249 sizeof(EVP_MD *)+sizeof(SHA_CTX),
250 };
251
252const EVP_MD *EVP_dss1(void)
253 {
254 return(&dss1_md);
255 }
256#endif
diff --git a/src/lib/libssl/src/fips/dsa/fips_dsatest.c b/src/lib/libssl/src/fips/dsa/fips_dsatest.c
index 7215940ede..c7e0f5164f 100644
--- a/src/lib/libssl/src/fips/dsa/fips_dsatest.c
+++ b/src/lib/libssl/src/fips/dsa/fips_dsatest.c
@@ -59,6 +59,7 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#include <string.h> 61#include <string.h>
62#include <ctype.h>
62#include <sys/types.h> 63#include <sys/types.h>
63#include <sys/stat.h> 64#include <sys/stat.h>
64 65
@@ -68,11 +69,12 @@
68#include <openssl/rand.h> 69#include <openssl/rand.h>
69#include <openssl/bio.h> 70#include <openssl/bio.h>
70#include <openssl/err.h> 71#include <openssl/err.h>
72#include <openssl/dsa.h>
73#include <openssl/bn.h>
71#ifndef OPENSSL_NO_ENGINE 74#ifndef OPENSSL_NO_ENGINE
72#include <openssl/engine.h> 75#include <openssl/engine.h>
73#endif 76#endif
74#include <openssl/fips.h> 77
75#include <openssl/fips_rand.h>
76 78
77#if defined(OPENSSL_NO_DSA) || !defined(OPENSSL_FIPS) 79#if defined(OPENSSL_NO_DSA) || !defined(OPENSSL_FIPS)
78int main(int argc, char *argv[]) 80int main(int argc, char *argv[])
@@ -81,6 +83,8 @@ int main(int argc, char *argv[])
81 return(0); 83 return(0);
82} 84}
83#else 85#else
86#include <openssl/fips.h>
87#include <openssl/fips_rand.h>
84#include <openssl/dsa.h> 88#include <openssl/dsa.h>
85 89
86#ifdef OPENSSL_SYS_WIN16 90#ifdef OPENSSL_SYS_WIN16
@@ -89,100 +93,98 @@ int main(int argc, char *argv[])
89#define MS_CALLBACK 93#define MS_CALLBACK
90#endif 94#endif
91 95
92static void MS_CALLBACK dsa_cb(int p, int n, void *arg); 96#include "fips_utl.h"
93 97
94/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to 98static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
95 * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */
96static unsigned char seed[20]={
97 0xd5,0x01,0x4e,0x4b,0x60,0xef,0x2b,0xa8,0xb6,0x21,0x1b,0x40,
98 0x62,0xba,0x32,0x24,0xe0,0x42,0x7d,0xd3,
99 };
100 99
101static unsigned char out_p[]={ 100/* seed, out_p, out_q, out_g are taken from the earlier validation test
102 0x8d,0xf2,0xa4,0x94,0x49,0x22,0x76,0xaa, 101 * vectors.
103 0x3d,0x25,0x75,0x9b,0xb0,0x68,0x69,0xcb, 102 */
104 0xea,0xc0,0xd8,0x3a,0xfb,0x8d,0x0c,0xf7, 103
105 0xcb,0xb8,0x32,0x4f,0x0d,0x78,0x82,0xe5, 104static unsigned char seed[20] = {
106 0xd0,0x76,0x2f,0xc5,0xb7,0x21,0x0e,0xaf, 105 0x1c, 0xfb, 0xa9, 0x6c, 0xf7, 0x95, 0xb3, 0x2e, 0x01, 0x01, 0x3c, 0x8d,
107 0xc2,0xe9,0xad,0xac,0x32,0xab,0x7a,0xac, 106 0x7f, 0x6e, 0xf4, 0x59, 0xcc, 0x2f, 0x19, 0x59
108 0x49,0x69,0x3d,0xfb,0xf8,0x37,0x24,0xc2, 107 };
109 0xec,0x07,0x36,0xee,0x31,0xc8,0x02,0x91, 108
109static unsigned char out_p[] = {
110 0xc2, 0x3c, 0x48, 0x31, 0x7e, 0x3b, 0x4e, 0x5d, 0x3c, 0x93, 0x78, 0x60,
111 0x5c, 0xf2, 0x60, 0xbb, 0x5a, 0xfa, 0x7f, 0x17, 0xf9, 0x26, 0x69, 0x46,
112 0xe7, 0x07, 0xbb, 0x3b, 0x2e, 0xc4, 0xb5, 0x66, 0xf7, 0x4d, 0xae, 0x9b,
113 0x8f, 0xf0, 0x42, 0xea, 0xb3, 0xa0, 0x7e, 0x81, 0x85, 0x89, 0xe6, 0xb0,
114 0x29, 0x03, 0x6b, 0xcc, 0xfb, 0x8e, 0x46, 0x15, 0x4d, 0xc1, 0x69, 0xd8,
115 0x2f, 0xef, 0x5c, 0x8b, 0x29, 0x32, 0x41, 0xbd, 0x13, 0x72, 0x3d, 0xac,
116 0x81, 0xcc, 0x86, 0x6c, 0x06, 0x5d, 0x51, 0xa1, 0xa5, 0x07, 0x0c, 0x3e,
117 0xbe, 0xdd, 0xf4, 0x6e, 0xa8, 0xed, 0xb4, 0x2f, 0xbd, 0x3e, 0x64, 0xea,
118 0xee, 0x92, 0xec, 0x51, 0xe1, 0x0d, 0xab, 0x25, 0x45, 0xae, 0x55, 0x21,
119 0x4d, 0xd6, 0x96, 0x6f, 0xe6, 0xaa, 0xd3, 0xca, 0x87, 0x92, 0xb1, 0x1c,
120 0x3c, 0xaf, 0x29, 0x09, 0x8b, 0xc6, 0xed, 0xe1
110 }; 121 };
111 122
112static unsigned char out_q[]={ 123static unsigned char out_q[] = {
113 0xc7,0x73,0x21,0x8c,0x73,0x7e,0xc8,0xee, 124 0xae, 0x0a, 0x8c, 0xfb, 0x80, 0xe1, 0xc6, 0xd1, 0x09, 0x0f, 0x26, 0xde,
114 0x99,0x3b,0x4f,0x2d,0xed,0x30,0xf4,0x8e, 125 0x91, 0x53, 0xc2, 0x8b, 0x2b, 0x0f, 0xde, 0x7f
115 0xda,0xce,0x91,0x5f,
116 }; 126 };
117 127
118static unsigned char out_g[]={ 128static unsigned char out_g[] = {
119 0x62,0x6d,0x02,0x78,0x39,0xea,0x0a,0x13, 129 0x0d, 0x7d, 0x92, 0x74, 0x10, 0xf6, 0xa4, 0x43, 0x86, 0x9a, 0xd1, 0xd9,
120 0x41,0x31,0x63,0xa5,0x5b,0x4c,0xb5,0x00, 130 0x56, 0x00, 0xbc, 0x18, 0x97, 0x99, 0x4e, 0x9a, 0x93, 0xfb, 0x00, 0x3d,
121 0x29,0x9d,0x55,0x22,0x95,0x6c,0xef,0xcb, 131 0x6c, 0xa0, 0x1b, 0x95, 0x6b, 0xbd, 0xf7, 0x7a, 0xbc, 0x36, 0x3f, 0x3d,
122 0x3b,0xff,0x10,0xf3,0x99,0xce,0x2c,0x2e, 132 0xb9, 0xbf, 0xf9, 0x91, 0x37, 0x68, 0xd1, 0xb9, 0x1e, 0xfe, 0x7f, 0x10,
123 0x71,0xcb,0x9d,0xe5,0xfa,0x24,0xba,0xbf, 133 0xc0, 0x6a, 0xcd, 0x5f, 0xc1, 0x65, 0x1a, 0xb8, 0xe7, 0xab, 0xb5, 0xc6,
124 0x58,0xe5,0xb7,0x95,0x21,0x92,0x5c,0x9c, 134 0x8d, 0xb7, 0x86, 0xad, 0x3a, 0xbf, 0x6b, 0x7b, 0x0a, 0x66, 0xbe, 0xd5,
125 0xc4,0x2e,0x9f,0x6f,0x46,0x4b,0x08,0x8c, 135 0x58, 0x23, 0x16, 0x48, 0x83, 0x29, 0xb6, 0xa7, 0x64, 0xc7, 0x08, 0xbe,
126 0xc5,0x72,0xaf,0x53,0xe6,0xd7,0x88,0x02, 136 0x55, 0x4c, 0x6f, 0xcb, 0x34, 0xc1, 0x73, 0xb0, 0x39, 0x68, 0x52, 0xdf,
137 0x27, 0x7f, 0x32, 0xbc, 0x2b, 0x0d, 0x63, 0xed, 0x75, 0x3e, 0xb5, 0x54,
138 0xac, 0xc8, 0x20, 0x2a, 0x73, 0xe8, 0x29, 0x51, 0x03, 0x77, 0xe8, 0xc9,
139 0x61, 0x32, 0x25, 0xaf, 0x21, 0x5b, 0x6e, 0xda
127 }; 140 };
128 141
142
129static const unsigned char str1[]="12345678901234567890"; 143static const unsigned char str1[]="12345678901234567890";
130 144
131static const char rnd_seed[] = "string to make the random number generator think it has entropy"; 145static const char rnd_seed[] = "string to make the random number generator think it has entropy";
132static const unsigned char rnd_key1[]="12345678";
133static const unsigned char rnd_key2[]="abcdefgh";
134
135static BIO *bio_err=NULL;
136 146
137int main(int argc, char **argv) 147int main(int argc, char **argv)
138 { 148 {
139 DSA *dsa=NULL; 149 DSA *dsa=NULL;
150 EVP_PKEY pk;
140 int counter,ret=0,i,j; 151 int counter,ret=0,i,j;
152 unsigned int slen;
141 unsigned char buf[256]; 153 unsigned char buf[256];
142 unsigned long h; 154 unsigned long h;
143 unsigned char sig[256]; 155 BN_GENCB cb;
144 unsigned int siglen; 156 EVP_MD_CTX mctx;
157 BN_GENCB_set(&cb, dsa_cb, stderr);
158 EVP_MD_CTX_init(&mctx);
145 159
146 if (bio_err == NULL) 160 if(!FIPS_mode_set(1))
147 bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
148
149#ifdef OPENSSL_FIPS
150 if(!FIPS_mode_set(1,argv[0]))
151 { 161 {
152 ERR_print_errors(bio_err); 162 do_print_errors();
153 EXIT(1); 163 EXIT(1);
154 } 164 }
155#endif
156 CRYPTO_malloc_debug_init();
157 CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);
158 CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
159
160 ERR_load_crypto_strings();
161 FIPS_set_prng_key(rnd_key1,rnd_key2);
162 RAND_seed(rnd_seed, sizeof rnd_seed);
163 165
164 BIO_printf(bio_err,"test generation of DSA parameters\n"); 166 fprintf(stderr,"test generation of DSA parameters\n");
165 167
166 dsa=DSA_generate_parameters(512,seed,20,&counter,&h,dsa_cb,bio_err); 168 dsa = FIPS_dsa_new();
169 DSA_generate_parameters_ex(dsa, 1024,seed,20,&counter,&h,&cb);
167 170
168 BIO_printf(bio_err,"seed\n"); 171 fprintf(stderr,"seed\n");
169 for (i=0; i<20; i+=4) 172 for (i=0; i<20; i+=4)
170 { 173 {
171 BIO_printf(bio_err,"%02X%02X%02X%02X ", 174 fprintf(stderr,"%02X%02X%02X%02X ",
172 seed[i],seed[i+1],seed[i+2],seed[i+3]); 175 seed[i],seed[i+1],seed[i+2],seed[i+3]);
173 } 176 }
174 BIO_printf(bio_err,"\ncounter=%d h=%d\n",counter,h); 177 fprintf(stderr,"\ncounter=%d h=%ld\n",counter,h);
175 178
176 if (dsa == NULL) goto end; 179 if (dsa == NULL) goto end;
177 DSA_print(bio_err,dsa,0); 180 if (counter != 16)
178 if (counter != 105)
179 { 181 {
180 BIO_printf(bio_err,"counter should be 105\n"); 182 fprintf(stderr,"counter should be 105\n");
181 goto end; 183 goto end;
182 } 184 }
183 if (h != 2) 185 if (h != 2)
184 { 186 {
185 BIO_printf(bio_err,"h should be 2\n"); 187 fprintf(stderr,"h should be 2\n");
186 goto end; 188 goto end;
187 } 189 }
188 190
@@ -190,7 +192,7 @@ int main(int argc, char **argv)
190 j=sizeof(out_q); 192 j=sizeof(out_q);
191 if ((i != j) || (memcmp(buf,out_q,i) != 0)) 193 if ((i != j) || (memcmp(buf,out_q,i) != 0))
192 { 194 {
193 BIO_printf(bio_err,"q value is wrong\n"); 195 fprintf(stderr,"q value is wrong\n");
194 goto end; 196 goto end;
195 } 197 }
196 198
@@ -198,7 +200,7 @@ int main(int argc, char **argv)
198 j=sizeof(out_p); 200 j=sizeof(out_p);
199 if ((i != j) || (memcmp(buf,out_p,i) != 0)) 201 if ((i != j) || (memcmp(buf,out_p,i) != 0))
200 { 202 {
201 BIO_printf(bio_err,"p value is wrong\n"); 203 fprintf(stderr,"p value is wrong\n");
202 goto end; 204 goto end;
203 } 205 }
204 206
@@ -206,26 +208,37 @@ int main(int argc, char **argv)
206 j=sizeof(out_g); 208 j=sizeof(out_g);
207 if ((i != j) || (memcmp(buf,out_g,i) != 0)) 209 if ((i != j) || (memcmp(buf,out_g,i) != 0))
208 { 210 {
209 BIO_printf(bio_err,"g value is wrong\n"); 211 fprintf(stderr,"g value is wrong\n");
210 goto end; 212 goto end;
211 } 213 }
212 DSA_generate_key(dsa); 214 DSA_generate_key(dsa);
213 DSA_sign(0, str1, 20, sig, &siglen, dsa); 215 pk.type = EVP_PKEY_DSA;
214 if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1) 216 pk.pkey.dsa = dsa;
215 ret=1; 217
218 if (!EVP_SignInit_ex(&mctx, EVP_dss1(), NULL))
219 goto end;
220 if (!EVP_SignUpdate(&mctx, str1, 20))
221 goto end;
222 if (!EVP_SignFinal(&mctx, buf, &slen, &pk))
223 goto end;
224
225 if (!EVP_VerifyInit_ex(&mctx, EVP_dss1(), NULL))
226 goto end;
227 if (!EVP_VerifyUpdate(&mctx, str1, 20))
228 goto end;
229 if (EVP_VerifyFinal(&mctx, buf, slen, &pk) != 1)
230 goto end;
231
232 ret = 1;
233
216end: 234end:
217 if (!ret) 235 if (!ret)
218 ERR_print_errors(bio_err); 236 do_print_errors();
219 if (dsa != NULL) DSA_free(dsa); 237 if (dsa != NULL) FIPS_dsa_free(dsa);
220 CRYPTO_cleanup_all_ex_data(); 238 EVP_MD_CTX_cleanup(&mctx);
221 ERR_remove_state(0); 239#if 0
222 ERR_free_strings();
223 CRYPTO_mem_leaks(bio_err); 240 CRYPTO_mem_leaks(bio_err);
224 if (bio_err != NULL) 241#endif
225 {
226 BIO_free(bio_err);
227 bio_err = NULL;
228 }
229 EXIT(!ret); 242 EXIT(!ret);
230 return(!ret); 243 return(!ret);
231 } 244 }
@@ -236,7 +249,7 @@ static int cb_exit(int ec)
236 return(0); /* To keep some compilers quiet */ 249 return(0); /* To keep some compilers quiet */
237 } 250 }
238 251
239static void MS_CALLBACK dsa_cb(int p, int n, void *arg) 252static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
240 { 253 {
241 char c='*'; 254 char c='*';
242 static int ok=0,num=0; 255 static int ok=0,num=0;
@@ -245,13 +258,14 @@ static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
245 if (p == 1) c='+'; 258 if (p == 1) c='+';
246 if (p == 2) { c='*'; ok++; } 259 if (p == 2) { c='*'; ok++; }
247 if (p == 3) c='\n'; 260 if (p == 3) c='\n';
248 BIO_write(arg,&c,1); 261 fwrite(&c,1, 1, cb->arg);
249 (void)BIO_flush(arg); 262 fflush(cb->arg);
250 263
251 if (!ok && (p == 0) && (num > 1)) 264 if (!ok && (p == 0) && (num > 1))
252 { 265 {
253 BIO_printf((BIO *)arg,"error in dsatest\n"); 266 fprintf(cb->arg,"error in dsatest\n");
254 cb_exit(1); 267 cb_exit(1);
255 } 268 }
269 return 1;
256 } 270 }
257#endif 271#endif
diff --git a/src/lib/libssl/src/fips/dsa/fips_dssvs.c b/src/lib/libssl/src/fips/dsa/fips_dssvs.c
index 50a4d96986..aa74e8e636 100644
--- a/src/lib/libssl/src/fips/dsa/fips_dssvs.c
+++ b/src/lib/libssl/src/fips/dsa/fips_dssvs.c
@@ -1,104 +1,64 @@
1#include <openssl/opensslconf.h>
2
3#ifndef OPENSSL_FIPS
4#include <stdio.h>
5
6int main(int argc, char **argv)
7{
8 printf("No FIPS DSA support\n");
9 return(0);
10}
11#else
12
1#include <openssl/bn.h> 13#include <openssl/bn.h>
2#include <openssl/dsa.h> 14#include <openssl/dsa.h>
3#include <openssl/fips.h> 15#include <openssl/fips.h>
4#include <openssl/err.h> 16#include <openssl/err.h>
5#include <openssl/sha.h> 17#include <openssl/evp.h>
6#include <string.h> 18#include <string.h>
19#include <ctype.h>
7 20
8int hex2bin(const char *in, unsigned char *out) 21#include "fips_utl.h"
9 {
10 int n1, n2;
11 unsigned char ch;
12
13 for (n1=0,n2=0 ; in[n1] && in[n1] != '\n' ; )
14 { /* first byte */
15 if ((in[n1] >= '0') && (in[n1] <= '9'))
16 ch = in[n1++] - '0';
17 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
18 ch = in[n1++] - 'A' + 10;
19 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
20 ch = in[n1++] - 'a' + 10;
21 else
22 return -1;
23 if(!in[n1])
24 {
25 out[n2++]=ch;
26 break;
27 }
28 out[n2] = ch << 4;
29 /* second byte */
30 if ((in[n1] >= '0') && (in[n1] <= '9'))
31 ch = in[n1++] - '0';
32 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
33 ch = in[n1++] - 'A' + 10;
34 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
35 ch = in[n1++] - 'a' + 10;
36 else
37 return -1;
38 out[n2++] |= ch;
39 }
40 return n2;
41 }
42
43BIGNUM *hex2bn(const char *in)
44 {
45 BIGNUM *p=BN_new();
46
47 BN_hex2bn(&p,in);
48 22
49 return p; 23static void pbn(const char *name, BIGNUM *bn)
50 }
51
52int bin2hex(const unsigned char *in,int len,char *out)
53 {
54 int n1, n2;
55 unsigned char ch;
56
57 for (n1=0,n2=0 ; n1 < len ; ++n1)
58 { 24 {
59 ch=in[n1] >> 4; 25 int len, i;
60 if (ch <= 0x09) 26 unsigned char *tmp;
61 out[n2++]=ch+'0'; 27 len = BN_num_bytes(bn);
62 else 28 tmp = OPENSSL_malloc(len);
63 out[n2++]=ch-10+'a'; 29 if (!tmp)
64 ch=in[n1] & 0x0f; 30 {
65 if(ch <= 0x09) 31 fprintf(stderr, "Memory allocation error\n");
66 out[n2++]=ch+'0'; 32 return;
67 else 33 }
68 out[n2++]=ch-10+'a'; 34 BN_bn2bin(bn, tmp);
35 printf("%s = ", name);
36 for (i = 0; i < len; i++)
37 printf("%02X", tmp[i]);
38 fputs("\n", stdout);
39 OPENSSL_free(tmp);
40 return;
69 } 41 }
70 out[n2]='\0';
71 return n2;
72 }
73
74void pv(const char *tag,const unsigned char *val,int len)
75 {
76 char obuf[2048];
77
78 bin2hex(val,len,obuf);
79 printf("%s = %s\n",tag,obuf);
80 }
81
82void pbn(const char *tag,const BIGNUM *val)
83 {
84 printf("%s = %s\n",tag,BN_bn2hex(val));
85 }
86 42
87void primes() 43void primes()
88 { 44 {
89 char buf[10240]; 45 char buf[10240];
46 char lbuf[10240];
47 char *keyword, *value;
90 48
91 while(fgets(buf,sizeof buf,stdin) != NULL) 49 while(fgets(buf,sizeof buf,stdin) != NULL)
92 { 50 {
93 fputs(buf,stdout); 51 fputs(buf,stdout);
94 if(!strncmp(buf,"Prime= ",7)) 52 if (!parse_line(&keyword, &value, lbuf, buf))
53 continue;
54 if(!strcmp(keyword,"Prime"))
95 { 55 {
96 BIGNUM *pp; 56 BIGNUM *pp;
97 57
98 pp=BN_new(); 58 pp=BN_new();
99 BN_hex2bn(&pp,buf+7); 59 do_hex2bn(&pp,value);
100 printf("result= %c\n", 60 printf("result= %c\n",
101 BN_is_prime(pp,20,NULL,NULL,NULL) ? 'P' : 'F'); 61 BN_is_prime_ex(pp,20,NULL,NULL) ? 'P' : 'F');
102 } 62 }
103 } 63 }
104 } 64 }
@@ -106,15 +66,22 @@ void primes()
106void pqg() 66void pqg()
107 { 67 {
108 char buf[1024]; 68 char buf[1024];
69 char lbuf[1024];
70 char *keyword, *value;
109 int nmod=0; 71 int nmod=0;
110 72
111 while(fgets(buf,sizeof buf,stdin) != NULL) 73 while(fgets(buf,sizeof buf,stdin) != NULL)
112 { 74 {
113 if(!strncmp(buf,"[mod = ",7)) 75 if (!parse_line(&keyword, &value, lbuf, buf))
114 nmod=atoi(buf+7); 76 {
115 else if(!strncmp(buf,"N = ",4)) 77 fputs(buf,stdout);
78 continue;
79 }
80 if(!strcmp(keyword,"[mod"))
81 nmod=atoi(value);
82 else if(!strcmp(keyword,"N"))
116 { 83 {
117 int n=atoi(buf+4); 84 int n=atoi(value);
118 85
119 printf("[mod = %d]\n\n",nmod); 86 printf("[mod = %d]\n\n",nmod);
120 87
@@ -124,11 +91,16 @@ void pqg()
124 DSA *dsa; 91 DSA *dsa;
125 int counter; 92 int counter;
126 unsigned long h; 93 unsigned long h;
127 94 dsa = FIPS_dsa_new();
128 dsa=DSA_generate_parameters(nmod,seed,0,&counter,&h,NULL,NULL); 95
129 printf("P = %s\n",BN_bn2hex(dsa->p)); 96 if (!DSA_generate_parameters_ex(dsa, nmod,seed,0,&counter,&h,NULL))
130 printf("Q = %s\n",BN_bn2hex(dsa->q)); 97 {
131 printf("G = %s\n",BN_bn2hex(dsa->g)); 98 do_print_errors();
99 exit(1);
100 }
101 pbn("P",dsa->p);
102 pbn("Q",dsa->q);
103 pbn("G",dsa->g);
132 pv("Seed",seed,20); 104 pv("Seed",seed,20);
133 printf("c = %d\n",counter); 105 printf("c = %d\n",counter);
134 printf("H = %lx\n",h); 106 printf("H = %lx\n",h);
@@ -140,23 +112,226 @@ void pqg()
140 } 112 }
141 } 113 }
142 114
115void pqgver()
116 {
117 char buf[1024];
118 char lbuf[1024];
119 char *keyword, *value;
120 BIGNUM *p = NULL, *q = NULL, *g = NULL;
121 int counter, counter2;
122 unsigned long h, h2;
123 DSA *dsa=NULL;
124 int nmod=0;
125 unsigned char seed[1024];
126
127 while(fgets(buf,sizeof buf,stdin) != NULL)
128 {
129 if (!parse_line(&keyword, &value, lbuf, buf))
130 {
131 fputs(buf,stdout);
132 continue;
133 }
134 if(!strcmp(keyword,"[mod"))
135 nmod=atoi(value);
136 else if(!strcmp(keyword,"P"))
137 p=hex2bn(value);
138 else if(!strcmp(keyword,"Q"))
139 q=hex2bn(value);
140 else if(!strcmp(keyword,"G"))
141 g=hex2bn(value);
142 else if(!strcmp(keyword,"Seed"))
143 {
144 int slen = hex2bin(value, seed);
145 if (slen != 20)
146 {
147 fprintf(stderr, "Seed parse length error\n");
148 exit (1);
149 }
150 }
151 else if(!strcmp(keyword,"c"))
152 counter =atoi(buf+4);
153 else if(!strcmp(keyword,"H"))
154 {
155 h = atoi(value);
156 if (!p || !q || !g)
157 {
158 fprintf(stderr, "Parse Error\n");
159 exit (1);
160 }
161 pbn("P",p);
162 pbn("Q",q);
163 pbn("G",g);
164 pv("Seed",seed,20);
165 printf("c = %d\n",counter);
166 printf("H = %lx\n",h);
167 dsa = FIPS_dsa_new();
168 if (!DSA_generate_parameters_ex(dsa, nmod,seed,20 ,&counter2,&h2,NULL))
169 {
170 do_print_errors();
171 exit(1);
172 }
173 if (BN_cmp(dsa->p, p) || BN_cmp(dsa->q, q) || BN_cmp(dsa->g, g)
174 || (counter != counter2) || (h != h2))
175 printf("Result = F\n");
176 else
177 printf("Result = T\n");
178 BN_free(p);
179 BN_free(q);
180 BN_free(g);
181 p = NULL;
182 q = NULL;
183 g = NULL;
184 FIPS_dsa_free(dsa);
185 dsa = NULL;
186 }
187 }
188 }
189
190/* Keypair verification routine. NB: this isn't part of the standard FIPS140-2
191 * algorithm tests. It is an additional test to perform sanity checks on the
192 * output of the KeyPair test.
193 */
194
195static int dss_paramcheck(int nmod, BIGNUM *p, BIGNUM *q, BIGNUM *g,
196 BN_CTX *ctx)
197 {
198 BIGNUM *rem = NULL;
199 if (BN_num_bits(p) != nmod)
200 return 0;
201 if (BN_num_bits(q) != 160)
202 return 0;
203 if (BN_is_prime_ex(p, BN_prime_checks, ctx, NULL) != 1)
204 return 0;
205 if (BN_is_prime_ex(q, BN_prime_checks, ctx, NULL) != 1)
206 return 0;
207 rem = BN_new();
208 if (!BN_mod(rem, p, q, ctx) || !BN_is_one(rem)
209 || (BN_cmp(g, BN_value_one()) <= 0)
210 || !BN_mod_exp(rem, g, q, p, ctx) || !BN_is_one(rem))
211 {
212 BN_free(rem);
213 return 0;
214 }
215 /* Todo: check g */
216 BN_free(rem);
217 return 1;
218 }
219
220void keyver()
221 {
222 char buf[1024];
223 char lbuf[1024];
224 char *keyword, *value;
225 BIGNUM *p = NULL, *q = NULL, *g = NULL, *X = NULL, *Y = NULL;
226 BIGNUM *Y2;
227 BN_CTX *ctx = NULL;
228 int nmod=0, paramcheck = 0;
229
230 ctx = BN_CTX_new();
231 Y2 = BN_new();
232
233 while(fgets(buf,sizeof buf,stdin) != NULL)
234 {
235 if (!parse_line(&keyword, &value, lbuf, buf))
236 {
237 fputs(buf,stdout);
238 continue;
239 }
240 if(!strcmp(keyword,"[mod"))
241 {
242 if (p)
243 BN_free(p);
244 p = NULL;
245 if (q)
246 BN_free(q);
247 q = NULL;
248 if (g)
249 BN_free(g);
250 g = NULL;
251 paramcheck = 0;
252 nmod=atoi(value);
253 }
254 else if(!strcmp(keyword,"P"))
255 p=hex2bn(value);
256 else if(!strcmp(keyword,"Q"))
257 q=hex2bn(value);
258 else if(!strcmp(keyword,"G"))
259 g=hex2bn(value);
260 else if(!strcmp(keyword,"X"))
261 X=hex2bn(value);
262 else if(!strcmp(keyword,"Y"))
263 {
264 Y=hex2bn(value);
265 if (!p || !q || !g || !X || !Y)
266 {
267 fprintf(stderr, "Parse Error\n");
268 exit (1);
269 }
270 pbn("P",p);
271 pbn("Q",q);
272 pbn("G",g);
273 pbn("X",X);
274 pbn("Y",Y);
275 if (!paramcheck)
276 {
277 if (dss_paramcheck(nmod, p, q, g, ctx))
278 paramcheck = 1;
279 else
280 paramcheck = -1;
281 }
282 if (paramcheck != 1)
283 printf("Result = F\n");
284 else
285 {
286 if (!BN_mod_exp(Y2, g, X, p, ctx) || BN_cmp(Y2, Y))
287 printf("Result = F\n");
288 else
289 printf("Result = T\n");
290 }
291 BN_free(X);
292 BN_free(Y);
293 X = NULL;
294 Y = NULL;
295 }
296 }
297 if (p)
298 BN_free(p);
299 if (q)
300 BN_free(q);
301 if (g)
302 BN_free(g);
303 if (Y2)
304 BN_free(Y2);
305 }
306
143void keypair() 307void keypair()
144 { 308 {
145 char buf[1024]; 309 char buf[1024];
310 char lbuf[1024];
311 char *keyword, *value;
146 int nmod=0; 312 int nmod=0;
147 313
148 while(fgets(buf,sizeof buf,stdin) != NULL) 314 while(fgets(buf,sizeof buf,stdin) != NULL)
149 { 315 {
150 if(!strncmp(buf,"[mod = ",7)) 316 if (!parse_line(&keyword, &value, lbuf, buf))
151 nmod=atoi(buf+7); 317 {
152 else if(!strncmp(buf,"N = ",4)) 318 fputs(buf,stdout);
319 continue;
320 }
321 if(!strcmp(keyword,"[mod"))
322 nmod=atoi(value);
323 else if(!strcmp(keyword,"N"))
153 { 324 {
154 DSA *dsa; 325 DSA *dsa;
155 int n=atoi(buf+4); 326 int n=atoi(value);
156 327
157 printf("[mod = %d]\n\n",nmod); 328 printf("[mod = %d]\n\n",nmod);
158 329 dsa = FIPS_dsa_new();
159 dsa=DSA_generate_parameters(nmod,NULL,0,NULL,NULL,NULL,NULL); 330 if (!DSA_generate_parameters_ex(dsa, nmod,NULL,0,NULL,NULL,NULL))
331 {
332 do_print_errors();
333 exit(1);
334 }
160 pbn("P",dsa->p); 335 pbn("P",dsa->p);
161 pbn("Q",dsa->q); 336 pbn("Q",dsa->q);
162 pbn("G",dsa->g); 337 pbn("G",dsa->g);
@@ -164,7 +339,11 @@ void keypair()
164 339
165 while(n--) 340 while(n--)
166 { 341 {
167 DSA_generate_key(dsa); 342 if (!DSA_generate_key(dsa))
343 {
344 do_print_errors();
345 exit(1);
346 }
168 347
169 pbn("X",dsa->priv_key); 348 pbn("X",dsa->priv_key);
170 pbn("Y",dsa->pub_key); 349 pbn("Y",dsa->pub_key);
@@ -177,68 +356,110 @@ void keypair()
177void siggen() 356void siggen()
178 { 357 {
179 char buf[1024]; 358 char buf[1024];
359 char lbuf[1024];
360 char *keyword, *value;
180 int nmod=0; 361 int nmod=0;
181 DSA *dsa=NULL; 362 DSA *dsa=NULL;
182 363
183 while(fgets(buf,sizeof buf,stdin) != NULL) 364 while(fgets(buf,sizeof buf,stdin) != NULL)
184 { 365 {
185 if(!strncmp(buf,"[mod = ",7)) 366 if (!parse_line(&keyword, &value, lbuf, buf))
367 {
368 fputs(buf,stdout);
369 continue;
370 }
371 if(!strcmp(keyword,"[mod"))
186 { 372 {
187 nmod=atoi(buf+7); 373 nmod=atoi(value);
188 printf("[mod = %d]\n\n",nmod); 374 printf("[mod = %d]\n\n",nmod);
189 375 if (dsa)
190 dsa=DSA_generate_parameters(nmod,NULL,0,NULL,NULL,NULL,NULL); 376 FIPS_dsa_free(dsa);
377 dsa = FIPS_dsa_new();
378 if (!DSA_generate_parameters_ex(dsa, nmod,NULL,0,NULL,NULL,NULL))
379 {
380 do_print_errors();
381 exit(1);
382 }
191 pbn("P",dsa->p); 383 pbn("P",dsa->p);
192 pbn("Q",dsa->q); 384 pbn("Q",dsa->q);
193 pbn("G",dsa->g); 385 pbn("G",dsa->g);
194 putc('\n',stdout); 386 putc('\n',stdout);
195 } 387 }
196 else if(!strncmp(buf,"Msg = ",6)) 388 else if(!strcmp(keyword,"Msg"))
197 { 389 {
198 unsigned char msg[1024]; 390 unsigned char msg[1024];
199 unsigned char hash[20]; 391 unsigned char sbuf[60];
392 unsigned int slen;
200 int n; 393 int n;
394 EVP_PKEY pk;
395 EVP_MD_CTX mctx;
201 DSA_SIG *sig; 396 DSA_SIG *sig;
397 EVP_MD_CTX_init(&mctx);
202 398
203 n=hex2bin(buf+6,msg); 399 n=hex2bin(value,msg);
204 pv("Msg",msg,n); 400 pv("Msg",msg,n);
205 401
206 DSA_generate_key(dsa); 402 if (!DSA_generate_key(dsa))
403 {
404 do_print_errors();
405 exit(1);
406 }
407 pk.type = EVP_PKEY_DSA;
408 pk.pkey.dsa = dsa;
207 pbn("Y",dsa->pub_key); 409 pbn("Y",dsa->pub_key);
208 410
209 SHA1(msg,n,hash); 411 EVP_SignInit_ex(&mctx, EVP_dss1(), NULL);
210 sig=DSA_do_sign(hash,sizeof hash,dsa); 412 EVP_SignUpdate(&mctx, msg, n);
413 EVP_SignFinal(&mctx, sbuf, &slen, &pk);
414
415 sig = DSA_SIG_new();
416 FIPS_dsa_sig_decode(sig, sbuf, slen);
417
211 pbn("R",sig->r); 418 pbn("R",sig->r);
212 pbn("S",sig->s); 419 pbn("S",sig->s);
213 putc('\n',stdout); 420 putc('\n',stdout);
421 DSA_SIG_free(sig);
422 EVP_MD_CTX_cleanup(&mctx);
214 } 423 }
215 } 424 }
425 if (dsa)
426 FIPS_dsa_free(dsa);
216 } 427 }
217 428
218void sigver() 429void sigver()
219 { 430 {
220 DSA *dsa=NULL; 431 DSA *dsa=NULL;
221 char buf[1024]; 432 char buf[1024];
222 int nmod=0; 433 char lbuf[1024];
223 unsigned char hash[20]; 434 unsigned char msg[1024];
224 DSA_SIG *sig=DSA_SIG_new(); 435 char *keyword, *value;
436 int nmod=0, n=0;
437 DSA_SIG sg, *sig = &sg;
438
439 sig->r = NULL;
440 sig->s = NULL;
225 441
226 while(fgets(buf,sizeof buf,stdin) != NULL) 442 while(fgets(buf,sizeof buf,stdin) != NULL)
227 { 443 {
228 if(!strncmp(buf,"[mod = ",7)) 444 if (!parse_line(&keyword, &value, lbuf, buf))
445 {
446 fputs(buf,stdout);
447 continue;
448 }
449 if(!strcmp(keyword,"[mod"))
229 { 450 {
230 nmod=atoi(buf+7); 451 nmod=atoi(value);
231 if(dsa) 452 if(dsa)
232 DSA_free(dsa); 453 FIPS_dsa_free(dsa);
233 dsa=DSA_new(); 454 dsa=FIPS_dsa_new();
234 } 455 }
235 else if(!strncmp(buf,"P = ",4)) 456 else if(!strcmp(keyword,"P"))
236 dsa->p=hex2bn(buf+4); 457 dsa->p=hex2bn(value);
237 else if(!strncmp(buf,"Q = ",4)) 458 else if(!strcmp(keyword,"Q"))
238 dsa->q=hex2bn(buf+4); 459 dsa->q=hex2bn(value);
239 else if(!strncmp(buf,"G = ",4)) 460 else if(!strcmp(keyword,"G"))
240 { 461 {
241 dsa->g=hex2bn(buf+4); 462 dsa->g=hex2bn(value);
242 463
243 printf("[mod = %d]\n\n",nmod); 464 printf("[mod = %d]\n\n",nmod);
244 pbn("P",dsa->p); 465 pbn("P",dsa->p);
@@ -246,28 +467,38 @@ void sigver()
246 pbn("G",dsa->g); 467 pbn("G",dsa->g);
247 putc('\n',stdout); 468 putc('\n',stdout);
248 } 469 }
249 else if(!strncmp(buf,"Msg = ",6)) 470 else if(!strcmp(keyword,"Msg"))
250 { 471 {
251 unsigned char msg[1024]; 472 n=hex2bin(value,msg);
252 int n;
253
254 n=hex2bin(buf+6,msg);
255 pv("Msg",msg,n); 473 pv("Msg",msg,n);
256 SHA1(msg,n,hash);
257 } 474 }
258 else if(!strncmp(buf,"Y = ",4)) 475 else if(!strcmp(keyword,"Y"))
259 dsa->pub_key=hex2bn(buf+4); 476 dsa->pub_key=hex2bn(value);
260 else if(!strncmp(buf,"R = ",4)) 477 else if(!strcmp(keyword,"R"))
261 sig->r=hex2bn(buf+4); 478 sig->r=hex2bn(value);
262 else if(!strncmp(buf,"S = ",4)) 479 else if(!strcmp(keyword,"S"))
263 { 480 {
264 sig->s=hex2bn(buf+4); 481 EVP_MD_CTX mctx;
482 EVP_PKEY pk;
483 unsigned char sigbuf[60];
484 unsigned int slen;
485 int r;
486 EVP_MD_CTX_init(&mctx);
487 pk.type = EVP_PKEY_DSA;
488 pk.pkey.dsa = dsa;
489 sig->s=hex2bn(value);
265 490
266 pbn("Y",dsa->pub_key); 491 pbn("Y",dsa->pub_key);
267 pbn("R",sig->r); 492 pbn("R",sig->r);
268 pbn("S",sig->s); 493 pbn("S",sig->s);
269 printf("Result = %c\n",DSA_do_verify(hash,sizeof hash,sig,dsa) 494
270 ? 'P' : 'F'); 495 slen = FIPS_dsa_sig_encode(sigbuf, sig);
496 EVP_VerifyInit_ex(&mctx, EVP_dss1(), NULL);
497 EVP_VerifyUpdate(&mctx, msg, n);
498 r = EVP_VerifyFinal(&mctx, sigbuf, slen, &pk);
499 EVP_MD_CTX_cleanup(&mctx);
500
501 printf("Result = %c\n", r == 1 ? 'P' : 'F');
271 putc('\n',stdout); 502 putc('\n',stdout);
272 } 503 }
273 } 504 }
@@ -277,21 +508,24 @@ int main(int argc,char **argv)
277 { 508 {
278 if(argc != 2) 509 if(argc != 2)
279 { 510 {
280 fprintf(stderr,"%s [prime|pqg]\n",argv[0]); 511 fprintf(stderr,"%s [prime|pqg|pqgver|keypair|siggen|sigver]\n",argv[0]);
281 exit(1); 512 exit(1);
282 } 513 }
283 if(!FIPS_mode_set(1,argv[0])) 514 if(!FIPS_mode_set(1))
284 { 515 {
285 ERR_load_crypto_strings(); 516 do_print_errors();
286 ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
287 exit(1); 517 exit(1);
288 } 518 }
289 if(!strcmp(argv[1],"prime")) 519 if(!strcmp(argv[1],"prime"))
290 primes(); 520 primes();
291 else if(!strcmp(argv[1],"pqg")) 521 else if(!strcmp(argv[1],"pqg"))
292 pqg(); 522 pqg();
523 else if(!strcmp(argv[1],"pqgver"))
524 pqgver();
293 else if(!strcmp(argv[1],"keypair")) 525 else if(!strcmp(argv[1],"keypair"))
294 keypair(); 526 keypair();
527 else if(!strcmp(argv[1],"keyver"))
528 keyver();
295 else if(!strcmp(argv[1],"siggen")) 529 else if(!strcmp(argv[1],"siggen"))
296 siggen(); 530 siggen();
297 else if(!strcmp(argv[1],"sigver")) 531 else if(!strcmp(argv[1],"sigver"))
@@ -304,3 +538,5 @@ int main(int argc,char **argv)
304 538
305 return 0; 539 return 0;
306 } 540 }
541
542#endif
diff --git a/src/lib/libssl/src/fips/fips-lib.com b/src/lib/libssl/src/fips/fips-lib.com
index f3571bf845..539117b2ed 100644
--- a/src/lib/libssl/src/fips/fips-lib.com
+++ b/src/lib/libssl/src/fips/fips-lib.com
@@ -75,7 +75,7 @@ $ ENDIF
75$! 75$!
76$! Define The Different Encryption Types. 76$! Define The Different Encryption Types.
77$! 77$!
78$ ENCRYPT_TYPES = "Basic,SHA1,RAND,DES,AES,DSA,RSA,DH" 78$ ENCRYPT_TYPES = "Basic,SHA,RAND,DES,AES,DSA,RSA,DH,HMAC"
79$! 79$!
80$! Check To Make Sure We Have Valid Command Line Parameters. 80$! Check To Make Sure We Have Valid Command Line Parameters.
81$! 81$!
@@ -151,20 +151,26 @@ $!
151$! Define The Different Encryption "library" Strings. 151$! Define The Different Encryption "library" Strings.
152$! 152$!
153$ LIB_ = "fips,fips_err_wrapper" 153$ LIB_ = "fips,fips_err_wrapper"
154$ LIB_SHA1 = "fips_sha1dgst,fips_sha1_selftest" 154$ LIB_SHA = "fips_sha1dgst,fips_sha1_selftest,fips_sha256,fips_sha512"
155$ LIB_RAND = "fips_rand" 155$ LIB_RAND = "fips_rand,fips_rand_selftest"
156$ LIB_DES = "fips_des_enc,fips_des_selftest,fips_set_key" 156$ LIB_DES = "fips_des_enc,fips_des_selftest,fips_set_key"
157$ LIB_AES = "fips_aes_core,fips_aes_selftest" 157$ LIB_AES = "fips_aes_core,fips_aes_selftest"
158$ LIB_DSA = "fips_dsa_ossl,fips_dsa_gen,fips_dsa_selftest" 158$ LIB_DSA = "fips_dsa_ossl,fips_dsa_gen,fips_dsa_selftest"
159$ LIB_RSA = "fips_rsa_eay,fips_rsa_gen,fips_rsa_selftest" 159$ LIB_RSA = "fips_rsa_eay,fips_rsa_gen,fips_rsa_selftest,fips_rsa_x931g"
160$ LIB_DH = "fips_dh_check,fips_dh_gen,fips_dh_key" 160$ LIB_DH = "fips_dh_check,fips_dh_gen,fips_dh_key"
161$ LIB_HMAC = "fips_hmac,fips_hmac_selftest"
161$! 162$!
162$! Setup exceptional compilations 163$! Setup exceptional compilations
163$! 164$!
165$ ! Add definitions for no threads on OpenVMS 7.1 and higher
164$ COMPILEWITH_CC3 = ",bss_rtcp," 166$ COMPILEWITH_CC3 = ",bss_rtcp,"
167$ ! Disable the DOLLARID warning
165$ COMPILEWITH_CC4 = ",a_utctm,bss_log,o_time," 168$ COMPILEWITH_CC4 = ",a_utctm,bss_log,o_time,"
169$ ! Disable disjoint optimization
166$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + - 170$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
167 "sha_dgst,sha1dgst,rmd_dgst,bf_enc," 171 "sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
172$ ! Disable the MIXLINKAGE warning
173$ COMPILEWITH_CC6 = ",fips_set_key,"
168$! 174$!
169$! Figure Out What Other Modules We Are To Build. 175$! Figure Out What Other Modules We Are To Build.
170$! 176$!
@@ -393,7 +399,12 @@ $ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5
393$ THEN 399$ THEN
394$ CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE' 400$ CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
395$ ELSE 401$ ELSE
396$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE' 402$ IF COMPILEWITH_CC6 - FILE_NAME0 .NES. COMPILEWITH_CC6
403$ THEN
404$ CC6/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
405$ ELSE
406$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
407$ ENDIF
397$ ENDIF 408$ ENDIF
398$ ENDIF 409$ ENDIF
399$ ENDIF 410$ ENDIF
@@ -856,7 +867,7 @@ $ CCDEFS = "TCPIP_TYPE_''P4',DSO_VMS"
856$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS 867$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
857$ CCEXTRAFLAGS = "" 868$ CCEXTRAFLAGS = ""
858$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS 869$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
859$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX" 870$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
860$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN - 871$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
861 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS 872 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
862$! 873$!
@@ -973,14 +984,18 @@ $ THEN
973$ IF CCDISABLEWARNINGS .EQS. "" 984$ IF CCDISABLEWARNINGS .EQS. ""
974$ THEN 985$ THEN
975$ CC4DISABLEWARNINGS = "DOLLARID" 986$ CC4DISABLEWARNINGS = "DOLLARID"
987$ CC6DISABLEWARNINGS = "MIXLINKAGE"
976$ ELSE 988$ ELSE
977$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID" 989$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
990$ CC6DISABLEWARNINGS = CCDISABLEWARNINGS + ",MIXLINKAGE"
978$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))" 991$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
979$ ENDIF 992$ ENDIF
980$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))" 993$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
994$ CC6DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC6DISABLEWARNINGS + "))"
981$ ELSE 995$ ELSE
982$ CCDISABLEWARNINGS = "" 996$ CCDISABLEWARNINGS = ""
983$ CC4DISABLEWARNINGS = "" 997$ CC4DISABLEWARNINGS = ""
998$ CC6DISABLEWARNINGS = ""
984$ ENDIF 999$ ENDIF
985$ CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS 1000$ CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
986$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS 1001$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
@@ -991,6 +1006,7 @@ $ ELSE
991$ CC5 = CC + "/NOOPTIMIZE" 1006$ CC5 = CC + "/NOOPTIMIZE"
992$ ENDIF 1007$ ENDIF
993$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS 1008$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1009$ CC6 = CC - CCDISABLEWARNINGS + CC6DISABLEWARNINGS
994$! 1010$!
995$! Show user the result 1011$! Show user the result
996$! 1012$!
@@ -1153,7 +1169,7 @@ $! Save directory information
1153$! 1169$!
1154$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;" 1170$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1155$ __HERE = F$EDIT(__HERE,"UPCASE") 1171$ __HERE = F$EDIT(__HERE,"UPCASE")
1156$ __TOP = __HERE - "FIPS]" 1172$ __TOP = __HERE - "FIPS-1_0]"
1157$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]" 1173$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1158$! 1174$!
1159$! Set up the logical name OPENSSL to point at the include directory 1175$! Set up the logical name OPENSSL to point at the include directory
diff --git a/src/lib/libssl/src/fips/fips-nodiff.txt b/src/lib/libssl/src/fips/fips-nodiff.txt
new file mode 100644
index 0000000000..fb2944b4fc
--- /dev/null
+++ b/src/lib/libssl/src/fips/fips-nodiff.txt
@@ -0,0 +1,7 @@
1KeyPair.rsp
2PQGGen.rsp
3SigGen.rsp
4SigGen15.rsp
5SigGenPSS.rsp
6SigGenRSA.rsp
7SigGenPSS.rsp
diff --git a/src/lib/libssl/src/fips/fips.c b/src/lib/libssl/src/fips/fips.c
index 7ecba57f70..7dcc34403f 100644
--- a/src/lib/libssl/src/fips/fips.c
+++ b/src/lib/libssl/src/fips/fips.c
@@ -47,50 +47,80 @@
47 * 47 *
48 */ 48 */
49 49
50#include <openssl/fips.h> 50
51#include <openssl/rand.h> 51#include <openssl/rand.h>
52#include <openssl/fips_rand.h> 52#include <openssl/fips_rand.h>
53#include <openssl/err.h> 53#include <openssl/err.h>
54#include <openssl/bio.h> 54#include <openssl/bio.h>
55#include <openssl/hmac.h> 55#include <openssl/hmac.h>
56#include <openssl/rsa.h>
56#include <string.h> 57#include <string.h>
57#include <limits.h> 58#include <limits.h>
58#include "fips_locl.h" 59#include "fips_locl.h"
59 60
60#ifdef OPENSSL_FIPS 61#ifdef OPENSSL_FIPS
61 62
63#include <openssl/fips.h>
64
62#ifndef PATH_MAX 65#ifndef PATH_MAX
63#define PATH_MAX 1024 66#define PATH_MAX 1024
64#endif 67#endif
65 68
66static int fips_md5_allowed = 0; 69static int fips_selftest_fail;
67static int fips_selftest_fail = 0; 70static int fips_mode;
71static const void *fips_rand_check;
68 72
69void FIPS_allow_md5(int onoff) 73static void fips_set_mode(int onoff)
70 {
71 if (fips_is_started())
72 { 74 {
73 int owning_thread = fips_is_owning_thread(); 75 int owning_thread = fips_is_owning_thread();
74 76
75 if (!owning_thread) CRYPTO_w_lock(CRYPTO_LOCK_FIPS); 77 if (fips_is_started())
76 fips_md5_allowed = onoff; 78 {
77 if (!owning_thread) CRYPTO_w_unlock(CRYPTO_LOCK_FIPS); 79 if (!owning_thread) fips_w_lock();
80 fips_mode = onoff;
81 if (!owning_thread) fips_w_unlock();
82 }
78 } 83 }
79 }
80 84
81int FIPS_md5_allowed(void) 85static void fips_set_rand_check(const void *rand_check)
82 {
83 int ret = 1;
84 if (fips_is_started())
85 { 86 {
86 int owning_thread = fips_is_owning_thread(); 87 int owning_thread = fips_is_owning_thread();
87 88
88 if (!owning_thread) CRYPTO_r_lock(CRYPTO_LOCK_FIPS); 89 if (fips_is_started())
89 ret = fips_md5_allowed; 90 {
90 if (!owning_thread) CRYPTO_r_unlock(CRYPTO_LOCK_FIPS); 91 if (!owning_thread) fips_w_lock();
92 fips_rand_check = rand_check;
93 if (!owning_thread) fips_w_unlock();
94 }
95 }
96
97int FIPS_mode(void)
98 {
99 int ret = 0;
100 int owning_thread = fips_is_owning_thread();
101
102 if (fips_is_started())
103 {
104 if (!owning_thread) fips_r_lock();
105 ret = fips_mode;
106 if (!owning_thread) fips_r_unlock();
107 }
108 return ret;
109 }
110
111const void *FIPS_rand_check(void)
112 {
113 const void *ret = 0;
114 int owning_thread = fips_is_owning_thread();
115
116 if (fips_is_started())
117 {
118 if (!owning_thread) fips_r_lock();
119 ret = fips_rand_check;
120 if (!owning_thread) fips_r_unlock();
121 }
122 return ret;
91 } 123 }
92 return ret;
93 }
94 124
95int FIPS_selftest_failed(void) 125int FIPS_selftest_failed(void)
96 { 126 {
@@ -99,99 +129,134 @@ int FIPS_selftest_failed(void)
99 { 129 {
100 int owning_thread = fips_is_owning_thread(); 130 int owning_thread = fips_is_owning_thread();
101 131
102 if (!owning_thread) CRYPTO_r_lock(CRYPTO_LOCK_FIPS); 132 if (!owning_thread) fips_r_lock();
103 ret = fips_selftest_fail; 133 ret = fips_selftest_fail;
104 if (!owning_thread) CRYPTO_r_unlock(CRYPTO_LOCK_FIPS); 134 if (!owning_thread) fips_r_unlock();
105 } 135 }
106 return ret; 136 return ret;
107 } 137 }
108 138
139/* Selftest failure fatal exit routine. This will be called
140 * during *any* cryptographic operation. It has the minimum
141 * overhead possible to avoid too big a performance hit.
142 */
143
144void FIPS_selftest_check(void)
145 {
146 if (fips_selftest_fail)
147 {
148 OpenSSLDie(__FILE__,__LINE__, "FATAL FIPS SELFTEST FAILURE");
149 }
150 }
151
152void fips_set_selftest_fail(void)
153 {
154 fips_selftest_fail = 1;
155 }
156
109int FIPS_selftest() 157int FIPS_selftest()
110 { 158 {
111 ERR_load_crypto_strings();
112 159
113 return FIPS_selftest_sha1() 160 return FIPS_selftest_sha1()
161 && FIPS_selftest_hmac()
114 && FIPS_selftest_aes() 162 && FIPS_selftest_aes()
115 && FIPS_selftest_des() 163 && FIPS_selftest_des()
116 && FIPS_selftest_rsa() 164 && FIPS_selftest_rsa()
117 && FIPS_selftest_dsa(); 165 && FIPS_selftest_dsa();
118 } 166 }
119 167
120static int FIPS_check_exe(const char *path) 168extern const void *FIPS_text_start(), *FIPS_text_end();
169extern const unsigned char FIPS_rodata_start[], FIPS_rodata_end[];
170unsigned char FIPS_signature [20] = { 0 };
171static const char FIPS_hmac_key[]="etaonrishdlcupfm";
172
173unsigned int FIPS_incore_fingerprint(unsigned char *sig,unsigned int len)
121 { 174 {
122 unsigned char buf[1024]; 175 const unsigned char *p1 = FIPS_text_start();
123 char p2[PATH_MAX]; 176 const unsigned char *p2 = FIPS_text_end();
124 unsigned int n; 177 const unsigned char *p3 = FIPS_rodata_start;
125 unsigned char mdbuf[EVP_MAX_MD_SIZE]; 178 const unsigned char *p4 = FIPS_rodata_end;
126 FILE *f; 179 HMAC_CTX c;
127 static char key[]="etaonrishdlcupfm"; 180
128 HMAC_CTX hmac; 181 HMAC_CTX_init(&c);
129 const char *sha1_fmt="%s.sha1"; 182 HMAC_Init(&c,FIPS_hmac_key,strlen(FIPS_hmac_key),EVP_sha1());
130 183
131 f=fopen(path,"rb"); 184 /* detect overlapping regions */
132#ifdef __CYGWIN32__ 185 if (p1<=p3 && p2>=p3)
133 /* cygwin scrupulously strips .exe extentions:-( as of now it's 186 p3=p1, p4=p2>p4?p2:p4, p1=NULL, p2=NULL;
134 actually no point to attempt above fopen, but we keep the call 187 else if (p3<=p1 && p4>=p1)
135 just in case the behavior changes in the future... */ 188 p3=p3, p4=p2>p4?p2:p4, p1=NULL, p2=NULL;
136 if (!f) 189
190 if (p1)
191 HMAC_Update(&c,p1,(size_t)p2-(size_t)p1);
192
193 if (FIPS_signature>=p3 && FIPS_signature<p4)
137 { 194 {
138 sha1_fmt="%s.exe.sha1"; 195 /* "punch" hole */
139 BIO_snprintf(p2,sizeof p2,"%s.exe",path); 196 HMAC_Update(&c,p3,(size_t)FIPS_signature-(size_t)p3);
140 f=fopen(p2,"rb"); 197 p3 = FIPS_signature+sizeof(FIPS_signature);
198 if (p3<p4)
199 HMAC_Update(&c,p3,(size_t)p4-(size_t)p3);
141 } 200 }
201 else
202 HMAC_Update(&c,p3,(size_t)p4-(size_t)p3);
203
204 HMAC_Final(&c,sig,&len);
205 HMAC_CTX_cleanup(&c);
206
207 return len;
208 }
209
210int FIPS_check_incore_fingerprint(void)
211 {
212 unsigned char sig[EVP_MAX_MD_SIZE];
213 unsigned int len;
214#if defined(__sgi) && (defined(__mips) || defined(mips))
215 extern int __dso_displacement[];
216#else
217 extern int OPENSSL_NONPIC_relocated;
142#endif 218#endif
143 if(!f) 219
144 { 220 if (FIPS_text_start()==NULL)
145 FIPSerr(FIPS_F_FIPS_CHECK_EXE,FIPS_R_CANNOT_READ_EXE);
146 return 0;
147 }
148 HMAC_Init(&hmac,key,strlen(key),EVP_sha1());
149 while(!feof(f))
150 {
151 n=fread(buf,1,sizeof buf,f);
152 if(ferror(f))
153 {
154 clearerr(f);
155 fclose(f);
156 FIPSerr(FIPS_F_FIPS_CHECK_EXE,FIPS_R_CANNOT_READ_EXE);
157 return 0;
158 }
159 if (n) HMAC_Update(&hmac,buf,n);
160 }
161 fclose(f);
162 HMAC_Final(&hmac,mdbuf,&n);
163 HMAC_CTX_cleanup(&hmac);
164 BIO_snprintf(p2,sizeof p2,sha1_fmt,path);
165 f=fopen(p2,"rb");
166 if(!f || fread(buf,1,20,f) != 20)
167 { 221 {
168 if (f) fclose(f); 222 FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_UNSUPPORTED_PLATFORM);
169 FIPSerr(FIPS_F_FIPS_CHECK_EXE,FIPS_R_CANNOT_READ_EXE_DIGEST);
170 return 0; 223 return 0;
171 } 224 }
172 fclose(f); 225
173 if(memcmp(buf,mdbuf,20)) 226 len=FIPS_incore_fingerprint (sig,sizeof(sig));
227
228 if (len!=sizeof(FIPS_signature) ||
229 memcmp(FIPS_signature,sig,sizeof(FIPS_signature)))
174 { 230 {
175 FIPSerr(FIPS_F_FIPS_CHECK_EXE,FIPS_R_EXE_DIGEST_DOES_NOT_MATCH); 231 if (FIPS_signature>=FIPS_rodata_start && FIPS_signature<FIPS_rodata_end)
232 FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_FINGERPRINT_DOES_NOT_MATCH_SEGMENT_ALIASING);
233#if defined(__sgi) && (defined(__mips) || defined(mips))
234 else if (__dso_displacement!=NULL)
235#else
236 else if (OPENSSL_NONPIC_relocated)
237#endif
238 FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_FINGERPRINT_DOES_NOT_MATCH_NONPIC_RELOCATED);
239 else
240 FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_FINGERPRINT_DOES_NOT_MATCH);
176 return 0; 241 return 0;
177 } 242 }
243
178 return 1; 244 return 1;
179 } 245 }
180 246
181int FIPS_mode_set(int onoff,const char *path) 247int FIPS_mode_set(int onoff)
182 { 248 {
183 void fips_set_mode(int _onoff);
184 int fips_set_owning_thread(); 249 int fips_set_owning_thread();
185 int fips_clear_owning_thread(); 250 int fips_clear_owning_thread();
186 int ret = 0; 251 int ret = 0;
187 252
188 CRYPTO_w_lock(CRYPTO_LOCK_FIPS); 253 fips_w_lock();
189 fips_set_started(); 254 fips_set_started();
190 fips_set_owning_thread(); 255 fips_set_owning_thread();
191 256
192 if(onoff) 257 if(onoff)
193 { 258 {
194 unsigned char buf[24]; 259 unsigned char buf[48];
195 260
196 fips_selftest_fail = 0; 261 fips_selftest_fail = 0;
197 262
@@ -205,7 +270,33 @@ int FIPS_mode_set(int onoff,const char *path)
205 goto end; 270 goto end;
206 } 271 }
207 272
208 if(!FIPS_check_exe(path)) 273#ifdef OPENSSL_IA32_SSE2
274 if ((OPENSSL_ia32cap & (1<<25|1<<26)) != (1<<25|1<<26))
275 {
276 FIPSerr(FIPS_F_FIPS_MODE_SET,FIPS_R_UNSUPPORTED_PLATFORM);
277 fips_selftest_fail = 1;
278 ret = 0;
279 goto end;
280 }
281#endif
282
283 if(fips_signature_witness() != FIPS_signature)
284 {
285 FIPSerr(FIPS_F_FIPS_MODE_SET,FIPS_R_CONTRADICTING_EVIDENCE);
286 fips_selftest_fail = 1;
287 ret = 0;
288 goto end;
289 }
290
291 if(!FIPS_check_incore_fingerprint())
292 {
293 fips_selftest_fail = 1;
294 ret = 0;
295 goto end;
296 }
297
298 /* Perform RNG KAT before seeding */
299 if (!FIPS_selftest_rng())
209 { 300 {
210 fips_selftest_fail = 1; 301 fips_selftest_fail = 1;
211 ret = 0; 302 ret = 0;
@@ -213,7 +304,7 @@ int FIPS_mode_set(int onoff,const char *path)
213 } 304 }
214 305
215 /* automagically seed PRNG if not already seeded */ 306 /* automagically seed PRNG if not already seeded */
216 if(!FIPS_rand_seeded()) 307 if(!FIPS_rand_status())
217 { 308 {
218 if(RAND_bytes(buf,sizeof buf) <= 0) 309 if(RAND_bytes(buf,sizeof buf) <= 0)
219 { 310 {
@@ -221,8 +312,8 @@ int FIPS_mode_set(int onoff,const char *path)
221 ret = 0; 312 ret = 0;
222 goto end; 313 goto end;
223 } 314 }
224 FIPS_set_prng_key(buf,buf+8); 315 FIPS_rand_set_key(buf,32);
225 FIPS_rand_seed(buf+16,8); 316 FIPS_rand_seed(buf+32,16);
226 } 317 }
227 318
228 /* now switch into FIPS mode */ 319 /* now switch into FIPS mode */
@@ -244,17 +335,185 @@ int FIPS_mode_set(int onoff,const char *path)
244 ret = 1; 335 ret = 1;
245end: 336end:
246 fips_clear_owning_thread(); 337 fips_clear_owning_thread();
247 CRYPTO_w_unlock(CRYPTO_LOCK_FIPS); 338 fips_w_unlock();
248 return ret; 339 return ret;
249 } 340 }
250 341
342void fips_w_lock(void) { CRYPTO_w_lock(CRYPTO_LOCK_FIPS); }
343void fips_w_unlock(void) { CRYPTO_w_unlock(CRYPTO_LOCK_FIPS); }
344void fips_r_lock(void) { CRYPTO_r_lock(CRYPTO_LOCK_FIPS); }
345void fips_r_unlock(void) { CRYPTO_r_unlock(CRYPTO_LOCK_FIPS); }
346
347static int fips_started = 0;
348static unsigned long fips_thread = 0;
349
350void fips_set_started(void)
351 {
352 fips_started = 1;
353 }
354
355int fips_is_started(void)
356 {
357 return fips_started;
358 }
359
360int fips_is_owning_thread(void)
361 {
362 int ret = 0;
363
364 if (fips_is_started())
365 {
366 CRYPTO_r_lock(CRYPTO_LOCK_FIPS2);
367 if (fips_thread != 0 && fips_thread == CRYPTO_thread_id())
368 ret = 1;
369 CRYPTO_r_unlock(CRYPTO_LOCK_FIPS2);
370 }
371 return ret;
372 }
373
374int fips_set_owning_thread(void)
375 {
376 int ret = 0;
377
378 if (fips_is_started())
379 {
380 CRYPTO_w_lock(CRYPTO_LOCK_FIPS2);
381 if (fips_thread == 0)
382 {
383 fips_thread = CRYPTO_thread_id();
384 ret = 1;
385 }
386 CRYPTO_w_unlock(CRYPTO_LOCK_FIPS2);
387 }
388 return ret;
389 }
390
391int fips_clear_owning_thread(void)
392 {
393 int ret = 0;
394
395 if (fips_is_started())
396 {
397 CRYPTO_w_lock(CRYPTO_LOCK_FIPS2);
398 if (fips_thread == CRYPTO_thread_id())
399 {
400 fips_thread = 0;
401 ret = 1;
402 }
403 CRYPTO_w_unlock(CRYPTO_LOCK_FIPS2);
404 }
405 return ret;
406 }
407
408unsigned char *fips_signature_witness(void)
409 {
410 extern unsigned char FIPS_signature[];
411 return FIPS_signature;
412 }
413
414/* Generalized public key test routine. Signs and verifies the data
415 * supplied in tbs using mesage digest md and setting option digest
416 * flags md_flags. If the 'kat' parameter is not NULL it will
417 * additionally check the signature matches it: a known answer test
418 * The string "fail_str" is used for identification purposes in case
419 * of failure.
420 */
421
422int fips_pkey_signature_test(EVP_PKEY *pkey,
423 const unsigned char *tbs, int tbslen,
424 const unsigned char *kat, unsigned int katlen,
425 const EVP_MD *digest, unsigned int md_flags,
426 const char *fail_str)
427 {
428 int ret = 0;
429 unsigned char sigtmp[256], *sig = sigtmp;
430 unsigned int siglen;
431 EVP_MD_CTX mctx;
432 EVP_MD_CTX_init(&mctx);
433
434 if ((pkey->type == EVP_PKEY_RSA)
435 && (RSA_size(pkey->pkey.rsa) > sizeof(sigtmp)))
436 {
437 sig = OPENSSL_malloc(RSA_size(pkey->pkey.rsa));
438 if (!sig)
439 {
440 FIPSerr(FIPS_F_FIPS_PKEY_SIGNATURE_TEST,ERR_R_MALLOC_FAILURE);
441 return 0;
442 }
443 }
444
445 if (tbslen == -1)
446 tbslen = strlen((char *)tbs);
447
448 if (md_flags)
449 M_EVP_MD_CTX_set_flags(&mctx, md_flags);
450
451 if (!EVP_SignInit_ex(&mctx, digest, NULL))
452 goto error;
453 if (!EVP_SignUpdate(&mctx, tbs, tbslen))
454 goto error;
455 if (!EVP_SignFinal(&mctx, sig, &siglen, pkey))
456 goto error;
457
458 if (kat && ((siglen != katlen) || memcmp(kat, sig, katlen)))
459 goto error;
460
461 if (!EVP_VerifyInit_ex(&mctx, digest, NULL))
462 goto error;
463 if (!EVP_VerifyUpdate(&mctx, tbs, tbslen))
464 goto error;
465 ret = EVP_VerifyFinal(&mctx, sig, siglen, pkey);
466
467 error:
468 if (sig != sigtmp)
469 OPENSSL_free(sig);
470 EVP_MD_CTX_cleanup(&mctx);
471 if (ret != 1)
472 {
473 FIPSerr(FIPS_F_FIPS_PKEY_SIGNATURE_TEST,FIPS_R_TEST_FAILURE);
474 if (fail_str)
475 ERR_add_error_data(2, "Type=", fail_str);
476 return 0;
477 }
478 return 1;
479 }
480
481/* Generalized symmetric cipher test routine. Encrypt data, verify result
482 * against known answer, decrypt and compare with original plaintext.
483 */
484
485int fips_cipher_test(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
486 const unsigned char *key,
487 const unsigned char *iv,
488 const unsigned char *plaintext,
489 const unsigned char *ciphertext,
490 int len)
491 {
492 unsigned char pltmp[FIPS_MAX_CIPHER_TEST_SIZE];
493 unsigned char citmp[FIPS_MAX_CIPHER_TEST_SIZE];
494 OPENSSL_assert(len <= FIPS_MAX_CIPHER_TEST_SIZE);
495 if (EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, 1) <= 0)
496 return 0;
497 EVP_Cipher(ctx, citmp, plaintext, len);
498 if (memcmp(citmp, ciphertext, len))
499 return 0;
500 if (EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, 0) <= 0)
501 return 0;
502 EVP_Cipher(ctx, pltmp, citmp, len);
503 if (memcmp(pltmp, plaintext, len))
504 return 0;
505 return 1;
506 }
507
251#if 0 508#if 0
252/* here just to cause error codes to exist */ 509/* The purpose of this is to ensure the error code exists and the function
253static void dummy() 510 * name is to keep the error checking script quiet
254 { 511 */
255 FIPSerr(FIPS_F_HASH_FINAL,FIPS_F_NON_FIPS_METHOD); 512void hash_final(void)
256 FIPSerr(FIPS_F_HASH_FINAL,FIPS_R_FIPS_SELFTEST_FAILED); 513 {
257 } 514 FIPSerr(FIPS_F_HASH_FINAL,FIPS_R_NON_FIPS_METHOD);
515 }
258#endif 516#endif
259 517
518
260#endif 519#endif
diff --git a/src/lib/libssl/src/fips/fips.h b/src/lib/libssl/src/fips/fips.h
index a4df06b148..42bdcf2596 100644
--- a/src/lib/libssl/src/fips/fips.h
+++ b/src/lib/libssl/src/fips/fips.h
@@ -49,22 +49,27 @@
49 49
50#include <openssl/opensslconf.h> 50#include <openssl/opensslconf.h>
51 51
52#ifndef OPENSSL_FIPS
53#error FIPS is disabled.
54#endif
55
52#ifdef OPENSSL_FIPS 56#ifdef OPENSSL_FIPS
53 57
54#ifdef __cplusplus 58#ifdef __cplusplus
55extern "C" { 59extern "C" {
56#endif 60#endif
57 61
58/* Note that these are defined in crypto/cryptlib.c so they're
59 * available even without -lfips.
60 */
61struct dsa_st; 62struct dsa_st;
63struct evp_pkey_st;
64struct env_md_st;
65struct evp_cipher_st;
66struct evp_cipher_ctx_st;
62 67
63int FIPS_mode_set(int onoff,const char *path); 68int FIPS_mode_set(int onoff);
64void FIPS_allow_md5(int onoff); 69int FIPS_mode(void);
65int FIPS_md5_allowed(void); 70const void *FIPS_rand_check(void);
66int FIPS_selftest_failed(void); 71int FIPS_selftest_failed(void);
67int FIPS_dsa_check(struct dsa_st *dsa); 72void FIPS_selftest_check(void);
68void FIPS_corrupt_sha1(void); 73void FIPS_corrupt_sha1(void);
69int FIPS_selftest_sha1(void); 74int FIPS_selftest_sha1(void);
70void FIPS_corrupt_aes(void); 75void FIPS_corrupt_aes(void);
@@ -72,14 +77,29 @@ int FIPS_selftest_aes(void);
72void FIPS_corrupt_des(void); 77void FIPS_corrupt_des(void);
73int FIPS_selftest_des(void); 78int FIPS_selftest_des(void);
74void FIPS_corrupt_rsa(void); 79void FIPS_corrupt_rsa(void);
80void FIPS_corrupt_rsa_keygen(void);
75int FIPS_selftest_rsa(void); 81int FIPS_selftest_rsa(void);
76void FIPS_corrupt_dsa(void); 82void FIPS_corrupt_dsa(void);
83void FIPS_corrupt_dsa_keygen(void);
77int FIPS_selftest_dsa(void); 84int FIPS_selftest_dsa(void);
85void FIPS_corrupt_rng(void);
86void FIPS_rng_stick(void);
87int FIPS_selftest_rng(void);
88int FIPS_selftest_hmac(void);
78 89
79/* The following lines are auto generated by the script mkerr.pl. Any changes 90int fips_pkey_signature_test(struct evp_pkey_st *pkey,
80 * made after this point may be overwritten when the script is next run. 91 const unsigned char *tbs, int tbslen,
81 */ 92 const unsigned char *kat, unsigned int katlen,
82void ERR_load_FIPS_strings(void); 93 const struct env_md_st *digest, unsigned int md_flags,
94 const char *fail_str);
95
96int fips_cipher_test(struct evp_cipher_ctx_st *ctx,
97 const struct evp_cipher_st *cipher,
98 const unsigned char *key,
99 const unsigned char *iv,
100 const unsigned char *plaintext,
101 const unsigned char *ciphertext,
102 int len);
83 103
84/* BEGIN ERROR CODES */ 104/* BEGIN ERROR CODES */
85/* The following lines are auto generated by the script mkerr.pl. Any changes 105/* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -90,34 +110,52 @@ void ERR_load_FIPS_strings(void);
90/* Error codes for the FIPS functions. */ 110/* Error codes for the FIPS functions. */
91 111
92/* Function codes. */ 112/* Function codes. */
93#define FIPS_F_DSA_DO_SIGN 111 113#define FIPS_F_DH_BUILTIN_GENPARAMS 100
94#define FIPS_F_DSA_DO_VERIFY 112 114#define FIPS_F_DSA_BUILTIN_PARAMGEN 101
95#define FIPS_F_DSA_GENERATE_PARAMETERS 110 115#define FIPS_F_DSA_DO_SIGN 102
96#define FIPS_F_FIPS_CHECK_DSA 116 116#define FIPS_F_DSA_DO_VERIFY 103
97#define FIPS_F_FIPS_CHECK_EXE 106 117#define FIPS_F_EVP_CIPHERINIT_EX 124
98#define FIPS_F_FIPS_CHECK_RSA 115 118#define FIPS_F_EVP_DIGESTINIT_EX 125
99#define FIPS_F_FIPS_DSA_CHECK 102 119#define FIPS_F_FIPS_CHECK_DSA 104
100#define FIPS_F_FIPS_MODE_SET 105 120#define FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT 105
101#define FIPS_F_FIPS_SELFTEST_AES 104 121#define FIPS_F_FIPS_CHECK_RSA 106
102#define FIPS_F_FIPS_SELFTEST_DES 107 122#define FIPS_F_FIPS_DSA_CHECK 107
103#define FIPS_F_FIPS_SELFTEST_DSA 109 123#define FIPS_F_FIPS_MODE_SET 108
104#define FIPS_F_FIPS_SELFTEST_RSA 108 124#define FIPS_F_FIPS_PKEY_SIGNATURE_TEST 109
105#define FIPS_F_FIPS_SELFTEST_SHA1 103 125#define FIPS_F_FIPS_SELFTEST_AES 110
106#define FIPS_F_HASH_FINAL 100 126#define FIPS_F_FIPS_SELFTEST_DES 111
107#define FIPS_F_DH_GENERATE_PARAMETERS 117 127#define FIPS_F_FIPS_SELFTEST_DSA 112
108#define FIPS_F_RSA_EAY_PUBLIC_ENCRYPT 114 128#define FIPS_F_FIPS_SELFTEST_HMAC 113
109#define FIPS_F_RSA_GENERATE_KEY 113 129#define FIPS_F_FIPS_SELFTEST_RNG 114
110#define FIPS_F_SSLEAY_RAND_BYTES 101 130#define FIPS_F_FIPS_SELFTEST_SHA1 115
131#define FIPS_F_HASH_FINAL 123
132#define FIPS_F_RSA_BUILTIN_KEYGEN 116
133#define FIPS_F_RSA_EAY_PRIVATE_DECRYPT 117
134#define FIPS_F_RSA_EAY_PRIVATE_ENCRYPT 118
135#define FIPS_F_RSA_EAY_PUBLIC_DECRYPT 119
136#define FIPS_F_RSA_EAY_PUBLIC_ENCRYPT 120
137#define FIPS_F_RSA_X931_GENERATE_KEY_EX 121
138#define FIPS_F_SSLEAY_RAND_BYTES 122
111 139
112/* Reason codes. */ 140/* Reason codes. */
113#define FIPS_R_CANNOT_READ_EXE 103 141#define FIPS_R_CANNOT_READ_EXE 103
114#define FIPS_R_CANNOT_READ_EXE_DIGEST 104 142#define FIPS_R_CANNOT_READ_EXE_DIGEST 104
143#define FIPS_R_CONTRADICTING_EVIDENCE 114
115#define FIPS_R_EXE_DIGEST_DOES_NOT_MATCH 105 144#define FIPS_R_EXE_DIGEST_DOES_NOT_MATCH 105
145#define FIPS_R_FINGERPRINT_DOES_NOT_MATCH 110
146#define FIPS_R_FINGERPRINT_DOES_NOT_MATCH_NONPIC_RELOCATED 111
147#define FIPS_R_FINGERPRINT_DOES_NOT_MATCH_SEGMENT_ALIASING 112
116#define FIPS_R_FIPS_MODE_ALREADY_SET 102 148#define FIPS_R_FIPS_MODE_ALREADY_SET 102
117#define FIPS_R_FIPS_SELFTEST_FAILED 106 149#define FIPS_R_FIPS_SELFTEST_FAILED 106
150#define FIPS_R_INVALID_KEY_LENGTH 109
151#define FIPS_R_KEY_TOO_SHORT 108
118#define FIPS_R_NON_FIPS_METHOD 100 152#define FIPS_R_NON_FIPS_METHOD 100
119#define FIPS_R_PAIRWISE_TEST_FAILED 107 153#define FIPS_R_PAIRWISE_TEST_FAILED 107
154#define FIPS_R_RSA_DECRYPT_ERROR 115
155#define FIPS_R_RSA_ENCRYPT_ERROR 116
120#define FIPS_R_SELFTEST_FAILED 101 156#define FIPS_R_SELFTEST_FAILED 101
157#define FIPS_R_TEST_FAILURE 117
158#define FIPS_R_UNSUPPORTED_PLATFORM 113
121 159
122#ifdef __cplusplus 160#ifdef __cplusplus
123} 161}
diff --git a/src/lib/libssl/src/fips/fips_canister.c b/src/lib/libssl/src/fips/fips_canister.c
new file mode 100644
index 0000000000..64580694c4
--- /dev/null
+++ b/src/lib/libssl/src/fips/fips_canister.c
@@ -0,0 +1,186 @@
1/* ====================================================================
2 * Copyright (c) 2005 The OpenSSL Project. Rights for redistribution
3 * and usage in source and binary forms are granted according to the
4 * OpenSSL license.
5 */
6
7#include <stdio.h>
8#if defined(__DECC)
9# include <c_asm.h>
10# pragma __nostandard
11#endif
12
13#include "e_os.h"
14
15#if !defined(POINTER_TO_FUNCTION_IS_POINTER_TO_1ST_INSTRUCTION)
16# if (defined(__sun) && (defined(__sparc) || defined(__sparcv9))) || \
17 (defined(__sgi) && (defined(__mips) || defined(mips))) || \
18 (defined(__osf__) && defined(__alpha)) || \
19 (defined(__linux) && (defined(__arm) || defined(__arm__))) || \
20 (defined(__i386) || defined(__i386__)) || \
21 (defined(__x86_64) || defined(__x86_64__)) || \
22 (defined(vax) || defined(__vax__))
23# define POINTER_TO_FUNCTION_IS_POINTER_TO_1ST_INSTRUCTION
24# endif
25#endif
26
27#if defined(__xlC__) && __xlC__>=0x600 && (defined(_POWER) || defined(_ARCH_PPC))
28static void *instruction_pointer_xlc(void);
29# pragma mc_func instruction_pointer_xlc {\
30 "7c0802a6" /* mflr r0 */ \
31 "48000005" /* bl $+4 */ \
32 "7c6802a6" /* mflr r3 */ \
33 "7c0803a6" /* mtlr r0 */ }
34# pragma reg_killed_by instruction_pointer_xlc gr0 gr3
35# define INSTRUCTION_POINTER_IMPLEMENTED(ret) (ret=instruction_pointer_xlc());
36#endif
37
38#ifdef FIPS_START
39#define FIPS_ref_point FIPS_text_start
40/* Some compilers put string literals into a separate segment. As we
41 * are mostly interested to hash AES tables in .rodata, we declare
42 * reference points accordingly. In case you wonder, the values are
43 * big-endian encoded variable names, just to prevent these arrays
44 * from being merged by linker. */
45const unsigned int FIPS_rodata_start[]=
46 { 0x46495053, 0x5f726f64, 0x6174615f, 0x73746172 };
47#else
48#define FIPS_ref_point FIPS_text_end
49const unsigned int FIPS_rodata_end[]=
50 { 0x46495053, 0x5f726f64, 0x6174615f, 0x656e645b };
51#endif
52
53/*
54 * I declare reference function as static in order to avoid certain
55 * pitfalls in -dynamic linker behaviour...
56 */
57static void *instruction_pointer(void)
58{ void *ret=NULL;
59/* These are ABI-neutral CPU-specific snippets. ABI-neutrality means
60 * that they are designed to work under any OS running on particular
61 * CPU, which is why you don't find any #ifdef THIS_OR_THAT_OS in
62 * this function. */
63#if defined(INSTRUCTION_POINTER_IMPLEMENTED)
64 INSTRUCTION_POINTER_IMPLEMENTED(ret);
65#elif defined(__GNUC__) && __GNUC__>=2
66# if defined(__alpha) || defined(__alpha__)
67# define INSTRUCTION_POINTER_IMPLEMENTED
68 __asm __volatile ( "br %0,1f\n1:" : "=r"(ret) );
69# elif defined(__i386) || defined(__i386__)
70# define INSTRUCTION_POINTER_IMPLEMENTED
71 __asm __volatile ( "call 1f\n1: popl %0" : "=r"(ret) );
72 ret = (void *)((size_t)ret&~3UL); /* align for better performance */
73# elif defined(__ia64) || defined(__ia64__)
74# define INSTRUCTION_POINTER_IMPLEMENTED
75 __asm __volatile ( "mov %0=ip" : "=r"(ret) );
76# elif defined(__hppa) || defined(__hppa__) || defined(__pa_risc)
77# define INSTRUCTION_POINTER_IMPLEMENTED
78 __asm __volatile ( "blr %%r0,%0\n\tnop" : "=r"(ret) );
79 ret = (void *)((size_t)ret&~3UL); /* mask privilege level */
80# elif defined(__mips) || defined(__mips__)
81# define INSTRUCTION_POINTER_IMPLEMENTED
82 void *scratch;
83 __asm __volatile ( "move %1,$31\n\t" /* save ra */
84 "bal .+8; nop\n\t"
85 "move %0,$31\n\t"
86 "move $31,%1" /* restore ra */
87 : "=r"(ret),"=r"(scratch) );
88# elif defined(__ppc__) || defined(__powerpc) || defined(__powerpc__) || \
89 defined(__POWERPC__) || defined(_POWER) || defined(__PPC__) || \
90 defined(__PPC64__) || defined(__powerpc64__)
91# define INSTRUCTION_POINTER_IMPLEMENTED
92 void *scratch;
93 __asm __volatile ( "mfspr %1,8\n\t" /* save lr */
94 "bl $+4\n\t"
95 "mfspr %0,8\n\t" /* mflr ret */
96 "mtspr 8,%1" /* restore lr */
97 : "=r"(ret),"=r"(scratch) );
98# elif defined(__s390__) || defined(__s390x__)
99# define INSTRUCTION_POINTER_IMPLEMENTED
100 __asm __volatile ( "bras %0,1f\n1:" : "=r"(ret) );
101 ret = (void *)((size_t)ret&~3UL);
102# elif defined(__sparc) || defined(__sparc__) || defined(__sparcv9)
103# define INSTRUCTION_POINTER_IMPLEMENTED
104 void *scratch;
105 __asm __volatile ( "mov %%o7,%1\n\t"
106 "call .+8; nop\n\t"
107 "mov %%o7,%0\n\t"
108 "mov %1,%%o7"
109 : "=r"(ret),"=r"(scratch) );
110# elif defined(__x86_64) || defined(__x86_64__)
111# define INSTRUCTION_POINTER_IMPLEMENTED
112 __asm __volatile ( "leaq 0(%%rip),%0" : "=r"(ret) );
113 ret = (void *)((size_t)ret&~3UL); /* align for better performance */
114# endif
115#elif defined(__DECC) && defined(__alpha)
116# define INSTRUCTION_POINTER_IMPLEMENTED
117 ret = (void *)(size_t)asm("br %v0,1f\n1:");
118#elif defined(_MSC_VER) && defined(_M_IX86)
119# define INSTRUCTION_POINTER_IMPLEMENTED
120 void *scratch;
121 _asm {
122 call self
123 self: pop eax
124 mov scratch,eax
125 }
126 ret = (void *)((size_t)scratch&~3UL);
127#endif
128 return ret;
129}
130
131/*
132 * This function returns pointer to an instruction in the vicinity of
133 * its entry point, but not outside this object module. This guarantees
134 * that sequestered code is covered...
135 */
136void *FIPS_ref_point()
137{
138#if defined(INSTRUCTION_POINTER_IMPLEMENTED)
139 return instruction_pointer();
140/* Below we essentially cover vendor compilers which do not support
141 * inline assembler... */
142#elif defined(_AIX)
143 struct { void *ip,*gp,*env; } *p = (void *)instruction_pointer;
144 return p->ip;
145#elif defined(_HPUX_SOURCE)
146# if defined(__hppa) || defined(__hppa__)
147 struct { void *i[4]; } *p = (void *)FIPS_ref_point;
148
149 if (sizeof(p) == 8) /* 64-bit */
150 return p->i[2];
151 else if ((size_t)p & 2)
152 { p = (void *)((size_t)p&~3UL);
153 return p->i[0];
154 }
155 else
156 return (void *)p;
157# elif defined(__ia64) || defined(__ia64__)
158 struct { unsigned long long ip,gp; } *p=(void *)instruction_pointer;
159 return (void *)(size_t)p->ip;
160# endif
161#elif (defined(__VMS) || defined(VMS)) && !(defined(vax) || defined(__vax__))
162 /* applies to both alpha and ia64 */
163 struct { unsigned __int64 opaque,ip; } *p=(void *)instruction_pointer;
164 return (void *)(size_t)p->ip;
165#elif defined(__VOS__)
166 /* applies to both pa-risc and ia32 */
167 struct { void *dp,*ip,*gp; } *p = (void *)instruction_pointer;
168 return p->ip;
169#elif defined(_WIN32)
170# if defined(_WIN64) && defined(_M_IA64)
171 struct { void *ip,*gp; } *p = (void *)FIPS_ref_point;
172 return p->ip;
173# else
174 return (void *)FIPS_ref_point;
175# endif
176/*
177 * In case you wonder why there is no #ifdef __linux. All Linux targets
178 * are GCC-based and therefore are covered by instruction_pointer above
179 * [well, some are covered by by the one below]...
180 */
181#elif defined(POINTER_TO_FUNCTION_IS_POINTER_TO_1ST_INSTRUCTION)
182 return (void *)instruction_pointer;
183#else
184 return NULL;
185#endif
186}
diff --git a/src/lib/libssl/src/fips/fips_locl.h b/src/lib/libssl/src/fips/fips_locl.h
index 215e382549..03fed36e3c 100644
--- a/src/lib/libssl/src/fips/fips_locl.h
+++ b/src/lib/libssl/src/fips/fips_locl.h
@@ -53,13 +53,19 @@
53extern "C" { 53extern "C" {
54#endif 54#endif
55 55
56/* These are really defined in crypto/cryptlib.c */ 56void fips_w_lock(void);
57void fips_set_started(void); 57void fips_w_unlock(void);
58void fips_r_lock(void);
59void fips_r_unlock(void);
58int fips_is_started(void); 60int fips_is_started(void);
61void fips_set_started(void);
59int fips_is_owning_thread(void); 62int fips_is_owning_thread(void);
60int fips_set_owning_thread(void); 63int fips_set_owning_thread(void);
64void fips_set_selftest_fail(void);
61int fips_clear_owning_thread(void); 65int fips_clear_owning_thread(void);
62void fips_set_rand_check(void *rand_check); 66unsigned char *fips_signature_witness(void);
67
68#define FIPS_MAX_CIPHER_TEST_SIZE 16
63 69
64#ifdef __cplusplus 70#ifdef __cplusplus
65} 71}
diff --git a/src/lib/libssl/src/fips/fips_premain.c b/src/lib/libssl/src/fips/fips_premain.c
new file mode 100644
index 0000000000..165d2c5dc9
--- /dev/null
+++ b/src/lib/libssl/src/fips/fips_premain.c
@@ -0,0 +1,176 @@
1/* ====================================================================
2 * Copyright (c) 2005 The OpenSSL Project. Rights for redistribution
3 * and usage in source and binary forms are granted according to the
4 * OpenSSL license.
5 */
6
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10#if defined(__unix) || defined(__unix__)
11#include <unistd.h>
12#endif
13
14#ifndef FINGERPRINT_PREMAIN_DSO_LOAD
15
16#if defined(__GNUC__) && __GNUC__>=2
17 void FINGERPRINT_premain(void) __attribute__((constructor));
18 /* Most commonly this results in pointer to premain to be dropped
19 * to .ctors segment, which is traversed by GCC crtbegin.o upon
20 * program startup. Except on a.out OpenBSD where it results in
21 * _GLOBAL_$I$premain() {premain();} being auto-generated by
22 * compiler... But one way or another this is believed to cover
23 * *all* GCC targets. */
24#elif defined(_MSC_VER)
25# ifdef _WINDLL
26 __declspec(dllexport) /* this is essentially cosmetics... */
27# endif
28 void FINGERPRINT_premain(void);
29 static int premain_wrapper(void) { FINGERPRINT_premain(); return 0; }
30# ifdef _WIN64
31# pragma section(".CRT$XCU",read)
32 __declspec(allocate(".CRT$XCU"))
33# else
34# pragma data_seg(".CRT$XCU")
35# endif
36 static int (*p)(void) = premain_wrapper;
37 /* This results in pointer to premain to appear in .CRT segment,
38 * which is traversed by Visual C run-time initialization code.
39 * This applies to both Win32 and [all flavors of] Win64. */
40# pragma data_seg()
41#elif defined(__SUNPRO_C)
42 void FINGERPRINT_premain(void);
43# pragma init(FINGERPRINT_premain)
44 /* This results in a call to premain to appear in .init segment. */
45#elif defined(__DECC) && (defined(__VMS) || defined(VMS))
46 void FINGERPRINT_premain(void);
47# pragma __nostandard
48 globaldef { "LIB$INITIALIZ" } readonly _align (LONGWORD)
49 int spare[8] = {0};
50 globaldef { "LIB$INITIALIZE" } readonly _align (LONGWORD)
51 void (*x_FINGERPRINT_premain)(void) = FINGERPRINT_premain;
52 /* Refer to LIB$INITIALIZE to ensure it exists in the image. */
53 int lib$initialize();
54 globaldef int (*lib_init_ref)() = lib$initialize;
55# pragma __standard
56#elif 0
57 The rest has to be taken care of through command line:
58
59 -Wl,-init,FINGERPRINT_premain on OSF1 and IRIX
60 -Wl,+init,FINGERPRINT_premain on HP-UX
61 -Wl,-binitfini:FINGERPRINT_premain on AIX
62
63 On ELF platforms this results in a call to premain to appear in
64 .init segment...
65#endif
66
67#ifndef HMAC_SHA1_SIG
68#define HMAC_SHA1_SIG "?have to make sure this string is unique"
69#endif
70
71static const unsigned char FINGERPRINT_ascii_value[40] = HMAC_SHA1_SIG;
72
73#define atox(c) ((c)>='a'?((c)-'a'+10):((c)>='A'?(c)-'A'+10:(c)-'0'))
74
75extern const void *FIPS_text_start(), *FIPS_text_end();
76extern const unsigned char FIPS_rodata_start[], FIPS_rodata_end[];
77extern unsigned char FIPS_signature[20];
78extern unsigned int FIPS_incore_fingerprint(unsigned char *,unsigned int);
79
80/*
81 * As name suggests this code is executed prior main(). We use this
82 * opportunity to fingerprint sequestered code in virtual address
83 * space of target application.
84 */
85void FINGERPRINT_premain(void)
86{ unsigned char sig[sizeof(FIPS_signature)];
87 const unsigned char * volatile p=FINGERPRINT_ascii_value;
88 unsigned int len=sizeof(sig),i;
89
90 /* "volatilization" is done to disengage unwanted optimization... */
91 if (*((volatile unsigned char *)p)=='?')
92 { if (FIPS_text_start()==NULL)
93 { fprintf(stderr,"FIPS_text_start() returns NULL\n");
94 _exit(1);
95 }
96#if defined(DEBUG_FINGERPRINT_PREMAIN)
97 fprintf(stderr,".text:%p+%d=%p\n",FIPS_text_start(),
98 (int)((size_t)FIPS_text_end()-(size_t)FIPS_text_start()),
99 FIPS_text_end());
100 fprintf(stderr,".rodata:%p+%d=%p\n",FIPS_rodata_start,
101 (int)((size_t)FIPS_rodata_end-(size_t)FIPS_rodata_start),
102 FIPS_rodata_end);
103#endif
104
105 len=FIPS_incore_fingerprint(sig,sizeof(sig));
106
107 if (len!=sizeof(sig))
108 { fprintf(stderr,"fingerprint length mismatch: %u\n",len);
109 _exit(1);
110 }
111
112 for (i=0;i<len;i++) printf("%02x",sig[i]);
113 printf("\n");
114 fflush(stdout);
115 _exit(0);
116 }
117 else if (FIPS_signature[0]=='\0') do
118 { for (i=0;i<sizeof(FIPS_signature);i++,p+=2)
119 FIPS_signature[i] = (atox(p[0])<<4)|atox(p[1]);
120
121#if defined(DEBUG_FINGERPRINT_PREMAIN)
122 if (getenv("OPENSSL_FIPS")==NULL) break;
123
124 len=FIPS_incore_fingerprint(sig,sizeof(sig));
125
126 if (memcmp(FIPS_signature,sig,sizeof(FIPS_signature)))
127 { fprintf(stderr,"FINGERPRINT_premain: FIPS_signature mismatch\n");
128 _exit(1);
129 }
130#endif
131 } while(0);
132}
133
134#else
135
136#include <openssl/bio.h>
137#include <openssl/dso.h>
138#include <openssl/err.h>
139
140int main(int argc,char *argv[])
141{ DSO *dso;
142 DSO_FUNC_TYPE func;
143 BIO *bio_err;
144
145 if (argc < 2)
146 { fprintf (stderr,"usage: %s libcrypto.dso\n",argv[0]);
147 return 1;
148 }
149
150 if ((bio_err=BIO_new(BIO_s_file())) == NULL)
151 { fprintf (stderr,"unable to allocate BIO\n");
152 return 1;
153 }
154 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
155 ERR_load_crypto_strings();
156
157 dso = DSO_load(NULL,argv[1],NULL,DSO_FLAG_NO_NAME_TRANSLATION);
158 if (dso == NULL)
159 { ERR_print_errors(bio_err);
160 return 1;
161 }
162
163 /* This is not normally reached, because FINGERPRINT_premain should
164 * have executed and terminated application already upon DSO_load... */
165 func = DSO_bind_func(dso,"FINGERPRINT_premain");
166 if (func == NULL)
167 { ERR_print_errors(bio_err);
168 return 1;
169 }
170
171 (*func)();
172
173 return 0;
174}
175
176#endif
diff --git a/src/lib/libssl/src/fips/fips_premain.c.sha1 b/src/lib/libssl/src/fips/fips_premain.c.sha1
new file mode 100644
index 0000000000..c16f964bb8
--- /dev/null
+++ b/src/lib/libssl/src/fips/fips_premain.c.sha1
@@ -0,0 +1 @@
HMAC-SHA1(fips_premain.c)= 9e5ddba185ac446e0cf36fcf8e1b3acffe5d0b2c
diff --git a/src/lib/libssl/src/fips/fips_test_suite.c b/src/lib/libssl/src/fips/fips_test_suite.c
index 60ee8d856b..78a15b7758 100644
--- a/src/lib/libssl/src/fips/fips_test_suite.c
+++ b/src/lib/libssl/src/fips/fips_test_suite.c
@@ -20,12 +20,15 @@
20#include <openssl/des.h> 20#include <openssl/des.h>
21#include <openssl/rsa.h> 21#include <openssl/rsa.h>
22#include <openssl/dsa.h> 22#include <openssl/dsa.h>
23#include <openssl/sha.h> 23#include <openssl/dh.h>
24#include <openssl/md5.h> 24#include <openssl/hmac.h>
25#include <openssl/err.h> 25#include <openssl/err.h>
26#include <openssl/fips.h> 26
27#include <openssl/bn.h> 27#include <openssl/bn.h>
28#include <openssl/rand.h> 28#include <openssl/rand.h>
29#include <openssl/sha.h>
30
31
29#ifndef OPENSSL_FIPS 32#ifndef OPENSSL_FIPS
30int main(int argc, char *argv[]) 33int main(int argc, char *argv[])
31 { 34 {
@@ -34,150 +37,338 @@ int main(int argc, char *argv[])
34 } 37 }
35#else 38#else
36 39
40#include <openssl/fips.h>
41#include "fips_utl.h"
42
37/* AES: encrypt and decrypt known plaintext, verify result matches original plaintext 43/* AES: encrypt and decrypt known plaintext, verify result matches original plaintext
38*/ 44*/
39static int FIPS_aes_test() 45static int FIPS_aes_test(void)
46 {
47 int ret = 0;
48 unsigned char pltmp[16];
49 unsigned char citmp[16];
50 unsigned char key[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
51 unsigned char plaintext[16] = "etaonrishdlcu";
52 EVP_CIPHER_CTX ctx;
53 EVP_CIPHER_CTX_init(&ctx);
54 if (EVP_CipherInit_ex(&ctx, EVP_aes_128_ecb(),NULL, key, NULL, 1) <= 0)
55 goto err;
56 EVP_Cipher(&ctx, citmp, plaintext, 16);
57 if (EVP_CipherInit_ex(&ctx, EVP_aes_128_ecb(),NULL, key, NULL, 0) <= 0)
58 goto err;
59 EVP_Cipher(&ctx, pltmp, citmp, 16);
60 if (memcmp(pltmp, plaintext, 16))
61 goto err;
62 ret = 1;
63 err:
64 EVP_CIPHER_CTX_cleanup(&ctx);
65 return ret;
66 }
67
68static int FIPS_des3_test(void)
69 {
70 int ret = 0;
71 unsigned char pltmp[8];
72 unsigned char citmp[8];
73 unsigned char key[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
74 19,20,21,22,23,24};
75 unsigned char plaintext[] = { 'e', 't', 'a', 'o', 'n', 'r', 'i', 's' };
76 EVP_CIPHER_CTX ctx;
77 EVP_CIPHER_CTX_init(&ctx);
78 if (EVP_CipherInit_ex(&ctx, EVP_des_ede3_ecb(),NULL, key, NULL, 1) <= 0)
79 goto err;
80 EVP_Cipher(&ctx, citmp, plaintext, 8);
81 if (EVP_CipherInit_ex(&ctx, EVP_des_ede3_ecb(),NULL, key, NULL, 0) <= 0)
82 goto err;
83 EVP_Cipher(&ctx, pltmp, citmp, 8);
84 if (memcmp(pltmp, plaintext, 8))
85 goto err;
86 ret = 1;
87 err:
88 EVP_CIPHER_CTX_cleanup(&ctx);
89 return ret;
90 }
91
92/*
93 * DSA: generate keys and sign, verify input plaintext.
94 */
95static int FIPS_dsa_test(int bad)
40 { 96 {
41 unsigned char userkey[16] = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xf0, 0x0d }; 97 DSA *dsa = NULL;
42 unsigned char plaintext[16] = "etaonrishdlcu"; 98 EVP_PKEY pk;
43 unsigned char ciphertext[16]; 99 unsigned char dgst[] = "etaonrishdlc";
44 unsigned char buf[16]; 100 unsigned char buf[60];
45 AES_KEY key; 101 unsigned int slen;
46 AES_KEY dkey; 102 int r = 0;
103 EVP_MD_CTX mctx;
47 104
48 ERR_clear_error(); 105 ERR_clear_error();
49 if (AES_set_encrypt_key( userkey, 128, &key )) 106 EVP_MD_CTX_init(&mctx);
107 dsa = FIPS_dsa_new();
108 if (!dsa)
109 goto end;
110 if (!DSA_generate_parameters_ex(dsa, 1024,NULL,0,NULL,NULL,NULL))
111 goto end;
112 if (!DSA_generate_key(dsa))
113 goto end;
114 if (bad)
115 BN_add_word(dsa->pub_key, 1);
116
117 pk.type = EVP_PKEY_DSA;
118 pk.pkey.dsa = dsa;
119
120 if (!EVP_SignInit_ex(&mctx, EVP_dss1(), NULL))
121 goto end;
122 if (!EVP_SignUpdate(&mctx, dgst, sizeof(dgst) - 1))
123 goto end;
124 if (!EVP_SignFinal(&mctx, buf, &slen, &pk))
125 goto end;
126
127 if (!EVP_VerifyInit_ex(&mctx, EVP_dss1(), NULL))
128 goto end;
129 if (!EVP_VerifyUpdate(&mctx, dgst, sizeof(dgst) - 1))
130 goto end;
131 r = EVP_VerifyFinal(&mctx, buf, slen, &pk);
132 end:
133 EVP_MD_CTX_cleanup(&mctx);
134 if (dsa)
135 FIPS_dsa_free(dsa);
136 if (r != 1)
137 return 0;
138 return 1;
139 }
140
141/*
142 * RSA: generate keys and sign, verify input plaintext.
143 */
144static int FIPS_rsa_test(int bad)
145 {
146 RSA *key;
147 unsigned char input_ptext[] = "etaonrishdlc";
148 unsigned char buf[256];
149 unsigned int slen;
150 BIGNUM *bn;
151 EVP_MD_CTX mctx;
152 EVP_PKEY pk;
153 int r = 0;
154
155 ERR_clear_error();
156 EVP_MD_CTX_init(&mctx);
157 key = FIPS_rsa_new();
158 bn = BN_new();
159 if (!key || !bn)
50 return 0; 160 return 0;
51 AES_encrypt( plaintext, ciphertext, &key); 161 BN_set_word(bn, 65537);
52 if (AES_set_decrypt_key( userkey, 128, &dkey )) 162 if (!RSA_generate_key_ex(key, 1024,bn,NULL))
163 return 0;
164 BN_free(bn);
165 if (bad)
166 BN_add_word(key->n, 1);
167
168 pk.type = EVP_PKEY_RSA;
169 pk.pkey.rsa = key;
170
171 if (!EVP_SignInit_ex(&mctx, EVP_sha1(), NULL))
172 goto end;
173 if (!EVP_SignUpdate(&mctx, input_ptext, sizeof(input_ptext) - 1))
174 goto end;
175 if (!EVP_SignFinal(&mctx, buf, &slen, &pk))
176 goto end;
177
178 if (!EVP_VerifyInit_ex(&mctx, EVP_sha1(), NULL))
179 goto end;
180 if (!EVP_VerifyUpdate(&mctx, input_ptext, sizeof(input_ptext) - 1))
181 goto end;
182 r = EVP_VerifyFinal(&mctx, buf, slen, &pk);
183 end:
184 EVP_MD_CTX_cleanup(&mctx);
185 if (key)
186 FIPS_rsa_free(key);
187 if (r != 1)
188 return 0;
189 return 1;
190 }
191
192/* SHA1: generate hash of known digest value and compare to known
193 precomputed correct hash
194*/
195static int FIPS_sha1_test()
196 {
197 unsigned char digest[SHA_DIGEST_LENGTH] =
198 { 0x11, 0xf1, 0x9a, 0x3a, 0xec, 0x1a, 0x1e, 0x8e, 0x65, 0xd4, 0x9a, 0x38, 0x0c, 0x8b, 0x1e, 0x2c, 0xe8, 0xb3, 0xc5, 0x18 };
199 unsigned char str[] = "etaonrishd";
200
201 unsigned char md[SHA_DIGEST_LENGTH];
202
203 ERR_clear_error();
204 if (!EVP_Digest(str,sizeof(str) - 1,md, NULL, EVP_sha1(), NULL)) return 0;
205 if (memcmp(md,digest,sizeof(md)))
53 return 0; 206 return 0;
54 AES_decrypt( ciphertext, buf, &dkey); 207 return 1;
55 if (memcmp(buf, plaintext, sizeof(buf))) 208 }
209
210/* SHA256: generate hash of known digest value and compare to known
211 precomputed correct hash
212*/
213static int FIPS_sha256_test()
214 {
215 unsigned char digest[SHA256_DIGEST_LENGTH] =
216 {0xf5, 0x53, 0xcd, 0xb8, 0xcf, 0x1, 0xee, 0x17, 0x9b, 0x93, 0xc9, 0x68, 0xc0, 0xea, 0x40, 0x91,
217 0x6, 0xec, 0x8e, 0x11, 0x96, 0xc8, 0x5d, 0x1c, 0xaf, 0x64, 0x22, 0xe6, 0x50, 0x4f, 0x47, 0x57};
218 unsigned char str[] = "etaonrishd";
219
220 unsigned char md[SHA256_DIGEST_LENGTH];
221
222 ERR_clear_error();
223 if (!EVP_Digest(str,sizeof(str) - 1,md, NULL, EVP_sha256(), NULL)) return 0;
224 if (memcmp(md,digest,sizeof(md)))
56 return 0; 225 return 0;
57 return 1; 226 return 1;
58 } 227 }
59 228
60/* DES: encrypt and decrypt known plaintext, verify result matches original plaintext 229/* SHA512: generate hash of known digest value and compare to known
230 precomputed correct hash
61*/ 231*/
62static int FIPS_des_test() 232static int FIPS_sha512_test()
63 { 233 {
64 DES_cblock userkey = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xf0, 0x0d }; 234 unsigned char digest[SHA512_DIGEST_LENGTH] =
65 DES_cblock plaintext = { 'e', 't', 'a', 'o', 'n', 'r', 'i', 's' }; 235 {0x99, 0xc9, 0xe9, 0x5b, 0x88, 0xd4, 0x78, 0x88, 0xdf, 0x88, 0x5f, 0x94, 0x71, 0x64, 0x28, 0xca,
236 0x16, 0x1f, 0x3d, 0xf4, 0x1f, 0xf3, 0x0f, 0xc5, 0x03, 0x99, 0xb2, 0xd0, 0xe7, 0x0b, 0x94, 0x4a,
237 0x45, 0xd2, 0x6c, 0x4f, 0x20, 0x06, 0xef, 0x71, 0xa9, 0x25, 0x7f, 0x24, 0xb1, 0xd9, 0x40, 0x22,
238 0x49, 0x54, 0x10, 0xc2, 0x22, 0x9d, 0x27, 0xfe, 0xbd, 0xd6, 0xd6, 0xeb, 0x2d, 0x42, 0x1d, 0xa3};
239 unsigned char str[] = "etaonrishd";
66 240
67 DES_key_schedule key; 241 unsigned char md[SHA512_DIGEST_LENGTH];
68 DES_cblock ciphertext;
69 DES_cblock buf;
70 242
71 ERR_clear_error(); 243 ERR_clear_error();
72 if (DES_set_key(&userkey, &key) < 0) 244 if (!EVP_Digest(str,sizeof(str) - 1,md, NULL, EVP_sha512(), NULL)) return 0;
245 if (memcmp(md,digest,sizeof(md)))
73 return 0; 246 return 0;
74 DES_ecb_encrypt( &plaintext, &ciphertext, &key, 1); 247 return 1;
75 DES_ecb_encrypt( &ciphertext, &buf, &key, 0); 248 }
76 if (memcmp(buf, plaintext, sizeof(buf))) 249
250/* HMAC-SHA1: generate hash of known digest value and compare to known
251 precomputed correct hash
252*/
253static int FIPS_hmac_sha1_test()
254 {
255 unsigned char key[] = "etaonrishd";
256 unsigned char iv[] = "Sample text";
257 unsigned char kaval[EVP_MAX_MD_SIZE] =
258 {0x73, 0xf7, 0xa0, 0x48, 0xf8, 0x94, 0xed, 0xdd, 0x0a, 0xea, 0xea, 0x56, 0x1b, 0x61, 0x2e, 0x70,
259 0xb2, 0xfb, 0xec, 0xc6};
260
261 unsigned char out[EVP_MAX_MD_SIZE];
262 unsigned int outlen;
263
264 ERR_clear_error();
265 if (!HMAC(EVP_sha1(),key,sizeof(key)-1,iv,sizeof(iv)-1,out,&outlen)) return 0;
266 if (memcmp(out,kaval,outlen))
77 return 0; 267 return 0;
78 return 1; 268 return 1;
79 } 269 }
80 270
81/* DSA: generate key and sign a known digest, then verify the signature 271/* HMAC-SHA224: generate hash of known digest value and compare to known
82 * against the digest 272 precomputed correct hash
83*/ 273*/
84static int FIPS_dsa_test() 274static int FIPS_hmac_sha224_test()
85 { 275 {
86 DSA *dsa = NULL; 276 unsigned char key[] = "etaonrishd";
87 unsigned char dgst[] = "etaonrishdlc"; 277 unsigned char iv[] = "Sample text";
88 unsigned char sig[256]; 278 unsigned char kaval[EVP_MAX_MD_SIZE] =
89 unsigned int siglen; 279 {0x75, 0x58, 0xd5, 0xbd, 0x55, 0x6d, 0x87, 0x0f, 0x75, 0xff, 0xbe, 0x1c, 0xb2, 0xf0, 0x20, 0x35,
280 0xe5, 0x62, 0x49, 0xb6, 0x94, 0xb9, 0xfc, 0x65, 0x34, 0x33, 0x3a, 0x19};
281
282 unsigned char out[EVP_MAX_MD_SIZE];
283 unsigned int outlen;
90 284
91 ERR_clear_error(); 285 ERR_clear_error();
92 dsa = DSA_generate_parameters(512,NULL,0,NULL,NULL,NULL,NULL); 286 if (!HMAC(EVP_sha224(),key,sizeof(key)-1,iv,sizeof(iv)-1,out,&outlen)) return 0;
93 if (!dsa) 287 if (memcmp(out,kaval,outlen))
94 return 0; 288 return 0;
95 if (!DSA_generate_key(dsa))
96 return 0;
97 if ( DSA_sign(0,dgst,sizeof(dgst) - 1,sig,&siglen,dsa) != 1 )
98 return 0;
99 if ( DSA_verify(0,dgst,sizeof(dgst) - 1,sig,siglen,dsa) != 1 )
100 return 0;
101 DSA_free(dsa);
102 return 1; 289 return 1;
103 } 290 }
104 291
105/* RSA: generate keys and encrypt and decrypt known plaintext, verify result 292/* HMAC-SHA256: generate hash of known digest value and compare to known
106 * matches the original plaintext 293 precomputed correct hash
107*/ 294*/
108static int FIPS_rsa_test() 295static int FIPS_hmac_sha256_test()
109 { 296 {
110 RSA *key; 297 unsigned char key[] = "etaonrishd";
111 unsigned char input_ptext[] = "etaonrishdlc"; 298 unsigned char iv[] = "Sample text";
112 unsigned char ctext[256]; 299 unsigned char kaval[EVP_MAX_MD_SIZE] =
113 unsigned char ptext[256]; 300 {0xe9, 0x17, 0xc1, 0x7b, 0x4c, 0x6b, 0x77, 0xda, 0xd2, 0x30, 0x36, 0x02, 0xf5, 0x72, 0x33, 0x87,
114 int n; 301 0x9f, 0xc6, 0x6e, 0x7b, 0x7e, 0xa8, 0xea, 0xaa, 0x9f, 0xba, 0xee, 0x51, 0xff, 0xda, 0x24, 0xf4};
302
303 unsigned char out[EVP_MAX_MD_SIZE];
304 unsigned int outlen;
115 305
116 ERR_clear_error(); 306 ERR_clear_error();
117 key = RSA_generate_key(1024,65537,NULL,NULL); 307 if (!HMAC(EVP_sha256(),key,sizeof(key)-1,iv,sizeof(iv)-1,out,&outlen)) return 0;
118 if (!key) 308 if (memcmp(out,kaval,outlen))
119 return 0;
120 n = RSA_size(key);
121 n = RSA_public_encrypt(sizeof(input_ptext) - 1,input_ptext,ctext,key,RSA_PKCS1_PADDING);
122 if (n < 0)
123 return 0;
124 n = RSA_private_decrypt(n,ctext,ptext,key,RSA_PKCS1_PADDING);
125 if (n < 0)
126 return 0;
127 RSA_free(key);
128 if (memcmp(input_ptext,ptext,sizeof(input_ptext) - 1))
129 return 0; 309 return 0;
130 return 1; 310 return 1;
131 } 311 }
132 312
133/* SHA1: generate hash of known digest value and compare to known 313/* HMAC-SHA384: generate hash of known digest value and compare to known
134 precomputed correct hash 314 precomputed correct hash
135*/ 315*/
136static int FIPS_sha1_test() 316static int FIPS_hmac_sha384_test()
137 { 317 {
138 unsigned char digest[SHA_DIGEST_LENGTH] = 318 unsigned char key[] = "etaonrishd";
139 { 0x11, 0xf1, 0x9a, 0x3a, 0xec, 0x1a, 0x1e, 0x8e, 0x65, 0xd4, 0x9a, 0x38, 0x0c, 0x8b, 0x1e, 0x2c, 0xe8, 0xb3, 0xc5, 0x18 }; 319 unsigned char iv[] = "Sample text";
140 unsigned char str[] = "etaonrishd"; 320 unsigned char kaval[EVP_MAX_MD_SIZE] =
321 {0xb2, 0x9d, 0x40, 0x58, 0x32, 0xc4, 0xe3, 0x31, 0xb6, 0x63, 0x08, 0x26, 0x99, 0xef, 0x3b, 0x10,
322 0xe2, 0xdf, 0xf8, 0xff, 0xc6, 0xe1, 0x03, 0x29, 0x81, 0x2a, 0x1b, 0xac, 0xb0, 0x07, 0x39, 0x08,
323 0xf3, 0x91, 0x35, 0x11, 0x76, 0xd6, 0x4c, 0x20, 0xfb, 0x4d, 0xc3, 0xf3, 0xb8, 0x9b, 0x88, 0x1c};
141 324
142 unsigned char md[SHA_DIGEST_LENGTH]; 325 unsigned char out[EVP_MAX_MD_SIZE];
326 unsigned int outlen;
143 327
144 ERR_clear_error(); 328 ERR_clear_error();
145 if (!SHA1(str,sizeof(str) - 1,md)) return 0; 329 if (!HMAC(EVP_sha384(),key,sizeof(key)-1,iv,sizeof(iv)-1,out,&outlen)) return 0;
146 if (memcmp(md,digest,sizeof(md))) 330 if (memcmp(out,kaval,outlen))
147 return 0; 331 return 0;
148 return 1; 332 return 1;
149 } 333 }
150 334
151/* MD5: generate hash of known digest value and compare to known 335/* HMAC-SHA512: generate hash of known digest value and compare to known
152 precomputed correct hash 336 precomputed correct hash
153*/ 337*/
154static int md5_test() 338static int FIPS_hmac_sha512_test()
155 { 339 {
156 unsigned char digest[MD5_DIGEST_LENGTH] = 340 unsigned char key[] = "etaonrishd";
157 { 0x48, 0x50, 0xf0, 0xa3, 0x3a, 0xed, 0xd3, 0xaf, 0x6e, 0x47, 0x7f, 0x83, 0x02, 0xb1, 0x09, 0x68 }; 341 unsigned char iv[] = "Sample text";
158 unsigned char str[] = "etaonrishd"; 342 unsigned char kaval[EVP_MAX_MD_SIZE] =
343 {0xcd, 0x3e, 0xb9, 0x51, 0xb8, 0xbc, 0x7f, 0x9a, 0x23, 0xaf, 0xf3, 0x77, 0x59, 0x85, 0xa9, 0xe6,
344 0xf7, 0xd1, 0x51, 0x96, 0x17, 0xe0, 0x92, 0xd8, 0xa6, 0x3b, 0xc1, 0xad, 0x7e, 0x24, 0xca, 0xb1,
345 0xd7, 0x79, 0x0a, 0xa5, 0xea, 0x2c, 0x02, 0x58, 0x0b, 0xa6, 0x52, 0x6b, 0x61, 0x7f, 0xeb, 0x9c,
346 0x47, 0x86, 0x5d, 0x74, 0x2b, 0x88, 0xdf, 0xee, 0x46, 0x69, 0x96, 0x3d, 0xa6, 0xd9, 0x2a, 0x53};
159 347
160 unsigned char md[MD5_DIGEST_LENGTH]; 348 unsigned char out[EVP_MAX_MD_SIZE];
349 unsigned int outlen;
161 350
162 ERR_clear_error(); 351 ERR_clear_error();
163 if (!MD5(str,sizeof(str) - 1,md)) 352 if (!HMAC(EVP_sha512(),key,sizeof(key)-1,iv,sizeof(iv)-1,out,&outlen)) return 0;
164 return 0; 353 if (memcmp(out,kaval,outlen))
165 if (memcmp(md,digest,sizeof(md))) 354 return 0;
166 return 0;
167 return 1; 355 return 1;
168 } 356 }
169 357
358
170/* DH: generate shared parameters 359/* DH: generate shared parameters
171*/ 360*/
172static int dh_test() 361static int dh_test()
173 { 362 {
174 DH *dh; 363 DH *dh;
175
176 ERR_clear_error(); 364 ERR_clear_error();
177 dh = DH_generate_parameters(256, 2, NULL, NULL); 365 dh = FIPS_dh_new();
178 if (dh) 366 if (!dh)
179 return 1; 367 return 0;
180 return 0; 368 if (!DH_generate_parameters_ex(dh, 1024, 2, NULL))
369 return 0;
370 FIPS_dh_free(dh);
371 return 1;
181 } 372 }
182 373
183/* Zeroize 374/* Zeroize
@@ -185,18 +376,27 @@ static int dh_test()
185static int Zeroize() 376static int Zeroize()
186 { 377 {
187 RSA *key; 378 RSA *key;
379 BIGNUM *bn;
188 unsigned char userkey[16] = 380 unsigned char userkey[16] =
189 { 0x48, 0x50, 0xf0, 0xa3, 0x3a, 0xed, 0xd3, 0xaf, 0x6e, 0x47, 0x7f, 0x83, 0x02, 0xb1, 0x09, 0x68 }; 381 { 0x48, 0x50, 0xf0, 0xa3, 0x3a, 0xed, 0xd3, 0xaf, 0x6e, 0x47, 0x7f, 0x83, 0x02, 0xb1, 0x09, 0x68 };
190 int i, n; 382 int i, n;
191 383
192 key = RSA_generate_key(1024,65537,NULL,NULL); 384 key = FIPS_rsa_new();
193 if (!key) 385 bn = BN_new();
386 if (!key || !bn)
387 return 0;
388 BN_set_word(bn, 65537);
389 if (!RSA_generate_key_ex(key, 1024,bn,NULL))
194 return 0; 390 return 0;
391 BN_free(bn);
392
195 n = BN_num_bytes(key->d); 393 n = BN_num_bytes(key->d);
196 printf(" Generated %d byte RSA private key\n", n); 394 printf(" Generated %d byte RSA private key\n", n);
197 printf("\tBN key before overwriting:\n%s\n", BN_bn2hex(key->d)); 395 printf("\tBN key before overwriting:\n");
396 do_bn_print(stdout, key->d);
198 BN_rand(key->d,n*8,-1,0); 397 BN_rand(key->d,n*8,-1,0);
199 printf("\tBN key after overwriting:\n%s\n", BN_bn2hex(key->d)); 398 printf("\tBN key after overwriting:\n");
399 do_bn_print(stdout, key->d);
200 400
201 printf("\tchar buffer key before overwriting: \n\t\t"); 401 printf("\tchar buffer key before overwriting: \n\t\t");
202 for(i = 0; i < sizeof(userkey); i++) printf("%02x", userkey[i]); 402 for(i = 0; i < sizeof(userkey); i++) printf("%02x", userkey[i]);
@@ -212,6 +412,7 @@ static int Zeroize()
212static int Error; 412static int Error;
213const char * Fail(const char *msg) 413const char * Fail(const char *msg)
214 { 414 {
415 do_print_errors();
215 Error++; 416 Error++;
216 return msg; 417 return msg;
217 } 418 }
@@ -219,6 +420,11 @@ const char * Fail(const char *msg)
219int main(int argc,char **argv) 420int main(int argc,char **argv)
220 { 421 {
221 422
423 int do_corrupt_rsa_keygen = 0, do_corrupt_dsa_keygen = 0;
424 int bad_rsa = 0, bad_dsa = 0;
425 int do_rng_stick = 0;
426 int no_exit = 0;
427
222 printf("\tFIPS-mode test application\n\n"); 428 printf("\tFIPS-mode test application\n\n");
223 429
224 /* Load entropy from external file, if any */ 430 /* Load entropy from external file, if any */
@@ -228,72 +434,79 @@ int main(int argc,char **argv)
228 /* Corrupted KAT tests */ 434 /* Corrupted KAT tests */
229 if (!strcmp(argv[1], "aes")) { 435 if (!strcmp(argv[1], "aes")) {
230 FIPS_corrupt_aes(); 436 FIPS_corrupt_aes();
231 printf("3. AES encryption/decryption with corrupted KAT...\n"); 437 printf("AES encryption/decryption with corrupted KAT...\n");
232 } else if (!strcmp(argv[1], "des")) { 438 } else if (!strcmp(argv[1], "des")) {
233 FIPS_corrupt_des(); 439 FIPS_corrupt_des();
234 printf("5. DES-ECB encryption/decryption with corrupted KAT...\n"); 440 printf("DES3-ECB encryption/decryption with corrupted KAT...\n");
235 } else if (!strcmp(argv[1], "dsa")) { 441 } else if (!strcmp(argv[1], "dsa")) {
236 FIPS_corrupt_dsa(); 442 FIPS_corrupt_dsa();
237 printf("6. DSA key generation and signature validation with corrupted KAT...\n"); 443 printf("DSA key generation and signature validation with corrupted KAT...\n");
238 } else if (!strcmp(argv[1], "rsa")) { 444 } else if (!strcmp(argv[1], "rsa")) {
239 FIPS_corrupt_rsa(); 445 FIPS_corrupt_rsa();
240 printf("4. RSA key generation and encryption/decryption with corrupted KAT...\n"); 446 printf("RSA key generation and signature validation with corrupted KAT...\n");
447 } else if (!strcmp(argv[1], "rsakey")) {
448 printf("RSA key generation and signature validation with corrupted key...\n");
449 bad_rsa = 1;
450 no_exit = 1;
451 } else if (!strcmp(argv[1], "rsakeygen")) {
452 do_corrupt_rsa_keygen = 1;
453 no_exit = 1;
454 printf("RSA key generation and signature validation with corrupted keygen...\n");
455 } else if (!strcmp(argv[1], "dsakey")) {
456 printf("DSA key generation and signature validation with corrupted key...\n");
457 bad_dsa = 1;
458 no_exit = 1;
459 } else if (!strcmp(argv[1], "dsakeygen")) {
460 do_corrupt_dsa_keygen = 1;
461 no_exit = 1;
462 printf("DSA key generation and signature validation with corrupted keygen...\n");
241 } else if (!strcmp(argv[1], "sha1")) { 463 } else if (!strcmp(argv[1], "sha1")) {
242 FIPS_corrupt_sha1(); 464 FIPS_corrupt_sha1();
243 printf("7. SHA-1 hash with corrupted KAT...\n"); 465 printf("SHA-1 hash with corrupted KAT...\n");
466 } else if (!strcmp(argv[1], "rng")) {
467 FIPS_corrupt_rng();
468 } else if (!strcmp(argv[1], "rngstick")) {
469 do_rng_stick = 1;
470 no_exit = 1;
471 printf("RNG test with stuck continuous test...\n");
244 } else { 472 } else {
245 printf("Bad argument \"%s\"\n", argv[1]); 473 printf("Bad argument \"%s\"\n", argv[1]);
246 exit(1); 474 exit(1);
247 } 475 }
248 if (!FIPS_mode_set(1,argv[0])) 476 if (!no_exit) {
249 { 477 if (!FIPS_mode_set(1)) {
250 ERR_load_crypto_strings(); 478 do_print_errors();
251 ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE)); 479 printf("Power-up self test failed\n");
252 printf("Power-up self test failed\n"); 480 exit(1);
253 exit(1); 481 }
482 printf("Power-up self test successful\n");
483 exit(0);
254 } 484 }
255 printf("Power-up self test successful\n");
256 exit(0);
257 } 485 }
258 486
259 /* Non-Approved cryptographic operation 487 /* Non-Approved cryptographic operation
260 */ 488 */
261 printf("0. Non-Approved cryptographic operation test...\n"); 489 printf("1. Non-Approved cryptographic operation test...\n");
262 printf("\ta. Excluded algorithm (MD5)..."); 490 printf("\ta. Included algorithm (D-H)...");
263 printf( md5_test() ? "successful\n" : Fail("FAILED!\n") );
264 printf("\tb. Included algorithm (D-H)...");
265 printf( dh_test() ? "successful\n" : Fail("FAILED!\n") ); 491 printf( dh_test() ? "successful\n" : Fail("FAILED!\n") );
266 492
267 /* Power-up self test failure 493 /* Power-up self test
268 */
269 printf("1. Automatic power-up self test...");
270 printf( FIPS_mode_set(1,"/dev/null") ? Fail("passed INCORRECTLY!\n") : "failed as expected\n" );
271
272 /* Algorithm call when uninitialized failure
273 */
274 printf("\ta. AES API failure on failed power-up self test...");
275 printf( FIPS_aes_test() ? Fail("passed INCORRECTLY!\n") :"failed as expected\n" );
276 printf("\tb. RSA API failure on failed power-up self test...");
277 printf( FIPS_rsa_test() ? Fail("passed INCORRECTLY!\n") : "failed as expected\n" );
278 printf("\tc. DES API failure on failed power-up self test...");
279 printf( FIPS_des_test() ? Fail("passed INCORRECTLY!\n") : "failed as expected\n" );
280 printf("\td. DSA API failure on failed power-up self test...");
281 printf( FIPS_dsa_test() ? Fail("passed INCORRECTLY!\n") : "failed as expected\n" );
282 printf("\te. SHA1 API failure on failed power-up self test...");
283 printf( FIPS_sha1_test() ? Fail("passed INCORRECTLY!\n") : "failed as expected\n" );
284
285 /* Power-up self test retry
286 */ 494 */
287 ERR_clear_error(); 495 ERR_clear_error();
288 printf("2. Automatic power-up self test retry..."); 496 printf("2. Automatic power-up self test...");
289 if (!FIPS_mode_set(1,argv[0])) 497 if (!FIPS_mode_set(1))
290 { 498 {
291 ERR_load_crypto_strings(); 499 do_print_errors();
292 ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
293 printf(Fail("FAILED!\n")); 500 printf(Fail("FAILED!\n"));
294 exit(1); 501 exit(1);
295 } 502 }
296 printf("successful\n"); 503 printf("successful\n");
504 if (do_corrupt_dsa_keygen)
505 FIPS_corrupt_dsa_keygen();
506 if (do_corrupt_rsa_keygen)
507 FIPS_corrupt_rsa_keygen();
508 if (do_rng_stick)
509 FIPS_rng_stick();
297 510
298 /* AES encryption/decryption 511 /* AES encryption/decryption
299 */ 512 */
@@ -303,39 +516,73 @@ int main(int argc,char **argv)
303 /* RSA key generation and encryption/decryption 516 /* RSA key generation and encryption/decryption
304 */ 517 */
305 printf("4. RSA key generation and encryption/decryption..."); 518 printf("4. RSA key generation and encryption/decryption...");
306 printf( FIPS_rsa_test() ? "successful\n" : Fail("FAILED!\n") ); 519 printf( FIPS_rsa_test(bad_rsa) ? "successful\n" : Fail("FAILED!\n") );
307 520
308 /* DES-CBC encryption/decryption 521 /* DES-CBC encryption/decryption
309 */ 522 */
310 printf("5. DES-ECB encryption/decryption..."); 523 printf("5. DES-ECB encryption/decryption...");
311 printf( FIPS_des_test() ? "successful\n" : Fail("FAILED!\n") ); 524 printf( FIPS_des3_test() ? "successful\n" : Fail("FAILED!\n") );
312 525
313 /* DSA key generation and signature validation 526 /* DSA key generation and signature validation
314 */ 527 */
315 printf("6. DSA key generation and signature validation..."); 528 printf("6. DSA key generation and signature validation...");
316 printf( FIPS_dsa_test() ? "successful\n" : Fail("FAILED!\n") ); 529 printf( FIPS_dsa_test(bad_dsa) ? "successful\n" : Fail("FAILED!\n") );
317 530
318 /* SHA-1 hash 531 /* SHA-1 hash
319 */ 532 */
320 printf("7. SHA-1 hash..."); 533 printf("7a. SHA-1 hash...");
321 printf( FIPS_sha1_test() ? "successful\n" : Fail("FAILED!\n") ); 534 printf( FIPS_sha1_test() ? "successful\n" : Fail("FAILED!\n") );
322 535
536 /* SHA-256 hash
537 */
538 printf("7b. SHA-256 hash...");
539 printf( FIPS_sha256_test() ? "successful\n" : Fail("FAILED!\n") );
540
541 /* SHA-512 hash
542 */
543 printf("7c. SHA-512 hash...");
544 printf( FIPS_sha512_test() ? "successful\n" : Fail("FAILED!\n") );
545
546 /* HMAC-SHA-1 hash
547 */
548 printf("7d. HMAC-SHA-1 hash...");
549 printf( FIPS_hmac_sha1_test() ? "successful\n" : Fail("FAILED!\n") );
550
551 /* HMAC-SHA-224 hash
552 */
553 printf("7e. HMAC-SHA-224 hash...");
554 printf( FIPS_hmac_sha224_test() ? "successful\n" : Fail("FAILED!\n") );
555
556 /* HMAC-SHA-256 hash
557 */
558 printf("7f. HMAC-SHA-256 hash...");
559 printf( FIPS_hmac_sha256_test() ? "successful\n" : Fail("FAILED!\n") );
560
561 /* HMAC-SHA-384 hash
562 */
563 printf("7g. HMAC-SHA-384 hash...");
564 printf( FIPS_hmac_sha384_test() ? "successful\n" : Fail("FAILED!\n") );
565
566 /* HMAC-SHA-512 hash
567 */
568 printf("7h. HMAC-SHA-512 hash...");
569 printf( FIPS_hmac_sha512_test() ? "successful\n" : Fail("FAILED!\n") );
570
323 /* Non-Approved cryptographic operation 571 /* Non-Approved cryptographic operation
324 */ 572 */
325 printf("8. Non-Approved cryptographic operation test...\n"); 573 printf("8. Non-Approved cryptographic operation test...\n");
326 printf("\ta. Excluded algorithm (MD5)..."); 574 printf("\ta. Included algorithm (D-H)...");
327 printf( md5_test() ? Fail("passed INCORRECTLY!\n")
328 : "failed as expected\n" );
329 printf("\tb. Included algorithm (D-H)...");
330 printf( dh_test() ? "successful as expected\n" 575 printf( dh_test() ? "successful as expected\n"
331 : Fail("failed INCORRECTLY!\n") ); 576 : Fail("failed INCORRECTLY!\n") );
332 577
333 /* Zeroization 578 /* Zeroization
334 */ 579 */
335 printf("9. Zero-ization...\n"); 580 printf("9. Zero-ization...\n");
336 Zeroize(); 581 printf( Zeroize() ? "\tsuccessful as expected\n"
582 : Fail("\tfailed INCORRECTLY!\n") );
337 583
338 printf("\nAll tests completed with %d errors\n", Error); 584 printf("\nAll tests completed with %d errors\n", Error);
339 return 0; 585 return Error ? 1 : 0;
340 } 586 }
587
341#endif 588#endif
diff --git a/src/lib/libssl/src/fips/fips_utl.h b/src/lib/libssl/src/fips/fips_utl.h
new file mode 100644
index 0000000000..02d4e44c82
--- /dev/null
+++ b/src/lib/libssl/src/fips/fips_utl.h
@@ -0,0 +1,343 @@
1/* ====================================================================
2 * Copyright (c) 2007 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 *
48 */
49
50void do_print_errors(void)
51 {
52 const char *file, *data;
53 int line, flags;
54 unsigned long l;
55 while ((l = ERR_get_error_line_data(&file, &line, &data, &flags)))
56 {
57 fprintf(stderr, "ERROR:%lx:lib=%d,func=%d,reason=%d"
58 ":file=%s:line=%d:%s\n",
59 l, ERR_GET_LIB(l), ERR_GET_FUNC(l), ERR_GET_REASON(l),
60 file, line, flags & ERR_TXT_STRING ? data : "");
61 }
62 }
63
64int hex2bin(const char *in, unsigned char *out)
65 {
66 int n1, n2;
67 unsigned char ch;
68
69 for (n1=0,n2=0 ; in[n1] && in[n1] != '\n' ; )
70 { /* first byte */
71 if ((in[n1] >= '0') && (in[n1] <= '9'))
72 ch = in[n1++] - '0';
73 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
74 ch = in[n1++] - 'A' + 10;
75 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
76 ch = in[n1++] - 'a' + 10;
77 else
78 return -1;
79 if(!in[n1])
80 {
81 out[n2++]=ch;
82 break;
83 }
84 out[n2] = ch << 4;
85 /* second byte */
86 if ((in[n1] >= '0') && (in[n1] <= '9'))
87 ch = in[n1++] - '0';
88 else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
89 ch = in[n1++] - 'A' + 10;
90 else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
91 ch = in[n1++] - 'a' + 10;
92 else
93 return -1;
94 out[n2++] |= ch;
95 }
96 return n2;
97 }
98
99unsigned char *hex2bin_m(const char *in, long *plen)
100 {
101 unsigned char *p;
102 p = OPENSSL_malloc((strlen(in) + 1)/2);
103 *plen = hex2bin(in, p);
104 return p;
105 }
106
107int do_hex2bn(BIGNUM **pr, const char *in)
108 {
109 unsigned char *p;
110 long plen;
111 int r = 0;
112 p = hex2bin_m(in, &plen);
113 if (!p)
114 return 0;
115 if (!*pr)
116 *pr = BN_new();
117 if (!*pr)
118 return 0;
119 if (BN_bin2bn(p, plen, *pr))
120 r = 1;
121 OPENSSL_free(p);
122 return r;
123 }
124
125int do_bn_print(FILE *out, BIGNUM *bn)
126 {
127 int len, i;
128 unsigned char *tmp;
129 len = BN_num_bytes(bn);
130 if (len == 0)
131 {
132 fputs("00", out);
133 return 1;
134 }
135
136 tmp = OPENSSL_malloc(len);
137 if (!tmp)
138 {
139 fprintf(stderr, "Memory allocation error\n");
140 return 0;
141 }
142 BN_bn2bin(bn, tmp);
143 for (i = 0; i < len; i++)
144 fprintf(out, "%02x", tmp[i]);
145 OPENSSL_free(tmp);
146 return 1;
147 }
148
149int do_bn_print_name(FILE *out, const char *name, BIGNUM *bn)
150 {
151 int r;
152 fprintf(out, "%s = ", name);
153 r = do_bn_print(out, bn);
154 if (!r)
155 return 0;
156 fputs("\n", out);
157 return 1;
158 }
159
160int parse_line(char **pkw, char **pval, char *linebuf, char *olinebuf)
161 {
162 char *keyword, *value, *p, *q;
163 strcpy(linebuf, olinebuf);
164 keyword = linebuf;
165 /* Skip leading space */
166 while (isspace((unsigned char)*keyword))
167 keyword++;
168
169 /* Look for = sign */
170 p = strchr(linebuf, '=');
171
172 /* If no '=' exit */
173 if (!p)
174 return 0;
175
176 q = p - 1;
177
178 /* Remove trailing space */
179 while (isspace((unsigned char)*q))
180 *q-- = 0;
181
182 *p = 0;
183 value = p + 1;
184
185 /* Remove leading space from value */
186 while (isspace((unsigned char)*value))
187 value++;
188
189 /* Remove trailing space from value */
190 p = value + strlen(value) - 1;
191
192 while (*p == '\n' || isspace((unsigned char)*p))
193 *p-- = 0;
194
195 *pkw = keyword;
196 *pval = value;
197 return 1;
198 }
199
200BIGNUM *hex2bn(const char *in)
201 {
202 BIGNUM *p=NULL;
203
204 if (!do_hex2bn(&p, in))
205 return NULL;
206
207 return p;
208 }
209
210int bin2hex(const unsigned char *in,int len,char *out)
211 {
212 int n1, n2;
213 unsigned char ch;
214
215 for (n1=0,n2=0 ; n1 < len ; ++n1)
216 {
217 ch=in[n1] >> 4;
218 if (ch <= 0x09)
219 out[n2++]=ch+'0';
220 else
221 out[n2++]=ch-10+'a';
222 ch=in[n1] & 0x0f;
223 if(ch <= 0x09)
224 out[n2++]=ch+'0';
225 else
226 out[n2++]=ch-10+'a';
227 }
228 out[n2]='\0';
229 return n2;
230 }
231
232void pv(const char *tag,const unsigned char *val,int len)
233 {
234 char obuf[2048];
235
236 bin2hex(val,len,obuf);
237 printf("%s = %s\n",tag,obuf);
238 }
239
240/* To avoid extensive changes to test program at this stage just convert
241 * the input line into an acceptable form. Keyword lines converted to form
242 * "keyword = value\n" no matter what white space present, all other lines
243 * just have leading and trailing space removed.
244 */
245
246int tidy_line(char *linebuf, char *olinebuf)
247 {
248 char *keyword, *value, *p, *q;
249 strcpy(linebuf, olinebuf);
250 keyword = linebuf;
251 /* Skip leading space */
252 while (isspace((unsigned char)*keyword))
253 keyword++;
254 /* Look for = sign */
255 p = strchr(linebuf, '=');
256
257 /* If no '=' just chop leading, trailing ws */
258 if (!p)
259 {
260 p = keyword + strlen(keyword) - 1;
261 while (*p == '\n' || isspace((unsigned char)*p))
262 *p-- = 0;
263 strcpy(olinebuf, keyword);
264 strcat(olinebuf, "\n");
265 return 1;
266 }
267
268 q = p - 1;
269
270 /* Remove trailing space */
271 while (isspace((unsigned char)*q))
272 *q-- = 0;
273
274 *p = 0;
275 value = p + 1;
276
277 /* Remove leading space from value */
278 while (isspace((unsigned char)*value))
279 value++;
280
281 /* Remove trailing space from value */
282 p = value + strlen(value) - 1;
283
284 while (*p == '\n' || isspace((unsigned char)*p))
285 *p-- = 0;
286
287 strcpy(olinebuf, keyword);
288 strcat(olinebuf, " = ");
289 strcat(olinebuf, value);
290 strcat(olinebuf, "\n");
291
292 return 1;
293 }
294
295/* NB: this return the number of _bits_ read */
296int bint2bin(const char *in, int len, unsigned char *out)
297 {
298 int n;
299
300 memset(out,0,len);
301 for(n=0 ; n < len ; ++n)
302 if(in[n] == '1')
303 out[n/8]|=(0x80 >> (n%8));
304 return len;
305 }
306
307int bin2bint(const unsigned char *in,int len,char *out)
308 {
309 int n;
310
311 for(n=0 ; n < len ; ++n)
312 out[n]=(in[n/8]&(0x80 >> (n%8))) ? '1' : '0';
313 return n;
314 }
315
316/*-----------------------------------------------*/
317
318void PrintValue(char *tag, unsigned char *val, int len)
319{
320#if VERBOSE
321 char obuf[2048];
322 int olen;
323 olen = bin2hex(val, len, obuf);
324 printf("%s = %.*s\n", tag, olen, obuf);
325#endif
326}
327
328void OutputValue(char *tag, unsigned char *val, int len, FILE *rfp,int bitmode)
329 {
330 char obuf[2048];
331 int olen;
332
333 if(bitmode)
334 olen=bin2bint(val,len,obuf);
335 else
336 olen=bin2hex(val,len,obuf);
337
338 fprintf(rfp, "%s = %.*s\n", tag, olen, obuf);
339#if VERBOSE
340 printf("%s = %.*s\n", tag, olen, obuf);
341#endif
342 }
343
diff --git a/src/lib/libssl/src/fips/fipsalgtest.pl b/src/lib/libssl/src/fips/fipsalgtest.pl
new file mode 100644
index 0000000000..44a5ccac7a
--- /dev/null
+++ b/src/lib/libssl/src/fips/fipsalgtest.pl
@@ -0,0 +1,848 @@
1#!/usr/bin/perl -w
2# Perl utility to run or verify FIPS 140-2 CMVP algorithm tests based on the
3# pathnames of input algorithm test files actually present (the unqualified
4# file names are consistent but the pathnames are not).
5#
6
7# FIPS test definitions
8# List of all the unqualified file names we expect and command lines to run
9
10# DSA tests
11my @fips_dsa_test_list = (
12
13 "DSA",
14
15 [ "PQGGen", "fips_dssvs pqg" ],
16 [ "KeyPair", "fips_dssvs keypair" ],
17 [ "SigGen", "fips_dssvs siggen" ],
18 [ "SigVer", "fips_dssvs sigver" ]
19
20);
21
22# RSA tests
23
24my @fips_rsa_test_list = (
25
26 "RSA",
27
28 [ "SigGen15", "fips_rsastest" ],
29 [ "SigVer15", "fips_rsavtest" ],
30 [ "SigVerRSA", "fips_rsavtest -x931" ],
31 [ "KeyGenRSA", "fips_rsagtest" ],
32 [ "SigGenRSA", "fips_rsastest -x931" ]
33
34);
35
36# Special cases for PSS. The filename itself is
37# not sufficient to determine the test. Addditionally we
38# need to examine the file contents to determine the salt length
39# In these cases the test filename has (saltlen) appended.
40
41# RSA PSS salt length 0 tests
42
43my @fips_rsa_pss0_test_list = (
44
45 [ "SigGenPSS(0)", "fips_rsastest -saltlen 0" ],
46 [ "SigVerPSS(0)", "fips_rsavtest -saltlen 0" ]
47
48);
49
50# RSA PSS salt length 62 tests
51
52my @fips_rsa_pss62_test_list = (
53 [ "SigGenPSS(62)", "fips_rsastest -saltlen 62" ],
54 [ "SigVerPSS(62)", "fips_rsavtest -saltlen 62" ]
55
56);
57
58# SHA tests
59
60my @fips_sha_test_list = (
61
62 "SHA",
63
64 [ "SHA1LongMsg", "fips_shatest" ],
65 [ "SHA1Monte", "fips_shatest" ],
66 [ "SHA1ShortMsg", "fips_shatest" ],
67 [ "SHA224LongMsg", "fips_shatest" ],
68 [ "SHA224Monte", "fips_shatest" ],
69 [ "SHA224ShortMsg", "fips_shatest" ],
70 [ "SHA256LongMsg", "fips_shatest" ],
71 [ "SHA256Monte", "fips_shatest" ],
72 [ "SHA256ShortMsg", "fips_shatest" ],
73 [ "SHA384LongMsg", "fips_shatest" ],
74 [ "SHA384Monte", "fips_shatest" ],
75 [ "SHA384ShortMsg", "fips_shatest" ],
76 [ "SHA512LongMsg", "fips_shatest" ],
77 [ "SHA512Monte", "fips_shatest" ],
78 [ "SHA512ShortMsg", "fips_shatest" ]
79
80);
81
82# HMAC
83
84my @fips_hmac_test_list = (
85
86 "HMAC",
87
88 [ "HMAC", "fips_hmactest" ]
89
90);
91
92# RAND tests, AES version
93
94my @fips_rand_aes_test_list = (
95
96 "RAND (AES)",
97
98 [ "ANSI931_AES128MCT", "fips_rngvs mct" ],
99 [ "ANSI931_AES192MCT", "fips_rngvs mct" ],
100 [ "ANSI931_AES256MCT", "fips_rngvs mct" ],
101 [ "ANSI931_AES128VST", "fips_rngvs vst" ],
102 [ "ANSI931_AES192VST", "fips_rngvs vst" ],
103 [ "ANSI931_AES256VST", "fips_rngvs vst" ]
104
105);
106
107# RAND tests, DES2 version
108
109my @fips_rand_des2_test_list = (
110
111 "RAND (DES2)",
112
113 [ "ANSI931_TDES2MCT", "fips_rngvs mct" ],
114 [ "ANSI931_TDES2VST", "fips_rngvs vst" ]
115
116);
117
118# AES tests
119
120my @fips_aes_test_list = (
121
122 "AES",
123
124 [ "CBCGFSbox128", "fips_aesavs -f" ],
125 [ "CBCGFSbox192", "fips_aesavs -f" ],
126 [ "CBCGFSbox256", "fips_aesavs -f" ],
127 [ "CBCKeySbox128", "fips_aesavs -f" ],
128 [ "CBCKeySbox192", "fips_aesavs -f" ],
129 [ "CBCKeySbox256", "fips_aesavs -f" ],
130 [ "CBCMCT128", "fips_aesavs -f" ],
131 [ "CBCMCT192", "fips_aesavs -f" ],
132 [ "CBCMCT256", "fips_aesavs -f" ],
133 [ "CBCMMT128", "fips_aesavs -f" ],
134 [ "CBCMMT192", "fips_aesavs -f" ],
135 [ "CBCMMT256", "fips_aesavs -f" ],
136 [ "CBCVarKey128", "fips_aesavs -f" ],
137 [ "CBCVarKey192", "fips_aesavs -f" ],
138 [ "CBCVarKey256", "fips_aesavs -f" ],
139 [ "CBCVarTxt128", "fips_aesavs -f" ],
140 [ "CBCVarTxt192", "fips_aesavs -f" ],
141 [ "CBCVarTxt256", "fips_aesavs -f" ],
142 [ "CFB128GFSbox128", "fips_aesavs -f" ],
143 [ "CFB128GFSbox192", "fips_aesavs -f" ],
144 [ "CFB128GFSbox256", "fips_aesavs -f" ],
145 [ "CFB128KeySbox128", "fips_aesavs -f" ],
146 [ "CFB128KeySbox192", "fips_aesavs -f" ],
147 [ "CFB128KeySbox256", "fips_aesavs -f" ],
148 [ "CFB128MCT128", "fips_aesavs -f" ],
149 [ "CFB128MCT192", "fips_aesavs -f" ],
150 [ "CFB128MCT256", "fips_aesavs -f" ],
151 [ "CFB128MMT128", "fips_aesavs -f" ],
152 [ "CFB128MMT192", "fips_aesavs -f" ],
153 [ "CFB128MMT256", "fips_aesavs -f" ],
154 [ "CFB128VarKey128", "fips_aesavs -f" ],
155 [ "CFB128VarKey192", "fips_aesavs -f" ],
156 [ "CFB128VarKey256", "fips_aesavs -f" ],
157 [ "CFB128VarTxt128", "fips_aesavs -f" ],
158 [ "CFB128VarTxt192", "fips_aesavs -f" ],
159 [ "CFB128VarTxt256", "fips_aesavs -f" ],
160 [ "CFB8GFSbox128", "fips_aesavs -f" ],
161 [ "CFB8GFSbox192", "fips_aesavs -f" ],
162 [ "CFB8GFSbox256", "fips_aesavs -f" ],
163 [ "CFB8KeySbox128", "fips_aesavs -f" ],
164 [ "CFB8KeySbox192", "fips_aesavs -f" ],
165 [ "CFB8KeySbox256", "fips_aesavs -f" ],
166 [ "CFB8MCT128", "fips_aesavs -f" ],
167 [ "CFB8MCT192", "fips_aesavs -f" ],
168 [ "CFB8MCT256", "fips_aesavs -f" ],
169 [ "CFB8MMT128", "fips_aesavs -f" ],
170 [ "CFB8MMT192", "fips_aesavs -f" ],
171 [ "CFB8MMT256", "fips_aesavs -f" ],
172 [ "CFB8VarKey128", "fips_aesavs -f" ],
173 [ "CFB8VarKey192", "fips_aesavs -f" ],
174 [ "CFB8VarKey256", "fips_aesavs -f" ],
175 [ "CFB8VarTxt128", "fips_aesavs -f" ],
176 [ "CFB8VarTxt192", "fips_aesavs -f" ],
177 [ "CFB8VarTxt256", "fips_aesavs -f" ],
178
179 [ "ECBGFSbox128", "fips_aesavs -f" ],
180 [ "ECBGFSbox192", "fips_aesavs -f" ],
181 [ "ECBGFSbox256", "fips_aesavs -f" ],
182 [ "ECBKeySbox128", "fips_aesavs -f" ],
183 [ "ECBKeySbox192", "fips_aesavs -f" ],
184 [ "ECBKeySbox256", "fips_aesavs -f" ],
185 [ "ECBMCT128", "fips_aesavs -f" ],
186 [ "ECBMCT192", "fips_aesavs -f" ],
187 [ "ECBMCT256", "fips_aesavs -f" ],
188 [ "ECBMMT128", "fips_aesavs -f" ],
189 [ "ECBMMT192", "fips_aesavs -f" ],
190 [ "ECBMMT256", "fips_aesavs -f" ],
191 [ "ECBVarKey128", "fips_aesavs -f" ],
192 [ "ECBVarKey192", "fips_aesavs -f" ],
193 [ "ECBVarKey256", "fips_aesavs -f" ],
194 [ "ECBVarTxt128", "fips_aesavs -f" ],
195 [ "ECBVarTxt192", "fips_aesavs -f" ],
196 [ "ECBVarTxt256", "fips_aesavs -f" ],
197 [ "OFBGFSbox128", "fips_aesavs -f" ],
198 [ "OFBGFSbox192", "fips_aesavs -f" ],
199 [ "OFBGFSbox256", "fips_aesavs -f" ],
200 [ "OFBKeySbox128", "fips_aesavs -f" ],
201 [ "OFBKeySbox192", "fips_aesavs -f" ],
202 [ "OFBKeySbox256", "fips_aesavs -f" ],
203 [ "OFBMCT128", "fips_aesavs -f" ],
204 [ "OFBMCT192", "fips_aesavs -f" ],
205 [ "OFBMCT256", "fips_aesavs -f" ],
206 [ "OFBMMT128", "fips_aesavs -f" ],
207 [ "OFBMMT192", "fips_aesavs -f" ],
208 [ "OFBMMT256", "fips_aesavs -f" ],
209 [ "OFBVarKey128", "fips_aesavs -f" ],
210 [ "OFBVarKey192", "fips_aesavs -f" ],
211 [ "OFBVarKey256", "fips_aesavs -f" ],
212 [ "OFBVarTxt128", "fips_aesavs -f" ],
213 [ "OFBVarTxt192", "fips_aesavs -f" ],
214 [ "OFBVarTxt256", "fips_aesavs -f" ]
215
216);
217
218my @fips_aes_cfb1_test_list = (
219
220 # AES CFB1 tests
221
222 [ "CFB1GFSbox128", "fips_aesavs -f" ],
223 [ "CFB1GFSbox192", "fips_aesavs -f" ],
224 [ "CFB1GFSbox256", "fips_aesavs -f" ],
225 [ "CFB1KeySbox128", "fips_aesavs -f" ],
226 [ "CFB1KeySbox192", "fips_aesavs -f" ],
227 [ "CFB1KeySbox256", "fips_aesavs -f" ],
228 [ "CFB1MCT128", "fips_aesavs -f" ],
229 [ "CFB1MCT192", "fips_aesavs -f" ],
230 [ "CFB1MCT256", "fips_aesavs -f" ],
231 [ "CFB1MMT128", "fips_aesavs -f" ],
232 [ "CFB1MMT192", "fips_aesavs -f" ],
233 [ "CFB1MMT256", "fips_aesavs -f" ],
234 [ "CFB1VarKey128", "fips_aesavs -f" ],
235 [ "CFB1VarKey192", "fips_aesavs -f" ],
236 [ "CFB1VarKey256", "fips_aesavs -f" ],
237 [ "CFB1VarTxt128", "fips_aesavs -f" ],
238 [ "CFB1VarTxt192", "fips_aesavs -f" ],
239 [ "CFB1VarTxt256", "fips_aesavs -f" ]
240
241);
242
243# Triple DES tests
244
245my @fips_des3_test_list = (
246
247 "Triple DES",
248
249 [ "TCBCinvperm", "fips_desmovs -f" ],
250 [ "TCBCMMT1", "fips_desmovs -f" ],
251 [ "TCBCMMT2", "fips_desmovs -f" ],
252 [ "TCBCMMT3", "fips_desmovs -f" ],
253 [ "TCBCMonte1", "fips_desmovs -f" ],
254 [ "TCBCMonte2", "fips_desmovs -f" ],
255 [ "TCBCMonte3", "fips_desmovs -f" ],
256 [ "TCBCpermop", "fips_desmovs -f" ],
257 [ "TCBCsubtab", "fips_desmovs -f" ],
258 [ "TCBCvarkey", "fips_desmovs -f" ],
259 [ "TCBCvartext", "fips_desmovs -f" ],
260 [ "TCFB64invperm", "fips_desmovs -f" ],
261 [ "TCFB64MMT1", "fips_desmovs -f" ],
262 [ "TCFB64MMT2", "fips_desmovs -f" ],
263 [ "TCFB64MMT3", "fips_desmovs -f" ],
264 [ "TCFB64Monte1", "fips_desmovs -f" ],
265 [ "TCFB64Monte2", "fips_desmovs -f" ],
266 [ "TCFB64Monte3", "fips_desmovs -f" ],
267 [ "TCFB64permop", "fips_desmovs -f" ],
268 [ "TCFB64subtab", "fips_desmovs -f" ],
269 [ "TCFB64varkey", "fips_desmovs -f" ],
270 [ "TCFB64vartext", "fips_desmovs -f" ],
271 [ "TCFB8invperm", "fips_desmovs -f" ],
272 [ "TCFB8MMT1", "fips_desmovs -f" ],
273 [ "TCFB8MMT2", "fips_desmovs -f" ],
274 [ "TCFB8MMT3", "fips_desmovs -f" ],
275 [ "TCFB8Monte1", "fips_desmovs -f" ],
276 [ "TCFB8Monte2", "fips_desmovs -f" ],
277 [ "TCFB8Monte3", "fips_desmovs -f" ],
278 [ "TCFB8permop", "fips_desmovs -f" ],
279 [ "TCFB8subtab", "fips_desmovs -f" ],
280 [ "TCFB8varkey", "fips_desmovs -f" ],
281 [ "TCFB8vartext", "fips_desmovs -f" ],
282 [ "TECBinvperm", "fips_desmovs -f" ],
283 [ "TECBMMT1", "fips_desmovs -f" ],
284 [ "TECBMMT2", "fips_desmovs -f" ],
285 [ "TECBMMT3", "fips_desmovs -f" ],
286 [ "TECBMonte1", "fips_desmovs -f" ],
287 [ "TECBMonte2", "fips_desmovs -f" ],
288 [ "TECBMonte3", "fips_desmovs -f" ],
289 [ "TECBpermop", "fips_desmovs -f" ],
290 [ "TECBsubtab", "fips_desmovs -f" ],
291 [ "TECBvarkey", "fips_desmovs -f" ],
292 [ "TECBvartext", "fips_desmovs -f" ],
293 [ "TOFBinvperm", "fips_desmovs -f" ],
294 [ "TOFBMMT1", "fips_desmovs -f" ],
295 [ "TOFBMMT2", "fips_desmovs -f" ],
296 [ "TOFBMMT3", "fips_desmovs -f" ],
297 [ "TOFBMonte1", "fips_desmovs -f" ],
298 [ "TOFBMonte2", "fips_desmovs -f" ],
299 [ "TOFBMonte3", "fips_desmovs -f" ],
300 [ "TOFBpermop", "fips_desmovs -f" ],
301 [ "TOFBsubtab", "fips_desmovs -f" ],
302 [ "TOFBvarkey", "fips_desmovs -f" ],
303 [ "TOFBvartext", "fips_desmovs -f" ]
304
305);
306
307# Verification special cases.
308# In most cases the output of a test is deterministic and
309# it can be compared to a known good result. A few involve
310# the genration and use of random keys and the output will
311# be different each time. In thoses cases we perform special tests
312# to simply check their consistency. For example signature generation
313# output will be run through signature verification to see if all outputs
314# show as valid.
315#
316
317my %verify_special = (
318 "PQGGen" => "fips_dssvs pqgver",
319 "KeyPair" => "fips_dssvs keyver",
320 "SigGen" => "fips_dssvs sigver",
321 "SigGen15" => "fips_rsavtest",
322 "SigGenRSA" => "fips_rsavtest -x931",
323 "SigGenPSS(0)" => "fips_rsavtest -saltlen 0",
324 "SigGenPSS(62)" => "fips_rsavtest -saltlen 62",
325);
326
327my $win32 = $^O =~ m/mswin/i;
328my $onedir = 0;
329my $filter = "";
330my $tvdir;
331my $tprefix;
332my $shwrap_prefix;
333my $debug = 0;
334my $quiet = 0;
335my $notest = 0;
336my $verify = 1;
337my $rspdir = "rsp";
338my $ignore_missing = 0;
339my $ignore_bogus = 0;
340my $bufout = '';
341my $list_tests = 0;
342
343my %fips_enabled = (
344 dsa => 1,
345 rsa => 1,
346 "rsa-pss0" => 0,
347 "rsa-pss62" => 1,
348 sha => 1,
349 hmac => 1,
350 "rand-aes" => 1,
351 "rand-des2" => 0,
352 aes => 1,
353 "aes-cfb1" => 0,
354 des3 => 1
355);
356
357foreach (@ARGV) {
358 if ( $_ eq "--win32" ) {
359 $win32 = 1;
360 }
361 elsif ( $_ eq "--onedir" ) {
362 $onedir = 1;
363 }
364 elsif ( $_ eq "--debug" ) {
365 $debug = 1;
366 }
367 elsif ( $_ eq "--ignore-missing" ) {
368 $ignore_missing = 1;
369 }
370 elsif ( $_ eq "--ignore-bogus" ) {
371 $ignore_bogus = 1;
372 }
373 elsif ( $_ eq "--generate" ) {
374 $verify = 0;
375 }
376 elsif ( $_ eq "--notest" ) {
377 $notest = 1;
378 }
379 elsif ( $_ eq "--quiet" ) {
380 $quiet = 1;
381 }
382 elsif (/--dir=(.*)$/) {
383 $tvdir = $1;
384 }
385 elsif (/--rspdir=(.*)$/) {
386 $rspdir = $1;
387 }
388 elsif (/--tprefix=(.*)$/) {
389 $tprefix = $1;
390 }
391 elsif (/--shwrap_prefix=(.*)$/) {
392 $shwrap_prefix = $1;
393 }
394 elsif (/^--(enable|disable)-(.*)$/) {
395 if ( !exists $fips_enabled{$2} ) {
396 print STDERR "Unknown test $2\n";
397 }
398 if ( $1 eq "enable" ) {
399 $fips_enabled{$2} = 1;
400 }
401 else {
402 $fips_enabled{$2} = 0;
403 }
404 }
405 elsif (/--filter=(.*)$/) {
406 $filter = $1;
407 }
408 elsif (/^--list-tests$/) {
409 $list_tests = 1;
410 }
411 else {
412 Help();
413 exit(1);
414 }
415}
416
417my @fips_test_list;
418
419push @fips_test_list, @fips_dsa_test_list if $fips_enabled{"dsa"};
420push @fips_test_list, @fips_rsa_test_list if $fips_enabled{"rsa"};
421push @fips_test_list, @fips_rsa_pss0_test_list if $fips_enabled{"rsa-pss0"};
422push @fips_test_list, @fips_rsa_pss62_test_list if $fips_enabled{"rsa-pss62"};
423push @fips_test_list, @fips_sha_test_list if $fips_enabled{"sha"};
424push @fips_test_list, @fips_hmac_test_list if $fips_enabled{"hmac"};
425push @fips_test_list, @fips_rand_aes_test_list if $fips_enabled{"rand-aes"};
426push @fips_test_list, @fips_rand_des2_test_list if $fips_enabled{"rand-des2"};
427push @fips_test_list, @fips_aes_test_list if $fips_enabled{"aes"};
428push @fips_test_list, @fips_aes_cfb1_test_list if $fips_enabled{"aes-cfb1"};
429push @fips_test_list, @fips_des3_test_list if $fips_enabled{"des3"};
430
431if ($list_tests) {
432 my ( $test, $en );
433 print "=====TEST LIST=====\n";
434 foreach $test ( sort keys %fips_enabled ) {
435 $en = $fips_enabled{$test};
436 $test =~ tr/[a-z]/[A-Z]/;
437 printf "%-10s %s\n", $test, $en ? "enabled" : "disabled";
438 }
439 exit(0);
440}
441
442foreach (@fips_test_list) {
443 next unless ref($_);
444 my $nm = $_->[0];
445 $_->[2] = "";
446 $_->[3] = "";
447 print STDERR "Duplicate test $nm\n" if exists $fips_tests{$nm};
448 $fips_tests{$nm} = $_;
449}
450
451$tvdir = "." unless defined $tvdir;
452
453if ($win32) {
454 if ( !defined $tprefix ) {
455 if ($onedir) {
456 $tprefix = ".\\";
457 }
458 else {
459 $tprefix = "..\\out32dll\\";
460 }
461 }
462}
463else {
464 if ($onedir) {
465 $tprefix = "./" unless defined $tprefix;
466 $shwrap_prefix = "./" unless defined $shwrap_prefix;
467 }
468 else {
469 $tprefix = "../test/" unless defined $tprefix;
470 $shwrap_prefix = "../util/" unless defined $shwrap_prefix;
471 }
472}
473
474sanity_check_exe( $win32, $tprefix, $shwrap_prefix );
475
476my $cmd_prefix = $win32 ? "" : "${shwrap_prefix}shlib_wrap.sh ";
477
478find_files( $filter, $tvdir );
479
480sanity_check_files();
481
482my ( $runerr, $cmperr, $cmpok, $scheckrunerr, $scheckerr, $scheckok, $skipcnt )
483 = ( 0, 0, 0, 0, 0, 0, 0 );
484
485exit(0) if $notest;
486
487run_tests( $verify, $win32, $tprefix, $filter, $tvdir );
488
489if ($verify) {
490 print "ALGORITHM TEST VERIFY SUMMARY REPORT:\n";
491 print "Tests skipped due to missing files: $skipcnt\n";
492 print "Algorithm test program execution failures: $runerr\n";
493 print "Test comparisons successful: $cmpok\n";
494 print "Test comparisons failed: $cmperr\n";
495 print "Test sanity checks successful: $scheckok\n";
496 print "Test sanity checks failed: $scheckerr\n";
497 print "Sanity check program execution failures: $scheckrunerr\n";
498
499 if ( $runerr || $cmperr || $scheckrunerr || $scheckerr ) {
500 print "***TEST FAILURE***\n";
501 }
502 else {
503 print "***ALL TESTS SUCCESSFUL***\n";
504 }
505}
506else {
507 print "ALGORITHM TEST SUMMARY REPORT:\n";
508 print "Tests skipped due to missing files: $skipcnt\n";
509 print "Algorithm test program execution failures: $runerr\n";
510
511 if ($runerr) {
512 print "***TEST FAILURE***\n";
513 }
514 else {
515 print "***ALL TESTS SUCCESSFUL***\n";
516 }
517}
518
519#--------------------------------
520sub Help {
521 ( my $cmd ) = ( $0 =~ m#([^/]+)$# );
522 print <<EOF;
523$cmd: generate run CMVP algorithm tests
524 --debug Enable debug output
525 --dir=<dirname> Optional root for *.req file search
526 --filter=<regexp>
527 --onedir <dirname> Assume all components in current directory
528 --rspdir=<dirname> Name of subdirectories containing *.rsp files, default "resp"
529 --shwrap_prefix=<prefix>
530 --tprefix=<prefix>
531 --ignore-bogus Ignore duplicate or bogus files
532 --ignore-missing Ignore missing test files
533 --quiet Shhh....
534 --generate Generate algorithm test output
535 --win32 Win32 environment
536EOF
537}
538
539# Sanity check to see if all necessary executables exist
540
541sub sanity_check_exe {
542 my ( $win32, $tprefix, $shwrap_prefix ) = @_;
543 my %exe_list;
544 my $bad = 0;
545 $exe_list{ $shwrap_prefix . "shlib_wrap.sh" } = 1 unless $win32;
546 foreach (@fips_test_list) {
547 next unless ref($_);
548 my $cmd = $_->[1];
549 $cmd =~ s/ .*$//;
550 $cmd = $tprefix . $cmd;
551 $cmd .= ".exe" if $win32;
552 $exe_list{$cmd} = 1;
553 }
554
555 foreach ( sort keys %exe_list ) {
556 if ( !-f $_ ) {
557 print STDERR "ERROR: can't find executable $_\n";
558 $bad = 1;
559 }
560 }
561 if ($bad) {
562 print STDERR "FATAL ERROR: executables missing\n";
563 exit(1);
564 }
565 elsif ($debug) {
566 print STDERR "Executable sanity check passed OK\n";
567 }
568}
569
570# Search for all request and response files
571
572sub find_files {
573 my ( $filter, $dir ) = @_;
574 my ( $dirh, $testname );
575 opendir( $dirh, $dir );
576 while ( $_ = readdir($dirh) ) {
577 next if ( $_ eq "." || $_ eq ".." );
578 $_ = "$dir/$_";
579 if ( -f "$_" ) {
580 if (/\/([^\/]*)\.rsp$/) {
581 $testname = fix_pss( $1, $_ );
582 if ( exists $fips_tests{$testname} ) {
583 if ( $fips_tests{$testname}->[3] eq "" ) {
584 $fips_tests{$testname}->[3] = $_;
585 }
586 else {
587 print STDERR
588"WARNING: duplicate response file $_ for test $testname\n";
589 $nbogus++;
590 }
591 }
592 else {
593 print STDERR "WARNING: bogus file $_\n";
594 $nbogus++;
595 }
596 }
597 next unless /$filter.*\.req$/i;
598 if (/\/([^\/]*)\.req$/) {
599 $testname = fix_pss( $1, $_ );
600 if ( exists $fips_tests{$testname} ) {
601 if ( $fips_tests{$testname}->[2] eq "" ) {
602 $fips_tests{$testname}->[2] = $_;
603 }
604 else {
605 print STDERR
606"WARNING: duplicate request file $_ for test $testname\n";
607 $nbogus++;
608 }
609
610 }
611 elsif ( !/SHAmix\.req$/ ) {
612 print STDERR "WARNING: unrecognized filename $_\n";
613 $nbogus++;
614 }
615 }
616 }
617 elsif ( -d "$_" ) {
618 find_files( $filter, $_ );
619 }
620 }
621 closedir($dirh);
622}
623
624sub fix_pss {
625 my ( $test, $path ) = @_;
626 my $sl = "";
627 local $_;
628 if ( $test =~ /PSS/ ) {
629 open( IN, $path ) || die "Can't Open File $path";
630 while (<IN>) {
631 if (/^\s*#\s*salt\s+len:\s+(\d+)\s*$/i) {
632 $sl = $1;
633 last;
634 }
635 }
636 close IN;
637 if ( $sl eq "" ) {
638 print STDERR "WARNING: No Salt length detected for file $path\n";
639 }
640 else {
641 return $test . "($sl)";
642 }
643 }
644 return $test;
645}
646
647sub sanity_check_files {
648 my $bad = 0;
649 foreach (@fips_test_list) {
650 next unless ref($_);
651 my ( $tst, $cmd, $req, $resp ) = @$_;
652
653 #print STDERR "FILES $tst, $cmd, $req, $resp\n";
654 if ( $req eq "" ) {
655 print STDERR "WARNING: missing request file for $tst\n";
656 $bad = 1;
657 next;
658 }
659 if ( $verify && $resp eq "" ) {
660 print STDERR "WARNING: no response file for test $tst\n";
661 $bad = 1;
662 }
663 elsif ( !$verify && $resp ne "" ) {
664 print STDERR "WARNING: response file $resp will be overwritten\n";
665 }
666 }
667 if ($bad) {
668 print STDERR "ERROR: test vector file set not complete\n";
669 exit(1) unless $ignore_missing;
670 }
671 if ($nbogus) {
672 print STDERR
673 "ERROR: $nbogus bogus or duplicate request and response files\n";
674 exit(1) unless $ignore_bogus;
675 }
676 if ( $debug && !$nbogus && !$bad ) {
677 print STDERR "test vector file set complete\n";
678 }
679}
680
681sub run_tests {
682 my ( $verify, $win32, $tprefix, $filter, $tvdir ) = @_;
683 my ( $tname, $tref );
684 my $bad = 0;
685 foreach (@fips_test_list) {
686 if ( !ref($_) ) {
687 print "Running $_ tests\n" unless $quiet;
688 next;
689 }
690 my ( $tname, $tcmd, $req, $rsp ) = @$_;
691 my $out = $rsp;
692 if ($verify) {
693 $out =~ s/\.rsp$/.tst/;
694 }
695 if ( $req eq "" ) {
696 print STDERR
697 "WARNING: Request file for $tname missing: test skipped\n";
698 $skipcnt++;
699 next;
700 }
701 if ( $verify && $rsp eq "" ) {
702 print STDERR
703 "WARNING: Response file for $tname missing: test skipped\n";
704 $skipcnt++;
705 next;
706 }
707 elsif ( !$verify ) {
708 if ( $rsp ne "" ) {
709 print STDERR "WARNING: Response file for $tname deleted\n";
710 unlink $rsp;
711 }
712 $out = $req;
713 $out =~ s|/req/(\S+)\.req|/$rspdir/$1.rsp|;
714 my $outdir = $out;
715 $outdir =~ s|/[^/]*$||;
716 if ( !-d $outdir ) {
717 print STDERR "DEBUG: Creating directory $outdir\n" if $debug;
718 mkdir($outdir) || die "Can't create directory $outdir";
719 }
720 }
721 my $cmd = "$cmd_prefix$tprefix$tcmd ";
722 if ( $tcmd =~ /-f$/ ) {
723 $cmd .= "$req $out";
724 }
725 else {
726 $cmd .= "<$req >$out";
727 }
728 print STDERR "DEBUG: running test $tname\n" if ( $debug && !$verify );
729 system($cmd);
730 if ( $? != 0 ) {
731 print STDERR
732 "WARNING: error executing test $tname for command: $cmd\n";
733 $runerr++;
734 next;
735 }
736 if ($verify) {
737 if ( exists $verify_special{$tname} ) {
738 my $vout = $rsp;
739 $vout =~ s/\.rsp$/.ver/;
740 $tcmd = $verify_special{$tname};
741 $cmd = "$cmd_prefix$tprefix$tcmd ";
742 $cmd .= "<$out >$vout";
743 system($cmd);
744 if ( $? != 0 ) {
745 print STDERR
746 "WARNING: error executing verify test $tname $cmd\n";
747 $scheckrunerr++;
748 next;
749 }
750 my ( $fcount, $pcount ) = ( 0, 0 );
751 open VER, "$vout";
752 while (<VER>) {
753 if (/^Result\s*=\s*(\S*)\s*$/i)
754
755 {
756 if ( $1 eq "F" ) {
757 $fcount++;
758 }
759 else {
760 $pcount++;
761 }
762 }
763 }
764 close VER;
765
766 unlink $vout;
767 if ( $fcount || $debug ) {
768 print STDERR "DEBUG: $tname, Pass=$pcount, Fail=$fcount\n";
769 }
770 if ( $fcount || !$pcount ) {
771 $scheckerr++;
772 }
773 else {
774 $scheckok++;
775 }
776
777 }
778 elsif ( !cmp_file( $tname, $rsp, $out ) ) {
779 $cmperr++;
780 }
781 else {
782 $cmpok++;
783 }
784 unlink $out;
785 }
786 }
787}
788
789sub cmp_file {
790 my ( $tname, $rsp, $tst ) = @_;
791 my ( $rspf, $tstf );
792 my ( $rspline, $tstline );
793 if ( !open( $rspf, $rsp ) ) {
794 print STDERR "ERROR: can't open request file $rsp\n";
795 return 0;
796 }
797 if ( !open( $tstf, $tst ) ) {
798 print STDERR "ERROR: can't open output file $tst\n";
799 return 0;
800 }
801 for ( ; ; ) {
802 $rspline = next_line($rspf);
803 $tstline = next_line($tstf);
804 if ( !defined($rspline) && !defined($tstline) ) {
805 print STDERR "DEBUG: $tname file comparison OK\n" if $debug;
806 return 1;
807 }
808 if ( !defined($rspline) ) {
809 print STDERR "ERROR: $tname EOF on $rspf\n";
810 return 0;
811 }
812 if ( !defined($tstline) ) {
813 print STDERR "ERROR: $tname EOF on $tstf\n";
814 return 0;
815 }
816
817 # Workaround for bug in RAND des2 test output */
818 if ( $tstline =~ /^Key2 =/ && $rspline =~ /^Key1 =/ ) {
819 $rspline =~ s/^Key1/Key2/;
820 }
821
822 if ( $tstline ne $rspline ) {
823 print STDERR "ERROR: $tname mismatch:\n";
824 print STDERR "\t $tstline != $rspline\n";
825 return 0;
826 }
827 }
828 return 1;
829}
830
831sub next_line {
832 my ($in) = @_;
833
834 while (<$in>) {
835 chomp;
836
837 # Delete comments
838 s/#.*$//;
839
840 # Ignore blank lines
841 next if (/^\s*$/);
842
843 # Translate multiple space into one
844 s/\s+/ /g;
845 return $_;
846 }
847 return undef;
848}
diff --git a/src/lib/libssl/src/fips/fipsld b/src/lib/libssl/src/fips/fipsld
new file mode 100755
index 0000000000..c71d4d95a5
--- /dev/null
+++ b/src/lib/libssl/src/fips/fipsld
@@ -0,0 +1,170 @@
1#!/bin/sh -e
2#
3# Copyright (c) 2005-2007 The OpenSSL Project.
4#
5# Depending on output file name, the script either embeds fingerprint
6# into libcrypto.so or static application. "Static" refers to static
7# libcrypto.a, not [necessarily] application per se.
8#
9# Even though this script is called fipsld, it expects C compiler
10# command line syntax and $FIPSLD_CC or $CC environment variable set
11# and can even be used to compile source files.
12
13#set -x
14
15CC=${FIPSLD_CC:-${CC}}
16[ -n "${CC}" ] || { echo '$CC is not defined'; exit 1; }
17
18# Initially -c wasn't intended to be interpreted here, but it might
19# make life easier for those who want to build FIPS-ified applications
20# with minimal [if any] modifications to their Makefiles...
21( while [ "x$1" != "x" -a "x$1" != "x-c" -a "x$1" != "x-E" ]; do shift; done;
22 [ $# -ge 1 ]
23) && exec ${CC} "$@"
24
25TARGET=`(while [ "x$1" != "x" -a "x$1" != "x-o" ]; do shift; done; echo $2)`
26
27# If using an auto-tooled (autoconf/automake/libtool) project,
28# configure will fail when testing the compiler or even performing
29# simple checks. Pass-through to compiler directly if application is
30# is not being linked with libcrypto, allowing auto-tooled applications
31# to utilize fipsld (e.g. CC=/usr/local/ssl/bin/fipsld FIPSLD_CC=gcc
32# ./configure && make). But keep in mind[!] that if certified code
33# resides in a shared library, then fipsld *may not* be used and
34# end-developer should not modify application configuration and build
35# procedures. This is because in-core fingerprint and associated
36# procedures are already embedded into and executed in shared library
37# context.
38case `basename "${TARGET}"` in
39libcrypto*|libfips*|*.dll) ;;
40*) case "$*" in
41 *libcrypto.a*|*-lcrypto*|*fipscanister.o*) ;;
42 *) exec ${CC} "$@" ;;
43 esac
44esac
45
46[ -n "${TARGET}" ] || { echo 'no -o specified'; exit 1; }
47
48# Turn on debugging output?
49( while [ "x$1" != "x" -a "x$1" != "x-DDEBUG_FINGERPRINT_PREMAIN" ]; do shift; done;
50 [ $# -ge 1 ]
51) && set -x
52
53THERE="`echo $0 | sed -e 's|[^/]*$||'`"..
54
55# fipscanister.o can appear in command line
56CANISTER_O=`(while [ "x$1" != "x" ]; do case "$1" in *fipscanister.o) echo $1; exit;; esac; shift; done)`
57if [ -z "${CANISTER_O}" ]; then
58 # If set, FIPSLIBDIR is location of installed validated FIPS module
59 if [ -n "${FIPSLIBDIR}" ]; then
60 CANISTER_O="${FIPSLIBDIR}/fipscanister.o"
61 elif [ -f "${THERE}/fips/fipscanister.o" ]; then
62 CANISTER_O="${THERE}/fips/fipscanister.o"
63 elif [ -f "${THERE}/lib/fipscanister.o" ]; then
64 CANISTER_O="${THERE}/lib/fipscanister.o"
65 fi
66 CANISTER_O_CMD="${CANISTER_O}"
67fi
68[ -f ${CANISTER_O} ] || { echo "unable to find ${CANISTER_O}"; exit 1; }
69
70PREMAIN_C=`dirname "${CANISTER_O}"`/fips_premain.c
71
72HMAC_KEY="etaonrishdlcupfm"
73
74case "`(uname -s) 2>/dev/null`" in
75OSF1|IRIX*) _WL_PREMAIN="-Wl,-init,FINGERPRINT_premain" ;;
76HP-UX) _WL_PREMAIN="-Wl,+init,FINGERPRINT_premain" ;;
77AIX) _WL_PREMAIN="-Wl,-binitfini:FINGERPRINT_premain,-bnoobjreorder";;
78Darwin) ( while [ "x$1" != "x" -a "x$1" != "x-dynamiclib" ]; do shift; done;
79 [ $# -ge 1 ]
80 ) && _WL_PREMAIN="-Wl,-init,_FINGERPRINT_premain" ;;
81esac
82
83case "${TARGET}" in
84[!/]*) TARGET=./${TARGET} ;;
85esac
86
87case `basename "${TARGET}"` in
88lib*|*.dll) # must be linking a shared lib...
89 # Shared lib creation can be taking place in the source
90 # directory only, but fipscanister.o can reside elsewhere...
91 FINGERTYPE="${THERE}/fips/fips_standalone_sha1"
92
93 # verify fipspremain.c against its detached signature...
94 ${FINGERTYPE} "${PREMAIN_C}" | sed "s/(.*\//(/" | \
95 diff -w "${PREMAIN_C}.sha1" - || \
96 { echo "${PREMAIN_C} fingerprint mismatch"; exit 1; }
97 # verify fipscanister.o against its detached signature...
98 ${FINGERTYPE} "${CANISTER_O}" | sed "s/(.*\//(/" | \
99 diff -w "${CANISTER_O}.sha1" - || \
100 { echo "${CANISTER_O} fingerprint mismatch"; exit 1; }
101
102 # Temporarily remove fipscanister.o from libcrypto.a!
103 # We are required to use the standalone copy...
104 if [ -f "${THERE}/libcrypto.a" ]; then
105 if ar d "${THERE}/libcrypto.a" fipscanister.o; then
106 (ranlib "${THERE}/libcrypto.a") 2>/dev/null || :
107 trap 'ar r "${THERE}/libcrypto.a" "${CANISTER_O}";
108 (ranlib "${THERE}/libcrypto.a") 2>/dev/null || :;
109 sleep 1;
110 touch -c "${TARGET}"' 0
111 fi
112 fi
113
114 /bin/rm -f "${TARGET}"
115 ${CC} ${CANISTER_O_CMD:+"${CANISTER_O_CMD}"} \
116 "${PREMAIN_C}" \
117 ${_WL_PREMAIN} "$@"
118
119 # generate signature...
120 SIG=`"${THERE}/fips/fips_premain_dso" "${TARGET}"`
121 /bin/rm -f "${TARGET}"
122 if [ -z "${SIG}" ]; then
123 echo "unable to collect signature"; exit 1
124 fi
125
126 # recompile with signature...
127 ${CC} ${CANISTER_O_CMD:+"${CANISTER_O_CMD}"} \
128 -DHMAC_SHA1_SIG=\"${SIG}\" "${PREMAIN_C}" \
129 ${_WL_PREMAIN} "$@"
130 ;;
131
132*) # must be linking statically...
133 # Static linking can be taking place either in the source
134 # directory or off the installed binary target destination.
135 if [ -x "${THERE}/fips/fips_standalone_sha1" ]; then
136 FINGERTYPE="${THERE}/fips/fips_standalone_sha1"
137 else # Installed tree is expected to contain
138 # lib/fipscanister.o, lib/fipscanister.o.sha1 and
139 # lib/fips_premain.c [not to mention bin/openssl].
140 FINGERTYPE="${THERE}/bin/openssl sha1 -hmac ${HMAC_KEY}"
141 fi
142
143 # verify fipscanister.o against its detached signature...
144 ${FINGERTYPE} "${CANISTER_O}" | sed "s/(.*\//(/" | \
145 diff -w "${CANISTER_O}.sha1" - || \
146 { echo "${CANISTER_O} fingerprint mismatch"; exit 1; }
147
148 # verify fips_premain.c against its detached signature...
149 ${FINGERTYPE} "${PREMAIN_C}" | sed "s/(.*\//(/" | \
150 diff -w "${PREMAIN_C}.sha1" - || \
151 { echo "${PREMAIN_C} fingerprint mismatch"; exit 1; }
152
153 /bin/rm -f "${TARGET}"
154 ${CC} ${CANISTER_O_CMD:+"${CANISTER_O_CMD}"} \
155 "${PREMAIN_C}" \
156 ${_WL_PREMAIN} "$@"
157
158 # generate signature...
159 SIG=`"${TARGET}"`
160 /bin/rm -f "${TARGET}"
161 if [ -z "${SIG}" ]; then
162 echo "unable to collect signature"; exit 1
163 fi
164
165 # recompile with signature...
166 ${CC} ${CANISTER_O_CMD:+"${CANISTER_O_CMD}"} \
167 -DHMAC_SHA1_SIG=\"${SIG}\" "${PREMAIN_C}" \
168 ${_WL_PREMAIN} "$@"
169 ;;
170esac
diff --git a/src/lib/libssl/src/fips/fipstests.bat b/src/lib/libssl/src/fips/fipstests.bat
new file mode 100644
index 0000000000..aae3b13fd1
--- /dev/null
+++ b/src/lib/libssl/src/fips/fipstests.bat
@@ -0,0 +1,229 @@
1@echo off
2rem Test vector run script
3rem Auto generated by mkfipsscr.pl script
4rem Do not edit
5
6
7echo Running tests in .\testvectors\AES\req
8if exist ".\testvectors\AES\rsp" rd /s /q ".\testvectors\AES\rsp"
9md ".\testvectors\AES\rsp"
10..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCGFSbox128.req" ".\testvectors\AES\rsp\CBCGFSbox128.rsp"
11..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCGFSbox192.req" ".\testvectors\AES\rsp\CBCGFSbox192.rsp"
12..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCGFSbox256.req" ".\testvectors\AES\rsp\CBCGFSbox256.rsp"
13..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCKeySbox128.req" ".\testvectors\AES\rsp\CBCKeySbox128.rsp"
14..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCKeySbox192.req" ".\testvectors\AES\rsp\CBCKeySbox192.rsp"
15..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCKeySbox256.req" ".\testvectors\AES\rsp\CBCKeySbox256.rsp"
16..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCMCT128.req" ".\testvectors\AES\rsp\CBCMCT128.rsp"
17..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCMCT192.req" ".\testvectors\AES\rsp\CBCMCT192.rsp"
18..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCMCT256.req" ".\testvectors\AES\rsp\CBCMCT256.rsp"
19..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCMMT128.req" ".\testvectors\AES\rsp\CBCMMT128.rsp"
20..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCMMT192.req" ".\testvectors\AES\rsp\CBCMMT192.rsp"
21..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCMMT256.req" ".\testvectors\AES\rsp\CBCMMT256.rsp"
22..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCVarKey128.req" ".\testvectors\AES\rsp\CBCVarKey128.rsp"
23..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCVarKey192.req" ".\testvectors\AES\rsp\CBCVarKey192.rsp"
24..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCVarKey256.req" ".\testvectors\AES\rsp\CBCVarKey256.rsp"
25..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCVarTxt128.req" ".\testvectors\AES\rsp\CBCVarTxt128.rsp"
26..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCVarTxt192.req" ".\testvectors\AES\rsp\CBCVarTxt192.rsp"
27..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CBCVarTxt256.req" ".\testvectors\AES\rsp\CBCVarTxt256.rsp"
28..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128GFSbox128.req" ".\testvectors\AES\rsp\CFB128GFSbox128.rsp"
29..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128GFSbox192.req" ".\testvectors\AES\rsp\CFB128GFSbox192.rsp"
30..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128GFSbox256.req" ".\testvectors\AES\rsp\CFB128GFSbox256.rsp"
31..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128KeySbox128.req" ".\testvectors\AES\rsp\CFB128KeySbox128.rsp"
32..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128KeySbox192.req" ".\testvectors\AES\rsp\CFB128KeySbox192.rsp"
33..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128KeySbox256.req" ".\testvectors\AES\rsp\CFB128KeySbox256.rsp"
34..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128MCT128.req" ".\testvectors\AES\rsp\CFB128MCT128.rsp"
35..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128MCT192.req" ".\testvectors\AES\rsp\CFB128MCT192.rsp"
36..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128MCT256.req" ".\testvectors\AES\rsp\CFB128MCT256.rsp"
37..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128MMT128.req" ".\testvectors\AES\rsp\CFB128MMT128.rsp"
38..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128MMT192.req" ".\testvectors\AES\rsp\CFB128MMT192.rsp"
39..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128MMT256.req" ".\testvectors\AES\rsp\CFB128MMT256.rsp"
40..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128VarKey128.req" ".\testvectors\AES\rsp\CFB128VarKey128.rsp"
41..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128VarKey192.req" ".\testvectors\AES\rsp\CFB128VarKey192.rsp"
42..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128VarKey256.req" ".\testvectors\AES\rsp\CFB128VarKey256.rsp"
43..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128VarTxt128.req" ".\testvectors\AES\rsp\CFB128VarTxt128.rsp"
44..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128VarTxt192.req" ".\testvectors\AES\rsp\CFB128VarTxt192.rsp"
45..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB128VarTxt256.req" ".\testvectors\AES\rsp\CFB128VarTxt256.rsp"
46..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1GFSbox128.req" ".\testvectors\AES\rsp\CFB1GFSbox128.rsp"
47..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1GFSbox192.req" ".\testvectors\AES\rsp\CFB1GFSbox192.rsp"
48..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1GFSbox256.req" ".\testvectors\AES\rsp\CFB1GFSbox256.rsp"
49..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1KeySbox128.req" ".\testvectors\AES\rsp\CFB1KeySbox128.rsp"
50..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1KeySbox192.req" ".\testvectors\AES\rsp\CFB1KeySbox192.rsp"
51..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1KeySbox256.req" ".\testvectors\AES\rsp\CFB1KeySbox256.rsp"
52..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1MCT128.req" ".\testvectors\AES\rsp\CFB1MCT128.rsp"
53..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1MCT192.req" ".\testvectors\AES\rsp\CFB1MCT192.rsp"
54..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1MCT256.req" ".\testvectors\AES\rsp\CFB1MCT256.rsp"
55..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1MMT128.req" ".\testvectors\AES\rsp\CFB1MMT128.rsp"
56..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1MMT192.req" ".\testvectors\AES\rsp\CFB1MMT192.rsp"
57..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1MMT256.req" ".\testvectors\AES\rsp\CFB1MMT256.rsp"
58..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1VarKey128.req" ".\testvectors\AES\rsp\CFB1VarKey128.rsp"
59..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1VarKey192.req" ".\testvectors\AES\rsp\CFB1VarKey192.rsp"
60..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1VarKey256.req" ".\testvectors\AES\rsp\CFB1VarKey256.rsp"
61..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1VarTxt128.req" ".\testvectors\AES\rsp\CFB1VarTxt128.rsp"
62..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1VarTxt192.req" ".\testvectors\AES\rsp\CFB1VarTxt192.rsp"
63..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB1VarTxt256.req" ".\testvectors\AES\rsp\CFB1VarTxt256.rsp"
64..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8GFSbox128.req" ".\testvectors\AES\rsp\CFB8GFSbox128.rsp"
65..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8GFSbox192.req" ".\testvectors\AES\rsp\CFB8GFSbox192.rsp"
66..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8GFSbox256.req" ".\testvectors\AES\rsp\CFB8GFSbox256.rsp"
67..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8KeySbox128.req" ".\testvectors\AES\rsp\CFB8KeySbox128.rsp"
68..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8KeySbox192.req" ".\testvectors\AES\rsp\CFB8KeySbox192.rsp"
69..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8KeySbox256.req" ".\testvectors\AES\rsp\CFB8KeySbox256.rsp"
70..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8MCT128.req" ".\testvectors\AES\rsp\CFB8MCT128.rsp"
71..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8MCT192.req" ".\testvectors\AES\rsp\CFB8MCT192.rsp"
72..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8MCT256.req" ".\testvectors\AES\rsp\CFB8MCT256.rsp"
73..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8MMT128.req" ".\testvectors\AES\rsp\CFB8MMT128.rsp"
74..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8MMT192.req" ".\testvectors\AES\rsp\CFB8MMT192.rsp"
75..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8MMT256.req" ".\testvectors\AES\rsp\CFB8MMT256.rsp"
76..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8VarKey128.req" ".\testvectors\AES\rsp\CFB8VarKey128.rsp"
77..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8VarKey192.req" ".\testvectors\AES\rsp\CFB8VarKey192.rsp"
78..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8VarKey256.req" ".\testvectors\AES\rsp\CFB8VarKey256.rsp"
79..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8VarTxt128.req" ".\testvectors\AES\rsp\CFB8VarTxt128.rsp"
80..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8VarTxt192.req" ".\testvectors\AES\rsp\CFB8VarTxt192.rsp"
81..\out32dll\fips_aesavs -f ".\testvectors\AES\req\CFB8VarTxt256.req" ".\testvectors\AES\rsp\CFB8VarTxt256.rsp"
82..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBGFSbox128.req" ".\testvectors\AES\rsp\ECBGFSbox128.rsp"
83..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBGFSbox192.req" ".\testvectors\AES\rsp\ECBGFSbox192.rsp"
84..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBGFSbox256.req" ".\testvectors\AES\rsp\ECBGFSbox256.rsp"
85..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBKeySbox128.req" ".\testvectors\AES\rsp\ECBKeySbox128.rsp"
86..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBKeySbox192.req" ".\testvectors\AES\rsp\ECBKeySbox192.rsp"
87..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBKeySbox256.req" ".\testvectors\AES\rsp\ECBKeySbox256.rsp"
88..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBMCT128.req" ".\testvectors\AES\rsp\ECBMCT128.rsp"
89..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBMCT192.req" ".\testvectors\AES\rsp\ECBMCT192.rsp"
90..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBMCT256.req" ".\testvectors\AES\rsp\ECBMCT256.rsp"
91..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBMMT128.req" ".\testvectors\AES\rsp\ECBMMT128.rsp"
92..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBMMT192.req" ".\testvectors\AES\rsp\ECBMMT192.rsp"
93..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBMMT256.req" ".\testvectors\AES\rsp\ECBMMT256.rsp"
94..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBVarKey128.req" ".\testvectors\AES\rsp\ECBVarKey128.rsp"
95..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBVarKey192.req" ".\testvectors\AES\rsp\ECBVarKey192.rsp"
96..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBVarKey256.req" ".\testvectors\AES\rsp\ECBVarKey256.rsp"
97..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBVarTxt128.req" ".\testvectors\AES\rsp\ECBVarTxt128.rsp"
98..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBVarTxt192.req" ".\testvectors\AES\rsp\ECBVarTxt192.rsp"
99..\out32dll\fips_aesavs -f ".\testvectors\AES\req\ECBVarTxt256.req" ".\testvectors\AES\rsp\ECBVarTxt256.rsp"
100..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBGFSbox128.req" ".\testvectors\AES\rsp\OFBGFSbox128.rsp"
101..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBGFSbox192.req" ".\testvectors\AES\rsp\OFBGFSbox192.rsp"
102..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBGFSbox256.req" ".\testvectors\AES\rsp\OFBGFSbox256.rsp"
103..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBKeySbox128.req" ".\testvectors\AES\rsp\OFBKeySbox128.rsp"
104..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBKeySbox192.req" ".\testvectors\AES\rsp\OFBKeySbox192.rsp"
105..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBKeySbox256.req" ".\testvectors\AES\rsp\OFBKeySbox256.rsp"
106..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBMCT128.req" ".\testvectors\AES\rsp\OFBMCT128.rsp"
107..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBMCT192.req" ".\testvectors\AES\rsp\OFBMCT192.rsp"
108..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBMCT256.req" ".\testvectors\AES\rsp\OFBMCT256.rsp"
109..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBMMT128.req" ".\testvectors\AES\rsp\OFBMMT128.rsp"
110..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBMMT192.req" ".\testvectors\AES\rsp\OFBMMT192.rsp"
111..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBMMT256.req" ".\testvectors\AES\rsp\OFBMMT256.rsp"
112..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBVarKey128.req" ".\testvectors\AES\rsp\OFBVarKey128.rsp"
113..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBVarKey192.req" ".\testvectors\AES\rsp\OFBVarKey192.rsp"
114..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBVarKey256.req" ".\testvectors\AES\rsp\OFBVarKey256.rsp"
115..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBVarTxt128.req" ".\testvectors\AES\rsp\OFBVarTxt128.rsp"
116..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBVarTxt192.req" ".\testvectors\AES\rsp\OFBVarTxt192.rsp"
117..\out32dll\fips_aesavs -f ".\testvectors\AES\req\OFBVarTxt256.req" ".\testvectors\AES\rsp\OFBVarTxt256.rsp"
118
119echo Running tests in .\testvectors\DSA\req
120if exist ".\testvectors\DSA\rsp" rd /s /q ".\testvectors\DSA\rsp"
121md ".\testvectors\DSA\rsp"
122..\out32dll\fips_dssvs keypair < ".\testvectors\DSA\req\KeyPair.req" > ".\testvectors\DSA\rsp\KeyPair.rsp"
123..\out32dll\fips_dssvs pqg < ".\testvectors\DSA\req\PQGGen.req" > ".\testvectors\DSA\rsp\PQGGen.rsp"
124..\out32dll\fips_dssvs siggen < ".\testvectors\DSA\req\SigGen.req" > ".\testvectors\DSA\rsp\SigGen.rsp"
125..\out32dll\fips_dssvs sigver < ".\testvectors\DSA\req\SigVer.req" > ".\testvectors\DSA\rsp\SigVer.rsp"
126
127echo Running tests in .\testvectors\HMAC\req
128if exist ".\testvectors\HMAC\rsp" rd /s /q ".\testvectors\HMAC\rsp"
129md ".\testvectors\HMAC\rsp"
130..\out32dll\fips_hmactest < ".\testvectors\HMAC\req\HMAC.req" > ".\testvectors\HMAC\rsp\HMAC.rsp"
131
132echo Running tests in .\testvectors\RNG\req
133if exist ".\testvectors\RNG\rsp" rd /s /q ".\testvectors\RNG\rsp"
134md ".\testvectors\RNG\rsp"
135..\out32dll\fips_rngvs mct < ".\testvectors\RNG\req\ANSI931_AES128MCT.req" > ".\testvectors\RNG\rsp\ANSI931_AES128MCT.rsp"
136..\out32dll\fips_rngvs vst < ".\testvectors\RNG\req\ANSI931_AES128VST.req" > ".\testvectors\RNG\rsp\ANSI931_AES128VST.rsp"
137..\out32dll\fips_rngvs mct < ".\testvectors\RNG\req\ANSI931_AES192MCT.req" > ".\testvectors\RNG\rsp\ANSI931_AES192MCT.rsp"
138..\out32dll\fips_rngvs vst < ".\testvectors\RNG\req\ANSI931_AES192VST.req" > ".\testvectors\RNG\rsp\ANSI931_AES192VST.rsp"
139..\out32dll\fips_rngvs mct < ".\testvectors\RNG\req\ANSI931_AES256MCT.req" > ".\testvectors\RNG\rsp\ANSI931_AES256MCT.rsp"
140..\out32dll\fips_rngvs vst < ".\testvectors\RNG\req\ANSI931_AES256VST.req" > ".\testvectors\RNG\rsp\ANSI931_AES256VST.rsp"
141
142echo Running tests in .\testvectors\RSA\req
143if exist ".\testvectors\RSA\rsp" rd /s /q ".\testvectors\RSA\rsp"
144md ".\testvectors\RSA\rsp"
145..\out32dll\fips_rsagtest < ".\testvectors\RSA\req\KeyGenRSA.req" > ".\testvectors\RSA\rsp\KeyGenRSA.rsp"
146..\out32dll\fips_rsastest < ".\testvectors\RSA\req\SigGen15.req" > ".\testvectors\RSA\rsp\SigGen15.rsp"
147..\out32dll\fips_rsastest -saltlen 0 < ".\testvectors\RSA\req\SigGenPSS.req" > ".\testvectors\RSA\rsp\SigGenPSS.rsp"
148..\out32dll\fips_rsastest -x931 < ".\testvectors\RSA\req\SigGenRSA.req" > ".\testvectors\RSA\rsp\SigGenRSA.rsp"
149..\out32dll\fips_rsavtest < ".\testvectors\RSA\req\SigVer15.req" > ".\testvectors\RSA\rsp\SigVer15.rsp"
150..\out32dll\fips_rsavtest -saltlen 0 < ".\testvectors\RSA\req\SigVerPSS.req" > ".\testvectors\RSA\rsp\SigVerPSS.rsp"
151..\out32dll\fips_rsavtest -x931 < ".\testvectors\RSA\req\SigVerRSA.req" > ".\testvectors\RSA\rsp\SigVerRSA.rsp"
152
153echo Running tests in .\testvectors\SHA\req
154if exist ".\testvectors\SHA\rsp" rd /s /q ".\testvectors\SHA\rsp"
155md ".\testvectors\SHA\rsp"
156..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA1LongMsg.req" > ".\testvectors\SHA\rsp\SHA1LongMsg.rsp"
157..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA1Monte.req" > ".\testvectors\SHA\rsp\SHA1Monte.rsp"
158..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA1ShortMsg.req" > ".\testvectors\SHA\rsp\SHA1ShortMsg.rsp"
159..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA224LongMsg.req" > ".\testvectors\SHA\rsp\SHA224LongMsg.rsp"
160..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA224Monte.req" > ".\testvectors\SHA\rsp\SHA224Monte.rsp"
161..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA224ShortMsg.req" > ".\testvectors\SHA\rsp\SHA224ShortMsg.rsp"
162..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA256LongMsg.req" > ".\testvectors\SHA\rsp\SHA256LongMsg.rsp"
163..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA256Monte.req" > ".\testvectors\SHA\rsp\SHA256Monte.rsp"
164..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA256ShortMsg.req" > ".\testvectors\SHA\rsp\SHA256ShortMsg.rsp"
165..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA384LongMsg.req" > ".\testvectors\SHA\rsp\SHA384LongMsg.rsp"
166..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA384Monte.req" > ".\testvectors\SHA\rsp\SHA384Monte.rsp"
167..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA384ShortMsg.req" > ".\testvectors\SHA\rsp\SHA384ShortMsg.rsp"
168..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA512LongMsg.req" > ".\testvectors\SHA\rsp\SHA512LongMsg.rsp"
169..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA512Monte.req" > ".\testvectors\SHA\rsp\SHA512Monte.rsp"
170..\out32dll\fips_shatest < ".\testvectors\SHA\req\SHA512ShortMsg.req" > ".\testvectors\SHA\rsp\SHA512ShortMsg.rsp"
171
172echo Running tests in .\testvectors\TDES\req
173if exist ".\testvectors\TDES\rsp" rd /s /q ".\testvectors\TDES\rsp"
174md ".\testvectors\TDES\rsp"
175..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCinvperm.req" ".\testvectors\TDES\rsp\TCBCinvperm.rsp"
176..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCMMT1.req" ".\testvectors\TDES\rsp\TCBCMMT1.rsp"
177..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCMMT2.req" ".\testvectors\TDES\rsp\TCBCMMT2.rsp"
178..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCMMT3.req" ".\testvectors\TDES\rsp\TCBCMMT3.rsp"
179..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCMonte1.req" ".\testvectors\TDES\rsp\TCBCMonte1.rsp"
180..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCMonte2.req" ".\testvectors\TDES\rsp\TCBCMonte2.rsp"
181..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCMonte3.req" ".\testvectors\TDES\rsp\TCBCMonte3.rsp"
182..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCpermop.req" ".\testvectors\TDES\rsp\TCBCpermop.rsp"
183..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCsubtab.req" ".\testvectors\TDES\rsp\TCBCsubtab.rsp"
184..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCvarkey.req" ".\testvectors\TDES\rsp\TCBCvarkey.rsp"
185..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCBCvartext.req" ".\testvectors\TDES\rsp\TCBCvartext.rsp"
186..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64invperm.req" ".\testvectors\TDES\rsp\TCFB64invperm.rsp"
187..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64MMT1.req" ".\testvectors\TDES\rsp\TCFB64MMT1.rsp"
188..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64MMT2.req" ".\testvectors\TDES\rsp\TCFB64MMT2.rsp"
189..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64MMT3.req" ".\testvectors\TDES\rsp\TCFB64MMT3.rsp"
190..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64Monte1.req" ".\testvectors\TDES\rsp\TCFB64Monte1.rsp"
191..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64Monte2.req" ".\testvectors\TDES\rsp\TCFB64Monte2.rsp"
192..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64Monte3.req" ".\testvectors\TDES\rsp\TCFB64Monte3.rsp"
193..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64permop.req" ".\testvectors\TDES\rsp\TCFB64permop.rsp"
194..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64subtab.req" ".\testvectors\TDES\rsp\TCFB64subtab.rsp"
195..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64varkey.req" ".\testvectors\TDES\rsp\TCFB64varkey.rsp"
196..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB64vartext.req" ".\testvectors\TDES\rsp\TCFB64vartext.rsp"
197..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8invperm.req" ".\testvectors\TDES\rsp\TCFB8invperm.rsp"
198..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8MMT1.req" ".\testvectors\TDES\rsp\TCFB8MMT1.rsp"
199..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8MMT2.req" ".\testvectors\TDES\rsp\TCFB8MMT2.rsp"
200..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8MMT3.req" ".\testvectors\TDES\rsp\TCFB8MMT3.rsp"
201..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8Monte1.req" ".\testvectors\TDES\rsp\TCFB8Monte1.rsp"
202..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8Monte2.req" ".\testvectors\TDES\rsp\TCFB8Monte2.rsp"
203..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8Monte3.req" ".\testvectors\TDES\rsp\TCFB8Monte3.rsp"
204..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8permop.req" ".\testvectors\TDES\rsp\TCFB8permop.rsp"
205..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8subtab.req" ".\testvectors\TDES\rsp\TCFB8subtab.rsp"
206..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8varkey.req" ".\testvectors\TDES\rsp\TCFB8varkey.rsp"
207..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TCFB8vartext.req" ".\testvectors\TDES\rsp\TCFB8vartext.rsp"
208..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBinvperm.req" ".\testvectors\TDES\rsp\TECBinvperm.rsp"
209..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBMMT1.req" ".\testvectors\TDES\rsp\TECBMMT1.rsp"
210..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBMMT2.req" ".\testvectors\TDES\rsp\TECBMMT2.rsp"
211..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBMMT3.req" ".\testvectors\TDES\rsp\TECBMMT3.rsp"
212..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBMonte1.req" ".\testvectors\TDES\rsp\TECBMonte1.rsp"
213..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBMonte2.req" ".\testvectors\TDES\rsp\TECBMonte2.rsp"
214..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBMonte3.req" ".\testvectors\TDES\rsp\TECBMonte3.rsp"
215..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBpermop.req" ".\testvectors\TDES\rsp\TECBpermop.rsp"
216..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBsubtab.req" ".\testvectors\TDES\rsp\TECBsubtab.rsp"
217..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBvarkey.req" ".\testvectors\TDES\rsp\TECBvarkey.rsp"
218..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TECBvartext.req" ".\testvectors\TDES\rsp\TECBvartext.rsp"
219..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBinvperm.req" ".\testvectors\TDES\rsp\TOFBinvperm.rsp"
220..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBMMT1.req" ".\testvectors\TDES\rsp\TOFBMMT1.rsp"
221..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBMMT2.req" ".\testvectors\TDES\rsp\TOFBMMT2.rsp"
222..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBMMT3.req" ".\testvectors\TDES\rsp\TOFBMMT3.rsp"
223..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBMonte1.req" ".\testvectors\TDES\rsp\TOFBMonte1.rsp"
224..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBMonte2.req" ".\testvectors\TDES\rsp\TOFBMonte2.rsp"
225..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBMonte3.req" ".\testvectors\TDES\rsp\TOFBMonte3.rsp"
226..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBpermop.req" ".\testvectors\TDES\rsp\TOFBpermop.rsp"
227..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBsubtab.req" ".\testvectors\TDES\rsp\TOFBsubtab.rsp"
228..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBvarkey.req" ".\testvectors\TDES\rsp\TOFBvarkey.rsp"
229..\out32dll\fips_desmovs -f ".\testvectors\TDES\req\TOFBvartext.req" ".\testvectors\TDES\rsp\TOFBvartext.rsp"
diff --git a/src/lib/libssl/src/fips/fipstests.sh b/src/lib/libssl/src/fips/fipstests.sh
new file mode 100644
index 0000000000..a351446942
--- /dev/null
+++ b/src/lib/libssl/src/fips/fipstests.sh
@@ -0,0 +1,400 @@
1#!/bin/sh
2
3# Test vector run script
4# Auto generated by mkfipsscr.pl script
5# Do not edit
6
7
8echo Running tests in "./testvectors/AES/req"
9rm -rf "./testvectors/AES/rsp"
10mkdir "./testvectors/AES/rsp"
11
12../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCGFSbox128.req" "./testvectors/AES/rsp/CBCGFSbox128.rsp" || { echo "./testvectors/AES/req/CBCGFSbox128.req failure" ; exit 1
13}
14../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCGFSbox192.req" "./testvectors/AES/rsp/CBCGFSbox192.rsp" || { echo "./testvectors/AES/req/CBCGFSbox192.req failure" ; exit 1
15}
16../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCGFSbox256.req" "./testvectors/AES/rsp/CBCGFSbox256.rsp" || { echo "./testvectors/AES/req/CBCGFSbox256.req failure" ; exit 1
17}
18../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCKeySbox128.req" "./testvectors/AES/rsp/CBCKeySbox128.rsp" || { echo "./testvectors/AES/req/CBCKeySbox128.req failure" ; exit 1
19}
20../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCKeySbox192.req" "./testvectors/AES/rsp/CBCKeySbox192.rsp" || { echo "./testvectors/AES/req/CBCKeySbox192.req failure" ; exit 1
21}
22../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCKeySbox256.req" "./testvectors/AES/rsp/CBCKeySbox256.rsp" || { echo "./testvectors/AES/req/CBCKeySbox256.req failure" ; exit 1
23}
24../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCMCT128.req" "./testvectors/AES/rsp/CBCMCT128.rsp" || { echo "./testvectors/AES/req/CBCMCT128.req failure" ; exit 1
25}
26../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCMCT192.req" "./testvectors/AES/rsp/CBCMCT192.rsp" || { echo "./testvectors/AES/req/CBCMCT192.req failure" ; exit 1
27}
28../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCMCT256.req" "./testvectors/AES/rsp/CBCMCT256.rsp" || { echo "./testvectors/AES/req/CBCMCT256.req failure" ; exit 1
29}
30../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCMMT128.req" "./testvectors/AES/rsp/CBCMMT128.rsp" || { echo "./testvectors/AES/req/CBCMMT128.req failure" ; exit 1
31}
32../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCMMT192.req" "./testvectors/AES/rsp/CBCMMT192.rsp" || { echo "./testvectors/AES/req/CBCMMT192.req failure" ; exit 1
33}
34../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCMMT256.req" "./testvectors/AES/rsp/CBCMMT256.rsp" || { echo "./testvectors/AES/req/CBCMMT256.req failure" ; exit 1
35}
36../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCVarKey128.req" "./testvectors/AES/rsp/CBCVarKey128.rsp" || { echo "./testvectors/AES/req/CBCVarKey128.req failure" ; exit 1
37}
38../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCVarKey192.req" "./testvectors/AES/rsp/CBCVarKey192.rsp" || { echo "./testvectors/AES/req/CBCVarKey192.req failure" ; exit 1
39}
40../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCVarKey256.req" "./testvectors/AES/rsp/CBCVarKey256.rsp" || { echo "./testvectors/AES/req/CBCVarKey256.req failure" ; exit 1
41}
42../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCVarTxt128.req" "./testvectors/AES/rsp/CBCVarTxt128.rsp" || { echo "./testvectors/AES/req/CBCVarTxt128.req failure" ; exit 1
43}
44../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCVarTxt192.req" "./testvectors/AES/rsp/CBCVarTxt192.rsp" || { echo "./testvectors/AES/req/CBCVarTxt192.req failure" ; exit 1
45}
46../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CBCVarTxt256.req" "./testvectors/AES/rsp/CBCVarTxt256.rsp" || { echo "./testvectors/AES/req/CBCVarTxt256.req failure" ; exit 1
47}
48../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128GFSbox128.req" "./testvectors/AES/rsp/CFB128GFSbox128.rsp" || { echo "./testvectors/AES/req/CFB128GFSbox128.req failure" ; exit 1
49}
50../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128GFSbox192.req" "./testvectors/AES/rsp/CFB128GFSbox192.rsp" || { echo "./testvectors/AES/req/CFB128GFSbox192.req failure" ; exit 1
51}
52../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128GFSbox256.req" "./testvectors/AES/rsp/CFB128GFSbox256.rsp" || { echo "./testvectors/AES/req/CFB128GFSbox256.req failure" ; exit 1
53}
54../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128KeySbox128.req" "./testvectors/AES/rsp/CFB128KeySbox128.rsp" || { echo "./testvectors/AES/req/CFB128KeySbox128.req failure" ; exit 1
55}
56../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128KeySbox192.req" "./testvectors/AES/rsp/CFB128KeySbox192.rsp" || { echo "./testvectors/AES/req/CFB128KeySbox192.req failure" ; exit 1
57}
58../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128KeySbox256.req" "./testvectors/AES/rsp/CFB128KeySbox256.rsp" || { echo "./testvectors/AES/req/CFB128KeySbox256.req failure" ; exit 1
59}
60../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128MCT128.req" "./testvectors/AES/rsp/CFB128MCT128.rsp" || { echo "./testvectors/AES/req/CFB128MCT128.req failure" ; exit 1
61}
62../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128MCT192.req" "./testvectors/AES/rsp/CFB128MCT192.rsp" || { echo "./testvectors/AES/req/CFB128MCT192.req failure" ; exit 1
63}
64../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128MCT256.req" "./testvectors/AES/rsp/CFB128MCT256.rsp" || { echo "./testvectors/AES/req/CFB128MCT256.req failure" ; exit 1
65}
66../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128MMT128.req" "./testvectors/AES/rsp/CFB128MMT128.rsp" || { echo "./testvectors/AES/req/CFB128MMT128.req failure" ; exit 1
67}
68../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128MMT192.req" "./testvectors/AES/rsp/CFB128MMT192.rsp" || { echo "./testvectors/AES/req/CFB128MMT192.req failure" ; exit 1
69}
70../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128MMT256.req" "./testvectors/AES/rsp/CFB128MMT256.rsp" || { echo "./testvectors/AES/req/CFB128MMT256.req failure" ; exit 1
71}
72../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128VarKey128.req" "./testvectors/AES/rsp/CFB128VarKey128.rsp" || { echo "./testvectors/AES/req/CFB128VarKey128.req failure" ; exit 1
73}
74../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128VarKey192.req" "./testvectors/AES/rsp/CFB128VarKey192.rsp" || { echo "./testvectors/AES/req/CFB128VarKey192.req failure" ; exit 1
75}
76../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128VarKey256.req" "./testvectors/AES/rsp/CFB128VarKey256.rsp" || { echo "./testvectors/AES/req/CFB128VarKey256.req failure" ; exit 1
77}
78../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128VarTxt128.req" "./testvectors/AES/rsp/CFB128VarTxt128.rsp" || { echo "./testvectors/AES/req/CFB128VarTxt128.req failure" ; exit 1
79}
80../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128VarTxt192.req" "./testvectors/AES/rsp/CFB128VarTxt192.rsp" || { echo "./testvectors/AES/req/CFB128VarTxt192.req failure" ; exit 1
81}
82../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB128VarTxt256.req" "./testvectors/AES/rsp/CFB128VarTxt256.rsp" || { echo "./testvectors/AES/req/CFB128VarTxt256.req failure" ; exit 1
83}
84../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1GFSbox128.req" "./testvectors/AES/rsp/CFB1GFSbox128.rsp" || { echo "./testvectors/AES/req/CFB1GFSbox128.req failure" ; exit 1
85}
86../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1GFSbox192.req" "./testvectors/AES/rsp/CFB1GFSbox192.rsp" || { echo "./testvectors/AES/req/CFB1GFSbox192.req failure" ; exit 1
87}
88../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1GFSbox256.req" "./testvectors/AES/rsp/CFB1GFSbox256.rsp" || { echo "./testvectors/AES/req/CFB1GFSbox256.req failure" ; exit 1
89}
90../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1KeySbox128.req" "./testvectors/AES/rsp/CFB1KeySbox128.rsp" || { echo "./testvectors/AES/req/CFB1KeySbox128.req failure" ; exit 1
91}
92../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1KeySbox192.req" "./testvectors/AES/rsp/CFB1KeySbox192.rsp" || { echo "./testvectors/AES/req/CFB1KeySbox192.req failure" ; exit 1
93}
94../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1KeySbox256.req" "./testvectors/AES/rsp/CFB1KeySbox256.rsp" || { echo "./testvectors/AES/req/CFB1KeySbox256.req failure" ; exit 1
95}
96../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1MCT128.req" "./testvectors/AES/rsp/CFB1MCT128.rsp" || { echo "./testvectors/AES/req/CFB1MCT128.req failure" ; exit 1
97}
98../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1MCT192.req" "./testvectors/AES/rsp/CFB1MCT192.rsp" || { echo "./testvectors/AES/req/CFB1MCT192.req failure" ; exit 1
99}
100../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1MCT256.req" "./testvectors/AES/rsp/CFB1MCT256.rsp" || { echo "./testvectors/AES/req/CFB1MCT256.req failure" ; exit 1
101}
102../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1MMT128.req" "./testvectors/AES/rsp/CFB1MMT128.rsp" || { echo "./testvectors/AES/req/CFB1MMT128.req failure" ; exit 1
103}
104../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1MMT192.req" "./testvectors/AES/rsp/CFB1MMT192.rsp" || { echo "./testvectors/AES/req/CFB1MMT192.req failure" ; exit 1
105}
106../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1MMT256.req" "./testvectors/AES/rsp/CFB1MMT256.rsp" || { echo "./testvectors/AES/req/CFB1MMT256.req failure" ; exit 1
107}
108../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1VarKey128.req" "./testvectors/AES/rsp/CFB1VarKey128.rsp" || { echo "./testvectors/AES/req/CFB1VarKey128.req failure" ; exit 1
109}
110../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1VarKey192.req" "./testvectors/AES/rsp/CFB1VarKey192.rsp" || { echo "./testvectors/AES/req/CFB1VarKey192.req failure" ; exit 1
111}
112../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1VarKey256.req" "./testvectors/AES/rsp/CFB1VarKey256.rsp" || { echo "./testvectors/AES/req/CFB1VarKey256.req failure" ; exit 1
113}
114../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1VarTxt128.req" "./testvectors/AES/rsp/CFB1VarTxt128.rsp" || { echo "./testvectors/AES/req/CFB1VarTxt128.req failure" ; exit 1
115}
116../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1VarTxt192.req" "./testvectors/AES/rsp/CFB1VarTxt192.rsp" || { echo "./testvectors/AES/req/CFB1VarTxt192.req failure" ; exit 1
117}
118../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB1VarTxt256.req" "./testvectors/AES/rsp/CFB1VarTxt256.rsp" || { echo "./testvectors/AES/req/CFB1VarTxt256.req failure" ; exit 1
119}
120../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8GFSbox128.req" "./testvectors/AES/rsp/CFB8GFSbox128.rsp" || { echo "./testvectors/AES/req/CFB8GFSbox128.req failure" ; exit 1
121}
122../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8GFSbox192.req" "./testvectors/AES/rsp/CFB8GFSbox192.rsp" || { echo "./testvectors/AES/req/CFB8GFSbox192.req failure" ; exit 1
123}
124../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8GFSbox256.req" "./testvectors/AES/rsp/CFB8GFSbox256.rsp" || { echo "./testvectors/AES/req/CFB8GFSbox256.req failure" ; exit 1
125}
126../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8KeySbox128.req" "./testvectors/AES/rsp/CFB8KeySbox128.rsp" || { echo "./testvectors/AES/req/CFB8KeySbox128.req failure" ; exit 1
127}
128../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8KeySbox192.req" "./testvectors/AES/rsp/CFB8KeySbox192.rsp" || { echo "./testvectors/AES/req/CFB8KeySbox192.req failure" ; exit 1
129}
130../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8KeySbox256.req" "./testvectors/AES/rsp/CFB8KeySbox256.rsp" || { echo "./testvectors/AES/req/CFB8KeySbox256.req failure" ; exit 1
131}
132../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8MCT128.req" "./testvectors/AES/rsp/CFB8MCT128.rsp" || { echo "./testvectors/AES/req/CFB8MCT128.req failure" ; exit 1
133}
134../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8MCT192.req" "./testvectors/AES/rsp/CFB8MCT192.rsp" || { echo "./testvectors/AES/req/CFB8MCT192.req failure" ; exit 1
135}
136../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8MCT256.req" "./testvectors/AES/rsp/CFB8MCT256.rsp" || { echo "./testvectors/AES/req/CFB8MCT256.req failure" ; exit 1
137}
138../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8MMT128.req" "./testvectors/AES/rsp/CFB8MMT128.rsp" || { echo "./testvectors/AES/req/CFB8MMT128.req failure" ; exit 1
139}
140../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8MMT192.req" "./testvectors/AES/rsp/CFB8MMT192.rsp" || { echo "./testvectors/AES/req/CFB8MMT192.req failure" ; exit 1
141}
142../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8MMT256.req" "./testvectors/AES/rsp/CFB8MMT256.rsp" || { echo "./testvectors/AES/req/CFB8MMT256.req failure" ; exit 1
143}
144../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8VarKey128.req" "./testvectors/AES/rsp/CFB8VarKey128.rsp" || { echo "./testvectors/AES/req/CFB8VarKey128.req failure" ; exit 1
145}
146../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8VarKey192.req" "./testvectors/AES/rsp/CFB8VarKey192.rsp" || { echo "./testvectors/AES/req/CFB8VarKey192.req failure" ; exit 1
147}
148../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8VarKey256.req" "./testvectors/AES/rsp/CFB8VarKey256.rsp" || { echo "./testvectors/AES/req/CFB8VarKey256.req failure" ; exit 1
149}
150../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8VarTxt128.req" "./testvectors/AES/rsp/CFB8VarTxt128.rsp" || { echo "./testvectors/AES/req/CFB8VarTxt128.req failure" ; exit 1
151}
152../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8VarTxt192.req" "./testvectors/AES/rsp/CFB8VarTxt192.rsp" || { echo "./testvectors/AES/req/CFB8VarTxt192.req failure" ; exit 1
153}
154../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/CFB8VarTxt256.req" "./testvectors/AES/rsp/CFB8VarTxt256.rsp" || { echo "./testvectors/AES/req/CFB8VarTxt256.req failure" ; exit 1
155}
156../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBGFSbox128.req" "./testvectors/AES/rsp/ECBGFSbox128.rsp" || { echo "./testvectors/AES/req/ECBGFSbox128.req failure" ; exit 1
157}
158../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBGFSbox192.req" "./testvectors/AES/rsp/ECBGFSbox192.rsp" || { echo "./testvectors/AES/req/ECBGFSbox192.req failure" ; exit 1
159}
160../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBGFSbox256.req" "./testvectors/AES/rsp/ECBGFSbox256.rsp" || { echo "./testvectors/AES/req/ECBGFSbox256.req failure" ; exit 1
161}
162../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBKeySbox128.req" "./testvectors/AES/rsp/ECBKeySbox128.rsp" || { echo "./testvectors/AES/req/ECBKeySbox128.req failure" ; exit 1
163}
164../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBKeySbox192.req" "./testvectors/AES/rsp/ECBKeySbox192.rsp" || { echo "./testvectors/AES/req/ECBKeySbox192.req failure" ; exit 1
165}
166../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBKeySbox256.req" "./testvectors/AES/rsp/ECBKeySbox256.rsp" || { echo "./testvectors/AES/req/ECBKeySbox256.req failure" ; exit 1
167}
168../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBMCT128.req" "./testvectors/AES/rsp/ECBMCT128.rsp" || { echo "./testvectors/AES/req/ECBMCT128.req failure" ; exit 1
169}
170../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBMCT192.req" "./testvectors/AES/rsp/ECBMCT192.rsp" || { echo "./testvectors/AES/req/ECBMCT192.req failure" ; exit 1
171}
172../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBMCT256.req" "./testvectors/AES/rsp/ECBMCT256.rsp" || { echo "./testvectors/AES/req/ECBMCT256.req failure" ; exit 1
173}
174../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBMMT128.req" "./testvectors/AES/rsp/ECBMMT128.rsp" || { echo "./testvectors/AES/req/ECBMMT128.req failure" ; exit 1
175}
176../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBMMT192.req" "./testvectors/AES/rsp/ECBMMT192.rsp" || { echo "./testvectors/AES/req/ECBMMT192.req failure" ; exit 1
177}
178../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBMMT256.req" "./testvectors/AES/rsp/ECBMMT256.rsp" || { echo "./testvectors/AES/req/ECBMMT256.req failure" ; exit 1
179}
180../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBVarKey128.req" "./testvectors/AES/rsp/ECBVarKey128.rsp" || { echo "./testvectors/AES/req/ECBVarKey128.req failure" ; exit 1
181}
182../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBVarKey192.req" "./testvectors/AES/rsp/ECBVarKey192.rsp" || { echo "./testvectors/AES/req/ECBVarKey192.req failure" ; exit 1
183}
184../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBVarKey256.req" "./testvectors/AES/rsp/ECBVarKey256.rsp" || { echo "./testvectors/AES/req/ECBVarKey256.req failure" ; exit 1
185}
186../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBVarTxt128.req" "./testvectors/AES/rsp/ECBVarTxt128.rsp" || { echo "./testvectors/AES/req/ECBVarTxt128.req failure" ; exit 1
187}
188../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBVarTxt192.req" "./testvectors/AES/rsp/ECBVarTxt192.rsp" || { echo "./testvectors/AES/req/ECBVarTxt192.req failure" ; exit 1
189}
190../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/ECBVarTxt256.req" "./testvectors/AES/rsp/ECBVarTxt256.rsp" || { echo "./testvectors/AES/req/ECBVarTxt256.req failure" ; exit 1
191}
192../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBGFSbox128.req" "./testvectors/AES/rsp/OFBGFSbox128.rsp" || { echo "./testvectors/AES/req/OFBGFSbox128.req failure" ; exit 1
193}
194../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBGFSbox192.req" "./testvectors/AES/rsp/OFBGFSbox192.rsp" || { echo "./testvectors/AES/req/OFBGFSbox192.req failure" ; exit 1
195}
196../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBGFSbox256.req" "./testvectors/AES/rsp/OFBGFSbox256.rsp" || { echo "./testvectors/AES/req/OFBGFSbox256.req failure" ; exit 1
197}
198../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBKeySbox128.req" "./testvectors/AES/rsp/OFBKeySbox128.rsp" || { echo "./testvectors/AES/req/OFBKeySbox128.req failure" ; exit 1
199}
200../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBKeySbox192.req" "./testvectors/AES/rsp/OFBKeySbox192.rsp" || { echo "./testvectors/AES/req/OFBKeySbox192.req failure" ; exit 1
201}
202../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBKeySbox256.req" "./testvectors/AES/rsp/OFBKeySbox256.rsp" || { echo "./testvectors/AES/req/OFBKeySbox256.req failure" ; exit 1
203}
204../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBMCT128.req" "./testvectors/AES/rsp/OFBMCT128.rsp" || { echo "./testvectors/AES/req/OFBMCT128.req failure" ; exit 1
205}
206../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBMCT192.req" "./testvectors/AES/rsp/OFBMCT192.rsp" || { echo "./testvectors/AES/req/OFBMCT192.req failure" ; exit 1
207}
208../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBMCT256.req" "./testvectors/AES/rsp/OFBMCT256.rsp" || { echo "./testvectors/AES/req/OFBMCT256.req failure" ; exit 1
209}
210../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBMMT128.req" "./testvectors/AES/rsp/OFBMMT128.rsp" || { echo "./testvectors/AES/req/OFBMMT128.req failure" ; exit 1
211}
212../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBMMT192.req" "./testvectors/AES/rsp/OFBMMT192.rsp" || { echo "./testvectors/AES/req/OFBMMT192.req failure" ; exit 1
213}
214../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBMMT256.req" "./testvectors/AES/rsp/OFBMMT256.rsp" || { echo "./testvectors/AES/req/OFBMMT256.req failure" ; exit 1
215}
216../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBVarKey128.req" "./testvectors/AES/rsp/OFBVarKey128.rsp" || { echo "./testvectors/AES/req/OFBVarKey128.req failure" ; exit 1
217}
218../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBVarKey192.req" "./testvectors/AES/rsp/OFBVarKey192.rsp" || { echo "./testvectors/AES/req/OFBVarKey192.req failure" ; exit 1
219}
220../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBVarKey256.req" "./testvectors/AES/rsp/OFBVarKey256.rsp" || { echo "./testvectors/AES/req/OFBVarKey256.req failure" ; exit 1
221}
222../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBVarTxt128.req" "./testvectors/AES/rsp/OFBVarTxt128.rsp" || { echo "./testvectors/AES/req/OFBVarTxt128.req failure" ; exit 1
223}
224../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBVarTxt192.req" "./testvectors/AES/rsp/OFBVarTxt192.rsp" || { echo "./testvectors/AES/req/OFBVarTxt192.req failure" ; exit 1
225}
226../util/shlib_wrap.sh ../test/fips_aesavs -f "./testvectors/AES/req/OFBVarTxt256.req" "./testvectors/AES/rsp/OFBVarTxt256.rsp" || { echo "./testvectors/AES/req/OFBVarTxt256.req failure" ; exit 1
227}
228
229echo Running tests in "./testvectors/DSA/req"
230rm -rf "./testvectors/DSA/rsp"
231mkdir "./testvectors/DSA/rsp"
232
233../util/shlib_wrap.sh ../test/fips_dssvs keypair < "./testvectors/DSA/req/KeyPair.req" > "./testvectors/DSA/rsp/KeyPair.rsp" || { echo "./testvectors/DSA/req/KeyPair.req failure" ; exit 1; }
234../util/shlib_wrap.sh ../test/fips_dssvs pqg < "./testvectors/DSA/req/PQGGen.req" > "./testvectors/DSA/rsp/PQGGen.rsp" || { echo "./testvectors/DSA/req/PQGGen.req failure" ; exit 1; }
235../util/shlib_wrap.sh ../test/fips_dssvs siggen < "./testvectors/DSA/req/SigGen.req" > "./testvectors/DSA/rsp/SigGen.rsp" || { echo "./testvectors/DSA/req/SigGen.req failure" ; exit 1; }
236../util/shlib_wrap.sh ../test/fips_dssvs sigver < "./testvectors/DSA/req/SigVer.req" > "./testvectors/DSA/rsp/SigVer.rsp" || { echo "./testvectors/DSA/req/SigVer.req failure" ; exit 1; }
237
238echo Running tests in "./testvectors/HMAC/req"
239rm -rf "./testvectors/HMAC/rsp"
240mkdir "./testvectors/HMAC/rsp"
241
242../util/shlib_wrap.sh ../test/fips_hmactest < "./testvectors/HMAC/req/HMAC.req" > "./testvectors/HMAC/rsp/HMAC.rsp" || { echo "./testvectors/HMAC/req/HMAC.req failure" ; exit 1; }
243
244echo Running tests in "./testvectors/RNG/req"
245rm -rf "./testvectors/RNG/rsp"
246mkdir "./testvectors/RNG/rsp"
247
248../util/shlib_wrap.sh ../test/fips_rngvs mct < "./testvectors/RNG/req/ANSI931_AES128MCT.req" > "./testvectors/RNG/rsp/ANSI931_AES128MCT.rsp" || { echo "./testvectors/RNG/req/ANSI931_AES128MCT.req failure" ; exit 1; }
249../util/shlib_wrap.sh ../test/fips_rngvs vst < "./testvectors/RNG/req/ANSI931_AES128VST.req" > "./testvectors/RNG/rsp/ANSI931_AES128VST.rsp" || { echo "./testvectors/RNG/req/ANSI931_AES128VST.req failure" ; exit 1; }
250../util/shlib_wrap.sh ../test/fips_rngvs mct < "./testvectors/RNG/req/ANSI931_AES192MCT.req" > "./testvectors/RNG/rsp/ANSI931_AES192MCT.rsp" || { echo "./testvectors/RNG/req/ANSI931_AES192MCT.req failure" ; exit 1; }
251../util/shlib_wrap.sh ../test/fips_rngvs vst < "./testvectors/RNG/req/ANSI931_AES192VST.req" > "./testvectors/RNG/rsp/ANSI931_AES192VST.rsp" || { echo "./testvectors/RNG/req/ANSI931_AES192VST.req failure" ; exit 1; }
252../util/shlib_wrap.sh ../test/fips_rngvs mct < "./testvectors/RNG/req/ANSI931_AES256MCT.req" > "./testvectors/RNG/rsp/ANSI931_AES256MCT.rsp" || { echo "./testvectors/RNG/req/ANSI931_AES256MCT.req failure" ; exit 1; }
253../util/shlib_wrap.sh ../test/fips_rngvs vst < "./testvectors/RNG/req/ANSI931_AES256VST.req" > "./testvectors/RNG/rsp/ANSI931_AES256VST.rsp" || { echo "./testvectors/RNG/req/ANSI931_AES256VST.req failure" ; exit 1; }
254
255echo Running tests in "./testvectors/RSA/req"
256rm -rf "./testvectors/RSA/rsp"
257mkdir "./testvectors/RSA/rsp"
258
259../util/shlib_wrap.sh ../test/fips_rsagtest < "./testvectors/RSA/req/KeyGenRSA.req" > "./testvectors/RSA/rsp/KeyGenRSA.rsp" || { echo "./testvectors/RSA/req/KeyGenRSA.req failure" ; exit 1; }
260../util/shlib_wrap.sh ../test/fips_rsastest < "./testvectors/RSA/req/SigGen15.req" > "./testvectors/RSA/rsp/SigGen15.rsp" || { echo "./testvectors/RSA/req/SigGen15.req failure" ; exit 1; }
261../util/shlib_wrap.sh ../test/fips_rsastest -saltlen 0 < "./testvectors/RSA/req/SigGenPSS.req" > "./testvectors/RSA/rsp/SigGenPSS.rsp" || { echo "./testvectors/RSA/req/SigGenPSS.req failure" ; exit 1; }
262../util/shlib_wrap.sh ../test/fips_rsastest -x931 < "./testvectors/RSA/req/SigGenRSA.req" > "./testvectors/RSA/rsp/SigGenRSA.rsp" || { echo "./testvectors/RSA/req/SigGenRSA.req failure" ; exit 1; }
263../util/shlib_wrap.sh ../test/fips_rsavtest < "./testvectors/RSA/req/SigVer15.req" > "./testvectors/RSA/rsp/SigVer15.rsp" || { echo "./testvectors/RSA/req/SigVer15.req failure" ; exit 1; }
264../util/shlib_wrap.sh ../test/fips_rsavtest -saltlen 0 < "./testvectors/RSA/req/SigVerPSS.req" > "./testvectors/RSA/rsp/SigVerPSS.rsp" || { echo "./testvectors/RSA/req/SigVerPSS.req failure" ; exit 1; }
265../util/shlib_wrap.sh ../test/fips_rsavtest -x931 < "./testvectors/RSA/req/SigVerRSA.req" > "./testvectors/RSA/rsp/SigVerRSA.rsp" || { echo "./testvectors/RSA/req/SigVerRSA.req failure" ; exit 1; }
266
267echo Running tests in "./testvectors/SHA/req"
268rm -rf "./testvectors/SHA/rsp"
269mkdir "./testvectors/SHA/rsp"
270
271../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA1LongMsg.req" > "./testvectors/SHA/rsp/SHA1LongMsg.rsp" || { echo "./testvectors/SHA/req/SHA1LongMsg.req failure" ; exit 1; }
272../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA1Monte.req" > "./testvectors/SHA/rsp/SHA1Monte.rsp" || { echo "./testvectors/SHA/req/SHA1Monte.req failure" ; exit 1; }
273../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA1ShortMsg.req" > "./testvectors/SHA/rsp/SHA1ShortMsg.rsp" || { echo "./testvectors/SHA/req/SHA1ShortMsg.req failure" ; exit 1; }
274../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA224LongMsg.req" > "./testvectors/SHA/rsp/SHA224LongMsg.rsp" || { echo "./testvectors/SHA/req/SHA224LongMsg.req failure" ; exit 1; }
275../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA224Monte.req" > "./testvectors/SHA/rsp/SHA224Monte.rsp" || { echo "./testvectors/SHA/req/SHA224Monte.req failure" ; exit 1; }
276../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA224ShortMsg.req" > "./testvectors/SHA/rsp/SHA224ShortMsg.rsp" || { echo "./testvectors/SHA/req/SHA224ShortMsg.req failure" ; exit 1; }
277../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA256LongMsg.req" > "./testvectors/SHA/rsp/SHA256LongMsg.rsp" || { echo "./testvectors/SHA/req/SHA256LongMsg.req failure" ; exit 1; }
278../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA256Monte.req" > "./testvectors/SHA/rsp/SHA256Monte.rsp" || { echo "./testvectors/SHA/req/SHA256Monte.req failure" ; exit 1; }
279../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA256ShortMsg.req" > "./testvectors/SHA/rsp/SHA256ShortMsg.rsp" || { echo "./testvectors/SHA/req/SHA256ShortMsg.req failure" ; exit 1; }
280../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA384LongMsg.req" > "./testvectors/SHA/rsp/SHA384LongMsg.rsp" || { echo "./testvectors/SHA/req/SHA384LongMsg.req failure" ; exit 1; }
281../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA384Monte.req" > "./testvectors/SHA/rsp/SHA384Monte.rsp" || { echo "./testvectors/SHA/req/SHA384Monte.req failure" ; exit 1; }
282../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA384ShortMsg.req" > "./testvectors/SHA/rsp/SHA384ShortMsg.rsp" || { echo "./testvectors/SHA/req/SHA384ShortMsg.req failure" ; exit 1; }
283../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA512LongMsg.req" > "./testvectors/SHA/rsp/SHA512LongMsg.rsp" || { echo "./testvectors/SHA/req/SHA512LongMsg.req failure" ; exit 1; }
284../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA512Monte.req" > "./testvectors/SHA/rsp/SHA512Monte.rsp" || { echo "./testvectors/SHA/req/SHA512Monte.req failure" ; exit 1; }
285../util/shlib_wrap.sh ../test/fips_shatest < "./testvectors/SHA/req/SHA512ShortMsg.req" > "./testvectors/SHA/rsp/SHA512ShortMsg.rsp" || { echo "./testvectors/SHA/req/SHA512ShortMsg.req failure" ; exit 1; }
286
287echo Running tests in "./testvectors/TDES/req"
288rm -rf "./testvectors/TDES/rsp"
289mkdir "./testvectors/TDES/rsp"
290
291../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCinvperm.req" "./testvectors/TDES/rsp/TCBCinvperm.rsp" || { echo "./testvectors/TDES/req/TCBCinvperm.req failure" ; exit 1
292}
293../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCMMT1.req" "./testvectors/TDES/rsp/TCBCMMT1.rsp" || { echo "./testvectors/TDES/req/TCBCMMT1.req failure" ; exit 1
294}
295../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCMMT2.req" "./testvectors/TDES/rsp/TCBCMMT2.rsp" || { echo "./testvectors/TDES/req/TCBCMMT2.req failure" ; exit 1
296}
297../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCMMT3.req" "./testvectors/TDES/rsp/TCBCMMT3.rsp" || { echo "./testvectors/TDES/req/TCBCMMT3.req failure" ; exit 1
298}
299../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCMonte1.req" "./testvectors/TDES/rsp/TCBCMonte1.rsp" || { echo "./testvectors/TDES/req/TCBCMonte1.req failure" ; exit 1
300}
301../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCMonte2.req" "./testvectors/TDES/rsp/TCBCMonte2.rsp" || { echo "./testvectors/TDES/req/TCBCMonte2.req failure" ; exit 1
302}
303../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCMonte3.req" "./testvectors/TDES/rsp/TCBCMonte3.rsp" || { echo "./testvectors/TDES/req/TCBCMonte3.req failure" ; exit 1
304}
305../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCpermop.req" "./testvectors/TDES/rsp/TCBCpermop.rsp" || { echo "./testvectors/TDES/req/TCBCpermop.req failure" ; exit 1
306}
307../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCsubtab.req" "./testvectors/TDES/rsp/TCBCsubtab.rsp" || { echo "./testvectors/TDES/req/TCBCsubtab.req failure" ; exit 1
308}
309../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCvarkey.req" "./testvectors/TDES/rsp/TCBCvarkey.rsp" || { echo "./testvectors/TDES/req/TCBCvarkey.req failure" ; exit 1
310}
311../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCBCvartext.req" "./testvectors/TDES/rsp/TCBCvartext.rsp" || { echo "./testvectors/TDES/req/TCBCvartext.req failure" ; exit 1
312}
313../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64invperm.req" "./testvectors/TDES/rsp/TCFB64invperm.rsp" || { echo "./testvectors/TDES/req/TCFB64invperm.req failure" ; exit 1
314}
315../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64MMT1.req" "./testvectors/TDES/rsp/TCFB64MMT1.rsp" || { echo "./testvectors/TDES/req/TCFB64MMT1.req failure" ; exit 1
316}
317../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64MMT2.req" "./testvectors/TDES/rsp/TCFB64MMT2.rsp" || { echo "./testvectors/TDES/req/TCFB64MMT2.req failure" ; exit 1
318}
319../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64MMT3.req" "./testvectors/TDES/rsp/TCFB64MMT3.rsp" || { echo "./testvectors/TDES/req/TCFB64MMT3.req failure" ; exit 1
320}
321../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64Monte1.req" "./testvectors/TDES/rsp/TCFB64Monte1.rsp" || { echo "./testvectors/TDES/req/TCFB64Monte1.req failure" ; exit 1
322}
323../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64Monte2.req" "./testvectors/TDES/rsp/TCFB64Monte2.rsp" || { echo "./testvectors/TDES/req/TCFB64Monte2.req failure" ; exit 1
324}
325../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64Monte3.req" "./testvectors/TDES/rsp/TCFB64Monte3.rsp" || { echo "./testvectors/TDES/req/TCFB64Monte3.req failure" ; exit 1
326}
327../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64permop.req" "./testvectors/TDES/rsp/TCFB64permop.rsp" || { echo "./testvectors/TDES/req/TCFB64permop.req failure" ; exit 1
328}
329../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64subtab.req" "./testvectors/TDES/rsp/TCFB64subtab.rsp" || { echo "./testvectors/TDES/req/TCFB64subtab.req failure" ; exit 1
330}
331../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64varkey.req" "./testvectors/TDES/rsp/TCFB64varkey.rsp" || { echo "./testvectors/TDES/req/TCFB64varkey.req failure" ; exit 1
332}
333../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB64vartext.req" "./testvectors/TDES/rsp/TCFB64vartext.rsp" || { echo "./testvectors/TDES/req/TCFB64vartext.req failure" ; exit 1
334}
335../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8invperm.req" "./testvectors/TDES/rsp/TCFB8invperm.rsp" || { echo "./testvectors/TDES/req/TCFB8invperm.req failure" ; exit 1
336}
337../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8MMT1.req" "./testvectors/TDES/rsp/TCFB8MMT1.rsp" || { echo "./testvectors/TDES/req/TCFB8MMT1.req failure" ; exit 1
338}
339../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8MMT2.req" "./testvectors/TDES/rsp/TCFB8MMT2.rsp" || { echo "./testvectors/TDES/req/TCFB8MMT2.req failure" ; exit 1
340}
341../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8MMT3.req" "./testvectors/TDES/rsp/TCFB8MMT3.rsp" || { echo "./testvectors/TDES/req/TCFB8MMT3.req failure" ; exit 1
342}
343../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8Monte1.req" "./testvectors/TDES/rsp/TCFB8Monte1.rsp" || { echo "./testvectors/TDES/req/TCFB8Monte1.req failure" ; exit 1
344}
345../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8Monte2.req" "./testvectors/TDES/rsp/TCFB8Monte2.rsp" || { echo "./testvectors/TDES/req/TCFB8Monte2.req failure" ; exit 1
346}
347../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8Monte3.req" "./testvectors/TDES/rsp/TCFB8Monte3.rsp" || { echo "./testvectors/TDES/req/TCFB8Monte3.req failure" ; exit 1
348}
349../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8permop.req" "./testvectors/TDES/rsp/TCFB8permop.rsp" || { echo "./testvectors/TDES/req/TCFB8permop.req failure" ; exit 1
350}
351../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8subtab.req" "./testvectors/TDES/rsp/TCFB8subtab.rsp" || { echo "./testvectors/TDES/req/TCFB8subtab.req failure" ; exit 1
352}
353../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8varkey.req" "./testvectors/TDES/rsp/TCFB8varkey.rsp" || { echo "./testvectors/TDES/req/TCFB8varkey.req failure" ; exit 1
354}
355../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TCFB8vartext.req" "./testvectors/TDES/rsp/TCFB8vartext.rsp" || { echo "./testvectors/TDES/req/TCFB8vartext.req failure" ; exit 1
356}
357../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBinvperm.req" "./testvectors/TDES/rsp/TECBinvperm.rsp" || { echo "./testvectors/TDES/req/TECBinvperm.req failure" ; exit 1
358}
359../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBMMT1.req" "./testvectors/TDES/rsp/TECBMMT1.rsp" || { echo "./testvectors/TDES/req/TECBMMT1.req failure" ; exit 1
360}
361../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBMMT2.req" "./testvectors/TDES/rsp/TECBMMT2.rsp" || { echo "./testvectors/TDES/req/TECBMMT2.req failure" ; exit 1
362}
363../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBMMT3.req" "./testvectors/TDES/rsp/TECBMMT3.rsp" || { echo "./testvectors/TDES/req/TECBMMT3.req failure" ; exit 1
364}
365../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBMonte1.req" "./testvectors/TDES/rsp/TECBMonte1.rsp" || { echo "./testvectors/TDES/req/TECBMonte1.req failure" ; exit 1
366}
367../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBMonte2.req" "./testvectors/TDES/rsp/TECBMonte2.rsp" || { echo "./testvectors/TDES/req/TECBMonte2.req failure" ; exit 1
368}
369../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBMonte3.req" "./testvectors/TDES/rsp/TECBMonte3.rsp" || { echo "./testvectors/TDES/req/TECBMonte3.req failure" ; exit 1
370}
371../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBpermop.req" "./testvectors/TDES/rsp/TECBpermop.rsp" || { echo "./testvectors/TDES/req/TECBpermop.req failure" ; exit 1
372}
373../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBsubtab.req" "./testvectors/TDES/rsp/TECBsubtab.rsp" || { echo "./testvectors/TDES/req/TECBsubtab.req failure" ; exit 1
374}
375../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBvarkey.req" "./testvectors/TDES/rsp/TECBvarkey.rsp" || { echo "./testvectors/TDES/req/TECBvarkey.req failure" ; exit 1
376}
377../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TECBvartext.req" "./testvectors/TDES/rsp/TECBvartext.rsp" || { echo "./testvectors/TDES/req/TECBvartext.req failure" ; exit 1
378}
379../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBinvperm.req" "./testvectors/TDES/rsp/TOFBinvperm.rsp" || { echo "./testvectors/TDES/req/TOFBinvperm.req failure" ; exit 1
380}
381../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBMMT1.req" "./testvectors/TDES/rsp/TOFBMMT1.rsp" || { echo "./testvectors/TDES/req/TOFBMMT1.req failure" ; exit 1
382}
383../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBMMT2.req" "./testvectors/TDES/rsp/TOFBMMT2.rsp" || { echo "./testvectors/TDES/req/TOFBMMT2.req failure" ; exit 1
384}
385../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBMMT3.req" "./testvectors/TDES/rsp/TOFBMMT3.rsp" || { echo "./testvectors/TDES/req/TOFBMMT3.req failure" ; exit 1
386}
387../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBMonte1.req" "./testvectors/TDES/rsp/TOFBMonte1.rsp" || { echo "./testvectors/TDES/req/TOFBMonte1.req failure" ; exit 1
388}
389../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBMonte2.req" "./testvectors/TDES/rsp/TOFBMonte2.rsp" || { echo "./testvectors/TDES/req/TOFBMonte2.req failure" ; exit 1
390}
391../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBMonte3.req" "./testvectors/TDES/rsp/TOFBMonte3.rsp" || { echo "./testvectors/TDES/req/TOFBMonte3.req failure" ; exit 1
392}
393../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBpermop.req" "./testvectors/TDES/rsp/TOFBpermop.rsp" || { echo "./testvectors/TDES/req/TOFBpermop.req failure" ; exit 1
394}
395../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBsubtab.req" "./testvectors/TDES/rsp/TOFBsubtab.rsp" || { echo "./testvectors/TDES/req/TOFBsubtab.req failure" ; exit 1
396}
397../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBvarkey.req" "./testvectors/TDES/rsp/TOFBvarkey.rsp" || { echo "./testvectors/TDES/req/TOFBvarkey.req failure" ; exit 1
398}
399../util/shlib_wrap.sh ../test/fips_desmovs -f "./testvectors/TDES/req/TOFBvartext.req" "./testvectors/TDES/rsp/TOFBvartext.rsp" || { echo "./testvectors/TDES/req/TOFBvartext.req failure" ; exit 1
400}
diff --git a/src/lib/libssl/src/fips/hmac/Makefile b/src/lib/libssl/src/fips/hmac/Makefile
new file mode 100644
index 0000000000..be230ade9d
--- /dev/null
+++ b/src/lib/libssl/src/fips/hmac/Makefile
@@ -0,0 +1,123 @@
1#
2# OpenSSL/fips/hmac/Makefile
3#
4
5DIR= hmac
6TOP= ../..
7CC= cc
8INCLUDES=
9CFLAG=-g
10INSTALL_PREFIX=
11OPENSSLDIR= /usr/local/ssl
12INSTALLTOP=/usr/local/ssl
13MAKEDEPPROG= makedepend
14MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
15MAKEFILE= Makefile
16AR= ar r
17
18CFLAGS= $(INCLUDES) $(CFLAG)
19
20GENERAL=Makefile
21TEST=fips_hmactest.c
22APPS=
23
24LIB=$(TOP)/libcrypto.a
25LIBSRC=fips_hmac.c fips_hmac_selftest.c
26LIBOBJ=fips_hmac.o fips_hmac_selftest.o
27
28SRC= $(LIBSRC)
29
30EXHEADER=
31HEADER= $(EXHEADER)
32
33ALL= $(GENERAL) $(SRC) $(HEADER)
34
35top:
36 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
37
38all: lib
39
40lib: $(LIBOBJ)
41 @echo $(LIBOBJ) > lib
42
43files:
44 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
45
46links:
47 @$(PERL) $(TOP)/util/mklink.pl $(TOP)/include/openssl $(EXHEADER)
48 @$(PERL) $(TOP)/util/mklink.pl $(TOP)/test $(TEST)
49 @$(PERL) $(TOP)/util/mklink.pl $(TOP)/apps $(APPS)
50
51install:
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
63Q=../testvectors/hmac/req
64A=../testvectors/hmac/rsp
65
66fips_test:
67 -rm -rf $(A)
68 mkdir $(A)
69 if [ -f $(Q)/HMAC.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_hmactest < $(Q)/HMAC.req > $(A)/HMAC.rsp; fi
70
71lint:
72 lint -DLINT $(INCLUDES) $(SRC)>fluff
73
74depend:
75 $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(SRC) $(TEST)
76
77dclean:
78 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
79 mv -f Makefile.new $(MAKEFILE)
80
81clean:
82 rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
83# DO NOT DELETE THIS LINE -- make depend depends on it.
84
85fips_hmac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
86fips_hmac.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
87fips_hmac.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
88fips_hmac.o: ../../include/openssl/hmac.h ../../include/openssl/obj_mac.h
89fips_hmac.o: ../../include/openssl/objects.h
90fips_hmac.o: ../../include/openssl/opensslconf.h
91fips_hmac.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
92fips_hmac.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
93fips_hmac.o: ../../include/openssl/symhacks.h fips_hmac.c
94fips_hmac_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
95fips_hmac_selftest.o: ../../include/openssl/crypto.h
96fips_hmac_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
97fips_hmac_selftest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
98fips_hmac_selftest.o: ../../include/openssl/hmac.h
99fips_hmac_selftest.o: ../../include/openssl/lhash.h
100fips_hmac_selftest.o: ../../include/openssl/obj_mac.h
101fips_hmac_selftest.o: ../../include/openssl/objects.h
102fips_hmac_selftest.o: ../../include/openssl/opensslconf.h
103fips_hmac_selftest.o: ../../include/openssl/opensslv.h
104fips_hmac_selftest.o: ../../include/openssl/ossl_typ.h
105fips_hmac_selftest.o: ../../include/openssl/safestack.h
106fips_hmac_selftest.o: ../../include/openssl/stack.h
107fips_hmac_selftest.o: ../../include/openssl/symhacks.h fips_hmac_selftest.c
108fips_hmactest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
109fips_hmactest.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
110fips_hmactest.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
111fips_hmactest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
112fips_hmactest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
113fips_hmactest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
114fips_hmactest.o: ../../include/openssl/fips.h ../../include/openssl/hmac.h
115fips_hmactest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
116fips_hmactest.o: ../../include/openssl/objects.h
117fips_hmactest.o: ../../include/openssl/opensslconf.h
118fips_hmactest.o: ../../include/openssl/opensslv.h
119fips_hmactest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
120fips_hmactest.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
121fips_hmactest.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
122fips_hmactest.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
123fips_hmactest.o: ../../include/openssl/x509v3.h ../fips_utl.h fips_hmactest.c
diff --git a/src/lib/libssl/src/fips/hmac/fips_hmac.c b/src/lib/libssl/src/fips/hmac/fips_hmac.c
new file mode 100644
index 0000000000..7c49c9882a
--- /dev/null
+++ b/src/lib/libssl/src/fips/hmac/fips_hmac.c
@@ -0,0 +1,191 @@
1/* crypto/hmac/hmac.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#include <stdio.h>
59#include <stdlib.h>
60#include <string.h>
61#include <openssl/hmac.h>
62#include <openssl/fips.h>
63
64#ifdef OPENSSL_FIPS
65
66void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
67 const EVP_MD *md, ENGINE *impl)
68 {
69 int i,j,reset=0;
70 unsigned char pad[HMAC_MAX_MD_CBLOCK];
71
72 if (md != NULL)
73 {
74 reset=1;
75 ctx->md=md;
76 }
77 else
78 md=ctx->md;
79
80 if (key != NULL)
81 {
82 if (FIPS_mode() && !(md->flags & EVP_MD_FLAG_FIPS)
83 && (!(ctx->md_ctx.flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW)
84 || !(ctx->i_ctx.flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW)
85 || !(ctx->o_ctx.flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW)))
86 OpenSSLDie(__FILE__,__LINE__,
87 "HMAC: digest not allowed in FIPS mode");
88
89 reset=1;
90 j=M_EVP_MD_block_size(md);
91 OPENSSL_assert(j <= sizeof ctx->key);
92 if (j < len)
93 {
94 EVP_DigestInit_ex(&ctx->md_ctx,md, impl);
95 EVP_DigestUpdate(&ctx->md_ctx,key,len);
96 EVP_DigestFinal_ex(&(ctx->md_ctx),ctx->key,
97 &ctx->key_length);
98 }
99 else
100 {
101 OPENSSL_assert(len <= sizeof ctx->key);
102 memcpy(ctx->key,key,len);
103 ctx->key_length=len;
104 }
105 if(ctx->key_length != HMAC_MAX_MD_CBLOCK)
106 memset(&ctx->key[ctx->key_length], 0,
107 HMAC_MAX_MD_CBLOCK - ctx->key_length);
108 }
109
110 if (reset)
111 {
112 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
113 pad[i]=0x36^ctx->key[i];
114 EVP_DigestInit_ex(&ctx->i_ctx,md, impl);
115 EVP_DigestUpdate(&ctx->i_ctx,pad,M_EVP_MD_block_size(md));
116
117 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
118 pad[i]=0x5c^ctx->key[i];
119 EVP_DigestInit_ex(&ctx->o_ctx,md, impl);
120 EVP_DigestUpdate(&ctx->o_ctx,pad,M_EVP_MD_block_size(md));
121 }
122 EVP_MD_CTX_copy_ex(&ctx->md_ctx,&ctx->i_ctx);
123 }
124
125void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
126 const EVP_MD *md)
127 {
128 if(key && md)
129 HMAC_CTX_init(ctx);
130 HMAC_Init_ex(ctx,key,len,md, NULL);
131 }
132
133void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len)
134 {
135 EVP_DigestUpdate(&ctx->md_ctx,data,len);
136 }
137
138void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len)
139 {
140 int j;
141 unsigned int i;
142 unsigned char buf[EVP_MAX_MD_SIZE];
143
144 j=M_EVP_MD_block_size(ctx->md);
145
146 EVP_DigestFinal_ex(&ctx->md_ctx,buf,&i);
147 EVP_MD_CTX_copy_ex(&ctx->md_ctx,&ctx->o_ctx);
148 EVP_DigestUpdate(&ctx->md_ctx,buf,i);
149 EVP_DigestFinal_ex(&ctx->md_ctx,md,len);
150 }
151
152void HMAC_CTX_init(HMAC_CTX *ctx)
153 {
154 EVP_MD_CTX_init(&ctx->i_ctx);
155 EVP_MD_CTX_init(&ctx->o_ctx);
156 EVP_MD_CTX_init(&ctx->md_ctx);
157 }
158
159void HMAC_CTX_cleanup(HMAC_CTX *ctx)
160 {
161 EVP_MD_CTX_cleanup(&ctx->i_ctx);
162 EVP_MD_CTX_cleanup(&ctx->o_ctx);
163 EVP_MD_CTX_cleanup(&ctx->md_ctx);
164 memset(ctx,0,sizeof *ctx);
165 }
166
167unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
168 const unsigned char *d, size_t n, unsigned char *md,
169 unsigned int *md_len)
170 {
171 HMAC_CTX c;
172 static unsigned char m[EVP_MAX_MD_SIZE];
173
174 if (md == NULL) md=m;
175 HMAC_CTX_init(&c);
176 HMAC_Init(&c,key,key_len,evp_md);
177 HMAC_Update(&c,d,n);
178 HMAC_Final(&c,md,md_len);
179 HMAC_CTX_cleanup(&c);
180 return(md);
181 }
182
183void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags)
184 {
185 M_EVP_MD_CTX_set_flags(&ctx->i_ctx, flags);
186 M_EVP_MD_CTX_set_flags(&ctx->o_ctx, flags);
187 M_EVP_MD_CTX_set_flags(&ctx->md_ctx, flags);
188 }
189
190#endif
191
diff --git a/src/lib/libssl/src/fips/hmac/fips_hmac_selftest.c b/src/lib/libssl/src/fips/hmac/fips_hmac_selftest.c
new file mode 100644
index 0000000000..a697770732
--- /dev/null
+++ b/src/lib/libssl/src/fips/hmac/fips_hmac_selftest.c
@@ -0,0 +1,135 @@
1/* ====================================================================
2 * Copyright (c) 2005 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 *
48 */
49
50#include <string.h>
51#include <openssl/err.h>
52#include <openssl/fips.h>
53#include <openssl/hmac.h>
54
55#ifdef OPENSSL_FIPS
56typedef struct {
57 const EVP_MD *(*alg)(void);
58 const char *key, *iv;
59 unsigned char kaval[EVP_MAX_MD_SIZE];
60} HMAC_KAT;
61
62static const HMAC_KAT vector[] = {
63 { EVP_sha1,
64 /* from http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf */
65 "0123456789:;<=>?@ABC",
66 "Sample #2",
67 { 0x09,0x22,0xd3,0x40,0x5f,0xaa,0x3d,0x19,
68 0x4f,0x82,0xa4,0x58,0x30,0x73,0x7d,0x5c,
69 0xc6,0xc7,0x5d,0x24 }
70 },
71 { EVP_sha224,
72 /* just keep extending the above... */
73 "0123456789:;<=>?@ABC",
74 "Sample #2",
75 { 0xdd,0xef,0x0a,0x40,0xcb,0x7d,0x50,0xfb,
76 0x6e,0xe6,0xce,0xa1,0x20,0xba,0x26,0xaa,
77 0x08,0xf3,0x07,0x75,0x87,0xb8,0xad,0x1b,
78 0x8c,0x8d,0x12,0xc7 }
79 },
80 { EVP_sha256,
81 "0123456789:;<=>?@ABC",
82 "Sample #2",
83 { 0xb8,0xf2,0x0d,0xb5,0x41,0xea,0x43,0x09,
84 0xca,0x4e,0xa9,0x38,0x0c,0xd0,0xe8,0x34,
85 0xf7,0x1f,0xbe,0x91,0x74,0xa2,0x61,0x38,
86 0x0d,0xc1,0x7e,0xae,0x6a,0x34,0x51,0xd9 }
87 },
88 { EVP_sha384,
89 "0123456789:;<=>?@ABC",
90 "Sample #2",
91 { 0x08,0xbc,0xb0,0xda,0x49,0x1e,0x87,0xad,
92 0x9a,0x1d,0x6a,0xce,0x23,0xc5,0x0b,0xf6,
93 0xb7,0x18,0x06,0xa5,0x77,0xcd,0x49,0x04,
94 0x89,0xf1,0xe6,0x23,0x44,0x51,0x51,0x9f,
95 0x85,0x56,0x80,0x79,0x0c,0xbd,0x4d,0x50,
96 0xa4,0x5f,0x29,0xe3,0x93,0xf0,0xe8,0x7f }
97 },
98 { EVP_sha512,
99 "0123456789:;<=>?@ABC",
100 "Sample #2",
101 { 0x80,0x9d,0x44,0x05,0x7c,0x5b,0x95,0x41,
102 0x05,0xbd,0x04,0x13,0x16,0xdb,0x0f,0xac,
103 0x44,0xd5,0xa4,0xd5,0xd0,0x89,0x2b,0xd0,
104 0x4e,0x86,0x64,0x12,0xc0,0x90,0x77,0x68,
105 0xf1,0x87,0xb7,0x7c,0x4f,0xae,0x2c,0x2f,
106 0x21,0xa5,0xb5,0x65,0x9a,0x4f,0x4b,0xa7,
107 0x47,0x02,0xa3,0xde,0x9b,0x51,0xf1,0x45,
108 0xbd,0x4f,0x25,0x27,0x42,0x98,0x99,0x05 }
109 },
110};
111
112int FIPS_selftest_hmac()
113 {
114 int n;
115 unsigned int outlen;
116 unsigned char out[EVP_MAX_MD_SIZE];
117 const EVP_MD *md;
118 const HMAC_KAT *t;
119
120 for(n=0,t=vector; n<sizeof(vector)/sizeof(vector[0]); n++,t++)
121 {
122 md = (*t->alg)();
123 HMAC(md,t->key,strlen(t->key),
124 (const unsigned char *)t->iv,strlen(t->iv),
125 out,&outlen);
126
127 if(memcmp(out,t->kaval,outlen))
128 {
129 FIPSerr(FIPS_F_FIPS_SELFTEST_HMAC,FIPS_R_SELFTEST_FAILED);
130 return 0;
131 }
132 }
133 return 1;
134 }
135#endif
diff --git a/src/lib/libssl/src/fips/hmac/fips_hmactest.c b/src/lib/libssl/src/fips/hmac/fips_hmactest.c
new file mode 100644
index 0000000000..69ebf68622
--- /dev/null
+++ b/src/lib/libssl/src/fips/hmac/fips_hmactest.c
@@ -0,0 +1,328 @@
1/* fips_hmactest.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2005.
4 */
5/* ====================================================================
6 * Copyright (c) 2005 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#include <ctype.h>
61#include <string.h>
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/hmac.h>
65#include <openssl/err.h>
66#include <openssl/bn.h>
67
68#include <openssl/x509v3.h>
69
70#ifndef OPENSSL_FIPS
71
72int main(int argc, char *argv[])
73{
74 printf("No FIPS HMAC support\n");
75 return(0);
76}
77
78#else
79
80#include <openssl/fips.h>
81#include "fips_utl.h"
82
83static int hmac_test(const EVP_MD *md, FILE *out, FILE *in);
84static int print_hmac(const EVP_MD *md, FILE *out,
85 unsigned char *Key, int Klen,
86 unsigned char *Msg, int Msglen, int Tlen);
87
88int main(int argc, char **argv)
89 {
90 FILE *in = NULL, *out = NULL;
91
92 int ret = 1;
93
94 if(!FIPS_mode_set(1))
95 {
96 do_print_errors();
97 goto end;
98 }
99
100 if (argc == 1)
101 in = stdin;
102 else
103 in = fopen(argv[1], "r");
104
105 if (argc < 2)
106 out = stdout;
107 else
108 out = fopen(argv[2], "w");
109
110 if (!in)
111 {
112 fprintf(stderr, "FATAL input initialization error\n");
113 goto end;
114 }
115
116 if (!out)
117 {
118 fprintf(stderr, "FATAL output initialization error\n");
119 goto end;
120 }
121
122 if (!hmac_test(EVP_sha1(), out, in))
123 {
124 fprintf(stderr, "FATAL hmac file processing error\n");
125 goto end;
126 }
127 else
128 ret = 0;
129
130 end:
131
132 if (ret)
133 do_print_errors();
134
135 if (in && (in != stdin))
136 fclose(in);
137 if (out && (out != stdout))
138 fclose(out);
139
140 return ret;
141
142 }
143
144#define HMAC_TEST_MAXLINELEN 1024
145
146int hmac_test(const EVP_MD *md, FILE *out, FILE *in)
147 {
148 char *linebuf, *olinebuf, *p, *q;
149 char *keyword, *value;
150 unsigned char *Key = NULL, *Msg = NULL;
151 int Count, Klen, Tlen;
152 long Keylen, Msglen;
153 int ret = 0;
154 int lnum = 0;
155
156 olinebuf = OPENSSL_malloc(HMAC_TEST_MAXLINELEN);
157 linebuf = OPENSSL_malloc(HMAC_TEST_MAXLINELEN);
158
159 if (!linebuf || !olinebuf)
160 goto error;
161
162 Count = -1;
163 Klen = -1;
164 Tlen = -1;
165
166 while (fgets(olinebuf, HMAC_TEST_MAXLINELEN, in))
167 {
168 lnum++;
169 strcpy(linebuf, olinebuf);
170 keyword = linebuf;
171 /* Skip leading space */
172 while (isspace((unsigned char)*keyword))
173 keyword++;
174
175 /* Look for = sign */
176 p = strchr(linebuf, '=');
177
178 /* If no = or starts with [ (for [L=20] line) just copy */
179 if (!p)
180 {
181 if (fputs(olinebuf, out) < 0)
182 goto error;
183 continue;
184 }
185
186 q = p - 1;
187
188 /* Remove trailing space */
189 while (isspace((unsigned char)*q))
190 *q-- = 0;
191
192 *p = 0;
193 value = p + 1;
194
195 /* Remove leading space from value */
196 while (isspace((unsigned char)*value))
197 value++;
198
199 /* Remove trailing space from value */
200 p = value + strlen(value) - 1;
201
202 while (*p == '\n' || isspace((unsigned char)*p))
203 *p-- = 0;
204
205 if (!strcmp(keyword,"[L") && *p==']')
206 {
207 switch (atoi(value))
208 {
209 case 20: md=EVP_sha1(); break;
210 case 28: md=EVP_sha224(); break;
211 case 32: md=EVP_sha256(); break;
212 case 48: md=EVP_sha384(); break;
213 case 64: md=EVP_sha512(); break;
214 default: goto parse_error;
215 }
216 }
217 else if (!strcmp(keyword, "Count"))
218 {
219 if (Count != -1)
220 goto parse_error;
221 Count = atoi(value);
222 if (Count < 0)
223 goto parse_error;
224 }
225 else if (!strcmp(keyword, "Klen"))
226 {
227 if (Klen != -1)
228 goto parse_error;
229 Klen = atoi(value);
230 if (Klen < 0)
231 goto parse_error;
232 }
233 else if (!strcmp(keyword, "Tlen"))
234 {
235 if (Tlen != -1)
236 goto parse_error;
237 Tlen = atoi(value);
238 if (Tlen < 0)
239 goto parse_error;
240 }
241 else if (!strcmp(keyword, "Msg"))
242 {
243 if (Msg)
244 goto parse_error;
245 Msg = hex2bin_m(value, &Msglen);
246 if (!Msg)
247 goto parse_error;
248 }
249 else if (!strcmp(keyword, "Key"))
250 {
251 if (Key)
252 goto parse_error;
253 Key = hex2bin_m(value, &Keylen);
254 if (!Key)
255 goto parse_error;
256 }
257 else if (!strcmp(keyword, "Mac"))
258 continue;
259 else
260 goto parse_error;
261
262 fputs(olinebuf, out);
263
264 if (Key && Msg && (Tlen > 0) && (Klen > 0))
265 {
266 if (!print_hmac(md, out, Key, Klen, Msg, Msglen, Tlen))
267 goto error;
268 OPENSSL_free(Key);
269 Key = NULL;
270 OPENSSL_free(Msg);
271 Msg = NULL;
272 Klen = -1;
273 Tlen = -1;
274 Count = -1;
275 }
276
277 }
278
279
280 ret = 1;
281
282
283 error:
284
285 if (olinebuf)
286 OPENSSL_free(olinebuf);
287 if (linebuf)
288 OPENSSL_free(linebuf);
289 if (Key)
290 OPENSSL_free(Key);
291 if (Msg)
292 OPENSSL_free(Msg);
293
294 return ret;
295
296 parse_error:
297
298 fprintf(stderr, "FATAL parse error processing line %d\n", lnum);
299
300 goto error;
301
302 }
303
304static int print_hmac(const EVP_MD *emd, FILE *out,
305 unsigned char *Key, int Klen,
306 unsigned char *Msg, int Msglen, int Tlen)
307 {
308 int i, mdlen;
309 unsigned char md[EVP_MAX_MD_SIZE];
310 if (!HMAC(emd, Key, Klen, Msg, Msglen, md,
311 (unsigned int *)&mdlen))
312 {
313 fputs("Error calculating HMAC\n", stderr);
314 return 0;
315 }
316 if (Tlen > mdlen)
317 {
318 fputs("Parameter error, Tlen > HMAC length\n", stderr);
319 return 0;
320 }
321 fputs("Mac = ", out);
322 for (i = 0; i < Tlen; i++)
323 fprintf(out, "%02x", md[i]);
324 fputs("\n", out);
325 return 1;
326 }
327
328#endif
diff --git a/src/lib/libssl/src/fips/install.com b/src/lib/libssl/src/fips/install.com
index aa19f0599d..a2d22d387f 100644
--- a/src/lib/libssl/src/fips/install.com
+++ b/src/lib/libssl/src/fips/install.com
@@ -26,14 +26,16 @@ $ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
26$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN - 26$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
27 CREATE/DIR/LOG WRK_SSLINCLUDE: 27 CREATE/DIR/LOG WRK_SSLINCLUDE:
28$ 28$
29$ FDIRS := ,RAND,SHA1,DES,AES,DSA,RSA 29$ FDIRS := ,RAND,SHA,DES,AES,DSA,RSA,DH,HMAC
30$ EXHEADER_ := fips.h 30$ EXHEADER_ := fips.h
31$ EXHEADER_SHA1 := 31$ EXHEADER_SHA := fips_sha.h
32$ EXHEADER_RAND := fips_rand.h 32$ EXHEADER_RAND := fips_rand.h
33$ EXHEADER_DES := 33$ EXHEADER_DES :=
34$ EXHEADER_AES := 34$ EXHEADER_AES :=
35$ EXHEADER_DSA := 35$ EXHEADER_DSA :=
36$ EXHEADER_RSA := 36$ EXHEADER_RSA :=
37$ EXHEADER_DH :=
38$ EXHEADER_HMAC :=
37$ 39$
38$ I = 0 40$ I = 0
39$ LOOP_FDIRS: 41$ LOOP_FDIRS:
diff --git a/src/lib/libssl/src/fips/mkfipsscr.pl b/src/lib/libssl/src/fips/mkfipsscr.pl
new file mode 100644
index 0000000000..dc60cdf580
--- /dev/null
+++ b/src/lib/libssl/src/fips/mkfipsscr.pl
@@ -0,0 +1,632 @@
1#!/usr/local/bin/perl -w
2# Quick & dirty utility to generate a script for executing the
3# FIPS 140-2 CMVP algorithm tests based on the pathnames of
4# input algorithm test files actually present (the unqualified
5# file names are consistent but the pathnames are not).
6#
7
8# List of all the unqualified file names we expect.
9my %fips_tests = (
10
11# FIPS test definitions
12
13# DSA tests
14
15"PQGGen" => "fips_dssvs pqg",
16"KeyPair" => "fips_dssvs keypair",
17"SigGen" => "fips_dssvs siggen",
18"SigVer" => "fips_dssvs sigver",
19
20# SHA tests
21
22"SHA1LongMsg" => "fips_shatest",
23"SHA1Monte" => "fips_shatest",
24"SHA1ShortMsg" => "fips_shatest",
25"SHA224LongMsg" => "fips_shatest",
26"SHA224Monte" => "fips_shatest",
27"SHA224ShortMsg" => "fips_shatest",
28"SHA256LongMsg" => "fips_shatest",
29"SHA256Monte" => "fips_shatest",
30"SHA256ShortMsg" => "fips_shatest",
31"SHA384LongMsg" => "fips_shatest",
32"SHA384Monte" => "fips_shatest",
33"SHA384ShortMsg" => "fips_shatest",
34"SHA512LongMsg" => "fips_shatest",
35"SHA512Monte" => "fips_shatest",
36"SHA512ShortMsg" => "fips_shatest",
37
38# HMAC
39
40"HMAC" => "fips_hmactest",
41
42# RAND tests
43
44"ANSI931_AES128MCT" => "fips_rngvs mct",
45"ANSI931_AES192MCT" => "fips_rngvs mct",
46"ANSI931_AES256MCT" => "fips_rngvs mct",
47"ANSI931_AES128VST" => "fips_rngvs vst",
48"ANSI931_AES192VST" => "fips_rngvs vst",
49"ANSI931_AES256VST" => "fips_rngvs vst",
50
51# RSA tests
52
53"SigGen15" => "fips_rsastest",
54"SigVer15" => "fips_rsavtest",
55"SigGenPSS" => "fips_rsastest -saltlen SALT",
56"SigVerPSS" => "fips_rsavtest -saltlen SALT",
57"SigGenRSA" => "fips_rsastest -x931",
58"SigVerRSA" => "fips_rsavtest -x931",
59"KeyGenRSA" => "fips_rsagtest",
60
61# AES tests
62
63"CBCGFSbox128" => "fips_aesavs -f",
64"CBCGFSbox192" => "fips_aesavs -f",
65"CBCGFSbox256" => "fips_aesavs -f",
66"CBCKeySbox128" => "fips_aesavs -f",
67"CBCKeySbox192" => "fips_aesavs -f",
68"CBCKeySbox256" => "fips_aesavs -f",
69"CBCMCT128" => "fips_aesavs -f",
70"CBCMCT192" => "fips_aesavs -f",
71"CBCMCT256" => "fips_aesavs -f",
72"CBCMMT128" => "fips_aesavs -f",
73"CBCMMT192" => "fips_aesavs -f",
74"CBCMMT256" => "fips_aesavs -f",
75"CBCVarKey128" => "fips_aesavs -f",
76"CBCVarKey192" => "fips_aesavs -f",
77"CBCVarKey256" => "fips_aesavs -f",
78"CBCVarTxt128" => "fips_aesavs -f",
79"CBCVarTxt192" => "fips_aesavs -f",
80"CBCVarTxt256" => "fips_aesavs -f",
81"CFB128GFSbox128" => "fips_aesavs -f",
82"CFB128GFSbox192" => "fips_aesavs -f",
83"CFB128GFSbox256" => "fips_aesavs -f",
84"CFB128KeySbox128" => "fips_aesavs -f",
85"CFB128KeySbox192" => "fips_aesavs -f",
86"CFB128KeySbox256" => "fips_aesavs -f",
87"CFB128MCT128" => "fips_aesavs -f",
88"CFB128MCT192" => "fips_aesavs -f",
89"CFB128MCT256" => "fips_aesavs -f",
90"CFB128MMT128" => "fips_aesavs -f",
91"CFB128MMT192" => "fips_aesavs -f",
92"CFB128MMT256" => "fips_aesavs -f",
93"CFB128VarKey128" => "fips_aesavs -f",
94"CFB128VarKey192" => "fips_aesavs -f",
95"CFB128VarKey256" => "fips_aesavs -f",
96"CFB128VarTxt128" => "fips_aesavs -f",
97"CFB128VarTxt192" => "fips_aesavs -f",
98"CFB128VarTxt256" => "fips_aesavs -f",
99"CFB8GFSbox128" => "fips_aesavs -f",
100"CFB8GFSbox192" => "fips_aesavs -f",
101"CFB8GFSbox256" => "fips_aesavs -f",
102"CFB8KeySbox128" => "fips_aesavs -f",
103"CFB8KeySbox192" => "fips_aesavs -f",
104"CFB8KeySbox256" => "fips_aesavs -f",
105"CFB8MCT128" => "fips_aesavs -f",
106"CFB8MCT192" => "fips_aesavs -f",
107"CFB8MCT256" => "fips_aesavs -f",
108"CFB8MMT128" => "fips_aesavs -f",
109"CFB8MMT192" => "fips_aesavs -f",
110"CFB8MMT256" => "fips_aesavs -f",
111"CFB8VarKey128" => "fips_aesavs -f",
112"CFB8VarKey192" => "fips_aesavs -f",
113"CFB8VarKey256" => "fips_aesavs -f",
114"CFB8VarTxt128" => "fips_aesavs -f",
115"CFB8VarTxt192" => "fips_aesavs -f",
116"CFB8VarTxt256" => "fips_aesavs -f",
117#"CFB1GFSbox128" => "fips_aesavs -f",
118#"CFB1GFSbox192" => "fips_aesavs -f",
119#"CFB1GFSbox256" => "fips_aesavs -f",
120#"CFB1KeySbox128" => "fips_aesavs -f",
121#"CFB1KeySbox192" => "fips_aesavs -f",
122#"CFB1KeySbox256" => "fips_aesavs -f",
123#"CFB1MCT128" => "fips_aesavs -f",
124#"CFB1MCT192" => "fips_aesavs -f",
125#"CFB1MCT256" => "fips_aesavs -f",
126#"CFB1MMT128" => "fips_aesavs -f",
127#"CFB1MMT192" => "fips_aesavs -f",
128#"CFB1MMT256" => "fips_aesavs -f",
129#"CFB1VarKey128" => "fips_aesavs -f",
130#"CFB1VarKey192" => "fips_aesavs -f",
131#"CFB1VarKey256" => "fips_aesavs -f",
132#"CFB1VarTxt128" => "fips_aesavs -f",
133#"CFB1VarTxt192" => "fips_aesavs -f",
134#"CFB1VarTxt256" => "fips_aesavs -f",
135"ECBGFSbox128" => "fips_aesavs -f",
136"ECBGFSbox192" => "fips_aesavs -f",
137"ECBGFSbox256" => "fips_aesavs -f",
138"ECBKeySbox128" => "fips_aesavs -f",
139"ECBKeySbox192" => "fips_aesavs -f",
140"ECBKeySbox256" => "fips_aesavs -f",
141"ECBMCT128" => "fips_aesavs -f",
142"ECBMCT192" => "fips_aesavs -f",
143"ECBMCT256" => "fips_aesavs -f",
144"ECBMMT128" => "fips_aesavs -f",
145"ECBMMT192" => "fips_aesavs -f",
146"ECBMMT256" => "fips_aesavs -f",
147"ECBVarKey128" => "fips_aesavs -f",
148"ECBVarKey192" => "fips_aesavs -f",
149"ECBVarKey256" => "fips_aesavs -f",
150"ECBVarTxt128" => "fips_aesavs -f",
151"ECBVarTxt192" => "fips_aesavs -f",
152"ECBVarTxt256" => "fips_aesavs -f",
153"OFBGFSbox128" => "fips_aesavs -f",
154"OFBGFSbox192" => "fips_aesavs -f",
155"OFBGFSbox256" => "fips_aesavs -f",
156"OFBKeySbox128" => "fips_aesavs -f",
157"OFBKeySbox192" => "fips_aesavs -f",
158"OFBKeySbox256" => "fips_aesavs -f",
159"OFBMCT128" => "fips_aesavs -f",
160"OFBMCT192" => "fips_aesavs -f",
161"OFBMCT256" => "fips_aesavs -f",
162"OFBMMT128" => "fips_aesavs -f",
163"OFBMMT192" => "fips_aesavs -f",
164"OFBMMT256" => "fips_aesavs -f",
165"OFBVarKey128" => "fips_aesavs -f",
166"OFBVarKey192" => "fips_aesavs -f",
167"OFBVarKey256" => "fips_aesavs -f",
168"OFBVarTxt128" => "fips_aesavs -f",
169"OFBVarTxt192" => "fips_aesavs -f",
170"OFBVarTxt256" => "fips_aesavs -f",
171
172# Triple DES tests
173
174"TCBCinvperm" => "fips_desmovs -f",
175"TCBCMMT1" => "fips_desmovs -f",
176"TCBCMMT2" => "fips_desmovs -f",
177"TCBCMMT3" => "fips_desmovs -f",
178"TCBCMonte1" => "fips_desmovs -f",
179"TCBCMonte2" => "fips_desmovs -f",
180"TCBCMonte3" => "fips_desmovs -f",
181"TCBCpermop" => "fips_desmovs -f",
182"TCBCsubtab" => "fips_desmovs -f",
183"TCBCvarkey" => "fips_desmovs -f",
184"TCBCvartext" => "fips_desmovs -f",
185"TCFB64invperm" => "fips_desmovs -f",
186"TCFB64MMT1" => "fips_desmovs -f",
187"TCFB64MMT2" => "fips_desmovs -f",
188"TCFB64MMT3" => "fips_desmovs -f",
189"TCFB64Monte1" => "fips_desmovs -f",
190"TCFB64Monte2" => "fips_desmovs -f",
191"TCFB64Monte3" => "fips_desmovs -f",
192"TCFB64permop" => "fips_desmovs -f",
193"TCFB64subtab" => "fips_desmovs -f",
194"TCFB64varkey" => "fips_desmovs -f",
195"TCFB64vartext" => "fips_desmovs -f",
196"TCFB8invperm" => "fips_desmovs -f",
197"TCFB8MMT1" => "fips_desmovs -f",
198"TCFB8MMT2" => "fips_desmovs -f",
199"TCFB8MMT3" => "fips_desmovs -f",
200"TCFB8Monte1" => "fips_desmovs -f",
201"TCFB8Monte2" => "fips_desmovs -f",
202"TCFB8Monte3" => "fips_desmovs -f",
203"TCFB8permop" => "fips_desmovs -f",
204"TCFB8subtab" => "fips_desmovs -f",
205"TCFB8varkey" => "fips_desmovs -f",
206"TCFB8vartext" => "fips_desmovs -f",
207"TECBinvperm" => "fips_desmovs -f",
208"TECBMMT1" => "fips_desmovs -f",
209"TECBMMT2" => "fips_desmovs -f",
210"TECBMMT3" => "fips_desmovs -f",
211"TECBMonte1" => "fips_desmovs -f",
212"TECBMonte2" => "fips_desmovs -f",
213"TECBMonte3" => "fips_desmovs -f",
214"TECBpermop" => "fips_desmovs -f",
215"TECBsubtab" => "fips_desmovs -f",
216"TECBvarkey" => "fips_desmovs -f",
217"TECBvartext" => "fips_desmovs -f",
218"TOFBinvperm" => "fips_desmovs -f",
219"TOFBMMT1" => "fips_desmovs -f",
220"TOFBMMT2" => "fips_desmovs -f",
221"TOFBMMT3" => "fips_desmovs -f",
222"TOFBMonte1" => "fips_desmovs -f",
223"TOFBMonte2" => "fips_desmovs -f",
224"TOFBMonte3" => "fips_desmovs -f",
225"TOFBpermop" => "fips_desmovs -f",
226"TOFBsubtab" => "fips_desmovs -f",
227"TOFBvarkey" => "fips_desmovs -f",
228"TOFBvartext" => "fips_desmovs -f",
229"TCBCinvperm" => "fips_desmovs -f",
230"TCBCMMT1" => "fips_desmovs -f",
231"TCBCMMT2" => "fips_desmovs -f",
232"TCBCMMT3" => "fips_desmovs -f",
233"TCBCMonte1" => "fips_desmovs -f",
234"TCBCMonte2" => "fips_desmovs -f",
235"TCBCMonte3" => "fips_desmovs -f",
236"TCBCpermop" => "fips_desmovs -f",
237"TCBCsubtab" => "fips_desmovs -f",
238"TCBCvarkey" => "fips_desmovs -f",
239"TCBCvartext" => "fips_desmovs -f",
240"TCFB64invperm" => "fips_desmovs -f",
241"TCFB64MMT1" => "fips_desmovs -f",
242"TCFB64MMT2" => "fips_desmovs -f",
243"TCFB64MMT3" => "fips_desmovs -f",
244"TCFB64Monte1" => "fips_desmovs -f",
245"TCFB64Monte2" => "fips_desmovs -f",
246"TCFB64Monte3" => "fips_desmovs -f",
247"TCFB64permop" => "fips_desmovs -f",
248"TCFB64subtab" => "fips_desmovs -f",
249"TCFB64varkey" => "fips_desmovs -f",
250"TCFB64vartext" => "fips_desmovs -f",
251"TCFB8invperm" => "fips_desmovs -f",
252"TCFB8MMT1" => "fips_desmovs -f",
253"TCFB8MMT2" => "fips_desmovs -f",
254"TCFB8MMT3" => "fips_desmovs -f",
255"TCFB8Monte1" => "fips_desmovs -f",
256"TCFB8Monte2" => "fips_desmovs -f",
257"TCFB8Monte3" => "fips_desmovs -f",
258"TCFB8permop" => "fips_desmovs -f",
259"TCFB8subtab" => "fips_desmovs -f",
260"TCFB8varkey" => "fips_desmovs -f",
261"TCFB8vartext" => "fips_desmovs -f",
262"TECBinvperm" => "fips_desmovs -f",
263"TECBMMT1" => "fips_desmovs -f",
264"TECBMMT2" => "fips_desmovs -f",
265"TECBMMT3" => "fips_desmovs -f",
266"TECBMonte1" => "fips_desmovs -f",
267"TECBMonte2" => "fips_desmovs -f",
268"TECBMonte3" => "fips_desmovs -f",
269"TECBpermop" => "fips_desmovs -f",
270"TECBsubtab" => "fips_desmovs -f",
271"TECBvarkey" => "fips_desmovs -f",
272"TECBvartext" => "fips_desmovs -f",
273"TOFBinvperm" => "fips_desmovs -f",
274"TOFBMMT1" => "fips_desmovs -f",
275"TOFBMMT2" => "fips_desmovs -f",
276"TOFBMMT3" => "fips_desmovs -f",
277"TOFBMonte1" => "fips_desmovs -f",
278"TOFBMonte2" => "fips_desmovs -f",
279"TOFBMonte3" => "fips_desmovs -f",
280"TOFBpermop" => "fips_desmovs -f",
281"TOFBsubtab" => "fips_desmovs -f",
282"TOFBvarkey" => "fips_desmovs -f",
283"TOFBvartext" => "fips_desmovs -f"
284
285);
286my %salt_names = (
287"SigVerPSS (salt 0)" => "SigVerPSS",
288"SigVerPSS (salt 62)" => "SigVerPSS",
289"SigGenPSS (salt 0)" => "SigGenPSS",
290"SigGenPSS (salt 62)" => "SigGenPSS",
291);
292
293
294my $win32 = $^O =~ m/mswin/i;
295my $onedir = 0;
296my $filter = "";
297my $tvdir;
298my $tprefix;
299my $shwrap_prefix;
300my $debug = 0;
301my $quiet = 0;
302my $rspdir = "rsp";
303my $rspignore = 0;
304my @bogus = (); # list of unmatched *.rsp files
305my $bufout = '';
306my %_programs = (); # list of external programs to check
307
308foreach (@ARGV)
309 {
310 if ($_ eq "--win32")
311 {
312 $win32 = 1;
313 }
314 elsif ($_ eq "--onedir")
315 {
316 $onedir = 1;
317 }
318 elsif ($_ eq "--debug")
319 {
320 $debug = 1;
321 }
322 elsif ($_ eq "--quiet")
323 {
324 $quiet = 1;
325 }
326 elsif (/--dir=(.*)$/)
327 {
328 $tvdir = $1;
329 }
330 elsif (/--rspdir=(.*)$/)
331 {
332 $rspdir = $1;
333 }
334 elsif (/--rspignore$/)
335 {
336 $rspignore = 1;
337 }
338 elsif (/--tprefix=(.*)$/)
339 {
340 $tprefix = $1;
341 }
342 elsif (/--shwrap_prefix=(.*)$/)
343 {
344 $shwrap_prefix = $1;
345 }
346 elsif (/--filter=(.*)$/)
347 {
348 $filter = $1;
349 }
350 elsif (/--outfile=(.*)$/)
351 {
352 $outfile = $1;
353 }
354 else
355 {
356 &Help();
357 exit(1);
358 }
359 }
360
361$tvdir = "." unless defined $tvdir;
362
363if ($win32)
364 {
365 if (!defined $tprefix)
366 {
367 if ($onedir)
368 {
369 $tprefix = ".\\";
370 }
371 else
372 {
373 $tprefix = "..\\out32dll\\";
374 }
375 }
376
377 $bufinit .= <<END;
378\@echo off
379rem Test vector run script
380rem Auto generated by mkfipsscr.pl script
381rem Do not edit
382
383END
384
385 }
386else
387 {
388 if ($onedir)
389 {
390 $tprefix = "./" unless defined $tprefix;
391 $shwrap_prefix = "./" unless defined $shwrap_prefix;
392 }
393 else
394 {
395 $tprefix = "../test/" unless defined $tprefix;
396 $shwrap_prefix = "../util/" unless defined $shwrap_prefix;
397 }
398
399 $bufinit .= <<END;
400#!/bin/sh
401
402# Test vector run script
403# Auto generated by mkfipsscr.pl script
404# Do not edit
405
406END
407
408 }
409my %fips_found;
410foreach (keys %fips_tests)
411 {
412 $fips_found{$_} = 0;
413 }
414my %saltPSS;
415for (keys %salt_names)
416 {
417 $salt_found{$_} = 0;
418 }
419
420recurse_test($win32, $tprefix, $filter, $tvdir);
421
422while (($key, $value) = each %salt_found)
423 {
424 &countentry($key, $value);
425 delete $fips_found{$salt_names{$key}};
426 }
427while (($key, $value) = each %fips_found)
428 {
429 &countentry($key, $value);
430 }
431
432# If no fatal errors write out the script file
433 $outfile = "fipstests.sh" unless defined $outfile;
434 open(OUT, ">$outfile") || die "Error opening $outfile: $!";
435 print OUT $bufinit;
436 if (!$rspignore && @bogus)
437 {
438 print STDERR "ERROR: please remove bogus *.rsp files\n";
439 print OUT <<EOF;
440echo $outfile generation failed due to presence of bogus *.rsp files
441EOF
442 }
443 else
444 {
445 print OUT $bufout;
446 }
447 close OUT;
448
449# Check for external programs
450 for (keys %_programs)
451 {
452 s/ .*$//;
453 -x $_ || print STDERR "WARNING: program $_ not found\n";
454 }
455
456#--------------------------------
457sub Help {
458(my $cmd) = ($0 =~ m#([^/]+)$#);
459 print <<EOF;
460$cmd: generate script for CMVP algorithm tests
461 --debug Enable debug output
462 --dir=<dirname> Optional root for *.req file search
463 --filter=<regexp>
464 --onedir <dirname> Assume all components in current directory
465 --outfile=<filename> Optional name of output script, default fipstests.{sh|bat}
466 --rspdir=<dirname> Name of subdirectories containing *.rsp files, default "resp"
467 --rspignore Ignore any bogus *.rsp files
468 --shwrap_prefix=<prefix>
469 --tprefix=<prefix>
470 --quiet Shhh....
471 --win32 Generate script for Win32 environment
472EOF
473}
474
475#--------------------------------
476sub countentry {
477 my ($key,$value) = @_;
478 if ($value == 0)
479 {
480 print STDERR "WARNING: test file $key not found\n" unless $quiet;
481 }
482 elsif ($value > 1)
483 {
484 print STDERR "WARNING: test file $key found $value times\n" unless $quiet;
485 }
486 else
487 {
488 print STDERR "Found test file $key\n" if $debug;
489 }
490 }
491
492#--------------------------------
493sub recurse_test
494 {
495 my ($win32, $tprefix, $filter, $dir) = @_;
496 my $dirh;
497 opendir($dirh, $dir);
498 while ($_ = readdir($dirh))
499 {
500 next if ($_ eq "." || $_ eq "..");
501 $_ = "$dir/$_";
502 if (-f "$_")
503 {
504 if (/\/([^\/]*)\.rsp$/)
505 {
506 if (exists $fips_tests{$1})
507 {
508 $debug && print "DEBUG: $1 found, will be overwritten\n";
509 }
510 else
511 {
512 print STDERR "ERROR: bogus file $_\n";
513 push @bogus, $_;
514 }
515 }
516 next unless /$filter.*\.req$/i;
517 if (/\/([^\/]*)\.req$/ && exists $fips_tests{$1})
518 {
519 $fips_found{$1}++;
520 test_line($win32, $_, $tprefix, $1);
521 }
522 elsif (! /SHAmix\.req$/)
523 {
524 print STDERR "WARNING: unrecognized filename $_\n";
525 }
526 }
527 elsif (-d "$_")
528 {
529 if (/$filter.*req$/i)
530 {
531 test_dir($win32, $_);
532 }
533 recurse_test($win32, $tprefix, $filter, $_);
534 }
535 }
536 closedir($dirh);
537 }
538
539#--------------------------------
540sub test_dir
541 {
542 my ($win32, $req) = @_;
543 my $rsp = $req;
544 $rsp =~ s/req$/$rspdir/;
545 if ($win32)
546 {
547 $rsp =~ tr|/|\\|;
548 $req =~ tr|/|\\|;
549 $bufout .= <<END;
550
551echo Running tests in $req
552if exist "$rsp" rd /s /q "$rsp"
553md "$rsp"
554END
555 }
556 else
557 {
558 $bufout .= <<END;
559
560echo Running tests in "$req"
561rm -rf "$rsp"
562mkdir "$rsp"
563
564END
565 }
566 }
567
568#--------------------------------
569sub test_line
570 {
571 my ($win32, $req, $tprefix, $tnam) = @_;
572 my $rsp = $req;
573 my $tcmd = $fips_tests{$tnam};
574 $rsp =~ s/req\/([^\/]*).req$/$rspdir\/$1.rsp/;
575 if ($tcmd =~ /-f$/)
576 {
577 if ($win32)
578 {
579 $req =~ tr|/|\\|;
580 $rsp =~ tr|/|\\|;
581 $bufout .= "$tprefix$tcmd \"$req\" \"$rsp\"\n";
582 $_programs{"$tprefix$tcmd.exe"} = 1;
583 }
584 else
585 {
586 $bufout .= <<END;
587${shwrap_prefix}shlib_wrap.sh $tprefix$tcmd "$req" "$rsp" || { echo "$req failure" ; exit 1
588}
589END
590 $_programs{"${shwrap_prefix}shlib_wrap.sh"} = 1;
591 $_programs{"$tprefix$tcmd"} = 1;
592 }
593 return;
594 }
595 if ($tcmd =~ /SALT$/)
596 {
597 open (IN, $req) || die "Can't Open File $req";
598 my $saltlen;
599 while (<IN>)
600 {
601 if (/^\s*#\s*salt\s+len:\s+(\d+)\s*$/i)
602 {
603 my $sl = $1;
604 print STDERR "$req salt length $sl\n" if $debug;
605 $tcmd =~ s/SALT$/$sl/;
606 $salt_found{"$tnam (salt $sl)"}++;
607 last;
608 }
609 }
610 close IN;
611 if ($tcmd =~ /SALT$/)
612 {
613 die "Can't detect salt length for $req";
614 }
615 }
616
617 if ($win32)
618 {
619 $req =~ tr|/|\\|;
620 $rsp =~ tr|/|\\|;
621 $bufout .= "$tprefix$tcmd < \"$req\" > \"$rsp\"\n";
622 $_programs{"$tprefix$tcmd.exe"} = 1;
623 }
624 else
625 {
626 $bufout .= <<END;
627${shwrap_prefix}shlib_wrap.sh $tprefix$tcmd < "$req" > "$rsp" || { echo "$req failure" ; exit 1; }
628END
629 $_programs{"$tprefix$tcmd"} = 1;
630 }
631 }
632
diff --git a/src/lib/libssl/src/fips/openssl_fips_fingerprint b/src/lib/libssl/src/fips/openssl_fips_fingerprint
index d3dfb7eb61..f59a67d537 100755
--- a/src/lib/libssl/src/fips/openssl_fips_fingerprint
+++ b/src/lib/libssl/src/fips/openssl_fips_fingerprint
@@ -5,6 +5,7 @@
5 5
6lib=$1 6lib=$1
7exe=$2 7exe=$2
8ext=${HMAC_EXT:-sha1}
8 9
9# deal with the case where we're run from within the build and OpenSSL is 10# deal with the case where we're run from within the build and OpenSSL is
10# not yet installed. Also, make sure LD_LIBRARY_PATH is properly set in 11# not yet installed. Also, make sure LD_LIBRARY_PATH is properly set in
@@ -27,4 +28,4 @@ openssl sha1 -hmac etaonrishdlcupfm $lib | sed "s/(.*\//(/" | diff -w $lib.sha1
27[ -x $exe.exe ] && exe=$exe.exe 28[ -x $exe.exe ] && exe=$exe.exe
28 29
29echo "Making fingerprint for $exe" 30echo "Making fingerprint for $exe"
30openssl sha1 -hmac etaonrishdlcupfm -binary $exe > $exe.sha1 || rm $exe.sha1 31openssl sha1 -hmac etaonrishdlcupfm -binary $exe > $exe.$ext || rm $exe.$ext
diff --git a/src/lib/libssl/src/fips/rand/Makefile b/src/lib/libssl/src/fips/rand/Makefile
index c8922abc77..20303c862b 100644
--- a/src/lib/libssl/src/fips/rand/Makefile
+++ b/src/lib/libssl/src/fips/rand/Makefile
@@ -1,5 +1,5 @@
1# 1#
2# SSLeay/fips/rand/Makefile 2# OpenSSL/fips/rand/Makefile
3# 3#
4 4
5DIR= rand 5DIR= rand
@@ -18,12 +18,12 @@ AR= ar r
18CFLAGS= $(INCLUDES) $(CFLAG) 18CFLAGS= $(INCLUDES) $(CFLAG)
19 19
20GENERAL=Makefile 20GENERAL=Makefile
21TEST= fips_randtest.c 21TEST= fips_randtest.c fips_rngvs.c
22APPS= 22APPS=
23 23
24LIB=$(TOP)/libcrypto.a 24LIB=$(TOP)/libcrypto.a
25LIBSRC=fips_rand.c 25LIBSRC=fips_rand.c fips_rand_selftest.c
26LIBOBJ=fips_rand.o 26LIBOBJ=fips_rand.o fips_rand_selftest.o
27 27
28SRC= $(LIBSRC) 28SRC= $(LIBSRC)
29 29
@@ -35,15 +35,10 @@ ALL= $(GENERAL) $(SRC) $(HEADER)
35top: 35top:
36 (cd $(TOP); $(MAKE) DIRS=fips SDIRS=$(DIR) sub_all) 36 (cd $(TOP); $(MAKE) DIRS=fips SDIRS=$(DIR) sub_all)
37 37
38all: check lib 38all: lib
39
40check:
41 TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
42 39
43lib: $(LIBOBJ) 40lib: $(LIBOBJ)
44 $(AR) $(LIB) $(LIBOBJ) 41 @echo $(LIBOBJ) > lib
45 $(RANLIB) $(LIB) || echo Never mind.
46 @sleep 2; touch lib
47 42
48files: 43files:
49 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 44 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -65,6 +60,19 @@ tags:
65 60
66tests: 61tests:
67 62
63Q=../testvectors/rng/req
64A=../testvectors/rng/rsp
65
66fips_test:
67 -rm -rf $(A)
68 mkdir $(A)
69 if [ -f $(Q)/ANSI931_AES128MCT.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rngvs mct < $(Q)/ANSI931_AES128MCT.req > $(A)/ANSI931_AES128MCT.rsp; fi
70 if [ -f $(Q)/ANSI931_AES192MCT.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rngvs mct < $(Q)/ANSI931_AES192MCT.req > $(A)/ANSI931_AES192MCT.rsp; fi
71 if [ -f $(Q)/ANSI931_AES256MCT.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rngvs mct < $(Q)/ANSI931_AES256MCT.req > $(A)/ANSI931_AES256MCT.rsp; fi
72 if [ -f $(Q)/ANSI931_AES128VST.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rngvs vst < $(Q)/ANSI931_AES128VST.req > $(A)/ANSI931_AES128VST.rsp; fi
73 if [ -f $(Q)/ANSI931_AES192VST.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rngvs vst < $(Q)/ANSI931_AES192VST.req > $(A)/ANSI931_AES192VST.rsp; fi
74 if [ -f $(Q)/ANSI931_AES256VST.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rngvs vst < $(Q)/ANSI931_AES256VST.req > $(A)/ANSI931_AES256VST.rsp; fi
75
68lint: 76lint:
69 lint -DLINT $(INCLUDES) $(SRC)>fluff 77 lint -DLINT $(INCLUDES) $(SRC)>fluff
70 78
@@ -80,20 +88,39 @@ clean:
80 88
81# DO NOT DELETE THIS LINE -- make depend depends on it. 89# DO NOT DELETE THIS LINE -- make depend depends on it.
82 90
83fips_rand.o: ../../e_os.h ../../include/openssl/bio.h 91fips_rand.o: ../../e_os.h ../../include/openssl/aes.h
84fips_rand.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 92fips_rand.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
85fips_rand.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h 93fips_rand.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
86fips_rand.o: ../../include/openssl/err.h ../../include/openssl/fips_rand.h 94fips_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
95fips_rand.o: ../../include/openssl/fips.h ../../include/openssl/fips_rand.h
87fips_rand.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h 96fips_rand.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
88fips_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 97fips_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
89fips_rand.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h 98fips_rand.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
90fips_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 99fips_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
91fips_rand.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 100fips_rand.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
92fips_rand.o: fips_rand.c 101fips_rand.o: ../fips_locl.h fips_rand.c
102fips_rand_selftest.o: ../../include/openssl/bio.h
103fips_rand_selftest.o: ../../include/openssl/crypto.h
104fips_rand_selftest.o: ../../include/openssl/des.h
105fips_rand_selftest.o: ../../include/openssl/des_old.h
106fips_rand_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
107fips_rand_selftest.o: ../../include/openssl/fips.h
108fips_rand_selftest.o: ../../include/openssl/fips_rand.h
109fips_rand_selftest.o: ../../include/openssl/lhash.h
110fips_rand_selftest.o: ../../include/openssl/opensslconf.h
111fips_rand_selftest.o: ../../include/openssl/opensslv.h
112fips_rand_selftest.o: ../../include/openssl/ossl_typ.h
113fips_rand_selftest.o: ../../include/openssl/rand.h
114fips_rand_selftest.o: ../../include/openssl/safestack.h
115fips_rand_selftest.o: ../../include/openssl/stack.h
116fips_rand_selftest.o: ../../include/openssl/symhacks.h
117fips_rand_selftest.o: ../../include/openssl/ui.h
118fips_rand_selftest.o: ../../include/openssl/ui_compat.h fips_rand_selftest.c
93fips_randtest.o: ../../e_os.h ../../include/openssl/bio.h 119fips_randtest.o: ../../e_os.h ../../include/openssl/bio.h
94fips_randtest.o: ../../include/openssl/crypto.h ../../include/openssl/des.h 120fips_randtest.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
95fips_randtest.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h 121fips_randtest.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
96fips_randtest.o: ../../include/openssl/err.h ../../include/openssl/fips_rand.h 122fips_randtest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
123fips_randtest.o: ../../include/openssl/fips_rand.h
97fips_randtest.o: ../../include/openssl/lhash.h 124fips_randtest.o: ../../include/openssl/lhash.h
98fips_randtest.o: ../../include/openssl/opensslconf.h 125fips_randtest.o: ../../include/openssl/opensslconf.h
99fips_randtest.o: ../../include/openssl/opensslv.h 126fips_randtest.o: ../../include/openssl/opensslv.h
@@ -101,4 +128,22 @@ fips_randtest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
101fips_randtest.o: ../../include/openssl/safestack.h 128fips_randtest.o: ../../include/openssl/safestack.h
102fips_randtest.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 129fips_randtest.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
103fips_randtest.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h 130fips_randtest.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
104fips_randtest.o: fips_randtest.c 131fips_randtest.o: ../fips_utl.h fips_randtest.c
132fips_rngvs.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
133fips_rngvs.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
134fips_rngvs.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
135fips_rngvs.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
136fips_rngvs.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
137fips_rngvs.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
138fips_rngvs.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
139fips_rngvs.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
140fips_rngvs.o: ../../include/openssl/fips_rand.h ../../include/openssl/lhash.h
141fips_rngvs.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
142fips_rngvs.o: ../../include/openssl/opensslconf.h
143fips_rngvs.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
144fips_rngvs.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
145fips_rngvs.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
146fips_rngvs.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
147fips_rngvs.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
148fips_rngvs.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
149fips_rngvs.o: ../../include/openssl/x509v3.h ../fips_utl.h fips_rngvs.c
diff --git a/src/lib/libssl/src/fips/rand/fips_rand.c b/src/lib/libssl/src/fips/rand/fips_rand.c
index cc2f12deb9..58453e996d 100644
--- a/src/lib/libssl/src/fips/rand/fips_rand.c
+++ b/src/lib/libssl/src/fips/rand/fips_rand.c
@@ -1,5 +1,5 @@
1/* ==================================================================== 1/* ====================================================================
2 * Copyright (c) 2003 The OpenSSL Project. All rights reserved. 2 * Copyright (c) 2007 The OpenSSL Project. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
@@ -48,7 +48,7 @@
48 */ 48 */
49 49
50/* 50/*
51 * This is a FIPS approved PRNG, ANSI X9.31 A.2.4. 51 * This is a FIPS approved AES PRNG based on ANSI X9.31 A.2.4.
52 */ 52 */
53 53
54#include "e_os.h" 54#include "e_os.h"
@@ -60,8 +60,8 @@
60#define _XOPEN_SOURCE_EXTENDED 1 60#define _XOPEN_SOURCE_EXTENDED 1
61#endif 61#endif
62 62
63#include <openssl/des.h>
64#include <openssl/rand.h> 63#include <openssl/rand.h>
64#include <openssl/aes.h>
65#include <openssl/err.h> 65#include <openssl/err.h>
66#include <openssl/fips_rand.h> 66#include <openssl/fips_rand.h>
67#ifndef OPENSSL_SYS_WIN32 67#ifndef OPENSSL_SYS_WIN32
@@ -76,280 +76,335 @@
76# endif 76# endif
77#endif 77#endif
78#include <string.h> 78#include <string.h>
79#include <openssl/fips.h>
80#include "fips_locl.h"
79 81
80#ifdef OPENSSL_FIPS 82#ifdef OPENSSL_FIPS
81 83
82#define SEED_SIZE 8 84void *OPENSSL_stderr(void);
83 85
84static unsigned char seed[SEED_SIZE]; 86#define AES_BLOCK_LENGTH 16
85static FIPS_RAND_SIZE_T n_seed;
86static FIPS_RAND_SIZE_T o_seed;
87static DES_cblock key1;
88static DES_cblock key2;
89static DES_key_schedule ks1,ks2;
90static int key_set;
91static int test_mode;
92static unsigned char test_faketime[8];
93 87
94#ifndef GETPID_IS_MEANINGLESS
95static int seed_pid;
96static int key_pid;
97#endif
98
99static void fips_rand_cleanup(void);
100static void fips_rand_add(const void *buf, FIPS_RAND_SIZE_T num, double add_entropy);
101static int fips_rand_bytes(unsigned char *buf, FIPS_RAND_SIZE_T num);
102static int fips_rand_status(void);
103 88
104static RAND_METHOD rand_fips_meth= 89/* AES FIPS PRNG implementation */
105 {
106 FIPS_rand_seed,
107 fips_rand_bytes,
108 fips_rand_cleanup,
109 fips_rand_add,
110 fips_rand_bytes,
111 fips_rand_status
112 };
113 90
114static int second; 91typedef struct
92 {
93 int seeded;
94 int keyed;
95 int test_mode;
96 int second;
97 int error;
98 unsigned long counter;
99 AES_KEY ks;
100 int vpos;
101 /* Temporary storage for key if it equals seed length */
102 unsigned char tmp_key[AES_BLOCK_LENGTH];
103 unsigned char V[AES_BLOCK_LENGTH];
104 unsigned char DT[AES_BLOCK_LENGTH];
105 unsigned char last[AES_BLOCK_LENGTH];
106 } FIPS_PRNG_CTX;
107
108static FIPS_PRNG_CTX sctx;
109
110static int fips_prng_fail = 0;
111
112void FIPS_rng_stick(void)
113 {
114 fips_prng_fail = 1;
115 }
115 116
116RAND_METHOD *FIPS_rand_method(void) 117void fips_rand_prng_reset(FIPS_PRNG_CTX *ctx)
117{ 118 {
118 return &rand_fips_meth; 119 ctx->seeded = 0;
119} 120 ctx->keyed = 0;
121 ctx->test_mode = 0;
122 ctx->counter = 0;
123 ctx->second = 0;
124 ctx->error = 0;
125 ctx->vpos = 0;
126 OPENSSL_cleanse(ctx->V, AES_BLOCK_LENGTH);
127 OPENSSL_cleanse(&ctx->ks, sizeof(AES_KEY));
128 }
129
120 130
121void FIPS_set_prng_key(const unsigned char k1[8],const unsigned char k2[8]) 131static int fips_set_prng_key(FIPS_PRNG_CTX *ctx,
122 { 132 const unsigned char *key, FIPS_RAND_SIZE_T keylen)
123 memcpy(&key1,k1,sizeof key1); 133 {
124 memcpy(&key2,k2,sizeof key2); 134 FIPS_selftest_check();
125 key_set=1; 135 if (keylen != 16 && keylen != 24 && keylen != 32)
126#ifndef GETPID_IS_MEANINGLESS 136 {
127 key_pid=getpid(); 137 /* error: invalid key size */
128#endif 138 return 0;
129 second=0; 139 }
130 } 140 AES_set_encrypt_key(key, keylen << 3, &ctx->ks);
141 if (keylen == 16)
142 {
143 memcpy(ctx->tmp_key, key, 16);
144 ctx->keyed = 2;
145 }
146 else
147 ctx->keyed = 1;
148 ctx->seeded = 0;
149 ctx->second = 0;
150 return 1;
151 }
131 152
132void FIPS_test_mode(int test,const unsigned char faketime[8]) 153static int fips_set_prng_seed(FIPS_PRNG_CTX *ctx,
133 { 154 const unsigned char *seed, FIPS_RAND_SIZE_T seedlen)
134 test_mode=test; 155 {
135 if(!test_mode) 156 int i;
136 return; 157 if (!ctx->keyed)
137 memcpy(test_faketime,faketime,sizeof test_faketime); 158 return 0;
138 } 159 /* In test mode seed is just supplied data */
160 if (ctx->test_mode)
161 {
162 if (seedlen != AES_BLOCK_LENGTH)
163 return 0;
164 memcpy(ctx->V, seed, AES_BLOCK_LENGTH);
165 ctx->seeded = 1;
166 return 1;
167 }
168 /* Outside test mode XOR supplied data with existing seed */
169 for (i = 0; i < seedlen; i++)
170 {
171 ctx->V[ctx->vpos++] ^= seed[i];
172 if (ctx->vpos == AES_BLOCK_LENGTH)
173 {
174 ctx->vpos = 0;
175 /* Special case if first seed and key length equals
176 * block size check key and seed do not match.
177 */
178 if (ctx->keyed == 2)
179 {
180 if (!memcmp(ctx->tmp_key, ctx->V, 16))
181 {
182 RANDerr(RAND_F_FIPS_SET_PRNG_SEED,
183 RAND_R_PRNG_SEED_MUST_NOT_MATCH_KEY);
184 return 0;
185 }
186 OPENSSL_cleanse(ctx->tmp_key, 16);
187 ctx->keyed = 1;
188 }
189 ctx->seeded = 1;
190 }
191 }
192 return 1;
193 }
139 194
140/* NB: this returns true if _partially_ seeded */ 195int fips_set_test_mode(FIPS_PRNG_CTX *ctx)
141int FIPS_rand_seeded() 196 {
142 { return key_set || n_seed; } 197 if (ctx->keyed)
198 {
199 RANDerr(RAND_F_FIPS_SET_TEST_MODE,RAND_R_PRNG_KEYED);
200 return 0;
201 }
202 ctx->test_mode = 1;
203 return 1;
204 }
143 205
144static void fips_gettime(unsigned char buf[8]) 206int FIPS_rand_test_mode(void)
145 { 207 {
146#ifdef OPENSSL_SYS_WIN32 208 return fips_set_test_mode(&sctx);
147 FILETIME ft; 209 }
148#else
149 struct timeval tv;
150#endif
151 210
152 if(test_mode) 211int FIPS_rand_set_dt(unsigned char *dt)
153 { 212 {
154 fprintf(stderr,"WARNING!!! PRNG IN TEST MODE!!!\n"); 213 if (!sctx.test_mode)
155 memcpy(buf,test_faketime,sizeof test_faketime); 214 {
156 return; 215 RANDerr(RAND_F_FIPS_RAND_SET_DT,RAND_R_NOT_IN_TEST_MODE);
216 return 0;
217 }
218 memcpy(sctx.DT, dt, AES_BLOCK_LENGTH);
219 return 1;
157 } 220 }
221
222static void fips_get_dt(FIPS_PRNG_CTX *ctx)
223 {
158#ifdef OPENSSL_SYS_WIN32 224#ifdef OPENSSL_SYS_WIN32
159 GetSystemTimeAsFileTime(&ft); 225 FILETIME ft;
160 buf[0] = (unsigned char) (ft.dwHighDateTime & 0xff);
161 buf[1] = (unsigned char) ((ft.dwHighDateTime >> 8) & 0xff);
162 buf[2] = (unsigned char) ((ft.dwHighDateTime >> 16) & 0xff);
163 buf[3] = (unsigned char) ((ft.dwHighDateTime >> 24) & 0xff);
164 buf[4] = (unsigned char) (ft.dwLowDateTime & 0xff);
165 buf[5] = (unsigned char) ((ft.dwLowDateTime >> 8) & 0xff);
166 buf[6] = (unsigned char) ((ft.dwLowDateTime >> 16) & 0xff);
167 buf[7] = (unsigned char) ((ft.dwLowDateTime >> 24) & 0xff);
168#else 226#else
169 gettimeofday(&tv,NULL); 227 struct timeval tv;
170 buf[0] = (unsigned char) (tv.tv_sec & 0xff);
171 buf[1] = (unsigned char) ((tv.tv_sec >> 8) & 0xff);
172 buf[2] = (unsigned char) ((tv.tv_sec >> 16) & 0xff);
173 buf[3] = (unsigned char) ((tv.tv_sec >> 24) & 0xff);
174 buf[4] = (unsigned char) (tv.tv_usec & 0xff);
175 buf[5] = (unsigned char) ((tv.tv_usec >> 8) & 0xff);
176 buf[6] = (unsigned char) ((tv.tv_usec >> 16) & 0xff);
177 buf[7] = (unsigned char) ((tv.tv_usec >> 24) & 0xff);
178#endif 228#endif
229 unsigned char *buf = ctx->DT;
179 230
180#if 0 /* This eminently sensible strategy is not acceptable to NIST. Sigh. */
181#ifndef GETPID_IS_MEANINGLESS 231#ifndef GETPID_IS_MEANINGLESS
182 /* we mix in the PID to ensure that after a fork the children don't give 232 unsigned long pid;
183 * the same results as each other
184 */
185 pid=getpid();
186 /* make sure we shift the pid to the MSB */
187 if((pid&0xffff0000) == 0)
188 pid<<=16;
189 *(long *)&buf[0]^=pid;
190#endif 233#endif
234
235#ifdef OPENSSL_SYS_WIN32
236 GetSystemTimeAsFileTime(&ft);
237 buf[0] = (unsigned char) (ft.dwHighDateTime & 0xff);
238 buf[1] = (unsigned char) ((ft.dwHighDateTime >> 8) & 0xff);
239 buf[2] = (unsigned char) ((ft.dwHighDateTime >> 16) & 0xff);
240 buf[3] = (unsigned char) ((ft.dwHighDateTime >> 24) & 0xff);
241 buf[4] = (unsigned char) (ft.dwLowDateTime & 0xff);
242 buf[5] = (unsigned char) ((ft.dwLowDateTime >> 8) & 0xff);
243 buf[6] = (unsigned char) ((ft.dwLowDateTime >> 16) & 0xff);
244 buf[7] = (unsigned char) ((ft.dwLowDateTime >> 24) & 0xff);
245#else
246 gettimeofday(&tv,NULL);
247 buf[0] = (unsigned char) (tv.tv_sec & 0xff);
248 buf[1] = (unsigned char) ((tv.tv_sec >> 8) & 0xff);
249 buf[2] = (unsigned char) ((tv.tv_sec >> 16) & 0xff);
250 buf[3] = (unsigned char) ((tv.tv_sec >> 24) & 0xff);
251 buf[4] = (unsigned char) (tv.tv_usec & 0xff);
252 buf[5] = (unsigned char) ((tv.tv_usec >> 8) & 0xff);
253 buf[6] = (unsigned char) ((tv.tv_usec >> 16) & 0xff);
254 buf[7] = (unsigned char) ((tv.tv_usec >> 24) & 0xff);
191#endif 255#endif
192 } 256 buf[8] = (unsigned char) (ctx->counter & 0xff);
257 buf[9] = (unsigned char) ((ctx->counter >> 8) & 0xff);
258 buf[10] = (unsigned char) ((ctx->counter >> 16) & 0xff);
259 buf[11] = (unsigned char) ((ctx->counter >> 24) & 0xff);
193 260
194static void fips_rand_encrypt(unsigned char *out,const unsigned char *in) 261 ctx->counter++;
195 {
196 DES_ecb2_encrypt(in,out,&ks1,&ks2,1);
197 }
198 262
199static void fips_rand_cleanup(void) 263
200 { 264#ifndef GETPID_IS_MEANINGLESS
201 OPENSSL_cleanse(seed,sizeof seed); 265 pid=(unsigned long)getpid();
202 n_seed=0; 266 buf[12] = (unsigned char) (pid & 0xff);
267 buf[13] = (unsigned char) ((pid >> 8) & 0xff);
268 buf[14] = (unsigned char) ((pid >> 16) & 0xff);
269 buf[15] = (unsigned char) ((pid >> 24) & 0xff);
270#endif
203 } 271 }
204 272
205void FIPS_rand_seed(const void *buf_, FIPS_RAND_SIZE_T num) 273static int fips_rand(FIPS_PRNG_CTX *ctx,
206 { 274 unsigned char *out, FIPS_RAND_SIZE_T outlen)
207 const char *buf=buf_; 275 {
208 FIPS_RAND_SIZE_T n; 276 unsigned char R[AES_BLOCK_LENGTH], I[AES_BLOCK_LENGTH];
209 static int init; 277 unsigned char tmp[AES_BLOCK_LENGTH];
278 int i;
279 if (ctx->error)
280 {
281 RANDerr(RAND_F_FIPS_RAND,RAND_R_PRNG_ERROR);
282 return 0;
283 }
284 if (!ctx->keyed)
285 {
286 RANDerr(RAND_F_FIPS_RAND,RAND_R_NO_KEY_SET);
287 return 0;
288 }
289 if (!ctx->seeded)
290 {
291 RANDerr(RAND_F_FIPS_RAND,RAND_R_PRNG_NOT_SEEDED);
292 return 0;
293 }
294 for (;;)
295 {
296 if (!ctx->test_mode)
297 fips_get_dt(ctx);
298 AES_encrypt(ctx->DT, I, &ctx->ks);
299 for (i = 0; i < AES_BLOCK_LENGTH; i++)
300 tmp[i] = I[i] ^ ctx->V[i];
301 AES_encrypt(tmp, R, &ctx->ks);
302 for (i = 0; i < AES_BLOCK_LENGTH; i++)
303 tmp[i] = R[i] ^ I[i];
304 AES_encrypt(tmp, ctx->V, &ctx->ks);
305 /* Continuous PRNG test */
306 if (ctx->second)
307 {
308 if (fips_prng_fail)
309 memcpy(ctx->last, R, AES_BLOCK_LENGTH);
310 if (!memcmp(R, ctx->last, AES_BLOCK_LENGTH))
311 {
312 RANDerr(RAND_F_FIPS_RAND,RAND_R_PRNG_STUCK);
313 ctx->error = 1;
314 fips_set_selftest_fail();
315 return 0;
316 }
317 }
318 memcpy(ctx->last, R, AES_BLOCK_LENGTH);
319 if (!ctx->second)
320 {
321 ctx->second = 1;
322 if (!ctx->test_mode)
323 continue;
324 }
325
326 if (outlen <= AES_BLOCK_LENGTH)
327 {
328 memcpy(out, R, outlen);
329 break;
330 }
331
332 memcpy(out, R, AES_BLOCK_LENGTH);
333 out += AES_BLOCK_LENGTH;
334 outlen -= AES_BLOCK_LENGTH;
335 }
336 return 1;
337 }
210 338
211 /* If the key hasn't been set, we can't seed! */
212 if(!key_set)
213 return;
214 339
215 CRYPTO_w_lock(CRYPTO_LOCK_RAND); 340int FIPS_rand_set_key(const unsigned char *key, FIPS_RAND_SIZE_T keylen)
216 if(!init)
217 { 341 {
218 init=1; 342 int ret;
219 DES_set_key(&key1,&ks1); 343 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
220 DES_set_key(&key2,&ks2); 344 ret = fips_set_prng_key(&sctx, key, keylen);
345 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
346 return ret;
221 } 347 }
222 348
223 /* 349int FIPS_rand_seed(const void *seed, FIPS_RAND_SIZE_T seedlen)
224 * This algorithm only uses 64 bits of seed, so ensure that we use
225 * the most recent 64 bits.
226 */
227 for(n=0 ; n < num ; )
228 { 350 {
229 FIPS_RAND_SIZE_T t=num-n; 351 int ret;
230 352 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
231 if(o_seed+t > sizeof seed) 353 ret = fips_set_prng_seed(&sctx, seed, seedlen);
232 t=sizeof seed-o_seed; 354 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
233 memcpy(seed+o_seed,buf+n,t); 355 return ret;
234 n+=t;
235 o_seed+=t;
236 if(o_seed == sizeof seed)
237 o_seed=0;
238 if(n_seed < sizeof seed)
239 n_seed+=t;
240 } 356 }
241 357
242#ifndef GETPID_IS_MEANINGLESS
243 seed_pid=getpid();
244#endif
245
246 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
247 }
248
249static void fips_rand_add(const void *buf, FIPS_RAND_SIZE_T num, double add_entropy)
250 {
251 FIPS_rand_seed(buf,num);
252 }
253
254static int fips_rand_bytes(unsigned char *buf,FIPS_RAND_SIZE_T num)
255 {
256 FIPS_RAND_SIZE_T n;
257 unsigned char timeseed[8];
258 unsigned char intermediate[SEED_SIZE];
259 unsigned char output[SEED_SIZE];
260 static unsigned char previous[SEED_SIZE];
261#ifndef GETPID_IS_MEANINGLESS
262 int pid;
263#endif
264 358
265 if(n_seed < sizeof seed) 359int FIPS_rand_bytes(unsigned char *out, FIPS_RAND_SIZE_T count)
266 { 360 {
267 RANDerr(RAND_F_FIPS_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED); 361 int ret;
268 return 0; 362 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
363 ret = fips_rand(&sctx, out, count);
364 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
365 return ret;
269 } 366 }
270 367
271#ifdef FIPS_RAND_MAX_SIZE_T 368int FIPS_rand_status(void)
272 if (num > FIPS_RAND_MAX_SIZE_T)
273 { 369 {
274#ifdef RAND_R_PRNG_ASKING_FOR_TOO_MUCH 370 int ret;
275 RANDerr(RAND_F_FIPS_RAND_BYTES,RAND_R_PRNG_ASKING_FOR_TOO_MUCH); 371 CRYPTO_r_lock(CRYPTO_LOCK_RAND);
276 return 0; 372 ret = sctx.seeded;
277#else 373 CRYPTO_r_unlock(CRYPTO_LOCK_RAND);
278 return -1; /* signal "not supported" condition */ 374 return ret;
279#endif
280 } 375 }
281#endif
282 376
283#ifndef GETPID_IS_MEANINGLESS 377void FIPS_rand_reset(void)
284 pid=getpid();
285 if(pid != seed_pid)
286 { 378 {
287 RANDerr(RAND_F_FIPS_RAND_BYTES,RAND_R_PRNG_NOT_RESEEDED); 379 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
288 return 0; 380 fips_rand_prng_reset(&sctx);
381 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
289 } 382 }
290 if(pid != key_pid) 383
384static void fips_do_rand_seed(const void *seed, FIPS_RAND_SIZE_T seedlen)
291 { 385 {
292 RANDerr(RAND_F_FIPS_RAND_BYTES,RAND_R_PRNG_NOT_REKEYED); 386 FIPS_rand_seed(seed, seedlen);
293 return 0;
294 } 387 }
295#endif
296
297 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
298 388
299 for(n=0 ; n < num ; ) 389static void fips_do_rand_add(const void *seed, FIPS_RAND_SIZE_T seedlen,
390 double add_entropy)
300 { 391 {
301 unsigned char t[SEED_SIZE]; 392 FIPS_rand_seed(seed, seedlen);
302 FIPS_RAND_SIZE_T l;
303
304 /* ANS X9.31 A.2.4: I = ede*K(DT)
305 timeseed == DT
306 intermediate == I
307 */
308 fips_gettime(timeseed);
309 fips_rand_encrypt(intermediate,timeseed);
310
311 /* ANS X9.31 A.2.4: R = ede*K(I^V)
312 intermediate == I
313 seed == V
314 output == R
315 */
316 for(l=0 ; l < sizeof t ; ++l)
317 t[l]=intermediate[l]^seed[l];
318 fips_rand_encrypt(output,t);
319
320 /* ANS X9.31 A.2.4: V = ede*K(R^I)
321 output == R
322 intermediate == I
323 seed == V
324 */
325 for(l=0 ; l < sizeof t ; ++l)
326 t[l]=output[l]^intermediate[l];
327 fips_rand_encrypt(seed,t);
328
329 if(second && !memcmp(output,previous,sizeof previous))
330 {
331 RANDerr(RAND_F_FIPS_RAND_BYTES,RAND_R_PRNG_STUCK);
332 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
333 return 0;
334 }
335 memcpy(previous,output,sizeof previous);
336 second=1;
337
338 /* Successive values of R may be concatenated to produce a
339 pseudo random number of the desired length */
340 l=SEED_SIZE < num-n ? SEED_SIZE : num-n;
341 memcpy(buf+n,output,l);
342 n+=l;
343 } 393 }
344 394
345 CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 395static const RAND_METHOD rand_fips_meth=
346
347 return 1;
348 }
349
350static int fips_rand_status(void)
351 { 396 {
352 return n_seed == sizeof seed; 397 fips_do_rand_seed,
353 } 398 FIPS_rand_bytes,
399 FIPS_rand_reset,
400 fips_do_rand_add,
401 FIPS_rand_bytes,
402 FIPS_rand_status
403 };
354 404
355#endif /* OPENSSL_FIPS */ 405const RAND_METHOD *FIPS_rand_method(void)
406{
407 return &rand_fips_meth;
408}
409
410#endif
diff --git a/src/lib/libssl/src/fips/rand/fips_rand.h b/src/lib/libssl/src/fips/rand/fips_rand.h
index 1286b63ab2..a175aaf6c5 100644
--- a/src/lib/libssl/src/fips/rand/fips_rand.h
+++ b/src/lib/libssl/src/fips/rand/fips_rand.h
@@ -58,13 +58,17 @@
58extern "C" { 58extern "C" {
59#endif 59#endif
60 60
61void FIPS_set_prng_key(const unsigned char k1[8],const unsigned char k2[8]); 61int FIPS_rand_set_key(const unsigned char *key, FIPS_RAND_SIZE_T keylen);
62void FIPS_test_mode(int test,const unsigned char faketime[8]); 62int FIPS_rand_seed(const void *buf, FIPS_RAND_SIZE_T num);
63void FIPS_rand_seed(const void *buf, FIPS_RAND_SIZE_T num); 63int FIPS_rand_bytes(unsigned char *out, FIPS_RAND_SIZE_T outlen);
64/* NB: this returns true if _partially_ seeded */
65int FIPS_rand_seeded(void);
66 64
67RAND_METHOD *FIPS_rand_method(void); 65int FIPS_rand_test_mode(void);
66void FIPS_rand_reset(void);
67int FIPS_rand_set_dt(unsigned char *dt);
68
69int FIPS_rand_status(void);
70
71const RAND_METHOD *FIPS_rand_method(void);
68 72
69#ifdef __cplusplus 73#ifdef __cplusplus
70} 74}
diff --git a/src/lib/libssl/src/fips/rand/fips_rand_selftest.c b/src/lib/libssl/src/fips/rand/fips_rand_selftest.c
new file mode 100644
index 0000000000..2194a76cd1
--- /dev/null
+++ b/src/lib/libssl/src/fips/rand/fips_rand_selftest.c
@@ -0,0 +1,371 @@
1/* ====================================================================
2 * Copyright (c) 2003 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 *
48 */
49
50#include <string.h>
51#include <openssl/err.h>
52#include <openssl/fips.h>
53#include <openssl/rand.h>
54#include <openssl/fips_rand.h>
55
56#ifdef OPENSSL_FIPS
57
58
59
60typedef struct
61 {
62 unsigned char DT[16];
63 unsigned char V[16];
64 unsigned char R[16];
65 } AES_PRNG_TV;
66
67/* The following test vectors are taken directly from the RGNVS spec */
68
69static unsigned char aes_128_key[16] =
70 {0xf3,0xb1,0x66,0x6d,0x13,0x60,0x72,0x42,
71 0xed,0x06,0x1c,0xab,0xb8,0xd4,0x62,0x02};
72
73static AES_PRNG_TV aes_128_tv[] = {
74 {
75 /* DT */
76 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
77 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xf9},
78 /* V */
79 {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
80 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
81 /* R */
82 {0x59,0x53,0x1e,0xd1,0x3b,0xb0,0xc0,0x55,
83 0x84,0x79,0x66,0x85,0xc1,0x2f,0x76,0x41}
84 },
85 {
86 /* DT */
87 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
88 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfa},
89 /* V */
90 {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
91 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
92 /* R */
93 {0x7c,0x22,0x2c,0xf4,0xca,0x8f,0xa2,0x4c,
94 0x1c,0x9c,0xb6,0x41,0xa9,0xf3,0x22,0x0d}
95 },
96 {
97 /* DT */
98 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
99 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfb},
100 /* V */
101 {0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
102 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
103 /* R */
104 {0x8a,0xaa,0x00,0x39,0x66,0x67,0x5b,0xe5,
105 0x29,0x14,0x28,0x81,0xa9,0x4d,0x4e,0xc7}
106 },
107 {
108 /* DT */
109 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
110 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfc},
111 /* V */
112 {0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
113 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
114 /* R */
115 {0x88,0xdd,0xa4,0x56,0x30,0x24,0x23,0xe5,
116 0xf6,0x9d,0xa5,0x7e,0x7b,0x95,0xc7,0x3a}
117 },
118 {
119 /* DT */
120 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
121 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfd},
122 /* V */
123 {0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
124 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
125 /* R */
126 {0x05,0x25,0x92,0x46,0x61,0x79,0xd2,0xcb,
127 0x78,0xc4,0x0b,0x14,0x0a,0x5a,0x9a,0xc8}
128 },
129 {
130 /* DT */
131 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
132 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x23,0x77},
133 /* V */
134 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
135 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe},
136 /* R */
137 {0x0d,0xd5,0xa0,0x36,0x7a,0x59,0x26,0xbc,
138 0x48,0xd9,0x38,0xbf,0xf0,0x85,0x8f,0xea}
139 },
140 {
141 /* DT */
142 {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62,
143 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x23,0x78},
144 /* V */
145 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
146 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
147 /* R */
148 {0xae,0x53,0x87,0xee,0x8c,0xd9,0x12,0xf5,
149 0x73,0x53,0xae,0x03,0xf9,0xd5,0x13,0x33}
150 },
151};
152
153static unsigned char aes_192_key[24] =
154 {0x15,0xd8,0x78,0x0d,0x62,0xd3,0x25,0x6e,
155 0x44,0x64,0x10,0x13,0x60,0x2b,0xa9,0xbc,
156 0x4a,0xfb,0xca,0xeb,0x4c,0x8b,0x99,0x3b};
157
158static AES_PRNG_TV aes_192_tv[] = {
159 {
160 /* DT */
161 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
162 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4b},
163 /* V */
164 {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
165 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
166 /* R */
167 {0x17,0x07,0xd5,0x28,0x19,0x79,0x1e,0xef,
168 0xa5,0x0c,0xbf,0x25,0xe5,0x56,0xb4,0x93}
169 },
170 {
171 /* DT */
172 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
173 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4c},
174 /* V */
175 {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
176 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
177 /* R */
178 {0x92,0x8d,0xbe,0x07,0xdd,0xc7,0x58,0xc0,
179 0x6f,0x35,0x41,0x9b,0x17,0xc9,0xbd,0x9b}
180 },
181 {
182 /* DT */
183 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
184 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4d},
185 /* V */
186 {0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
187 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
188 /* R */
189 {0xd5,0xde,0xf4,0x50,0xf3,0xb7,0x10,0x4e,
190 0xb8,0xc6,0xf8,0xcf,0xe2,0xb1,0xca,0xa2}
191 },
192 {
193 /* DT */
194 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
195 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4e},
196 /* V */
197 {0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
198 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
199 /* R */
200 {0xce,0x29,0x08,0x43,0xfc,0x34,0x41,0xe7,
201 0x47,0x8f,0xb3,0x66,0x2b,0x46,0xb1,0xbb}
202 },
203 {
204 /* DT */
205 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
206 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4f},
207 /* V */
208 {0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
209 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
210 /* R */
211 {0xb3,0x26,0x0f,0xf5,0xd6,0xca,0xa8,0xbf,
212 0x89,0xb8,0x5e,0x2f,0x22,0x56,0x92,0x2f}
213 },
214 {
215 /* DT */
216 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
217 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0xc9},
218 /* V */
219 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
220 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe},
221 /* R */
222 {0x05,0xeb,0x18,0x52,0x34,0x43,0x00,0x43,
223 0x6e,0x5a,0xa5,0xfe,0x7b,0x32,0xc4,0x2d}
224 },
225 {
226 /* DT */
227 {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1,
228 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0xca},
229 /* V */
230 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
231 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
232 /* R */
233 {0x15,0x3c,0xe8,0xd1,0x04,0xc7,0xad,0x50,
234 0x0b,0xf0,0x07,0x16,0xe7,0x56,0x7a,0xea}
235 },
236};
237
238static unsigned char aes_256_key[32] =
239 {0x6d,0x14,0x06,0x6c,0xb6,0xd8,0x21,0x2d,
240 0x82,0x8d,0xfa,0xf2,0x7a,0x03,0xb7,0x9f,
241 0x0c,0xc7,0x3e,0xcd,0x76,0xeb,0xee,0xb5,
242 0x21,0x05,0x8c,0x4f,0x31,0x7a,0x80,0xbb};
243
244static AES_PRNG_TV aes_256_tv[] = {
245 {
246 /* DT */
247 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
248 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x88},
249 /* V */
250 {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
251 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
252 /* R */
253 {0x35,0xc7,0xef,0xa7,0x78,0x4d,0x29,0xbc,
254 0x82,0x79,0x99,0xfb,0xd0,0xb3,0x3b,0x72}
255 },
256 {
257 /* DT */
258 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
259 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x89},
260 /* V */
261 {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
262 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
263 /* R */
264 {0x6c,0xf4,0x42,0x5d,0xc7,0x04,0x1a,0x41,
265 0x28,0x2a,0x78,0xa9,0xb0,0x12,0xc4,0x95}
266 },
267 {
268 /* DT */
269 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
270 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x8a},
271 /* V */
272 {0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
273 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
274 /* R */
275 {0x16,0x90,0xa4,0xff,0x7b,0x7e,0xb9,0x30,
276 0xdb,0x67,0x4b,0xac,0x2d,0xe1,0xd1,0x75}
277 },
278 {
279 /* DT */
280 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
281 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x8b},
282 /* V */
283 {0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
284 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
285 /* R */
286 {0x14,0x6f,0xf5,0x95,0xa1,0x46,0x65,0x30,
287 0xbc,0x57,0xe2,0x4a,0xf7,0x45,0x62,0x05}
288 },
289 {
290 /* DT */
291 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
292 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x8c},
293 /* V */
294 {0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
295 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
296 /* R */
297 {0x96,0xe2,0xb4,0x1e,0x66,0x5e,0x0f,0xa4,
298 0xc5,0xcd,0xa2,0x07,0xcc,0xb7,0x94,0x40}
299 },
300 {
301 /* DT */
302 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
303 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9f,0x06},
304 /* V */
305 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
306 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe},
307 /* R */
308 {0x61,0xce,0x1d,0x6a,0x48,0x75,0x97,0x28,
309 0x4b,0x41,0xde,0x18,0x44,0x4f,0x56,0xec}
310 },
311 {
312 /* DT */
313 {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5,
314 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9f,0x07},
315 /* V */
316 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
317 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
318 /* R */
319 {0x52,0x89,0x59,0x79,0x2d,0xaa,0x28,0xb3,
320 0xb0,0x8a,0x3e,0x70,0xfa,0x71,0x59,0x84}
321 },
322};
323
324
325void FIPS_corrupt_rng()
326 {
327 aes_192_tv[0].V[0]++;
328 }
329
330#define fips_rand_test(key, tv) \
331 do_rand_test(key, sizeof key, tv, sizeof(tv)/sizeof(AES_PRNG_TV))
332
333static int do_rand_test(unsigned char *key, int keylen,
334 AES_PRNG_TV *tv, int ntv)
335 {
336 unsigned char R[16];
337 int i;
338 if (!FIPS_rand_set_key(key, keylen))
339 return 0;
340 for (i = 0; i < ntv; i++)
341 {
342 FIPS_rand_seed(tv[i].V, 16);
343 FIPS_rand_set_dt(tv[i].DT);
344 FIPS_rand_bytes(R, 16);
345 if (memcmp(R, tv[i].R, 16))
346 return 0;
347 }
348 return 1;
349 }
350
351
352int FIPS_selftest_rng()
353 {
354 FIPS_rand_reset();
355 if (!FIPS_rand_test_mode())
356 {
357 FIPSerr(FIPS_F_FIPS_SELFTEST_RNG,FIPS_R_SELFTEST_FAILED);
358 return 0;
359 }
360 if (!fips_rand_test(aes_128_key,aes_128_tv)
361 || !fips_rand_test(aes_192_key, aes_192_tv)
362 || !fips_rand_test(aes_256_key, aes_256_tv))
363 {
364 FIPSerr(FIPS_F_FIPS_SELFTEST_RNG,FIPS_R_SELFTEST_FAILED);
365 return 0;
366 }
367 FIPS_rand_reset();
368 return 1;
369 }
370
371#endif
diff --git a/src/lib/libssl/src/fips/rand/fips_randtest.c b/src/lib/libssl/src/fips/rand/fips_randtest.c
index 6165944e56..5582941c11 100644
--- a/src/lib/libssl/src/fips/rand/fips_randtest.c
+++ b/src/lib/libssl/src/fips/rand/fips_randtest.c
@@ -105,9 +105,12 @@
105 105
106#include <stdio.h> 106#include <stdio.h>
107#include <stdlib.h> 107#include <stdlib.h>
108#include <string.h>
109#include <ctype.h>
108#include <openssl/rand.h> 110#include <openssl/rand.h>
109#include <openssl/fips_rand.h> 111#include <openssl/fips_rand.h>
110#include <openssl/err.h> 112#include <openssl/err.h>
113#include <openssl/bn.h>
111 114
112#include "e_os.h" 115#include "e_os.h"
113 116
@@ -120,42 +123,65 @@ int main(int argc, char *argv[])
120 123
121#else 124#else
122 125
123/* some FIPS 140-1 random number test */ 126#include "fips_utl.h"
124/* some simple tests */
125
126static DES_cblock prng_key1={0x21,0x58,0x47,0xb7,0xc2,0x97,0x5a,0x8e};
127static DES_cblock prng_key2={0x61,0x23,0x05,0x96,0x18,0x91,0x86,0xac};
128static unsigned char prng_seed[8]={0x6b,0xa3,0x4f,0x07,0xe4,0x2a,0xb0,0xc};
129 127
130typedef struct 128typedef struct
131 { 129 {
132 DES_cblock keys[2]; 130 unsigned char DT[16];
133 const unsigned char time[8]; 131 unsigned char V[16];
134 const unsigned char seed[8]; 132 unsigned char R[16];
135 const unsigned char block1[8]; 133 } AES_PRNG_MCT;
136 const unsigned char block100[8]; 134
137 } PRNGtest; 135static unsigned char aes_128_mct_key[16] =
138 136 {0x9f,0x5b,0x51,0x20,0x0b,0xf3,0x34,0xb5,
139/* FIXME: these test vectors are made up! */ 137 0xd8,0x2b,0xe8,0xc3,0x72,0x55,0xc8,0x48};
140static PRNGtest t1= 138
141 { 139static AES_PRNG_MCT aes_128_mct_tv = {
142 { { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, 140 /* DT */
143 { 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, 141 {0x63,0x76,0xbb,0xe5,0x29,0x02,0xba,0x3b,
144 }, 142 0x67,0xc9,0x25,0xfa,0x70,0x1f,0x11,0xac},
145 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 143 /* V */
146 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 144 {0x57,0x2c,0x8e,0x76,0x87,0x26,0x47,0x97,
147 { 0x33,0xc3,0xdf,0xfe,0x60,0x60,0x49,0x9e }, 145 0x7e,0x74,0xfb,0xdd,0xc4,0x95,0x01,0xd1},
148 { 0xcd,0x2b,0x41,0xaf,0x80,0x51,0x37,0xd8 } 146 /* R */
149 }; 147 {0x48,0xe9,0xbd,0x0d,0x06,0xee,0x18,0xfb,
150static PRNGtest t2= 148 0xe4,0x57,0x90,0xd5,0xc3,0xfc,0x9b,0x73}
151 { 149};
152 { { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, 150
153 { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff } }, 151static unsigned char aes_192_mct_key[24] =
154 { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, 152 {0xb7,0x6c,0x34,0xd1,0x09,0x67,0xab,0x73,
155 { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, 153 0x4d,0x5a,0xd5,0x34,0x98,0x16,0x0b,0x91,
156 { 0x65,0xf1,0xa4,0x07,0x42,0x38,0xd5,0x25 }, 154 0xbc,0x35,0x51,0x16,0x6b,0xae,0x93,0x8a};
157 { 0xbb,0x75,0x84,0x20,0x7a,0x44,0xf0,0xa0 } 155
158 }; 156static AES_PRNG_MCT aes_192_mct_tv = {
157 /* DT */
158 {0x84,0xce,0x22,0x7d,0x91,0x5a,0xa3,0xc9,
159 0x84,0x3c,0x0a,0xb3,0xa9,0x63,0x15,0x52},
160 /* V */
161 {0xb6,0xaf,0xe6,0x8f,0x99,0x9e,0x90,0x64,
162 0xdd,0xc7,0x7a,0xc1,0xbb,0x90,0x3a,0x6d},
163 /* R */
164 {0xfc,0x85,0x60,0x9a,0x29,0x6f,0xef,0x21,
165 0xdd,0x86,0x20,0x32,0x8a,0x29,0x6f,0x47}
166};
167
168static unsigned char aes_256_mct_key[32] =
169 {0x9b,0x05,0xc8,0x68,0xff,0x47,0xf8,0x3a,
170 0xa6,0x3a,0xa8,0xcb,0x4e,0x71,0xb2,0xe0,
171 0xb8,0x7e,0xf1,0x37,0xb6,0xb4,0xf6,0x6d,
172 0x86,0x32,0xfc,0x1f,0x5e,0x1d,0x1e,0x50};
173
174static AES_PRNG_MCT aes_256_mct_tv = {
175 /* DT */
176 {0x31,0x6e,0x35,0x9a,0xb1,0x44,0xf0,0xee,
177 0x62,0x6d,0x04,0x46,0xe0,0xa3,0x92,0x4c},
178 /* V */
179 {0x4f,0xcd,0xc1,0x87,0x82,0x1f,0x4d,0xa1,
180 0x3e,0x0e,0x56,0x44,0x59,0xe8,0x83,0xca},
181 /* R */
182 {0xc8,0x87,0xc2,0x61,0x5b,0xd0,0xb9,0xe1,
183 0xe7,0xf3,0x8b,0xd7,0x5b,0xd5,0xf1,0x8d}
184};
159 185
160static void dump(const unsigned char *b,int n) 186static void dump(const unsigned char *b,int n)
161 { 187 {
@@ -174,196 +200,49 @@ static void compare(const unsigned char *result,const unsigned char *expected,
174 if(result[i] != expected[i]) 200 if(result[i] != expected[i])
175 { 201 {
176 puts("Random test failed, got:"); 202 puts("Random test failed, got:");
177 dump(result,8); 203 dump(result,n);
178 puts("\n expected:"); 204 puts("\n expected:");
179 dump(expected,8); 205 dump(expected,n);
180 putchar('\n'); 206 putchar('\n');
181 EXIT(1); 207 EXIT(1);
182 } 208 }
183 } 209 }
184 210
185static void run_test(const PRNGtest *t)
186 {
187 unsigned char buf[8];
188 int n;
189
190 FIPS_set_prng_key(t->keys[0],t->keys[1]);
191 FIPS_test_mode(1,t->time);
192 RAND_seed(t->seed,sizeof t->seed);
193 211
194 if(RAND_bytes(buf,8) <= 0) 212static void run_test(unsigned char *key, int keylen, AES_PRNG_MCT *tv)
213 {
214 unsigned char buf[16], dt[16];
215 int i, j;
216 FIPS_rand_reset();
217 FIPS_rand_test_mode();
218 FIPS_rand_set_key(key, keylen);
219 FIPS_rand_seed(tv->V, 16);
220 memcpy(dt, tv->DT, 16);
221 for (i = 0; i < 10000; i++)
195 { 222 {
196 ERR_print_errors_fp(stderr); 223 FIPS_rand_set_dt(dt);
197 EXIT(2); 224 FIPS_rand_bytes(buf, 16);
225 /* Increment DT */
226 for (j = 15; j >= 0; j--)
227 {
228 dt[j]++;
229 if (dt[j])
230 break;
231 }
198 } 232 }
199 compare(buf,t->block1,8); 233
200 for(n=0 ; n < 99 ; ++n) 234 compare(buf,tv->R, 16);
201 if(RAND_bytes(buf,8) <= 0)
202 {
203 ERR_print_errors_fp(stderr);
204 EXIT(2);
205 }
206 compare(buf,t->block100,8);
207 FIPS_test_mode(0,NULL);
208 } 235 }
209 236
210int main() 237int main()
211 { 238 {
212 unsigned char buf[2500]; 239 run_test(aes_128_mct_key, 16, &aes_128_mct_tv);
213 int i,j,k,s,sign,nsign,err=0; 240 printf("FIPS PRNG test 1 done\n");
214 unsigned long n1; 241 run_test(aes_192_mct_key, 24, &aes_192_mct_tv);
215 unsigned long n2[16]; 242 printf("FIPS PRNG test 2 done\n");
216 unsigned long runs[2][34]; 243 run_test(aes_256_mct_key, 32, &aes_256_mct_tv);
217 /*double d; */ 244 printf("FIPS PRNG test 3 done\n");
218 long d; 245 return 0;
219
220 ERR_load_crypto_strings();
221 RAND_set_rand_method(FIPS_rand_method());
222
223 run_test(&t1);
224 run_test(&t2);
225
226 FIPS_set_prng_key(prng_key1,prng_key2);
227 RAND_seed(prng_seed,sizeof prng_seed);
228
229 i = RAND_pseudo_bytes(buf,2500);
230 if (i <= 0)
231 {
232 printf ("init failed, the rand method is not properly installed\n");
233 err++;
234 goto err;
235 }
236
237 n1=0;
238 for (i=0; i<16; i++) n2[i]=0;
239 for (i=0; i<34; i++) runs[0][i]=runs[1][i]=0;
240
241 /* test 1 and 2 */
242 sign=0;
243 nsign=0;
244 for (i=0; i<2500; i++)
245 {
246 j=buf[i];
247
248 n2[j&0x0f]++;
249 n2[(j>>4)&0x0f]++;
250
251 for (k=0; k<8; k++)
252 {
253 s=(j&0x01);
254 if (s == sign)
255 nsign++;
256 else
257 {
258 if (nsign > 34) nsign=34;
259 if (nsign != 0)
260 {
261 runs[sign][nsign-1]++;
262 if (nsign > 6)
263 runs[sign][5]++;
264 }
265 sign=s;
266 nsign=1;
267 }
268
269 if (s) n1++;
270 j>>=1;
271 }
272 }
273 if (nsign > 34) nsign=34;
274 if (nsign != 0) runs[sign][nsign-1]++;
275
276 /* test 1 */
277 if (!((9654 < n1) && (n1 < 10346)))
278 {
279 printf("test 1 failed, X=%lu\n",n1);
280 err++;
281 }
282 printf("test 1 done\n");
283
284 /* test 2 */
285#ifdef undef
286 d=0;
287 for (i=0; i<16; i++)
288 d+=n2[i]*n2[i];
289 d=d*16.0/5000.0-5000.0;
290 if (!((1.03 < d) && (d < 57.4)))
291 {
292 printf("test 2 failed, X=%.2f\n",d);
293 err++;
294 }
295#endif
296 d=0;
297 for (i=0; i<16; i++)
298 d+=n2[i]*n2[i];
299 d=(d*8)/25-500000;
300 if (!((103 < d) && (d < 5740)))
301 {
302 printf("test 2 failed, X=%ld.%02ld\n",d/100L,d%100L);
303 err++;
304 }
305 printf("test 2 done\n");
306
307 /* test 3 */
308 for (i=0; i<2; i++)
309 {
310 if (!((2267 < runs[i][0]) && (runs[i][0] < 2733)))
311 {
312 printf("test 3 failed, bit=%d run=%d num=%lu\n",
313 i,1,runs[i][0]);
314 err++;
315 }
316 if (!((1079 < runs[i][1]) && (runs[i][1] < 1421)))
317 {
318 printf("test 3 failed, bit=%d run=%d num=%lu\n",
319 i,2,runs[i][1]);
320 err++;
321 }
322 if (!(( 502 < runs[i][2]) && (runs[i][2] < 748)))
323 {
324 printf("test 3 failed, bit=%d run=%d num=%lu\n",
325 i,3,runs[i][2]);
326 err++;
327 }
328 if (!(( 223 < runs[i][3]) && (runs[i][3] < 402)))
329 {
330 printf("test 3 failed, bit=%d run=%d num=%lu\n",
331 i,4,runs[i][3]);
332 err++;
333 }
334 if (!(( 90 < runs[i][4]) && (runs[i][4] < 223)))
335 {
336 printf("test 3 failed, bit=%d run=%d num=%lu\n",
337 i,5,runs[i][4]);
338 err++;
339 }
340 if (!(( 90 < runs[i][5]) && (runs[i][5] < 223)))
341 {
342 printf("test 3 failed, bit=%d run=%d num=%lu\n",
343 i,6,runs[i][5]);
344 err++;
345 }
346 }
347 printf("test 3 done\n");
348
349 /* test 4 */
350 if (runs[0][33] != 0)
351 {
352 printf("test 4 failed, bit=%d run=%d num=%lu\n",
353 0,34,runs[0][33]);
354 err++;
355 }
356 if (runs[1][33] != 0)
357 {
358 printf("test 4 failed, bit=%d run=%d num=%lu\n",
359 1,34,runs[1][33]);
360 err++;
361 }
362 printf("test 4 done\n");
363 err:
364 err=((err)?1:0);
365 EXIT(err);
366 return(err);
367 } 246 }
368 247
369#endif 248#endif
diff --git a/src/lib/libssl/src/fips/rand/fips_rngvs.c b/src/lib/libssl/src/fips/rand/fips_rngvs.c
new file mode 100644
index 0000000000..cb904eaf0b
--- /dev/null
+++ b/src/lib/libssl/src/fips/rand/fips_rngvs.c
@@ -0,0 +1,230 @@
1/*
2 * Crude test driver for processing the VST and MCT testvector files
3 * generated by the CMVP RNGVS product.
4 *
5 * Note the input files are assumed to have a _very_ specific format
6 * as described in the NIST document "The Random Number Generator
7 * Validation System (RNGVS)", May 25, 2004.
8 *
9 */
10#include <openssl/opensslconf.h>
11
12#ifndef OPENSSL_FIPS
13#include <stdio.h>
14
15int main(int argc, char **argv)
16{
17 printf("No FIPS RNG support\n");
18 return 0;
19}
20#else
21
22#include <openssl/bn.h>
23#include <openssl/dsa.h>
24#include <openssl/fips.h>
25#include <openssl/err.h>
26#include <openssl/rand.h>
27#include <openssl/fips_rand.h>
28#include <openssl/x509v3.h>
29#include <string.h>
30#include <ctype.h>
31
32#include "fips_utl.h"
33
34void vst()
35 {
36 unsigned char *key = NULL;
37 unsigned char *v = NULL;
38 unsigned char *dt = NULL;
39 unsigned char ret[16];
40 char buf[1024];
41 char lbuf[1024];
42 char *keyword, *value;
43 long i, keylen;
44
45 keylen = 0;
46
47 while(fgets(buf,sizeof buf,stdin) != NULL)
48 {
49 fputs(buf,stdout);
50 if(!strncmp(buf,"[AES 128-Key]", 13))
51 keylen = 16;
52 else if(!strncmp(buf,"[AES 192-Key]", 13))
53 keylen = 24;
54 else if(!strncmp(buf,"[AES 256-Key]", 13))
55 keylen = 32;
56 if (!parse_line(&keyword, &value, lbuf, buf))
57 continue;
58 if(!strcmp(keyword,"Key"))
59 {
60 key=hex2bin_m(value,&i);
61 if (i != keylen)
62 {
63 fprintf(stderr, "Invalid key length, expecting %ld\n", keylen);
64 return;
65 }
66 }
67 else if(!strcmp(keyword,"DT"))
68 {
69 dt=hex2bin_m(value,&i);
70 if (i != 16)
71 {
72 fprintf(stderr, "Invalid DT length\n");
73 return;
74 }
75 }
76 else if(!strcmp(keyword,"V"))
77 {
78 v=hex2bin_m(value,&i);
79 if (i != 16)
80 {
81 fprintf(stderr, "Invalid V length\n");
82 return;
83 }
84
85 if (!key || !dt)
86 {
87 fprintf(stderr, "Missing key or DT\n");
88 return;
89 }
90
91 FIPS_rand_set_key(key, keylen);
92 FIPS_rand_seed(v,16);
93 FIPS_rand_set_dt(dt);
94 if (FIPS_rand_bytes(ret,16) <= 0)
95 {
96 fprintf(stderr, "Error getting PRNG value\n");
97 return;
98 }
99
100 pv("R",ret,16);
101 OPENSSL_free(key);
102 key = NULL;
103 OPENSSL_free(dt);
104 dt = NULL;
105 OPENSSL_free(v);
106 v = NULL;
107 }
108 }
109 }
110
111void mct()
112 {
113 unsigned char *key = NULL;
114 unsigned char *v = NULL;
115 unsigned char *dt = NULL;
116 unsigned char ret[16];
117 char buf[1024];
118 char lbuf[1024];
119 char *keyword, *value;
120 long i, keylen;
121 int j;
122
123 keylen = 0;
124
125 while(fgets(buf,sizeof buf,stdin) != NULL)
126 {
127 fputs(buf,stdout);
128 if(!strncmp(buf,"[AES 128-Key]", 13))
129 keylen = 16;
130 else if(!strncmp(buf,"[AES 192-Key]", 13))
131 keylen = 24;
132 else if(!strncmp(buf,"[AES 256-Key]", 13))
133 keylen = 32;
134 if (!parse_line(&keyword, &value, lbuf, buf))
135 continue;
136 if(!strcmp(keyword,"Key"))
137 {
138 key=hex2bin_m(value,&i);
139 if (i != keylen)
140 {
141 fprintf(stderr, "Invalid key length, expecting %ld\n", keylen);
142 return;
143 }
144 }
145 else if(!strcmp(keyword,"DT"))
146 {
147 dt=hex2bin_m(value,&i);
148 if (i != 16)
149 {
150 fprintf(stderr, "Invalid DT length\n");
151 return;
152 }
153 }
154 else if(!strcmp(keyword,"V"))
155 {
156 v=hex2bin_m(value,&i);
157 if (i != 16)
158 {
159 fprintf(stderr, "Invalid V length\n");
160 return;
161 }
162
163 if (!key || !dt)
164 {
165 fprintf(stderr, "Missing key or DT\n");
166 return;
167 }
168
169 FIPS_rand_set_key(key, keylen);
170 FIPS_rand_seed(v,16);
171 for (i = 0; i < 10000; i++)
172 {
173 FIPS_rand_set_dt(dt);
174 if (FIPS_rand_bytes(ret,16) <= 0)
175 {
176 fprintf(stderr, "Error getting PRNG value\n");
177 return;
178 }
179 /* Increment DT */
180 for (j = 15; j >= 0; j--)
181 {
182 dt[j]++;
183 if (dt[j])
184 break;
185 }
186 }
187
188 pv("R",ret,16);
189 OPENSSL_free(key);
190 key = NULL;
191 OPENSSL_free(dt);
192 dt = NULL;
193 OPENSSL_free(v);
194 v = NULL;
195 }
196 }
197 }
198
199int main(int argc,char **argv)
200 {
201 if(argc != 2)
202 {
203 fprintf(stderr,"%s [mct|vst]\n",argv[0]);
204 exit(1);
205 }
206 if(!FIPS_mode_set(1))
207 {
208 do_print_errors();
209 exit(1);
210 }
211 FIPS_rand_reset();
212 if (!FIPS_rand_test_mode())
213 {
214 fprintf(stderr, "Error setting PRNG test mode\n");
215 do_print_errors();
216 exit(1);
217 }
218 if(!strcmp(argv[1],"mct"))
219 mct();
220 else if(!strcmp(argv[1],"vst"))
221 vst();
222 else
223 {
224 fprintf(stderr,"Don't know how to %s.\n",argv[1]);
225 exit(1);
226 }
227
228 return 0;
229 }
230#endif
diff --git a/src/lib/libssl/src/fips/rsa/Makefile b/src/lib/libssl/src/fips/rsa/Makefile
index bb20f86442..da28c13aa6 100644
--- a/src/lib/libssl/src/fips/rsa/Makefile
+++ b/src/lib/libssl/src/fips/rsa/Makefile
@@ -1,5 +1,5 @@
1# 1#
2# SSLeay/fips/rsa/Makefile 2# OpenSSL/fips/rsa/Makefile
3# 3#
4 4
5DIR= rsa 5DIR= rsa
@@ -18,12 +18,14 @@ AR= ar r
18CFLAGS= $(INCLUDES) $(CFLAG) 18CFLAGS= $(INCLUDES) $(CFLAG)
19 19
20GENERAL=Makefile 20GENERAL=Makefile
21TEST= 21TEST= fips_rsavtest.c fips_rsastest.c fips_rsagtest.c
22APPS= 22APPS=
23 23
24LIB=$(TOP)/libcrypto.a 24LIB=$(TOP)/libcrypto.a
25LIBSRC=fips_rsa_eay.c fips_rsa_gen.c fips_rsa_selftest.c 25LIBSRC=fips_rsa_eay.c fips_rsa_gen.c fips_rsa_selftest.c fips_rsa_x931g.c \
26LIBOBJ=fips_rsa_eay.o fips_rsa_gen.o fips_rsa_selftest.o 26 fips_rsa_sign.c fips_rsa_lib.c
27LIBOBJ=fips_rsa_eay.o fips_rsa_gen.o fips_rsa_selftest.o fips_rsa_x931g.o \
28 fips_rsa_sign.o fips_rsa_lib.o
27 29
28SRC= $(LIBSRC) 30SRC= $(LIBSRC)
29 31
@@ -35,15 +37,10 @@ ALL= $(GENERAL) $(SRC) $(HEADER)
35top: 37top:
36 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all) 38 (cd $(TOP); $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
37 39
38all: check lib 40all: lib
39 41
40lib: $(LIBOBJ) 42lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 43 @echo $(LIBOBJ) > lib
42 $(RANLIB) $(LIB) || echo Never mind.
43 @sleep 2; touch lib
44
45check:
46 TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
47 44
48files: 45files:
49 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO 46 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -65,6 +62,24 @@ tags:
65 62
66tests: 63tests:
67 64
65Q=../testvectors/rsa/req
66A=../testvectors/rsa/rsp
67Q62=../testvectors/rsa_salt_62/req
68A62=../testvectors/rsa_salt_62/rsp
69
70fips_test:
71 -rm -rf $(A) $(A62)
72 mkdir $(A) $(A62)
73 if [ -f $(Q)/SigGen15.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsastest < $(Q)/SigGen15.req > $(A)/SigGen15.rsp; fi
74 if [ -f $(Q)/SigVer15.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsavtest < $(Q)/SigVer15.req > $(A)/SigVer15.rsp; fi
75 if [ -f $(Q)/SigGenPSS.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsastest -saltlen 0 < $(Q)/SigGenPSS.req > $(A)/SigGenPSS.rsp; fi
76 if [ -f $(Q)/SigVerPSS.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsavtest -saltlen 0 < $(Q)/SigVerPSS.req > $(A)/SigVerPSS.rsp; fi
77 if [ -f $(Q)/SigGenRSA.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsastest -x931 < $(Q)/SigGenRSA.req > $(A)/SigGenRSA.rsp; fi
78 if [ -f $(Q)/SigVerRSA.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsavtest -x931 < $(Q)/SigVerRSA.req > $(A)/SigVerRSA.rsp; fi
79 if [ -f $(Q62)/SigGenPSS.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsastest -saltlen 62 < $(Q62)/SigGenPSS.req >$(A62)/SigGenPSS.rsp; fi
80 if [ -f $(Q62)/SigVerPSS.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsavtest -saltlen 62 <$(Q62)/SigVerPSS.req >$(A62)/SigVerPSS.rsp; fi
81 if [ -f $(Q)/KeyGenRSA.req ]; then $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_rsagtest < $(Q)/KeyGenRSA.req > $(A)/KeyGenRSA.rsp; fi
82
68lint: 83lint:
69 lint -DLINT $(INCLUDES) $(SRC)>fluff 84 lint -DLINT $(INCLUDES) $(SRC)>fluff
70 85
@@ -92,20 +107,109 @@ fips_rsa_eay.o: fips_rsa_eay.c
92fips_rsa_gen.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 107fips_rsa_gen.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
93fips_rsa_gen.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h 108fips_rsa_gen.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
94fips_rsa_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 109fips_rsa_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
95fips_rsa_gen.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h 110fips_rsa_gen.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
111fips_rsa_gen.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
112fips_rsa_gen.o: ../../include/openssl/objects.h
96fips_rsa_gen.o: ../../include/openssl/opensslconf.h 113fips_rsa_gen.o: ../../include/openssl/opensslconf.h
97fips_rsa_gen.o: ../../include/openssl/opensslv.h 114fips_rsa_gen.o: ../../include/openssl/opensslv.h
98fips_rsa_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h 115fips_rsa_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
99fips_rsa_gen.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 116fips_rsa_gen.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
100fips_rsa_gen.o: ../../include/openssl/symhacks.h fips_rsa_gen.c 117fips_rsa_gen.o: ../../include/openssl/symhacks.h ../fips_locl.h fips_rsa_gen.c
118fips_rsa_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
119fips_rsa_lib.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
120fips_rsa_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
121fips_rsa_lib.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
122fips_rsa_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
123fips_rsa_lib.o: ../../include/openssl/objects.h
124fips_rsa_lib.o: ../../include/openssl/opensslconf.h
125fips_rsa_lib.o: ../../include/openssl/opensslv.h
126fips_rsa_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
127fips_rsa_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
128fips_rsa_lib.o: ../../include/openssl/symhacks.h fips_rsa_lib.c
101fips_rsa_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 129fips_rsa_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
102fips_rsa_selftest.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h 130fips_rsa_selftest.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
103fips_rsa_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 131fips_rsa_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
104fips_rsa_selftest.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h 132fips_rsa_selftest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
133fips_rsa_selftest.o: ../../include/openssl/lhash.h
134fips_rsa_selftest.o: ../../include/openssl/obj_mac.h
135fips_rsa_selftest.o: ../../include/openssl/objects.h
105fips_rsa_selftest.o: ../../include/openssl/opensslconf.h 136fips_rsa_selftest.o: ../../include/openssl/opensslconf.h
106fips_rsa_selftest.o: ../../include/openssl/opensslv.h 137fips_rsa_selftest.o: ../../include/openssl/opensslv.h
107fips_rsa_selftest.o: ../../include/openssl/ossl_typ.h 138fips_rsa_selftest.o: ../../include/openssl/ossl_typ.h
108fips_rsa_selftest.o: ../../include/openssl/rsa.h 139fips_rsa_selftest.o: ../../include/openssl/rsa.h
109fips_rsa_selftest.o: ../../include/openssl/safestack.h 140fips_rsa_selftest.o: ../../include/openssl/safestack.h
110fips_rsa_selftest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h 141fips_rsa_selftest.o: ../../include/openssl/stack.h
111fips_rsa_selftest.o: ../../include/openssl/symhacks.h fips_rsa_selftest.c 142fips_rsa_selftest.o: ../../include/openssl/symhacks.h fips_rsa_selftest.c
143fips_rsa_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
144fips_rsa_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
145fips_rsa_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h
146fips_rsa_sign.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
147fips_rsa_sign.o: ../../include/openssl/obj_mac.h
148fips_rsa_sign.o: ../../include/openssl/objects.h
149fips_rsa_sign.o: ../../include/openssl/opensslconf.h
150fips_rsa_sign.o: ../../include/openssl/opensslv.h
151fips_rsa_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
152fips_rsa_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
153fips_rsa_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
154fips_rsa_sign.o: fips_rsa_sign.c
155fips_rsa_x931g.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
156fips_rsa_x931g.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
157fips_rsa_x931g.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
158fips_rsa_x931g.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
159fips_rsa_x931g.o: ../../include/openssl/opensslconf.h
160fips_rsa_x931g.o: ../../include/openssl/opensslv.h
161fips_rsa_x931g.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
162fips_rsa_x931g.o: ../../include/openssl/safestack.h
163fips_rsa_x931g.o: ../../include/openssl/stack.h
164fips_rsa_x931g.o: ../../include/openssl/symhacks.h fips_rsa_x931g.c
165fips_rsagtest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
166fips_rsagtest.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
167fips_rsagtest.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
168fips_rsagtest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
169fips_rsagtest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
170fips_rsagtest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
171fips_rsagtest.o: ../../include/openssl/fips.h ../../include/openssl/hmac.h
172fips_rsagtest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
173fips_rsagtest.o: ../../include/openssl/objects.h
174fips_rsagtest.o: ../../include/openssl/opensslconf.h
175fips_rsagtest.o: ../../include/openssl/opensslv.h
176fips_rsagtest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
177fips_rsagtest.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
178fips_rsagtest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
179fips_rsagtest.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
180fips_rsagtest.o: ../../include/openssl/x509_vfy.h
181fips_rsagtest.o: ../../include/openssl/x509v3.h ../fips_utl.h fips_rsagtest.c
182fips_rsastest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
183fips_rsastest.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
184fips_rsastest.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
185fips_rsastest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
186fips_rsastest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
187fips_rsastest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
188fips_rsastest.o: ../../include/openssl/fips.h ../../include/openssl/hmac.h
189fips_rsastest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
190fips_rsastest.o: ../../include/openssl/objects.h
191fips_rsastest.o: ../../include/openssl/opensslconf.h
192fips_rsastest.o: ../../include/openssl/opensslv.h
193fips_rsastest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
194fips_rsastest.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
195fips_rsastest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
196fips_rsastest.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
197fips_rsastest.o: ../../include/openssl/x509_vfy.h
198fips_rsastest.o: ../../include/openssl/x509v3.h ../fips_utl.h fips_rsastest.c
199fips_rsavtest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
200fips_rsavtest.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
201fips_rsavtest.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
202fips_rsavtest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
203fips_rsavtest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
204fips_rsavtest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
205fips_rsavtest.o: ../../include/openssl/fips.h ../../include/openssl/hmac.h
206fips_rsavtest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
207fips_rsavtest.o: ../../include/openssl/objects.h
208fips_rsavtest.o: ../../include/openssl/opensslconf.h
209fips_rsavtest.o: ../../include/openssl/opensslv.h
210fips_rsavtest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
211fips_rsavtest.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
212fips_rsavtest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
213fips_rsavtest.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
214fips_rsavtest.o: ../../include/openssl/x509_vfy.h
215fips_rsavtest.o: ../../include/openssl/x509v3.h ../fips_utl.h fips_rsavtest.c
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsa_eay.c b/src/lib/libssl/src/fips/rsa/fips_rsa_eay.c
index c571e2b1bf..937a14e684 100644
--- a/src/lib/libssl/src/fips/rsa/fips_rsa_eay.c
+++ b/src/lib/libssl/src/fips/rsa/fips_rsa_eay.c
@@ -55,25 +55,78 @@
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58/* ====================================================================
59 * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 * notice, this list of conditions and the following disclaimer in
70 * the documentation and/or other materials provided with the
71 * distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 * software must display the following acknowledgment:
75 * "This product includes software developed by the OpenSSL Project
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 * endorse or promote products derived from this software without
80 * prior written permission. For written permission, please contact
81 * openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 * nor may "OpenSSL" appear in their names without prior written
85 * permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 * acknowledgment:
89 * "This product includes software developed by the OpenSSL Project
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com). This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
58 111
59#include <stdio.h> 112#include <stdio.h>
60#include <openssl/err.h>
61#include <openssl/bn.h> 113#include <openssl/bn.h>
62#include <openssl/rsa.h> 114#include <openssl/rsa.h>
63#include <openssl/rand.h> 115#include <openssl/rand.h>
116#include <openssl/err.h>
64#include <openssl/fips.h> 117#include <openssl/fips.h>
65 118
66#if !defined(RSA_NULL) && defined(OPENSSL_FIPS) 119#if !defined(RSA_NULL) && defined(OPENSSL_FIPS)
67 120
68static int RSA_eay_public_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 121static int RSA_eay_public_encrypt(int flen, const unsigned char *from,
69 unsigned char *to, RSA *rsa,int padding); 122 unsigned char *to, RSA *rsa,int padding);
70static int RSA_eay_private_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 123static int RSA_eay_private_encrypt(int flen, const unsigned char *from,
71 unsigned char *to, RSA *rsa,int padding); 124 unsigned char *to, RSA *rsa,int padding);
72static int RSA_eay_public_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 125static int RSA_eay_public_decrypt(int flen, const unsigned char *from,
73 unsigned char *to, RSA *rsa,int padding); 126 unsigned char *to, RSA *rsa,int padding);
74static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 127static int RSA_eay_private_decrypt(int flen, const unsigned char *from,
75 unsigned char *to, RSA *rsa,int padding); 128 unsigned char *to, RSA *rsa,int padding);
76static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *i, RSA *rsa); 129static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx);
77static int RSA_eay_init(RSA *rsa); 130static int RSA_eay_init(RSA *rsa);
78static int RSA_eay_finish(RSA *rsa); 131static int RSA_eay_finish(RSA *rsa);
79static RSA_METHOD rsa_pkcs1_eay_meth={ 132static RSA_METHOD rsa_pkcs1_eay_meth={
@@ -86,10 +139,11 @@ static RSA_METHOD rsa_pkcs1_eay_meth={
86 BN_mod_exp_mont, /* XXX probably we should not use Montgomery if e == 3 */ 139 BN_mod_exp_mont, /* XXX probably we should not use Montgomery if e == 3 */
87 RSA_eay_init, 140 RSA_eay_init,
88 RSA_eay_finish, 141 RSA_eay_finish,
89 0, /* flags */ 142 RSA_FLAG_FIPS_METHOD, /* flags */
90 NULL, 143 NULL,
91 0, /* rsa_sign */ 144 0, /* rsa_sign */
92 0 /* rsa_verify */ 145 0, /* rsa_verify */
146 NULL /* rsa_keygen */
93 }; 147 };
94 148
95const RSA_METHOD *RSA_PKCS1_SSLeay(void) 149const RSA_METHOD *RSA_PKCS1_SSLeay(void)
@@ -97,26 +151,65 @@ const RSA_METHOD *RSA_PKCS1_SSLeay(void)
97 return(&rsa_pkcs1_eay_meth); 151 return(&rsa_pkcs1_eay_meth);
98 } 152 }
99 153
100static int RSA_eay_public_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 154/* Usage example;
155 * MONT_HELPER(rsa, bn_ctx, p, rsa->flags & RSA_FLAG_CACHE_PRIVATE, goto err);
156 */
157#define MONT_HELPER(rsa, ctx, m, pre_cond, err_instr) \
158 if((pre_cond) && ((rsa)->_method_mod_##m == NULL) && \
159 !BN_MONT_CTX_set_locked(&((rsa)->_method_mod_##m), \
160 CRYPTO_LOCK_RSA, \
161 (rsa)->m, (ctx))) \
162 err_instr
163
164static int RSA_eay_public_encrypt(int flen, const unsigned char *from,
101 unsigned char *to, RSA *rsa, int padding) 165 unsigned char *to, RSA *rsa, int padding)
102 { 166 {
103 BIGNUM f,ret; 167 BIGNUM *f,*ret;
104 int i,j,k,num=0,r= -1; 168 int i,j,k,num=0,r= -1;
105 unsigned char *buf=NULL; 169 unsigned char *buf=NULL;
106 BN_CTX *ctx=NULL; 170 BN_CTX *ctx=NULL;
107 171
108 BN_init(&f);
109 BN_init(&ret);
110
111 if(FIPS_selftest_failed()) 172 if(FIPS_selftest_failed())
112 { 173 {
113 FIPSerr(FIPS_F_RSA_EAY_PUBLIC_ENCRYPT,FIPS_R_FIPS_SELFTEST_FAILED); 174 FIPSerr(FIPS_F_RSA_EAY_PUBLIC_ENCRYPT,FIPS_R_FIPS_SELFTEST_FAILED);
114 goto err; 175 goto err;
115 } 176 }
116 177
178 if (FIPS_mode() && (BN_num_bits(rsa->n) < OPENSSL_RSA_FIPS_MIN_MODULUS_BITS))
179 {
180 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_KEY_SIZE_TOO_SMALL);
181 return -1;
182 }
183
184 if (BN_num_bits(rsa->n) > OPENSSL_RSA_MAX_MODULUS_BITS)
185 {
186 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_MODULUS_TOO_LARGE);
187 return -1;
188 }
189
190 if (BN_ucmp(rsa->n, rsa->e) <= 0)
191 {
192 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE);
193 return -1;
194 }
195
196 /* for large moduli, enforce exponent limit */
197 if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS)
198 {
199 if (BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS)
200 {
201 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE);
202 return -1;
203 }
204 }
205
117 if ((ctx=BN_CTX_new()) == NULL) goto err; 206 if ((ctx=BN_CTX_new()) == NULL) goto err;
207 BN_CTX_start(ctx);
208 f = BN_CTX_get(ctx);
209 ret = BN_CTX_get(ctx);
118 num=BN_num_bytes(rsa->n); 210 num=BN_num_bytes(rsa->n);
119 if ((buf=(unsigned char *)OPENSSL_malloc(num)) == NULL) 211 buf = OPENSSL_malloc(num);
212 if (!f || !ret || !buf)
120 { 213 {
121 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,ERR_R_MALLOC_FAILURE); 214 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,ERR_R_MALLOC_FAILURE);
122 goto err; 215 goto err;
@@ -144,54 +237,34 @@ static int RSA_eay_public_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fro
144 } 237 }
145 if (i <= 0) goto err; 238 if (i <= 0) goto err;
146 239
147 if (BN_bin2bn(buf,num,&f) == NULL) goto err; 240 if (BN_bin2bn(buf,num,f) == NULL) goto err;
148 241
149 if (BN_ucmp(&f, rsa->n) >= 0) 242 if (BN_ucmp(f, rsa->n) >= 0)
150 { 243 {
151 /* usually the padding functions would catch this */ 244 /* usually the padding functions would catch this */
152 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS); 245 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
153 goto err; 246 goto err;
154 } 247 }
155 248
156 if ((rsa->_method_mod_n == NULL) && (rsa->flags & RSA_FLAG_CACHE_PUBLIC)) 249 MONT_HELPER(rsa, ctx, n, rsa->flags & RSA_FLAG_CACHE_PUBLIC, goto err);
157 { 250
158 BN_MONT_CTX* bn_mont_ctx; 251 if (!rsa->meth->bn_mod_exp(ret,f,rsa->e,rsa->n,ctx,
159 if ((bn_mont_ctx=BN_MONT_CTX_new()) == NULL)
160 goto err;
161 if (!BN_MONT_CTX_set(bn_mont_ctx,rsa->n,ctx))
162 {
163 BN_MONT_CTX_free(bn_mont_ctx);
164 goto err;
165 }
166 if (rsa->_method_mod_n == NULL) /* other thread may have finished first */
167 {
168 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
169 if (rsa->_method_mod_n == NULL)
170 {
171 rsa->_method_mod_n = bn_mont_ctx;
172 bn_mont_ctx = NULL;
173 }
174 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
175 }
176 if (bn_mont_ctx)
177 BN_MONT_CTX_free(bn_mont_ctx);
178 }
179
180 if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx,
181 rsa->_method_mod_n)) goto err; 252 rsa->_method_mod_n)) goto err;
182 253
183 /* put in leading 0 bytes if the number is less than the 254 /* put in leading 0 bytes if the number is less than the
184 * length of the modulus */ 255 * length of the modulus */
185 j=BN_num_bytes(&ret); 256 j=BN_num_bytes(ret);
186 i=BN_bn2bin(&ret,&(to[num-j])); 257 i=BN_bn2bin(ret,&(to[num-j]));
187 for (k=0; k<(num-i); k++) 258 for (k=0; k<(num-i); k++)
188 to[k]=0; 259 to[k]=0;
189 260
190 r=num; 261 r=num;
191err: 262err:
192 if (ctx != NULL) BN_CTX_free(ctx); 263 if (ctx != NULL)
193 BN_clear_free(&f); 264 {
194 BN_clear_free(&ret); 265 BN_CTX_end(ctx);
266 BN_CTX_free(ctx);
267 }
195 if (buf != NULL) 268 if (buf != NULL)
196 { 269 {
197 OPENSSL_cleanse(buf,num); 270 OPENSSL_cleanse(buf,num);
@@ -200,76 +273,127 @@ err:
200 return(r); 273 return(r);
201 } 274 }
202 275
203static int rsa_eay_blinding(RSA *rsa, BN_CTX *ctx) 276static BN_BLINDING *rsa_get_blinding(RSA *rsa, int *local, BN_CTX *ctx)
204 { 277{
205 int ret = 1; 278 BN_BLINDING *ret;
206 CRYPTO_w_lock(CRYPTO_LOCK_RSA); 279 int got_write_lock = 0;
207 /* Check again inside the lock - the macro's check is racey */
208 if(rsa->blinding == NULL)
209 ret = RSA_blinding_on(rsa, ctx);
210 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
211 return ret;
212 }
213 280
214#define BLINDING_HELPER(rsa, ctx, err_instr) \ 281 CRYPTO_r_lock(CRYPTO_LOCK_RSA);
215 do { \
216 if((!((rsa)->flags & RSA_FLAG_NO_BLINDING)) && \
217 ((rsa)->blinding == NULL) && \
218 !rsa_eay_blinding(rsa, ctx)) \
219 err_instr \
220 } while(0)
221 282
222static BN_BLINDING *setup_blinding(RSA *rsa, BN_CTX *ctx) 283 if (rsa->blinding == NULL)
223 { 284 {
224 BIGNUM *A, *Ai; 285 CRYPTO_r_unlock(CRYPTO_LOCK_RSA);
225 BN_BLINDING *ret = NULL; 286 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
287 got_write_lock = 1;
226 288
227 /* added in OpenSSL 0.9.6j and 0.9.7b */ 289 if (rsa->blinding == NULL)
290 rsa->blinding = RSA_setup_blinding(rsa, ctx);
291 }
228 292
229 /* NB: similar code appears in RSA_blinding_on (rsa_lib.c); 293 ret = rsa->blinding;
230 * this should be placed in a new function of its own, but for reasons 294 if (ret == NULL)
231 * of binary compatibility can't */ 295 goto err;
232 296
233 BN_CTX_start(ctx); 297 if (BN_BLINDING_get_thread_id(ret) == CRYPTO_thread_id())
234 A = BN_CTX_get(ctx);
235 if ((RAND_status() == 0) && rsa->d != NULL && rsa->d->d != NULL)
236 { 298 {
237 /* if PRNG is not properly seeded, resort to secret exponent as unpredictable seed */ 299 /* rsa->blinding is ours! */
238 RAND_add(rsa->d->d, rsa->d->dmax * sizeof rsa->d->d[0], 0); 300
239 if (!BN_pseudo_rand_range(A,rsa->n)) goto err; 301 *local = 1;
240 } 302 }
241 else 303 else
242 { 304 {
243 if (!BN_rand_range(A,rsa->n)) goto err; 305 /* resort to rsa->mt_blinding instead */
306
307 *local = 0; /* instructs rsa_blinding_convert(), rsa_blinding_invert()
308 * that the BN_BLINDING is shared, meaning that accesses
309 * require locks, and that the blinding factor must be
310 * stored outside the BN_BLINDING
311 */
312
313 if (rsa->mt_blinding == NULL)
314 {
315 if (!got_write_lock)
316 {
317 CRYPTO_r_unlock(CRYPTO_LOCK_RSA);
318 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
319 got_write_lock = 1;
320 }
321
322 if (rsa->mt_blinding == NULL)
323 rsa->mt_blinding = RSA_setup_blinding(rsa, ctx);
324 }
325 ret = rsa->mt_blinding;
244 } 326 }
245 if ((Ai=BN_mod_inverse(NULL,A,rsa->n,ctx)) == NULL) goto err;
246 327
247 if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx,rsa->_method_mod_n)) 328 err:
248 goto err; 329 if (got_write_lock)
249 ret = BN_BLINDING_new(A,Ai,rsa->n); 330 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
250 BN_free(Ai); 331 else
251err: 332 CRYPTO_r_unlock(CRYPTO_LOCK_RSA);
252 BN_CTX_end(ctx);
253 return ret; 333 return ret;
254 } 334}
335
336static int rsa_blinding_convert(BN_BLINDING *b, int local, BIGNUM *f,
337 BIGNUM *r, BN_CTX *ctx)
338{
339 if (local)
340 return BN_BLINDING_convert_ex(f, NULL, b, ctx);
341 else
342 {
343 int ret;
344 CRYPTO_r_lock(CRYPTO_LOCK_RSA_BLINDING);
345 ret = BN_BLINDING_convert_ex(f, r, b, ctx);
346 CRYPTO_r_unlock(CRYPTO_LOCK_RSA_BLINDING);
347 return ret;
348 }
349}
350
351static int rsa_blinding_invert(BN_BLINDING *b, int local, BIGNUM *f,
352 BIGNUM *r, BN_CTX *ctx)
353{
354 if (local)
355 return BN_BLINDING_invert_ex(f, NULL, b, ctx);
356 else
357 {
358 int ret;
359 CRYPTO_w_lock(CRYPTO_LOCK_RSA_BLINDING);
360 ret = BN_BLINDING_invert_ex(f, r, b, ctx);
361 CRYPTO_w_unlock(CRYPTO_LOCK_RSA_BLINDING);
362 return ret;
363 }
364}
255 365
256/* signing */ 366/* signing */
257static int RSA_eay_private_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 367static int RSA_eay_private_encrypt(int flen, const unsigned char *from,
258 unsigned char *to, RSA *rsa, int padding) 368 unsigned char *to, RSA *rsa, int padding)
259 { 369 {
260 BIGNUM f,ret; 370 BIGNUM *f, *ret, *br, *res;
261 int i,j,k,num=0,r= -1; 371 int i,j,k,num=0,r= -1;
262 unsigned char *buf=NULL; 372 unsigned char *buf=NULL;
263 BN_CTX *ctx=NULL; 373 BN_CTX *ctx=NULL;
264 int local_blinding = 0; 374 int local_blinding = 0;
265 BN_BLINDING *blinding = NULL; 375 BN_BLINDING *blinding = NULL;
266 376
267 BN_init(&f); 377 if(FIPS_selftest_failed())
268 BN_init(&ret); 378 {
379 FIPSerr(FIPS_F_RSA_EAY_PRIVATE_ENCRYPT,FIPS_R_FIPS_SELFTEST_FAILED);
380 goto err;
381 }
382
383 if (FIPS_mode() && (BN_num_bits(rsa->n) < OPENSSL_RSA_FIPS_MIN_MODULUS_BITS))
384 {
385 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, RSA_R_KEY_SIZE_TOO_SMALL);
386 return -1;
387 }
269 388
270 if ((ctx=BN_CTX_new()) == NULL) goto err; 389 if ((ctx=BN_CTX_new()) == NULL) goto err;
271 num=BN_num_bytes(rsa->n); 390 BN_CTX_start(ctx);
272 if ((buf=(unsigned char *)OPENSSL_malloc(num)) == NULL) 391 f = BN_CTX_get(ctx);
392 br = BN_CTX_get(ctx);
393 ret = BN_CTX_get(ctx);
394 num = BN_num_bytes(rsa->n);
395 buf = OPENSSL_malloc(num);
396 if(!f || !ret || !buf)
273 { 397 {
274 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE); 398 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE);
275 goto err; 399 goto err;
@@ -280,6 +404,9 @@ static int RSA_eay_private_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
280 case RSA_PKCS1_PADDING: 404 case RSA_PKCS1_PADDING:
281 i=RSA_padding_add_PKCS1_type_1(buf,num,from,flen); 405 i=RSA_padding_add_PKCS1_type_1(buf,num,from,flen);
282 break; 406 break;
407 case RSA_X931_PADDING:
408 i=RSA_padding_add_X931(buf,num,from,flen);
409 break;
283 case RSA_NO_PADDING: 410 case RSA_NO_PADDING:
284 i=RSA_padding_add_none(buf,num,from,flen); 411 i=RSA_padding_add_none(buf,num,from,flen);
285 break; 412 break;
@@ -290,26 +417,18 @@ static int RSA_eay_private_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
290 } 417 }
291 if (i <= 0) goto err; 418 if (i <= 0) goto err;
292 419
293 if (BN_bin2bn(buf,num,&f) == NULL) goto err; 420 if (BN_bin2bn(buf,num,f) == NULL) goto err;
294 421
295 if (BN_ucmp(&f, rsa->n) >= 0) 422 if (BN_ucmp(f, rsa->n) >= 0)
296 { 423 {
297 /* usually the padding functions would catch this */ 424 /* usually the padding functions would catch this */
298 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS); 425 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
299 goto err; 426 goto err;
300 } 427 }
301 428
302 BLINDING_HELPER(rsa, ctx, goto err;);
303 blinding = rsa->blinding;
304
305 /* Now unless blinding is disabled, 'blinding' is non-NULL.
306 * But the BN_BLINDING object may be owned by some other thread
307 * (we don't want to keep it constant and we don't want to use
308 * lots of locking to avoid race conditions, so only a single
309 * thread can use it; other threads have to use local blinding
310 * factors) */
311 if (!(rsa->flags & RSA_FLAG_NO_BLINDING)) 429 if (!(rsa->flags & RSA_FLAG_NO_BLINDING))
312 { 430 {
431 blinding = rsa_get_blinding(rsa, &local_blinding, ctx);
313 if (blinding == NULL) 432 if (blinding == NULL)
314 { 433 {
315 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, ERR_R_INTERNAL_ERROR); 434 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, ERR_R_INTERNAL_ERROR);
@@ -318,20 +437,8 @@ static int RSA_eay_private_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
318 } 437 }
319 438
320 if (blinding != NULL) 439 if (blinding != NULL)
321 { 440 if (!rsa_blinding_convert(blinding, local_blinding, f, br, ctx))
322 if (blinding->thread_id != CRYPTO_thread_id()) 441 goto err;
323 {
324 /* we need a local one-time blinding factor */
325
326 blinding = setup_blinding(rsa, ctx);
327 if (blinding == NULL)
328 goto err;
329 local_blinding = 1;
330 }
331 }
332
333 if (blinding)
334 if (!BN_BLINDING_convert(&f, blinding, ctx)) goto err;
335 442
336 if ( (rsa->flags & RSA_FLAG_EXT_PKEY) || 443 if ( (rsa->flags & RSA_FLAG_EXT_PKEY) ||
337 ((rsa->p != NULL) && 444 ((rsa->p != NULL) &&
@@ -339,29 +446,58 @@ static int RSA_eay_private_encrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
339 (rsa->dmp1 != NULL) && 446 (rsa->dmp1 != NULL) &&
340 (rsa->dmq1 != NULL) && 447 (rsa->dmq1 != NULL) &&
341 (rsa->iqmp != NULL)) ) 448 (rsa->iqmp != NULL)) )
342 { if (!rsa->meth->rsa_mod_exp(&ret,&f,rsa)) goto err; } 449 {
450 if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err;
451 }
343 else 452 else
344 { 453 {
345 if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->d,rsa->n,ctx,NULL)) goto err; 454 BIGNUM local_d;
455 BIGNUM *d = NULL;
456
457 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
458 {
459 BN_init(&local_d);
460 d = &local_d;
461 BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
462 }
463 else
464 d = rsa->d;
465
466 MONT_HELPER(rsa, ctx, n, rsa->flags & RSA_FLAG_CACHE_PUBLIC, goto err);
467
468 if (!rsa->meth->bn_mod_exp(ret,f,d,rsa->n,ctx,
469 rsa->_method_mod_n)) goto err;
346 } 470 }
347 471
348 if (blinding) 472 if (blinding)
349 if (!BN_BLINDING_invert(&ret, blinding, ctx)) goto err; 473 if (!rsa_blinding_invert(blinding, local_blinding, ret, br, ctx))
474 goto err;
475
476 if (padding == RSA_X931_PADDING)
477 {
478 BN_sub(f, rsa->n, ret);
479 if (BN_cmp(ret, f))
480 res = f;
481 else
482 res = ret;
483 }
484 else
485 res = ret;
350 486
351 /* put in leading 0 bytes if the number is less than the 487 /* put in leading 0 bytes if the number is less than the
352 * length of the modulus */ 488 * length of the modulus */
353 j=BN_num_bytes(&ret); 489 j=BN_num_bytes(res);
354 i=BN_bn2bin(&ret,&(to[num-j])); 490 i=BN_bn2bin(res,&(to[num-j]));
355 for (k=0; k<(num-i); k++) 491 for (k=0; k<(num-i); k++)
356 to[k]=0; 492 to[k]=0;
357 493
358 r=num; 494 r=num;
359err: 495err:
360 if (ctx != NULL) BN_CTX_free(ctx); 496 if (ctx != NULL)
361 BN_clear_free(&ret); 497 {
362 BN_clear_free(&f); 498 BN_CTX_end(ctx);
363 if (local_blinding) 499 BN_CTX_free(ctx);
364 BN_BLINDING_free(blinding); 500 }
365 if (buf != NULL) 501 if (buf != NULL)
366 { 502 {
367 OPENSSL_cleanse(buf,num); 503 OPENSSL_cleanse(buf,num);
@@ -370,10 +506,10 @@ err:
370 return(r); 506 return(r);
371 } 507 }
372 508
373static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 509static int RSA_eay_private_decrypt(int flen, const unsigned char *from,
374 unsigned char *to, RSA *rsa, int padding) 510 unsigned char *to, RSA *rsa, int padding)
375 { 511 {
376 BIGNUM f,ret; 512 BIGNUM *f, *ret, *br;
377 int j,num=0,r= -1; 513 int j,num=0,r= -1;
378 unsigned char *p; 514 unsigned char *p;
379 unsigned char *buf=NULL; 515 unsigned char *buf=NULL;
@@ -381,14 +517,26 @@ static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
381 int local_blinding = 0; 517 int local_blinding = 0;
382 BN_BLINDING *blinding = NULL; 518 BN_BLINDING *blinding = NULL;
383 519
384 BN_init(&f); 520 if(FIPS_selftest_failed())
385 BN_init(&ret); 521 {
386 ctx=BN_CTX_new(); 522 FIPSerr(FIPS_F_RSA_EAY_PRIVATE_DECRYPT,FIPS_R_FIPS_SELFTEST_FAILED);
387 if (ctx == NULL) goto err; 523 goto err;
524 }
388 525
389 num=BN_num_bytes(rsa->n); 526 if (FIPS_mode() && (BN_num_bits(rsa->n) < OPENSSL_RSA_FIPS_MIN_MODULUS_BITS))
527 {
528 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, RSA_R_KEY_SIZE_TOO_SMALL);
529 return -1;
530 }
390 531
391 if ((buf=(unsigned char *)OPENSSL_malloc(num)) == NULL) 532 if((ctx = BN_CTX_new()) == NULL) goto err;
533 BN_CTX_start(ctx);
534 f = BN_CTX_get(ctx);
535 br = BN_CTX_get(ctx);
536 ret = BN_CTX_get(ctx);
537 num = BN_num_bytes(rsa->n);
538 buf = OPENSSL_malloc(num);
539 if(!f || !ret || !buf)
392 { 540 {
393 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE); 541 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE);
394 goto err; 542 goto err;
@@ -403,25 +551,17 @@ static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
403 } 551 }
404 552
405 /* make data into a big number */ 553 /* make data into a big number */
406 if (BN_bin2bn(from,(int)flen,&f) == NULL) goto err; 554 if (BN_bin2bn(from,(int)flen,f) == NULL) goto err;
407 555
408 if (BN_ucmp(&f, rsa->n) >= 0) 556 if (BN_ucmp(f, rsa->n) >= 0)
409 { 557 {
410 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS); 558 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
411 goto err; 559 goto err;
412 } 560 }
413 561
414 BLINDING_HELPER(rsa, ctx, goto err;);
415 blinding = rsa->blinding;
416
417 /* Now unless blinding is disabled, 'blinding' is non-NULL.
418 * But the BN_BLINDING object may be owned by some other thread
419 * (we don't want to keep it constant and we don't want to use
420 * lots of locking to avoid race conditions, so only a single
421 * thread can use it; other threads have to use local blinding
422 * factors) */
423 if (!(rsa->flags & RSA_FLAG_NO_BLINDING)) 562 if (!(rsa->flags & RSA_FLAG_NO_BLINDING))
424 { 563 {
564 blinding = rsa_get_blinding(rsa, &local_blinding, ctx);
425 if (blinding == NULL) 565 if (blinding == NULL)
426 { 566 {
427 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, ERR_R_INTERNAL_ERROR); 567 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, ERR_R_INTERNAL_ERROR);
@@ -430,20 +570,8 @@ static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
430 } 570 }
431 571
432 if (blinding != NULL) 572 if (blinding != NULL)
433 { 573 if (!rsa_blinding_convert(blinding, local_blinding, f, br, ctx))
434 if (blinding->thread_id != CRYPTO_thread_id()) 574 goto err;
435 {
436 /* we need a local one-time blinding factor */
437
438 blinding = setup_blinding(rsa, ctx);
439 if (blinding == NULL)
440 goto err;
441 local_blinding = 1;
442 }
443 }
444
445 if (blinding)
446 if (!BN_BLINDING_convert(&f, blinding, ctx)) goto err;
447 575
448 /* do the decrypt */ 576 /* do the decrypt */
449 if ( (rsa->flags & RSA_FLAG_EXT_PKEY) || 577 if ( (rsa->flags & RSA_FLAG_EXT_PKEY) ||
@@ -452,18 +580,34 @@ static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
452 (rsa->dmp1 != NULL) && 580 (rsa->dmp1 != NULL) &&
453 (rsa->dmq1 != NULL) && 581 (rsa->dmq1 != NULL) &&
454 (rsa->iqmp != NULL)) ) 582 (rsa->iqmp != NULL)) )
455 { if (!rsa->meth->rsa_mod_exp(&ret,&f,rsa)) goto err; } 583 {
584 if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err;
585 }
456 else 586 else
457 { 587 {
458 if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->d,rsa->n,ctx,NULL)) 588 BIGNUM local_d;
459 goto err; 589 BIGNUM *d = NULL;
590
591 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
592 {
593 d = &local_d;
594 BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
595 }
596 else
597 d = rsa->d;
598
599 MONT_HELPER(rsa, ctx, n, rsa->flags & RSA_FLAG_CACHE_PUBLIC, goto err);
600 if (!rsa->meth->bn_mod_exp(ret,f,d,rsa->n,ctx,
601 rsa->_method_mod_n))
602 goto err;
460 } 603 }
461 604
462 if (blinding) 605 if (blinding)
463 if (!BN_BLINDING_invert(&ret, blinding, ctx)) goto err; 606 if (!rsa_blinding_invert(blinding, local_blinding, ret, br, ctx))
607 goto err;
464 608
465 p=buf; 609 p=buf;
466 j=BN_bn2bin(&ret,p); /* j is only used with no-padding mode */ 610 j=BN_bn2bin(ret,p); /* j is only used with no-padding mode */
467 611
468 switch (padding) 612 switch (padding)
469 { 613 {
@@ -489,11 +633,11 @@ static int RSA_eay_private_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fr
489 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_PADDING_CHECK_FAILED); 633 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_PADDING_CHECK_FAILED);
490 634
491err: 635err:
492 if (ctx != NULL) BN_CTX_free(ctx); 636 if (ctx != NULL)
493 BN_clear_free(&f); 637 {
494 BN_clear_free(&ret); 638 BN_CTX_end(ctx);
495 if (local_blinding) 639 BN_CTX_free(ctx);
496 BN_BLINDING_free(blinding); 640 }
497 if (buf != NULL) 641 if (buf != NULL)
498 { 642 {
499 OPENSSL_cleanse(buf,num); 643 OPENSSL_cleanse(buf,num);
@@ -503,23 +647,56 @@ err:
503 } 647 }
504 648
505/* signature verification */ 649/* signature verification */
506static int RSA_eay_public_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *from, 650static int RSA_eay_public_decrypt(int flen, const unsigned char *from,
507 unsigned char *to, RSA *rsa, int padding) 651 unsigned char *to, RSA *rsa, int padding)
508 { 652 {
509 BIGNUM f,ret; 653 BIGNUM *f,*ret;
510 int i,num=0,r= -1; 654 int i,num=0,r= -1;
511 unsigned char *p; 655 unsigned char *p;
512 unsigned char *buf=NULL; 656 unsigned char *buf=NULL;
513 BN_CTX *ctx=NULL; 657 BN_CTX *ctx=NULL;
514 658
515 BN_init(&f); 659 if(FIPS_selftest_failed())
516 BN_init(&ret); 660 {
517 ctx=BN_CTX_new(); 661 FIPSerr(FIPS_F_RSA_EAY_PUBLIC_DECRYPT,FIPS_R_FIPS_SELFTEST_FAILED);
518 if (ctx == NULL) goto err; 662 goto err;
663 }
664
665 if (FIPS_mode() && (BN_num_bits(rsa->n) < OPENSSL_RSA_FIPS_MIN_MODULUS_BITS))
666 {
667 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_KEY_SIZE_TOO_SMALL);
668 return -1;
669 }
670
671 if (BN_num_bits(rsa->n) > OPENSSL_RSA_MAX_MODULUS_BITS)
672 {
673 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_MODULUS_TOO_LARGE);
674 return -1;
675 }
676
677 if (BN_ucmp(rsa->n, rsa->e) <= 0)
678 {
679 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_BAD_E_VALUE);
680 return -1;
681 }
519 682
683 /* for large moduli, enforce exponent limit */
684 if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS)
685 {
686 if (BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS)
687 {
688 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_BAD_E_VALUE);
689 return -1;
690 }
691 }
692
693 if((ctx = BN_CTX_new()) == NULL) goto err;
694 BN_CTX_start(ctx);
695 f = BN_CTX_get(ctx);
696 ret = BN_CTX_get(ctx);
520 num=BN_num_bytes(rsa->n); 697 num=BN_num_bytes(rsa->n);
521 buf=(unsigned char *)OPENSSL_malloc(num); 698 buf = OPENSSL_malloc(num);
522 if (buf == NULL) 699 if(!f || !ret || !buf)
523 { 700 {
524 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,ERR_R_MALLOC_FAILURE); 701 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,ERR_R_MALLOC_FAILURE);
525 goto err; 702 goto err;
@@ -533,50 +710,33 @@ static int RSA_eay_public_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fro
533 goto err; 710 goto err;
534 } 711 }
535 712
536 if (BN_bin2bn(from,flen,&f) == NULL) goto err; 713 if (BN_bin2bn(from,flen,f) == NULL) goto err;
537 714
538 if (BN_ucmp(&f, rsa->n) >= 0) 715 if (BN_ucmp(f, rsa->n) >= 0)
539 { 716 {
540 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS); 717 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
541 goto err; 718 goto err;
542 } 719 }
543 720
544 /* do the decrypt */ 721 MONT_HELPER(rsa, ctx, n, rsa->flags & RSA_FLAG_CACHE_PUBLIC, goto err);
545 if ((rsa->_method_mod_n == NULL) && (rsa->flags & RSA_FLAG_CACHE_PUBLIC)) 722
546 { 723 if (!rsa->meth->bn_mod_exp(ret,f,rsa->e,rsa->n,ctx,
547 BN_MONT_CTX* bn_mont_ctx;
548 if ((bn_mont_ctx=BN_MONT_CTX_new()) == NULL)
549 goto err;
550 if (!BN_MONT_CTX_set(bn_mont_ctx,rsa->n,ctx))
551 {
552 BN_MONT_CTX_free(bn_mont_ctx);
553 goto err;
554 }
555 if (rsa->_method_mod_n == NULL) /* other thread may have finished first */
556 {
557 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
558 if (rsa->_method_mod_n == NULL)
559 {
560 rsa->_method_mod_n = bn_mont_ctx;
561 bn_mont_ctx = NULL;
562 }
563 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
564 }
565 if (bn_mont_ctx)
566 BN_MONT_CTX_free(bn_mont_ctx);
567 }
568
569 if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx,
570 rsa->_method_mod_n)) goto err; 724 rsa->_method_mod_n)) goto err;
571 725
726 if ((padding == RSA_X931_PADDING) && ((ret->d[0] & 0xf) != 12))
727 BN_sub(ret, rsa->n, ret);
728
572 p=buf; 729 p=buf;
573 i=BN_bn2bin(&ret,p); 730 i=BN_bn2bin(ret,p);
574 731
575 switch (padding) 732 switch (padding)
576 { 733 {
577 case RSA_PKCS1_PADDING: 734 case RSA_PKCS1_PADDING:
578 r=RSA_padding_check_PKCS1_type_1(to,num,buf,i,num); 735 r=RSA_padding_check_PKCS1_type_1(to,num,buf,i,num);
579 break; 736 break;
737 case RSA_X931_PADDING:
738 r=RSA_padding_check_X931(to,num,buf,i,num);
739 break;
580 case RSA_NO_PADDING: 740 case RSA_NO_PADDING:
581 r=RSA_padding_check_none(to,num,buf,i,num); 741 r=RSA_padding_check_none(to,num,buf,i,num);
582 break; 742 break;
@@ -588,9 +748,11 @@ static int RSA_eay_public_decrypt(FIPS_RSA_SIZE_T flen, const unsigned char *fro
588 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_PADDING_CHECK_FAILED); 748 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_PADDING_CHECK_FAILED);
589 749
590err: 750err:
591 if (ctx != NULL) BN_CTX_free(ctx); 751 if (ctx != NULL)
592 BN_clear_free(&f); 752 {
593 BN_clear_free(&ret); 753 BN_CTX_end(ctx);
754 BN_CTX_free(ctx);
755 }
594 if (buf != NULL) 756 if (buf != NULL)
595 { 757 {
596 OPENSSL_cleanse(buf,num); 758 OPENSSL_cleanse(buf,num);
@@ -599,84 +761,109 @@ err:
599 return(r); 761 return(r);
600 } 762 }
601 763
602static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa) 764static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
603 { 765 {
604 BIGNUM r1,m1,vrfy; 766 BIGNUM *r1,*m1,*vrfy;
767 BIGNUM local_dmp1,local_dmq1,local_c,local_r1;
768 BIGNUM *dmp1,*dmq1,*c,*pr1;
769 int bn_flags;
605 int ret=0; 770 int ret=0;
606 BN_CTX *ctx;
607 771
608 BN_init(&m1); 772 BN_CTX_start(ctx);
609 BN_init(&r1); 773 r1 = BN_CTX_get(ctx);
610 BN_init(&vrfy); 774 m1 = BN_CTX_get(ctx);
611 if ((ctx=BN_CTX_new()) == NULL) goto err; 775 vrfy = BN_CTX_get(ctx);
776
777 /* Make sure mod_inverse in montgomerey intialization use correct
778 * BN_FLG_CONSTTIME flag.
779 */
780 bn_flags = rsa->p->flags;
781 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
782 {
783 rsa->p->flags |= BN_FLG_CONSTTIME;
784 }
785 MONT_HELPER(rsa, ctx, p, rsa->flags & RSA_FLAG_CACHE_PRIVATE, goto err);
786 /* We restore bn_flags back */
787 rsa->p->flags = bn_flags;
612 788
613 if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) 789 /* Make sure mod_inverse in montgomerey intialization use correct
790 * BN_FLG_CONSTTIME flag.
791 */
792 bn_flags = rsa->q->flags;
793 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
614 { 794 {
615 if (rsa->_method_mod_p == NULL) 795 rsa->q->flags |= BN_FLG_CONSTTIME;
616 { 796 }
617 BN_MONT_CTX* bn_mont_ctx; 797 MONT_HELPER(rsa, ctx, q, rsa->flags & RSA_FLAG_CACHE_PRIVATE, goto err);
618 if ((bn_mont_ctx=BN_MONT_CTX_new()) == NULL) 798 /* We restore bn_flags back */
619 goto err; 799 rsa->q->flags = bn_flags;
620 if (!BN_MONT_CTX_set(bn_mont_ctx,rsa->p,ctx))
621 {
622 BN_MONT_CTX_free(bn_mont_ctx);
623 goto err;
624 }
625 if (rsa->_method_mod_p == NULL) /* other thread may have finished first */
626 {
627 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
628 if (rsa->_method_mod_p == NULL)
629 {
630 rsa->_method_mod_p = bn_mont_ctx;
631 bn_mont_ctx = NULL;
632 }
633 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
634 }
635 if (bn_mont_ctx)
636 BN_MONT_CTX_free(bn_mont_ctx);
637 }
638 800
639 if (rsa->_method_mod_q == NULL) 801 MONT_HELPER(rsa, ctx, n, rsa->flags & RSA_FLAG_CACHE_PUBLIC, goto err);
640 { 802
641 BN_MONT_CTX* bn_mont_ctx; 803 /* compute I mod q */
642 if ((bn_mont_ctx=BN_MONT_CTX_new()) == NULL) 804 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
643 goto err; 805 {
644 if (!BN_MONT_CTX_set(bn_mont_ctx,rsa->q,ctx)) 806 c = &local_c;
645 { 807 BN_with_flags(c, I, BN_FLG_CONSTTIME);
646 BN_MONT_CTX_free(bn_mont_ctx); 808 if (!BN_mod(r1,c,rsa->q,ctx)) goto err;
647 goto err;
648 }
649 if (rsa->_method_mod_q == NULL) /* other thread may have finished first */
650 {
651 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
652 if (rsa->_method_mod_q == NULL)
653 {
654 rsa->_method_mod_q = bn_mont_ctx;
655 bn_mont_ctx = NULL;
656 }
657 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
658 }
659 if (bn_mont_ctx)
660 BN_MONT_CTX_free(bn_mont_ctx);
661 }
662 } 809 }
663 810 else
664 if (!BN_mod(&r1,I,rsa->q,ctx)) goto err; 811 {
665 if (!rsa->meth->bn_mod_exp(&m1,&r1,rsa->dmq1,rsa->q,ctx, 812 if (!BN_mod(r1,I,rsa->q,ctx)) goto err;
813 }
814
815 /* compute r1^dmq1 mod q */
816 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
817 {
818 dmq1 = &local_dmq1;
819 BN_with_flags(dmq1, rsa->dmq1, BN_FLG_CONSTTIME);
820 }
821 else
822 dmq1 = rsa->dmq1;
823 if (!rsa->meth->bn_mod_exp(m1,r1,dmq1,rsa->q,ctx,
666 rsa->_method_mod_q)) goto err; 824 rsa->_method_mod_q)) goto err;
667 825
668 if (!BN_mod(&r1,I,rsa->p,ctx)) goto err; 826 /* compute I mod p */
669 if (!rsa->meth->bn_mod_exp(r0,&r1,rsa->dmp1,rsa->p,ctx, 827 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
828 {
829 c = &local_c;
830 BN_with_flags(c, I, BN_FLG_CONSTTIME);
831 if (!BN_mod(r1,c,rsa->p,ctx)) goto err;
832 }
833 else
834 {
835 if (!BN_mod(r1,I,rsa->p,ctx)) goto err;
836 }
837
838 /* compute r1^dmp1 mod p */
839 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
840 {
841 dmp1 = &local_dmp1;
842 BN_with_flags(dmp1, rsa->dmp1, BN_FLG_CONSTTIME);
843 }
844 else
845 dmp1 = rsa->dmp1;
846 if (!rsa->meth->bn_mod_exp(r0,r1,dmp1,rsa->p,ctx,
670 rsa->_method_mod_p)) goto err; 847 rsa->_method_mod_p)) goto err;
671 848
672 if (!BN_sub(r0,r0,&m1)) goto err; 849 if (!BN_sub(r0,r0,m1)) goto err;
673 /* This will help stop the size of r0 increasing, which does 850 /* This will help stop the size of r0 increasing, which does
674 * affect the multiply if it optimised for a power of 2 size */ 851 * affect the multiply if it optimised for a power of 2 size */
675 if (r0->neg) 852 if (BN_is_negative(r0))
676 if (!BN_add(r0,r0,rsa->p)) goto err; 853 if (!BN_add(r0,r0,rsa->p)) goto err;
677 854
678 if (!BN_mul(&r1,r0,rsa->iqmp,ctx)) goto err; 855 if (!BN_mul(r1,r0,rsa->iqmp,ctx)) goto err;
679 if (!BN_mod(r0,&r1,rsa->p,ctx)) goto err; 856
857 /* Turn BN_FLG_CONSTTIME flag on before division operation */
858 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
859 {
860 pr1 = &local_r1;
861 BN_with_flags(pr1, r1, BN_FLG_CONSTTIME);
862 }
863 else
864 pr1 = r1;
865 if (!BN_mod(r0,pr1,rsa->p,ctx)) goto err;
866
680 /* If p < q it is occasionally possible for the correction of 867 /* If p < q it is occasionally possible for the correction of
681 * adding 'p' if r0 is negative above to leave the result still 868 * adding 'p' if r0 is negative above to leave the result still
682 * negative. This can break the private key operations: the following 869 * negative. This can break the private key operations: the following
@@ -684,39 +871,51 @@ static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)
684 * This will *never* happen with OpenSSL generated keys because 871 * This will *never* happen with OpenSSL generated keys because
685 * they ensure p > q [steve] 872 * they ensure p > q [steve]
686 */ 873 */
687 if (r0->neg) 874 if (BN_is_negative(r0))
688 if (!BN_add(r0,r0,rsa->p)) goto err; 875 if (!BN_add(r0,r0,rsa->p)) goto err;
689 if (!BN_mul(&r1,r0,rsa->q,ctx)) goto err; 876 if (!BN_mul(r1,r0,rsa->q,ctx)) goto err;
690 if (!BN_add(r0,&r1,&m1)) goto err; 877 if (!BN_add(r0,r1,m1)) goto err;
691 878
692 if (rsa->e && rsa->n) 879 if (rsa->e && rsa->n)
693 { 880 {
694 if (!rsa->meth->bn_mod_exp(&vrfy,r0,rsa->e,rsa->n,ctx,NULL)) goto err; 881 if (!rsa->meth->bn_mod_exp(vrfy,r0,rsa->e,rsa->n,ctx,rsa->_method_mod_n)) goto err;
695 /* If 'I' was greater than (or equal to) rsa->n, the operation 882 /* If 'I' was greater than (or equal to) rsa->n, the operation
696 * will be equivalent to using 'I mod n'. However, the result of 883 * will be equivalent to using 'I mod n'. However, the result of
697 * the verify will *always* be less than 'n' so we don't check 884 * the verify will *always* be less than 'n' so we don't check
698 * for absolute equality, just congruency. */ 885 * for absolute equality, just congruency. */
699 if (!BN_sub(&vrfy, &vrfy, I)) goto err; 886 if (!BN_sub(vrfy, vrfy, I)) goto err;
700 if (!BN_mod(&vrfy, &vrfy, rsa->n, ctx)) goto err; 887 if (!BN_mod(vrfy, vrfy, rsa->n, ctx)) goto err;
701 if (vrfy.neg) 888 if (BN_is_negative(vrfy))
702 if (!BN_add(&vrfy, &vrfy, rsa->n)) goto err; 889 if (!BN_add(vrfy, vrfy, rsa->n)) goto err;
703 if (!BN_is_zero(&vrfy)) 890 if (!BN_is_zero(vrfy))
891 {
704 /* 'I' and 'vrfy' aren't congruent mod n. Don't leak 892 /* 'I' and 'vrfy' aren't congruent mod n. Don't leak
705 * miscalculated CRT output, just do a raw (slower) 893 * miscalculated CRT output, just do a raw (slower)
706 * mod_exp and return that instead. */ 894 * mod_exp and return that instead. */
707 if (!rsa->meth->bn_mod_exp(r0,I,rsa->d,rsa->n,ctx,NULL)) goto err; 895
896 BIGNUM local_d;
897 BIGNUM *d = NULL;
898
899 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
900 {
901 d = &local_d;
902 BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
903 }
904 else
905 d = rsa->d;
906 if (!rsa->meth->bn_mod_exp(r0,I,d,rsa->n,ctx,
907 rsa->_method_mod_n)) goto err;
908 }
708 } 909 }
709 ret=1; 910 ret=1;
710err: 911err:
711 BN_clear_free(&m1); 912 BN_CTX_end(ctx);
712 BN_clear_free(&r1);
713 BN_clear_free(&vrfy);
714 BN_CTX_free(ctx);
715 return(ret); 913 return(ret);
716 } 914 }
717 915
718static int RSA_eay_init(RSA *rsa) 916static int RSA_eay_init(RSA *rsa)
719 { 917 {
918 FIPS_selftest_check();
720 rsa->flags|=RSA_FLAG_CACHE_PUBLIC|RSA_FLAG_CACHE_PRIVATE; 919 rsa->flags|=RSA_FLAG_CACHE_PUBLIC|RSA_FLAG_CACHE_PRIVATE;
721 return(1); 920 return(1);
722 } 921 }
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsa_gen.c b/src/lib/libssl/src/fips/rsa/fips_rsa_gen.c
index 2c92112477..90aaa2f095 100644
--- a/src/lib/libssl/src/fips/rsa/fips_rsa_gen.c
+++ b/src/lib/libssl/src/fips/rsa/fips_rsa_gen.c
@@ -56,72 +56,126 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59
60/* NB: these functions have been "upgraded", the deprecated versions (which are
61 * compatibility wrappers using these functions) are in rsa_depr.c.
62 * - Geoff
63 */
64
59#include <stdio.h> 65#include <stdio.h>
60#include <string.h>
61#include <time.h> 66#include <time.h>
62#include <openssl/err.h> 67#include <string.h>
68#include <openssl/crypto.h>
63#include <openssl/bn.h> 69#include <openssl/bn.h>
64#include <openssl/rsa.h> 70#include <openssl/rsa.h>
71#include <openssl/err.h>
72#include <openssl/evp.h>
65#include <openssl/fips.h> 73#include <openssl/fips.h>
74#include "fips_locl.h"
66 75
67#ifdef OPENSSL_FIPS 76#ifdef OPENSSL_FIPS
68 77
69static int fips_check_rsa(RSA *rsa) 78static int fips_rsa_pairwise_fail = 0;
70 { 79
71 int n; 80void FIPS_corrupt_rsa_keygen(void)
72 unsigned char ctext[256];
73 unsigned char ptext[256];
74 /* The longest we can have with OAEP padding and a 512 bit key */
75 static unsigned char original_ptext[] =
76 "\x01\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0"
77 "\x23\x45\x67\x89\xab\xcd";
78
79 /* this will fail for keys shorter than 512 bits */
80 n=RSA_public_encrypt(sizeof(original_ptext)-1,original_ptext,ctext,rsa,
81 RSA_PKCS1_OAEP_PADDING);
82 if(n < 0)
83 { 81 {
84 ERR_print_errors_fp(stderr); 82 fips_rsa_pairwise_fail = 1;
85 exit(1);
86 } 83 }
87 if(!memcmp(ctext,original_ptext,n)) 84
88 { 85int fips_check_rsa(RSA *rsa)
89 FIPSerr(FIPS_F_FIPS_CHECK_RSA,FIPS_R_PAIRWISE_TEST_FAILED);
90 return 0;
91 }
92 n=RSA_private_decrypt(n,ctext,ptext,rsa,RSA_PKCS1_OAEP_PADDING);
93 if(n < 0)
94 { 86 {
95 ERR_print_errors_fp(stderr); 87 const unsigned char tbs[] = "RSA Pairwise Check Data";
96 exit(1); 88 unsigned char *ctbuf = NULL, *ptbuf = NULL;
89 int len, ret = 0;
90 EVP_PKEY pk;
91 pk.type = EVP_PKEY_RSA;
92 pk.pkey.rsa = rsa;
93
94 /* Perform pairwise consistency signature test */
95 if (!fips_pkey_signature_test(&pk, tbs, -1,
96 NULL, 0, EVP_sha1(), EVP_MD_CTX_FLAG_PAD_PKCS1, NULL)
97 || !fips_pkey_signature_test(&pk, tbs, -1,
98 NULL, 0, EVP_sha1(), EVP_MD_CTX_FLAG_PAD_X931, NULL)
99 || !fips_pkey_signature_test(&pk, tbs, -1,
100 NULL, 0, EVP_sha1(), EVP_MD_CTX_FLAG_PAD_PSS, NULL))
101 goto err;
102 /* Now perform pairwise consistency encrypt/decrypt test */
103 ctbuf = OPENSSL_malloc(RSA_size(rsa));
104 if (!ctbuf)
105 goto err;
106
107 len = RSA_public_encrypt(sizeof(tbs) - 1, tbs, ctbuf, rsa, RSA_PKCS1_PADDING);
108 if (len <= 0)
109 goto err;
110 /* Check ciphertext doesn't match plaintext */
111 if ((len == (sizeof(tbs) - 1)) && !memcmp(tbs, ctbuf, len))
112 goto err;
113 ptbuf = OPENSSL_malloc(RSA_size(rsa));
114
115 if (!ptbuf)
116 goto err;
117 len = RSA_private_decrypt(len, ctbuf, ptbuf, rsa, RSA_PKCS1_PADDING);
118 if (len != (sizeof(tbs) - 1))
119 goto err;
120 if (memcmp(ptbuf, tbs, len))
121 goto err;
122
123 ret = 1;
124
125 if (!ptbuf)
126 goto err;
127
128 err:
129 if (ret == 0)
130 {
131 fips_set_selftest_fail();
132 FIPSerr(FIPS_F_FIPS_CHECK_RSA,FIPS_R_PAIRWISE_TEST_FAILED);
133 }
134
135 if (ctbuf)
136 OPENSSL_free(ctbuf);
137 if (ptbuf)
138 OPENSSL_free(ptbuf);
139
140 return ret;
97 } 141 }
98 if(n != sizeof(original_ptext)-1 || memcmp(ptext,original_ptext,n)) 142
143static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb);
144
145/* NB: this wrapper would normally be placed in rsa_lib.c and the static
146 * implementation would probably be in rsa_eay.c. Nonetheless, is kept here so
147 * that we don't introduce a new linker dependency. Eg. any application that
148 * wasn't previously linking object code related to key-generation won't have to
149 * now just because key-generation is part of RSA_METHOD. */
150int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb)
99 { 151 {
100 FIPSerr(FIPS_F_FIPS_CHECK_RSA,FIPS_R_PAIRWISE_TEST_FAILED); 152 if(rsa->meth->rsa_keygen)
101 return 0; 153 return rsa->meth->rsa_keygen(rsa, bits, e_value, cb);
154 return rsa_builtin_keygen(rsa, bits, e_value, cb);
102 } 155 }
103 156
104 return 1; 157static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb)
105 }
106
107RSA *RSA_generate_key(FIPS_RSA_SIZE_T bits, unsigned long e_value,
108 void (*callback)(int,int,void *), void *cb_arg)
109 { 158 {
110 RSA *rsa=NULL;
111 BIGNUM *r0=NULL,*r1=NULL,*r2=NULL,*r3=NULL,*tmp; 159 BIGNUM *r0=NULL,*r1=NULL,*r2=NULL,*r3=NULL,*tmp;
112 int bitsp,bitsq,ok= -1,n=0,i; 160 BIGNUM local_r0,local_d,local_p;
113 BN_CTX *ctx=NULL,*ctx2=NULL; 161 BIGNUM *pr0,*d,*p;
162 int bitsp,bitsq,ok= -1,n=0;
163 BN_CTX *ctx=NULL;
114 164
115 if(FIPS_selftest_failed()) 165 if(FIPS_selftest_failed())
116 { 166 {
117 FIPSerr(FIPS_F_RSA_GENERATE_KEY,FIPS_R_FIPS_SELFTEST_FAILED); 167 FIPSerr(FIPS_F_RSA_BUILTIN_KEYGEN,FIPS_R_FIPS_SELFTEST_FAILED);
118 return NULL; 168 return 0;
169 }
170
171 if (FIPS_mode() && (bits < OPENSSL_RSA_FIPS_MIN_MODULUS_BITS))
172 {
173 FIPSerr(FIPS_F_RSA_BUILTIN_KEYGEN,FIPS_R_KEY_TOO_SHORT);
174 return 0;
119 } 175 }
120 176
121 ctx=BN_CTX_new(); 177 ctx=BN_CTX_new();
122 if (ctx == NULL) goto err; 178 if (ctx == NULL) goto err;
123 ctx2=BN_CTX_new();
124 if (ctx2 == NULL) goto err;
125 BN_CTX_start(ctx); 179 BN_CTX_start(ctx);
126 r0 = BN_CTX_get(ctx); 180 r0 = BN_CTX_get(ctx);
127 r1 = BN_CTX_get(ctx); 181 r1 = BN_CTX_get(ctx);
@@ -131,49 +185,58 @@ RSA *RSA_generate_key(FIPS_RSA_SIZE_T bits, unsigned long e_value,
131 185
132 bitsp=(bits+1)/2; 186 bitsp=(bits+1)/2;
133 bitsq=bits-bitsp; 187 bitsq=bits-bitsp;
134 rsa=RSA_new();
135 if (rsa == NULL) goto err;
136 188
137 /* set e */ 189 /* We need the RSA components non-NULL */
138 rsa->e=BN_new(); 190 if(!rsa->n && ((rsa->n=BN_new()) == NULL)) goto err;
139 if (rsa->e == NULL) goto err; 191 if(!rsa->d && ((rsa->d=BN_new()) == NULL)) goto err;
192 if(!rsa->e && ((rsa->e=BN_new()) == NULL)) goto err;
193 if(!rsa->p && ((rsa->p=BN_new()) == NULL)) goto err;
194 if(!rsa->q && ((rsa->q=BN_new()) == NULL)) goto err;
195 if(!rsa->dmp1 && ((rsa->dmp1=BN_new()) == NULL)) goto err;
196 if(!rsa->dmq1 && ((rsa->dmq1=BN_new()) == NULL)) goto err;
197 if(!rsa->iqmp && ((rsa->iqmp=BN_new()) == NULL)) goto err;
140 198
141#if 1 199 BN_copy(rsa->e, e_value);
142 /* The problem is when building with 8, 16, or 32 BN_ULONG,
143 * unsigned long can be larger */
144 for (i=0; i<sizeof(unsigned long)*8; i++)
145 {
146 if (e_value & (1UL<<i))
147 BN_set_bit(rsa->e,i);
148 }
149#else
150 if (!BN_set_word(rsa->e,e_value)) goto err;
151#endif
152 200
153 /* generate p and q */ 201 /* generate p and q */
154 for (;;) 202 for (;;)
155 { 203 {
156 rsa->p=BN_generate_prime(NULL,bitsp,0,NULL,NULL,callback,cb_arg); 204 if(!BN_generate_prime_ex(rsa->p, bitsp, 0, NULL, NULL, cb))
157 if (rsa->p == NULL) goto err; 205 goto err;
158 if (!BN_sub(r2,rsa->p,BN_value_one())) goto err; 206 if (!BN_sub(r2,rsa->p,BN_value_one())) goto err;
159 if (!BN_gcd(r1,r2,rsa->e,ctx)) goto err; 207 if (!BN_gcd(r1,r2,rsa->e,ctx)) goto err;
160 if (BN_is_one(r1)) break; 208 if (BN_is_one(r1)) break;
161 if (callback != NULL) callback(2,n++,cb_arg); 209 if(!BN_GENCB_call(cb, 2, n++))
162 BN_free(rsa->p); 210 goto err;
163 } 211 }
164 if (callback != NULL) callback(3,0,cb_arg); 212 if(!BN_GENCB_call(cb, 3, 0))
213 goto err;
165 for (;;) 214 for (;;)
166 { 215 {
167 rsa->q=BN_generate_prime(NULL,bitsq,0,NULL,NULL,callback,cb_arg); 216 /* When generating ridiculously small keys, we can get stuck
168 if (rsa->q == NULL) goto err; 217 * continually regenerating the same prime values. Check for
218 * this and bail if it happens 3 times. */
219 unsigned int degenerate = 0;
220 do
221 {
222 if(!BN_generate_prime_ex(rsa->q, bitsq, 0, NULL, NULL, cb))
223 goto err;
224 } while((BN_cmp(rsa->p, rsa->q) == 0) && (++degenerate < 3));
225 if(degenerate == 3)
226 {
227 ok = 0; /* we set our own err */
228 RSAerr(RSA_F_RSA_BUILTIN_KEYGEN,RSA_R_KEY_SIZE_TOO_SMALL);
229 goto err;
230 }
169 if (!BN_sub(r2,rsa->q,BN_value_one())) goto err; 231 if (!BN_sub(r2,rsa->q,BN_value_one())) goto err;
170 if (!BN_gcd(r1,r2,rsa->e,ctx)) goto err; 232 if (!BN_gcd(r1,r2,rsa->e,ctx)) goto err;
171 if (BN_is_one(r1) && (BN_cmp(rsa->p,rsa->q) != 0)) 233 if (BN_is_one(r1))
172 break; 234 break;
173 if (callback != NULL) callback(2,n++,cb_arg); 235 if(!BN_GENCB_call(cb, 2, n++))
174 BN_free(rsa->q); 236 goto err;
175 } 237 }
176 if (callback != NULL) callback(3,1,cb_arg); 238 if(!BN_GENCB_call(cb, 3, 1))
239 goto err;
177 if (BN_cmp(rsa->p,rsa->q) < 0) 240 if (BN_cmp(rsa->p,rsa->q) < 0)
178 { 241 {
179 tmp=rsa->p; 242 tmp=rsa->p;
@@ -182,46 +245,48 @@ RSA *RSA_generate_key(FIPS_RSA_SIZE_T bits, unsigned long e_value,
182 } 245 }
183 246
184 /* calculate n */ 247 /* calculate n */
185 rsa->n=BN_new();
186 if (rsa->n == NULL) goto err;
187 if (!BN_mul(rsa->n,rsa->p,rsa->q,ctx)) goto err; 248 if (!BN_mul(rsa->n,rsa->p,rsa->q,ctx)) goto err;
188 249
189 /* calculate d */ 250 /* calculate d */
190 if (!BN_sub(r1,rsa->p,BN_value_one())) goto err; /* p-1 */ 251 if (!BN_sub(r1,rsa->p,BN_value_one())) goto err; /* p-1 */
191 if (!BN_sub(r2,rsa->q,BN_value_one())) goto err; /* q-1 */ 252 if (!BN_sub(r2,rsa->q,BN_value_one())) goto err; /* q-1 */
192 if (!BN_mul(r0,r1,r2,ctx)) goto err; /* (p-1)(q-1) */ 253 if (!BN_mul(r0,r1,r2,ctx)) goto err; /* (p-1)(q-1) */
193 254 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
194/* should not be needed, since gcd(p-1,e) == 1 and gcd(q-1,e) == 1 */
195/* for (;;)
196 { 255 {
197 if (!BN_gcd(r3,r0,rsa->e,ctx)) goto err; 256 pr0 = &local_r0;
198 if (BN_is_one(r3)) break; 257 BN_with_flags(pr0, r0, BN_FLG_CONSTTIME);
258 }
259 else
260 pr0 = r0;
261 if (!BN_mod_inverse(rsa->d,rsa->e,pr0,ctx)) goto err; /* d */
199 262
200 if (1) 263 /* set up d for correct BN_FLG_CONSTTIME flag */
201 { 264 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
202 if (!BN_add_word(rsa->e,2L)) goto err; 265 {
203 continue; 266 d = &local_d;
204 } 267 BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
205 RSAerr(RSA_F_RSA_GENERATE_KEY,RSA_R_BAD_E_VALUE);
206 goto err;
207 } 268 }
208*/ 269 else
209 rsa->d=BN_mod_inverse(NULL,rsa->e,r0,ctx2); /* d */ 270 d = rsa->d;
210 if (rsa->d == NULL) goto err;
211 271
212 /* calculate d mod (p-1) */ 272 /* calculate d mod (p-1) */
213 rsa->dmp1=BN_new(); 273 if (!BN_mod(rsa->dmp1,d,r1,ctx)) goto err;
214 if (rsa->dmp1 == NULL) goto err;
215 if (!BN_mod(rsa->dmp1,rsa->d,r1,ctx)) goto err;
216 274
217 /* calculate d mod (q-1) */ 275 /* calculate d mod (q-1) */
218 rsa->dmq1=BN_new(); 276 if (!BN_mod(rsa->dmq1,d,r2,ctx)) goto err;
219 if (rsa->dmq1 == NULL) goto err;
220 if (!BN_mod(rsa->dmq1,rsa->d,r2,ctx)) goto err;
221 277
222 /* calculate inverse of q mod p */ 278 /* calculate inverse of q mod p */
223 rsa->iqmp=BN_mod_inverse(NULL,rsa->q,rsa->p,ctx2); 279 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
224 if (rsa->iqmp == NULL) goto err; 280 {
281 p = &local_p;
282 BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
283 }
284 else
285 p = rsa->p;
286 if (!BN_mod_inverse(rsa->iqmp,rsa->q,p,ctx)) goto err;
287
288 if (fips_rsa_pairwise_fail)
289 BN_add_word(rsa->n, 1);
225 290
226 if(!fips_check_rsa(rsa)) 291 if(!fips_check_rsa(rsa))
227 goto err; 292 goto err;
@@ -230,20 +295,16 @@ RSA *RSA_generate_key(FIPS_RSA_SIZE_T bits, unsigned long e_value,
230err: 295err:
231 if (ok == -1) 296 if (ok == -1)
232 { 297 {
233 RSAerr(RSA_F_RSA_GENERATE_KEY,ERR_LIB_BN); 298 RSAerr(RSA_F_RSA_BUILTIN_KEYGEN,ERR_LIB_BN);
234 ok=0; 299 ok=0;
235 } 300 }
236 BN_CTX_end(ctx); 301 if (ctx != NULL)
237 BN_CTX_free(ctx);
238 BN_CTX_free(ctx2);
239
240 if (!ok)
241 { 302 {
242 if (rsa != NULL) RSA_free(rsa); 303 BN_CTX_end(ctx);
243 return(NULL); 304 BN_CTX_free(ctx);
244 } 305 }
245 else 306
246 return(rsa); 307 return ok;
247 } 308 }
248 309
249#endif 310#endif
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsa_lib.c b/src/lib/libssl/src/fips/rsa/fips_rsa_lib.c
new file mode 100644
index 0000000000..a37ad3e540
--- /dev/null
+++ b/src/lib/libssl/src/fips/rsa/fips_rsa_lib.c
@@ -0,0 +1,101 @@
1/* fips_rsa_sign.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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 <string.h>
60#include <openssl/evp.h>
61#include <openssl/rsa.h>
62#include <openssl/bn.h>
63#include <openssl/err.h>
64
65/* Minimal FIPS versions of FIPS_rsa_new() and FIPS_rsa_free: to
66 * reduce external dependencies.
67 */
68
69RSA *FIPS_rsa_new(void)
70 {
71 RSA *ret;
72 ret = OPENSSL_malloc(sizeof(RSA));
73 if (!ret)
74 return NULL;
75 memset(ret, 0, sizeof(RSA));
76 ret->meth = RSA_PKCS1_SSLeay();
77 if (ret->meth->init)
78 ret->meth->init(ret);
79 return ret;
80 }
81
82void FIPS_rsa_free(RSA *r)
83 {
84 if (!r)
85 return;
86 if (r->meth->finish)
87 r->meth->finish(r);
88 if (r->n != NULL) BN_clear_free(r->n);
89 if (r->e != NULL) BN_clear_free(r->e);
90 if (r->d != NULL) BN_clear_free(r->d);
91 if (r->p != NULL) BN_clear_free(r->p);
92 if (r->q != NULL) BN_clear_free(r->q);
93 if (r->dmp1 != NULL) BN_clear_free(r->dmp1);
94 if (r->dmq1 != NULL) BN_clear_free(r->dmq1);
95 if (r->iqmp != NULL) BN_clear_free(r->iqmp);
96 if (r->blinding != NULL) BN_BLINDING_free(r->blinding);
97 if (r->mt_blinding != NULL) BN_BLINDING_free(r->mt_blinding);
98 if (r->bignum_data != NULL) OPENSSL_free_locked(r->bignum_data);
99 OPENSSL_free(r);
100 }
101
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsa_selftest.c b/src/lib/libssl/src/fips/rsa/fips_rsa_selftest.c
index 4e3b9445fc..bead61f572 100644
--- a/src/lib/libssl/src/fips/rsa/fips_rsa_selftest.c
+++ b/src/lib/libssl/src/fips/rsa/fips_rsa_selftest.c
@@ -1,5 +1,5 @@
1/* ==================================================================== 1/* ====================================================================
2 * Copyright (c) 2003 The OpenSSL Project. All rights reserved. 2 * Copyright (c) 2003-2007 The OpenSSL Project. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
@@ -51,21 +51,11 @@
51#include <openssl/err.h> 51#include <openssl/err.h>
52#include <openssl/fips.h> 52#include <openssl/fips.h>
53#include <openssl/rsa.h> 53#include <openssl/rsa.h>
54#include <openssl/sha.h> 54#include <openssl/evp.h>
55#include <openssl/bn.h>
55#include <openssl/opensslconf.h> 56#include <openssl/opensslconf.h>
56 57
57#ifdef OPENSSL_FIPS 58#ifdef OPENSSL_FIPS
58#define SetKey \
59 key->n = BN_bin2bn(n, sizeof(n)-1, key->n); \
60 key->e = BN_bin2bn(e, sizeof(e)-1, key->e); \
61 key->d = BN_bin2bn(d, sizeof(d)-1, key->d); \
62 key->p = BN_bin2bn(p, sizeof(p)-1, key->p); \
63 key->q = BN_bin2bn(q, sizeof(q)-1, key->q); \
64 key->dmp1 = BN_bin2bn(dmp1, sizeof(dmp1)-1, key->dmp1); \
65 key->dmq1 = BN_bin2bn(dmq1, sizeof(dmq1)-1, key->dmq1); \
66 key->iqmp = BN_bin2bn(iqmp, sizeof(iqmp)-1, key->iqmp); \
67 memcpy(c, ctext_ex, sizeof(ctext_ex) - 1); \
68 return (sizeof(ctext_ex) - 1);
69 59
70static unsigned char n[] = 60static unsigned char n[] =
71"\x00\xBB\xF8\x2F\x09\x06\x82\xCE\x9C\x23\x38\xAC\x2B\x9D\xA8\x71" 61"\x00\xBB\xF8\x2F\x09\x06\x82\xCE\x9C\x23\x38\xAC\x2B\x9D\xA8\x71"
@@ -79,11 +69,11 @@ static unsigned char n[] =
79"\xCB"; 69"\xCB";
80 70
81 71
82static int setrsakey(RSA *key, unsigned char *c) 72static int setrsakey(RSA *key)
83 { 73 {
84 static unsigned char e[] = "\x11"; 74 static const unsigned char e[] = "\x11";
85 75
86 static unsigned char d[] = 76 static const unsigned char d[] =
87"\x00\xA5\xDA\xFC\x53\x41\xFA\xF2\x89\xC4\xB9\x88\xDB\x30\xC1\xCD" 77"\x00\xA5\xDA\xFC\x53\x41\xFA\xF2\x89\xC4\xB9\x88\xDB\x30\xC1\xCD"
88"\xF8\x3F\x31\x25\x1E\x06\x68\xB4\x27\x84\x81\x38\x01\x57\x96\x41" 78"\xF8\x3F\x31\x25\x1E\x06\x68\xB4\x27\x84\x81\x38\x01\x57\x96\x41"
89"\xB2\x94\x10\xB3\xC7\x99\x8D\x6B\xC4\x65\x74\x5E\x5C\x39\x26\x69" 79"\xB2\x94\x10\xB3\xC7\x99\x8D\x6B\xC4\x65\x74\x5E\x5C\x39\x26\x69"
@@ -94,50 +84,48 @@ static int setrsakey(RSA *key, unsigned char *c)
94"\xAF\x94\x28\xC2\xB7\xB8\x88\x3F\xE4\x46\x3A\x4B\xC8\x5B\x1C\xB3" 84"\xAF\x94\x28\xC2\xB7\xB8\x88\x3F\xE4\x46\x3A\x4B\xC8\x5B\x1C\xB3"
95"\xC1"; 85"\xC1";
96 86
97 static unsigned char p[] = 87 static const unsigned char p[] =
98"\x00\xEE\xCF\xAE\x81\xB1\xB9\xB3\xC9\x08\x81\x0B\x10\xA1\xB5\x60" 88"\x00\xEE\xCF\xAE\x81\xB1\xB9\xB3\xC9\x08\x81\x0B\x10\xA1\xB5\x60"
99"\x01\x99\xEB\x9F\x44\xAE\xF4\xFD\xA4\x93\xB8\x1A\x9E\x3D\x84\xF6" 89"\x01\x99\xEB\x9F\x44\xAE\xF4\xFD\xA4\x93\xB8\x1A\x9E\x3D\x84\xF6"
100"\x32\x12\x4E\xF0\x23\x6E\x5D\x1E\x3B\x7E\x28\xFA\xE7\xAA\x04\x0A" 90"\x32\x12\x4E\xF0\x23\x6E\x5D\x1E\x3B\x7E\x28\xFA\xE7\xAA\x04\x0A"
101"\x2D\x5B\x25\x21\x76\x45\x9D\x1F\x39\x75\x41\xBA\x2A\x58\xFB\x65" 91"\x2D\x5B\x25\x21\x76\x45\x9D\x1F\x39\x75\x41\xBA\x2A\x58\xFB\x65"
102"\x99"; 92"\x99";
103 93
104 static unsigned char q[] = 94 static const unsigned char q[] =
105"\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9" 95"\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9"
106"\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D" 96"\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D"
107"\x86\x98\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5" 97"\x86\x98\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5"
108"\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x15" 98"\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x15"
109"\x03"; 99"\x03";
110 100
111 static unsigned char dmp1[] = 101 static const unsigned char dmp1[] =
112"\x54\x49\x4C\xA6\x3E\xBA\x03\x37\xE4\xE2\x40\x23\xFC\xD6\x9A\x5A" 102"\x54\x49\x4C\xA6\x3E\xBA\x03\x37\xE4\xE2\x40\x23\xFC\xD6\x9A\x5A"
113"\xEB\x07\xDD\xDC\x01\x83\xA4\xD0\xAC\x9B\x54\xB0\x51\xF2\xB1\x3E" 103"\xEB\x07\xDD\xDC\x01\x83\xA4\xD0\xAC\x9B\x54\xB0\x51\xF2\xB1\x3E"
114"\xD9\x49\x09\x75\xEA\xB7\x74\x14\xFF\x59\xC1\xF7\x69\x2E\x9A\x2E" 104"\xD9\x49\x09\x75\xEA\xB7\x74\x14\xFF\x59\xC1\xF7\x69\x2E\x9A\x2E"
115"\x20\x2B\x38\xFC\x91\x0A\x47\x41\x74\xAD\xC9\x3C\x1F\x67\xC9\x81"; 105"\x20\x2B\x38\xFC\x91\x0A\x47\x41\x74\xAD\xC9\x3C\x1F\x67\xC9\x81";
116 106
117 static unsigned char dmq1[] = 107 static const unsigned char dmq1[] =
118"\x47\x1E\x02\x90\xFF\x0A\xF0\x75\x03\x51\xB7\xF8\x78\x86\x4C\xA9" 108"\x47\x1E\x02\x90\xFF\x0A\xF0\x75\x03\x51\xB7\xF8\x78\x86\x4C\xA9"
119"\x61\xAD\xBD\x3A\x8A\x7E\x99\x1C\x5C\x05\x56\xA9\x4C\x31\x46\xA7" 109"\x61\xAD\xBD\x3A\x8A\x7E\x99\x1C\x5C\x05\x56\xA9\x4C\x31\x46\xA7"
120"\xF9\x80\x3F\x8F\x6F\x8A\xE3\x42\xE9\x31\xFD\x8A\xE4\x7A\x22\x0D" 110"\xF9\x80\x3F\x8F\x6F\x8A\xE3\x42\xE9\x31\xFD\x8A\xE4\x7A\x22\x0D"
121"\x1B\x99\xA4\x95\x84\x98\x07\xFE\x39\xF9\x24\x5A\x98\x36\xDA\x3D"; 111"\x1B\x99\xA4\x95\x84\x98\x07\xFE\x39\xF9\x24\x5A\x98\x36\xDA\x3D";
122 112
123 static unsigned char iqmp[] = 113 static const unsigned char iqmp[] =
124"\x00\xB0\x6C\x4F\xDA\xBB\x63\x01\x19\x8D\x26\x5B\xDB\xAE\x94\x23" 114"\x00\xB0\x6C\x4F\xDA\xBB\x63\x01\x19\x8D\x26\x5B\xDB\xAE\x94\x23"
125"\xB3\x80\xF2\x71\xF7\x34\x53\x88\x50\x93\x07\x7F\xCD\x39\xE2\x11" 115"\xB3\x80\xF2\x71\xF7\x34\x53\x88\x50\x93\x07\x7F\xCD\x39\xE2\x11"
126"\x9F\xC9\x86\x32\x15\x4F\x58\x83\xB1\x67\xA9\x67\xBF\x40\x2B\x4E" 116"\x9F\xC9\x86\x32\x15\x4F\x58\x83\xB1\x67\xA9\x67\xBF\x40\x2B\x4E"
127"\x9E\x2E\x0F\x96\x56\xE6\x98\xEA\x36\x66\xED\xFB\x25\x79\x80\x39" 117"\x9E\x2E\x0F\x96\x56\xE6\x98\xEA\x36\x66\xED\xFB\x25\x79\x80\x39"
128"\xF7"; 118"\xF7";
129 119
130 static unsigned char ctext_ex[] = 120 key->n = BN_bin2bn(n, sizeof(n)-1, key->n);
131"\x42\x4b\xc9\x51\x61\xd4\xca\xa0\x18\x6c\x4d\xca\x61\x8f\x2d\x07" 121 key->e = BN_bin2bn(e, sizeof(e)-1, key->e);
132"\x8c\x63\xc5\x6b\xa2\x4c\x32\xb1\xda\xb7\xdd\x32\xb6\x51\x68\xc3" 122 key->d = BN_bin2bn(d, sizeof(d)-1, key->d);
133"\x6e\x98\x46\xd6\xbb\x1a\xd5\x99\x05\x92\x7c\xd7\xbc\x08\x9e\xe4" 123 key->p = BN_bin2bn(p, sizeof(p)-1, key->p);
134"\xc3\x70\x4d\xe6\x99\x7e\x61\x31\x07\x7a\x19\xdb\x3e\x11\xfa\x3d" 124 key->q = BN_bin2bn(q, sizeof(q)-1, key->q);
135"\x7c\x61\xd7\x78\x14\x3f\x05\x16\xa0\xc4\xbf\xcd\xee\xca\x67\x4c" 125 key->dmp1 = BN_bin2bn(dmp1, sizeof(dmp1)-1, key->dmp1);
136"\x80\x4e\xca\x43\x2f\x35\x43\x58\xa7\x50\x7e\x3e\x52\x82\xab\xac" 126 key->dmq1 = BN_bin2bn(dmq1, sizeof(dmq1)-1, key->dmq1);
137"\xa6\x50\xe8\x39\x9f\xe0\x7f\x58\x1d\x1b\x90\x93\x04\xec\xb3\xf9" 127 key->iqmp = BN_bin2bn(iqmp, sizeof(iqmp)-1, key->iqmp);
138"\x24\xd3\x75\x3e\x39\xd1\x14\xc6\x33\xce\xd6\xee\x20\x47\xec\xe4"; 128 return 1;
139
140 SetKey;
141 } 129 }
142 130
143void FIPS_corrupt_rsa() 131void FIPS_corrupt_rsa()
@@ -145,107 +133,300 @@ void FIPS_corrupt_rsa()
145 n[0]++; 133 n[0]++;
146 } 134 }
147 135
136/* Known Answer Test (KAT) data for the above RSA private key signing
137 * kat_tbs.
138 */
139
140static const unsigned char kat_tbs[] = "OpenSSL FIPS 140-2 Public Key RSA KAT";
141
142static const unsigned char kat_RSA_PSS_SHA1[] = {
143 0x2D, 0xAF, 0x6E, 0xC2, 0x98, 0xFB, 0x8A, 0xA1, 0xB9, 0x46, 0xDA, 0x0F,
144 0x01, 0x1E, 0x37, 0x93, 0xC2, 0x55, 0x27, 0xE4, 0x1D, 0xD2, 0x90, 0xBB,
145 0xF4, 0xBF, 0x4A, 0x74, 0x39, 0x51, 0xBB, 0xE8, 0x0C, 0xB7, 0xF8, 0xD3,
146 0xD1, 0xDF, 0xE7, 0xBE, 0x80, 0x05, 0xC3, 0xB5, 0xC7, 0x83, 0xD5, 0x4C,
147 0x7F, 0x49, 0xFB, 0x3F, 0x29, 0x9B, 0xE1, 0x12, 0x51, 0x60, 0xD0, 0xA7,
148 0x0D, 0xA9, 0x28, 0x56, 0x73, 0xD9, 0x07, 0xE3, 0x5E, 0x3F, 0x9B, 0xF5,
149 0xB6, 0xF3, 0xF2, 0x5E, 0x74, 0xC9, 0x83, 0x81, 0x47, 0xF0, 0xC5, 0x45,
150 0x0A, 0xE9, 0x8E, 0x38, 0xD7, 0x18, 0xC6, 0x2A, 0x0F, 0xF8, 0xB7, 0x31,
151 0xD6, 0x55, 0xE4, 0x66, 0x78, 0x81, 0xD4, 0xE6, 0xDB, 0x9F, 0xBA, 0xE8,
152 0x23, 0xB5, 0x7F, 0xDC, 0x08, 0xEA, 0xD5, 0x26, 0x1E, 0x20, 0x25, 0x84,
153 0x26, 0xC6, 0x79, 0xC9, 0x9B, 0x3D, 0x7E, 0xA9
154};
155
156static const unsigned char kat_RSA_PSS_SHA224[] = {
157 0x39, 0x4A, 0x6A, 0x20, 0xBC, 0xE9, 0x33, 0xED, 0xEF, 0xC5, 0x58, 0xA7,
158 0xFE, 0x81, 0xC4, 0x36, 0x50, 0x9A, 0x2C, 0x82, 0x98, 0x08, 0x95, 0xFA,
159 0xB1, 0x9E, 0xD2, 0x55, 0x61, 0x87, 0x21, 0x59, 0x87, 0x7B, 0x1F, 0x57,
160 0x30, 0x9D, 0x0D, 0x4A, 0x06, 0xEB, 0x52, 0x37, 0x55, 0x54, 0x1C, 0x89,
161 0x83, 0x75, 0x59, 0x65, 0x64, 0x90, 0x2E, 0x16, 0xCC, 0x86, 0x05, 0xEE,
162 0xB1, 0xE6, 0x7B, 0xBA, 0x16, 0x75, 0x0D, 0x0C, 0x64, 0x0B, 0xAB, 0x22,
163 0x15, 0x78, 0x6B, 0x6F, 0xA4, 0xFB, 0x77, 0x40, 0x64, 0x62, 0xD1, 0xB5,
164 0x37, 0x1E, 0xE0, 0x3D, 0xA8, 0xF9, 0xD2, 0xBD, 0xAA, 0x38, 0x24, 0x49,
165 0x58, 0xD2, 0x74, 0x85, 0xF4, 0xB5, 0x93, 0x8E, 0xF5, 0x03, 0xEA, 0x2D,
166 0xC8, 0x52, 0xFA, 0xCF, 0x7E, 0x35, 0xB0, 0x6A, 0xAF, 0x95, 0xC0, 0x00,
167 0x54, 0x76, 0x3D, 0x0C, 0x9C, 0xB2, 0xEE, 0xC0
168};
169
170static const unsigned char kat_RSA_PSS_SHA256[] = {
171 0x6D, 0x3D, 0xBE, 0x8F, 0x60, 0x6D, 0x25, 0x14, 0xF0, 0x31, 0xE3, 0x89,
172 0x00, 0x97, 0xFA, 0x99, 0x71, 0x28, 0xE5, 0x10, 0x25, 0x9A, 0xF3, 0x8F,
173 0x7B, 0xC5, 0xA8, 0x4A, 0x74, 0x51, 0x36, 0xE2, 0x8D, 0x7D, 0x73, 0x28,
174 0xC1, 0x77, 0xC6, 0x27, 0x97, 0x00, 0x8B, 0x00, 0xA3, 0x96, 0x73, 0x4E,
175 0x7D, 0x2E, 0x2C, 0x34, 0x68, 0x8C, 0x8E, 0xDF, 0x9D, 0x49, 0x47, 0x05,
176 0xAB, 0xF5, 0x01, 0xD6, 0x81, 0x47, 0x70, 0xF5, 0x1D, 0x6D, 0x26, 0xBA,
177 0x2F, 0x7A, 0x54, 0x53, 0x4E, 0xED, 0x71, 0xD9, 0x5A, 0xF3, 0xDA, 0xB6,
178 0x0B, 0x47, 0x34, 0xAF, 0x90, 0xDC, 0xC8, 0xD9, 0x6F, 0x56, 0xCD, 0x9F,
179 0x21, 0xB7, 0x7E, 0xAD, 0x7C, 0x2F, 0x75, 0x50, 0x47, 0x12, 0xE4, 0x6D,
180 0x5F, 0xB7, 0x01, 0xDF, 0xC3, 0x11, 0x6C, 0xA9, 0x9E, 0x49, 0xB9, 0xF6,
181 0x72, 0xF4, 0xF6, 0xEF, 0x88, 0x1E, 0x2D, 0x1C
182};
183
184static const unsigned char kat_RSA_PSS_SHA384[] = {
185 0x40, 0xFB, 0xA1, 0x21, 0xF4, 0xB2, 0x40, 0x9A, 0xB4, 0x31, 0xA8, 0xF2,
186 0xEC, 0x1C, 0xC4, 0xC8, 0x7C, 0x22, 0x65, 0x9C, 0x57, 0x45, 0xCD, 0x5E,
187 0x86, 0x00, 0xF7, 0x25, 0x78, 0xDE, 0xDC, 0x7A, 0x71, 0x44, 0x9A, 0xCD,
188 0xAA, 0x25, 0xF4, 0xB2, 0xFC, 0xF0, 0x75, 0xD9, 0x2F, 0x78, 0x23, 0x7F,
189 0x6F, 0x02, 0xEF, 0xC1, 0xAF, 0xA6, 0x28, 0x16, 0x31, 0xDC, 0x42, 0x6C,
190 0xB2, 0x44, 0xE5, 0x4D, 0x66, 0xA2, 0xE6, 0x71, 0xF3, 0xAC, 0x4F, 0xFB,
191 0x91, 0xCA, 0xF5, 0x70, 0xEF, 0x6B, 0x9D, 0xA4, 0xEF, 0xD9, 0x3D, 0x2F,
192 0x3A, 0xBE, 0x89, 0x38, 0x59, 0x01, 0xBA, 0xDA, 0x32, 0xAD, 0x42, 0x89,
193 0x98, 0x8B, 0x39, 0x44, 0xF0, 0xFC, 0x38, 0xAC, 0x87, 0x1F, 0xCA, 0x6F,
194 0x48, 0xF6, 0xAE, 0xD7, 0x45, 0xEE, 0xAE, 0x88, 0x0E, 0x60, 0xF4, 0x55,
195 0x48, 0x44, 0xEE, 0x1F, 0x90, 0x18, 0x4B, 0xF1
196};
197
198static const unsigned char kat_RSA_PSS_SHA512[] = {
199 0x07, 0x1E, 0xD8, 0xD5, 0x05, 0xE8, 0xE6, 0xE6, 0x57, 0xAE, 0x63, 0x8C,
200 0xC6, 0x83, 0xB7, 0xA0, 0x59, 0xBB, 0xF2, 0xC6, 0x8F, 0x12, 0x53, 0x9A,
201 0x9B, 0x54, 0x9E, 0xB3, 0xC1, 0x1D, 0x23, 0x4D, 0x51, 0xED, 0x9E, 0xDD,
202 0x4B, 0xF3, 0x46, 0x9B, 0x6B, 0xF6, 0x7C, 0x24, 0x60, 0x79, 0x23, 0x39,
203 0x01, 0x1C, 0x51, 0xCB, 0xD8, 0xE9, 0x9A, 0x01, 0x67, 0x5F, 0xFE, 0xD7,
204 0x7C, 0xE3, 0x7F, 0xED, 0xDB, 0x87, 0xBB, 0xF0, 0x3D, 0x78, 0x55, 0x61,
205 0x57, 0xE3, 0x0F, 0xE3, 0xD2, 0x9D, 0x0C, 0x2A, 0x20, 0xB0, 0x85, 0x13,
206 0xC5, 0x47, 0x34, 0x0D, 0x32, 0x15, 0xC8, 0xAE, 0x9A, 0x6A, 0x39, 0x63,
207 0x2D, 0x60, 0xF5, 0x4C, 0xDF, 0x8A, 0x48, 0x4B, 0xBF, 0xF4, 0xA8, 0xFE,
208 0x76, 0xF2, 0x32, 0x1B, 0x9C, 0x7C, 0xCA, 0xFE, 0x7F, 0x80, 0xC2, 0x88,
209 0x5C, 0x97, 0x70, 0xB4, 0x26, 0xC9, 0x14, 0x8B
210};
211
212static const unsigned char kat_RSA_SHA1[] = {
213 0x71, 0xEE, 0x1A, 0xC0, 0xFE, 0x01, 0x93, 0x54, 0x79, 0x5C, 0xF2, 0x4C,
214 0x4A, 0xFD, 0x1A, 0x05, 0x8F, 0x64, 0xB1, 0x6D, 0x61, 0x33, 0x8D, 0x9B,
215 0xE7, 0xFD, 0x60, 0xA3, 0x83, 0xB5, 0xA3, 0x51, 0x55, 0x77, 0x90, 0xCF,
216 0xDC, 0x22, 0x37, 0x8E, 0xD0, 0xE1, 0xAE, 0x09, 0xE3, 0x3D, 0x1E, 0xF8,
217 0x80, 0xD1, 0x8B, 0xC2, 0xEC, 0x0A, 0xD7, 0x6B, 0x88, 0x8B, 0x8B, 0xA1,
218 0x20, 0x22, 0xBE, 0x59, 0x5B, 0xE0, 0x23, 0x24, 0xA1, 0x49, 0x30, 0xBA,
219 0xA9, 0x9E, 0xE8, 0xB1, 0x8A, 0x62, 0x16, 0xBF, 0x4E, 0xCA, 0x2E, 0x4E,
220 0xBC, 0x29, 0xA8, 0x67, 0x13, 0xB7, 0x9F, 0x1D, 0x04, 0x44, 0xE5, 0x5F,
221 0x35, 0x07, 0x11, 0xBC, 0xED, 0x19, 0x37, 0x21, 0xCF, 0x23, 0x48, 0x1F,
222 0x72, 0x05, 0xDE, 0xE6, 0xE8, 0x7F, 0x33, 0x8A, 0x76, 0x4B, 0x2F, 0x95,
223 0xDF, 0xF1, 0x5F, 0x84, 0x80, 0xD9, 0x46, 0xB4
224};
225
226static const unsigned char kat_RSA_SHA224[] = {
227 0x62, 0xAA, 0x79, 0xA9, 0x18, 0x0E, 0x5F, 0x8C, 0xBB, 0xB7, 0x15, 0xF9,
228 0x25, 0xBB, 0xFA, 0xD4, 0x3A, 0x34, 0xED, 0x9E, 0xA0, 0xA9, 0x18, 0x8D,
229 0x5B, 0x55, 0x9A, 0x7E, 0x1E, 0x08, 0x08, 0x60, 0xC5, 0x1A, 0xC5, 0x89,
230 0x08, 0xE2, 0x1B, 0xBD, 0x62, 0x50, 0x17, 0x76, 0x30, 0x2C, 0x9E, 0xCD,
231 0xA4, 0x02, 0xAD, 0xB1, 0x6D, 0x44, 0x6D, 0xD5, 0xC6, 0x45, 0x41, 0xE5,
232 0xEE, 0x1F, 0x8D, 0x7E, 0x08, 0x16, 0xA6, 0xE1, 0x5E, 0x0B, 0xA9, 0xCC,
233 0xDB, 0x59, 0x55, 0x87, 0x09, 0x25, 0x70, 0x86, 0x84, 0x02, 0xC6, 0x3B,
234 0x0B, 0x44, 0x4C, 0x46, 0x95, 0xF4, 0xF8, 0x5A, 0x91, 0x28, 0x3E, 0xB2,
235 0x58, 0x2E, 0x06, 0x45, 0x49, 0xE0, 0x92, 0xE2, 0xC0, 0x66, 0xE6, 0x35,
236 0xD9, 0x79, 0x7F, 0x17, 0x5E, 0x02, 0x73, 0x04, 0x77, 0x82, 0xE6, 0xDC,
237 0x40, 0x21, 0x89, 0x8B, 0x37, 0x3E, 0x1E, 0x8D
238};
239
240static const unsigned char kat_RSA_SHA256[] = {
241 0x0D, 0x55, 0xE2, 0xAA, 0x81, 0xDB, 0x8E, 0x82, 0x05, 0x17, 0xA5, 0x23,
242 0xE7, 0x3B, 0x1D, 0xAF, 0xFB, 0x8C, 0xD0, 0x81, 0x20, 0x7B, 0xAA, 0x23,
243 0x92, 0x87, 0x8C, 0xD1, 0x53, 0x85, 0x16, 0xDC, 0xBE, 0xAD, 0x6F, 0x35,
244 0x98, 0x2D, 0x69, 0x84, 0xBF, 0xD9, 0x8A, 0x01, 0x17, 0x58, 0xB2, 0x6E,
245 0x2C, 0x44, 0x9B, 0x90, 0xF1, 0xFB, 0x51, 0xE8, 0x6A, 0x90, 0x2D, 0x18,
246 0x0E, 0xC0, 0x90, 0x10, 0x24, 0xA9, 0x1D, 0xB3, 0x58, 0x7A, 0x91, 0x30,
247 0xBE, 0x22, 0xC7, 0xD3, 0xEC, 0xC3, 0x09, 0x5D, 0xBF, 0xE2, 0x80, 0x3A,
248 0x7C, 0x85, 0xB4, 0xBC, 0xD1, 0xE9, 0xF0, 0x5C, 0xDE, 0x81, 0xA6, 0x38,
249 0xB8, 0x42, 0xBB, 0x86, 0xC5, 0x9D, 0xCE, 0x7C, 0x2C, 0xEE, 0xD1, 0xDA,
250 0x27, 0x48, 0x2B, 0xF5, 0xAB, 0xB9, 0xF7, 0x80, 0xD1, 0x90, 0x27, 0x90,
251 0xBD, 0x44, 0x97, 0x60, 0xCD, 0x57, 0xC0, 0x7A
252};
253
254static const unsigned char kat_RSA_SHA384[] = {
255 0x1D, 0xE3, 0x6A, 0xDD, 0x27, 0x4C, 0xC0, 0xA5, 0x27, 0xEF, 0xE6, 0x1F,
256 0xD2, 0x91, 0x68, 0x59, 0x04, 0xAE, 0xBD, 0x99, 0x63, 0x56, 0x47, 0xC7,
257 0x6F, 0x22, 0x16, 0x48, 0xD0, 0xF9, 0x18, 0xA9, 0xCA, 0xFA, 0x5D, 0x5C,
258 0xA7, 0x65, 0x52, 0x8A, 0xC8, 0x44, 0x7E, 0x86, 0x5D, 0xA9, 0xA6, 0x55,
259 0x65, 0x3E, 0xD9, 0x2D, 0x02, 0x38, 0xA8, 0x79, 0x28, 0x7F, 0xB6, 0xCF,
260 0x82, 0xDD, 0x7E, 0x55, 0xE1, 0xB1, 0xBC, 0xE2, 0x19, 0x2B, 0x30, 0xC2,
261 0x1B, 0x2B, 0xB0, 0x82, 0x46, 0xAC, 0x4B, 0xD1, 0xE2, 0x7D, 0xEB, 0x8C,
262 0xFF, 0x95, 0xE9, 0x6A, 0x1C, 0x3D, 0x4D, 0xBF, 0x8F, 0x8B, 0x9C, 0xCD,
263 0xEA, 0x85, 0xEE, 0x00, 0xDC, 0x1C, 0xA7, 0xEB, 0xD0, 0x8F, 0x99, 0xF1,
264 0x16, 0x28, 0x24, 0x64, 0x04, 0x39, 0x2D, 0x58, 0x1E, 0x37, 0xDC, 0x04,
265 0xBD, 0x31, 0xA2, 0x2F, 0xB3, 0x35, 0x56, 0xBF
266};
267
268static const unsigned char kat_RSA_SHA512[] = {
269 0x69, 0x52, 0x1B, 0x51, 0x5E, 0x06, 0xCA, 0x9B, 0x16, 0x51, 0x5D, 0xCF,
270 0x49, 0x25, 0x4A, 0xA1, 0x6A, 0x77, 0x4C, 0x36, 0x40, 0xF8, 0xB2, 0x9A,
271 0x15, 0xEA, 0x5C, 0xE5, 0xE6, 0x82, 0xE0, 0x86, 0x82, 0x6B, 0x32, 0xF1,
272 0x04, 0xC1, 0x5A, 0x1A, 0xED, 0x1E, 0x9A, 0xB6, 0x4C, 0x54, 0x9F, 0xD8,
273 0x8D, 0xCC, 0xAC, 0x8A, 0xBB, 0x9C, 0x82, 0x3F, 0xA6, 0x53, 0x62, 0xB5,
274 0x80, 0xE2, 0xBC, 0xDD, 0x67, 0x2B, 0xD9, 0x3F, 0xE4, 0x75, 0x92, 0x6B,
275 0xAF, 0x62, 0x7C, 0x52, 0xF0, 0xEE, 0x33, 0xDF, 0x1B, 0x1D, 0x47, 0xE6,
276 0x59, 0x56, 0xA5, 0xB9, 0x5C, 0xE6, 0x77, 0x78, 0x16, 0x63, 0x84, 0x05,
277 0x6F, 0x0E, 0x2B, 0x31, 0x9D, 0xF7, 0x7F, 0xB2, 0x64, 0x71, 0xE0, 0x2D,
278 0x3E, 0x62, 0xCE, 0xB5, 0x3F, 0x88, 0xDF, 0x2D, 0xAB, 0x98, 0x65, 0x91,
279 0xDF, 0x70, 0x14, 0xA5, 0x3F, 0x36, 0xAB, 0x84
280};
281
282static const unsigned char kat_RSA_X931_SHA1[] = {
283 0x86, 0xB4, 0x18, 0xBA, 0xD1, 0x80, 0xB6, 0x7C, 0x42, 0x45, 0x4D, 0xDF,
284 0xE9, 0x2D, 0xE1, 0x83, 0x5F, 0xB5, 0x2F, 0xC9, 0xCD, 0xC4, 0xB2, 0x75,
285 0x80, 0xA4, 0xF1, 0x4A, 0xE7, 0x83, 0x12, 0x1E, 0x1E, 0x14, 0xB8, 0xAC,
286 0x35, 0xE2, 0xAA, 0x0B, 0x5C, 0xF8, 0x38, 0x4D, 0x04, 0xEE, 0xA9, 0x97,
287 0x70, 0xFB, 0x5E, 0xE7, 0xB7, 0xE3, 0x62, 0x23, 0x4B, 0x38, 0xBE, 0xD6,
288 0x53, 0x15, 0xF7, 0xDF, 0x87, 0xB4, 0x0E, 0xCC, 0xB1, 0x1A, 0x11, 0x19,
289 0xEE, 0x51, 0xCC, 0x92, 0xDD, 0xBC, 0x63, 0x29, 0x63, 0x0C, 0x59, 0xD7,
290 0x6F, 0x4C, 0x3C, 0x37, 0x5B, 0x37, 0x03, 0x61, 0x7D, 0x24, 0x1C, 0x99,
291 0x48, 0xAF, 0x82, 0xFE, 0x32, 0x41, 0x9B, 0xB2, 0xDB, 0xEA, 0xED, 0x76,
292 0x8E, 0x6E, 0xCA, 0x7E, 0x4E, 0x14, 0xBA, 0x30, 0x84, 0x1C, 0xB3, 0x67,
293 0xA3, 0x29, 0x80, 0x70, 0x54, 0x68, 0x7D, 0x49
294};
295
296static const unsigned char kat_RSA_X931_SHA256[] = {
297 0x7E, 0xA2, 0x77, 0xFE, 0xB8, 0x54, 0x8A, 0xC7, 0x7F, 0x64, 0x54, 0x89,
298 0xE5, 0x52, 0x15, 0x8E, 0x52, 0x96, 0x4E, 0xA6, 0x58, 0x92, 0x1C, 0xDD,
299 0xEA, 0xA2, 0x2D, 0x5C, 0xD1, 0x62, 0x00, 0x49, 0x05, 0x95, 0x73, 0xCF,
300 0x16, 0x76, 0x68, 0xF6, 0xC6, 0x5E, 0x80, 0xB8, 0xB8, 0x7B, 0xC8, 0x9B,
301 0xC6, 0x53, 0x88, 0x26, 0x20, 0x88, 0x73, 0xB6, 0x13, 0xB8, 0xF0, 0x4B,
302 0x00, 0x85, 0xF3, 0xDD, 0x07, 0x50, 0xEB, 0x20, 0xC4, 0x38, 0x0E, 0x98,
303 0xAD, 0x4E, 0x49, 0x2C, 0xD7, 0x65, 0xA5, 0x19, 0x0E, 0x59, 0x01, 0xEC,
304 0x7E, 0x75, 0x89, 0x69, 0x2E, 0x63, 0x76, 0x85, 0x46, 0x8D, 0xA0, 0x8C,
305 0x33, 0x1D, 0x82, 0x8C, 0x03, 0xEA, 0x69, 0x88, 0x35, 0xA1, 0x42, 0xBD,
306 0x21, 0xED, 0x8D, 0xBC, 0xBC, 0xDB, 0x30, 0xFF, 0x86, 0xF0, 0x5B, 0xDC,
307 0xE3, 0xE2, 0xE8, 0x0A, 0x0A, 0x29, 0x94, 0x80
308};
309
310static const unsigned char kat_RSA_X931_SHA384[] = {
311 0x5C, 0x7D, 0x96, 0x35, 0xEC, 0x7E, 0x11, 0x38, 0xBB, 0x7B, 0xEC, 0x7B,
312 0xF2, 0x82, 0x8E, 0x99, 0xBD, 0xEF, 0xD8, 0xAE, 0xD7, 0x39, 0x37, 0xCB,
313 0xE6, 0x4F, 0x5E, 0x0A, 0x13, 0xE4, 0x2E, 0x40, 0xB9, 0xBE, 0x2E, 0xE3,
314 0xEF, 0x78, 0x83, 0x18, 0x44, 0x35, 0x9C, 0x8E, 0xD7, 0x4A, 0x63, 0xF6,
315 0x57, 0xC2, 0xB0, 0x08, 0x51, 0x73, 0xCF, 0xCA, 0x99, 0x66, 0xEE, 0x31,
316 0xD8, 0x69, 0xE9, 0xAB, 0x13, 0x27, 0x7B, 0x41, 0x1E, 0x6D, 0x8D, 0xF1,
317 0x3E, 0x9C, 0x35, 0x95, 0x58, 0xDD, 0x2B, 0xD5, 0xA0, 0x60, 0x41, 0x79,
318 0x24, 0x22, 0xE4, 0xB7, 0xBF, 0x47, 0x53, 0xF6, 0x34, 0xD5, 0x7C, 0xFF,
319 0x0E, 0x09, 0xEE, 0x2E, 0xE2, 0x37, 0xB9, 0xDE, 0xC5, 0x12, 0x44, 0x35,
320 0xEF, 0x01, 0xE6, 0x5E, 0x39, 0x31, 0x2D, 0x71, 0xA5, 0xDC, 0xC6, 0x6D,
321 0xE2, 0xCD, 0x85, 0xDB, 0x73, 0x82, 0x65, 0x28
322};
323
324static const unsigned char kat_RSA_X931_SHA512[] = {
325 0xA6, 0x65, 0xA2, 0x77, 0x4F, 0xB3, 0x86, 0xCB, 0x64, 0x3A, 0xC1, 0x63,
326 0xFC, 0xA1, 0xAA, 0xCB, 0x9B, 0x79, 0xDD, 0x4B, 0xE1, 0xD9, 0xDA, 0xAC,
327 0xE7, 0x47, 0x09, 0xB2, 0x11, 0x4B, 0x8A, 0xAA, 0x05, 0x9E, 0x77, 0xD7,
328 0x3A, 0xBD, 0x5E, 0x53, 0x09, 0x4A, 0xE6, 0x0F, 0x5E, 0xF9, 0x14, 0x28,
329 0xA0, 0x99, 0x74, 0x64, 0x70, 0x4E, 0xF2, 0xE3, 0xFA, 0xC7, 0xF8, 0xC5,
330 0x6E, 0x2B, 0x79, 0x96, 0x0D, 0x0C, 0xC8, 0x10, 0x34, 0x53, 0xD2, 0xAF,
331 0x17, 0x0E, 0xE0, 0xBF, 0x79, 0xF6, 0x04, 0x72, 0x10, 0xE0, 0xF6, 0xD0,
332 0xCE, 0x8A, 0x6F, 0xA1, 0x95, 0x89, 0xBF, 0x58, 0x8F, 0x46, 0x5F, 0x09,
333 0x9F, 0x09, 0xCA, 0x84, 0x15, 0x85, 0xE0, 0xED, 0x04, 0x2D, 0xFB, 0x7C,
334 0x36, 0x35, 0x21, 0x31, 0xC3, 0xFD, 0x92, 0x42, 0x11, 0x30, 0x71, 0x1B,
335 0x60, 0x83, 0x18, 0x88, 0xA3, 0xF5, 0x59, 0xC3
336};
337
338
148int FIPS_selftest_rsa() 339int FIPS_selftest_rsa()
149 {
150 int clen;
151 RSA *key;
152 unsigned char expected_ctext[256];
153 unsigned char ctext[256];
154 unsigned char ptext[256];
155 static unsigned char original_ptext[] =
156 "\x01\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0"
157 "\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12"
158 "\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34"
159 "\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56"
160 "\x89\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56\x78"
161 "\xab\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56\x78\x9a"
162 "\xcd\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56\x78\x9a\xbc"
163 "\xef\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56\x78\x9a\xbc\xde"
164 "\xf0\x12\x34\x56\x78\x9a\xbc\xde\xf0\x12\x34\x56\x78\x9a\xbc\xde";
165 unsigned char md[SHA_DIGEST_LENGTH];
166 unsigned char mdkat[SHA_DIGEST_LENGTH] =
167 "\x2d\x57\x1d\x6f\x5c\x37\xf9\xf0\x3b\xb4\x3c\xe8\x2c\x4c\xb3\x04"
168 "\x75\xa2\x0e\xfb";
169 unsigned char ctextkat[] =
170 "\x3e\xc5\x0a\xbe\x29\xa2\xca\x9a\x35\x14\x17\x26\xa4\x0f\xa3\x03"
171 "\x65\xb5\x37\xf5\x6a\xaa\xb\xf\x2c\x0d\x8\xc0\x73\x8\x3c\x88\x85"
172 "\x36\x68\x16\xfe\x2f\x59\x77\x7e\x2a\x76\x9a\xc7\x27\x19\x9b\x54"
173 "\x14\x87\xf3\xe0\xce\x1e\x68\x10\x40\x14\xac\xbc\xe6\x6f\x26\x1f"
174 "\x55\xd1\x15\x81\x48\x10\xf4\x89\xe5\x67\x52\x42\x87\x04\x74\x4e"
175 "\x96\x14\x7c\x53\xc9\x1e\x84\x11\x7d\x7d\x23\xbd\xff\x6c\xcb\x00"
176 "\x96\x2e\x7d\xfb\x47\xea\x78\xcd\xd8\x04\x3a\x98\x06\x13\x68\x39"
177 "\xa1\xe2\xbc\x9f\x64\xc7\x62\xf0\x74\x4d\x42\xe0\x0b\xcf\x24\x48";
178 int i;
179
180 /* Perform pairwise consistency test by: ... */
181
182 key=RSA_new();
183 clen=setrsakey(key,expected_ctext);
184 /* ...1) apply public key to plaintext, resulting ciphertext must be
185 * different
186 */
187 i=RSA_public_encrypt(128,original_ptext,ctext,key,
188 RSA_NO_PADDING);
189 if(i != clen || memcmp(ctext,expected_ctext,i))
190 {
191 FIPSerr(FIPS_F_FIPS_SELFTEST_RSA,FIPS_R_SELFTEST_FAILED);
192 return 0;
193 }
194 if(!memcmp(ctext,original_ptext,i))
195 {
196 FIPSerr(FIPS_F_FIPS_SELFTEST_RSA,FIPS_R_SELFTEST_FAILED);
197 return 0;
198 }
199 /* ...2) apply private key to ciphertext and compare result to
200 * original plaintext; results must be equal
201 */
202 i=RSA_private_decrypt(i,ctext,ptext,key,RSA_NO_PADDING);
203 if(i != 128 || memcmp(ptext,original_ptext,i))
204 { 340 {
205 FIPSerr(FIPS_F_FIPS_SELFTEST_RSA,FIPS_R_SELFTEST_FAILED); 341 int ret = 0;
206 return 0; 342 RSA *key = NULL;
207 } 343 EVP_PKEY pk;
344 key=FIPS_rsa_new();
345 setrsakey(key);
346 pk.type = EVP_PKEY_RSA;
347 pk.pkey.rsa = key;
208 348
209 /* Perform sign and verify Known Answer Test by... */ 349 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
350 kat_RSA_SHA1, sizeof(kat_RSA_SHA1),
351 EVP_sha1(), EVP_MD_CTX_FLAG_PAD_PKCS1,
352 "RSA SHA1 PKCS#1"))
353 goto err;
354 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
355 kat_RSA_SHA224, sizeof(kat_RSA_SHA224),
356 EVP_sha224(), EVP_MD_CTX_FLAG_PAD_PKCS1,
357 "RSA SHA224 PKCS#1"))
358 goto err;
359 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
360 kat_RSA_SHA256, sizeof(kat_RSA_SHA256),
361 EVP_sha256(), EVP_MD_CTX_FLAG_PAD_PKCS1,
362 "RSA SHA256 PKCS#1"))
363 goto err;
364 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
365 kat_RSA_SHA384, sizeof(kat_RSA_SHA384),
366 EVP_sha384(), EVP_MD_CTX_FLAG_PAD_PKCS1,
367 "RSA SHA384 PKCS#1"))
368 goto err;
369 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
370 kat_RSA_SHA512, sizeof(kat_RSA_SHA512),
371 EVP_sha512(), EVP_MD_CTX_FLAG_PAD_PKCS1,
372 "RSA SHA512 PKCS#1"))
373 goto err;
210 374
211 /* ...1) using the same RSA key to encrypt the SHA-1 hash of a 375 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
212 * plaintext value larger than the RSA key size 376 kat_RSA_PSS_SHA1, sizeof(kat_RSA_PSS_SHA1),
213 */ 377 EVP_sha1(), EVP_MD_CTX_FLAG_PAD_PSS,
214 if (RSA_size(key) >= sizeof(original_ptext) - 1) 378 "RSA SHA1 PSS"))
215 { 379 goto err;
216 FIPSerr(FIPS_F_FIPS_SELFTEST_RSA,FIPS_R_SELFTEST_FAILED); 380 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
217 return 0; 381 kat_RSA_PSS_SHA224, sizeof(kat_RSA_PSS_SHA224),
218 } 382 EVP_sha224(), EVP_MD_CTX_FLAG_PAD_PSS,
219 /* ...2) then generate the SHA-1 digest of plaintext, and compare the 383 "RSA SHA224 PSS"))
220 * digest to the Known Answer (note here we duplicate the SHA-1 KAT) 384 goto err;
221 */ 385 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
222 SHA1(original_ptext,sizeof(original_ptext) - 1,md); 386 kat_RSA_PSS_SHA256, sizeof(kat_RSA_PSS_SHA256),
223 if(memcmp(md,mdkat,SHA_DIGEST_LENGTH)) 387 EVP_sha256(), EVP_MD_CTX_FLAG_PAD_PSS,
224 { 388 "RSA SHA256 PSS"))
225 FIPSerr(FIPS_F_FIPS_SELFTEST_SHA1,FIPS_R_SELFTEST_FAILED); 389 goto err;
226 return 0; 390 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
227 } 391 kat_RSA_PSS_SHA384, sizeof(kat_RSA_PSS_SHA384),
228 /* ...3) then encrypt the digest, and compare the ciphertext 392 EVP_sha384(), EVP_MD_CTX_FLAG_PAD_PSS,
229 * to the Known Answer 393 "RSA SHA384 PSS"))
230 */ 394 goto err;
231 i=RSA_private_encrypt(sizeof(md),md,ctext,key,RSA_PKCS1_PADDING); 395 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
232 if(i != clen || memcmp(ctextkat,ctext,i)) 396 kat_RSA_PSS_SHA512, sizeof(kat_RSA_PSS_SHA512),
233 { 397 EVP_sha512(), EVP_MD_CTX_FLAG_PAD_PSS,
234 FIPSerr(FIPS_F_FIPS_SELFTEST_RSA,FIPS_R_SELFTEST_FAILED); 398 "RSA SHA512 PSS"))
235 return 0; 399 goto err;
236 }
237 /* ...4) and finally decrypt the signed digest and compare with
238 * the original Known Answer
239 */
240 i=RSA_public_decrypt(i,ctext,md,key,RSA_PKCS1_PADDING);
241 if(i != sizeof(md) || memcmp(mdkat,md,i))
242 {
243 FIPSerr(FIPS_F_FIPS_SELFTEST_RSA,FIPS_R_SELFTEST_FAILED);
244 return 0;
245 }
246 400
247 RSA_free(key); 401
248 return 1; 402 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
249 } 403 kat_RSA_X931_SHA1, sizeof(kat_RSA_X931_SHA1),
404 EVP_sha1(), EVP_MD_CTX_FLAG_PAD_X931,
405 "RSA SHA1 X931"))
406 goto err;
407 /* NB: SHA224 not supported in X9.31 */
408 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
409 kat_RSA_X931_SHA256, sizeof(kat_RSA_X931_SHA256),
410 EVP_sha256(), EVP_MD_CTX_FLAG_PAD_X931,
411 "RSA SHA256 X931"))
412 goto err;
413 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
414 kat_RSA_X931_SHA384, sizeof(kat_RSA_X931_SHA384),
415 EVP_sha384(), EVP_MD_CTX_FLAG_PAD_X931,
416 "RSA SHA384 X931"))
417 goto err;
418 if (!fips_pkey_signature_test(&pk, kat_tbs, sizeof(kat_tbs) - 1,
419 kat_RSA_X931_SHA512, sizeof(kat_RSA_X931_SHA512),
420 EVP_sha512(), EVP_MD_CTX_FLAG_PAD_X931,
421 "RSA SHA512 X931"))
422 goto err;
423
424
425 ret = 1;
426
427 err:
428 FIPS_rsa_free(key);
429 return ret;
430 }
250 431
251#endif /* def OPENSSL_FIPS */ 432#endif /* def OPENSSL_FIPS */
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsa_sign.c b/src/lib/libssl/src/fips/rsa/fips_rsa_sign.c
new file mode 100644
index 0000000000..37364621d1
--- /dev/null
+++ b/src/lib/libssl/src/fips/rsa/fips_rsa_sign.c
@@ -0,0 +1,554 @@
1/* fips_rsa_sign.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2007.
4 */
5/* ====================================================================
6 * Copyright (c) 2007 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 <string.h>
60#include <openssl/evp.h>
61#include <openssl/rsa.h>
62#include <openssl/err.h>
63#include <openssl/sha.h>
64
65#ifdef OPENSSL_FIPS
66
67/* FIPS versions of RSA_sign() and RSA_verify().
68 * These will only have to deal with SHA* signatures and by including
69 * pregenerated encodings all ASN1 dependencies can be avoided
70 */
71
72/* Standard encodings including NULL parameter */
73
74static const unsigned char sha1_bin[] = {
75 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05,
76 0x00, 0x04, 0x14
77};
78
79static const unsigned char sha224_bin[] = {
80 0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
81 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x1c
82};
83
84static const unsigned char sha256_bin[] = {
85 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
86 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20
87};
88
89static const unsigned char sha384_bin[] = {
90 0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
91 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30
92};
93
94static const unsigned char sha512_bin[] = {
95 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
96 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40
97};
98
99/* Alternate encodings with absent parameters. We don't generate signature
100 * using this format but do tolerate received signatures of this form.
101 */
102
103static unsigned char sha1_nn_bin[] = {
104 0x30, 0x1f, 0x30, 0x07, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x04,
105 0x14
106};
107
108static unsigned char sha224_nn_bin[] = {
109 0x30, 0x2b, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
110 0x04, 0x02, 0x04, 0x04, 0x1c
111};
112
113static unsigned char sha256_nn_bin[] = {
114 0x30, 0x2f, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
115 0x04, 0x02, 0x01, 0x04, 0x20
116};
117
118static unsigned char sha384_nn_bin[] = {
119 0x30, 0x3f, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
120 0x04, 0x02, 0x02, 0x04, 0x30
121};
122
123static unsigned char sha512_nn_bin[] = {
124 0x30, 0x4f, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
125 0x04, 0x02, 0x03, 0x04, 0x40
126};
127
128
129static const unsigned char *fips_digestinfo_encoding(int nid, unsigned int *len)
130 {
131 switch (nid)
132 {
133
134 case NID_sha1:
135 *len = sizeof(sha1_bin);
136 return sha1_bin;
137
138 case NID_sha224:
139 *len = sizeof(sha224_bin);
140 return sha224_bin;
141
142 case NID_sha256:
143 *len = sizeof(sha256_bin);
144 return sha256_bin;
145
146 case NID_sha384:
147 *len = sizeof(sha384_bin);
148 return sha384_bin;
149
150 case NID_sha512:
151 *len = sizeof(sha512_bin);
152 return sha512_bin;
153
154 default:
155 return NULL;
156
157 }
158 }
159
160static const unsigned char *fips_digestinfo_nn_encoding(int nid, unsigned int *len)
161 {
162 switch (nid)
163 {
164
165 case NID_sha1:
166 *len = sizeof(sha1_nn_bin);
167 return sha1_nn_bin;
168
169 case NID_sha224:
170 *len = sizeof(sha224_nn_bin);
171 return sha224_nn_bin;
172
173 case NID_sha256:
174 *len = sizeof(sha256_nn_bin);
175 return sha256_nn_bin;
176
177 case NID_sha384:
178 *len = sizeof(sha384_nn_bin);
179 return sha384_nn_bin;
180
181 case NID_sha512:
182 *len = sizeof(sha512_nn_bin);
183 return sha512_nn_bin;
184
185 default:
186 return NULL;
187
188 }
189 }
190
191static int fips_rsa_sign(int type, const unsigned char *x, unsigned int y,
192 unsigned char *sigret, unsigned int *siglen, EVP_MD_SVCTX *sv)
193 {
194 int i=0,j,ret=0;
195 unsigned int dlen;
196 const unsigned char *der;
197 unsigned int m_len;
198 int pad_mode = sv->mctx->flags & EVP_MD_CTX_FLAG_PAD_MASK;
199 int rsa_pad_mode = 0;
200 RSA *rsa = sv->key;
201 /* Largest DigestInfo: 19 (max encoding) + max MD */
202 unsigned char tmpdinfo[19 + EVP_MAX_MD_SIZE];
203 unsigned char md[EVP_MAX_MD_SIZE + 1];
204
205 EVP_DigestFinal_ex(sv->mctx, md, &m_len);
206
207 if((rsa->flags & RSA_FLAG_SIGN_VER) && rsa->meth->rsa_sign)
208 {
209 ret = rsa->meth->rsa_sign(type, md, m_len,
210 sigret, siglen, rsa);
211 goto done;
212 }
213
214 if (pad_mode == EVP_MD_CTX_FLAG_PAD_X931)
215 {
216 int hash_id;
217 memcpy(tmpdinfo, md, m_len);
218 hash_id = RSA_X931_hash_id(M_EVP_MD_CTX_type(sv->mctx));
219 if (hash_id == -1)
220 {
221 RSAerr(RSA_F_FIPS_RSA_SIGN,RSA_R_UNKNOWN_ALGORITHM_TYPE);
222 return 0;
223 }
224 tmpdinfo[m_len] = (unsigned char)hash_id;
225 i = m_len + 1;
226 rsa_pad_mode = RSA_X931_PADDING;
227 }
228 else if (pad_mode == EVP_MD_CTX_FLAG_PAD_PKCS1)
229 {
230
231 der = fips_digestinfo_encoding(type, &dlen);
232
233 if (!der)
234 {
235 RSAerr(RSA_F_FIPS_RSA_SIGN,RSA_R_UNKNOWN_ALGORITHM_TYPE);
236 return 0;
237 }
238 memcpy(tmpdinfo, der, dlen);
239 memcpy(tmpdinfo + dlen, md, m_len);
240
241 i = dlen + m_len;
242 rsa_pad_mode = RSA_PKCS1_PADDING;
243
244 }
245 else if (pad_mode == EVP_MD_CTX_FLAG_PAD_PSS)
246 {
247 unsigned char *sbuf;
248 int saltlen;
249 i = RSA_size(rsa);
250 sbuf = OPENSSL_malloc(RSA_size(rsa));
251 saltlen = M_EVP_MD_CTX_FLAG_PSS_SALT(sv->mctx);
252 if (saltlen == EVP_MD_CTX_FLAG_PSS_MDLEN)
253 saltlen = -1;
254 else if (saltlen == EVP_MD_CTX_FLAG_PSS_MREC)
255 saltlen = -2;
256 if (!sbuf)
257 {
258 RSAerr(RSA_F_FIPS_RSA_SIGN,ERR_R_MALLOC_FAILURE);
259 goto psserr;
260 }
261 if (!RSA_padding_add_PKCS1_PSS(rsa, sbuf, md,
262 M_EVP_MD_CTX_md(sv->mctx), saltlen))
263 goto psserr;
264 j=rsa->meth->rsa_priv_enc(i,sbuf,sigret,rsa,RSA_NO_PADDING);
265 if (j > 0)
266 {
267 ret=1;
268 *siglen=j;
269 }
270 psserr:
271 OPENSSL_cleanse(md,m_len);
272 OPENSSL_cleanse(sbuf, i);
273 OPENSSL_free(sbuf);
274 return ret;
275 }
276
277 j=RSA_size(rsa);
278 if (i > (j-RSA_PKCS1_PADDING_SIZE))
279 {
280 RSAerr(RSA_F_FIPS_RSA_SIGN,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
281 goto done;
282 }
283 /* NB: call underlying method directly to avoid FIPS blocking */
284 j=rsa->meth->rsa_priv_enc(i,tmpdinfo,sigret,rsa,rsa_pad_mode);
285 if (j > 0)
286 {
287 ret=1;
288 *siglen=j;
289 }
290
291 done:
292 OPENSSL_cleanse(tmpdinfo,i);
293 OPENSSL_cleanse(md,m_len);
294 return ret;
295 }
296
297static int fips_rsa_verify(int dtype,
298 const unsigned char *x, unsigned int y,
299 unsigned char *sigbuf, unsigned int siglen, EVP_MD_SVCTX *sv)
300 {
301 int i,ret=0;
302 unsigned int dlen, diglen;
303 int pad_mode = sv->mctx->flags & EVP_MD_CTX_FLAG_PAD_MASK;
304 int rsa_pad_mode = 0;
305 unsigned char *s;
306 const unsigned char *der;
307 unsigned char dig[EVP_MAX_MD_SIZE];
308 RSA *rsa = sv->key;
309
310 if (siglen != (unsigned int)RSA_size(sv->key))
311 {
312 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_WRONG_SIGNATURE_LENGTH);
313 return(0);
314 }
315
316 EVP_DigestFinal_ex(sv->mctx, dig, &diglen);
317
318 if((rsa->flags & RSA_FLAG_SIGN_VER) && rsa->meth->rsa_verify)
319 {
320 return rsa->meth->rsa_verify(dtype, dig, diglen,
321 sigbuf, siglen, rsa);
322 }
323
324
325 s= OPENSSL_malloc((unsigned int)siglen);
326 if (s == NULL)
327 {
328 RSAerr(RSA_F_FIPS_RSA_VERIFY,ERR_R_MALLOC_FAILURE);
329 goto err;
330 }
331 if (pad_mode == EVP_MD_CTX_FLAG_PAD_X931)
332 rsa_pad_mode = RSA_X931_PADDING;
333 else if (pad_mode == EVP_MD_CTX_FLAG_PAD_PKCS1)
334 rsa_pad_mode = RSA_PKCS1_PADDING;
335 else if (pad_mode == EVP_MD_CTX_FLAG_PAD_PSS)
336 rsa_pad_mode = RSA_NO_PADDING;
337
338 /* NB: call underlying method directly to avoid FIPS blocking */
339 i=rsa->meth->rsa_pub_dec((int)siglen,sigbuf,s, rsa, rsa_pad_mode);
340
341 if (i <= 0) goto err;
342
343 if (pad_mode == EVP_MD_CTX_FLAG_PAD_X931)
344 {
345 int hash_id;
346 if (i != (int)(diglen + 1))
347 {
348 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
349 goto err;
350 }
351 hash_id = RSA_X931_hash_id(M_EVP_MD_CTX_type(sv->mctx));
352 if (hash_id == -1)
353 {
354 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_UNKNOWN_ALGORITHM_TYPE);
355 goto err;
356 }
357 if (s[diglen] != (unsigned char)hash_id)
358 {
359 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
360 goto err;
361 }
362 if (memcmp(s, dig, diglen))
363 {
364 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
365 goto err;
366 }
367 ret = 1;
368 }
369 else if (pad_mode == EVP_MD_CTX_FLAG_PAD_PKCS1)
370 {
371
372 der = fips_digestinfo_encoding(dtype, &dlen);
373
374 if (!der)
375 {
376 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_UNKNOWN_ALGORITHM_TYPE);
377 return(0);
378 }
379
380 /* Compare, DigestInfo length, DigestInfo header and finally
381 * digest value itself
382 */
383
384 /* If length mismatch try alternate encoding */
385 if (i != (int)(dlen + diglen))
386 der = fips_digestinfo_nn_encoding(dtype, &dlen);
387
388 if ((i != (int)(dlen + diglen)) || memcmp(der, s, dlen)
389 || memcmp(s + dlen, dig, diglen))
390 {
391 RSAerr(RSA_F_FIPS_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
392 goto err;
393 }
394 ret = 1;
395
396 }
397 else if (pad_mode == EVP_MD_CTX_FLAG_PAD_PSS)
398 {
399 int saltlen;
400 saltlen = M_EVP_MD_CTX_FLAG_PSS_SALT(sv->mctx);
401 if (saltlen == EVP_MD_CTX_FLAG_PSS_MDLEN)
402 saltlen = -1;
403 else if (saltlen == EVP_MD_CTX_FLAG_PSS_MREC)
404 saltlen = -2;
405 ret = RSA_verify_PKCS1_PSS(rsa, dig, M_EVP_MD_CTX_md(sv->mctx),
406 s, saltlen);
407 if (ret < 0)
408 ret = 0;
409 }
410err:
411 if (s != NULL)
412 {
413 OPENSSL_cleanse(s, siglen);
414 OPENSSL_free(s);
415 }
416 return(ret);
417 }
418
419#define EVP_PKEY_RSA_fips_method \
420 (evp_sign_method *)fips_rsa_sign, \
421 (evp_verify_method *)fips_rsa_verify, \
422 {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
423
424static int init(EVP_MD_CTX *ctx)
425 { return SHA1_Init(ctx->md_data); }
426
427static int update(EVP_MD_CTX *ctx,const void *data,size_t count)
428 { return SHA1_Update(ctx->md_data,data,count); }
429
430static int final(EVP_MD_CTX *ctx,unsigned char *md)
431 { return SHA1_Final(md,ctx->md_data); }
432
433static const EVP_MD sha1_md=
434 {
435 NID_sha1,
436 NID_sha1WithRSAEncryption,
437 SHA_DIGEST_LENGTH,
438 EVP_MD_FLAG_FIPS|EVP_MD_FLAG_SVCTX,
439 init,
440 update,
441 final,
442 NULL,
443 NULL,
444 EVP_PKEY_RSA_fips_method,
445 SHA_CBLOCK,
446 sizeof(EVP_MD *)+sizeof(SHA_CTX),
447 };
448
449const EVP_MD *EVP_sha1(void)
450 {
451 return(&sha1_md);
452 }
453
454static int init224(EVP_MD_CTX *ctx)
455 { return SHA224_Init(ctx->md_data); }
456static int init256(EVP_MD_CTX *ctx)
457 { return SHA256_Init(ctx->md_data); }
458/*
459 * Even though there're separate SHA224_[Update|Final], we call
460 * SHA256 functions even in SHA224 context. This is what happens
461 * there anyway, so we can spare few CPU cycles:-)
462 */
463static int update256(EVP_MD_CTX *ctx,const void *data,size_t count)
464 { return SHA256_Update(ctx->md_data,data,count); }
465static int final256(EVP_MD_CTX *ctx,unsigned char *md)
466 { return SHA256_Final(md,ctx->md_data); }
467
468static const EVP_MD sha224_md=
469 {
470 NID_sha224,
471 NID_sha224WithRSAEncryption,
472 SHA224_DIGEST_LENGTH,
473 EVP_MD_FLAG_FIPS|EVP_MD_FLAG_SVCTX,
474 init224,
475 update256,
476 final256,
477 NULL,
478 NULL,
479 EVP_PKEY_RSA_fips_method,
480 SHA256_CBLOCK,
481 sizeof(EVP_MD *)+sizeof(SHA256_CTX),
482 };
483
484const EVP_MD *EVP_sha224(void)
485 { return(&sha224_md); }
486
487static const EVP_MD sha256_md=
488 {
489 NID_sha256,
490 NID_sha256WithRSAEncryption,
491 SHA256_DIGEST_LENGTH,
492 EVP_MD_FLAG_FIPS|EVP_MD_FLAG_SVCTX,
493 init256,
494 update256,
495 final256,
496 NULL,
497 NULL,
498 EVP_PKEY_RSA_fips_method,
499 SHA256_CBLOCK,
500 sizeof(EVP_MD *)+sizeof(SHA256_CTX),
501 };
502
503const EVP_MD *EVP_sha256(void)
504 { return(&sha256_md); }
505
506static int init384(EVP_MD_CTX *ctx)
507 { return SHA384_Init(ctx->md_data); }
508static int init512(EVP_MD_CTX *ctx)
509 { return SHA512_Init(ctx->md_data); }
510/* See comment in SHA224/256 section */
511static int update512(EVP_MD_CTX *ctx,const void *data,size_t count)
512 { return SHA512_Update(ctx->md_data,data,count); }
513static int final512(EVP_MD_CTX *ctx,unsigned char *md)
514 { return SHA512_Final(md,ctx->md_data); }
515
516static const EVP_MD sha384_md=
517 {
518 NID_sha384,
519 NID_sha384WithRSAEncryption,
520 SHA384_DIGEST_LENGTH,
521 EVP_MD_FLAG_FIPS|EVP_MD_FLAG_SVCTX,
522 init384,
523 update512,
524 final512,
525 NULL,
526 NULL,
527 EVP_PKEY_RSA_fips_method,
528 SHA512_CBLOCK,
529 sizeof(EVP_MD *)+sizeof(SHA512_CTX),
530 };
531
532const EVP_MD *EVP_sha384(void)
533 { return(&sha384_md); }
534
535static const EVP_MD sha512_md=
536 {
537 NID_sha512,
538 NID_sha512WithRSAEncryption,
539 SHA512_DIGEST_LENGTH,
540 EVP_MD_FLAG_FIPS|EVP_MD_FLAG_SVCTX,
541 init512,
542 update512,
543 final512,
544 NULL,
545 NULL,
546 EVP_PKEY_RSA_fips_method,
547 SHA512_CBLOCK,
548 sizeof(EVP_MD *)+sizeof(SHA512_CTX),
549 };
550
551const EVP_MD *EVP_sha512(void)
552 { return(&sha512_md); }
553
554#endif
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsa_x931g.c b/src/lib/libssl/src/fips/rsa/fips_rsa_x931g.c
new file mode 100644
index 0000000000..d9f9a81235
--- /dev/null
+++ b/src/lib/libssl/src/fips/rsa/fips_rsa_x931g.c
@@ -0,0 +1,280 @@
1/* crypto/rsa/rsa_gen.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 <string.h>
61#include <time.h>
62#include <openssl/err.h>
63#include <openssl/bn.h>
64#include <openssl/rsa.h>
65#include <openssl/fips.h>
66
67#ifdef OPENSSL_FIPS
68
69extern int fips_check_rsa(RSA *rsa);
70
71
72/* X9.31 RSA key derivation and generation */
73
74int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, BIGNUM *q2,
75 const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *Xp,
76 const BIGNUM *Xq1, const BIGNUM *Xq2, const BIGNUM *Xq,
77 const BIGNUM *e, BN_GENCB *cb)
78 {
79 BIGNUM *r0=NULL,*r1=NULL,*r2=NULL,*r3=NULL;
80 BN_CTX *ctx=NULL,*ctx2=NULL;
81
82 if (!rsa)
83 goto err;
84
85 ctx = BN_CTX_new();
86 BN_CTX_start(ctx);
87 if (!ctx)
88 goto err;
89
90 r0 = BN_CTX_get(ctx);
91 r1 = BN_CTX_get(ctx);
92 r2 = BN_CTX_get(ctx);
93 r3 = BN_CTX_get(ctx);
94
95 if (r3 == NULL)
96 goto err;
97 if (!rsa->e)
98 {
99 rsa->e = BN_dup(e);
100 if (!rsa->e)
101 goto err;
102 }
103 else
104 e = rsa->e;
105
106 /* If not all parameters present only calculate what we can.
107 * This allows test programs to output selective parameters.
108 */
109
110 if (Xp && !rsa->p)
111 {
112 rsa->p = BN_new();
113 if (!rsa->p)
114 goto err;
115
116 if (!BN_X931_derive_prime_ex(rsa->p, p1, p2,
117 Xp, Xp1, Xp2, e, ctx, cb))
118 goto err;
119 }
120
121 if (Xq && !rsa->q)
122 {
123 rsa->q = BN_new();
124 if (!rsa->q)
125 goto err;
126 if (!BN_X931_derive_prime_ex(rsa->q, q1, q2,
127 Xq, Xq1, Xq2, e, ctx, cb))
128 goto err;
129 }
130
131 if (!rsa->p || !rsa->q)
132 {
133 BN_CTX_end(ctx);
134 BN_CTX_free(ctx);
135 return 2;
136 }
137
138 /* Since both primes are set we can now calculate all remaining
139 * components.
140 */
141
142 /* calculate n */
143 rsa->n=BN_new();
144 if (rsa->n == NULL)
145 goto err;
146 if (!BN_mul(rsa->n,rsa->p,rsa->q,ctx))
147 goto err;
148
149 /* calculate d */
150 if (!BN_sub(r1,rsa->p,BN_value_one()))
151 goto err; /* p-1 */
152 if (!BN_sub(r2,rsa->q,BN_value_one()))
153 goto err; /* q-1 */
154 if (!BN_mul(r0,r1,r2,ctx))
155 goto err; /* (p-1)(q-1) */
156
157 if (!BN_gcd(r3, r1, r2, ctx))
158 goto err;
159
160 if (!BN_div(r0, NULL, r0, r3, ctx))
161 goto err; /* LCM((p-1)(q-1)) */
162
163 ctx2 = BN_CTX_new();
164 if (!ctx2)
165 goto err;
166
167 rsa->d=BN_mod_inverse(NULL,rsa->e,r0,ctx2); /* d */
168 if (rsa->d == NULL)
169 goto err;
170
171 /* calculate d mod (p-1) */
172 rsa->dmp1=BN_new();
173 if (rsa->dmp1 == NULL)
174 goto err;
175 if (!BN_mod(rsa->dmp1,rsa->d,r1,ctx))
176 goto err;
177
178 /* calculate d mod (q-1) */
179 rsa->dmq1=BN_new();
180 if (rsa->dmq1 == NULL)
181 goto err;
182 if (!BN_mod(rsa->dmq1,rsa->d,r2,ctx))
183 goto err;
184
185 /* calculate inverse of q mod p */
186 rsa->iqmp=BN_mod_inverse(NULL,rsa->q,rsa->p,ctx2);
187
188 err:
189 if (ctx)
190 {
191 BN_CTX_end(ctx);
192 BN_CTX_free(ctx);
193 }
194 if (ctx2)
195 BN_CTX_free(ctx2);
196 /* If this is set all calls successful */
197 if (rsa->iqmp != NULL)
198 return 1;
199
200 return 0;
201
202 }
203
204int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, BN_GENCB *cb)
205 {
206 int ok = 0;
207 BIGNUM *Xp = NULL, *Xq = NULL;
208 BN_CTX *ctx = NULL;
209
210 if (bits < OPENSSL_RSA_FIPS_MIN_MODULUS_BITS)
211 {
212 FIPSerr(FIPS_F_RSA_X931_GENERATE_KEY_EX,FIPS_R_KEY_TOO_SHORT);
213 return 0;
214 }
215
216 if (bits & 0xff)
217 {
218 FIPSerr(FIPS_F_RSA_X931_GENERATE_KEY_EX,FIPS_R_INVALID_KEY_LENGTH);
219 return 0;
220 }
221
222 if(FIPS_selftest_failed())
223 {
224 FIPSerr(FIPS_F_RSA_X931_GENERATE_KEY_EX,FIPS_R_FIPS_SELFTEST_FAILED);
225 return 0;
226 }
227
228 ctx = BN_CTX_new();
229 if (!ctx)
230 goto error;
231
232 BN_CTX_start(ctx);
233 Xp = BN_CTX_get(ctx);
234 Xq = BN_CTX_get(ctx);
235 if (!BN_X931_generate_Xpq(Xp, Xq, bits, ctx))
236 goto error;
237
238 rsa->p = BN_new();
239 rsa->q = BN_new();
240 if (!rsa->p || !rsa->q)
241 goto error;
242
243 /* Generate two primes from Xp, Xq */
244
245 if (!BN_X931_generate_prime_ex(rsa->p, NULL, NULL, NULL, NULL, Xp,
246 e, ctx, cb))
247 goto error;
248
249 if (!BN_X931_generate_prime_ex(rsa->q, NULL, NULL, NULL, NULL, Xq,
250 e, ctx, cb))
251 goto error;
252
253 /* Since rsa->p and rsa->q are valid this call will just derive
254 * remaining RSA components.
255 */
256
257 if (!RSA_X931_derive_ex(rsa, NULL, NULL, NULL, NULL,
258 NULL, NULL, NULL, NULL, NULL, NULL, e, cb))
259 goto error;
260
261 if(!fips_check_rsa(rsa))
262 goto error;
263
264 ok = 1;
265
266 error:
267 if (ctx)
268 {
269 BN_CTX_end(ctx);
270 BN_CTX_free(ctx);
271 }
272
273 if (ok)
274 return 1;
275
276 return 0;
277
278 }
279
280#endif
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsagtest.c b/src/lib/libssl/src/fips/rsa/fips_rsagtest.c
new file mode 100644
index 0000000000..33a3d7a48c
--- /dev/null
+++ b/src/lib/libssl/src/fips/rsa/fips_rsagtest.c
@@ -0,0 +1,390 @@
1/* fips_rsagtest.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2005.
4 */
5/* ====================================================================
6 * Copyright (c) 2005,2007 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#include <ctype.h>
61#include <string.h>
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/hmac.h>
65#include <openssl/err.h>
66#include <openssl/rsa.h>
67#include <openssl/bn.h>
68#include <openssl/x509v3.h>
69
70#ifndef OPENSSL_FIPS
71
72int main(int argc, char *argv[])
73{
74 printf("No FIPS RSA support\n");
75 return(0);
76}
77
78#else
79
80#include "fips_utl.h"
81
82int rsa_test(FILE *out, FILE *in);
83static int rsa_printkey1(FILE *out, RSA *rsa,
84 BIGNUM *Xp1, BIGNUM *Xp2, BIGNUM *Xp,
85 BIGNUM *e);
86static int rsa_printkey2(FILE *out, RSA *rsa,
87 BIGNUM *Xq1, BIGNUM *Xq2, BIGNUM *Xq);
88
89int main(int argc, char **argv)
90 {
91 FILE *in = NULL, *out = NULL;
92
93 int ret = 1;
94
95 if(!FIPS_mode_set(1))
96 {
97 do_print_errors();
98 goto end;
99 }
100
101 if (argc == 1)
102 in = stdin;
103 else
104 in = fopen(argv[1], "r");
105
106 if (argc < 2)
107 out = stdout;
108 else
109 out = fopen(argv[2], "w");
110
111 if (!in)
112 {
113 fprintf(stderr, "FATAL input initialization error\n");
114 goto end;
115 }
116
117 if (!out)
118 {
119 fprintf(stderr, "FATAL output initialization error\n");
120 goto end;
121 }
122
123 if (!rsa_test(out, in))
124 {
125 fprintf(stderr, "FATAL RSAGTEST file processing error\n");
126 goto end;
127 }
128 else
129 ret = 0;
130
131 end:
132
133 if (ret)
134 do_print_errors();
135
136 if (in && (in != stdin))
137 fclose(in);
138 if (out && (out != stdout))
139 fclose(out);
140
141 return ret;
142
143 }
144
145#define RSA_TEST_MAXLINELEN 10240
146
147int rsa_test(FILE *out, FILE *in)
148 {
149 char *linebuf, *olinebuf, *p, *q;
150 char *keyword, *value;
151 RSA *rsa = NULL;
152 BIGNUM *Xp1 = NULL, *Xp2 = NULL, *Xp = NULL;
153 BIGNUM *Xq1 = NULL, *Xq2 = NULL, *Xq = NULL;
154 BIGNUM *e = NULL;
155 int ret = 0;
156 int lnum = 0;
157
158 olinebuf = OPENSSL_malloc(RSA_TEST_MAXLINELEN);
159 linebuf = OPENSSL_malloc(RSA_TEST_MAXLINELEN);
160
161 if (!linebuf || !olinebuf)
162 goto error;
163
164 while (fgets(olinebuf, RSA_TEST_MAXLINELEN, in))
165 {
166 lnum++;
167 strcpy(linebuf, olinebuf);
168 keyword = linebuf;
169 /* Skip leading space */
170 while (isspace((unsigned char)*keyword))
171 keyword++;
172
173 /* Look for = sign */
174 p = strchr(linebuf, '=');
175
176 /* If no = or starts with [ (for [foo = bar] line) just copy */
177 if (!p || *keyword=='[')
178 {
179 if (fputs(olinebuf, out) < 0)
180 goto error;
181 continue;
182 }
183
184 q = p - 1;
185
186 /* Remove trailing space */
187 while (isspace((unsigned char)*q))
188 *q-- = 0;
189
190 *p = 0;
191 value = p + 1;
192
193 /* Remove leading space from value */
194 while (isspace((unsigned char)*value))
195 value++;
196
197 /* Remove trailing space from value */
198 p = value + strlen(value) - 1;
199
200 while (*p == '\n' || isspace((unsigned char)*p))
201 *p-- = 0;
202
203 if (!strcmp(keyword, "xp1"))
204 {
205 if (Xp1 || !do_hex2bn(&Xp1,value))
206 goto parse_error;
207 }
208 else if (!strcmp(keyword, "xp2"))
209 {
210 if (Xp2 || !do_hex2bn(&Xp2,value))
211 goto parse_error;
212 }
213 else if (!strcmp(keyword, "Xp"))
214 {
215 if (Xp || !do_hex2bn(&Xp,value))
216 goto parse_error;
217 }
218 else if (!strcmp(keyword, "xq1"))
219 {
220 if (Xq1 || !do_hex2bn(&Xq1,value))
221 goto parse_error;
222 }
223 else if (!strcmp(keyword, "xq2"))
224 {
225 if (Xq2 || !do_hex2bn(&Xq2,value))
226 goto parse_error;
227 }
228 else if (!strcmp(keyword, "Xq"))
229 {
230 if (Xq || !do_hex2bn(&Xq,value))
231 goto parse_error;
232 }
233 else if (!strcmp(keyword, "e"))
234 {
235 if (e || !do_hex2bn(&e,value))
236 goto parse_error;
237 }
238 else if (!strcmp(keyword, "p1"))
239 continue;
240 else if (!strcmp(keyword, "p2"))
241 continue;
242 else if (!strcmp(keyword, "p"))
243 continue;
244 else if (!strcmp(keyword, "q1"))
245 continue;
246 else if (!strcmp(keyword, "q2"))
247 continue;
248 else if (!strcmp(keyword, "q"))
249 continue;
250 else if (!strcmp(keyword, "n"))
251 continue;
252 else if (!strcmp(keyword, "d"))
253 continue;
254 else
255 goto parse_error;
256
257 fputs(olinebuf, out);
258
259 if (e && Xp1 && Xp2 && Xp)
260 {
261 rsa = FIPS_rsa_new();
262 if (!rsa)
263 goto error;
264 if (!rsa_printkey1(out, rsa, Xp1, Xp2, Xp, e))
265 goto error;
266 BN_free(Xp1);
267 Xp1 = NULL;
268 BN_free(Xp2);
269 Xp2 = NULL;
270 BN_free(Xp);
271 Xp = NULL;
272 BN_free(e);
273 e = NULL;
274 }
275
276 if (rsa && Xq1 && Xq2 && Xq)
277 {
278 if (!rsa_printkey2(out, rsa, Xq1, Xq2, Xq))
279 goto error;
280 BN_free(Xq1);
281 Xq1 = NULL;
282 BN_free(Xq2);
283 Xq2 = NULL;
284 BN_free(Xq);
285 Xq = NULL;
286 FIPS_rsa_free(rsa);
287 rsa = NULL;
288 }
289 }
290
291 ret = 1;
292
293 error:
294
295 if (olinebuf)
296 OPENSSL_free(olinebuf);
297 if (linebuf)
298 OPENSSL_free(linebuf);
299
300 if (Xp1)
301 BN_free(Xp1);
302 if (Xp2)
303 BN_free(Xp2);
304 if (Xp)
305 BN_free(Xp);
306 if (Xq1)
307 BN_free(Xq1);
308 if (Xq1)
309 BN_free(Xq1);
310 if (Xq2)
311 BN_free(Xq2);
312 if (Xq)
313 BN_free(Xq);
314 if (e)
315 BN_free(e);
316 if (rsa)
317 FIPS_rsa_free(rsa);
318
319 return ret;
320
321 parse_error:
322
323 fprintf(stderr, "FATAL parse error processing line %d\n", lnum);
324
325 goto error;
326
327 }
328
329static int rsa_printkey1(FILE *out, RSA *rsa,
330 BIGNUM *Xp1, BIGNUM *Xp2, BIGNUM *Xp,
331 BIGNUM *e)
332 {
333 int ret = 0;
334 BIGNUM *p1 = NULL, *p2 = NULL;
335 p1 = BN_new();
336 p2 = BN_new();
337 if (!p1 || !p2)
338 goto error;
339
340 if (!RSA_X931_derive_ex(rsa, p1, p2, NULL, NULL, Xp1, Xp2, Xp,
341 NULL, NULL, NULL, e, NULL))
342 goto error;
343
344 do_bn_print_name(out, "p1", p1);
345 do_bn_print_name(out, "p2", p2);
346 do_bn_print_name(out, "p", rsa->p);
347
348 ret = 1;
349
350 error:
351 if (p1)
352 BN_free(p1);
353 if (p2)
354 BN_free(p2);
355
356 return ret;
357 }
358
359static int rsa_printkey2(FILE *out, RSA *rsa,
360 BIGNUM *Xq1, BIGNUM *Xq2, BIGNUM *Xq)
361 {
362 int ret = 0;
363 BIGNUM *q1 = NULL, *q2 = NULL;
364 q1 = BN_new();
365 q2 = BN_new();
366 if (!q1 || !q2)
367 goto error;
368
369 if (!RSA_X931_derive_ex(rsa, NULL, NULL, q1, q2, NULL, NULL, NULL,
370 Xq1, Xq2, Xq, NULL, NULL))
371 goto error;
372
373 do_bn_print_name(out, "q1", q1);
374 do_bn_print_name(out, "q2", q2);
375 do_bn_print_name(out, "q", rsa->q);
376 do_bn_print_name(out, "n", rsa->n);
377 do_bn_print_name(out, "d", rsa->d);
378
379 ret = 1;
380
381 error:
382 if (q1)
383 BN_free(q1);
384 if (q2)
385 BN_free(q2);
386
387 return ret;
388 }
389
390#endif
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsastest.c b/src/lib/libssl/src/fips/rsa/fips_rsastest.c
new file mode 100644
index 0000000000..16c174a2f8
--- /dev/null
+++ b/src/lib/libssl/src/fips/rsa/fips_rsastest.c
@@ -0,0 +1,370 @@
1/* fips_rsastest.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2005.
4 */
5/* ====================================================================
6 * Copyright (c) 2005 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#include <ctype.h>
61#include <string.h>
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/hmac.h>
65#include <openssl/err.h>
66#include <openssl/rsa.h>
67#include <openssl/bn.h>
68#include <openssl/x509v3.h>
69
70#ifndef OPENSSL_FIPS
71
72int main(int argc, char *argv[])
73{
74 printf("No FIPS RSA support\n");
75 return(0);
76}
77
78#else
79
80#include "fips_utl.h"
81
82static int rsa_stest(FILE *out, FILE *in, int Saltlen);
83static int rsa_printsig(FILE *out, RSA *rsa, const EVP_MD *dgst,
84 unsigned char *Msg, long Msglen, int Saltlen);
85
86int main(int argc, char **argv)
87 {
88 FILE *in = NULL, *out = NULL;
89
90 int ret = 1, Saltlen = -1;
91
92 if(!FIPS_mode_set(1))
93 {
94 do_print_errors();
95 goto end;
96 }
97
98 if ((argc > 2) && !strcmp("-saltlen", argv[1]))
99 {
100 Saltlen = atoi(argv[2]);
101 if (Saltlen < 0)
102 {
103 fprintf(stderr, "FATAL: Invalid salt length\n");
104 goto end;
105 }
106 argc -= 2;
107 argv += 2;
108 }
109 else if ((argc > 1) && !strcmp("-x931", argv[1]))
110 {
111 Saltlen = -2;
112 argc--;
113 argv++;
114 }
115
116 if (argc == 1)
117 in = stdin;
118 else
119 in = fopen(argv[1], "r");
120
121 if (argc < 2)
122 out = stdout;
123 else
124 out = fopen(argv[2], "w");
125
126 if (!in)
127 {
128 fprintf(stderr, "FATAL input initialization error\n");
129 goto end;
130 }
131
132 if (!out)
133 {
134 fprintf(stderr, "FATAL output initialization error\n");
135 goto end;
136 }
137
138 if (!rsa_stest(out, in, Saltlen))
139 {
140 fprintf(stderr, "FATAL RSASTEST file processing error\n");
141 goto end;
142 }
143 else
144 ret = 0;
145
146 end:
147
148 if (ret)
149 do_print_errors();
150
151 if (in && (in != stdin))
152 fclose(in);
153 if (out && (out != stdout))
154 fclose(out);
155
156 return ret;
157
158 }
159
160#define RSA_TEST_MAXLINELEN 10240
161
162int rsa_stest(FILE *out, FILE *in, int Saltlen)
163 {
164 char *linebuf, *olinebuf, *p, *q;
165 char *keyword, *value;
166 RSA *rsa = NULL;
167 const EVP_MD *dgst = NULL;
168 unsigned char *Msg = NULL;
169 long Msglen = -1;
170 int keylen = -1, current_keylen = -1;
171 int ret = 0;
172 int lnum = 0;
173
174 olinebuf = OPENSSL_malloc(RSA_TEST_MAXLINELEN);
175 linebuf = OPENSSL_malloc(RSA_TEST_MAXLINELEN);
176
177 if (!linebuf || !olinebuf)
178 goto error;
179
180 while (fgets(olinebuf, RSA_TEST_MAXLINELEN, in))
181 {
182 lnum++;
183 strcpy(linebuf, olinebuf);
184 keyword = linebuf;
185 /* Skip leading space */
186 while (isspace((unsigned char)*keyword))
187 keyword++;
188
189 /* Look for = sign */
190 p = strchr(linebuf, '=');
191
192 /* If no = just copy */
193 if (!p)
194 {
195 if (fputs(olinebuf, out) < 0)
196 goto error;
197 continue;
198 }
199
200 q = p - 1;
201
202 /* Remove trailing space */
203 while (isspace((unsigned char)*q))
204 *q-- = 0;
205
206 *p = 0;
207 value = p + 1;
208
209 /* Remove leading space from value */
210 while (isspace((unsigned char)*value))
211 value++;
212
213 /* Remove trailing space from value */
214 p = value + strlen(value) - 1;
215
216 while (*p == '\n' || isspace((unsigned char)*p))
217 *p-- = 0;
218
219 /* Look for [mod = XXX] for key length */
220
221 if (!strcmp(keyword, "[mod"))
222 {
223 p = value + strlen(value) - 1;
224 if (*p != ']')
225 goto parse_error;
226 *p = 0;
227 keylen = atoi(value);
228 if (keylen < 0)
229 goto parse_error;
230 }
231 else if (!strcmp(keyword, "SHAAlg"))
232 {
233 if (!strcmp(value, "SHA1"))
234 dgst = EVP_sha1();
235 else if (!strcmp(value, "SHA224"))
236 dgst = EVP_sha224();
237 else if (!strcmp(value, "SHA256"))
238 dgst = EVP_sha256();
239 else if (!strcmp(value, "SHA384"))
240 dgst = EVP_sha384();
241 else if (!strcmp(value, "SHA512"))
242 dgst = EVP_sha512();
243 else
244 {
245 fprintf(stderr,
246 "FATAL: unsupported algorithm \"%s\"\n",
247 value);
248 goto parse_error;
249 }
250 }
251 else if (!strcmp(keyword, "Msg"))
252 {
253 if (Msg)
254 goto parse_error;
255 if (strlen(value) & 1)
256 *(--value) = '0';
257 Msg = hex2bin_m(value, &Msglen);
258 if (!Msg)
259 goto parse_error;
260 }
261
262 fputs(olinebuf, out);
263
264 /* If key length has changed, generate and output public
265 * key components of new RSA private key.
266 */
267
268 if (keylen != current_keylen)
269 {
270 BIGNUM *bn_e;
271 if (rsa)
272 FIPS_rsa_free(rsa);
273 rsa = FIPS_rsa_new();
274 if (!rsa)
275 goto error;
276 bn_e = BN_new();
277 if (!bn_e || !BN_set_word(bn_e, 0x1001))
278 goto error;
279 if (!RSA_X931_generate_key_ex(rsa, keylen, bn_e, NULL))
280 goto error;
281 BN_free(bn_e);
282 fputs("n = ", out);
283 do_bn_print(out, rsa->n);
284 fputs("\ne = ", out);
285 do_bn_print(out, rsa->e);
286 fputs("\n", out);
287 current_keylen = keylen;
288 }
289
290 if (Msg && dgst)
291 {
292 if (!rsa_printsig(out, rsa, dgst, Msg, Msglen,
293 Saltlen))
294 goto error;
295 OPENSSL_free(Msg);
296 Msg = NULL;
297 }
298
299 }
300
301 ret = 1;
302
303 error:
304
305 if (olinebuf)
306 OPENSSL_free(olinebuf);
307 if (linebuf)
308 OPENSSL_free(linebuf);
309 if (rsa)
310 FIPS_rsa_free(rsa);
311
312 return ret;
313
314 parse_error:
315
316 fprintf(stderr, "FATAL parse error processing line %d\n", lnum);
317
318 goto error;
319
320 }
321
322static int rsa_printsig(FILE *out, RSA *rsa, const EVP_MD *dgst,
323 unsigned char *Msg, long Msglen, int Saltlen)
324 {
325 int ret = 0;
326 unsigned char *sigbuf = NULL;
327 int i, siglen;
328 /* EVP_PKEY structure */
329 EVP_PKEY pk;
330 EVP_MD_CTX ctx;
331 pk.type = EVP_PKEY_RSA;
332 pk.pkey.rsa = rsa;
333
334 siglen = RSA_size(rsa);
335 sigbuf = OPENSSL_malloc(siglen);
336 if (!sigbuf)
337 goto error;
338
339 EVP_MD_CTX_init(&ctx);
340
341 if (Saltlen >= 0)
342 {
343 M_EVP_MD_CTX_set_flags(&ctx,
344 EVP_MD_CTX_FLAG_PAD_PSS | (Saltlen << 16));
345 }
346 else if (Saltlen == -2)
347 M_EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_PAD_X931);
348 if (!EVP_SignInit_ex(&ctx, dgst, NULL))
349 goto error;
350 if (!EVP_SignUpdate(&ctx, Msg, Msglen))
351 goto error;
352 if (!EVP_SignFinal(&ctx, sigbuf, (unsigned int *)&siglen, &pk))
353 goto error;
354
355 EVP_MD_CTX_cleanup(&ctx);
356
357 fputs("S = ", out);
358
359 for (i = 0; i < siglen; i++)
360 fprintf(out, "%02X", sigbuf[i]);
361
362 fputs("\n", out);
363
364 ret = 1;
365
366 error:
367
368 return ret;
369 }
370#endif
diff --git a/src/lib/libssl/src/fips/rsa/fips_rsavtest.c b/src/lib/libssl/src/fips/rsa/fips_rsavtest.c
new file mode 100644
index 0000000000..6340f190a3
--- /dev/null
+++ b/src/lib/libssl/src/fips/rsa/fips_rsavtest.c
@@ -0,0 +1,377 @@
1/* fips_rsavtest.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2005.
4 */
5/* ====================================================================
6 * Copyright (c) 2005 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#include <ctype.h>
61#include <string.h>
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/hmac.h>
65#include <openssl/err.h>
66#include <openssl/x509v3.h>
67#include <openssl/bn.h>
68#include <openssl/rsa.h>
69
70#ifndef OPENSSL_FIPS
71
72int main(int argc, char *argv[])
73{
74 printf("No FIPS RSA support\n");
75 return(0);
76}
77
78#else
79
80#include "fips_utl.h"
81
82int rsa_test(FILE *out, FILE *in, int saltlen);
83static int rsa_printver(FILE *out,
84 BIGNUM *n, BIGNUM *e,
85 const EVP_MD *dgst,
86 unsigned char *Msg, long Msglen,
87 unsigned char *S, long Slen, int Saltlen);
88
89int main(int argc, char **argv)
90 {
91 FILE *in = NULL, *out = NULL;
92
93 int ret = 1;
94 int Saltlen = -1;
95
96 if(!FIPS_mode_set(1))
97 {
98 do_print_errors();
99 goto end;
100 }
101
102 if ((argc > 2) && !strcmp("-saltlen", argv[1]))
103 {
104 Saltlen = atoi(argv[2]);
105 if (Saltlen < 0)
106 {
107 fprintf(stderr, "FATAL: Invalid salt length\n");
108 goto end;
109 }
110 argc -= 2;
111 argv += 2;
112 }
113 else if ((argc > 1) && !strcmp("-x931", argv[1]))
114 {
115 Saltlen = -2;
116 argc--;
117 argv++;
118 }
119
120 if (argc == 1)
121 in = stdin;
122 else
123 in = fopen(argv[1], "r");
124
125 if (argc < 2)
126 out = stdout;
127 else
128 out = fopen(argv[2], "w");
129
130 if (!in)
131 {
132 fprintf(stderr, "FATAL input initialization error\n");
133 goto end;
134 }
135
136 if (!out)
137 {
138 fprintf(stderr, "FATAL output initialization error\n");
139 goto end;
140 }
141
142 if (!rsa_test(out, in, Saltlen))
143 {
144 fprintf(stderr, "FATAL RSAVTEST file processing error\n");
145 goto end;
146 }
147 else
148 ret = 0;
149
150 end:
151
152 if (ret)
153 do_print_errors();
154
155 if (in && (in != stdin))
156 fclose(in);
157 if (out && (out != stdout))
158 fclose(out);
159
160 return ret;
161
162 }
163
164#define RSA_TEST_MAXLINELEN 10240
165
166int rsa_test(FILE *out, FILE *in, int Saltlen)
167 {
168 char *linebuf, *olinebuf, *p, *q;
169 char *keyword, *value;
170 const EVP_MD *dgst = NULL;
171 BIGNUM *n = NULL, *e = NULL;
172 unsigned char *Msg = NULL, *S = NULL;
173 long Msglen, Slen;
174 int ret = 0;
175 int lnum = 0;
176
177 olinebuf = OPENSSL_malloc(RSA_TEST_MAXLINELEN);
178 linebuf = OPENSSL_malloc(RSA_TEST_MAXLINELEN);
179
180 if (!linebuf || !olinebuf)
181 goto error;
182
183 while (fgets(olinebuf, RSA_TEST_MAXLINELEN, in))
184 {
185 lnum++;
186 strcpy(linebuf, olinebuf);
187 keyword = linebuf;
188 /* Skip leading space */
189 while (isspace((unsigned char)*keyword))
190 keyword++;
191
192 /* Look for = sign */
193 p = strchr(linebuf, '=');
194
195 /* If no = or starts with [ (for [foo = bar] line) just copy */
196 if (!p || *keyword=='[')
197 {
198 if (fputs(olinebuf, out) < 0)
199 goto error;
200 continue;
201 }
202
203 q = p - 1;
204
205 /* Remove trailing space */
206 while (isspace((unsigned char)*q))
207 *q-- = 0;
208
209 *p = 0;
210 value = p + 1;
211
212 /* Remove leading space from value */
213 while (isspace((unsigned char)*value))
214 value++;
215
216 /* Remove trailing space from value */
217 p = value + strlen(value) - 1;
218
219 while (*p == '\n' || isspace((unsigned char)*p))
220 *p-- = 0;
221
222 if (!strcmp(keyword, "n"))
223 {
224 if (!do_hex2bn(&n,value))
225 goto parse_error;
226 }
227 else if (!strcmp(keyword, "e"))
228 {
229 if (!do_hex2bn(&e,value))
230 goto parse_error;
231 }
232 else if (!strcmp(keyword, "SHAAlg"))
233 {
234 if (!strcmp(value, "SHA1"))
235 dgst = EVP_sha1();
236 else if (!strcmp(value, "SHA224"))
237 dgst = EVP_sha224();
238 else if (!strcmp(value, "SHA256"))
239 dgst = EVP_sha256();
240 else if (!strcmp(value, "SHA384"))
241 dgst = EVP_sha384();
242 else if (!strcmp(value, "SHA512"))
243 dgst = EVP_sha512();
244 else
245 {
246 fprintf(stderr,
247 "FATAL: unsupported algorithm \"%s\"\n",
248 value);
249 goto parse_error;
250 }
251 }
252 else if (!strcmp(keyword, "Msg"))
253 {
254 if (Msg)
255 goto parse_error;
256 if (strlen(value) & 1)
257 *(--value) = '0';
258 Msg = hex2bin_m(value, &Msglen);
259 if (!Msg)
260 goto parse_error;
261 }
262 else if (!strcmp(keyword, "S"))
263 {
264 if (S)
265 goto parse_error;
266 if (strlen(value) & 1)
267 *(--value) = '0';
268 S = hex2bin_m(value, &Slen);
269 if (!S)
270 goto parse_error;
271 }
272 else if (!strcmp(keyword, "Result"))
273 continue;
274 else
275 goto parse_error;
276
277 fputs(olinebuf, out);
278
279 if (n && e && Msg && S && dgst)
280 {
281 if (!rsa_printver(out, n, e, dgst,
282 Msg, Msglen, S, Slen, Saltlen))
283 goto error;
284 OPENSSL_free(Msg);
285 Msg = NULL;
286 OPENSSL_free(S);
287 S = NULL;
288 }
289
290 }
291
292
293 ret = 1;
294
295
296 error:
297
298 if (olinebuf)
299 OPENSSL_free(olinebuf);
300 if (linebuf)
301 OPENSSL_free(linebuf);
302 if (n)
303 BN_free(n);
304 if (e)
305 BN_free(e);
306
307 return ret;
308
309 parse_error:
310
311 fprintf(stderr, "FATAL parse error processing line %d\n", lnum);
312
313 goto error;
314
315 }
316
317static int rsa_printver(FILE *out,
318 BIGNUM *n, BIGNUM *e,
319 const EVP_MD *dgst,
320 unsigned char *Msg, long Msglen,
321 unsigned char *S, long Slen, int Saltlen)
322 {
323 int ret = 0, r;
324 /* Setup RSA and EVP_PKEY structures */
325 RSA *rsa_pubkey = NULL;
326 EVP_PKEY pk;
327 EVP_MD_CTX ctx;
328 unsigned char *buf = NULL;
329 rsa_pubkey = FIPS_rsa_new();
330 if (!rsa_pubkey)
331 goto error;
332 rsa_pubkey->n = BN_dup(n);
333 rsa_pubkey->e = BN_dup(e);
334 if (!rsa_pubkey->n || !rsa_pubkey->e)
335 goto error;
336 pk.type = EVP_PKEY_RSA;
337 pk.pkey.rsa = rsa_pubkey;
338
339 EVP_MD_CTX_init(&ctx);
340
341 if (Saltlen >= 0)
342 {
343 M_EVP_MD_CTX_set_flags(&ctx,
344 EVP_MD_CTX_FLAG_PAD_PSS | (Saltlen << 16));
345 }
346 else if (Saltlen == -2)
347 M_EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_PAD_X931);
348 if (!EVP_VerifyInit_ex(&ctx, dgst, NULL))
349 goto error;
350 if (!EVP_VerifyUpdate(&ctx, Msg, Msglen))
351 goto error;
352
353 r = EVP_VerifyFinal(&ctx, S, Slen, &pk);
354
355
356 EVP_MD_CTX_cleanup(&ctx);
357
358 if (r < 0)
359 goto error;
360 ERR_clear_error();
361
362 if (r == 0)
363 fputs("Result = F\n", out);
364 else
365 fputs("Result = P\n", out);
366
367 ret = 1;
368
369 error:
370 if (rsa_pubkey)
371 FIPS_rsa_free(rsa_pubkey);
372 if (buf)
373 OPENSSL_free(buf);
374
375 return ret;
376 }
377#endif
diff --git a/src/lib/libssl/src/fips/sha/Makefile b/src/lib/libssl/src/fips/sha/Makefile
new file mode 100644
index 0000000000..a661640bc6
--- /dev/null
+++ b/src/lib/libssl/src/fips/sha/Makefile
@@ -0,0 +1,158 @@
1#
2# OpenSSL/fips/sha/Makefile
3#
4
5DIR= sha
6TOP= ../..
7CC= cc
8INCLUDES=
9CFLAG=-g
10INSTALL_PREFIX=
11OPENSSLDIR= /usr/local/ssl
12INSTALLTOP=/usr/local/ssl
13MAKEDEPPROG= makedepend
14MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
15MAKEFILE= Makefile
16AR= ar r
17EXE_EXT=
18
19ASFLAGS= $(INCLUDES) $(ASFLAG)
20AFLAGS= $(ASFLAGS)
21
22CFLAGS= $(INCLUDES) $(CFLAG)
23
24GENERAL=Makefile
25TEST= fips_shatest.c
26APPS=
27EXE= fips_standalone_sha1$(EXE_EXT)
28
29LIB=$(TOP)/libcrypto.a
30LIBSRC=fips_sha1_selftest.c
31LIBOBJ=fips_sha1_selftest.o
32
33SRC= $(LIBSRC) fips_standalone_sha1.c
34
35EXHEADER=
36HEADER=
37
38ALL= $(GENERAL) $(SRC) $(HEADER)
39
40top:
41 (cd $(TOP); $(MAKE) DIRS=fips SDIRS=$(DIR) sub_all)
42
43all: ../fips_standalone_sha1$(EXE_EXT) lib
44
45lib: $(LIBOBJ)
46 @echo $(LIBOBJ) > lib
47
48../fips_standalone_sha1$(EXE_EXT): fips_standalone_sha1.o
49 FIPS_SHA_ASM=""; for i in $(SHA1_ASM_OBJ) sha1dgst.o ; do FIPS_SHA_ASM="$$FIPS_SHA_ASM ../../crypto/sha/$$i" ; done; \
50 $(CC) -o $@ $(CFLAGS) fips_standalone_sha1.o $$FIPS_SHA_ASM
51
52files:
53 $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
54
55links:
56 @$(PERL) $(TOP)/util/mklink.pl $(TOP)/include/openssl $(EXHEADER)
57 @$(PERL) $(TOP)/util/mklink.pl $(TOP)/test $(TEST)
58 @$(PERL) $(TOP)/util/mklink.pl $(TOP)/apps $(APPS)
59
60install:
61 @headerlist="$(EXHEADER)"; for i in $$headerlist; \
62 do \
63 (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
64 chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
65 done
66
67tags:
68 ctags $(SRC)
69
70tests:
71
72Q=../testvectors/sha/req
73A=../testvectors/sha/rsp
74
75VECTORS = SHA1LongMsg \
76 SHA1Monte \
77 SHA1ShortMsg \
78 SHA224LongMsg \
79 SHA224Monte \
80 SHA224ShortMsg \
81 SHA256LongMsg \
82 SHA256Monte \
83 SHA256ShortMsg \
84 SHA384LongMsg \
85 SHA384Monte \
86 SHA384ShortMsg \
87 SHA512LongMsg \
88 SHA512Monte \
89 SHA512ShortMsg
90
91fips_test:
92 -rm -rf $(A)
93 mkdir $(A)
94 for file in $(VECTORS); do \
95 if [ -f $(Q)/$$file.req ]; then \
96 $(TOP)/util/shlib_wrap.sh $(TOP)/test/fips_shatest $(Q)/$$file.req $(A)/$$file.rsp; \
97 fi; \
98 done
99
100lint:
101 lint -DLINT $(INCLUDES) $(SRC)>fluff
102
103depend:
104 $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(SRC) $(TEST)
105
106dclean:
107 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
108 mv -f Makefile.new $(MAKEFILE)
109
110clean:
111 rm -f *.o asm/*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff $(EXE)
112
113# DO NOT DELETE THIS LINE -- make depend depends on it.
114
115fips_sha1_selftest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
116fips_sha1_selftest.o: ../../include/openssl/crypto.h
117fips_sha1_selftest.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
118fips_sha1_selftest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
119fips_sha1_selftest.o: ../../include/openssl/lhash.h
120fips_sha1_selftest.o: ../../include/openssl/obj_mac.h
121fips_sha1_selftest.o: ../../include/openssl/objects.h
122fips_sha1_selftest.o: ../../include/openssl/opensslconf.h
123fips_sha1_selftest.o: ../../include/openssl/opensslv.h
124fips_sha1_selftest.o: ../../include/openssl/ossl_typ.h
125fips_sha1_selftest.o: ../../include/openssl/safestack.h
126fips_sha1_selftest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
127fips_sha1_selftest.o: ../../include/openssl/symhacks.h fips_sha1_selftest.c
128fips_shatest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
129fips_shatest.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
130fips_shatest.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
131fips_shatest.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
132fips_shatest.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
133fips_shatest.o: ../../include/openssl/err.h ../../include/openssl/evp.h
134fips_shatest.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
135fips_shatest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
136fips_shatest.o: ../../include/openssl/opensslconf.h
137fips_shatest.o: ../../include/openssl/opensslv.h
138fips_shatest.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
139fips_shatest.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
140fips_shatest.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
141fips_shatest.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
142fips_shatest.o: ../../include/openssl/x509v3.h ../fips_utl.h fips_shatest.c
143fips_standalone_sha1.o: ../../include/openssl/asn1.h
144fips_standalone_sha1.o: ../../include/openssl/bio.h
145fips_standalone_sha1.o: ../../include/openssl/crypto.h
146fips_standalone_sha1.o: ../../include/openssl/e_os2.h
147fips_standalone_sha1.o: ../../include/openssl/evp.h
148fips_standalone_sha1.o: ../../include/openssl/fips.h
149fips_standalone_sha1.o: ../../include/openssl/hmac.h
150fips_standalone_sha1.o: ../../include/openssl/obj_mac.h
151fips_standalone_sha1.o: ../../include/openssl/objects.h
152fips_standalone_sha1.o: ../../include/openssl/opensslconf.h
153fips_standalone_sha1.o: ../../include/openssl/opensslv.h
154fips_standalone_sha1.o: ../../include/openssl/ossl_typ.h
155fips_standalone_sha1.o: ../../include/openssl/safestack.h
156fips_standalone_sha1.o: ../../include/openssl/sha.h
157fips_standalone_sha1.o: ../../include/openssl/stack.h
158fips_standalone_sha1.o: ../../include/openssl/symhacks.h fips_standalone_sha1.c
diff --git a/src/lib/libssl/src/fips/sha/fips_sha1_selftest.c b/src/lib/libssl/src/fips/sha/fips_sha1_selftest.c
new file mode 100644
index 0000000000..ba6a29ed94
--- /dev/null
+++ b/src/lib/libssl/src/fips/sha/fips_sha1_selftest.c
@@ -0,0 +1,97 @@
1/* ====================================================================
2 * Copyright (c) 2003 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 *
48 */
49
50#include <string.h>
51#include <openssl/err.h>
52#include <openssl/fips.h>
53#include <openssl/evp.h>
54#include <openssl/sha.h>
55
56#ifdef OPENSSL_FIPS
57static char test[][60]=
58 {
59 "",
60 "abc",
61 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
62 };
63
64static const unsigned char ret[][SHA_DIGEST_LENGTH]=
65 {
66 { 0xda,0x39,0xa3,0xee,0x5e,0x6b,0x4b,0x0d,0x32,0x55,
67 0xbf,0xef,0x95,0x60,0x18,0x90,0xaf,0xd8,0x07,0x09 },
68 { 0xa9,0x99,0x3e,0x36,0x47,0x06,0x81,0x6a,0xba,0x3e,
69 0x25,0x71,0x78,0x50,0xc2,0x6c,0x9c,0xd0,0xd8,0x9d },
70 { 0x84,0x98,0x3e,0x44,0x1c,0x3b,0xd2,0x6e,0xba,0xae,
71 0x4a,0xa1,0xf9,0x51,0x29,0xe5,0xe5,0x46,0x70,0xf1 },
72 };
73
74void FIPS_corrupt_sha1()
75 {
76 test[2][0]++;
77 }
78
79int FIPS_selftest_sha1()
80 {
81 int n;
82
83 for(n=0 ; n<sizeof(test)/sizeof(test[0]) ; ++n)
84 {
85 unsigned char md[SHA_DIGEST_LENGTH];
86
87 EVP_Digest(test[n],strlen(test[n]),md, NULL, EVP_sha1(), NULL);
88 if(memcmp(md,ret[n],sizeof md))
89 {
90 FIPSerr(FIPS_F_FIPS_SELFTEST_SHA1,FIPS_R_SELFTEST_FAILED);
91 return 0;
92 }
93 }
94 return 1;
95 }
96
97#endif
diff --git a/src/lib/libssl/src/fips/sha/fips_shatest.c b/src/lib/libssl/src/fips/sha/fips_shatest.c
new file mode 100644
index 0000000000..ae5ecdd2be
--- /dev/null
+++ b/src/lib/libssl/src/fips/sha/fips_shatest.c
@@ -0,0 +1,388 @@
1/* fips_shatest.c */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2005.
4 */
5/* ====================================================================
6 * Copyright (c) 2005 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#include <ctype.h>
61#include <string.h>
62#include <openssl/bio.h>
63#include <openssl/evp.h>
64#include <openssl/err.h>
65#include <openssl/bn.h>
66#include <openssl/x509v3.h>
67
68#ifndef OPENSSL_FIPS
69
70int main(int argc, char *argv[])
71{
72 printf("No FIPS SHAXXX support\n");
73 return(0);
74}
75
76#else
77
78#include "fips_utl.h"
79
80static int dgst_test(FILE *out, FILE *in);
81static int print_dgst(const EVP_MD *md, FILE *out,
82 unsigned char *Msg, int Msglen);
83static int print_monte(const EVP_MD *md, FILE *out,
84 unsigned char *Seed, int SeedLen);
85
86int main(int argc, char **argv)
87 {
88 FILE *in = NULL, *out = NULL;
89
90 int ret = 1;
91
92 if(!FIPS_mode_set(1))
93 {
94 do_print_errors();
95 goto end;
96 }
97
98 if (argc == 1)
99 in = stdin;
100 else
101 in = fopen(argv[1], "r");
102
103 if (argc < 2)
104 out = stdout;
105 else
106 out = fopen(argv[2], "w");
107
108 if (!in)
109 {
110 fprintf(stderr, "FATAL input initialization error\n");
111 goto end;
112 }
113
114 if (!out)
115 {
116 fprintf(stderr, "FATAL output initialization error\n");
117 goto end;
118 }
119
120 if (!dgst_test(out, in))
121 {
122 fprintf(stderr, "FATAL digest file processing error\n");
123 goto end;
124 }
125 else
126 ret = 0;
127
128 end:
129
130 if (ret)
131 do_print_errors();
132
133 if (in && (in != stdin))
134 fclose(in);
135 if (out && (out != stdout))
136 fclose(out);
137
138 return ret;
139
140 }
141
142#define SHA_TEST_MAX_BITS 102400
143#define SHA_TEST_MAXLINELEN (((SHA_TEST_MAX_BITS >> 3) * 2) + 100)
144
145int dgst_test(FILE *out, FILE *in)
146 {
147 const EVP_MD *md = NULL;
148 char *linebuf, *olinebuf, *p, *q;
149 char *keyword, *value;
150 unsigned char *Msg = NULL, *Seed = NULL;
151 long MsgLen = -1, Len = -1, SeedLen = -1;
152 int ret = 0;
153 int lnum = 0;
154
155 olinebuf = OPENSSL_malloc(SHA_TEST_MAXLINELEN);
156 linebuf = OPENSSL_malloc(SHA_TEST_MAXLINELEN);
157
158 if (!linebuf || !olinebuf)
159 goto error;
160
161
162 while (fgets(olinebuf, SHA_TEST_MAXLINELEN, in))
163 {
164 lnum++;
165 strcpy(linebuf, olinebuf);
166 keyword = linebuf;
167 /* Skip leading space */
168 while (isspace((unsigned char)*keyword))
169 keyword++;
170
171 /* Look for = sign */
172 p = strchr(linebuf, '=');
173
174 /* If no = or starts with [ (for [L=20] line) just copy */
175 if (!p)
176 {
177 fputs(olinebuf, out);
178 continue;
179 }
180
181 q = p - 1;
182
183 /* Remove trailing space */
184 while (isspace((unsigned char)*q))
185 *q-- = 0;
186
187 *p = 0;
188 value = p + 1;
189
190 /* Remove leading space from value */
191 while (isspace((unsigned char)*value))
192 value++;
193
194 /* Remove trailing space from value */
195 p = value + strlen(value) - 1;
196 while (*p == '\n' || isspace((unsigned char)*p))
197 *p-- = 0;
198
199 if (!strcmp(keyword,"[L") && *p==']')
200 {
201 switch (atoi(value))
202 {
203 case 20: md=EVP_sha1(); break;
204 case 28: md=EVP_sha224(); break;
205 case 32: md=EVP_sha256(); break;
206 case 48: md=EVP_sha384(); break;
207 case 64: md=EVP_sha512(); break;
208 default: goto parse_error;
209 }
210 }
211 else if (!strcmp(keyword, "Len"))
212 {
213 if (Len != -1)
214 goto parse_error;
215 Len = atoi(value);
216 if (Len < 0)
217 goto parse_error;
218 /* Only handle multiples of 8 bits */
219 if (Len & 0x7)
220 goto parse_error;
221 if (Len > SHA_TEST_MAX_BITS)
222 goto parse_error;
223 MsgLen = Len >> 3;
224 }
225
226 else if (!strcmp(keyword, "Msg"))
227 {
228 long tmplen;
229 if (strlen(value) & 1)
230 *(--value) = '0';
231 if (Msg)
232 goto parse_error;
233 Msg = hex2bin_m(value, &tmplen);
234 if (!Msg)
235 goto parse_error;
236 }
237 else if (!strcmp(keyword, "Seed"))
238 {
239 if (strlen(value) & 1)
240 *(--value) = '0';
241 if (Seed)
242 goto parse_error;
243 Seed = hex2bin_m(value, &SeedLen);
244 if (!Seed)
245 goto parse_error;
246 }
247 else if (!strcmp(keyword, "MD"))
248 continue;
249 else
250 goto parse_error;
251
252 fputs(olinebuf, out);
253
254 if (md && Msg && (MsgLen >= 0))
255 {
256 if (!print_dgst(md, out, Msg, MsgLen))
257 goto error;
258 OPENSSL_free(Msg);
259 Msg = NULL;
260 MsgLen = -1;
261 Len = -1;
262 }
263 else if (md && Seed && (SeedLen > 0))
264 {
265 if (!print_monte(md, out, Seed, SeedLen))
266 goto error;
267 OPENSSL_free(Seed);
268 Seed = NULL;
269 SeedLen = -1;
270 }
271
272
273 }
274
275
276 ret = 1;
277
278
279 error:
280
281 if (olinebuf)
282 OPENSSL_free(olinebuf);
283 if (linebuf)
284 OPENSSL_free(linebuf);
285 if (Msg)
286 OPENSSL_free(Msg);
287 if (Seed)
288 OPENSSL_free(Seed);
289
290 return ret;
291
292 parse_error:
293
294 fprintf(stderr, "FATAL parse error processing line %d\n", lnum);
295
296 goto error;
297
298 }
299
300static int print_dgst(const EVP_MD *emd, FILE *out,
301 unsigned char *Msg, int Msglen)
302 {
303 int i, mdlen;
304 unsigned char md[EVP_MAX_MD_SIZE];
305 if (!EVP_Digest(Msg, Msglen, md, (unsigned int *)&mdlen, emd, NULL))
306 {
307 fputs("Error calculating HASH\n", stderr);
308 return 0;
309 }
310 fputs("MD = ", out);
311 for (i = 0; i < mdlen; i++)
312 fprintf(out, "%02x", md[i]);
313 fputs("\n", out);
314 return 1;
315 }
316
317static int print_monte(const EVP_MD *md, FILE *out,
318 unsigned char *Seed, int SeedLen)
319 {
320 unsigned int i, j, k;
321 int ret = 0;
322 EVP_MD_CTX ctx;
323 unsigned char *m1, *m2, *m3, *p;
324 unsigned int mlen, m1len, m2len, m3len;
325
326 EVP_MD_CTX_init(&ctx);
327
328 if (SeedLen > EVP_MAX_MD_SIZE)
329 mlen = SeedLen;
330 else
331 mlen = EVP_MAX_MD_SIZE;
332
333 m1 = OPENSSL_malloc(mlen);
334 m2 = OPENSSL_malloc(mlen);
335 m3 = OPENSSL_malloc(mlen);
336
337 if (!m1 || !m2 || !m3)
338 goto mc_error;
339
340 m1len = m2len = m3len = SeedLen;
341 memcpy(m1, Seed, SeedLen);
342 memcpy(m2, Seed, SeedLen);
343 memcpy(m3, Seed, SeedLen);
344
345 fputs("\n", out);
346
347 for (j = 0; j < 100; j++)
348 {
349 for (i = 0; i < 1000; i++)
350 {
351 EVP_DigestInit_ex(&ctx, md, NULL);
352 EVP_DigestUpdate(&ctx, m1, m1len);
353 EVP_DigestUpdate(&ctx, m2, m2len);
354 EVP_DigestUpdate(&ctx, m3, m3len);
355 p = m1;
356 m1 = m2;
357 m1len = m2len;
358 m2 = m3;
359 m2len = m3len;
360 m3 = p;
361 EVP_DigestFinal_ex(&ctx, m3, &m3len);
362 }
363 fprintf(out, "COUNT = %d\n", j);
364 fputs("MD = ", out);
365 for (k = 0; k < m3len; k++)
366 fprintf(out, "%02x", m3[k]);
367 fputs("\n\n", out);
368 memcpy(m1, m3, m3len);
369 memcpy(m2, m3, m3len);
370 m1len = m2len = m3len;
371 }
372
373 ret = 1;
374
375 mc_error:
376 if (m1)
377 OPENSSL_free(m1);
378 if (m2)
379 OPENSSL_free(m2);
380 if (m3)
381 OPENSSL_free(m3);
382
383 EVP_MD_CTX_cleanup(&ctx);
384
385 return ret;
386 }
387
388#endif
diff --git a/src/lib/libssl/src/fips/sha/fips_standalone_sha1.c b/src/lib/libssl/src/fips/sha/fips_standalone_sha1.c
new file mode 100644
index 0000000000..058b71a20f
--- /dev/null
+++ b/src/lib/libssl/src/fips/sha/fips_standalone_sha1.c
@@ -0,0 +1,173 @@
1/* ====================================================================
2 * Copyright (c) 2003 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 *
48 */
49
50#include <stdio.h>
51#include <stdlib.h>
52#include <string.h>
53#include <openssl/opensslconf.h>
54#include <openssl/sha.h>
55#include <openssl/hmac.h>
56
57#ifndef FIPSCANISTER_O
58int FIPS_selftest_failed() { return 0; }
59void FIPS_selftest_check() {}
60void OPENSSL_cleanse(void *p,size_t len) {}
61#endif
62
63#ifdef OPENSSL_FIPS
64
65static void hmac_init(SHA_CTX *md_ctx,SHA_CTX *o_ctx,
66 const char *key)
67 {
68 int len=strlen(key);
69 int i;
70 unsigned char keymd[HMAC_MAX_MD_CBLOCK];
71 unsigned char pad[HMAC_MAX_MD_CBLOCK];
72
73 if (len > SHA_CBLOCK)
74 {
75 SHA1_Init(md_ctx);
76 SHA1_Update(md_ctx,key,len);
77 SHA1_Final(keymd,md_ctx);
78 len=20;
79 }
80 else
81 memcpy(keymd,key,len);
82 memset(&keymd[len],'\0',HMAC_MAX_MD_CBLOCK-len);
83
84 for(i=0 ; i < HMAC_MAX_MD_CBLOCK ; i++)
85 pad[i]=0x36^keymd[i];
86 SHA1_Init(md_ctx);
87 SHA1_Update(md_ctx,pad,SHA_CBLOCK);
88
89 for(i=0 ; i < HMAC_MAX_MD_CBLOCK ; i++)
90 pad[i]=0x5c^keymd[i];
91 SHA1_Init(o_ctx);
92 SHA1_Update(o_ctx,pad,SHA_CBLOCK);
93 }
94
95static void hmac_final(unsigned char *md,SHA_CTX *md_ctx,SHA_CTX *o_ctx)
96 {
97 unsigned char buf[20];
98
99 SHA1_Final(buf,md_ctx);
100 SHA1_Update(o_ctx,buf,sizeof buf);
101 SHA1_Final(md,o_ctx);
102 }
103
104#endif
105
106int main(int argc,char **argv)
107 {
108#ifdef OPENSSL_FIPS
109 static char key[]="etaonrishdlcupfm";
110 int n,binary=0;
111
112 if(argc < 2)
113 {
114 fprintf(stderr,"%s [<file>]+\n",argv[0]);
115 exit(1);
116 }
117
118 n=1;
119 if (!strcmp(argv[n],"-binary"))
120 {
121 n++;
122 binary=1; /* emit binary fingerprint... */
123 }
124
125 for(; n < argc ; ++n)
126 {
127 FILE *f=fopen(argv[n],"rb");
128 SHA_CTX md_ctx,o_ctx;
129 unsigned char md[20];
130 int i;
131
132 if(!f)
133 {
134 perror(argv[n]);
135 exit(2);
136 }
137
138 hmac_init(&md_ctx,&o_ctx,key);
139 for( ; ; )
140 {
141 char buf[1024];
142 int l=fread(buf,1,sizeof buf,f);
143
144 if(l == 0)
145 {
146 if(ferror(f))
147 {
148 perror(argv[n]);
149 exit(3);
150 }
151 else
152 break;
153 }
154 SHA1_Update(&md_ctx,buf,l);
155 }
156 hmac_final(md,&md_ctx,&o_ctx);
157
158 if (binary)
159 {
160 fwrite(md,20,1,stdout);
161 break; /* ... for single(!) file */
162 }
163
164 printf("HMAC-SHA1(%s)= ",argv[n]);
165 for(i=0 ; i < 20 ; ++i)
166 printf("%02x",md[i]);
167 printf("\n");
168 }
169#endif
170 return 0;
171 }
172
173
diff --git a/src/lib/libssl/src/ms/do_fips.bat b/src/lib/libssl/src/ms/do_fips.bat
new file mode 100644
index 0000000000..8d27eb05bd
--- /dev/null
+++ b/src/lib/libssl/src/ms/do_fips.bat
@@ -0,0 +1,204 @@
1@echo off
2
3SET ASM=%1
4
5if NOT X%PROCESSOR_ARCHITECTURE% == X goto defined
6
7echo Processor Architecture Undefined: defaulting to X86
8
9goto X86
10
11:defined
12
13if %PROCESSOR_ARCHITECTURE% == x86 goto X86
14
15if %PROCESSOR_ARCHITECTURE% == IA64 goto IA64
16
17if %PROCESSOR_ARCHITECTURE% == AMD64 goto AMD64
18
19echo Processor Architecture Unrecognized: defaulting to X86
20
21:X86
22echo Auto Configuring for X86
23
24SET TARGET=VC-WIN32
25
26if x%ASM% == xno-asm goto compile
27echo Generating x86 for NASM assember
28SET ASM=nasm
29SET ASMOPTS=-DOPENSSL_IA32_SSE2
30
31echo Bignum
32cd crypto\bn\asm
33perl bn-586.pl win32n %ASMOPTS% > bn_win32.asm
34if ERRORLEVEL 1 goto error
35perl co-586.pl win32n %ASMOPTS% > co_win32.asm
36if ERRORLEVEL 1 goto error
37perl mo-586.pl win32n %ASMOPTS% > mt_win32.asm
38if ERRORLEVEL 1 goto error
39cd ..\..\..
40
41echo AES
42cd crypto\aes\asm
43perl aes-586.pl win32n %ASMOPTS% > a_win32.asm
44if ERRORLEVEL 1 goto error
45cd ..\..\..
46
47echo DES
48cd crypto\des\asm
49perl des-586.pl win32n %ASMOPTS% > d_win32.asm
50if ERRORLEVEL 1 goto error
51cd ..\..\..
52
53echo "crypt(3)"
54
55cd crypto\des\asm
56perl crypt586.pl win32n %ASMOPTS% > y_win32.asm
57if ERRORLEVEL 1 goto error
58cd ..\..\..
59
60echo Blowfish
61
62cd crypto\bf\asm
63perl bf-586.pl win32n %ASMOPTS% > b_win32.asm
64if ERRORLEVEL 1 goto error
65cd ..\..\..
66
67echo CAST5
68cd crypto\cast\asm
69perl cast-586.pl win32n %ASMOPTS% > c_win32.asm
70if ERRORLEVEL 1 goto error
71cd ..\..\..
72
73echo RC4
74cd crypto\rc4\asm
75perl rc4-586.pl win32n %ASMOPTS% > r4_win32.asm
76if ERRORLEVEL 1 goto error
77cd ..\..\..
78
79echo MD5
80cd crypto\md5\asm
81perl md5-586.pl win32n %ASMOPTS% > m5_win32.asm
82if ERRORLEVEL 1 goto error
83cd ..\..\..
84
85echo SHA1
86cd crypto\sha\asm
87perl sha1-586.pl win32n %ASMOPTS% > s1_win32.asm
88if ERRORLEVEL 1 goto error
89perl sha512-sse2.pl win32n %ASMOPTS% > sha512-sse2.asm
90if ERRORLEVEL 1 goto error
91cd ..\..\..
92
93echo RIPEMD160
94cd crypto\ripemd\asm
95perl rmd-586.pl win32n %ASMOPTS% > rm_win32.asm
96if ERRORLEVEL 1 goto error
97cd ..\..\..
98
99echo RC5\32
100cd crypto\rc5\asm
101perl rc5-586.pl win32n %ASMOPTS% > r5_win32.asm
102if ERRORLEVEL 1 goto error
103cd ..\..\..
104
105echo CPU-ID
106cd crypto
107perl x86cpuid.pl win32n %ASMOPTS% > cpu_win32.asm
108if ERRORLEVEL 1 goto error
109cd ..
110
111goto compile
112
113:IA64
114
115echo Auto Configuring for IA64
116SET TARGET=VC-WIN64I
117perl ms\uplink.pl win64i > ms\uptable.asm
118if ERRORLEVEL 1 goto error
119ias -o ms\uptable.obj ms\uptable.asm
120if ERRORLEVEL 1 goto error
121
122goto compile
123
124:AMD64
125
126echo Auto Configuring for AMD64
127SET TARGET=VC-WIN64A
128perl ms\uplink.pl win64a > ms\uptable.asm
129if ERRORLEVEL 1 goto error
130ml64 -c -Foms\uptable.obj ms\uptable.asm
131if ERRORLEVEL 1 goto error
132
133if x%ASM% == xno-asm goto compile
134echo Generating x86_64 for ML64 assember
135SET ASM=ml64
136
137echo Bignum
138cd crypto\bn\asm
139perl x86_64-mont.pl x86_64-mont.asm
140if ERRORLEVEL 1 goto error
141cd ..\..\..
142
143echo AES
144cd crypto\aes\asm
145perl aes-x86_64.pl aes-x86_64.asm
146if ERRORLEVEL 1 goto error
147cd ..\..\..
148
149echo SHA
150cd crypto\sha\asm
151perl sha1-x86_64.pl sha1-x86_64.asm
152if ERRORLEVEL 1 goto error
153perl sha512-x86_64.pl sha256-x86_64.asm
154if ERRORLEVEL 1 goto error
155perl sha512-x86_64.pl sha512-x86_64.asm
156if ERRORLEVEL 1 goto error
157cd ..\..\..
158
159echo CPU-ID
160cd crypto
161perl x86_64cpuid.pl cpuid-x86_64.asm
162if ERRORLEVEL 1 goto error
163cd ..
164
165:compile
166
167perl Configure %TARGET% fipscanisterbuild
168pause
169
170echo on
171
172perl util\mkfiles.pl >MINFO
173@if ERRORLEVEL 1 goto error
174perl util\mk1mf.pl dll %ASM% %TARGET% >ms\ntdll.mak
175@if ERRORLEVEL 1 goto error
176
177perl util\mkdef.pl 32 libeay > ms\libeay32.def
178@if ERRORLEVEL 1 goto error
179perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
180@if ERRORLEVEL 1 goto error
181
182nmake -f ms\ntdll.mak clean
183nmake -f ms\ntdll.mak
184@if ERRORLEVEL 1 goto error
185
186@echo.
187@echo.
188@echo.
189@echo ***************************
190@echo ****FIPS BUILD SUCCESS*****
191@echo ***************************
192
193@goto end
194
195:error
196
197@echo.
198@echo.
199@echo.
200@echo ***************************
201@echo ****FIPS BUILD FAILURE*****
202@echo ***************************
203
204:end
diff --git a/src/lib/libssl/src/ms/segrenam.pl b/src/lib/libssl/src/ms/segrenam.pl
new file mode 100644
index 0000000000..2ab22a0459
--- /dev/null
+++ b/src/lib/libssl/src/ms/segrenam.pl
@@ -0,0 +1,65 @@
1#!/usr/bin/env perl
2
3my $quiet = 1;
4
5unpack("L",pack("N",1))!=1 || die "only little-endian hosts are supported";
6
7# first argument can specify custom suffix...
8$suffix=(@ARGV[0]=~/^\$/) ? shift(@ARGV) : "\$m";
9#################################################################
10# rename segments in COFF modules according to %map table below #
11%map=( ".text" => "fipstx$suffix", #
12 ".text\$"=> "fipstx$suffix", #
13 ".rdata"=> "fipsrd$suffix", #
14 ".data" => "fipsda$suffix" ); #
15#################################################################
16
17# collect file list
18foreach (@ARGV) {
19 if (/\*/) { push(@files,glob($_)); }
20 else { push(@files,$_); }
21}
22
23use Fcntl;
24use Fcntl ":seek";
25
26foreach (@files) {
27 $file=$_;
28 print "processing $file\n" unless $quiet;
29
30 sysopen(FD,$file,O_RDWR|O_BINARY) || die "sysopen($file): $!";
31
32 # read IMAGE_DOS_HEADER
33 sysread(FD,$mz,64)==64 || die "$file is too short";
34 @dos_header=unpack("a2C58I",$mz);
35 if (@dos_header[0] eq "MZ") {
36 $e_lfanew=pop(@dos_header);
37 sysseek(FD,$e_lfanew,SEEK_SET) || die "$file is too short";
38 sysread(FD,$Magic,4)==4 || die "$file is too short";
39 unpack("I",$Magic)==0x4550 || die "$file is not COFF image";
40 } elsif ($file =~ /\.obj$/i) {
41 # .obj files have no IMAGE_DOS_HEADER
42 sysseek(FD,0,SEEK_SET) || die "unable to rewind $file";
43 } else { next; }
44
45 # read IMAGE_FILE_HEADER
46 sysread(FD,$coff,20)==20 || die "$file is too short";
47 ($Machine,$NumberOfSections,$TimeDateStamp,
48 $PointerToSymbolTable,$NumberOfSysmbols,
49 $SizeOfOptionalHeader,$Characteristics)=unpack("SSIIISS",$coff);
50
51 # skip over IMAGE_OPTIONAL_HEADER
52 sysseek(FD,$SizeOfOptionalHeader,SEEK_CUR) || die "$file is too short";
53
54 # traverse IMAGE_SECTION_HEADER table
55 for($i=0;$i<$NumberOfSections;$i++) {
56 sysread(FD,$SectionHeader,40)==40 || die "$file is too short";
57 ($Name,@opaque)=unpack("Z8C*",$SectionHeader);
58 if ($map{$Name}) {
59 sysseek(FD,-40,SEEK_CUR) || die "unable to rewind $file";
60 syswrite(FD,pack("a8C*",$map{$Name},@opaque))==40 || die "syswrite failed: $!";
61 printf " %-8s -> %.8s\n",$Name,$map{$Name} unless $quiet;
62 }
63 }
64 close(FD);
65}
diff --git a/src/lib/libssl/src/test/CAss.cnf b/src/lib/libssl/src/test/CAss.cnf
index 20f8f05e3d..546e660626 100644
--- a/src/lib/libssl/src/test/CAss.cnf
+++ b/src/lib/libssl/src/test/CAss.cnf
@@ -7,7 +7,7 @@ RANDFILE = ./.rnd
7 7
8#################################################################### 8####################################################################
9[ req ] 9[ req ]
10default_bits = 512 10default_bits = 1024
11default_keyfile = keySS.pem 11default_keyfile = keySS.pem
12distinguished_name = req_distinguished_name 12distinguished_name = req_distinguished_name
13encrypt_rsa_key = no 13encrypt_rsa_key = no
diff --git a/src/lib/libssl/src/test/SHAmix.r b/src/lib/libssl/src/test/SHAmix.r
new file mode 100644
index 0000000000..453fce20ce
--- /dev/null
+++ b/src/lib/libssl/src/test/SHAmix.r
@@ -0,0 +1,99 @@
1[L = 64]
2
3Len = 16
4Msg = 98a1
5
6Len = 104
7Msg = 35a37a46df4ccbadd815942249
8
9Len = 352
10Msg = a93aed0fa5e163a82c9a934aebaab8180edf7de0b32f0fe99f9c75ec305b24609334cefa372c7c758262dc8f
11
12Len = 1016
13Msg = 433e88eb2f8aba562d15c18126fbdffb81d5d6c9397fa052321f5f78cd629708ba099b540da5451e949eeab8687a8d6ac35c531411cb37144ab5ff6a7eb46f1ab28fbcd2ea0444cd87c57bf7d3c02952dba3d3987da07622c16e7c086d90e88ad3d9d4afee301d2bad915d868f54197b70b23c9fa385c443404fbc9abf7e6a
14
15Len = 13696
16Msg = 2c46a76a9dfbae1f5e59f085e9c3d4b600c24b2d404d062cf948e75a3d4ab5b137a31397be9eb34b2a03c78367e0b85448891b511ddee1f787cccd498b172cb7e656c044a03ffde8e42478330fbe9c34072a9e99ce31b41757cc820d98e7d564e06694b96b66f4be34c5eadd0ae4e61fe6abbe4d7ccee855104fedee8b451a7fcedb793d469b0094c0ed07c97fda00dd8c1662b44e3ee6775a5ef6368cb662d257be561a5967893433a4b63f97295036a37272176d081545df00852bc5c4162324161296cd51f76433f2df867a5840f2d0c8d5be00b4dc89443d82175bf69c3bdceb97facae2b2ed68e06ae74fef36d8bd1f75f130cba509341dd54079d45de22845cc8e77a022977c7540aa3e779cb1127f39f825d4d78e55a967ef45e7c1dfb02d9999fd15af2914ba47177177d94576f1091a0657d9e04fe81e6be7b631fc1baae66584c9c26ddbb568750d77555c927bcda1fbdc15c7cbe3e3fe88ca13ff12c59b383343c12976708c0e3dff78be0e286dd32eecf20b71a09fee50a9d0b13c85a15b320b162690f399282798aa3291fdd2f9c40ed873e829388466ddd1da42f2de16aaa9272ccf44790cf3c95382c304e25ae8cb2fc9d9869808f3ee7d42cb143bb0c3a55e03db6d1202ca1bdb744e448640c0aa60d3ebbda5c21e623bb080f4a073a48822725d764e51d415aad1d7c5a7f17433d15ac7d849f910c375ee0899f6a576dada42fd651343383f286009902bb62deeeb2514de6af7f09892c20d0b238f6021f03b62444b1e1f21beeb89acfcd7136416fe7bd8f202e76afaf5345311798be7cb25351add2bb044d2380221009c4d1cbbaba4cdc8631dc0144f2778a6aa1eb3d3c81df0b1b2142fce111af8214d049e40f536c5d462b9224a978e82cc6c420e70ecc3cdaffb726a183c793845315f730fa4dac9fe46e4180397107a6a051f7f0a58ceb9bf4df37e1a81c8e9569187228e8037df2e59c52ba815566768bedc8e09d5e7bdc9f2bff23aaaaf133bb5a3332750f6124ce185e29fda0851addfa2c3d52bb6dfb530fd4ee27dd5bfdce5dc2f41debe6740274bc651aecd4023b098a7d622e2296b50d51b79c4e3f521695a9d43f038e8f273405e26584d3db179e7c1758114a3d39970df674580bbf2884405974f0b9c4b0d8b3287a2314f3f81b6991812f354d655f62513c9551b378cc2efa4c3e08b313c56cada52217fb6112eb8299b28445aca8f72e7170a1cd8bbfee4d2145fbe8d49c6af8831c4d4fc7177a50ee55a7b484261504af946c6bd5e1d6b89092f3c487c0568fa07c356fae9b8e831b8320289039746a435b122cfbc4a0d316bf90d481d3b7d979cc50d98c1190af8dc58e0035557dd5e94f437f41fab513202643a77748f76c6b77302bf40c392cd18731da082c99bdedeb70e15cd68bff59619cabcc92adcf122753c55afde0817352bc247d1170b8ddba1ad1b0faadfe0efbfc5fe6334377fa372c3435691f53dfc2ad5e08966b2d3525b1eec2d993a5cd4ff34278bd40dd80313a0727d05e0a932156152f3e11a190d8d69726f5c57d20f811e1e8932e86409ffdac96c6251c2a2976b8757adcac5d2de94931d1cbea866ec8bcba5774f8a7fde792f6acfd0f01356fd66fdf54a416af6a9397e00f848a2e9831627cbcbb52b5a868ec174e69b4cfa1ed72cdf23f39d7eaf4bdb318c188b1f0fe75655e34ad71907cdb77a1a2b162cd7c22d93dc45321eafb17cd60282e83736267b3e1fb249c307d49509f50839942f0f493afd9ef37db053a918e3ec83d801bbdead07554a018b8ba348fe9b7dd92ea7c5fc0e65a644ba19aa1fb6c022ab768ec7cb249ba17b9dda2860bd4aaaa3dc70ec009804141ad5ebc61203658e57a0887ec0fded18d844a96e79ba7e879c4253056f23e205a80ab1471953438f85848f4ab31ab175c089e0bbb97ea0dd6a67385770356741966053735e2cc2ecdd2c8c75cc045181dd7267584b901674b553082b2c58fb8f8be0b99306194a6f069f684535423304d40a268d55784a14260fa9c9cb1306b82f91cbee3c9f43dea9e50903135cc1c6505605a100bfa28564a2057974eef0852b7b72ce264815026d0759f691db618ef760edde73ec888e181403834f7221bb27a69479ec9b28a3fb0c3f68d4467d25712fc48ad78763f9ea6e8a2e85260225ca1b1a38b720e589fafca29f07257c5467cb74ee53189b8c81b784c43e93f98abde1ed53af60b27b13df6ce45001c6e1813de3521028981086f7d88ba13f6fb1a800f312fbe2f842eebe847fd760c394668cfbfd353ec14ca0366eccd7b4cd63318116bdc42e20a632a0d2b8c5cddb37bfc0a239ebe3800a787d2ece077a7968036b3d9b31cd906f888e3ed742cd769033e2c24c5a9e3c10b6d300db5a17dd88
17
18Len = 100816
19Msg = f8ed40e878dc68ceec52cc8e2868722310fb117ca3a52e1839eb85d308b8aa00ed0bf0b76aec8a70eba4f0d14d2d85c5a0e876ce2c8ee59cb36947def6c40a587aa07b368ca8e8a08367018e45b984de0d7f1aa46b977cc18c0cd9b7bb897cbb2814aa0ce8f8c9843e03c86c19f2ba95dd2ac4a466a93aae4b3b05055ff148517ecf43e286c57744a3e10a14d0c26e139a503e7927aa688c78609170ebe3b54104390e5f6cf538093a67922e7210e77fcb584ec9b6844e829be246a266460cb442bad52ca47255fb8cfe276108c36e02f9acbd3d191d34b93d29ec40d80496d1c1bb5ef036221641200e905598c54bc4abb3527c5a5f6258e59d4bf54a0498c108a2725428efc2047e0096b32dfdc6ec69d5d72f81301f881ca62a66c22e5dab9fd9d90084c0a36b2f3a0123cc5327a3bc7a12fd947ab57169ac533e4b6a2cb80fc65b9b527cff9fba26994c7fafb5102a0acd8f9d246a3a54178c23eaa04c0fdfd3c0cd980d1fc7a72b25d74df9b95c3dedce8ca316870c654f9ebea9b806da9767cf40605a4b0c7fb06f6b3f197bae7d8cde9daf38530e25bc51b68f9aa23ec0e95199b14bca96c91f3db15bf8432f714dc46ac87218691bc66cb3a42f6865e1c30f8394c8e68c0ddf5851ab7c5906a1994a9af6ac1c44d0d6b95ff15d9f77825ccea40fb9e516d45888f2378e045d95d936d541cea9c8ca52fe5f7d0d919b2b1c59a42d06105ea4f2943c05178e59d67351c5b2c0051c93a4045e512884fa656b772cf398af89081546d920fd3d24ebd16310506a786ab33293027394c1bcb7b1efe46b550ac28529646e8d2a5ae65c59345e24b44cd7b06673f3ed3b9008aa568a739c26682fa596b7a655842cc6b2758b583487c78d14a76bdac7033806c5c210828ef313f8efc4072681f5fded748c31a58ac933b4665c445f07d603e0905e49b84aa55146eb1c1c99196413832a05efee2e64d6732fefc629b79b37bb9390fcbed7226b412204bda523b8b8af5c4a8bdb263ef9f3f6c7b9e1de3a1dc257c1f33b3d54a9101be5b4f2a9db319993c2cd137c41e35c434ce52e859afd1a635af4d8852252dc5e28c729b2b4c96a56d57f3f3854ded59fe612b9b3a51fee3fc1c83db673b0cc7433bff2472bc74a2eeb6706605e308690fd072a7042ca6474603711d8310909e47063f46f287260a26c4f11fe492298a0f98d28c45948a4899e08fcf443a6ba36457dd8329314d53ac0fd0819fcfc3357426c5bb8d3dfd706e205a81091cf08f31cd3459854f3d07e503991ba5f067e3c406c6c5396d8257496f4ba3703cb1ba25c2fe4aa54577af782cd57e85a88a2d75c54039e8b7bb559219edd6e81e41acb6d575d6f798afb2cbf7f00abd5c9c7b0fceec79f9a0fb040ebcbb7bff3602df7b71357efacd37aa57019350bb81213508a006160acde3dae5c42f03141887eaca22d7b33d6791febfb619d11ebabb13e6c5378e9a72e852ddccd31cc53a43275966b7042ddc51485ca20e1c456dcc7020cafb5407548b044d332229911fc74d7fb97de25abff7efb431da82de2ed7e25d0dcc06ffc74e57ca93a6a9f64d76a5c39776fe2266f88d6d0229b527525fd2e22a1407e26f94c5bc6adb1e7327f3c8bb8d4c983385c579dd8f5623df8cd6da569c7de73d9210e6b9253a177653a13ece075940fc81016d8c35fa4f6542df5120c174158ff32533476f4e059e35117081a24798fbdd1eb10f82809836f8dbefe755611347f75423dd8571695960c6f66cca71f0a01e8fecbe1183bee3335eff10b4ff8104132040e2145ec3164b2448f60c730887b9d7894e5f7df3f876cb17136c99cf32db1c02fba860937378dbd093c4c5112133781f06c8ca07c527c2c085e8ba5e52b399f2909e217aef6e3035ecafe2caeb1004069dea023af7eab873deb5ebcef2313c9827821bb9f89fd3d1570a569673d3ede86a4fb13dff242eb98450a8917fd8865c56e0a9f11d72394b79808b0429f3a83cf2465161596887fa2d557b367a1de9c7753666b0cca9c30cba9f0a749c03c55cdc7a6d45852c76ce2010de3e7f75d95228efdc79949b238d90b25f983868b7f07f585f7b00e45d9e132f3c09ee84f794d899759be3dabd46a256f4cf8da71270617cc2425b24cef25d1d2f3945afa6f81abfccc858cd02e05619649b1a5347650934105c02622d538447223d136a8a0455cf3c6f61f696b32266197b5cd1d936fd3ad4288520fb4a2f59bf95e659f33210446ef18debeb679dd99de0c3c74a6eb3dd783861f5db4e94a151c42ce27519d0bbbf1f3b1163563ec06c8bfd881d94a3b896fc07352fc97ada73685588a2242da1b718f81bb1077bc70fbd58b8b52163489ae403838b533851bec30ed0ecd97d72d1af534f3703db59f1f563bdc39d690a0e90e545506463a37e84974fd7b256bbb912cb4077d3e3f5bdd4bd2bab713b696c830b1f2185734c4d2dbd49d5372fe8b813ce73f5e01c36bddbb376ef4541033f2b0355613eeda8951ebf7377e08f967902eb7e23c0fa798c6ae52401721053f1095cacb1e9496500e83c412236fc21566090b3a3eee55aa402c0b774802fd81c9e8579761cfcfdfb1aa23786b2dc35dacd5ca8d8d283369f53e4a5db18060c2c6b0c303052aeeffe169fcaf7ecc63090a9ade245045ab9c8aebf738772297caaef5f857322a597846c7370083d409df27612e47b0cb240daa3cfa51c57108612ac0dddb0f59791289ccbdb3a2cb1fa9ac31a23dd5440682fb373bf0c1f41c4fe2185ad7c53eb69552807410053b0c2d40132250e637b8c425e6a35d93333b5b7d0557927b6179c848ec455fd1ab38348c0e96c60b2da49bd15118df64b6ce4fa48fbc555a4b2874141718e731a40b85382ae6e86ead31cea77f83bf5c063bf1febf71688a832d615e09d6f14badedeaeb6ffbfe343fc7274e78cd46a2aaec0a349c5f133291ee57cdcb65c5474e46294de6bb50886bce6c6f44dcb95f2a4761ed2e6c9e7bfed51e0964afab4e0f7e0b07960f2590baae66b1ec9a63ba0fb6c0d27e81508c51487dbbdc9beb8879fd58c188dfc774b3d0ddbd77ee8bdcdfa0ed8a9387728e12b13e8b3c10cc1c132bd822c2147c5ddf9a993aedbf78ec256db1be76644ca8ca7727208bf89732657152d34e948d73c47561d156f773136684d4162d02260300020123d13a95f4f835907c344942ddeccafe2abb7dc4792c4f1e39c24748c63cba933b16be0b8853e058c47a1ae2c4dfff39ec2339b345fe3557d03c1df91a0607a711636c4416ffdb73532aeeb74f237ed8bf971388a0659e4682a46b8327e751034cbf2c87c7828da9d24baf07a742ada34d1ef38ab1e8f2b4f801192c146600709533e61bc2665dc1e9e6441bf3c4f6643bc0c102a10f9a69da5b0e3d0a0c7cb694c682493032b5853f02953b5c2fc0e1348565389762fc2dcfbb34fd305f2d9df080e859396ffcbb7da78aae0a0d72e3de76c774bc6a81c87f2872b6afe97ced5269009304a4992c4add0bbe24e57632e19ad0fe37ae910193aab0aeae32cf6d618ab33eba59f6a04fad00b1d2403396e6fa661d31b695a1b349d62f56c08fe6c6eae7a482177adf341e51d03ea511d7959c721bd20bf371860ecd7fce1d25212891850b85648db0a039e6638d9c78bc958add3e41341536b5007be63fd1f7e3308876bcebcb97dc3b05a7b2eaadd00f8fcc8dcfa7b961bbe727c9aed1626ff786d6a0ffdbd1002cae8a7d047b6181962a686c152b2341c7c58c9f1dab5af424d183ed1c7d003165a1d04ea3683ff31a0f68615af6f91c21f736e67df641ed31b998445afadf9052bbe004d5dad08f62e5d353e42fc35a92242d8414d99dc4e7e81c8c027af686baa5c185e3f99abb3855b22cfdff0a62e2f47a632b7df8e00e0317af5c24ce7c64077bbb15ec27e062070cd3eb8e549ed9112469090ad9a96eb59294b021eed81987178cb2dcff67a9a2e930f6032c753e203380f8a7c987cea393234699de03a1d09ce204f0a8b6d5cf522b6887174fdbccb08f3e7c4fe2f778254465b32766c48812a45151ac37ae354dac87419f9476baa27e24b2f322b2da4ddf579750684a5881bae2269351fb7de59b9d5a4badd8951135f2713dafc57215dc626ee170fae7f20bff98e36b864e1fe0f0f9a300c903069bf0e0b6f2f8e78423cf6063e89dde6c81efcf26ef15510563c84730f611ac879a6628e55115e1a29de6945d37fbe4f803fcf2e344712d9e0d6f6c79f8773a9f199b705235e20a7830ee3357c5dca29d7a6c29a3d2628bf2c42c8f076cc4525301d8e1860729070dc53164d9fa08bf63cc889eed01b0130a7146d860bbc09ead3865a3082db0836a45f5506c3e46e452e298764939226cedfd06700e4e33c6b4a78add601140249596831e97f960b973a4e4dc3fe2813fa34eb47f998ce57270368fb81719a09298a223f7e3931ce5cdfab3f658649533354e982c87dc9e49eacebb5bb4af9a767b4f1c03d774431168cd4fec1b2726f1aae3f9a062a825f3295557eebf3af4784487b869fb049de44d03fee71194fc200af72103b157431935b5ab9bc122773ffd313d52d7acf1078386090fc011de695e71567cfd51c06317d4ff8841ceeb74ad35f4e5f4d20921123cb88bb2079674ad39e133cdfd6478d69c9bddc7a818be5d7b254bd9e0abdb030f52846fdfeae8ff370a51a9c5f6017af3c6c3db17c5c614ea18ab0e3ca0dd5de621217dffa36e5c5318fe191040a50cc3ca620683bc34da6c142e1c50afce28a86b8b66d189adcd755561a647080d93f3ede1cf54c3afb7e863fc8a82a2576d3f79e9b2bb634e598507a3d7d017e0176b7868bff3a3dfb4474b3ce03c401f33929364e727fbf8096b77eb351435c7a113b3215cc6246dd86f1517a7e550cf828900248f7c1754e40fed62477b296a37d3e53231360d012c4908b466e49b0e620c0a5031228009f259b030956ebd70e49357c3c3ac2842b6bd6e3ca5a3e985dc03f7105681fec03b320a7ca753b782ad3b52fd9c8e3bd980b48dd6ec8901dbf756108e85015821c880416e0693e0479cb31c0743450f6d9214afabc4feadb9bcee9def460a58d3a02d9e3039970068b8e3fd0a403a6ca7f2c71ae2b46ab3c731b1e65e2104c47fcb1f69e7c8c6df8c09b33f2e1cd4192faab316a44536dcac608832019f5765cc5240eabe3c87445c980c299a5e7ae0acc2c2ed19fdc8f011515bcb00476b03633c7669db1b44f97f6cd402778e9687c740dbe5686789b79d0b13f784a2a866eb91ab2d66f064c49e8df513ec348fd7272ee548ba08e1f9f99696ffb53677550d59c67f88404f6e610455a422d9cd987493ca5c366a397dccface2bba8e3e99719dafa768956cbf6fd8defc4104b8925878716a0514f70cbf3fa2c2bc2f66fabe654eed3076257e71117665703eb88c79e4c2b94e8e856e7a6ef90ee2a358409db78b98056ce1750eb80725d70e35507fdfa5933a61496ba48fbd5555717b33b59d4ef211fe096aefd478859ffc97a41372023ef114adcae5a8d5e03c21369baf1e7f417cb40326bc6db1cdf0904651dda3c1039a2f1755e7c329f7c03bf33f324206ce6e1638711c8c9a45f153aa1f847cca2a5d3af1d24fe7a1e1094819e8e712cbe10ead1012b7371b35cbcc2bd5b10505fb63bea20ac81d25e83ed0105e7595b6c28400f4d336791ce4a584323d0b455bbed44392c5f86c9d5287593f6986d4b0b8f9974a7a4157859ba801251d3b44b2bad84f29cb87dcf1680d6d10d1bfd59f0c95fb7bd07fdb3ea2fccd6e3ee80af438956ccfe31e750972f893ea5dcaa26d077fb3f09d990c2f41c8707368bba007803621ecd76540cdb8705435d74f4300eee04710a936f241c034709e625b0dd5dae1f6e86d034426819c365a05f5be420cdf4042bbff965a666a5756f67259448ebf742b6ea189fa17a4c3bfaf651d19a8a525f09d9cff637c8fac02eaa58d3ee3f7221da1e61833c0b183cd9f47686f09597e8115b435454acef80c079eafaa22b18927d07bf8b7c5ebfdec9c42a52b7824d45decef41e6184dc2db1505ca6f94172fafc10731706e79b9856dfede353d2eadeceaf72a302e3492d7dc81e3777e4e9e1f3d33cc4402833ffedb241a75a09e9495d671f80ad3acf06823bb04a92b815edd0ca7d01dcb3318c1ae5c62d3e99c0ec37908b45b51dd65f6b45b34ede2d6f553f60a45e20fafcb34ae4dbd375f52a5db9c62650deeee78e955087c2bea75ede7c304347b171fe0c1a2a033894be6e04605271307f307b2a9cf6ae24b8c87ce033a3fa4cf2bacdfcf54fcccb1f580476c7d00c631a8529a9eea2a713610341e0e25609dc8927e51c58a0a9197a54963b5cb95877354f4b8316df02ed2bea367704a12274d96bcbe0d0d728923a368bb8ab98d5db5401894c822632308ddfd309071fb4b477d8eac0ea5dbbc3e3606d8510d9051dfb5e4b7cdcf2c57c1b76902d864c3109c901da53019ed33cea84b407490486ad9f980a8a63df3d2e3921064afea137f35179130db3351f5bc3f5e7d590a5ab08b5415efbd345f9d57b71ade7dca939efa5a12d677b9af0af14468176a43712bde10cb15787c18bf066eaef8abcdea77d3a0c61d6c74ae7b54fe90940d0233e4b874c9a141dcc740d7fff43b9fbbc012a933d890232cf74fccb7ff7eac1148e203c7381b7f1d1429b1b1152ec25cbf7562596eb402a9328e43b5dc5cae36592da5523f0b9907a6817ecd395a7c778daae85bb11372b20641a04250b77b3a0ece885d07faf9622650259b874536d6d2b92181c834dc111b6fcba483167be40ecc922fb87006f63b9e8e632879563f37a8f712db9fa68c1a20ab239c0116fe022fad1279f3288b8e74a16d447e467b6381515814dd3aecab5c2a09c400b44e9100c04c720dc7e8c6d9460002da6c52004c16999975fef8752c2f9c229cbd9e6446b226cc454bd68cd665668a17328bb30f301e92ef5c7a2197a326df5c99b422096de8af231d1d8872e6e505bcfff026d4862f28d4bb3856a66ced22c9b0587451d8da4230a38561b5b1c69b523a4701a2001382aa82fcbd60733a14696a540227db44aef346d6c0a7ae5173604d59eb828614cafc1b8cfecda054dcc7306f73925e6d1af56ed74c51c6cdb66e9fee8d7a0078254fedb0c0f5dc85a4686870709b499eafbc8451aebadf848b0598ce8f955688bd2d6032abe10d1391d67c20a049841f95d2ee0c8deae2bc1baca0c098d8718cba1ddcd968981c47cd98d247aca4f838f3bf16d092eab8be8deb1f8d504d37cc44a8c96c9f22f2698036d4ad3bb48b31f109626565c147d20a4a7dfd61fb918f81548fb4f78875c1d138e819f6822651b93a3c92ad77793fba5222d870ea671f9cac967919d18f96e92778548415b2e170d90b201215354fc48a77e62823a2c2bb354782ad052732f08beb278f751529416f37d83ea26248517ae2ef2ead28c1077908995a2d25db0deaa957bcab39715283287fd626ea7388abccba2d90e364a7ff4284c84f70da68ce1aafb5be0401cb9d45e085aab41892a49e10cbd5baf2c34f5e0ca076f2772abea6f622b66020d546f8c2f134a87f96edbeb9b08394b585f2c2f98aa792f97b43b5f3aa9c34189804a9ecc2cfaeefbd0f967d85a25bf3136fd8132dec38aa82e4af6ff677682f3b62be27a180aeb22f918c24f23bf6f5954e0722324cccd06829fc32ae4fe3aee6e5a03b3651900e13fb0a759e544d033418b6ed40d037b4549a0404792c8fddc317b7f028493c4c91d6773932f8486417544f3d007e5f9e6fc02fadff175303f77f6b0e1f709bb3d3a93b38552ccf62688a39da1a602dd5e122e6f4e9171769ada5255cc5cf938dfefcbe3ab0faca434c42dc8c357e89a3d1488fa3df35c3580b124ba3bf6d0d203d586707eb692150ed05a01bf9de5c4e67bb948088784016394d47abb853f2b6b643a066ad81bcd1735aed4e108a8c1fcd025b548de874eb60de7f3c568728959147d1219e4b830e06ca2bee1f8a035e28a54ee6958d4821a84e5d1e41139905f7ec60fe67ce5f4eccdcc2c3d1e4a753a32dd3004970a4ff3824471822fe2b5010b9b6c6b01336dbf0181a95cba2624663215468519871cc39e8a7f4a151c8bd03363b402020f2fb98069b2cb8cc1b7e930938e7540d95d1d223e47865135793f9eb573660ff79f7ed2fae503e68ba44596ee745fbd8fa562c5c666d174cc01b1961736e18b8b517161ab9c8058026e0ddd6c94aed0086a26e1b959a5e05eb9d8c1ff5b2ef518ca23b4f265db61b499a48cc46bed28d23ffc1e8d9c9e345c06079ad47c88dd4e8e286575bd7f9420ab9c2d5c6685488b8b34d4c9ac04e1427ae0994cf789b48b01d1db9c2fe75fc5187727bb11119f82d0739ce4048467a08cd635bf78cc1b6cc9c28fdc199d351064a81456f81c9e56a43aef7332973804b06b18a26caa62523a7d0acc272ba49124b17bb68800d5756afd34ddb2b7e2dd8a118aac3fcf39d9f853c4d2c4fd3ed5bd25a6604d68d57db93d15aa1160f8a97e6c24238e84f272780966867f9c644ca2775cdac4af0ece036cfa6ebb1cd9d701dd7daec5763c9a4de0385db383a5647918e79c6a6de1f4ee1f6b722c561704c8d7efa4710d78dfce8ad2df0d3d82cbb59cef0bcb001f70bdc6e17af1a720b117fe02bb1dd527b18e6bce70e9447cd0cc85cbcf431fe7c006f5e4ef878a974a93b25f492847c9ae020583c9d412f4124246164d8f080b615e2eee267a7aeb5fa0974de52cefef23cdda7b305a33a91e9b50471ceb72dae337c485d636e28d6ee31f5705983808b1567d4d4ae820ec445c56e6a404cad6b408691475397c0dd6cfad232106ba96e5104052700a653e21f9ac6d79578a9f52548f426a1e81dd45bae30acdd4d22a2dafd633564d6b2f45e7d35413503c955cb0a9784b42ae8c2a5933a6729f3922f969a158540dcd201ecb6e32f88b5b4921914a2e8f424c8b031f115ea5d23a21e6f22439ffd7e5d11b08df729f65613b4f6ad3edbc9a066a5e712ecbddfa6fa764cdf170c0485f82d924a99b7e7ad8dc44c1f93e49b6469a9af3de5691944413f1417b753bcb84d5b7a34f362c383cbc802b0c88bd23a7ac471b9287571c42081b1134bfc8ce104a550942ab1f2a074cb00a90558d6e841ff15cfde6951f03e450a1bfc90dec6c513fcb2692ddccc31d22e5274d41036656183c72fce208e44920776f196193137ac67d6d65ce9cfaae774f23a86e6ee8ff3a4e9422a4667d971906e5496a4e80278774899c882708611bad282f6c1d666bc5e7c40082b43a6e98d494a18e9b3cf7f154fdbf90d786e59e83b72ad0ab893c49aca50ed37ea5202e650fda54f5c46ca2a35c476f4b009c5e6733232275abd1341199b63d22386c484cb95c43ea90e609c407bc79ddd00609cc2eb0d82848db239b249f164b7ea384d0239fe1e64d04955b9297472cafa2ff272c5c78100aaa86cdd8120556f25652a3c12da5853338e3be8f505d93ea03cd1cae7e78e95befdc0e26b760d11e05403c348e0523fe036381408033c009a8e1f117af5100a6eb91f08307df465c20bc1dd029875ef7e49338689f602d98f2dc690a57a6f2864e57098f8bd723574944ad3688b292db6d01387a16493912722ac8f91fd12b748899bdaeabdf0479df788eda440d7bf30d1c25d78d757f00b74bb556506637fc1ab87162f05d464e63a6272db3fe56e9357275035d6b6bee32bd92c4a1dc94778551e94ee1d8854f767bfac3811bd0287672aaa01ea18c25650f05a68cbacd9158e479b508e72df778589e1e03dc543b60bb3b10399e5c50de9e728e69774fb3f5fea757ddefccd0f9da75afe4b67f9c54aaaaf646e858fb001a6deed0a8a769ecef0689c988de566b6015fb8c40aeb5f2df7ea4bee60e8e69d15c4a4aa5411dbe63fbdd6418cf025d87f37362f15e22aba83abe1a3de9857c71c2234023b969eacc0bc526363b7f30b092ca114f2a6cefb34394d146866ac86a33fc497a8cb8e2a5bac398579ff7958878421fb08fff4f8f3deb8c9641b8de392647df3017a5467f9d7b23036935ec6e188dd6dbfb544b8a9e04a4b3c7fa1e4d1d9879daf69986b8083e6eb023a4b5eff80fef17f8f65433c882a21565a919448e6091d1b61013fdaf9fc3e45bbe827c9b4ab10b05600a1961e81d31c7404f8e0d32bfcac2937eaed811db167dfdc29286b0d51bad2bcdb9dea76eaf495a31a7fe717c1c98be374a36271cdd06ed06c02ef4c3c06cb42f73b3332ed488416010e6bf2f4dc4dade6e2e61f19e9306bf941868f59fa0939005743dd647f0a04b576a7e71d4c383c479453501e18ec56d7cb79fe31ff534afbd8609ed701ef163f9de31bc58114399fa0f22b62c66c380e8a10c34b7e731df2a8d39dcf36fbf3a66d67b973e3a94bf6ee0bd96f5c76baa76492032fdd2f59ecaee403d486f543f2cd7ae7b0dabe1b5566e681cd40d384a94349e9668650a6f2d2daf86c59a7b02ba466cd03ce1d50c3f0ca4c02dc4b3d1c0e7b9a77df9eae0bfcffa32117d7e05adc7195f4278c93497401629897a58d08ad7141ea52e0163f14992d7a284e7b875ce4640b4dd48ceedad1ea17d8ab1e760773044845e0899602f1bdfff4d42ab80c0765d1a8bde2ba0a830c050923956d06c80b182264ad19ae4f7c39e43195f7d421bdcda00e3eb5ec5ef2ec91d69df691ba7fe250352acf01fa92af5e2c634b9c7c97889e9147e869acc153d88cdc18908f882f371ba9c1e13c26e9cb8e3cbd4c5e1988080ca65a67b3a4c3460cfadbec904d853fddd2f5375b6070941fca53cc106b5748480213cfbdc1c34320a0478b05f76fd0454c75eca069cb1fa7b21704dab67dc40d041c8a1040db378e76655636ad725219c049e6536982d6ee9f11dd032280e622547c7ff44a938a1f233c356a98182d22d5770fbc871e20bb37483dd5d6ea1551993b95b30774a49b50d411ebe0e8c92834094e23ec2664d822c40e96fb42b8607b62b6949e05edcaa436d0ffac6a8ff384068acfc0220c0b098d368fb8113918a4f8c9de37cece74c8695cef2427e54a6e77ad092a9b7f1d94ac9f0836deff41b905b5dafc58ad6063759b0372a634f69a639e19521825d66a282f489c3172a3659264d0132af3571e637782bb6fe5c0afd24547612166fd3409d0991392fa054ea5bd07a4cd0921a13ad7b62a0b5e6d56cd8adb7f3eaa5c99576941c38aff311c49a8c9d8c755869302a2e5e40109c8365a551cd3f859b9421be189d3a0e9ed78830d5cd6a2414e9cc4c25814d94d98f8848e5386d6dbddd65d22b96c5d20020a5dd409c7e5344065871e57e01c91a443501dc8bf619890fe231319b5480c3879dee618d319962596539e2970513fb5c0c8eac3a71ff99962779cf1d7e916566d0e29d121c5cec5d7302a18ed00be9316f3de8c669a64c2a960a588f9c8a42690f6867cda7146e8ce27aa6a7fb27606eed9df6a235a42d17ce71627446e206e879de56025a66556263f06684dedcfd6f083d6a707e5fc8f8212d716e062f0f7fd0c2fc62bea93d68581265a803c31cac3f8ac8939c5f8c464ebd19df42c7e8998494af614c8383294f3f3883f2404ac10404759e182a038c97aea04a85530ec005e203807c5bc30fa9f5339b32fb0427e64915e29a25bb25ac60b92256470e7de5298d42c6b88995f8d2fb704e49d55b66b71e237af90fcbfd71d9093e1a543da2e9911ac4102346dc4704859cb33ac5f5dce2b3331a9dc9fb506461a5436c89bf90d39afcf93cbca4cfc35da6ddb112243928246ae0d1ba269b0fce0468d3ecabbdb925c9ea3241e2dbdc6b151fb4aa724a42f98b0248171fa01fa103f116d0e7deb65dc359b09126f9a420300fd209508ec7a50be56d5b470e387d0c52a1d104625f9571ce1404d1b7af3fb00475b95f752ab96610be112d33ded48624015781e7198f4dcdf917839471fbedb43c34efabe09941fab6b342cf672a29dbb1eed0db788dbfcfcc63bcfe80f7718571f691818dd6f839e3cc282f85f03fe0400171cdf1235049fa53de7450b4c40ed398d5a486f52124c1c63de2afc950e81839f52d17e2a7d32f82788465a65da6cd763c6360763561ed2bf47749080549b6e2db87514e1ee1c85a0bbd346eb6e3cc29267cbedcad67a287fc5be65ec59ba8b6854b31c83dfc5155187d4150685c5c2c342ed68b01ac9e44b60f0c100a347a0f93074dd37d8956fe2f43110dda66e9f9e6185c23dab74cfca21f3ede4bca87687549ea02662f45dfa0ad27f9959a120cacb7c419810e1b1a50fad31c12c47d5bbc61bad77044aa541d29faa6126c60ef088b82eead17a52843307d4bf798b853d90d14c5347ff10615381d85e964331b7a123d15a77a6790d93e920052ddb4db4baaac5e2b27b66ff955e53b8308151c81da4711189ccf0eb393c5bbccfa1f6c94a8d5f4bcd266fc6a12061967ce836ca042257368f567dc42de6ce0be84449234a6163b72069f25b7ead4b2003e1a7665e87ccf211abe94175d1c11bff2c0b6bc110194d34aab96934ef59804cd26e4434ba166d9833fb091be37b139cc10748b881c93690528a96ccccd2dbe024510b8da37dceab567dc52706461c486a0463369cbb99bcca2e8a4d2e005c45401964722a4b3ed37c351c9f21685e8992c9634349379f41796deebffc2928058c8ef6ea37c6e4970dedb78d1c2a00ea9e1ff1e7708470a6c60e6a2b1e966aa872776afdb238e97f716b3df8dfd42bf0f7ceb52bf9eb33731bdba5987b8f48b4599d67b383e77413107857e951ae0625059e5616ccb41131df9a480efd5beab3a9c99615921caedc53dbad675c00ba1030577db1d22731677914fa958b44792cc9c19e2ac71ebe61a05ee67ae7116e39e1c0d103f18bbc9d531164360d901da8234d29fb0b37cd2a60c7aa2adb2a4b297ea2fb14122ad95bd4592ef86c88fdae1e37dc8e44ad03c0fcdfa3801e93796771c5a2ec1e4ab12a64b3ffe48e7442c6224661ed5cc987aada6e778399941f7b20f16f94fb346b916be87f005c9c13789741602039d38270643cce3c347565eef5ee09139330301951c15756be47994de6f1802dc5131b9b011051b1d87d744756831a71cc8528487f032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead7a47b6907d7aa95b79aecedf4a637ead8fc6fb8654c93d13ee79f5d6258dcc61993aebc65e4fc14eea7d006e31f6e9f60e3bca8ce52ec559876fd20255e507daa99b185671ce1ac11d448c30bcdf97b9617195e0ccd2d15246308dd6cda74a8071114327fe203b1adbaa780f3243105c5111636a51dce966f5652e39d4f91abbbb4576234d6cacc3ec57cef2dd4dda49a6c33d12bb7595fd5ab5bb15b40301f34ddfb831a5dbf62218f496c003227fe6282e2ac054c45e7f3fc93e51b3ee8690f08612395095a0a12729d663eded879d9ffb325c62f2cb546a48bed51ae232fa6ce28a2494c132a6e09d98c2e3d478d5d2d15dce2e2665e4a3db448931068b99899c2bd8ba87349b0cf9e3c52cffdcf58a59b4fe0089b298b42ad7553f831bd60f5cfa3e09102fe773e4c05412973a678f3b3ed420433cd664dc7f218e816a17c5c9013ecb84abf2dd073557dbc41b92a91e0339d57b8b077a9a44d56427fec5748c47c1460b2e2412094db6d0ad06dea0aa0c1368592594bf0b2f590a9d6149e44dd4adc4cb42e5d9940d59397b83b33b88604c210694e3fbd84795c80c1b09ddb3b1ec8bef6e9dfc4d7f295e551a79436007ca48aa605ef5a89571e59cb26f2766e564e39d3bb441deaa0c8664549881d90a77256c0f6c77241fd6ab74b0e2890f78ff16fd2f9271ef96ebfbd0b878ba9c703900752b7447f4efaa60bd9dc9cd5673a36b39d49f54274caf03c0cf82b95141fa20ed3ce02ebf0dd74d9eff8eb9e2dd3a2976b244b12fd33ee75c1f1c459f86a1cefbc817f42d7f43ba406098165cbeab99df4fe751ae3382efce32af252e461652c7598161e74fd8eeca474fab6b1ede039935f2fd4d7562623b90a422a78941f47a76863d95857c33653d1b42b806bbafcfeccb7bb4a0c58acebf6104b2570afc3ca88e4fdf2719cf39c964a1ea7d2ae4a7fadc938abc95adac495093f6b959b1347501606b3f960b6d739291aa8c13eb49e98b0f78d2b91400b6d8961cb6165c8b684738e4d4db2f2ac30ddaa03a5e0cde4142b625e81907f08c60d7cb5729456806c89ff0efd08397423e44738ff38f8e88684f3a099dcda455521caca37ab4f4d9ed5d37975d4fdd778b97cc93babc804864a35e3a2db04598152e67a2f1f157681c3962d46ada23ea5d9a524f9cdbdd08a07a3a85b1f6fbde11d5a35c7743b83bbefd19aedf6d92241d16aeca7f33cc51839b75f111e8edaeaed808daf2f43fdb3c6f032ea45052ac31d4870c4d0d76aa75d0b88635ce449054013f234c4a16cffc58c95ba1cb8a0a0399861eecb1039bdedfab4d05f0270c6b16f03f6b8e629f687f133ebf2662c7f930530746679aac2791f54d6a95bfab5be0c33739074ed4e7ae88dde4a8036a7d6095cf41776366b6ae3f8f4a0734f48c275e129cfffff5e0abd042f99a957bf6f0f47fc7288750f4fe30198f8cad7067b36cd87ebca08abd3f9475e7443f83cca91a1ebfc42ef3494871f51f6d52a5524b9391c687571be5327c7c94ee2a096653acb410917fd51e56a92be4f24c1db6b97b465ca84c31c04c2f61eae07e952eb6554aa4d8a380d9ee81c1c462c360fcc3cdff2867a953b655562cd06162af8b99bbe662e0c27ce4d9a1c1a907def48a3231c2110c930a2f1498e32dbbfee0e5c5869332f3024fa5dfb0327a27c663cacd4e9902de34dd93529e90eb347bafa5035f56fc578e8386c7571d1f0ba335225ecd8be026b4544ad70f3af11501a53119ee39a8558ca0ed5b3d897ffb9cf0fcab55a0942d3bf7bc6b94ea27a6b748f2cfda431f35252c44610b7e843ed91ebf7e8fe10638f04f52d6d5a7752ec62350efcb7c473f80b1f2a26805151e8346d39d23551e92fbe372df7979c3f756bbb43f6bed09bbc6b65fe6fd241ae1c2f1a0d0b805c582853b85502968f9478e9a84895f9d4ef01ec4f3f571e57cd0bda68ee1f6f7e14fb6e0f4ef8c7dff6796472a935294fc27b16216966d5021339ded059687355b42b55926854bbfbd9f974a0c26eadbfca8a6183093996cf252894e6db910c71ca3ab2e82d90d371c36b92c9409cf7937bb266ea9b29c41d774aa522e103cb30bbabfe872b57beb027623742806aa7694a859ede9bc1fd7b9e32880b064b0030fce1a0e5cdf3ce558a5feaa32e323dbfab6661c5878c9377ee52a615b7c17bf1228e328aa20f92d070c71561969e1af532e76835fb0436810c3d87b982217edfb1143bfc3405ac9f6f3a50145608dfa8658b0ab642a347255c55b59cd1c5897b2cf625a0f0706c30ca1c1321e90cec57b7c3d1bd1af455e3732db80643383c41eaa6781f63da6233360ee720cc04d171ae2445b0c071e339d547f7ac32f407d29ec7abce0a9e1ef5276544877bab2f84bd2eef47ffa66f96e7170cd54d836c9badbc59435146031502c1a3cc744a470f693636d9050c5b894d2d6047df60eb0bac16d905d46cbf017ca69d66427cb88036eca4ea9d0e579f6bfd8a4a850703a0fe49d39c107c9358e98689fb62bd0475aab4b2031446b437c7f9e373caf0270a28d7b15c71f02079dde401e26175bb6e392106a9072021f0e5c5145a1db6f595b032faed8551f6e2ce318db1ab513db876a3eb42d225014949c19543e9c5dfd2290e28c5d72c87223f0195ffbcba1c02c7d0087721efd2af6881dee7dba7565e07abc35bc3fa41c6a4d6a313222ac6dbb117c69c62db2691c68869ac5fc5e987b0ae4335f815c73ea4235da2582dde81d6fdae5911617daef847be17f2bc09edd88830eac03977f89179fe03eb2dc3b38df43803ca2d38455232549110f4580ec3cc04c0d8cfe493013d2cde47c506ef6a8dfc42d998f70378fac5ce4709345926dc477e9e339d8c87ff6287ea6e2873e14d538cdc3f2a47e0e37a2601652f5b665b616a7d1ef3537a3327a76f93990f7694e6484e7a52a10e9eea2edc92b99406abfb2b11ec86667c7af4a333dfe900bf071d1bbcf4f0ad768fae4f450c53817c507d26e926e753e3395201d3ad89061f16706d841994abad283f0db74cada25beb5fe46f48669a62e0b849cb77097e1b4578b45062af4a071b04f0cfddf87519cf2bfa10ebb4b860239ff187e6dad73806ae968e6ac0f738baa88edb3ae4883a9e59be7a6b222c5f54818f95578daff9fc7a7aba8c4a41a699923e85ddf24a32bb71c808516f64d506058a70539276d57984d75161cba7d53a4a864c51a249a6b8fcad5738dd0055ba8468b56579ba5f102642df65c598490f3a0c9b1064f4eb1962c4c38bfb7d55d496a0b0f7b3f90b42f733d112c89176aaf937eea4bada845f3ca4e9b56b3a5a06b4c90fa4c1914ea47020c2f32531e270007ed389246906ecf2c4465f7cc5d6a347583dd73341ad97199021819be81100d867d628323ef7552db945e4c0be604cf6c4a8197958bcbd6c1879387d3286dff979632c54baba2a35ea84efd7726b662b94fae61464d069e0103692599fb86fdc3a06e01c6ae3deb3de6fdb21806c716e5f82b784e4ad3f0e2de629a18e3a2309003dfde9dde8e5101b83312f76e811277afc286b56879f4eb80468e58c60bc088284d05d725ddfe3185b7c51b472a7ff7db3930839142d4a452ddab628e07d43375801d7c6a711a55b452748d770b84ede35920c1ac74b595baef963d21df9418533fcf959593ccf5afccc753e86c4ae231eafe77a158c2472143faf169db29bf2b53c3288d8b3c9added65778095f85e2cb471ab58362041f0a27d874c42bbb06385a0403ca193cba67cf70029cdb7e73c7e2267b856fa0b8dd4c706b45e7174659b0ee2891df911724324f7ca5daf07c912b9b2abff762e62a1817688757492975db7185c4695f3a90895634b8d07453b36dd95197abc31d5d153dfb0d0ec92639540e99d6590f9b394f14c93a5e829fbb33616e810f59c502be44a13b700fd3009545e34c211abf9afe1bb8ced793c6f516d40010649f83a78ddbe9b71d8596582997d0aa54192e1200db61dade30500d72a184ca7dfcbfb80e5442f489d316cc8b75005564835d4b11c482e2c4d0d160f14a8b13ae0a0fb0ba5e3b782770aaca357df0e1c4d1c3b28b776a8b3e0da1abfd4f7190673fca1e1c5a31c688d6e8ddb21300e4178d07c4e854a718ac3f672b0120d6a54c16957c9ec8c444208e47737bc4eeb0bf2d801eb2fcb72f91fe988aa75f38e6cf26e858dc2a718580ff5d281d13e8fc3e3bc30c75c0193481c39c375a5b06b962d9491f3f1fb80f1cb27067f0709e0b0730573a9b5f5bdbee1708ad84b4ceb1a9a61e4c41e90655764057bfa07b8c81cc83a315be1aed6a49715479c0fd0f53f625fe6c7f36fadd001149ab978532e4d0de3d1a38934c74265b161899843704fad16ffc6189f42a5cadec98603e0f98c6889bd4a559079e074cb40678fad4690a20d988735280a1ee8ea71275069132101b35c18ecc9d3c6eceb4cfe9b165e4b6acc17d4f113ef8283c0fb6506f5635401e916d4f7e7bc3cf49aed166587a0c72cdbe673f467d81bc2e9cd08cd8dd16d90b353481df31e89b45e8b
20
21[L = 48]
22
23Len = 16
24Msg = 3a35
25
26Len = 104
27Msg = 7db15b3ee240b45d4610950996
28
29Len = 352
30Msg = d2a1efc725c46cd6a19760f49edf0bae823c1b4992ae2260085746cf65833bd008e56e64002383f51f960239
31
32Len = 1016
33Msg = d11ad1253592c094746da7b5c88d329bc3ce1929913b8be07e82d3f6b7a536a855f31ad197376eba6f2f4534413fc4e4e7673fdff8739f774a710754b568b7c61a473059a41c98aa4e86617aa66d2601d0f0d584cd9f132afeebdc0ce3da6a8b290059e6e4aa080c195c42ae7f7e1e99865223439929b0a3a0d79b46ca6419
34
35Len = 13696
36Msg = 2f7a9929dffaa4a4dcfeea1fc37b18e3cf935abbaa17cf9d834b3a8d61e9fabfb7683cfc387d6f46ece3f8bf845827c7ebe86a651d6dc1e83c5772cee1a9fee4b04453af2f68430bd87835126cfd1b3f8beea4d3822fb27864570e255cb65b414197480b6bc20a39c5450adf2474da93d72f6ecf8063899722d3755b7a19f71e93e782d89593ab19ddd3ddf053c54e0bf832311fbf132e8b9e540f38e4d9bcc3cdbf69de54e40ef348a9170ba2f65def167f568ce846889c0161448342fe907718a465e451bc1b0f2e4f21f9b911f186589f43dea305811473837c063b915d849c20deb43323bab4b64e61823f1df119e71962dd975700391b411f8778980a3080ba3c14a321d32c082d416ddd2345f0eb751a516d44ee55222395cfa11e7fc4edfbe7cd49bf4ebd4d7428843a2ad5538b3cd201ccd431aeafb146a65d28a4870a6948a7cc0413b0adac7e8dff3a898aeff5f4b65d10b28ceb749bd354c061c3008ec569d5f90a4d4f5caa51d35b49dc4028e738c8ff5939fef3fa202fed9ebef6f2c7dd0ba41cdb5c0c16985f96fd93a65d134fb4a90ffc0fb6cc5396b843c2151bb7c9170f2fa4fb44292a4af28df5481de0c3c917ba1c46467a35302738158493fbf6a0422cee558d4bce3d78e14b4fefb65bb05043e2cc2a6a8ea64565ff6ce2fd2c4f43fc02926ee44ee02fe1dce25cfde0115c9396c9ea06269f17b2caf58e2332cc1c8528d9705c70da1f76f22aeb1d1b93449180640fb5c4c4a708bc4621d7d2bed5b1a752191cfdd45086d34f247ed1df0f24e7c620de32bdfc4d1f882380d2cd7467c926f48abc75cbfac8788f88cd9dc5361517a5eb36311e6b39e21a85fba2038fd47d860f776697bb19cdb5a4d6746fae507e274399c91648537d905015e58910117e5914f44ebcb00e771d38b30c1473e1232d4e222cebceb4810c48e83e0fd4c852f4fffcd643c0ef9e4fae2d0ebc6f102f3f749b02a5e3a61517d53b539cc24120df3957a633d50369d46c0c226f8924cae51dcaf54d716f61385fd8cf38c2c311a32bcd6594d6930133dc18ef36a9671ba8b179abe95f588ef74e8558ebbc974dc73c26bb6eaae78ef464181e18b71f4b0f986ecc8495a9c4dc0b0b96be9806fbd3d32952ca3b4737a06ed6561e9c9581a33a720123fbaa2a70fc3233b83e56444f5aa0cfaf70fb24be6118404f3e11e6ea004cf2d079a3e93a8ac1d4e297cf4fc43851dd26314a7ed6a5a784b386daa26e50c64692f7db28c21d82234289bb45bad5042236667e6d70a24bc9525c3adcb793a6a5725d9b10911e3bc8e3fd604db7998346e7f7dd1815c0cbb735a977bd4b32b5b976932bc92ef3b56bcadc089045ec95f241cdb0a84c67f1f76353da6cb493bb27a881d37a2106b8b3010cf935eb3601ce4dce3e449eff8331e444ab117a20809a1010db4cf3be0c488f777b6532df908112e3d11592f04a0cc16232d62340cbb8b5268a662b8278d37c03d848a04f0ab498f5af43b0a20e310197b7e1395a65299fac29f051bcc5fcd09a5605bfee370ee8ea21f5807d9748acca815a44d81796d68b0014eed3bb6a94233fc51725de3809ac6f538beaacf8cbe3d96aca21a7a763a957f8892f22c6d086d9af2e5ac9d90321e186584f17e964c90739559ddd034df076c4aa38c2b78aab6dec8ef6be9adf33bfb66f159ec4826653ee6cb483539c47a4a1d95663e6cc7a42a3bf628623a4c9500a59a50a312aa104b198ce5f3e58952bb79ff1ccfa9ddba2fd4705e91b5acaddab9d6522d7666264ac5f533b6d8ac4512d8371c69c06b6d322b046ae2a0a20aec1c3bfb05f3d91b9044cabdd873abb5f2b0e3e19740df31e39828f9ff9bbb20b73541a7a70b8174ce4e43e0d356e629cdbc6c08d29bd7acb6a4347823075683ce9d7de4ab3ddda6572b175951f30a15263355fe9641b3322df7dd52077402a884cd472e6d0b6c34cd63ab63cec8760c7ebe384f7cc31066bbdb7a3417425e039c4d340166e4bba4839076ac9457c87459c57957d0a06dced2f7a18acd22b7295785dafa435a2a8a2c3a1fa05d115fe129d19fc44c5a29bf15b4d9c2b375bc8e591f92756cfc573a39b8fccb8395cad7617b11f14a60e2dbf69b897844cbbcb70363010f6e1bc0590ea594aa924597dbb32a868b55551789f82437180b85661809089d34a168d44b4d788dba23b13542715843eee797366d9ce7793e72331735bc78cd61b13421a568ba3e66926921c04e9d00888ba7ddeb474db63813756ea4a02c1823083e36ebd2d32d5c88cdebb98d511304cc276c7799cf84a1699ccac9569b13f530c762732e6bd0f8415001b2c02d11dff36660b717054b16df49ba38425e3764a56052ffddecdfc686aff22079897376cc15591e11579fe4feeccb55f
37
38Len = 100816
39Msg = 5f464d3301c5e0871d6b41b002dcd09abc80a805de3482d97f3fd7b9838745da1c0534168f76b93c3c53bbabd904541ffe5179cae619dea77446140b7400f47d242141c7f2e9894d88f44c9e066861498e7394f206f594a419790d697f6a11187f84bc6fb288186109343eb11172bec076d041a4c7306d7978c009fc2d2d62563614ed3555ba2d21c8fcd70e8389352dbe4ec808af3231ce990452eb05b1b0dc4fbb1b4265e69235cc3561dae4148c386cd770474863a84a822b2e5f905fc255d55f90bd6a760d441dc52240ba7d8c888a5283891a2c99963d1fe680549d6267cdea92cfead167f6c49663668f2bfdc61fa647f5abf3ce5ad2c6c175dbd456ba41436aa06f5f68f5c88e6b74ea86a79934bd05b486210d3d470a0967ad6d67f7385260578088d7e63197849354f651aad07e04ed301f1fe7a6d2047d50ce5dc6bbffbb1da6b47d740898f4eb54e3c5a1fbd18ec93254cc01f705fce04e6100ced132c519674b2345547804a372b5c925bd9ee9701527db33408d37b72f8d18b882d3c4744eb58f011d21fce336d426de1fcd5e09610216248b51fe2b79b96c2bd6ca0155e05a8a516b7a24d529a9a475284735bd9c4c437ddf399864b64fc5d0d6ffc4e5a7a3dbdd476bc39ed29a0a92e1f2b6b3506c2be5452d4f896db6eb4f895b554b2af64c4cb8dc2369b91022dc50b7291404cc9605c31569c32756a64ff8c4fbb0f1bca346c7b58a5c6774b2fc7f7fd50741d34c8564d92f396b97be782923ff3c855ea9757bde419f632c8399763003b58ee9140c2d62e914c1e1fa742661a9166d42267edc40905b35a25d5c3cb3fb457376b7422896df7bb19c23e8f764416731d2e20cf2c1beb8663c07edd8f105e078e2fed05c5e5897c430017fa2160f565a75a4c5c64a15dd7d644bf355d169ae2696ae5ed1a39e8f81055cdf315e5b0c6f9235515fc4dbf30281ef17b83a6ed604f89293904bf78c7183fcb0ab236cb1f8935e59c51559217efabc000b165d819b717118a03facb61a13a99b194f8b6c7ddfe5850127d79078397a56564c7ed6716a129409680434061b2a4782c9006587de927c1ae09d6778a5f1c39fc419fe10493eb0d4ad492fbd05485eee7913c59df82fe7182af2cf06a6e8edf06676200077bd1408f5c1cec537cb8566470cb44895826d04ec20f0aba4297c501add65c75d5767ad2ab63aa81b7b66f01b32590f1d55b7e50e6df1ee077a19c8c895f5ef62d452cc336e9aee171fa997ddcedd7af86e6cc37722fb5838a46c5e58e7f700edfb7c6bf832171d9581f660752867118e9535a6118635709d6f1c1cb21b938068958e956149d9bffc67f355cb88205d4894ba97c3e3c8be9fa2d20abe79f3f93a6a2f4f56fd075bb49a4b7dc83630e58c32a29d757fdbcaa607352f65483cf2cb4208a3bf94ca7a25e2a4e05279be31c33696c10fa4971d1b64ee938dd299f483e5c098845749a3b706a787529bf2ca56693d0a7a98243e6482a43e1f5d3086ca1b00368d8ead5ed2d0fb79b1e2f537ab9340809ca3a9b5eb2900390432293008ab7086c2811d33de0648be5597ef002c7c462b5e0f4e0b1720a98b2299ad7aa55eb78f0c77c2ab4371385f280107ae40ebf814a8223dc74f31483c63d9e4ed09fc7e5a51bac34d69d97163116a66c84ea9fe4263269b71fd228555ae3cf5109c4d6ced7b9049a2b8069bd2f71834d6c07fffbd7561939188bc07dcea08086bc7182a5270427c3199bf5fb5c4549861fd32a38ec81c4ab058c777dc01864787f0275f911a17838272cd65135f66baf06d8d93bc439eeb55d50b7c5adafed8eb8140b4b05f59871dacf954f4b096c30b7857774fcd319c096750bf605db8e31fe02cd1b9294eaf8bb009d4609f2cdb3a8657f650501b8553765de8f572fb91ac77b35db35f402453e5c58f60146f2906ff56b9c6b3a5d0bb6afb9e2201110919ac9c01a7e9750dfdb2f72afbf7a8d6f64b1c68b9de17a2c9abf289eef24074eee9b1649caf3693118165503a30200993d271aa31b8b92606a10a52612dd1fab495b82f9a98cade18b9d8a723a71ceb63fd1d27372bd281f9b40aa1839b0cc2f2177a09aa8e7b159ac118d7c145e7a4f032e788d21facde2b4dbc1d5d2238f530d9bf9bd2798f611d03ed8919f0c85bc2da99750b7a8d6322d2e66ff6ab9ebaf7424e8c1c3f4fe92be61f65359106395f5ef995e925be3868ad513f561f873acdbaf18590c903d64bd275121c11ea655124d091740887868544c5348664399d3da96e2e35fff34f062fb939d656bc072096e510b40b2f75ff010af68d64fd0acc778e2e13c9667de266b1816c4ac449521b02bbb217002c604be72e73051aa9048d192e3210a68769dd2693e5d44951711aed3a751240d42f8925844131daa36c51d7d59bbaf99623fddf1649db954705fd6f3405e63894f5258c9ffecf83208c2c90cc55b1a8d2972ea6b3a049ee54942b50526b7930953986e428b2c75e47ed870bba68dbfa624dd94112f3059da0a80c583baeb570fe8314f5c66501b34116c81148dd22396fcd6479da49f7e952c8084f97d6803ff85c3787222064ca368f596a1ebb6dab20a03916b3ab071c927d87fc10ecc4e7ab4a5761e3eadaea4de1a0dee30aa39a9e4dbee047201d7d8a4df1284cf668ae3ed7dc4cb2cc4b5cae9307353fd2ae4c105c5d9f3bb021535fc3ae9bf3ff54ddda8b2e1037cd9d69822df436dc1c750a9f557d1a3a63fbe73c64261dae0c70bba6edb57519f5b957f138d1aa5fefe01b73c1851aea42938147bac2762527a492cb85da43014c876e223b05597354d7c9b328df67f354d168a84ce86dff57d8a870db034196dbeff83ebef80bbe52425a8810f2c9fea29ee688a201cce4a5f447be789a3881a9da3b6c491288e8f1091719032608b332e0410f4576597e17e0b5dde305f069be2e80d565bb979a3915488f88e3ebb90e81c264bcaddd72b8843af4a4ae31f723d50fa0995b027c334c351128913bb93e67b1b08f101f6b8dc8202b44fbc3d3dfb530f66e5a8f35e69725c86998c05ac87c561a4706e90fa095adab4a566da4fab82bff6b20076e5bdf62dbd6614245b6a6f8cb6bf60106f8d12b9c3e26f8127dc547e2181531ce980a3273f452892110cfe1ea834a30f99d66e026a9d22dc76fc3cec8fda2d7fea701deb84dd45c97dcde57a017693e90983a156f11c4d168d89c06d8a32dbfa590adadd16850854f24bba315b0bbf372f03711a20163afa0c137383b9120b26c59f5e9e7cd2ccaf0ef4e0d70d5a81748ad441ee5fe178e14317cab184fe178fb0cc0d82105d2f423467fdcda0f9871b9d84882609248356f3053a99866dad9f9b0f8c4a897a8cb8f30365a7ae5f3ca6e772d863d445e6d57c6a478e35d719d0e4e84f3a30b1816ddb55bcd79df21ea0e95da72a19cc1fe74fc576120bc108be3ed4cae3bea889fb4ddd67efe858a994237378eb623dab070d954ac780c1e6d2095383c98ba622cbdb18fb53260979fb2672c21a4600f4bf06583a112d303096d4e30e7e1060d869f386eba3cf7aec3052ca17593dcc9969fa9cd88179c262770211cf53f53f175037a5cd445d239cee48f7ed0aa1d715a22ac18a8aeecf191d415e4afd92b76c091803f4c757a9e89f696ab7b11ad6d5f24774e4a004dcb0e3f33705dd8150431f051016af37647b9e44b10bef114276d4b1055b634461c655a82a847639a038ec9f58876e84e9a2955b696e072d8054c3f81173473604d5fcc0a75b4a340dba0c375beb87b8b01a0f2de232bbb8371c3a9d27a0ce521c4c43dd3bdeebf92f42f87d88978d5b4e3e563cba0e5f59dd29c31096885b113ea5c57e66a3be015b703bc26d3fd1d51a7c14f85f65747ac909d7e30c8e800be27eebf4a62e42e538ae30b6883907cebb7fc5e150bc9da3a138f394e817df9a9e44420078f30d0d3d6981ca581791a097a5e3982c983d5cec239096c7d8cc55c87242026d769ef1d04eb96e5b5001e3358af88d417cc61f107659791a35d8b5f7a5767ae24d5b2ba7aa12230076db1f1b9b6f213dceea62949d98bc5db38743b23a59ea75dbe4231a285678f5f07facc053c2048022fcb01f15e8c100d64a877ecd56d196a6ac60ae35e0e09a517224ba409ba7b70d8f9fe65bc427b212a4e9b3cb17b0d332267cea4f3bea7c1e550f7ffe567b20e3057aa0ebb560d00d28e2f7aff718a9f2d4d044f0d20709bb9ad567c98cff7c4810e8c542370cf90a491bc1088f69998d59f344b74db6c1bdb61f284e99b517a11452ca0bb37c7bae77fca6514b341066086e600f098a32a92935380a173c9182a2513584c54ff67e580dfe16b508acf1729a3d649ff1eae286bffd688fe658612d6c8e69e6e7f7de4ba85ec54747cdc42b1f23546b7e490e31280f066e52fac117fd3b0792e4de62d5843ee98c7201529455c85b169fdb90cb05e3403cf2f737148bd20a53c73880880a14ffff37d62130e682e50bc7210ea6c1f0c27656cc1785a0d9ce93ff94dbc5b2877519d9bac4a339e98ec594a7cc76f4ddf994fee8070dd4b8e0fe0e51b93105fcf566f83d914dd862b4ce78de7e9e16f142234bd969ff8005dddc641dcd3c7cfbdd6113cd3ba34a9503a0f433899e90e158abde2ed4ed4b3711c991577c5aafeaa982bce80835f8e6d7c7975571fafb1499991646bc499ec32930367d4b1de76ff656442cab987bdecdbcc2b2bc35ce01816594bfa4b6e33080caa41dbdf8ebf2205649f98a2d3bf331fb16b9ecd1824eacbbc9f81297b115b4d36aa7496e05f7d40d4edd1886c1bac10cf3f97840a03277e6369e7a7e90d932050ab8720fce076de5c355fb17959bd75cfaeff325b0737f8f5b1160de0b0184ba04afcc30bca77a6a37e29662302d01858c0bc1d32b883011b7df5a387805296cd91bbc835a3e76152d017ee929d4cbf137eb78db89d71617dd76cb00707aacb8088ac77a1f52ed710331193edb29933a7efd8cc153e6adfc2c6637e88cd86b06036b8177847b4d086b0ff9b5dc91f3cbd1c08217023d7449253c25331594f0f16a3c5f2e122e0145c4ec94f096b45a1fd0b2dd3f1d51e58978471782a336eae49d7bc4e050d1c6a391658f71a1f752c0ec6302bc2dba9e3766359359ce34955a2db86740c90d09cc50e92dbb76e17a39955fa7108bddeaddaf860d1aff14acec8b609ac1d336270a940604209df91cf45be72edee04277d694a6f968ae6d8e065702f3d607f3baf8db4ab7637fa4c78bb0b7fe69937eb1dcb616fca564a5a521e12df71fefbc321187159bd6a47b066a3440ba634de9153a94546b63aa33aed9da2018e1f30628df37f5360ca4f2660a46ffd73e58183e8abffdea25f7bdf798a2b7cddeaa481bcc6e682a67e99143066963d96d4a928a478951dd6ec59b1be8cb23aa688e1867738aecdd9afade39c92c0b2572bdde84eb912ed990ac618834c412231216fdb84f1e01b3f8414fc6dd0f646fd0fa62bb0157b3535e1497c9272df1cc5dcd4e6ab9a8456222655c56ac73fe0d2aa8b599035daddf0986a45b1a59510abe19a11b6dba065c8bcf8a85d20a3681c2414dab7c036cc1358b1dba98d6ae62c5948c36b5b3e307a6f860c0c822ac724a5c917ed5f98ece548a7a741d366868e6c676394c3659f7f6786594196dde332543376f9ba0724b091d30f431f91d919417e5bf7ba1e9a21cb80f6c204c3a58d59d960a5788b5cba5abd7c7518f4c5170115125de97009a6c3fc4d5773e4f57fdd433eb7422c7c4dccee57a1679633ced3b5f08df763d4577983c5ca8b49bc4e08fa76f8bff36daf0fed068db47f0c87e0e45d518dffe37c129cc6e2f5f9e0430185723098e715284a42f302a6b8368a4f2dc16f534d1e5db9d0b86659fc4ba6f16c982774115d02a57684c7e5489b1f491584b0f0546e4194a6041f5e5be3bfff3852a4fc772d83491023a61a37228ef6260edc0d1cb972cba610d5ad1d92d554700771d8236ef55e983765ed8eb21e7de7c8bb51aee9368758454fee4a3f32179c1e54af1d069e0b9728cd0554351907e018146511e4d6f0450b57c8ebd21c71450116296bdfc779945da60b9192c5bb9a67b1f04d94992df4cbb3e30732dc8af2177fef17e0b7d01740b8a64db16bc29c1e589b6bdfc967edeb2ce8a649ba892bc856a929f0b837a838ca7f917a52436ea3d20e72afacc5b9d58a7fd0fefd96787c65ffa7f910d6d0ada63d64d5c4679960e7f06aeb8c70dfef954f8e39efdb629b72979be208d616071289cfaa0756a4bb5eea5c7baf8fe7a31501e7e2d67d708d461c0c93e85f03afd70bd9e16437171e01a34f475e4b5a58d13ce4e2fba72bbba93403f3f8981e0bbd6a8a6223327bf096c44b36e0ccbf7592a98c1fa67f198b628787ec80aaef848b4fea158c715799e6f458327f399e6420f0e7821f2dc4663bbea065c7bdfe830b6102e2e7193381b9dc7f2381ba808c43b8fdf3addab4b5fa81564716f7d46e0349d9b27b559710d723c7ef2f79eb55c3a9d75b99ae6fde6877b278b583f8ae3cae776b914b0cae0772397fd19b6a27676c7ca02cd07f4b4d49bbe1ec87f2ac7e39e5f7712319c31271dbbbaf4b826af8a9f4acab696c62719f7a6a032c4bcf90922a3c630647b7c1c7b78b10afbd863f07486561a0bc8d9b1ff5fc41998a7e3c604e24af1c1df2da1dd5d83eefa2e4012f7fb5959ef9339574367deff73723484b5a969c8c23dc251a3b887f34b9ea09c9a1838e8aaabb254445d7556dda257dfd5579737fe1dd6c67f3851ca68b011e7cb7b6958d588f143828f0bb24fceca31b47b77d1ce05e75ab05b55d6c9f9107f0c738f2cf8a1629f7e9b2694324e082503937ff8ca7c5098f770289af7d038dcedcf0ed77c8b82e2a9003a6f3db69e14131e144f6be7cf0bb5353ea96aebd78befbc6ceae9bdde97823cdbc5ca8ef8a993a9d9383aee9f2d6a18fc64ab92990672ea2dc9b89ed248aacf7f1a513da43fe5953335afe76d78867a066f226ae9c727c6c60671c50a50732698ef7a492d51998eb6da5368a667baf6d12b77eb36686ee0ca239dc6f3598be0bda79e47f0891fe4d8989df8c685480de11c148a2b44c8a6bea3a50b09be557c51f545a09a30e9362cf3080e6a6bee3dbad370ce24f6c5a6f8091007ca195057fa3af8f99703a601086c2a1ffe55fde4c2c4153dbff8d6601ab68743c0d50d021b0b3099535ba6c40f866ca3ff0df7c19d709a3f58b57b40ab5e43556a8c0c1938c875267bb39c0db6b45840e8ee7c22bf6b48798bd744f70e42fca343a8bdfbd7f55f275ca5d62c7288756d4861fba68d16d842c5b893c1d8171bb3c8b593387d3426f292ace5cee7753c9f9a12e6bb9af5a24192e4184f7d3d191d862d3c3dace7853eaa235b6369fd164e5a7bddd06daa3eec7fe4130e82478d36f88a0999cba1f251ffb3a7689ea2baf016073193898716a9f933448d7ba8e0968c669bdb7dd5e6e32fd84a6ce9e8632b393f9263532ec2107b4c0d2abdf3abb2de2d63511805eb58a70bc4ded040d76640af60ce7f03b9a682b8dd84ed8a47225a48e0b94ea47828f1c8974cd64e5027d8b13d43519875d2bbe4461a7f0f5b5b8d63a472765405ea9c994225806395e64dff88506f7f7f3b6368d769e6e550d4e3e81efb13771cf403e855f75312f1383ce4c2744d0b4e3735a0f1e1b99eb014fa60c0d1ca9035fbc4403330c2fefa8411fb7c3d6ede5b5c8f4736106bbe01923d483a84f031e9685a3b6a70646a2a5059ce35fa496b3f21fca6047471a5bdd33908cc9328de9fb032347c249bf7093390b750696124621dfa67fd9c7fe85d6e5a4d277ad8f8d169f8b5e8dbee280f8443518bd94abc5ca704e781e6cb1868ba2d6fbbaa850326fbfa5a20e4df6fb5f8ee2728e86a758763a8af21e1f7a8584d3f0b09a0b19fe8fcd37bc4fdf45084d7fd92b80544f29aba52496e2c9a0aa4adeb89820be321cfd2f0a53585a15d04c7fe4ec9be6eb5df419e20b71506c1f642df75c53a9e3b2414fe6102fa8af7be3f6c95de824c31fd6fe8ef9d49e26095a2674a33cb574e9e493939bdeaf5b309b4c51256ef71e95dbbcee0a11991693b533f916e1c82ce86d65d89b6d596017fae944ec364546e78abbcbe4322b83e2fcbb4c5d4ccb54d8642c7eb9e28c08598a356a5c46f8813e6b63ec2f3e3bb721b726361f85a734e0514f4e9c4732991ed3998b1ba8f618c2071d1b943eb0f8766fdb7f0492421429bd380deca3325c8d5c7b6ed16429539ae54f1eba39748f09aa44efb67d863cda304e8653ff7499cfad44dc27807779ef8e63be4b376ec403f3c84eda4e5af31c30f9807762e0980b4e5d9dc406cad4e888bfc3ec4186de8ccfcf631b0ba5831747a1c200d45ea06ac82c7952fd09aaae5dcdf5475da427cbc8c1f71ebe5132f2fcae15975ed6fa14a11b38766e1c446894f31c0496b0e5e96507d28e6e4549d6d78841e40630ef306491a1da60eaea3fb69bffcbf192610e2e07bc1124690fea61980e8ed654c5e796f67d26db5de35b4a2c67427833e360ac2a7d4fe7a5ce572144443ed62ac460c1b19402e85c79e3d80e1c143279b20a66d8dcf2bfe1cc44a0f5aa9b0d9b36c46c2cae148dd0f2ffe9a8e6e7274d1832e57aa39fb40553da6414094e838d613a20ce9307d49f97d904648d6460985b01af769800cff9a940f70729fe40e98feb64ff0a81c5b2b096b1a9d832e440c49e4e3684bd17a5169fe138d2544d9806fec027dd2a67f1856178e090f9bb2f9b314a202e7e95f2e41fa80dccf7b1810e9cbcaed2acc2445d60e26f7d63ee4b28e4299e60ea4fc659e7d6f0de91748bf1ede1fdb2acde9482bb76bf6716847eb2dd7517e0a94f0bbf20f248d2c79fa0f518b67a44d5c4c73a9bbc3816ba85ae8344b5f377649da75cf1857d6e4338a76446c48e52cc7bc7ce283d4252f8fac5e1427299edc33f84798316f77bad4a87849e91a1a23c0b7a86898046e278eaaa15ff33730a6d3f885dfe2d1dc0acda2a9e49a71cfecb7dcaa9e70eaa8fe15d4567a280e8960ba49d5289535907e9f277f96e8e652c21d89e81696dd821db5b7e1e53e160584477aa9e4c0e12160c9956df36cce6f4e724dd543827366010ed3d843cdf4319c1bf968a70e9b1b6bcd8af96c9eb0620c569716b7bc42e13251a6adf8201faa129844b5e1d699cafa1b66a674e732c7662b0410e5bca2704c5ebed7850d0ebb825cfb0627a183cc9643b709aedeac2c06700358400c389f99666ae97ccd37f265da7addeb07df9ccad6fa777d0da2fc47b6235179136bbbb409596841e921eb278142a19e6203c7f235bf8461ccadb4b47dd290d36ac27126c808b866f9531261f1e0f5c458a6bab6f064b4efc432e1c7379f9af19ac34c5c22e76e6e7651e48f9ce44eff542f018397889d896cc9001a63e8e455fbe4a9ee9a740edad894fe1af2bb21a1dd0318e28ba982c12ed69c08835ce17336ad1638af3cfe0ea892ab8e83d3f25e6bd98d5e4d36292992e2122c265a26cbb3931dd4c1b0d0ac5ee19974d0dd45777908bb416cbce52531820effcd7f28e1fb2d3d4d826e1b2673e834485a25af9f9d174f566abc3b36732ceefdd91a7c3885e1d10d51c321ff704d0883905b7539309ba5e7b7a2bfefd0494e90e9da7541ec37858ec05ea9a9ec5672b113cd5ad6ebfc5b8fe40ed7c3f17d8a73703dc89086b4d75c5eaf06b840bb2f5b4519a4fb17bfdca9605f17253f203efffc92da96fde023007d22cdad05d18aecb4bf08085c5ca5eecd21f2b611e7e8a0ef981fe7aa2014f5ac6862fab44011dfd33be8a1226943aa7ae5fee9221b0400d9ac2ce5241b09a68cde6b13c47d50bf310ecb37f25c32770a299020d8500d8a4b5d7621e4379dbd6ef34a9aceefd4055ea6144f54bbfedefb5b5b0fbd1d81c7a51a802072ec3d84f34585f22c1df84caca07849b1ef054cbef9b40848e9fd238761df5358cf55a79a53a1bc749e49ffab7c5bd9a28bf24ad5833facf43bcc3852c1e85cfe47929fc49c325c20d74588eb9833519f192243cf96625057899b70a7c93f8fdbfb60d8129d9c43c95f8782ed8293641ffd21d21d91a0b4db69d766f6d6497e9a414ceb04b65425d6ad6c8811da00639dce8d8030038f2d08330c75b0879aab81bfb3330b950e54c13780d308fceed2a103a1a8b77a923b66aba737654ba7995acd306aa7b80f632184412e2369c353c2132ae614553e626f0a3436959104ba6e0040dc597dfbc3602a49e401bf2249699375b2c722083489f54fcdc1f616a133ef6112a1754818158ff78f245b9046100b0e89407f74145fe336976af971c054f12d98002c68b3aa2bd699fbcd71bc4dc071e430bbf694595a951e01098aaa499be2f70611f248a694539ef8936b2e8b7a3c5de8662436fed1f7bc24a4e5c17a663d9a23b4692993301b08cb3bc10f518eca51081c717ec8dfbb0c2669f7987fe6aa0bd98231d8e8b58951b42537f12884a857e02d62de4fda6b88b6b754b1b27394c6a819e0f92f6b2b2473fe245678e252ed31477cc7ec6895bc361b718fcab3aa550fc9faeccfe77cdb5b151ab1db2e569b5bc923ee26f0b6113504d295112d47218140e44652a10af10a088f95c7cf2fccd040fc93980939122411ec643e26e7d69ced3178402e320fe156e774b75b5afc2f3d6b6ab828bb4993b1436faa5728cec34d66f520f59e82716ed6d1324944c3c91d04d5ffc5a921f4716c39de24768484d0096f7d8dbce35aeec22db11f899e5e7e3d57e7668f35d6c0db3542255d9262137d39ae6cf9bcde254dfccc54a6062fcf8982f781d9ffab2df4f49ec04a72eb9646d63bf9e1799bc0bec0ec7f0675ed9f8dc9b8be15d9f2175dfa1c8bc99071c70ad7bedb10a4143fa91c89f54777f84c9eae9361cf7f4c2b7ab873ee5785a5241db0af86f3c6d7f091623d6dc576d07550a42023633a09c8dfa21d7e70cce64c13f37663f75c47921c246f3f2d1d16a8283ce7697da4cb7e016971a2a1d0c59d6202bc18b7cee3828de597efdab53b33a9fb41aa7b49f1c964512901773bb396ac80e90ba1a94c408b2860065ae9aec64a41d76cf8842d299d0babf14d5840d647d075c34175e26a786f30091a24f1ce8db30137520dce1cfffb6318a0d0fdcac883eac603bf365efa2c806eb4f194cae8c16780342165222192f6ee2e103ae2a31dc08a84dfc89c64d2e9ada7ca1839dfff62ddfb7982c79684cfc821a098bc6bf09f87317209b16d14d45c6f38fc99f7bf9bb73460977bb323665d480c87c687cec052a5f08a2c6744c8e177a8a269b4a47a925b9123cd2c014313edae988f8aeaeb633ee5ba6be7f53fe36da3aa37ab2077f5fd75a82a55a0fe62af213b85e9e7694f78cc2b0e63a8c1b89db484722fc62c688678a511c474f0eff8eef1382946d26de00e5c626ec1d7079445c1b7c6f7f05073249b11fd1fb30257724a14cd7bbf451146bf366de2e826fdf1d25705587c4460040ab963e3bd504755b6aa5b18786b68efd3c8e59e8dbd172346fe7f4a18bac98164669d73984044f3c777368f965763742ab86a3720208c64801c796f6e3a1c4748b81e41ac58dcf6ecfa0453b18fad7e3473604f57f7da302e1fa81ad538d4a0280c4ad092007bb9a7a12907227a936871886c699db97d00a1966fdef64d9f3672f1b792c1edadc6781b391c91bea1bd7275f30859dbd1707b1f554e49ceb874ca06e92ab466efa7eeb6990667a27507a7ba789e24d593ea2af8eccb3862cce58daa63eaf212bdd86c01ed471cfc79b191c481ad773d20e821d18af85a7049034e5a9c660357a4c2808b9a6139f32c55c13282b8d98904f4f027d438189dc9487c96172e50dc1100ccc224e7374cf96ea6731032c43fbc9b367a4d1d0b31aa3fa8eb589672e69f1d9144114bbd508d56c2049ecdbfd7b43545375a099ad2885353d8c550d22dbb738e6fe3f104b444c89475a2cc24d7887daced8fa05006c02dfded01c00707e2ad04c41199c5decc1eae34b0c0abb5a5beee1b5253c3350e1a077682767a0b9124a4df2e8879366fd37fc04d4dbcf89883892f46a65ce3aec22123cbe6b3af6364df1f9f5f9751bc8179b6dcc5c126dd65feb7d11a85994e90ab6342834c79c5f82413e88198c73e932c66e3cb60b6e0c0cf438622e5dc5a1036c38afe9cf13559044a9e90f5fd72a3188ef6b1043f5f4e6b40ea51f6235dcb33b3099b2d8c2e02103235f0476ad51bce6d8a2934068549633e521a3ee4c62c22b042fb86c13c8da849233205a5e277aea1129678c31f5c379a71fe08b72fad9449cb923126dd465d1e0ae8a925374149b8248b3afb69f168f3ae701c00f6ea08fe07f1b5338ce6af2f3156ba6f300310114479f2f6119367c88c12c158b84be13b9c8c7b5dd7c90edb5b3ea1fa5927a25ad6d5596992dcd4877f58a134e05dcd80dde4fc2c2a680cc0ccf3084d3f4970e3603fa6bc5a180fcf1ca4241c0b8a1e7c607dc025016e297e2b0645de4ec2fc49851b9374f3ef99edd897c284a67b647ca8c96fcef935d541e9faf334043ea50b99fb8819ecce039227b624e52d8c20003b5a43808e4990da8e4398c4fc172b983351fd11a13dcd2aae5193d42d46e1b57c92e3e01d23fc968c729f3782d6c07dd5a17af2bda96735c12cc7d8023629fb0125e974425f7914690a7ed26508343ae58c8a439ebb6232049a194768d4594f5d65aca37a5686c2a86dd04bef35d74e0755937ac0ce3ebded1c00c8adabf030e5e4a5f44193b62fcf2f1bfa9dca2a25afaf2f1ec06c5d17ef3526d26d17af3e2f257ded24b177ba41c0ba64fd4fbd5042fbd5961a105e0e9f77f3db13c1b6c5bd9a9d04801a5c00a4c544218a21016c65bdff774a44b1d05256e0693e14d76605d67bd10048d3816caf31a6d10886c88c783538bd93e92bbc4484f3388b61adac4b92b911c76ebb1dd11b7b4e40be032bccff610068746f41e34a1fbfbfe5faf57c8a4331008e2c1cfd69f57e74379ac80eb6769f4ce4196795b835201ce4ec85ebcaf5eaaec242fe6695cbce1d53fde5b002e006bba8c8a1ee57da061ceed0d21bdd57ab0cab9e46bf3764d9a6c3ab19736d43b33f32eb955f9174ee4a54666e7f19cefeb49aac7a59b7370d9ae730b7bb4e08413222f0a66bfdac252fb61bcfa838f262312febfde8add8f6843f1d64ea3da42d4ef986498604d65737a44f5a099338520cdbdb65ce73b110dd4bcf8592a4adc3e0170b13404f99f0ec8f9fb225c1275a921f09369db165e9109dd5be472b9bc1901bfd882d264d9ed8d88b4c8f3b35f88b69e3e4b8ef5debb895be536a3af492d968dc1caf31879d672f70ad9869ea98335cf9e4a2760f955fd3e8099e4b2eb4269e354548f9de9921e50e49f3f5cbd63468b9db0cfdf17250c8f13535d4c0a1f21c87967cd798fe93b9b2960447401ef90db22c3adfba0f55f5585ad37040e8d6745184dd536d5a26edec365bd6edff1bcc616cdea3bfc8b9d98c0ef9a626054e361194cd05b2287612399f6d3d3be2f71555f14ad2893af6f60ab61adef663c3c2464ade671dd5ebc71935aad290573588fe6e11f48cd2b7db62e4b9932890d1b96e1b83eff70f026d199db75fb1e83197c937b672613c66ea131f485b4318e27c079b4018d4205484993bf50ce70275b244f2caf47cb47eb2a9ca59afbc78809a912eb56a4bb65cae4694f682c6329c690003a1c355f779b5857a60091b1c3685995a366cb43d753a704d3e59c5f5003c78feed877351e27334b3fdefe5907edd9eb25588a42248b9c4a93efa7cc63bad1e5900b95b70436c35eb85cc8251c4030fab9556920141cca24d6acd3122b92b7e868dc174bf071117958a4797fc90866aca685f1456fab397ae647ab9970348082bd74865bab7f248568db98ced7ed84e8360fa91afde3f23509e6b4caf948349ad9fb6a4efe0a0468302cae7a0f999195af1c19058669fc3b88b2780b9075dc180298498caeb7ba0cf8bd42eb36b1959d5ad3ca6fd1e85f76abd27ec5fb637ee38173ad7d86304d5708b6dc8817e099e77f5d43c1a70624cdb96e4e6103bb25e59eb51d894d1dc533a74005bb79cca35b66e10c61d06b5227fcb071457025d605a0862218ca252b871f8343ec231dbee15688aeb914c0f16ebabe6edb0a489b2bd10d4392c6f1863bb6a62181de7cef61997ab02f3bad0a893cc0cd8a99cd7b3f7773085f0929de36b5d124e3729140c375de9a2d0cd9a360cadf17b9e45b7f2adbdff9e75b743b62642ed67aa703b8ef33dcf51a50edc7dbab42d3d2b49badd2457a9f92847aa6a60ae2beae457a5fce1a9e485ecf907be22913893cd1350f20fc6c81c94be426eaf01864e813a03e4674491b61516bc95d8a77c15f03d0adfc4adc27f27a5ac4165ff6518eda1a5c408708f78a9e26b834179804a312148d4f75f21a77d78387139da40c0a6293c2a59d0162437d68504f189ed970c5abb9ffc6d8e1be2b0877c7f24b1dc273b1765bfc5ce6f4b8d99a96d5b1c92ee53a39f685b304313d909c1ba8130d20d51c824cec420b0315229df295f75b453a6c131afaae0c36d7c4fff70623638a4f7ded5eb7db58d95deb6249a29b171d8ce651556dee8037bf4ca74453a4a76aab7cc07ba44e55de57dbef8542c3851ea353fb8e259ee89bbecf9ce8d8bd6227afc0028afac48a7acd9b4e8cbe982eb1475917ad6be4cdca9cf6e7cddd971b2924f2bb730264801685d387485e41993c3fa0af9987e8b52c21688fd9a9595ad8d1b9f41e0457be18492aa09f69e64e2954d1ca3cc1d32b2915cd9cf6862ca79c80beb47347c4cceadf48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab44aefdda94681407008ea48d03ff21e9bbb4ae7a9aa37c855fe3537c44106e8079f18c24d2584474bd4a99367660ce6f7e6d7c294961e174366e7babc569d5f80572a21a4bd7086629363e0c9ee2599c8b8863c96613ae6c32cc67ccafc66e1cce79654567ad08e62e9abc99e44d6a79ca4d8de15b7f8a763a4741676af0e1f3bd4e002c8fa1ebfbb3bd3a65ae68a80c230422f98f6e1e9837252e045eafd585ba389958297d59aea1e8e1f665fcbc5f7ff449996aa712dc0faf582cf3caf3dbae80594f9f07fc06de63d9d672d14d7ac4662b4a54f40d4aab2de766910be2fc7f6f679b5708790b5376498d3baf0463dca2f093b51bb7e9f3e7033ba0384af0174becc3bb477bc5e86959a12a5e8924adf0bffdf5e5b9c1cf24d232881ad5c05c5c0f50318ea83d8683339ca6a583c52198c00f7c1abbda282e7fd3b179297338ecf9c923a3a87a130dfc06164e9b4c1fe11d51b382643de44b30a6831dee119241d1b6f84f2484784fdf65e41f78c38e15fb4b00e45df1edc40e3467cdcda351a4c0a0185ac4649e91024377e1c331587a8586cc0a4dfe29e14004c3536d305f5dee0eeb8c2f216c1b8d27375b239f6458e08980badd6d82e9ee9e007578c0a3b48288d9ad0ec3c934a99a8c5741149af937dc82bdb545df26428b87fc935c05f1a4964a8408539f267e23de9bc498e2a4b0083cdb7c8e27de6252bfaf680a6d5b7ec1a6dac6d7d537334a95f1553324a0739414dbdb50445a767b0f589fd4c33b35905577ef5a53b0f097191f9cee4836a908748779941de2a78fe1bde0c2efd9f48cbf232ce101d9df93d3ed40d036ae7aedc3a5ff619abd1c159ca8d2dbda7de13b4ca62576c7f925c52925eae2d7500dc969fe14c0a335ff95a7df1d276a6f242765c781208d59edb5848d412b11638b27ce5a61b8209075976c2a6aae88f6e6d8704fe9e83b425dec4defeeb3cd311b8c5a818d51f917a8a4525361791d5c4fd5d70704d4b9fa9df1ea119882f400e682753a41931712c043c120a98f0fe786a600b47befefc9d64cc5bbe8a16c191490874e258760c9e4fd215bebf848e0b4d35521f53ec5f9308644b785171fc4cc3ff886e034bd833d59dbcacebdae8f00e43c151bcb24d1d226d1cc19ecf349361530a81ba3168af3df5536fbe52b3b93621f57959df298e5b4d3c14928d2ef7b9c977c7dda54242d17f8661978a62d94d565b00abc199790b9b25fbfd4a3ffc35c95ccafe35d9a138a2c24d17f06ae2cc376e822317f16fcbcd56e23f84ec135dc935e58c61b34cfbf5a36cb00350483b6bac786030e5c5045a6b61c9aba7dfaa4f7fb21897539863ee865ae061a77c0359915de3aacb3b5dc8cfe53c4d17b393c2b6bb23652f36390407922969d510cc97b99d1df4361530aef10707d7a021b2d9576b2d49ca88b3cc83ad1baa6d88ef8c81c08f8baaf515637b21ace9d5cc8fd9fe4ca6c3aa129caea7060791d566f4de8662b90f9e5d849cdadf9bd23cf6737b07ca105142663c30de27adcea11d64d433fe1ace84b0f6917c8b655f2a421602f07e0a7127e61ae9859c5e9f652ec82416fd2566f291f417ecdf99bf3231d02864e2e5a1cf34c13f59de9aa2760d8734bbda79576c62f566b8269990e9384a41c1634271acb4c7a8b768f276685c3a8c7f20872e56b683244b1af562c3e7dcf592a9915f44f886cc2ac5f679c07d5aa1fd69cf3a460f25c722073da336a310aa551062d92c7297002060072af2f3500b9310c239bedf45c5e985c2e0d60c7dd68522376dc7b560fb34d1b5089450c32ffcbff07b35a96bb6fe01259a06868d00af697f8bbb238d03d49570a109181c9576c1ea9d2ee02000cc23e63d6c93c6cf3050bbb15b6f73b09c25da62e5abd4c2bdb1110e1f25db39f04885595cd6a388c4726c8d4cdbad87d80d42fcaeae843e2e17f44c9aed25c8f6f9736c7ba1bbd3b839126de40a930024a65aacb872936e446114e706a868444cb140e53d976816983f3dd1d57eeca01eab8211b7aa8ae99d26e35c06ea4b226e0a6e52172a40e7f0df5f67759ae2ee026749ba10b8e33694c3e01a001526f9d75f6c419cdccece3ea3f78d69014e509c741214581034bbc7e2bbaf76db8421154abb2233117a1ffe2786b21424576e295c9baef262e80fa2edb69aff800b3ea436eb827e8adb73abc48d740b86c69d557b16e874038598b25f616afeb4f4a900be7dd0d38b5b6fb4259c51a3aaf4748d7a445f518485ed72b25c7df8ed0906b74bd29bd6a5724ac3a503c990f3697a5db484821f68718470810862728a80ce34599a41fc5bd8bb46dd845a4812ae1532c457ef4211d0e41835e5a6f030247614822571c930c727ba397e723d6b3aeba9244f054e331c82e65b74c9f6504c74b4301499a1a6f6269a3352aff57f88442d4eda42a82ebcf7776c5629f97d6160bffdd8282a40ce2e6375b161e4c22ee53bce7a45f4774aa827e2da657e1a1bc07445f0bbd770b7a5a25b1b469fd58715510dbf8d97af4e1b9459a20b08a8d3fa9d92feb32db95b22d36de0bc8b1c397b09970a6826392fd8392b2d790dcc1295888f42ac81ad213c7328b2324b28be7cc1f4fb8414a7785472f1dd3e11d66017b1756d1697be92490e15f056346d7e9126a1f35fd76cb016fe2841c8996a3507c4fffe7fc45026df10b03b86fb6cf26e8418926a030b5fa62748fbb728fa19dc2f8947468c1477750771e442e4a9d25b76d359211c05df788ade5b7824f8770b5dac0819737dec916ee59b28a49666ee8b7ca81386eec8049542f18a3207e51bdbc291470eeefecac385c096a
40
41[L = 32]
42
43Len = 16
44Msg = 43cd
45
46Len = 104
47Msg = 5f75a437ce0698a7d8151c3fe0
48
49Len = 352
50Msg = f88bac738d1e3e10f75e46e3fe026d7e423fdcf3d7e4028b33a291bb4aabca53f780fbf99e0346d610d4a38f
51
52Len = 488
53Msg = 832e5b78a73a1012ee62e00621db7f4d248893007c6e5d6e0e689c6b291baeebc72df9cf10b289fe20e7fab80a2399271d0ac63766049da875eed56264
54
55Len = 13976
56Msg = deab57cdeb41974037a9bef5e292894038264eb4d8993d4d1501e6ef9c68fb0f571f57b0925640925deae9a6317e3bc4d6cdd5a0833e52fb48baca16a9ba9b6c8ca469a0555763b54f04c87d4e41aa549258f30eefe5a52d2ba06657a8773b0842e094857b6d8911d6a0636280025e56356fade362b4bf4c875cc19be0c6644b447be0454dbf390eb966c03e10e9de3487b90d0825d327c12495e3c89ad09c9d591e55c91376fb14c2fde9f7461fb25450df1a65806b65f3caf4d5c81ebc6e664871fcf915b9578bb70ee6776acc62205888dce2baa4024941209e81b4b35f0eda1bdcbd9ab1d6db6140bda4c41776fe675d5c681da5852d50c246dda4ddf9fdd7c5fdfeec85ff6c883c78689c2977584406a1ddef977606c182d6c33561c39c071668a2515e5aa6f4aa1faa392aed95b82ab32b79a15e3b5a07551ab068455131b72493126470f26c30b852e4415e1d8b719b3803ecc336e4facbcc5d1908851f4f39b776bec8b6b9794d47e5965458858560eed5a0305e260240c0849d93a19787b0f8c795eb5ba32be573845256ae6d0b0a3336e42a1beac8bdde6d1b6e0b6207903d4b105f4af2ef89bd099ded870daea2f170e03bd5f6f4490e60bc222d4876e16d4c58aeea6e6c400dbb9e9f4b2b142f0fc9bdeaf4132ded38a4a8366e107cac7210945fa2df4b124be37ef76290e5b9758aa3bfe0091bb0448206323584c2f833e0edfbdc0c33075fc9647a3404ca490bfab94302a0679a1a42fe9fec6af0cd98038b09ffbecd2832b579b2294f6ae5b96328fdc0a0b9b3a32cba04fa8bae3389c3951173bdc17caaefe526aa386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f24237d8e795ebf52368218bff3e9d5b040ecd2caef4ab1e7127e53bfa2b3b4fb74829f9993ac703192aedef79dd9ad24c2c976638b4575afbce22ecacc273ba43379ed55ceeb51838b0adb80585bd1b5f2707ee16b67a7232adf7163415b24b9ff9dc94b7197fdc89e2a90d2b9eccde45e965edd064dc0d1eadabe11b8ec3aad2742b5d3323ebf913a92817749090c20758f98aef2544d4c8b48874e8936d7ee492d5585675c214deeb74fd67c4d170ac5e0aeefa607c6e37abd4f8238e776fde3921afab75cbd8f392d3e88da057903ce2e140797f4a85737bd89455e6aa27c7535687b78cd0ea59848e006c8de9c9c0cbc7a9f5e977be850adc710503ce4ba7c7bd0b042297f518abec6c8ef451c33e030251f506cbc3744228b6bb4dab86877d9e6019a0ea9f39ed37557b3b5527c171da5f013e0d3c480a038cff2c087d6e5d41b17e6c8f90c334b5e2b9ccbe9d4efd99fba1f907d00a49b71b5a08aedb644fed24bcf04e71be67b03cd20d53ccef8f854f5e9f7f28c1e98a8a53496646713bebe15a93f1ea336e6e8a4e68de5dab0fe880bf983eec75d1c5027357f6669e098411e0bc3ea2293138f5b34425f78b6508b94d4c0cc32ee9afaa409a26e5f2a1fddcd6d5ff42a89755a58b08f243957a2e208e24b055f51992ab447bc06876eba169c545fa71b88a0fc15d1e0be9d334a1dd0c86f44bd149b42c07608a9a30d0b7e13574f8d862f2ac72b2ed38904d7cab194fdb9e4dcb615f5610b24e202a36866baccac01fadb575df11dd43e00a3b92fcdd8c7702ea49d951e7dad2a56c075730b4af1ceda2bcb2310256f28312579fad40ff471336ea6a44143edfcffc297258d48bd2ea47efab8f0dc00f1e6dba1a55009ed627b7
57
58Len = 48824
59Msg = 5223e2fece634a95e1e7c83ad4a11a0478f4a41572bd66c2d7902cf4f94404cd80b1f58fbcb8eeba3984fd759410c12f8ee922865f363f684df5a8787c87ceb3086fb8535157f7f39653dbf5c66ae7219253838ec77cf1c6db518225c5ba0a8212e5911236474b8820ddcb8111b87320adb82ff553986324aa2a21c37ce4a083c89ce9931290d4c1fea933e31d014d7507a28e83aa917ccae10bed1a490e77fe501b299f8e3b78e659407ce1934d5d68c7980800746f26ffa9794ef1d23f793bd2eab7fe524e213e58280f441ba48b40162305335b3a480c2afeac11c27f8d817792fd7805d4b61224eb52d35c0fbf471bcaede505fbc9398b216f43bfd69b1a669a61d44fd21faae410af58ff95e1c3ff1528de1aba93cef56bff4d714d8c4cc88a4ddcda52444ec1208d99ab3fd9fde98c1ee6437d8d138f62c5f782eb4660c5eb28564b5b0d46e3a2546009148f3d02b837c5284e9f508290270b97b9b29e84445a0b4df662d9711e6b73c11cebcb7120dc427034b1ccf57d8e4f5bbdb84d2e1d4bc3862a2b51931d3c9a7a5fd6ee5f4c7327c338abd011af638d730141b6eafe63469eff50f473262e9fdce636eff4c5663acb6075a4fdb00c8b8a8d3322e1700a5b3e7db90b36c1a94991b8f51657121b442db6f890e208f312466778d73bfaa8cc0ead4edd0776155f3eddf9abb1bbfc0c94421adce83d7ee94f99f61e1f25a55fb596f8b40ccedbaa8e5e2cf629496f5ca60bc4cf36d917da4e2b973eb57869dddc409dd66d5061f22642743fe843defa0b19dfb2f56425abeb234181267b5c0d2ab4268c538510feb191bbcd1631b0af6c7451cd4c641025cd8bde2d9ab6e6b948f97c1ee6f35098d553e8e9da9b4d437125046864633f109d6a558b38b270a7dd1785d44d248a863a91e3db5c0a1d7ec133decb65e81c3402c98ee329f660a092172bf6b1a02491895394ebc506882805a6c93e767c0e58a5af717d950a206c0f0055cb39ed88816a9fe3613d15f608e486ac08bfa67d462d24e6a0a37716d3fbdaeb9c0e951c1e847fb884ebc1cfe707dc6e7269eed1c44331d5957bc4ac9dfeaed4b157204a3080fafb9df8917b8d15aff9c49cdc739b8fdc26a546794991c183fa523d14797e051894f48b0d62c2b70834467ff9c993b82fc1152c1f5479ec6144c7e8fb10d1bce26bd1cdbeec4e95ee073f3bcc3c7367328e30543d371b27509a577f5c79f14d5f687ce62b82f856695af9f7dd350543ec763de75b593f1859e44c2ac01ba65f98743cfddd8a89a38115badcb51a0ff5655f830c0122af6a830aec13ae5eb89a93755b3a5a6eca233f21cb12db545a24a5334becb8fa32c3d7f5805faeaaeea85a551fc62c94807faa6474c0d74cae79b5d8ddae07498fcc5b8b4f394867112ef5fad1c9da66765ecbc7fc0f3269d29c9c38817c77778f2c19b5a3c705fde9d76a4eb86aed4a7369a832ad267312903462397f7b8fecfa8b195cc2316cd53e48c3371ed2ecaa3e484b8ecd2e22b1aee910c51ed5d71198936266f5a00655d82c089f49295feda0a2bcc1a54ec8adf565acc3a8b2d74c30eafbbd843c59e67f293f6d8296cf7b611f01b57dafec6e2d4d411a633918068c38ef47b72ceff1fae772891141c3bc496824509d78165c1e4cd4b4989321a8722643eed69950dc120fa8da3e53c3181f252d7c4cd2cedf8f086f788ee77a98ab5b019828aa02108f49ea4a51f457f7adfd2220d3e59d5f4a29194e8f5eac40ff80312ff6888ff6393c3fc0914b08c1b9990d247ad80a441558db1ee1203e07353dd99a885a7ff5d791af2548815dde0ca1f56f89d39ef6b93dbcd0cd54b854173903c12649587433f0425fbcbddfb66ebce3eb4800dfddfe7fc44d9b23a3916b1db68c187da4dd13ff0157352814b1a792de7fff855761abc6fb7b93b48525fa90fbe3a51dea974069f3f5fdea86387eccee13f58a8eeb8abc6a43fd30e9788c3bd9ae1751b30a82d420225b2abdb1bc121b9073380be16107188d20be54f2e9c658d5b443869ea0e991c496104086290b6edcc1b656adf94f0d42458750fbd8d88040c518ebbb644f4dc4f7c6971d8d60eee0272df7b51a3d5248b4b264fb22195ad891fb6ac994ae5c0bc6714ae0b0b9a484edc576638b78ee89b568195a8f33ed8362128c30f9b0c7804b3ce1355abc96b15aa55c1e16a9e9ec90d1f580e7cb412a7e85d8585bfb950acd4de5865214ce4db7f6314d81784c588c1482d5f28c5fb62e7dd7aa8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda788eb2015680ac5610fb1380b4e7d7a9cda6178dca98690449f5551b66ad2826cab2b662f56903fc95b4611bc86f7a834a34ddc3be7bf142c8baa096abaa3cd51ad0c0b6d15e590eab9e50a4c60c91061f1ed6373d91974c1ad9d263110a0d43fd8b596396cafc0ae70b7ac24a59bba090a6994ec483db7ed4c572f723670a11c724e8ffa2497d8fccae37eaa1d14ac1537eaf80efbd2e597b2ffac97f2bc3cd2c4017f170544dfbb0d9109478fddf06ec0981542bc8107a725be25070d2cab4716f4edfad75fddd582ebd363c49e8efaed9a76ee51f22304eebc232a4f67f865b04f610a628fdb317116666785fe8ca30619a07c83cc449855202d687f162b12d93b63af6e7ddfb7223d4ab998a5f450523c1d521ab76f4aa113cc2967e04a38dae07c51c2d0f44fdc8605c3c53ccee91a2c73dade5dae021cbc87d5cd6e5fbefb65335827311fe1e91921ecd66b2055a6102d7a976308a80c44e6d47a67718c84f2112d65486a558f1f269b91d9f47e3e11d09c0c748625bad2718e3674898abdb19d3644bcdc9317c09a3ac02f514b2a57e6a706362e5f6e8fb16cc83daea0eec85fdc8c367d84c9230730291440a4b109f7034d510a3f70a22dd4fa69e8b65e5fdf87045d560eec71f4e59531c7711d4f8917a96e22ad07346d2f92a13fb4569fa6a075da6e1acad1eac1cb2ef19ab452264de2357c927c6dfae6598cbc821eaf3b8da754ce91a96c702c95b2c308bf3a550cbf4d22d417745b5f17d36608feb826b862747c59d26a0e8eb96547a1852f9fbd095f1c5d20721804941d462f3ee2f0876ee2825c8df24c4f00f0844e50588ac688127013df8eba3c971362dd255420649245e880212cb3d732fb82f866dda090040f28e09cf1c86eea5dc4fbfc373eb69745b4afd841ca8e172d4a8510e7698345fd4cab9ec2ca0453a274720bb2d2e5468bf0d0f85919dd762fe3df969e6c071285e25c2e2a49659b8a78289aee655965bfa3cbca9b292a19a855ec40293185354ff4da9451ccf98abfda07f1137e79bc89d688963081dec641a99656b040637402890f185edb28e7e6a2f65848a6af158f90eea440aa6246a2e6c31f5d220b9846aae2027afe5a7caad6dc16b56463367cd9e73bf22a1d6172145de4565ee369c55e3b99ccbef70fb080a3748340fbe8f6b95ba46e8b76de5a3c4bedc37c55ae24ad02267da26769a3a732badac2e0f3a5393028dd54d78701647582cd04c8310e9f1ff1b433125229547130e1737a1f33604f0d670ea7221097c3eb9c7fa4b8293d7b429af76191ea8e481dc1da31344537a09b33404d782eda1d6f5775500c1d8efc615778baf0905d9fcba1806ef986c40b1c6a72335104376b58266c36f5939a8b95123e8635c0c95e80aaeb97379b1179d6332dc07539b595ec32eebd3a336a1128f3cf2e2924db6d8504a516b62f26d012b7f75cab765c8374a3824da5a405746023b51894649ab422d636513ee809fa181d5b6fbc63351e37a1b14efc8f739e86ca78ae3e280f1c9e4824b2976ec4dd308ede6171a7474c7f530128089bbd75e10f9e57ee17408b4384f99f886a5f63a2320a9b90eb9bf692e1fc449171eae3bb1bb17a6ed937ea57af3c82db84e073b5306683e1d63705b9742a085fb802cf5a1639818417fc2223f476c2566351f4b3b17a822e11255f3c3412dd39190e200727bcd3f9799519ef792ec7c2b0b9d0e2dccf013d436dee63483c2ce83c15c00a76c4d894a60cb90366ecf9e61221ee8bdaec66d715159876d8305b35c81f96ab2cd8f81f4769e9a6e439c08c329036f5d2591ac42f2747bc0e77d4e566358a3271819b6003b290211b9b847ab70e906aed9f86cc38aae27e1098fdc3bd5d84e66c45292183f198bc329cad794aa4e430534511b7d9a75104061b409676a16c1146af0a286e2de8bf51c4a35193581a902bd3224cb9257c961989042538092af92644a63d6d6f6872a29aceca39341ad29dd22354812c4b7c7068b039ac9ca7e6358e662a28be001d4aa697ace540cc3ed3c97b98d8c5a6fd3543ae9a7962c9229b14b0b646229807747064be3e83191cf24092dd67f675638d9f6510486379f47f5eeda870a3187946819ec9ed05e7b325bfd0eed5c9a0f4a2063d63c1a8a0a309f586c94d4a68bbe860ae9599ce204c92cf9d92cb460ff99cff9e5a8b3824786360e1e1861e71158395faeaebe7aa2f61f76190f174aab9a313f0bf4f1befbbb22768b8c22719cf3fa9ec908b576fa4bbc084b1ee5b5a7eddc89b58b45ae7b421d38215aa6e49304323eb4e202655f3c8b16ebd6b03058e75a907ee63fcf6aad5eb96c1e5faea81b88b5eee525c4663af52877c0f759432913b9d48030903e7f9f70e851cd4e20bc56aaf36cb02293d992b38b583b8f0b25a08c3303d8af5b1b37f5127f7021b13934645ef3020e5caadc5e7326ed4ff56f797e26cb986b6512b0cc76f1d8e7be44aaa88e12cbc644f14a7feb979d2ab66907063c51e052d0f8b25d827377fecc5111be0d365e08d17f559e3134cb9db294f1cac03150f4232f853ec15ecde55fd1023b58e83934869796400088e9177e85a2227ee45addd049c1d6b03e5b29dd570496fdb2fde7d8cc74fbb5fe76266ebd90a3b4d57e6e6cb9f0bbdb7ca03ae955915768011c714c909a27ee20135927af55d4feaf2c345d029a54af942da6f85f2103345d059f66864e6b0578111e2ddd5a1cd8bbf4ae35b60747b93f53ec8ec64c10cf4149909b102a2b88712ff3e5ba3611cf96585a6b36fffb64b8c37a114d6b16a53879136eb0b5e003a5a068e3e8422a4fc8d7c77227cce64ebafcde2437166b62ccf486660a7a2ef37012ebacca26ecd5bdf363feeb06aee39050974c25d6a564594c67f56fcf7ed48b07fab4e25ccffe002bbe460325abafe37f23dd9c145b4667f146a1635e462330f02470b35c5a2519f1350c02b263201ec9026cfc57d3659373910e878f2b6c1c5be774df8e01e775d476956c257bd0ccdec17ee939c46e5653d5813eda752ba7bbb245a99a5db1ae55d19692074c2e5820df97c502a4bd1b12929e1be8e9ce6d802347c3e9c4202de6046436c05ab55b2fcb2c227adade6c2046d98102cfd0d859a91f8104eb9f6f155da2acf93df2405bf2c083eafd3ec41d60b810e0bdef6298b21193642a9c0c646bc6771a5c61a25604d96bdb727abd5a7ebe4ddb2a56a6ddece26d8007b26043ad44279c3c8ffb7e6ffb3cd4e10ea2780f509a8a9bc31f99a7e66201195f1543a0a020f754d9a665a29a896faf673df6811379579891374c71b2234fc61e95d4d46f15d44bdb4d7c3b3be3f46410ca46827b8cca976d8866e8ca33c4945d5c87b705588b78015b529843af0b75a7e1e871fd276c1e947d896b92e6181ab7e3ccc7077bb57fe85a6958667d3d7a790f6cde1cebb494c2912478a0eca2bfaad62492e9f1caaa0cc520da08c0d2d910cd44255f4c2ca0646dc89e789a1cf9a28e2f99315d33accb1639cbaf0c94181b85fef648bb4cc7f66dc65b8e90bf5f3b763e58520098febfe7e47bddc2d9cdd5e40dbf4ddb8d51f51bde2e57432266d248d13ed09e62f66794d188f9861c50ec41f0eee30f76f4ece250956733ee97036098db41991a4a3eb7816196c8e447db3a2913bcd992174a7bde1f42d57c764b47f5bc09533760c1ba74943a0dca291f2746bc1fcc573f9a22c72a5eca347b1679683fbc8f32b08d381baf67b7266b14b3ba46a04a3ee45881ac452f64df1bf17f70f4cf9fa4dfed9ae70184679184784a0451d2f5c19c02031e0e4957b4df68b4a069a6f6f6458f6d773924a1841ba664a55c2c3187dd33416cd410e56e4bf8d3671cf737bf67df2a4cc4dcc786872b9e2dc4009fea0e48a749353ac053d80e36357d24d468dd595bc823017c015d7450fe38149370c5decf13b00b6b0e0a2567ac08b45f7b0c8a7c89d227219d051d17a706ccbea49a42035cb327381568eae23b5e2a3b7e8beef6f260d24ab224827ca8ee9d640dd23eee94ed02c9e26abb3053cbfaeadbb1f365a24d8769d92240da842e0b361524020b5c9c22a2fd8602dc9600aaf02b35344309f6bb018a94d4cbc9639ab7430657c4046f0b25df517e31626abeedd58c2e19aa0ae1a43ed2bacad91dc04a2fdf9cc33cc420f4f04379e95988ab36731d5d5402d89fb47e826f4243bb206124364d63564a0872f8d2826eebd9046c7c6f2e7c951e49d4b22a7eec89da1fbed890d63ef15f26422185143c89da3ee269f83e1de11a7467822146042be92295a585e3a09e720ec522e1cbdcb41acf5ac45ee892677ba3ff670d71339a76ed98237be252ae21268e756f05ba0b094a1803f9da84a8a05d0ec9456cf565e1b548cae95eafa0fb01f091935e6eff2413bcb15f605f15270408216fb5b41ed83dfa1454c522375e35bdefe54275f109d0ab450636ac4d8e4d9e27f2d81a15b8cc5e98549254a1c9162918db3e399118f5864774a9d6a2347e1315753071eb1204c8bf5f52b1a0da37e484ebbe545fdfe6b031215678c3b83a19a24d7b661f626beb01eb82b384f02f42bcad4f40addd48db8a92b90d2297e6143702056123286617f86fbef4fea940f648867d790b8f803abc5f4e0e3f4226954c296afd96e287e21b7243d05e743161810da578096521805edd81f68a45500f6a3a1885cb1f45cbd399dde024df65072eb973c827fca13eeaa3f140842016f509aa9ab4603d2457c92cc9aef24950697a0044e3d7c483b8d8391886cd50dff8c2f16de3d6caa7f864c1b3874750781b2b78b545a94b4da0b0036433c6561f5cfea50eae9f5645302eef18238473606e9b9931880d0f6368fa9970d1ffbe59c4454bf97f4a5e8091801b53ee4a209e0642d83605836f69742071aaebd9d813b10f4ccac03851ee9f20cd1351f8e68554c9bc5f58ad19d474ca128edbf561d195e52ddf3c19bee3bb597ac2f92143bafc98bc09fbda6d18dd4ff2a93cd2ba17f54f75c32d3f141468c2baef4e53b6a340286dc2599bf7bb002aa86688e26f5b51a6aaf32e48ffd539d4f3f4bbf0cde2d20138151c82384f9ff29a634ab4e0103d93340bb9a7b0caa108bc7fdc88d7de14abb17e9efdad2b0f304f0bfcbabaeb1b9db75959dbf54930e67aed3a9c8309aa90506b6b9ed4f1d06c4ced19746e206e1e9b8879663bf56bf6c5c920ac5e09e6579b780cb63e1875ef0a731b726864b7ae5705a2d6d343a4a213a05928b7337a59f900fd04472382610e2a8d25383c9ab5804d609e79a88d70eaef3ea22d3aa9100fa2a6e98e97684ade9fe90d6bfc59dc9dec3d3d8db8990bc2123ba92e64253235e9b4d682e8aa04e23fb9bb6248a77c065e93249de829bb2fc5ea9e396461090222816bb29bca37bf86698fb995f62c50110cf418bbe2078a56c5f1ec9fdf3d0b09a719ac253b5bcd00932ae058b86611aff51c8ca8448978615854b69b0216a6eb8050ce199fd9a13aa0fd652570a1b187f61e6831b3a960521c3705da8c5e6c64c7b196ed4a49c2912d77b670b177c6458a7a49ecc1ffd8c57c0978d2a05cd1f1c7ac9514dd14b7b0933a52cefd40b6452ca0903df1f55828025c7e18109a6e0f2ab25724cad2d6f57cb5d894a6a508134731e9b9c61254f64990941f4faf97394b634b91860cc6ec346aa666600d323c849ea4c4a0ef55acbc56495ca004f3fca42ff0ffb11b0e1164c95ab89bf1db3d4f575ff334d4e0d7d50e0c54c422eac5ef78c5a3be95f2e18872540fccfb597211ec79d9d47b6cf41e385b9c2e92122167fe584210f63bf919c620d
60
61[L = 28]
62
63Len = 16
64Msg = 3dd2
65
66Len = 104
67Msg = 3d232201038fe7d846ac1bd4c6
68
69Len = 352
70Msg = 44c98cfc71f82215dadf494d68d1d6b92bb4eb81fa0fbf945a659d9aa2c2302b5c93fd3eedba31e479e29d36
71
72Len = 504
73Msg = 02a5c7b1b749d6d49bed302d9439f23ab83020bd4d573906f4190e74216ad33aceab775f71cd31092bba5cfa42f0845bd16fc1b8bed6434dedc92f80b395aa
74
75Len = 13976
76Msg = bd70deb2cafa75918308d703a6783fe9dc5e3d21de9bfeb6dbb1cd531ed5dafeec463a02abde302d4ae6ab3cdc2f0f94865e38339c88bde507ff71bbea6b30b9851cd8cf599e950b8c8e620c90adccba0033f934ca66ea0a936afdad575bb6235099beff1a632c9114a8045a0919fdc21083880eb05c0d8c489c7810aecef4a41766f67c37557e28a9db9a0d909c2b167ff7eba79693afd3ee3aeace38eb73a5a02a882cf89b123812cf2a0f6d5edd1d14362ce9c43257474def5cce3adbba8cb48e7af9a45e702a182dbf47e8869b3f99e953ba81628e502c60d4f8ffc551c31b3ad6ca85c52164839d5e9d493deee4d4b76604174bdb5655385d34ced2c1b09dd5a486e1f9ac501bc611f9d7aa5c748f496faecc14c6c18e1dfc6aee2991bd0207ea1701219955a751df43dbf66f57904675a0e9e6d7f9a0b8bb82a8f44951117ab2642d6671daf1e5d1639d48aff6a05781c2b5e8976653b0a164445872d393d30355acf0bb49bf2bed4265c9a3b786249afc7a438d706eadb6f90a7f93ad51bde6d2c8e6ff09dacb3dc67ba0d3030c54c8367e1e4280bb5903274191344610de61c3c770c6820a6cc9d826f7c743f88f13580ba23cfc00598fd733b5dd069bde7f10f2b8961c16b69761b0f308dd137f844a67f6054e065863f226141755b96645a291e3fa3fc853b2475fbe1d3b25ca22f4da4425dc95fc855e63d6699b311ebd5fec1c7753e6e81f747c808ec3f618f63eaeb1221075edff0532225c40ccadee304a8997c03920e7ce4e60e4df4d120611296786516dd4d9cdda2077ac52bce0fdf552e1ee89a0133f1f87a6f6f35f5c53958ed806465919a0a5fa42488bf29caf33a0dd469e13abae351d5c6fb1a800ee384da199c823c965d9d5457a3ef8292c4d9b142e3f1fb502da498eb44d95f8c85bcd6871bbdbf004bfdc09ab35758f5e8b6a0d0f366c3b255333c52c8fcd4ecb4536b5f6e72897649f3415443612d72c3436505249a344feeb04883f41f90ade40af119014b3c56fc108f1ab0a77087d9226665d416cd975e9e4605529c032e8926002a70924820c6c7e264a794b2a3beb63d69ae56e017294fad4d611cbd0d3847212a38f22d623eabe3b884a36464d8814286fff52c4dd366f6c2abfc2eb865e0dc9ec6e55ca9d81f1b8cc47e2629bb162e54655bf2a9e156ab0bafb4b8ce96858aeea6e6665607a3f268036f4890dad759486b15e3c9e791429ec8f11bae4ea7c490656fdb0551dcf0b0be017c08bc674bd97d9d701c3ac955e2941ba7d5f2ba122a6f0c1b164b1caf2d50df111fd4287e9e195d181f6f514d7dadbefdd4274edc234025b727680576046842a834b6ad89eccaff5c5209bb91d652357e3750d8bb0165572fb71d09fdfc60f6b1e5d868c67c0edead427e7aeb734e29b96e03ea174b6b1af523feacaf6bd745ceb1bdecec9251958b7f521182daddf62ff6c4f58977adeba81c616ff2e937ca4f16eb9c44e63f9e974709122083ae45524ff87d7a0cca33a90f09b660db0efeb393c61967de2564315827ef1cf42b71c0f822f471713c9d885a3c3281d7c95dbc96f1c6dde0af70ea11232b00a2d215ec8de8fcf84b6193b6ac9d46de660361aabed3371fa44a6f32107f3854262eac355f9ef98701f580b4649175cefc29950e7a0eec958f629999c4b0a98fd4bdaf5c0bd97c963b551f2220bd41ec00b8726836e949e818a49aa1ac5bf12c64fb9991111ce8be3e0cb9605f753dae1a4c84389416f17fb66cecba45d591b22d64e5a4edcde067a088d9ff7f5dbb9dbf324510000c55d50f480a640fb22da9b4862dd81080d61af9560b601edb5e3346263f5f193df97079a27e3f9876078b80ebdcdb17ca4c50aef0c8329c72a7f77584cd963e105eea9c28a2ad4e95c1d018e27d0e720ea59147f59ad796b80b6293da8a55ed47e8abdd37221db0a5eefff31688e2adc294654ab0fddf9c1ffafd4783f01eb539492cb35a77315d0ad19395f47b18298a7b353dcf5bab0b2f193ff73d99310478d2e5c4ff1c68a2493c138818edef73caec9977bd4eda6249c8933953e06d796b288f78b18c343ef561082fd03bf92b084afaaee741de3004abaf746350048294bc52450e31147173f2da13d6ffc5adc718e149f9df3702f414dd3ee88296ae8a0106b071b589e8696401da7993d58a9bf8e5bf417165498c96b4ff5fd2b45bbf88f551688425122a3737ca54b2992fdb4d60957a93097222c3cf4c45dabe18b9d6a69e6f27567d5adec489e4b6812c29a8fa52f1de642b7b0e749c16f54473ed5ca2fdf2199e885fed308fa62a3e0deb7e0b8e439e25b3e9f95d755fdcb7ebee9d73069dd57dd1cdc5145205882023b54f2c9dec6cced9e3f6d24e8cdbb8ef121b8f3eded574d81908e867af5ac82bfb8ed60848b4bfdc1d998bae3a9ca80c1c49601d11a40409c62b1536f01ca67
77
78Len = 48824
79Msg = 5fd54472a44e4476d254c0940071ad42dc723354f76ba61f63fbb9df80d1ee56136f51b6982e66c1da83602fc08093506a9e2cf27cb92085ba5c627dd63f59f8850e91a1d86cb1d4ca38ad03160f3c584b128d9b21e935570e086d3815307ab8df396cfa0c100bf6cbfc0fd7a8258fa1a656bc178e02cfdc868540d8e5ad39dd46794a8bdc205e710555ee7421ca7475a4f3232e6a0cd55d4b5d4525f0bd7eb1e455931aeea6918b9fceb2a32706d31a6d7028a85e102f228417e2e7db68317ae155af70eda98c8dc1ecc32a62e294d92855354c1114c5735a3c81e551b63a81650107557f3237bf953989d17c65a0fafd2bb1e32c237f98f55389e8f8b0810e97e201914c487a68403c6d621a98ddc515780435564245d87ce462b8785def699f7f06ebfdf33dd1ed7dd5a3e781348298c7950a387bff7d1878731d7ac66ad9a6607f2c3a3b6843c2852a5e882a8d78ae9dce2a79d595cdf09626dfa6f1dba7d40ed21caa29e304e7dbd559a89bd1f07d84165dc259ef112dc6e2c5a3e82b1c50106983f6c4965c85073c5deddbe6323003d56abb0df590f69010981ab3407e43eeaa29c6156995c492c931fff1b686eda3741a0bfb9094747d1620b2580415d431ffd6c02245f6cb03e39f87e82834dcea59355b2ba663ce145d2514e15e2b2c60cf518ff510c6c3e2f16d2dc523832762ed8352a320462ddd4d6fe755350672038163d996b44ed3b85d64989291bdf39398cb996de785b9614ec5d4bd73efcfa37fd4470b17d6240b8e4c715759286b04c3d7d791e2689927c9f18320ff2e6bc7306c805e23a5de66eced5f1a630cb43dd46db515f837f6b824b99b86c10b6df7fcf22d97be05284edf0e0be597b3f9c63556db031339f79ac9e6c5f8a1cefdbb4b30f5bcd23c2a4dcf791cbfdd6460284c5af0621ab7c5571e40a87c87be459c85ec81d746930dea24f43bb11d6611ea83409d3bf4f987778d8eed1d5b246a2112ef78ef0252f9ae464810c13f02359441d289958b4766807d9a3be0054897d35b01830deec1151f9e3d42f92b80f4aeedd65c78c6e98afc562a3bcf6d72f238c6e94a38f2288ac7929a7a61c92875c1f115c0ed8d261a727f0794f17ceaa3dabc717478f6ce7f2e8b295f000241e154b4575bfac8483f6b62f9ef4e18f7d341a65faad5e2fc1ddaf2b09adebc155ff09e63d5aa5f95206e66c7f4ef2ae3aaf3ea7c93589efa8c552df8d203e0ea181c1703d7023b56e603f33b4adb9bf44f7af290d8081210f327a6c9b0785709346087fd090c42d2b8b2711b9a1a5173eb5e246320ee27867ad6c3eadc4407bada44561a12cf5d53bf0448308bb536a8a525eabc1410c3a34becee25fd6fda453251ec229b53751f2280e142c6b331daa659ab655b78cfb08bf18e40bb02b7f1650eb2dd4ba1707f0aafa219f21c29521581ce249e2e34f5656b0a04c00485079b040e13cbc038bb9f17f47cb8f908591b26bdc28538d8baffe4cc39b17d2ecffbb9698bc2b8b31b08424034c051b535e0cfdf07b7a0a54781e33ba739759991aeb72c0ed992cbe76eb8ec0ab12c182e8b049cbadd6e82e314f1bf15fef5ae95dc86bd64b8556766f8ff62c33492198e454e5ca59ea856d8e095c04da8045522abac865506096ee1cfa1082af08ca09b3533878ea3580b6c0c57a615e0ab768246b3eda96bb6caa01a2648068e21959f843d853e948588e8c0bfda364ef1f9fbd3235c27916562eb0214891eb55ae0e059f4bf7d1838b5942656c27899dec6d67b823a981d1e1e0aaff5323b0e3d69a7dddf9b12d7787ab763a3c7a2697ac65b655aefc4bae7e6444850ad2540d5193b378682c77a4dbf9aa22e517e68cedfd1ba32e3730ecaa2e3f6ae61a4f427d6e69071dd62a9bf6c860980c9d23ce1fa82a1937e6dc1ce3a2de096b680d23d89ee102912ac0bd769c1c02095678dbb00b4430428797cfb966b2f901480811e1b9cde358b6d499c9e93f0961f050465d7b0c70d4961e75a9fe40a24e36eaad27238231dae6d0a17f446c16bce7348e669be563649eba9f23be29adb8b10f462780a066ae573f74e51215a26097b02469c25180890e06acc53ab063c742e08d51359b0a39749b84b9f6be44f3ae3da8e5a2f340a8607d4eed08877d007928d332d6f49502bb5f416c46d866fc87477c58a22d3c5932a8d6298c1151daa032c84ad92f8f90b8053b5aa6f690d1bf682f314471cbf200f3d30959e07adc6488dd17b0be5279e727f3237b8b4b19b31a220dfe63882937f8d5ead677608c42a57217f2239614c521d94559290e3b0ed8055d5474e96564224f6ca6389b40a71337da11e1c307dead8e4eb43252cc2f1c49addb18781cf20acffd3db693b02e5c8ecc949b51b99005529e0149a13390615f5df6e0bcd68e1ca82b0173d25134dbf76dfe92daa085d3f6b1e4d18217df41b70c4c40101884c2886495f2ef8a473bf23cb47ab6533c93cb38c36c6dcf6837f1272fc91a6962b6e1386fb643e1f1d71fc75ab58d5800bf4081217cdce0c7ae9e3d25de543fc4444314f32067eeb147c08c55c5c8158ed11729837547f28a300eccc312260215f50e98c4e3d4170208a50a4a4def1243538f906df8476b0c46d3449be73866d463d422595300e160840daf8c906ae4aac13a64457853b0ea6d8c32f4efe3b48c0b1450250086d459648b0ab14fd3f341a4a803be77e56a811e7a26827eb0a1a9454f90bc6ece665904adaa3cdeb2c4847858fd1d79750e8cd45d8da9163784b8bd06629410502debfed5eca3cf8fef0fa6bdcef6efaaf35a1986d6fd68e0f436dca9442077a4818ebda4606a94a3c93fda46e7ef5ccfef656896a0d3d93566b02ed8c3f6174417cdcb99a415b0c6e9816d94e64b438c295b4bfd69e0d9ad52911de5509971b7370593160629b641d690eb2828bf363857983e3b9098fcd15e66448f786f196685d2ceaa251b17ad06dacd614d9fa78ce0a8b9c1c360b529d0bc1d17ba0b70ea8ac1b8d67f6e5770f0cbaee0b38109d26b09493060dc851f5fef121e83e30aab9c3efc2b8397e8362aefea1708f7ffa14d3656f7f7610f3a629bce14648a593250c6f309c02c6c552bb42984ac58db920dbc7d98f59295f37f3e9b99da55ef074ed65801b390366669b4c7aa1c483ffd23082793f9e5cbe30c34250f63fa3ea2cd097593dc67e8d27b7e4f07e73a9f7b33a5ef6962df1381a038d4f58fdbca9d71ccf640b917f631b75d4a2e8ba46c64a6223f99cee30f47c1a935dccc7f054fc39d3498c824e10cc3ee337e781a3971f0e98295aca611bde701c2359858914248f6bafc88232bbc27bd85883b00990bba7862fd7a7cbd4c86df049071fcd10d686613ec877758d83927cacc530bed9a596b5b21c6fb748c379d676de7e05719a867c9f934b5dad99ed97dcb4e70a9b6542ed5b2f086d9f56fc9752e788785ef8f7837a31e433438cf2f18f58be37fe8412f6d21a5c35000a5efb862926700079413f76ab2c3e79e20b516eba9d8c29897097bee55157936607cabaac41337ea4cc783c0809c875259f8020e16d5045fcc39ac796d11a82f25fcc9579bf0a010200f5745065175fdc15474ed514cc796672c59637c3c8f236cfc9c0978a3db1194680c58c27746090d76ca09f7c48ee4ee7e1d3cf0ea70dbbbd88e30e8814b57404dfd7c33727a0c84cb7bd468b0bcb3c89b526679c00fb0892d2a5e7a3d73698a3db53fd7d78460cdcf24ed22b5f39b8c00b3506541ae4a5b76fae29c1cd5b0f8c3ce142e0af7ae4efe3fa4c438a604bf4a9abb41e3fef1b9227a7dccc3f4d6026ca289b4b1366d9ed546abbbbd5677c8d582e79e2b544f18dc23809ab753313d84dd10fa3ed2f723f0b46277b8877d4f3e0665e88c50caf0f0708b746b736b00c8c83a7d18500384bd035996aebb7da8f09fd6af9b76fde7fbfc0ee854d7ec02950e76abd23ffb27a6ddf1772465016c79b98a61bd3940547b207b6507e32cb9761a5604f0f546834a8edac7ae06910045de218d761a4accea886188f947b57bd876491709028e2e24b075d6b022b51af1880ca16a8c65b7c69e51b2ad580ee058acc0606f0a3a9ea1cd4342bf4be602e941dc4bef1239bb9bccbc8098a6a17d63186c6fa75ec44b6e4fd38a3fe49c5eb995f0cb884e2f3ed6be02515fa605b98453ad935682c3bac6a2971bb68f4094cefeeaceda92dec803ccd3d346f8b40b48f8f489e118a17367801e85c79e9b3bb5d73ac44a8290cdbf83a154f2f125090d42e1a1cb72f5ebbd42da46c7a4d4b9fad9612a4c800de6467ceb74f831e1395dfbf5799a3429ba34754add4b34b5960a5fee8f752dae78450322a1ab3d7102b77e907fc1eec5355991e0c7d6c0866660e5436248edeb1a37c0e769a0764cfbb6354332d6e55103b9235c84eedaff918af3f0213c435c32ab409a4b5c7eed8ab6ca9e313dba459bcfa3ee92e7d669be0526856ac3c06a57fbecbba553a9cb4655a901d98af02b74098e478076655d325bd7639d73d7ae00c62fdc361a997ea4ff5b0eba33096b12f35cc7cc0eea62950b912b47c11b9fb386a47c4c15c0602d304b2541da889cff299a1fd415e7e25c70ee4cd83feea7e6a9c50c75d9b128458513d61ec5d0299ef8c090472fe0850f384938ed44d36f10cc2c1d31daee3f946a2fa18f9982a988fd6ac973b1569313ce3c8ff5746c4dd85a241f1e9dca0e904c091832ca028533a3e34c184edcc510bf22a27f530bdca3d057928a96f72dafc73a9aa6dbf2552598e468735cc5736c67a620e9455483e9cb2108045ad80569582ea93a53b491e528c8df336fb326ad74317bc1dfb8ec30a73af01a5dff3e437b7fe48ba5dbb3e8f01ae0c6fc28675a415f23a796bb6e0ef0efeb4b14cf20d4ad88ad1966da43a76b454dac8687bdd97b89b8f8eede91eb34ca4a0523ea65736ae39341fb32b9b716f25662a37382c16f3b9c346c84f03bef54acd6efb364c6401b07b3f7679e8e7f8c9b77b75e6e98b90f4df88460f1978d19744eecccb743a999aaedd00b5a94018e9d5a56bac9d5d55f6e93bad52e84aa7340cbbf98d56213d9dd3e1970867e3972dc98e61b3cff40b64ec49463ff79a41c82dbbcaa37a82b761f432849aa83a3d3c9a209e2207b87ae9ed9959ffced165fcb0d8873668c3cd8f18ba0f92f7acd2bf50416c22ce11692bf6132eb9f558dc789cf9776da94e48cf48607f19d9a11d5df4db11dbaa67a1d20e9f0c96f5956ee3f906e371c489efc88b0c1e56d881e7bf8dd5d6742622eb873e253dbe54f2e2e6d0e6136941de8c23e9a632727bb5f88c23170316c7aa0df28d8d07589dd6022828834f7ea9b4e5876a1704944aa3186dbf89e0e81767cfba03bfb38c55a9945209c4dfd88272c49d1745dce5ceb40f0a6713b5139dc2fb87a8a4888406d2610b7b910a9e5782ef0df719028d8e50a40a269dc9bee12157038522d06537bb31fc87d21af9ad4b2e7e127bbdb313e0a116010f65126cedadd4a122d15a71cbcccc346f55100e354b997154567fe3caccd50251d137c58fc3a2048dd5883b6af9248b51040c01a80c051b8a151a8878edf0304b5554746d6116b749221a1d0082ac925e6e140f0c3b6a180742ac8a50ce0e93e6399102f151d7c14000369ff52d0b537fdd51bec99e7271b1255c6fbc36d83408c417f6825a8e2a58b9054ab2c3ead69d97ea9947fec32d720653c123ecf51a9a3f0ed88743e3fb7b94aea59d0bf0219ee50825ef220554312cb907edb90e4d85f29e316ad57d3b90d859391fcfc63e6c0fd3ec27d4e1efd6e0b5ca8165cbd6af25ed8792d805f27fce308ca1d51335ed5d727558dafe05486a6f9149b8d3bc022026656714222830be582889e6800c0b170e48ebfd069e711210e4ac7acf07652a6f5051507de68aeffc9540cab5cdac84ceee46059ec23820c04b127266c0bf8df0d2b856be3377ab42592f495980baeddbeed3ba707a85dba64fe36941eefa8fd37204ec8c18df3852febd2b142b1c9a5cd0f9e424cd408ceb7788270899fd793db99ddb8f9ca8df550c513790d8bad37a1d1f4a62c4527bb64c677462c9b093582decea70c7bbe873095536728e7ce05d5cafb5d166a1f03055e918f787fb244c5857e3d7a1009bd37f30f165564a082c1510ed19bb1633811a76da70dac67641c2478c6b335f409ef54a2d0f370c9510d0aabae3cb998bd023778375cbf9cf5ef125afd584c11efbf40bb51839aacd3016e5e4d79f134245f952dbad617c78cb6f5712bd9c0c7e1303db5029640cf9b56e29329c3e6a9e0a2371aac1a437b9b1c4477ec9842aa80eaa22c5eac11b60c661de6ddbb088e844293ab8589c13d938765bbaa44301e4137148dd0257bd4c8c766c5d3bfe53671e9417cd1b52f622870ffd90f4e17b7a4ae1b5601a2edb032e353bca652fb565beea6fb0b2cdcadac71794c662677fb1dc81d116d94f5eced526b37c004b95284cb6aa2ac415754a1f14882595dcf4d3f1d905c6e8c12cf5a9d23d3ab55bdaf9f17d2f03f933e1bab89040753648c426b072b73aee8c2fc0d1c03fce2c656e20d4c96803fb2ef471b912267eecb4d6f342d3513894b94d77767823fe0c7438e51f21bcf16f0e98b94b23a10760271281cf843989824f7061bf834f93fd8d2090f70e939700dcb4d8964a19da39a9601a7e0ed9f55f567fc7d5682d55a9ba0e68861756bb549f2f17c10ff6bd2042a80477f89743d3d762f1dfaf230bb502eab6f4c46b26135ff3bef5faa179bdfbd288e3cadd3d88d8012706e19b7fcc6e9cc2699d3ba0e624e715599480d6b7dbc6eeea0d12a9236444b17285fc7794040dd40c2b2ef175f7f3641664fc9bb7ea6d7eb3489d504f8013d64a23aebcb5ce233405f5ade067dffff253f27e926431ad806703e8fab23656e0b7431916d8d4c72a7d831e3664e5f30839c76c8167b76f3b2dc75a6ef48df515e06ea54ca51de2fd9c5eeabb1610b7eef06a2f3167859cf82e1a5b76be8ed8beee2bba28c3b15af6890d7a37226834ec9f63306a0da11aff918753d8b83fe7220803c070db98195d6d18357233f5504a6e3bd6f30115d3987f93aa5d89aa0b8b577d1fed94da057a6f088233efc0f44f86798896eae9ad0b20c8c9cdd9d72a3f02213f6797800894b864cb44fed009440fa5b0197023929f9bad16f052cc2d87327788a68b9209f46fb4776b092d75713048b5453ccd699d19cafa8e9a93fdab0f0863711916efe3bd81ee71b8e0221e12e9ffe2f6ee1a4dc1a8de6e593480f3c05b3691e916a4a7ca51971eb2f0f693dd10f6b8468f8cf7bcce285938b5a0a76ef86acfa2990f88bdafdc39a065db17b845028ed2b7a9e331c44217de20440e406868f1eca818d0be20248c2948b8f4cb118b2e456e585949139270f57c54715f3297bf714aa7c5f72ed8ddf6a074703ffbf95e45bc81a02c42822c22d2b718f2de5e03d687a4b18d605ef5ae75f9d43c8cb4e77aaa0c0101d978120f29574b22f52783c667f7daab3e1f9cfacf2e68e94a24918e3fe2c4f061deeb64891b5217fe5908e7f389897751839982b7fb736fbfb1232684e93123611b7fc8fbeb74f8815b5ae13240051920f3b6ed34483ff673c467ed7f0a8fbf619796e485affbed0697415d2d0598ba34d5b9e44ffd12a5edc323883a2e28efe9baf860324f2d2016748503eac1888213926b0e0f0335a4b51820a2bd3b42d982ec6ce307b453b6385aed7a735a1e98479394147c40f01c532926e10e1b26a5b395bc150ec4b4daf5b1436bd0baa225583ffc9d9e9d8a354f60fded37b41c7c051daea04e689ab2d4e24d7d07c75c50ccfd6a527e024d1632246c6f40f06b86ffec0b29cf894b665d53d459226b93422d37a8da23587fe884dc3c0f2fb55dea296a9a5b9a0d101f186d9fa6288c912202547cdf958569d2cbf235740eed38d10b0025dbb6de31058e98780d22149c19d4bcaf06dd7353fd91cd1f47e47f45622e1472542be2f63f463d253617eafd4f2ad609f9020884905dd5c22fba53ccc619104b6c0203a7f6c8c26fc80ff6fceb8c0c51600c2e46b4b872e6d597511524545a76cb42278b519d911e6c1320e01682c551e204ccdf91290c52e0836167a5685cbb1af338eb794c10fac92950f3f7956acf28f1ca984e380bcff9876b0c71dc7ce4011d1d0f955da9ca885c6e7bb74c6194dadb0fb9146dd725c8a9574aaf3824b727c9be3fce59c35850b162c17d3013689fca858a0a51d81cf4f30d6a8705bbfe35ff03c34cc7c56aca32140d72c8e8121fc71353596b777b266d75b322c9a97fd2c5d4e2362f19c99de66da7bd9c495c03d9a15b28431a0c051e786fa80f5503a72519e6b419263d72d553d688349c0cf30918eba0622b953a0efce4415c29515c26ba15f00e548ef108afe3f8194aeb965e5e4be94f10df6c45ea5c133a8c3398d09fb80f950b83c1866a1637d2bcc195e05cc32a9233b244cc2b1d4930e66f032cb1163c37b3e58b576ab76de759569797fa9b8bb4fad66aaaa56f09c7a0ce4641d6799d7bb47cf684990ec1e08871458c211a353ccf1285e7429c7b8520180918f7
80
81[L = 20]
82
83Len = 16
84Msg = 8a61
85
86Len = 104
87Msg = 37487aa02b03bdbc6bc62e7e26
88
89Len = 352
90Msg = 6ecd002568bae3bf1873993041bfa292eb94e9ad092d8eb3585be82e8a20cb36a47a06e7a57d301268a4a533
91
92Len = 504
93Msg = f6dc1d2f6b8e126d99939664693d8709513f97d730074ec2794e536d94ede79c81f2b2ecbff3c2c26ca2d181ada2c60050997f3bb087ce48d956c18dedb227
94
95Len = 13976
96Msg = 07a6372c863c7d7c6764e4f05addbbe161762735dfd2d23bf268e2d603cd28de9c369ac379390473e1d3fa7e37af1178cca54fa0f782dfbe68070952b93462ea46c640d43ffe71f5fba42df98f4c48ada0d8aca8753e0731508bc15dff283178ae5c10a6ff132eca5dde63a78d3ac94685152897828eb25a55fdf140fd33fd4e7b03f283e201a1baae8986d25603fb0b2566aab345fb48031d648144dddc2e3556c0ceb1104f348d96ae7dc0152e45c625d21b46e70c31f250c858aec4ab2cf5e79d8c79b0854e0abf5330b9f044113d306161968f4ad6f0973160c9dc296056d5a11523ea2b56fbce8387070fccc639ec1c65ec663b9dc49aa880dc4ddd3020c9d44ff7e8cab6266e436af19b4ecb82010a0f8f9469ef380034a02e3f50051a6a3f233dcfe9d553459dc1bebc538ae0183448c9405c351271dea808d908480e61e9793cca111b4cfb9874b799626a1bd9a0f6e0929ad51b97ad81b2438f5fc255db3a3dfec9f0d8393c6b245b03d3faeb58021db3ad391b17a91174a66db4feef1b4c889699bcbea7928f4d29be2d47f76455c8cb1dc7da9cda41962a28ad8cd7b39965b809e7c7eca1c6792c1ce1c8a4cad6290170e91fcc49fa5ff64ab433b4aa081c8da2d9bbb072f9f18ca455469b946c877e3006b34ffd2219335b30ba2e0980f43cebfb629d0b11fe70dff28883ca012c6ae4855fcefea20a08e189eaeed7eb36ed6db3835976f4e60053205805727c5eec15d0e9f155637a9e66268b9c1c302bcaae6ae88cbb8cf1668a487cc996c4662c4a4e195f094cb31c717165e0e13718f8388957dfe0bf69c70cd0bd763dc38c530b67b9c12244fcab8bd13f602de848a2937699f9ef77944e5f22e3b470601789e1838fbea9359c733aaee2c7082b02ee459b7684ef9bbc200da4b62d368351f5520a65ffa506dc9b097117bb7ae88d04d85fb525e91327689ec0fe86971480c0e864012b1e9f044c7d80a4e48c07320dd4292086e4c71d4c98dd826a9bfced112bfa2beb1ce85cad204451ec45703931bf637d4fe89fe8f485620b7f4b21e011a232ade7a8c92be77925e878ae0bea9723749528fe83cf89ecb9616dae6ca0e8d5754ec6c92abb21108c2f33cdc18c6887c430b72c5b193356494cddccc577bd4c2cd53188f352846edff0c2ac7869cb74bb16a77c0f0f194a7a9477ae15abb890bd0bcfeb0c39381a87f1d05319c7e971c10e9ef687f96450b400e25b4285032892b849fd5db8649cedfb03c88defea063ee144a1ab1f3bf05f59c7db364dc39c11a446c3ce16307d78d50315ba29f5bb9a57438564c8c7b3e367cd37d74b2375a4966f47489dc5448f4979428abd32193d3840aa983d3020a9f29d760fc7493ab2576c90b1934b799c1d0d55e4f2caa78f4ce61930c79dc017c2dea0c5085d73a3b0e4a6f341e9a5061a6658af11e5edf95bdad915ac3619969e39bee15788a8de667f92f4efc84f35082d52d562aa74e12cc7f22d3425b58f5056d74afcf162cd44e65b9ee510ff91af094c3d2d42c3b088536d62a98f1c689edcf3ea3fc228d711c109d76ae83d82d6a34dcfbad563cf3726519b519fd48b51741aa86720836494b7a589c778927047a25d73508adaa401e9a6c0767a675e31c5556cbe35fadc9671359b45e985c3c8af84113989b299ae4474b85e4b5d4b0578ab1e8a2915a8df97c4f52a639fe32272cb91bbfb721505dec46d51383cb8973425a714245c2e37d0577fbe0d66381d9239db1f08a380cf609dc699698e0fada2caeda44d58d766c4f8214b10642b80b8d7d8add7cc41d47108ab7d07dab71069a2d982cc900b331caec317942122158bac6eac9175c2dcba0c04443aa9188832b553f5ca8c336880824d6bc02486a2b4c086665d276aafe3b1b93729829adca50c44466fd5b5cb977aa78fbcf5c0f0da1b09216468a11493ffb39efdeda5d669ae92bee2f2fb250aa1b9cbb11c36c7a6c6dd26cdc3cfd572ffd8c1dd72a13c27a327a34c6b6b3d80fc6c67c72152eec0c8ecbdc1bd5cb829b811e7f29af6d786f4e93dd4c96fdda295a6aa258d7b2fcf291c2d68e0b1866032475964ec0c6f2fa8c2d6a3936ecb187350def4e818507bf157c0e9b33406be7660605af14cccc9c799b4e051d0d0899e53495bb8931a6e2984bc6dbe4e02ec8b4642fc2f1cb5fd5a5520b48cfcb49e1f9533838753554dd98b6a1b8a67409279df477330e5f37367e06247ca5c3ffefd00e693dcc0c9c30754121c9ee88a574915b9e77c104fd2f921c2c096573951407ba9b440423d76bdc6fc978237a6e302cede7f99038ec31500884775556941f1edc30e3a417b0e02cb6fb5bfbe5cdfacf4006411287bedc565fb06f1be987416407dc852254934df4ab59edce476f3506e65be6ce6ddf91038642291fb8e92ba5b1f0b105670905a2c14796110bac6f52455b430a47b8eff61
97
98Len = 48824
99Msg = cd8490c93613bdf1f284b94b330f6d6f45a39c651d2a160b340e2eb696fc6d1c35e88872845190d141c669de92a97daa5433b1d7b0b899fdef2ce74b8fe72a7296a5b5be26d1dc86520367c730c7400c2fa06f91ab4c48a7bf4ae35a5b9acd5296c4fdf7451b0ad9cc439b4e34f11e5d7ef2bdda376f8dd34d6f092b219dc085dd4c4a6308b8808f588eedbbc7af7f64e83182fc7ca7cf4741a341060a7969d31445834c982fa8739ded4555108acbea1666a83da17f77cc42ee73323eb53203e3b790f81c08e94c44678b6538096ab7b09916e6cf7ceb2af85987f8e4d982dff1ab59b0bdccaae1f405a73366b5c5935dd0b43e2d2894290ceb66a0246dc02de728c5bba30255fb56ce8107c3144246c5156a8fe40ada9126adf67227fa56b66c37be63f532516211ca012977b04a97916f201f1baa2629eda520b51508ab4229df2ceedce406dece0110e0a911464f69e7be38fb91deba0addcdb3161d2799c628f5a57fa1dc37357c947681bd9c36f4832c20ac466c0c245de3b250c33282ea1a02d007f03b34ed427631283eb614db4d521f555136e7e42b4cfbee8134c63dbe3bb79b5a8b9f9f5b9f5ac61cfab1c54d197f1e3ba613f251eed616df952d691b88a16466343ef2d0f63882ddd2d55b8a6786308b2257f5d7b38af166bd7f1339d2d8899c9eda8fa86215850ba547450c267eb3c9147d96c38161a69d1584e521ffa23384313a1debcd37f72ddad02adb3cadce7ee34b7c1f42a15d0d030487daf9488aa7562845a11ee7ffccdb38b300935caa31f78a4ff3dd93403cf0c6a16ca611b58c736aafd33d6dc56f0f47878211d26f6ab801b9453a7f74b44593dae0f047ddbbf2c902891111729edec44f69a05944b18e7a601f41ad24fd6833da3dbe3029bd390de7c9841b2ee2b079b2bd2737518fe1bbec88da64769dc36e4a8bf716c219b2fe059d7dd220c1ed2c59878db5bf8b198e0689edee921ebc0cd2d3853fcf57c363050ce58071c5fda6ebcfbc1bb62e9eb956286291a108bdd4191c4ff47900d6068e1ea26b487649af119b9bb15dfed804836f2196cbe12d8fc86e3d7ce89b52ad49dc9ddbce5b370f73f512bedd853039366612453733740586d1372143b09f21dd4dbe1a2bfc308db8e4098c5e4b0c1e16141ee50e85fafefc4e2529b3c7252af37aee6f86e19df28871686107d7d57dcc812bc077602642d2ecefdd5f694b8f336913210793e4068da2178600b1f41cffb5221c9b4b6298afb47e85701d7b1a44241679d8996f916c81ff437261cfc358b9ec42a2ce16ca3bacb8690d6c1d91cfb3e0bf1e7ba45bd01606df856fd03c7e946f7ab371a89e1fde86d05fdd97bd7b1c583b04c2ed2b5f6815a460645e4e1b4e950bf6bd81dd0352d1048df85266f1696534aff5b1cbc17f15d82cc8e0c0d4f0453f9439094f8e0f7f4bc045b654d9a2f1f44a9c57019f63ecc41021c05b5380675cb56ea8bb691d79ee204d2c4edacde3c1fb3f4996a11d84b035f965e74009e2ab80e2c7ea3c84a834d4971a1e9cf423e4ea67ee526eb3c3e4c2d7372c4290a0741e1fcca5ae4cf36705abe98ac81e98a5419baefcaf3093a7e0449ef1021f88ffb7ad21b2677e41cdda12025b06542c4b2564f15e0b99db43b7c7020028bd829372122cd910227cb07c53cb58fd9dc620c0491f3e2bf883fe6ee8cb1f5b73767977d857e4513e8b5612f6ae4b56014e6a3ad2a065b65472212e2f611743484cfaef860999d1dc5608c58412fab888ad72bb87dd9b55b692f31e252daf8944ec5c02a5a9c23903c50dbd845f2fcc3bc9806af13ca7b025cabe675195b1d56f3fe7d7bca12530bcc0af217efcb03a218bdb6f9726536ea902c8303b02e3ced22be59753588b5f0e2f3419fa5345a942dbcdf3010465384a225ba26cdd0f1d74999c69f336bb6d01fae5cf81cbb8c1a7a29c1eb83ca6b51113bde56b8cfb6a5d72557622a37f039d090a689accd02b57c691174338de8e05bb3620c079705c969c58e56b079dc9eb44eb0fcebe548f5a31f4072a5ed56a2f03107bf40a359b2601eddf53cade66f294cfeaa40a0d94b9c90d15f61852f295d3911f8ea914d015885c8c64540a83badf0021a416c3e37b78236a2ecd1fce4114033416bdd3a36c18ec13250ee9c74c0fc4dd564b3d24a825802d5ae402a53bacace115ae3bbb329be79d1e5e42dbaf0a6446431145fe49b86a8703c7c41f8985d54f12e314c16ff89351d8addf66ebba2783f2d1a11965182aa0b0dd2de53586c5a695c6265c2b173958da648611090557bdebf11a1e042f089fe98e049f4796c60d26be38356fe020d9ace9008410d53a1bb7db78b52ee44bac364213f5c59f1eac4e3314f3423b92fdd7a6156608111ac6ddf58385ec1f3df12061208db98816ac948d803fad10d5ece2018c60faa13de5e5a9033745c824932e53f4122a39f635813545c1b74732cd55642f19ed6deca1585ebf7242c849bde981572a2199066e9c912b2068c8f1c8b936c43ae95c6e22bd7b80dfea05f495d751107da5928e806d0af905c87b5a0795df146af6580d8f9c6a0e2645686d43822ce9b4be0bd5937c097917e048b5af71c7e7521d490f107e9231ee5bd9fbf0727ba87774ed24cd52f471ffb71849ebd55605996515bdcfe95bb1df3541e7c42da4166dd01ec3597634aa6455d15fe14af435e8d7a55ff1682d55a2da867ae63d11fb3fd987fa5d7032ecefc35d3fb9570940e779e13da18070e6df5292f97f2a281f9598101102c955fe4808a2319c85fdef3d55b19e05bb8c2d3da64bafb67a53491513a24f6f0804aa162c8a7db25b38089373fecc45a0eaef65dd9be3b4b7f9436a5423fdcdb5a9b60138fc6a2261225390d9ae0d8ab7f0f7ffff69dca06881d33a637d634358abebb333df41151f239add91abaafc89070cb2159ce3a31655c22e4696c9fa7a7211d1251d4bb21ea4a321a3dbebc29d97f526251e40e548dcd7ed07587719a266f006179dcd22e50b3705152817057b097b043ad63b8d867edc20aea9b4c959ef4ff70f47128cfcc21e31f17978ecacc366f459ac1cc459a3976e4173ca322675f84f18036119ec2f204c3fb554a0b72f7e9d8c882ab147b3d280ca9dff7b9160b1b437b901f03cbc05fe05c6f44824b48aa8da52ae7dda1653fd500f9ccd221843cf76513b3b74d094f14d93a00d7cb954bc4cf2f04f9a35e38edcb1e84f62057647dcb3571f1dd296ca1e049f1746a8a282e85138500e7649db756b2d2ad88f11c471c89dc6be2cd43481013b8d0ae83da2b855cea7be424f8b2325b1850d1fdef03e765458df4513d57c72ba9751e1edc3c4e7f97e3202bb46eec7be89871ba3704aa6c6fc08851e551a3f655fa1fb798d12f003faf31c56b6df399a5dd0ed29ef9e4139dbc254bc5d6051840a859eabaaad56324588fae881fd638d2b70fb3813402df61d941ab495588e5fc3823249bf9a03cf877902394f512de118edaf98843a5445e9073fcfa409df3db0221f1c77e2dd21e74f9e10c9e180dc4ed17010eb949c6d67a22bd5337b2c68f9eccdec778ece728e91353696b742c8f5a3a569f054efb8c1ed478ee9b75e26c768a5816aa6bd08a4c72e745fdb5deb34ecb86b3a84346c1c70f9c16fc45bc0421f0da2f630912d5079f390cc53b78e343310de722b53d2a3b4aa386caa0d7e91986e19c3363426ba30eb5284293af81d00158a3f5233327b40c3b989725ba7dd5b31ac7abf8d3e0b737e843065cd7316dc2f374a00bed4cf9caa0d6e232c854df1bc24c3d484bc6bcb14ec770d5745474dc6ac3b3ddbffc551c9fcc2c56a5e0ae17948457c01e701bf1554022bc2b7d9dd42b2b91172fd85e6874d2d61fc7b3bb3cee2a9bfec09f6d7e98279c6f511f4140b116c856c1438e34bca59fdca2409f025b896a52d68719bf93e82e7d89bbf798991fda0af8d06d17f39eba4bca09c1fe594b537ad4c9b94ab52c895539d639425f9146b24b016368a638e5bba391bc8763cae7c52ff9c496884f1d84e5e08ed451358ecb3c4919dd410e82cac35ae744078287c05c89b42999ea6b8b127d40d53a5722d45139e8bc507a11e7add7fa9ab12cc40afeec008a4668e3e6440f27bb5780936c0e3668ac51262390c79b3f21fd041cf36ba3522f3a552714ff188bfd554c60d0e7d11213cf7d3864a5175d4047c2f3284741f18ec22995a5b82bf62190151bc1529c6d9927f9b0c1dacebd9c2dc406f7f64a973f9a70cff6e3abeebeb46514bbf2ead382f7262d46bd43d88c1b91a9011d1f8ba81fa536a7162aee2b2ec6fc0f2d6efc87b98d2e41e0f946969da659c21053775ece415a34d42b6cfd5bc52259867b411dfb991461ca618052309ca9c96468c2da12dfab0e822ff3bbe7ba281982a239ac19c47024fe1f0e3550cf0975add1f680a9dac9b2c4ab0aed4f409ddda6765eb8a0a9d1e9d07458c69ac8195541219b18efcd06c0001f2ae7fee2d404666a18ca3cb3aa4f0623e86c5b1229f6c2ca28d951111294b91edc52730b6b2c46e000672a7c89b2f38045bd3e37dbb8a75e18687a514dcf740c87a34834d3c3cc8aadf6166ec0c42d2be92f90a3af49633ff23cd80848ceb57ac550eaf9ae496bdc6a2d7cf50fe107895b4a1ed014f78af24eccd6a07420f1dc0df1e7c44b4ba937dd43cab9c798371b148325578d61931766af02b45054bdc2d9fcab2f4b49092f6fff7c27886820739d6140a4a905f0020249e8ae8dd87da1a1e7b1851eb01045aaa72dc8a2bf68055e7aed41d85336648a3405195d2ab61b0e29a770461f32fd05e14c17d72c5252f026a7b9abe7ea9176d3c46f6ed9fb716758d97b41e4f5d81a24538f763d83eecafafc668422612b40cfc32b3354b24755fbe400a2bfed494fe6d0ba0051713b776e67e2f1915e94708e6dc74b398f2f526933aad8fe7dc32faf40022606aebb6e0756b994c3176fae7640ee06d6c67bd54764c4752f1bf831f43e0227cba101174c5554ce26400f333dd8e9f6db1cdf670ce407d7d06c3aef4c0724b62edc8f1ba3e04f0e394d15a73b9255abb4d6ac70303dcf9160d32dc02d4804219ed5c7e3b48402e58ab2f58305f9bb95d2a8759947de96328ed5234cfe7d0b2a9a014df7e4cd0ae48906315f139b8635d2e6bd4aba32e62b8906cdfe5622c411bf0373d0cb07d17bb2bb5b83eae4401c243605fd1df759fd0ddc704ccab5a9776c40fbf6bde0f11b9646c699f26063a9550ac228c9884c277bcadcc0a2c225dc203e28e253c4e464b23d2529d09c7b7dd3c984667372472b615645f294c4e3b0797f9d1c234015b78502d98bfc04f1fa2f16cf3e7221d5794d035e4b172a4d84e679cb1c82df2fb49d3c6668eb1661bed56705096c2371a19d668832808eedd9e5b1256c18fe7ccc494e5e29145d453c553ec86fb7f3a634d0d45661875f2f1005ba5e734c1a976f37cd23450e4606e32d027bc9ec2edd9395e14b2082179bd7b4f9b8caa2d00a2de71d48553f7d4153cb56a1b08f11925e4b11c9281744ae9171f3d6faa3ab3f88c5c34fd23e4f6efeceafdcbc07686ef56efa62c0ad62f1cdcb4d3b5bc508c1f05263bc347158fa5495828f34eb7fcde98fefaa82bafeefed3f4a58968d751c051b52e0047f066de5be533bc3b1e439ab1c8602f6c67503803c8fa113737cb8279f358dbacdf45432b7a654d0e1122cca93420e956661d7275181c75b0d9c20e84c7007dfc49f27bc00007cf4ffa631c892981fd70141d532fcd51de5c23fe0b7a186d0dc296362f235d61698740cc315891cc9342da17843bcde274c17e462263d0e8b4832dd9075a7bbb443d4b26b41e534ad5551ed5ada102175e695363fb48d6b99ac978a3aa6f405d87f983384ce35740e930491d75675337c5dc081e3d301228e61bde5cc169968e5b4350cca2b085f9f75cc4b88497a78cd0a0073d90246c7dc102c7cbf3516498e8a41aa85d8cc5bc285ff66e8338e85ca83fb6889e2bccff52059bb9e92e92c155a349952680ffd0a3c346061a53fdf074417fc90c4d1af7c2acc3ee4b080752cbc9455ba5931b7e910f1e4af0efce905d2cc9c685923ead387fa532c0e8ad92719c76c281cd010e1acce500ae1443838b8afb48af032069dd07aa4df0d56bcb70a64592633699c8658102f1fbca441325e27f1732a7a973d8cb3a0684d72943ef6f1892f2d7ccf39bb6dfe5801ab98653bdbcfbb787bf125253be2624f6cf44177d588bd7b780d9e3f4e3a4e50b8a253fa21abce6a94b9073289c76773b46140f5a6e46b9de9ec066c176f5d1a69f380e1901216617363362d13ebb26ad74fb008ec08841550ff14ca800a1ecf2e007ebaad9f4e0d9664448d60ac0d8544243129fb81c1723b9b4bc2ee971dff736d9fcde0afbfbf5c50a4cc06a4c363998326c17bdc9e2508651dedd9a2a52bd87f8693cfcff60753acf9716c526e8635f12377e36564ae55d0fdb3c7997ec4dbdaa5b4d18c7b660acd95060831795da7d299a5a8d8cf9e92537dbd3ef7f56aebe38fa97c41da6bf0572a0270be7e5a7dcc0be3529339464c811052b65a938e874ea6da469c7d8992ce0aff1c75e82d1621ecb967213c65f2de582cb41de3804c507ddfc708ef3f6096ba4491e431160f98de806d0f334e03cfb7a3bece601099bd971253f3aa0df845da8b478603d5d88533d0cab9c89f2dd9a1404cf8939ffdda652a94093865a85fce2bc3d7babcff7b9f3306bd76b9af80c78ad518f89ee73b7a710da604e72f4927be8d65d06be2e0732fa786a83e27597cfbed9bf98df445499e0746b9f2cb9659ac0a9cef433148521f33b1d78d13c8441c0d1e20fd93ac450a3787a2292bcbd68cd1f961d34937be9a21abaf26f361bf53aa0c095e53c51f3e04d567eabe6e40d96a17c2bcc9230b18f7e079bc549a314b4ae21d30a3341aa205bc75c7f1d21b0a49549c300faeda243d0ce18da5e66c5b663cd705005dd9fea0a9564174abb797d64c58fdab1fae44576d514b75eaa31c9278b15bf9b6df7c6c2873d7a56fb91ab77b83761a09f9e1ddae535622fb87f7462256a60dd39dd3ceb6690b0272920b635ea639daf24f95462c523e5bbd8d8407c61163ab38877d5edfa04c2a78d4d240523ba97c7d01c71783f8748e85164b4dd08c25506a4ed18300b42b7bc6e417f512ae456ceec2ffc83190991a06d4a58ede215babcd3688e1d61f1975016244e80c88ae2aec05c7eeb1c50caca72b3b415b6b870bf5e10bd1ac3ba6b4acb1d1afac554444d94c97e171005fa4ea9c651bb4e527ff58d0c2f90fb453a92d6546a26e9e98395b09e8471bdcf2a145aacb649708cf048a7856ce8cf390c107ff2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac0d1fb639c516b9bcdf23c34c6145a705498ff9b9747f15e1c08c63da6efeda4eca02c3f00dfec06c82220c9de840040118dde76be788daf84e6a2f44c81fe6defcc474f99c51c4648d297cbc48f081e0809dbda505d020cbe865e430e0491644ec8c52bd3ab8ce8c4862990f49fe2588caf804ce9500ef42d5a50c057c257168e283e4a4aedbe4ccfaf3eeffb212f9e23d15434d60bf4f455f512e2b655aff3225d1b217c261110cec0400f54dd303d6231d028c2eb649bccc91d30a6391c88bff9d447c3cf35a3467be5957e0ea4d4dc237c9f2c68ce48f658f820a3d72d559b60f233ce538c92cb148808e34fedf2d648c21e7f2ea29a77270c393bda42d869351d6c085d965dc12cbfd0311b8bf604f4391d378781eea3b5f1e0da9d0d8f8de88e56fe47d362cd46f591d3ec0f7cccb85a21f21ddcd4107821ce0ca9ddf99dfdfd9b0c9cd45053e5b1b4385bd8f5b227ada31b5c23e9420014474e8b4494fde7c38edfe70994d97b8cbdfac588df49a49c472fcce78cccc051f31cbbc1e0422878d8d490f3aee28adf1587c38fb7e7d1be54abeaa83cf54b633803a5e669ff4295df8735231ce39631616bd05e0e31117c722c2fd6787003b0bc7fe422a089c89329544e085d71102c1813769450a9f66f160d1702cdb17bd2c6fdf0f722762d193ce83623eeffab17b01b10a31db6e2feb6eb3abdbb2e36320e1a56e44e48d26090afa7f65003a98cbfef590ac3ec89b3eb230557cf6aa566e841806aa2767b21bb26fe001f11ae039e0c9a4bf1bf3d271960f16158eb5bd9ebf0080abd8369d512cab2d1aaae2b14d0ff6ee705a38fb0c801a98b0624cc138fc24834fdf430f33e1760db913da3290f34415c9e3df3e97da1780545ab68ac5a24db89f24d62f4a399728e4144a8c89f47ac2d29e30c49b0bcf790a5e3d3fcd1943c6a28f37251d9dd827a69579e6c17b629c927473b5a07b0a29d9562708d6c8ce576109ad1a3473ffb2047eb069beeec24c114bef392c929038c92abd0e6a19b610e27881361824d57008b7373d0ab76379570ded76c9b8284fe2c247791073c29b2fc6fca05019220ab92856892d3c0dcc6da0b597fe559c162d060d71513ebca050d9638164b9ae271fba5575ade787ec5aee8fc253d1b234b1df561db3e36ac64b9b0100dd6b407043537b2b141f
diff --git a/src/lib/libssl/src/test/SHAmix.x b/src/lib/libssl/src/test/SHAmix.x
new file mode 100644
index 0000000000..83bcb14126
--- /dev/null
+++ b/src/lib/libssl/src/test/SHAmix.x
@@ -0,0 +1,129 @@
1[L = 64]
2
3Len = 16
4Msg = 98a1
5MD = 74d78642f70ca830bec75fc60a585917e388cfa4cd1d23daab1c4d9ff1010cac3e67275df64db5a6a7c7d0fda24f1fc3eb272678a7c8becff6743ee812129078
6
7Len = 104
8Msg = 35a37a46df4ccbadd815942249
9MD = 6f5589ea195e745654885d50de687d7fe682affc8da1fb09e681540525f04ecb93022361a27759b9e272c883564223c5e4ecafeb0daaf1abce6caa4bd4153379
10
11Len = 352
12Msg = a93aed0fa5e163a82c9a934aebaab8180edf7de0b32f0fe99f9c75ec305b24609334cefa372c7c758262dc8f
13MD = 66a16799d606c569d2fcd70d7d8321ec90ef61711481aaf7d747744ebfd08ec2e7aead49429af7b4ceec6d8e147ed018e034efbe07982699e818db5fc4b1d71a
14
15Len = 1016
16Msg = 433e88eb2f8aba562d15c18126fbdffb81d5d6c9397fa052321f5f78cd629708ba099b540da5451e949eeab8687a8d6ac35c531411cb37144ab5ff6a7eb46f1ab28fbcd2ea0444cd87c57bf7d3c02952dba3d3987da07622c16e7c086d90e88ad3d9d4afee301d2bad915d868f54197b70b23c9fa385c443404fbc9abf7e6a
17MD = 790bc4844e9aeef8938df0ccda17890556a4151817111a526a88919cfb172f0b03c216080c1b60210eb1942097f17b6d0691bf5b018b6d959198d6a694b922c9
18
19Len = 13696
20Msg = 2c46a76a9dfbae1f5e59f085e9c3d4b600c24b2d404d062cf948e75a3d4ab5b137a31397be9eb34b2a03c78367e0b85448891b511ddee1f787cccd498b172cb7e656c044a03ffde8e42478330fbe9c34072a9e99ce31b41757cc820d98e7d564e06694b96b66f4be34c5eadd0ae4e61fe6abbe4d7ccee855104fedee8b451a7fcedb793d469b0094c0ed07c97fda00dd8c1662b44e3ee6775a5ef6368cb662d257be561a5967893433a4b63f97295036a37272176d081545df00852bc5c4162324161296cd51f76433f2df867a5840f2d0c8d5be00b4dc89443d82175bf69c3bdceb97facae2b2ed68e06ae74fef36d8bd1f75f130cba509341dd54079d45de22845cc8e77a022977c7540aa3e779cb1127f39f825d4d78e55a967ef45e7c1dfb02d9999fd15af2914ba47177177d94576f1091a0657d9e04fe81e6be7b631fc1baae66584c9c26ddbb568750d77555c927bcda1fbdc15c7cbe3e3fe88ca13ff12c59b383343c12976708c0e3dff78be0e286dd32eecf20b71a09fee50a9d0b13c85a15b320b162690f399282798aa3291fdd2f9c40ed873e829388466ddd1da42f2de16aaa9272ccf44790cf3c95382c304e25ae8cb2fc9d9869808f3ee7d42cb143bb0c3a55e03db6d1202ca1bdb744e448640c0aa60d3ebbda5c21e623bb080f4a073a48822725d764e51d415aad1d7c5a7f17433d15ac7d849f910c375ee0899f6a576dada42fd651343383f286009902bb62deeeb2514de6af7f09892c20d0b238f6021f03b62444b1e1f21beeb89acfcd7136416fe7bd8f202e76afaf5345311798be7cb25351add2bb044d2380221009c4d1cbbaba4cdc8631dc0144f2778a6aa1eb3d3c81df0b1b2142fce111af8214d049e40f536c5d462b9224a978e82cc6c420e70ecc3cdaffb726a183c793845315f730fa4dac9fe46e4180397107a6a051f7f0a58ceb9bf4df37e1a81c8e9569187228e8037df2e59c52ba815566768bedc8e09d5e7bdc9f2bff23aaaaf133bb5a3332750f6124ce185e29fda0851addfa2c3d52bb6dfb530fd4ee27dd5bfdce5dc2f41debe6740274bc651aecd4023b098a7d622e2296b50d51b79c4e3f521695a9d43f038e8f273405e26584d3db179e7c1758114a3d39970df674580bbf2884405974f0b9c4b0d8b3287a2314f3f81b6991812f354d655f62513c9551b378cc2efa4c3e08b313c56cada52217fb6112eb8299b28445aca8f72e7170a1cd8bbfee4d2145fbe8d49c6af8831c4d4fc7177a50ee55a7b484261504af946c6bd5e1d6b89092f3c487c0568fa07c356fae9b8e831b8320289039746a435b122cfbc4a0d316bf90d481d3b7d979cc50d98c1190af8dc58e0035557dd5e94f437f41fab513202643a77748f76c6b77302bf40c392cd18731da082c99bdedeb70e15cd68bff59619cabcc92adcf122753c55afde0817352bc247d1170b8ddba1ad1b0faadfe0efbfc5fe6334377fa372c3435691f53dfc2ad5e08966b2d3525b1eec2d993a5cd4ff34278bd40dd80313a0727d05e0a932156152f3e11a190d8d69726f5c57d20f811e1e8932e86409ffdac96c6251c2a2976b8757adcac5d2de94931d1cbea866ec8bcba5774f8a7fde792f6acfd0f01356fd66fdf54a416af6a9397e00f848a2e9831627cbcbb52b5a868ec174e69b4cfa1ed72cdf23f39d7eaf4bdb318c188b1f0fe75655e34ad71907cdb77a1a2b162cd7c22d93dc45321eafb17cd60282e83736267b3e1fb249c307d49509f50839942f0f493afd9ef37db053a918e3ec83d801bbdead07554a018b8ba348fe9b7dd92ea7c5fc0e65a644ba19aa1fb6c022ab768ec7cb249ba17b9dda2860bd4aaaa3dc70ec009804141ad5ebc61203658e57a0887ec0fded18d844a96e79ba7e879c4253056f23e205a80ab1471953438f85848f4ab31ab175c089e0bbb97ea0dd6a67385770356741966053735e2cc2ecdd2c8c75cc045181dd7267584b901674b553082b2c58fb8f8be0b99306194a6f069f684535423304d40a268d55784a14260fa9c9cb1306b82f91cbee3c9f43dea9e50903135cc1c6505605a100bfa28564a2057974eef0852b7b72ce264815026d0759f691db618ef760edde73ec888e181403834f7221bb27a69479ec9b28a3fb0c3f68d4467d25712fc48ad78763f9ea6e8a2e85260225ca1b1a38b720e589fafca29f07257c5467cb74ee53189b8c81b784c43e93f98abde1ed53af60b27b13df6ce45001c6e1813de3521028981086f7d88ba13f6fb1a800f312fbe2f842eebe847fd760c394668cfbfd353ec14ca0366eccd7b4cd63318116bdc42e20a632a0d2b8c5cddb37bfc0a239ebe3800a787d2ece077a7968036b3d9b31cd906f888e3ed742cd769033e2c24c5a9e3c10b6d300db5a17dd88
21MD = a86e07bcd19080d4a83e1384bd8189f60a7dd7a6998406ade0bf03f805375bd823c7656dd51cd9d63e542f8ade41f16d73794d60d0906424133778156ee54b95
22
23Len = 100816
24Msg = f8ed40e878dc68ceec52cc8e2868722310fb117ca3a52e1839eb85d308b8aa00ed0bf0b76aec8a70eba4f0d14d2d85c5a0e876ce2c8ee59cb36947def6c40a587aa07b368ca8e8a08367018e45b984de0d7f1aa46b977cc18c0cd9b7bb897cbb2814aa0ce8f8c9843e03c86c19f2ba95dd2ac4a466a93aae4b3b05055ff148517ecf43e286c57744a3e10a14d0c26e139a503e7927aa688c78609170ebe3b54104390e5f6cf538093a67922e7210e77fcb584ec9b6844e829be246a266460cb442bad52ca47255fb8cfe276108c36e02f9acbd3d191d34b93d29ec40d80496d1c1bb5ef036221641200e905598c54bc4abb3527c5a5f6258e59d4bf54a0498c108a2725428efc2047e0096b32dfdc6ec69d5d72f81301f881ca62a66c22e5dab9fd9d90084c0a36b2f3a0123cc5327a3bc7a12fd947ab57169ac533e4b6a2cb80fc65b9b527cff9fba26994c7fafb5102a0acd8f9d246a3a54178c23eaa04c0fdfd3c0cd980d1fc7a72b25d74df9b95c3dedce8ca316870c654f9ebea9b806da9767cf40605a4b0c7fb06f6b3f197bae7d8cde9daf38530e25bc51b68f9aa23ec0e95199b14bca96c91f3db15bf8432f714dc46ac87218691bc66cb3a42f6865e1c30f8394c8e68c0ddf5851ab7c5906a1994a9af6ac1c44d0d6b95ff15d9f77825ccea40fb9e516d45888f2378e045d95d936d541cea9c8ca52fe5f7d0d919b2b1c59a42d06105ea4f2943c05178e59d67351c5b2c0051c93a4045e512884fa656b772cf398af89081546d920fd3d24ebd16310506a786ab33293027394c1bcb7b1efe46b550ac28529646e8d2a5ae65c59345e24b44cd7b06673f3ed3b9008aa568a739c26682fa596b7a655842cc6b2758b583487c78d14a76bdac7033806c5c210828ef313f8efc4072681f5fded748c31a58ac933b4665c445f07d603e0905e49b84aa55146eb1c1c99196413832a05efee2e64d6732fefc629b79b37bb9390fcbed7226b412204bda523b8b8af5c4a8bdb263ef9f3f6c7b9e1de3a1dc257c1f33b3d54a9101be5b4f2a9db319993c2cd137c41e35c434ce52e859afd1a635af4d8852252dc5e28c729b2b4c96a56d57f3f3854ded59fe612b9b3a51fee3fc1c83db673b0cc7433bff2472bc74a2eeb6706605e308690fd072a7042ca6474603711d8310909e47063f46f287260a26c4f11fe492298a0f98d28c45948a4899e08fcf443a6ba36457dd8329314d53ac0fd0819fcfc3357426c5bb8d3dfd706e205a81091cf08f31cd3459854f3d07e503991ba5f067e3c406c6c5396d8257496f4ba3703cb1ba25c2fe4aa54577af782cd57e85a88a2d75c54039e8b7bb559219edd6e81e41acb6d575d6f798afb2cbf7f00abd5c9c7b0fceec79f9a0fb040ebcbb7bff3602df7b71357efacd37aa57019350bb81213508a006160acde3dae5c42f03141887eaca22d7b33d6791febfb619d11ebabb13e6c5378e9a72e852ddccd31cc53a43275966b7042ddc51485ca20e1c456dcc7020cafb5407548b044d332229911fc74d7fb97de25abff7efb431da82de2ed7e25d0dcc06ffc74e57ca93a6a9f64d76a5c39776fe2266f88d6d0229b527525fd2e22a1407e26f94c5bc6adb1e7327f3c8bb8d4c983385c579dd8f5623df8cd6da569c7de73d9210e6b9253a177653a13ece075940fc81016d8c35fa4f6542df5120c174158ff32533476f4e059e35117081a24798fbdd1eb10f82809836f8dbefe755611347f75423dd8571695960c6f66cca71f0a01e8fecbe1183bee3335eff10b4ff8104132040e2145ec3164b2448f60c730887b9d7894e5f7df3f876cb17136c99cf32db1c02fba860937378dbd093c4c5112133781f06c8ca07c527c2c085e8ba5e52b399f2909e217aef6e3035ecafe2caeb1004069dea023af7eab873deb5ebcef2313c9827821bb9f89fd3d1570a569673d3ede86a4fb13dff242eb98450a8917fd8865c56e0a9f11d72394b79808b0429f3a83cf2465161596887fa2d557b367a1de9c7753666b0cca9c30cba9f0a749c03c55cdc7a6d45852c76ce2010de3e7f75d95228efdc79949b238d90b25f983868b7f07f585f7b00e45d9e132f3c09ee84f794d899759be3dabd46a256f4cf8da71270617cc2425b24cef25d1d2f3945afa6f81abfccc858cd02e05619649b1a5347650934105c02622d538447223d136a8a0455cf3c6f61f696b32266197b5cd1d936fd3ad4288520fb4a2f59bf95e659f33210446ef18debeb679dd99de0c3c74a6eb3dd783861f5db4e94a151c42ce27519d0bbbf1f3b1163563ec06c8bfd881d94a3b896fc07352fc97ada73685588a2242da1b718f81bb1077bc70fbd58b8b52163489ae403838b533851bec30ed0ecd97d72d1af534f3703db59f1f563bdc39d690a0e90e545506463a37e84974fd7b256bbb912cb4077d3e3f5bdd4bd2bab713b696c830b1f2185734c4d2dbd49d5372fe8b813ce73f5e01c36bddbb376ef4541033f2b0355613eeda8951ebf7377e08f967902eb7e23c0fa798c6ae52401721053f1095cacb1e9496500e83c412236fc21566090b3a3eee55aa402c0b774802fd81c9e8579761cfcfdfb1aa23786b2dc35dacd5ca8d8d283369f53e4a5db18060c2c6b0c303052aeeffe169fcaf7ecc63090a9ade245045ab9c8aebf738772297caaef5f857322a597846c7370083d409df27612e47b0cb240daa3cfa51c57108612ac0dddb0f59791289ccbdb3a2cb1fa9ac31a23dd5440682fb373bf0c1f41c4fe2185ad7c53eb69552807410053b0c2d40132250e637b8c425e6a35d93333b5b7d0557927b6179c848ec455fd1ab38348c0e96c60b2da49bd15118df64b6ce4fa48fbc555a4b2874141718e731a40b85382ae6e86ead31cea77f83bf5c063bf1febf71688a832d615e09d6f14badedeaeb6ffbfe343fc7274e78cd46a2aaec0a349c5f133291ee57cdcb65c5474e46294de6bb50886bce6c6f44dcb95f2a4761ed2e6c9e7bfed51e0964afab4e0f7e0b07960f2590baae66b1ec9a63ba0fb6c0d27e81508c51487dbbdc9beb8879fd58c188dfc774b3d0ddbd77ee8bdcdfa0ed8a9387728e12b13e8b3c10cc1c132bd822c2147c5ddf9a993aedbf78ec256db1be76644ca8ca7727208bf89732657152d34e948d73c47561d156f773136684d4162d02260300020123d13a95f4f835907c344942ddeccafe2abb7dc4792c4f1e39c24748c63cba933b16be0b8853e058c47a1ae2c4dfff39ec2339b345fe3557d03c1df91a0607a711636c4416ffdb73532aeeb74f237ed8bf971388a0659e4682a46b8327e751034cbf2c87c7828da9d24baf07a742ada34d1ef38ab1e8f2b4f801192c146600709533e61bc2665dc1e9e6441bf3c4f6643bc0c102a10f9a69da5b0e3d0a0c7cb694c682493032b5853f02953b5c2fc0e1348565389762fc2dcfbb34fd305f2d9df080e859396ffcbb7da78aae0a0d72e3de76c774bc6a81c87f2872b6afe97ced5269009304a4992c4add0bbe24e57632e19ad0fe37ae910193aab0aeae32cf6d618ab33eba59f6a04fad00b1d2403396e6fa661d31b695a1b349d62f56c08fe6c6eae7a482177adf341e51d03ea511d7959c721bd20bf371860ecd7fce1d25212891850b85648db0a039e6638d9c78bc958add3e41341536b5007be63fd1f7e3308876bcebcb97dc3b05a7b2eaadd00f8fcc8dcfa7b961bbe727c9aed1626ff786d6a0ffdbd1002cae8a7d047b6181962a686c152b2341c7c58c9f1dab5af424d183ed1c7d003165a1d04ea3683ff31a0f68615af6f91c21f736e67df641ed31b998445afadf9052bbe004d5dad08f62e5d353e42fc35a92242d8414d99dc4e7e81c8c027af686baa5c185e3f99abb3855b22cfdff0a62e2f47a632b7df8e00e0317af5c24ce7c64077bbb15ec27e062070cd3eb8e549ed9112469090ad9a96eb59294b021eed81987178cb2dcff67a9a2e930f6032c753e203380f8a7c987cea393234699de03a1d09ce204f0a8b6d5cf522b6887174fdbccb08f3e7c4fe2f778254465b32766c48812a45151ac37ae354dac87419f9476baa27e24b2f322b2da4ddf579750684a5881bae2269351fb7de59b9d5a4badd8951135f2713dafc57215dc626ee170fae7f20bff98e36b864e1fe0f0f9a300c903069bf0e0b6f2f8e78423cf6063e89dde6c81efcf26ef15510563c84730f611ac879a6628e55115e1a29de6945d37fbe4f803fcf2e344712d9e0d6f6c79f8773a9f199b705235e20a7830ee3357c5dca29d7a6c29a3d2628bf2c42c8f076cc4525301d8e1860729070dc53164d9fa08bf63cc889eed01b0130a7146d860bbc09ead3865a3082db0836a45f5506c3e46e452e298764939226cedfd06700e4e33c6b4a78add601140249596831e97f960b973a4e4dc3fe2813fa34eb47f998ce57270368fb81719a09298a223f7e3931ce5cdfab3f658649533354e982c87dc9e49eacebb5bb4af9a767b4f1c03d774431168cd4fec1b2726f1aae3f9a062a825f3295557eebf3af4784487b869fb049de44d03fee71194fc200af72103b157431935b5ab9bc122773ffd313d52d7acf1078386090fc011de695e71567cfd51c06317d4ff8841ceeb74ad35f4e5f4d20921123cb88bb2079674ad39e133cdfd6478d69c9bddc7a818be5d7b254bd9e0abdb030f52846fdfeae8ff370a51a9c5f6017af3c6c3db17c5c614ea18ab0e3ca0dd5de621217dffa36e5c5318fe191040a50cc3ca620683bc34da6c142e1c50afce28a86b8b66d189adcd755561a647080d93f3ede1cf54c3afb7e863fc8a82a2576d3f79e9b2bb634e598507a3d7d017e0176b7868bff3a3dfb4474b3ce03c401f33929364e727fbf8096b77eb351435c7a113b3215cc6246dd86f1517a7e550cf828900248f7c1754e40fed62477b296a37d3e53231360d012c4908b466e49b0e620c0a5031228009f259b030956ebd70e49357c3c3ac2842b6bd6e3ca5a3e985dc03f7105681fec03b320a7ca753b782ad3b52fd9c8e3bd980b48dd6ec8901dbf756108e85015821c880416e0693e0479cb31c0743450f6d9214afabc4feadb9bcee9def460a58d3a02d9e3039970068b8e3fd0a403a6ca7f2c71ae2b46ab3c731b1e65e2104c47fcb1f69e7c8c6df8c09b33f2e1cd4192faab316a44536dcac608832019f5765cc5240eabe3c87445c980c299a5e7ae0acc2c2ed19fdc8f011515bcb00476b03633c7669db1b44f97f6cd402778e9687c740dbe5686789b79d0b13f784a2a866eb91ab2d66f064c49e8df513ec348fd7272ee548ba08e1f9f99696ffb53677550d59c67f88404f6e610455a422d9cd987493ca5c366a397dccface2bba8e3e99719dafa768956cbf6fd8defc4104b8925878716a0514f70cbf3fa2c2bc2f66fabe654eed3076257e71117665703eb88c79e4c2b94e8e856e7a6ef90ee2a358409db78b98056ce1750eb80725d70e35507fdfa5933a61496ba48fbd5555717b33b59d4ef211fe096aefd478859ffc97a41372023ef114adcae5a8d5e03c21369baf1e7f417cb40326bc6db1cdf0904651dda3c1039a2f1755e7c329f7c03bf33f324206ce6e1638711c8c9a45f153aa1f847cca2a5d3af1d24fe7a1e1094819e8e712cbe10ead1012b7371b35cbcc2bd5b10505fb63bea20ac81d25e83ed0105e7595b6c28400f4d336791ce4a584323d0b455bbed44392c5f86c9d5287593f6986d4b0b8f9974a7a4157859ba801251d3b44b2bad84f29cb87dcf1680d6d10d1bfd59f0c95fb7bd07fdb3ea2fccd6e3ee80af438956ccfe31e750972f893ea5dcaa26d077fb3f09d990c2f41c8707368bba007803621ecd76540cdb8705435d74f4300eee04710a936f241c034709e625b0dd5dae1f6e86d034426819c365a05f5be420cdf4042bbff965a666a5756f67259448ebf742b6ea189fa17a4c3bfaf651d19a8a525f09d9cff637c8fac02eaa58d3ee3f7221da1e61833c0b183cd9f47686f09597e8115b435454acef80c079eafaa22b18927d07bf8b7c5ebfdec9c42a52b7824d45decef41e6184dc2db1505ca6f94172fafc10731706e79b9856dfede353d2eadeceaf72a302e3492d7dc81e3777e4e9e1f3d33cc4402833ffedb241a75a09e9495d671f80ad3acf06823bb04a92b815edd0ca7d01dcb3318c1ae5c62d3e99c0ec37908b45b51dd65f6b45b34ede2d6f553f60a45e20fafcb34ae4dbd375f52a5db9c62650deeee78e955087c2bea75ede7c304347b171fe0c1a2a033894be6e04605271307f307b2a9cf6ae24b8c87ce033a3fa4cf2bacdfcf54fcccb1f580476c7d00c631a8529a9eea2a713610341e0e25609dc8927e51c58a0a9197a54963b5cb95877354f4b8316df02ed2bea367704a12274d96bcbe0d0d728923a368bb8ab98d5db5401894c822632308ddfd309071fb4b477d8eac0ea5dbbc3e3606d8510d9051dfb5e4b7cdcf2c57c1b76902d864c3109c901da53019ed33cea84b407490486ad9f980a8a63df3d2e3921064afea137f35179130db3351f5bc3f5e7d590a5ab08b5415efbd345f9d57b71ade7dca939efa5a12d677b9af0af14468176a43712bde10cb15787c18bf066eaef8abcdea77d3a0c61d6c74ae7b54fe90940d0233e4b874c9a141dcc740d7fff43b9fbbc012a933d890232cf74fccb7ff7eac1148e203c7381b7f1d1429b1b1152ec25cbf7562596eb402a9328e43b5dc5cae36592da5523f0b9907a6817ecd395a7c778daae85bb11372b20641a04250b77b3a0ece885d07faf9622650259b874536d6d2b92181c834dc111b6fcba483167be40ecc922fb87006f63b9e8e632879563f37a8f712db9fa68c1a20ab239c0116fe022fad1279f3288b8e74a16d447e467b6381515814dd3aecab5c2a09c400b44e9100c04c720dc7e8c6d9460002da6c52004c16999975fef8752c2f9c229cbd9e6446b226cc454bd68cd665668a17328bb30f301e92ef5c7a2197a326df5c99b422096de8af231d1d8872e6e505bcfff026d4862f28d4bb3856a66ced22c9b0587451d8da4230a38561b5b1c69b523a4701a2001382aa82fcbd60733a14696a540227db44aef346d6c0a7ae5173604d59eb828614cafc1b8cfecda054dcc7306f73925e6d1af56ed74c51c6cdb66e9fee8d7a0078254fedb0c0f5dc85a4686870709b499eafbc8451aebadf848b0598ce8f955688bd2d6032abe10d1391d67c20a049841f95d2ee0c8deae2bc1baca0c098d8718cba1ddcd968981c47cd98d247aca4f838f3bf16d092eab8be8deb1f8d504d37cc44a8c96c9f22f2698036d4ad3bb48b31f109626565c147d20a4a7dfd61fb918f81548fb4f78875c1d138e819f6822651b93a3c92ad77793fba5222d870ea671f9cac967919d18f96e92778548415b2e170d90b201215354fc48a77e62823a2c2bb354782ad052732f08beb278f751529416f37d83ea26248517ae2ef2ead28c1077908995a2d25db0deaa957bcab39715283287fd626ea7388abccba2d90e364a7ff4284c84f70da68ce1aafb5be0401cb9d45e085aab41892a49e10cbd5baf2c34f5e0ca076f2772abea6f622b66020d546f8c2f134a87f96edbeb9b08394b585f2c2f98aa792f97b43b5f3aa9c34189804a9ecc2cfaeefbd0f967d85a25bf3136fd8132dec38aa82e4af6ff677682f3b62be27a180aeb22f918c24f23bf6f5954e0722324cccd06829fc32ae4fe3aee6e5a03b3651900e13fb0a759e544d033418b6ed40d037b4549a0404792c8fddc317b7f028493c4c91d6773932f8486417544f3d007e5f9e6fc02fadff175303f77f6b0e1f709bb3d3a93b38552ccf62688a39da1a602dd5e122e6f4e9171769ada5255cc5cf938dfefcbe3ab0faca434c42dc8c357e89a3d1488fa3df35c3580b124ba3bf6d0d203d586707eb692150ed05a01bf9de5c4e67bb948088784016394d47abb853f2b6b643a066ad81bcd1735aed4e108a8c1fcd025b548de874eb60de7f3c568728959147d1219e4b830e06ca2bee1f8a035e28a54ee6958d4821a84e5d1e41139905f7ec60fe67ce5f4eccdcc2c3d1e4a753a32dd3004970a4ff3824471822fe2b5010b9b6c6b01336dbf0181a95cba2624663215468519871cc39e8a7f4a151c8bd03363b402020f2fb98069b2cb8cc1b7e930938e7540d95d1d223e47865135793f9eb573660ff79f7ed2fae503e68ba44596ee745fbd8fa562c5c666d174cc01b1961736e18b8b517161ab9c8058026e0ddd6c94aed0086a26e1b959a5e05eb9d8c1ff5b2ef518ca23b4f265db61b499a48cc46bed28d23ffc1e8d9c9e345c06079ad47c88dd4e8e286575bd7f9420ab9c2d5c6685488b8b34d4c9ac04e1427ae0994cf789b48b01d1db9c2fe75fc5187727bb11119f82d0739ce4048467a08cd635bf78cc1b6cc9c28fdc199d351064a81456f81c9e56a43aef7332973804b06b18a26caa62523a7d0acc272ba49124b17bb68800d5756afd34ddb2b7e2dd8a118aac3fcf39d9f853c4d2c4fd3ed5bd25a6604d68d57db93d15aa1160f8a97e6c24238e84f272780966867f9c644ca2775cdac4af0ece036cfa6ebb1cd9d701dd7daec5763c9a4de0385db383a5647918e79c6a6de1f4ee1f6b722c561704c8d7efa4710d78dfce8ad2df0d3d82cbb59cef0bcb001f70bdc6e17af1a720b117fe02bb1dd527b18e6bce70e9447cd0cc85cbcf431fe7c006f5e4ef878a974a93b25f492847c9ae020583c9d412f4124246164d8f080b615e2eee267a7aeb5fa0974de52cefef23cdda7b305a33a91e9b50471ceb72dae337c485d636e28d6ee31f5705983808b1567d4d4ae820ec445c56e6a404cad6b408691475397c0dd6cfad232106ba96e5104052700a653e21f9ac6d79578a9f52548f426a1e81dd45bae30acdd4d22a2dafd633564d6b2f45e7d35413503c955cb0a9784b42ae8c2a5933a6729f3922f969a158540dcd201ecb6e32f88b5b4921914a2e8f424c8b031f115ea5d23a21e6f22439ffd7e5d11b08df729f65613b4f6ad3edbc9a066a5e712ecbddfa6fa764cdf170c0485f82d924a99b7e7ad8dc44c1f93e49b6469a9af3de5691944413f1417b753bcb84d5b7a34f362c383cbc802b0c88bd23a7ac471b9287571c42081b1134bfc8ce104a550942ab1f2a074cb00a90558d6e841ff15cfde6951f03e450a1bfc90dec6c513fcb2692ddccc31d22e5274d41036656183c72fce208e44920776f196193137ac67d6d65ce9cfaae774f23a86e6ee8ff3a4e9422a4667d971906e5496a4e80278774899c882708611bad282f6c1d666bc5e7c40082b43a6e98d494a18e9b3cf7f154fdbf90d786e59e83b72ad0ab893c49aca50ed37ea5202e650fda54f5c46ca2a35c476f4b009c5e6733232275abd1341199b63d22386c484cb95c43ea90e609c407bc79ddd00609cc2eb0d82848db239b249f164b7ea384d0239fe1e64d04955b9297472cafa2ff272c5c78100aaa86cdd8120556f25652a3c12da5853338e3be8f505d93ea03cd1cae7e78e95befdc0e26b760d11e05403c348e0523fe036381408033c009a8e1f117af5100a6eb91f08307df465c20bc1dd029875ef7e49338689f602d98f2dc690a57a6f2864e57098f8bd723574944ad3688b292db6d01387a16493912722ac8f91fd12b748899bdaeabdf0479df788eda440d7bf30d1c25d78d757f00b74bb556506637fc1ab87162f05d464e63a6272db3fe56e9357275035d6b6bee32bd92c4a1dc94778551e94ee1d8854f767bfac3811bd0287672aaa01ea18c25650f05a68cbacd9158e479b508e72df778589e1e03dc543b60bb3b10399e5c50de9e728e69774fb3f5fea757ddefccd0f9da75afe4b67f9c54aaaaf646e858fb001a6deed0a8a769ecef0689c988de566b6015fb8c40aeb5f2df7ea4bee60e8e69d15c4a4aa5411dbe63fbdd6418cf025d87f37362f15e22aba83abe1a3de9857c71c2234023b969eacc0bc526363b7f30b092ca114f2a6cefb34394d146866ac86a33fc497a8cb8e2a5bac398579ff7958878421fb08fff4f8f3deb8c9641b8de392647df3017a5467f9d7b23036935ec6e188dd6dbfb544b8a9e04a4b3c7fa1e4d1d9879daf69986b8083e6eb023a4b5eff80fef17f8f65433c882a21565a919448e6091d1b61013fdaf9fc3e45bbe827c9b4ab10b05600a1961e81d31c7404f8e0d32bfcac2937eaed811db167dfdc29286b0d51bad2bcdb9dea76eaf495a31a7fe717c1c98be374a36271cdd06ed06c02ef4c3c06cb42f73b3332ed488416010e6bf2f4dc4dade6e2e61f19e9306bf941868f59fa0939005743dd647f0a04b576a7e71d4c383c479453501e18ec56d7cb79fe31ff534afbd8609ed701ef163f9de31bc58114399fa0f22b62c66c380e8a10c34b7e731df2a8d39dcf36fbf3a66d67b973e3a94bf6ee0bd96f5c76baa76492032fdd2f59ecaee403d486f543f2cd7ae7b0dabe1b5566e681cd40d384a94349e9668650a6f2d2daf86c59a7b02ba466cd03ce1d50c3f0ca4c02dc4b3d1c0e7b9a77df9eae0bfcffa32117d7e05adc7195f4278c93497401629897a58d08ad7141ea52e0163f14992d7a284e7b875ce4640b4dd48ceedad1ea17d8ab1e760773044845e0899602f1bdfff4d42ab80c0765d1a8bde2ba0a830c050923956d06c80b182264ad19ae4f7c39e43195f7d421bdcda00e3eb5ec5ef2ec91d69df691ba7fe250352acf01fa92af5e2c634b9c7c97889e9147e869acc153d88cdc18908f882f371ba9c1e13c26e9cb8e3cbd4c5e1988080ca65a67b3a4c3460cfadbec904d853fddd2f5375b6070941fca53cc106b5748480213cfbdc1c34320a0478b05f76fd0454c75eca069cb1fa7b21704dab67dc40d041c8a1040db378e76655636ad725219c049e6536982d6ee9f11dd032280e622547c7ff44a938a1f233c356a98182d22d5770fbc871e20bb37483dd5d6ea1551993b95b30774a49b50d411ebe0e8c92834094e23ec2664d822c40e96fb42b8607b62b6949e05edcaa436d0ffac6a8ff384068acfc0220c0b098d368fb8113918a4f8c9de37cece74c8695cef2427e54a6e77ad092a9b7f1d94ac9f0836deff41b905b5dafc58ad6063759b0372a634f69a639e19521825d66a282f489c3172a3659264d0132af3571e637782bb6fe5c0afd24547612166fd3409d0991392fa054ea5bd07a4cd0921a13ad7b62a0b5e6d56cd8adb7f3eaa5c99576941c38aff311c49a8c9d8c755869302a2e5e40109c8365a551cd3f859b9421be189d3a0e9ed78830d5cd6a2414e9cc4c25814d94d98f8848e5386d6dbddd65d22b96c5d20020a5dd409c7e5344065871e57e01c91a443501dc8bf619890fe231319b5480c3879dee618d319962596539e2970513fb5c0c8eac3a71ff99962779cf1d7e916566d0e29d121c5cec5d7302a18ed00be9316f3de8c669a64c2a960a588f9c8a42690f6867cda7146e8ce27aa6a7fb27606eed9df6a235a42d17ce71627446e206e879de56025a66556263f06684dedcfd6f083d6a707e5fc8f8212d716e062f0f7fd0c2fc62bea93d68581265a803c31cac3f8ac8939c5f8c464ebd19df42c7e8998494af614c8383294f3f3883f2404ac10404759e182a038c97aea04a85530ec005e203807c5bc30fa9f5339b32fb0427e64915e29a25bb25ac60b92256470e7de5298d42c6b88995f8d2fb704e49d55b66b71e237af90fcbfd71d9093e1a543da2e9911ac4102346dc4704859cb33ac5f5dce2b3331a9dc9fb506461a5436c89bf90d39afcf93cbca4cfc35da6ddb112243928246ae0d1ba269b0fce0468d3ecabbdb925c9ea3241e2dbdc6b151fb4aa724a42f98b0248171fa01fa103f116d0e7deb65dc359b09126f9a420300fd209508ec7a50be56d5b470e387d0c52a1d104625f9571ce1404d1b7af3fb00475b95f752ab96610be112d33ded48624015781e7198f4dcdf917839471fbedb43c34efabe09941fab6b342cf672a29dbb1eed0db788dbfcfcc63bcfe80f7718571f691818dd6f839e3cc282f85f03fe0400171cdf1235049fa53de7450b4c40ed398d5a486f52124c1c63de2afc950e81839f52d17e2a7d32f82788465a65da6cd763c6360763561ed2bf47749080549b6e2db87514e1ee1c85a0bbd346eb6e3cc29267cbedcad67a287fc5be65ec59ba8b6854b31c83dfc5155187d4150685c5c2c342ed68b01ac9e44b60f0c100a347a0f93074dd37d8956fe2f43110dda66e9f9e6185c23dab74cfca21f3ede4bca87687549ea02662f45dfa0ad27f9959a120cacb7c419810e1b1a50fad31c12c47d5bbc61bad77044aa541d29faa6126c60ef088b82eead17a52843307d4bf798b853d90d14c5347ff10615381d85e964331b7a123d15a77a6790d93e920052ddb4db4baaac5e2b27b66ff955e53b8308151c81da4711189ccf0eb393c5bbccfa1f6c94a8d5f4bcd266fc6a12061967ce836ca042257368f567dc42de6ce0be84449234a6163b72069f25b7ead4b2003e1a7665e87ccf211abe94175d1c11bff2c0b6bc110194d34aab96934ef59804cd26e4434ba166d9833fb091be37b139cc10748b881c93690528a96ccccd2dbe024510b8da37dceab567dc52706461c486a0463369cbb99bcca2e8a4d2e005c45401964722a4b3ed37c351c9f21685e8992c9634349379f41796deebffc2928058c8ef6ea37c6e4970dedb78d1c2a00ea9e1ff1e7708470a6c60e6a2b1e966aa872776afdb238e97f716b3df8dfd42bf0f7ceb52bf9eb33731bdba5987b8f48b4599d67b383e77413107857e951ae0625059e5616ccb41131df9a480efd5beab3a9c99615921caedc53dbad675c00ba1030577db1d22731677914fa958b44792cc9c19e2ac71ebe61a05ee67ae7116e39e1c0d103f18bbc9d531164360d901da8234d29fb0b37cd2a60c7aa2adb2a4b297ea2fb14122ad95bd4592ef86c88fdae1e37dc8e44ad03c0fcdfa3801e93796771c5a2ec1e4ab12a64b3ffe48e7442c6224661ed5cc987aada6e778399941f7b20f16f94fb346b916be87f005c9c13789741602039d38270643cce3c347565eef5ee09139330301951c15756be47994de6f1802dc5131b9b011051b1d87d744756831a71cc8528487f032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead7a47b6907d7aa95b79aecedf4a637ead8fc6fb8654c93d13ee79f5d6258dcc61993aebc65e4fc14eea7d006e31f6e9f60e3bca8ce52ec559876fd20255e507daa99b185671ce1ac11d448c30bcdf97b9617195e0ccd2d15246308dd6cda74a8071114327fe203b1adbaa780f3243105c5111636a51dce966f5652e39d4f91abbbb4576234d6cacc3ec57cef2dd4dda49a6c33d12bb7595fd5ab5bb15b40301f34ddfb831a5dbf62218f496c003227fe6282e2ac054c45e7f3fc93e51b3ee8690f08612395095a0a12729d663eded879d9ffb325c62f2cb546a48bed51ae232fa6ce28a2494c132a6e09d98c2e3d478d5d2d15dce2e2665e4a3db448931068b99899c2bd8ba87349b0cf9e3c52cffdcf58a59b4fe0089b298b42ad7553f831bd60f5cfa3e09102fe773e4c05412973a678f3b3ed420433cd664dc7f218e816a17c5c9013ecb84abf2dd073557dbc41b92a91e0339d57b8b077a9a44d56427fec5748c47c1460b2e2412094db6d0ad06dea0aa0c1368592594bf0b2f590a9d6149e44dd4adc4cb42e5d9940d59397b83b33b88604c210694e3fbd84795c80c1b09ddb3b1ec8bef6e9dfc4d7f295e551a79436007ca48aa605ef5a89571e59cb26f2766e564e39d3bb441deaa0c8664549881d90a77256c0f6c77241fd6ab74b0e2890f78ff16fd2f9271ef96ebfbd0b878ba9c703900752b7447f4efaa60bd9dc9cd5673a36b39d49f54274caf03c0cf82b95141fa20ed3ce02ebf0dd74d9eff8eb9e2dd3a2976b244b12fd33ee75c1f1c459f86a1cefbc817f42d7f43ba406098165cbeab99df4fe751ae3382efce32af252e461652c7598161e74fd8eeca474fab6b1ede039935f2fd4d7562623b90a422a78941f47a76863d95857c33653d1b42b806bbafcfeccb7bb4a0c58acebf6104b2570afc3ca88e4fdf2719cf39c964a1ea7d2ae4a7fadc938abc95adac495093f6b959b1347501606b3f960b6d739291aa8c13eb49e98b0f78d2b91400b6d8961cb6165c8b684738e4d4db2f2ac30ddaa03a5e0cde4142b625e81907f08c60d7cb5729456806c89ff0efd08397423e44738ff38f8e88684f3a099dcda455521caca37ab4f4d9ed5d37975d4fdd778b97cc93babc804864a35e3a2db04598152e67a2f1f157681c3962d46ada23ea5d9a524f9cdbdd08a07a3a85b1f6fbde11d5a35c7743b83bbefd19aedf6d92241d16aeca7f33cc51839b75f111e8edaeaed808daf2f43fdb3c6f032ea45052ac31d4870c4d0d76aa75d0b88635ce449054013f234c4a16cffc58c95ba1cb8a0a0399861eecb1039bdedfab4d05f0270c6b16f03f6b8e629f687f133ebf2662c7f930530746679aac2791f54d6a95bfab5be0c33739074ed4e7ae88dde4a8036a7d6095cf41776366b6ae3f8f4a0734f48c275e129cfffff5e0abd042f99a957bf6f0f47fc7288750f4fe30198f8cad7067b36cd87ebca08abd3f9475e7443f83cca91a1ebfc42ef3494871f51f6d52a5524b9391c687571be5327c7c94ee2a096653acb410917fd51e56a92be4f24c1db6b97b465ca84c31c04c2f61eae07e952eb6554aa4d8a380d9ee81c1c462c360fcc3cdff2867a953b655562cd06162af8b99bbe662e0c27ce4d9a1c1a907def48a3231c2110c930a2f1498e32dbbfee0e5c5869332f3024fa5dfb0327a27c663cacd4e9902de34dd93529e90eb347bafa5035f56fc578e8386c7571d1f0ba335225ecd8be026b4544ad70f3af11501a53119ee39a8558ca0ed5b3d897ffb9cf0fcab55a0942d3bf7bc6b94ea27a6b748f2cfda431f35252c44610b7e843ed91ebf7e8fe10638f04f52d6d5a7752ec62350efcb7c473f80b1f2a26805151e8346d39d23551e92fbe372df7979c3f756bbb43f6bed09bbc6b65fe6fd241ae1c2f1a0d0b805c582853b85502968f9478e9a84895f9d4ef01ec4f3f571e57cd0bda68ee1f6f7e14fb6e0f4ef8c7dff6796472a935294fc27b16216966d5021339ded059687355b42b55926854bbfbd9f974a0c26eadbfca8a6183093996cf252894e6db910c71ca3ab2e82d90d371c36b92c9409cf7937bb266ea9b29c41d774aa522e103cb30bbabfe872b57beb027623742806aa7694a859ede9bc1fd7b9e32880b064b0030fce1a0e5cdf3ce558a5feaa32e323dbfab6661c5878c9377ee52a615b7c17bf1228e328aa20f92d070c71561969e1af532e76835fb0436810c3d87b982217edfb1143bfc3405ac9f6f3a50145608dfa8658b0ab642a347255c55b59cd1c5897b2cf625a0f0706c30ca1c1321e90cec57b7c3d1bd1af455e3732db80643383c41eaa6781f63da6233360ee720cc04d171ae2445b0c071e339d547f7ac32f407d29ec7abce0a9e1ef5276544877bab2f84bd2eef47ffa66f96e7170cd54d836c9badbc59435146031502c1a3cc744a470f693636d9050c5b894d2d6047df60eb0bac16d905d46cbf017ca69d66427cb88036eca4ea9d0e579f6bfd8a4a850703a0fe49d39c107c9358e98689fb62bd0475aab4b2031446b437c7f9e373caf0270a28d7b15c71f02079dde401e26175bb6e392106a9072021f0e5c5145a1db6f595b032faed8551f6e2ce318db1ab513db876a3eb42d225014949c19543e9c5dfd2290e28c5d72c87223f0195ffbcba1c02c7d0087721efd2af6881dee7dba7565e07abc35bc3fa41c6a4d6a313222ac6dbb117c69c62db2691c68869ac5fc5e987b0ae4335f815c73ea4235da2582dde81d6fdae5911617daef847be17f2bc09edd88830eac03977f89179fe03eb2dc3b38df43803ca2d38455232549110f4580ec3cc04c0d8cfe493013d2cde47c506ef6a8dfc42d998f70378fac5ce4709345926dc477e9e339d8c87ff6287ea6e2873e14d538cdc3f2a47e0e37a2601652f5b665b616a7d1ef3537a3327a76f93990f7694e6484e7a52a10e9eea2edc92b99406abfb2b11ec86667c7af4a333dfe900bf071d1bbcf4f0ad768fae4f450c53817c507d26e926e753e3395201d3ad89061f16706d841994abad283f0db74cada25beb5fe46f48669a62e0b849cb77097e1b4578b45062af4a071b04f0cfddf87519cf2bfa10ebb4b860239ff187e6dad73806ae968e6ac0f738baa88edb3ae4883a9e59be7a6b222c5f54818f95578daff9fc7a7aba8c4a41a699923e85ddf24a32bb71c808516f64d506058a70539276d57984d75161cba7d53a4a864c51a249a6b8fcad5738dd0055ba8468b56579ba5f102642df65c598490f3a0c9b1064f4eb1962c4c38bfb7d55d496a0b0f7b3f90b42f733d112c89176aaf937eea4bada845f3ca4e9b56b3a5a06b4c90fa4c1914ea47020c2f32531e270007ed389246906ecf2c4465f7cc5d6a347583dd73341ad97199021819be81100d867d628323ef7552db945e4c0be604cf6c4a8197958bcbd6c1879387d3286dff979632c54baba2a35ea84efd7726b662b94fae61464d069e0103692599fb86fdc3a06e01c6ae3deb3de6fdb21806c716e5f82b784e4ad3f0e2de629a18e3a2309003dfde9dde8e5101b83312f76e811277afc286b56879f4eb80468e58c60bc088284d05d725ddfe3185b7c51b472a7ff7db3930839142d4a452ddab628e07d43375801d7c6a711a55b452748d770b84ede35920c1ac74b595baef963d21df9418533fcf959593ccf5afccc753e86c4ae231eafe77a158c2472143faf169db29bf2b53c3288d8b3c9added65778095f85e2cb471ab58362041f0a27d874c42bbb06385a0403ca193cba67cf70029cdb7e73c7e2267b856fa0b8dd4c706b45e7174659b0ee2891df911724324f7ca5daf07c912b9b2abff762e62a1817688757492975db7185c4695f3a90895634b8d07453b36dd95197abc31d5d153dfb0d0ec92639540e99d6590f9b394f14c93a5e829fbb33616e810f59c502be44a13b700fd3009545e34c211abf9afe1bb8ced793c6f516d40010649f83a78ddbe9b71d8596582997d0aa54192e1200db61dade30500d72a184ca7dfcbfb80e5442f489d316cc8b75005564835d4b11c482e2c4d0d160f14a8b13ae0a0fb0ba5e3b782770aaca357df0e1c4d1c3b28b776a8b3e0da1abfd4f7190673fca1e1c5a31c688d6e8ddb21300e4178d07c4e854a718ac3f672b0120d6a54c16957c9ec8c444208e47737bc4eeb0bf2d801eb2fcb72f91fe988aa75f38e6cf26e858dc2a718580ff5d281d13e8fc3e3bc30c75c0193481c39c375a5b06b962d9491f3f1fb80f1cb27067f0709e0b0730573a9b5f5bdbee1708ad84b4ceb1a9a61e4c41e90655764057bfa07b8c81cc83a315be1aed6a49715479c0fd0f53f625fe6c7f36fadd001149ab978532e4d0de3d1a38934c74265b161899843704fad16ffc6189f42a5cadec98603e0f98c6889bd4a559079e074cb40678fad4690a20d988735280a1ee8ea71275069132101b35c18ecc9d3c6eceb4cfe9b165e4b6acc17d4f113ef8283c0fb6506f5635401e916d4f7e7bc3cf49aed166587a0c72cdbe673f467d81bc2e9cd08cd8dd16d90b353481df31e89b45e8b
25MD = be3cfa6c965b2ee4e6fb0236665b0b95f66c8da8b338375b7393672283b0e50b96112d7cb76fffaa6db8ea4a7687fc6234dc1ee52e764d69ba8ac40c0f51beba
26
27[L = 48]
28
29Len = 16
30Msg = 3a35
31MD = 87bea682792f6bb4977fe1b92e0cc7017413dd263732c3604f0ebd63c2817ce5ddc5d78c0137f614a06e72ab1cab2f4c
32
33Len = 104
34Msg = 7db15b3ee240b45d4610950996
35MD = 7311a6356ab38a690c0b3a1581c3e7b6de418996c05e79849891b061c51d53dffc0fff2b8ad1c1eff165aee5ef6e18ff
36
37Len = 352
38Msg = d2a1efc725c46cd6a19760f49edf0bae823c1b4992ae2260085746cf65833bd008e56e64002383f51f960239
39MD = adb1778360ec659e90609e74b6af219a01a024f216b68aa944841429ed5b03b139444b8b848f73fd5f350ef02d46b6ce
40
41Len = 1016
42Msg = d11ad1253592c094746da7b5c88d329bc3ce1929913b8be07e82d3f6b7a536a855f31ad197376eba6f2f4534413fc4e4e7673fdff8739f774a710754b568b7c61a473059a41c98aa4e86617aa66d2601d0f0d584cd9f132afeebdc0ce3da6a8b290059e6e4aa080c195c42ae7f7e1e99865223439929b0a3a0d79b46ca6419
43MD = 0cbec7be7299f48f043c3d1aacf833b4258c32190a21a8ac2471666b4a51b63cc77fff6e081aaf5ef21b1b7523d65763
44
45Len = 13696
46Msg = 2f7a9929dffaa4a4dcfeea1fc37b18e3cf935abbaa17cf9d834b3a8d61e9fabfb7683cfc387d6f46ece3f8bf845827c7ebe86a651d6dc1e83c5772cee1a9fee4b04453af2f68430bd87835126cfd1b3f8beea4d3822fb27864570e255cb65b414197480b6bc20a39c5450adf2474da93d72f6ecf8063899722d3755b7a19f71e93e782d89593ab19ddd3ddf053c54e0bf832311fbf132e8b9e540f38e4d9bcc3cdbf69de54e40ef348a9170ba2f65def167f568ce846889c0161448342fe907718a465e451bc1b0f2e4f21f9b911f186589f43dea305811473837c063b915d849c20deb43323bab4b64e61823f1df119e71962dd975700391b411f8778980a3080ba3c14a321d32c082d416ddd2345f0eb751a516d44ee55222395cfa11e7fc4edfbe7cd49bf4ebd4d7428843a2ad5538b3cd201ccd431aeafb146a65d28a4870a6948a7cc0413b0adac7e8dff3a898aeff5f4b65d10b28ceb749bd354c061c3008ec569d5f90a4d4f5caa51d35b49dc4028e738c8ff5939fef3fa202fed9ebef6f2c7dd0ba41cdb5c0c16985f96fd93a65d134fb4a90ffc0fb6cc5396b843c2151bb7c9170f2fa4fb44292a4af28df5481de0c3c917ba1c46467a35302738158493fbf6a0422cee558d4bce3d78e14b4fefb65bb05043e2cc2a6a8ea64565ff6ce2fd2c4f43fc02926ee44ee02fe1dce25cfde0115c9396c9ea06269f17b2caf58e2332cc1c8528d9705c70da1f76f22aeb1d1b93449180640fb5c4c4a708bc4621d7d2bed5b1a752191cfdd45086d34f247ed1df0f24e7c620de32bdfc4d1f882380d2cd7467c926f48abc75cbfac8788f88cd9dc5361517a5eb36311e6b39e21a85fba2038fd47d860f776697bb19cdb5a4d6746fae507e274399c91648537d905015e58910117e5914f44ebcb00e771d38b30c1473e1232d4e222cebceb4810c48e83e0fd4c852f4fffcd643c0ef9e4fae2d0ebc6f102f3f749b02a5e3a61517d53b539cc24120df3957a633d50369d46c0c226f8924cae51dcaf54d716f61385fd8cf38c2c311a32bcd6594d6930133dc18ef36a9671ba8b179abe95f588ef74e8558ebbc974dc73c26bb6eaae78ef464181e18b71f4b0f986ecc8495a9c4dc0b0b96be9806fbd3d32952ca3b4737a06ed6561e9c9581a33a720123fbaa2a70fc3233b83e56444f5aa0cfaf70fb24be6118404f3e11e6ea004cf2d079a3e93a8ac1d4e297cf4fc43851dd26314a7ed6a5a784b386daa26e50c64692f7db28c21d82234289bb45bad5042236667e6d70a24bc9525c3adcb793a6a5725d9b10911e3bc8e3fd604db7998346e7f7dd1815c0cbb735a977bd4b32b5b976932bc92ef3b56bcadc089045ec95f241cdb0a84c67f1f76353da6cb493bb27a881d37a2106b8b3010cf935eb3601ce4dce3e449eff8331e444ab117a20809a1010db4cf3be0c488f777b6532df908112e3d11592f04a0cc16232d62340cbb8b5268a662b8278d37c03d848a04f0ab498f5af43b0a20e310197b7e1395a65299fac29f051bcc5fcd09a5605bfee370ee8ea21f5807d9748acca815a44d81796d68b0014eed3bb6a94233fc51725de3809ac6f538beaacf8cbe3d96aca21a7a763a957f8892f22c6d086d9af2e5ac9d90321e186584f17e964c90739559ddd034df076c4aa38c2b78aab6dec8ef6be9adf33bfb66f159ec4826653ee6cb483539c47a4a1d95663e6cc7a42a3bf628623a4c9500a59a50a312aa104b198ce5f3e58952bb79ff1ccfa9ddba2fd4705e91b5acaddab9d6522d7666264ac5f533b6d8ac4512d8371c69c06b6d322b046ae2a0a20aec1c3bfb05f3d91b9044cabdd873abb5f2b0e3e19740df31e39828f9ff9bbb20b73541a7a70b8174ce4e43e0d356e629cdbc6c08d29bd7acb6a4347823075683ce9d7de4ab3ddda6572b175951f30a15263355fe9641b3322df7dd52077402a884cd472e6d0b6c34cd63ab63cec8760c7ebe384f7cc31066bbdb7a3417425e039c4d340166e4bba4839076ac9457c87459c57957d0a06dced2f7a18acd22b7295785dafa435a2a8a2c3a1fa05d115fe129d19fc44c5a29bf15b4d9c2b375bc8e591f92756cfc573a39b8fccb8395cad7617b11f14a60e2dbf69b897844cbbcb70363010f6e1bc0590ea594aa924597dbb32a868b55551789f82437180b85661809089d34a168d44b4d788dba23b13542715843eee797366d9ce7793e72331735bc78cd61b13421a568ba3e66926921c04e9d00888ba7ddeb474db63813756ea4a02c1823083e36ebd2d32d5c88cdebb98d511304cc276c7799cf84a1699ccac9569b13f530c762732e6bd0f8415001b2c02d11dff36660b717054b16df49ba38425e3764a56052ffddecdfc686aff22079897376cc15591e11579fe4feeccb55f
47MD = 70e1259106fc7a7c6be11d95fb673bfaf0074e342fdaefb458faf4619e7f0edbd68d509b9ca7243d2e5e039d42ee3b47
48
49Len = 100816
50Msg = 5f464d3301c5e0871d6b41b002dcd09abc80a805de3482d97f3fd7b9838745da1c0534168f76b93c3c53bbabd904541ffe5179cae619dea77446140b7400f47d242141c7f2e9894d88f44c9e066861498e7394f206f594a419790d697f6a11187f84bc6fb288186109343eb11172bec076d041a4c7306d7978c009fc2d2d62563614ed3555ba2d21c8fcd70e8389352dbe4ec808af3231ce990452eb05b1b0dc4fbb1b4265e69235cc3561dae4148c386cd770474863a84a822b2e5f905fc255d55f90bd6a760d441dc52240ba7d8c888a5283891a2c99963d1fe680549d6267cdea92cfead167f6c49663668f2bfdc61fa647f5abf3ce5ad2c6c175dbd456ba41436aa06f5f68f5c88e6b74ea86a79934bd05b486210d3d470a0967ad6d67f7385260578088d7e63197849354f651aad07e04ed301f1fe7a6d2047d50ce5dc6bbffbb1da6b47d740898f4eb54e3c5a1fbd18ec93254cc01f705fce04e6100ced132c519674b2345547804a372b5c925bd9ee9701527db33408d37b72f8d18b882d3c4744eb58f011d21fce336d426de1fcd5e09610216248b51fe2b79b96c2bd6ca0155e05a8a516b7a24d529a9a475284735bd9c4c437ddf399864b64fc5d0d6ffc4e5a7a3dbdd476bc39ed29a0a92e1f2b6b3506c2be5452d4f896db6eb4f895b554b2af64c4cb8dc2369b91022dc50b7291404cc9605c31569c32756a64ff8c4fbb0f1bca346c7b58a5c6774b2fc7f7fd50741d34c8564d92f396b97be782923ff3c855ea9757bde419f632c8399763003b58ee9140c2d62e914c1e1fa742661a9166d42267edc40905b35a25d5c3cb3fb457376b7422896df7bb19c23e8f764416731d2e20cf2c1beb8663c07edd8f105e078e2fed05c5e5897c430017fa2160f565a75a4c5c64a15dd7d644bf355d169ae2696ae5ed1a39e8f81055cdf315e5b0c6f9235515fc4dbf30281ef17b83a6ed604f89293904bf78c7183fcb0ab236cb1f8935e59c51559217efabc000b165d819b717118a03facb61a13a99b194f8b6c7ddfe5850127d79078397a56564c7ed6716a129409680434061b2a4782c9006587de927c1ae09d6778a5f1c39fc419fe10493eb0d4ad492fbd05485eee7913c59df82fe7182af2cf06a6e8edf06676200077bd1408f5c1cec537cb8566470cb44895826d04ec20f0aba4297c501add65c75d5767ad2ab63aa81b7b66f01b32590f1d55b7e50e6df1ee077a19c8c895f5ef62d452cc336e9aee171fa997ddcedd7af86e6cc37722fb5838a46c5e58e7f700edfb7c6bf832171d9581f660752867118e9535a6118635709d6f1c1cb21b938068958e956149d9bffc67f355cb88205d4894ba97c3e3c8be9fa2d20abe79f3f93a6a2f4f56fd075bb49a4b7dc83630e58c32a29d757fdbcaa607352f65483cf2cb4208a3bf94ca7a25e2a4e05279be31c33696c10fa4971d1b64ee938dd299f483e5c098845749a3b706a787529bf2ca56693d0a7a98243e6482a43e1f5d3086ca1b00368d8ead5ed2d0fb79b1e2f537ab9340809ca3a9b5eb2900390432293008ab7086c2811d33de0648be5597ef002c7c462b5e0f4e0b1720a98b2299ad7aa55eb78f0c77c2ab4371385f280107ae40ebf814a8223dc74f31483c63d9e4ed09fc7e5a51bac34d69d97163116a66c84ea9fe4263269b71fd228555ae3cf5109c4d6ced7b9049a2b8069bd2f71834d6c07fffbd7561939188bc07dcea08086bc7182a5270427c3199bf5fb5c4549861fd32a38ec81c4ab058c777dc01864787f0275f911a17838272cd65135f66baf06d8d93bc439eeb55d50b7c5adafed8eb8140b4b05f59871dacf954f4b096c30b7857774fcd319c096750bf605db8e31fe02cd1b9294eaf8bb009d4609f2cdb3a8657f650501b8553765de8f572fb91ac77b35db35f402453e5c58f60146f2906ff56b9c6b3a5d0bb6afb9e2201110919ac9c01a7e9750dfdb2f72afbf7a8d6f64b1c68b9de17a2c9abf289eef24074eee9b1649caf3693118165503a30200993d271aa31b8b92606a10a52612dd1fab495b82f9a98cade18b9d8a723a71ceb63fd1d27372bd281f9b40aa1839b0cc2f2177a09aa8e7b159ac118d7c145e7a4f032e788d21facde2b4dbc1d5d2238f530d9bf9bd2798f611d03ed8919f0c85bc2da99750b7a8d6322d2e66ff6ab9ebaf7424e8c1c3f4fe92be61f65359106395f5ef995e925be3868ad513f561f873acdbaf18590c903d64bd275121c11ea655124d091740887868544c5348664399d3da96e2e35fff34f062fb939d656bc072096e510b40b2f75ff010af68d64fd0acc778e2e13c9667de266b1816c4ac449521b02bbb217002c604be72e73051aa9048d192e3210a68769dd2693e5d44951711aed3a751240d42f8925844131daa36c51d7d59bbaf99623fddf1649db954705fd6f3405e63894f5258c9ffecf83208c2c90cc55b1a8d2972ea6b3a049ee54942b50526b7930953986e428b2c75e47ed870bba68dbfa624dd94112f3059da0a80c583baeb570fe8314f5c66501b34116c81148dd22396fcd6479da49f7e952c8084f97d6803ff85c3787222064ca368f596a1ebb6dab20a03916b3ab071c927d87fc10ecc4e7ab4a5761e3eadaea4de1a0dee30aa39a9e4dbee047201d7d8a4df1284cf668ae3ed7dc4cb2cc4b5cae9307353fd2ae4c105c5d9f3bb021535fc3ae9bf3ff54ddda8b2e1037cd9d69822df436dc1c750a9f557d1a3a63fbe73c64261dae0c70bba6edb57519f5b957f138d1aa5fefe01b73c1851aea42938147bac2762527a492cb85da43014c876e223b05597354d7c9b328df67f354d168a84ce86dff57d8a870db034196dbeff83ebef80bbe52425a8810f2c9fea29ee688a201cce4a5f447be789a3881a9da3b6c491288e8f1091719032608b332e0410f4576597e17e0b5dde305f069be2e80d565bb979a3915488f88e3ebb90e81c264bcaddd72b8843af4a4ae31f723d50fa0995b027c334c351128913bb93e67b1b08f101f6b8dc8202b44fbc3d3dfb530f66e5a8f35e69725c86998c05ac87c561a4706e90fa095adab4a566da4fab82bff6b20076e5bdf62dbd6614245b6a6f8cb6bf60106f8d12b9c3e26f8127dc547e2181531ce980a3273f452892110cfe1ea834a30f99d66e026a9d22dc76fc3cec8fda2d7fea701deb84dd45c97dcde57a017693e90983a156f11c4d168d89c06d8a32dbfa590adadd16850854f24bba315b0bbf372f03711a20163afa0c137383b9120b26c59f5e9e7cd2ccaf0ef4e0d70d5a81748ad441ee5fe178e14317cab184fe178fb0cc0d82105d2f423467fdcda0f9871b9d84882609248356f3053a99866dad9f9b0f8c4a897a8cb8f30365a7ae5f3ca6e772d863d445e6d57c6a478e35d719d0e4e84f3a30b1816ddb55bcd79df21ea0e95da72a19cc1fe74fc576120bc108be3ed4cae3bea889fb4ddd67efe858a994237378eb623dab070d954ac780c1e6d2095383c98ba622cbdb18fb53260979fb2672c21a4600f4bf06583a112d303096d4e30e7e1060d869f386eba3cf7aec3052ca17593dcc9969fa9cd88179c262770211cf53f53f175037a5cd445d239cee48f7ed0aa1d715a22ac18a8aeecf191d415e4afd92b76c091803f4c757a9e89f696ab7b11ad6d5f24774e4a004dcb0e3f33705dd8150431f051016af37647b9e44b10bef114276d4b1055b634461c655a82a847639a038ec9f58876e84e9a2955b696e072d8054c3f81173473604d5fcc0a75b4a340dba0c375beb87b8b01a0f2de232bbb8371c3a9d27a0ce521c4c43dd3bdeebf92f42f87d88978d5b4e3e563cba0e5f59dd29c31096885b113ea5c57e66a3be015b703bc26d3fd1d51a7c14f85f65747ac909d7e30c8e800be27eebf4a62e42e538ae30b6883907cebb7fc5e150bc9da3a138f394e817df9a9e44420078f30d0d3d6981ca581791a097a5e3982c983d5cec239096c7d8cc55c87242026d769ef1d04eb96e5b5001e3358af88d417cc61f107659791a35d8b5f7a5767ae24d5b2ba7aa12230076db1f1b9b6f213dceea62949d98bc5db38743b23a59ea75dbe4231a285678f5f07facc053c2048022fcb01f15e8c100d64a877ecd56d196a6ac60ae35e0e09a517224ba409ba7b70d8f9fe65bc427b212a4e9b3cb17b0d332267cea4f3bea7c1e550f7ffe567b20e3057aa0ebb560d00d28e2f7aff718a9f2d4d044f0d20709bb9ad567c98cff7c4810e8c542370cf90a491bc1088f69998d59f344b74db6c1bdb61f284e99b517a11452ca0bb37c7bae77fca6514b341066086e600f098a32a92935380a173c9182a2513584c54ff67e580dfe16b508acf1729a3d649ff1eae286bffd688fe658612d6c8e69e6e7f7de4ba85ec54747cdc42b1f23546b7e490e31280f066e52fac117fd3b0792e4de62d5843ee98c7201529455c85b169fdb90cb05e3403cf2f737148bd20a53c73880880a14ffff37d62130e682e50bc7210ea6c1f0c27656cc1785a0d9ce93ff94dbc5b2877519d9bac4a339e98ec594a7cc76f4ddf994fee8070dd4b8e0fe0e51b93105fcf566f83d914dd862b4ce78de7e9e16f142234bd969ff8005dddc641dcd3c7cfbdd6113cd3ba34a9503a0f433899e90e158abde2ed4ed4b3711c991577c5aafeaa982bce80835f8e6d7c7975571fafb1499991646bc499ec32930367d4b1de76ff656442cab987bdecdbcc2b2bc35ce01816594bfa4b6e33080caa41dbdf8ebf2205649f98a2d3bf331fb16b9ecd1824eacbbc9f81297b115b4d36aa7496e05f7d40d4edd1886c1bac10cf3f97840a03277e6369e7a7e90d932050ab8720fce076de5c355fb17959bd75cfaeff325b0737f8f5b1160de0b0184ba04afcc30bca77a6a37e29662302d01858c0bc1d32b883011b7df5a387805296cd91bbc835a3e76152d017ee929d4cbf137eb78db89d71617dd76cb00707aacb8088ac77a1f52ed710331193edb29933a7efd8cc153e6adfc2c6637e88cd86b06036b8177847b4d086b0ff9b5dc91f3cbd1c08217023d7449253c25331594f0f16a3c5f2e122e0145c4ec94f096b45a1fd0b2dd3f1d51e58978471782a336eae49d7bc4e050d1c6a391658f71a1f752c0ec6302bc2dba9e3766359359ce34955a2db86740c90d09cc50e92dbb76e17a39955fa7108bddeaddaf860d1aff14acec8b609ac1d336270a940604209df91cf45be72edee04277d694a6f968ae6d8e065702f3d607f3baf8db4ab7637fa4c78bb0b7fe69937eb1dcb616fca564a5a521e12df71fefbc321187159bd6a47b066a3440ba634de9153a94546b63aa33aed9da2018e1f30628df37f5360ca4f2660a46ffd73e58183e8abffdea25f7bdf798a2b7cddeaa481bcc6e682a67e99143066963d96d4a928a478951dd6ec59b1be8cb23aa688e1867738aecdd9afade39c92c0b2572bdde84eb912ed990ac618834c412231216fdb84f1e01b3f8414fc6dd0f646fd0fa62bb0157b3535e1497c9272df1cc5dcd4e6ab9a8456222655c56ac73fe0d2aa8b599035daddf0986a45b1a59510abe19a11b6dba065c8bcf8a85d20a3681c2414dab7c036cc1358b1dba98d6ae62c5948c36b5b3e307a6f860c0c822ac724a5c917ed5f98ece548a7a741d366868e6c676394c3659f7f6786594196dde332543376f9ba0724b091d30f431f91d919417e5bf7ba1e9a21cb80f6c204c3a58d59d960a5788b5cba5abd7c7518f4c5170115125de97009a6c3fc4d5773e4f57fdd433eb7422c7c4dccee57a1679633ced3b5f08df763d4577983c5ca8b49bc4e08fa76f8bff36daf0fed068db47f0c87e0e45d518dffe37c129cc6e2f5f9e0430185723098e715284a42f302a6b8368a4f2dc16f534d1e5db9d0b86659fc4ba6f16c982774115d02a57684c7e5489b1f491584b0f0546e4194a6041f5e5be3bfff3852a4fc772d83491023a61a37228ef6260edc0d1cb972cba610d5ad1d92d554700771d8236ef55e983765ed8eb21e7de7c8bb51aee9368758454fee4a3f32179c1e54af1d069e0b9728cd0554351907e018146511e4d6f0450b57c8ebd21c71450116296bdfc779945da60b9192c5bb9a67b1f04d94992df4cbb3e30732dc8af2177fef17e0b7d01740b8a64db16bc29c1e589b6bdfc967edeb2ce8a649ba892bc856a929f0b837a838ca7f917a52436ea3d20e72afacc5b9d58a7fd0fefd96787c65ffa7f910d6d0ada63d64d5c4679960e7f06aeb8c70dfef954f8e39efdb629b72979be208d616071289cfaa0756a4bb5eea5c7baf8fe7a31501e7e2d67d708d461c0c93e85f03afd70bd9e16437171e01a34f475e4b5a58d13ce4e2fba72bbba93403f3f8981e0bbd6a8a6223327bf096c44b36e0ccbf7592a98c1fa67f198b628787ec80aaef848b4fea158c715799e6f458327f399e6420f0e7821f2dc4663bbea065c7bdfe830b6102e2e7193381b9dc7f2381ba808c43b8fdf3addab4b5fa81564716f7d46e0349d9b27b559710d723c7ef2f79eb55c3a9d75b99ae6fde6877b278b583f8ae3cae776b914b0cae0772397fd19b6a27676c7ca02cd07f4b4d49bbe1ec87f2ac7e39e5f7712319c31271dbbbaf4b826af8a9f4acab696c62719f7a6a032c4bcf90922a3c630647b7c1c7b78b10afbd863f07486561a0bc8d9b1ff5fc41998a7e3c604e24af1c1df2da1dd5d83eefa2e4012f7fb5959ef9339574367deff73723484b5a969c8c23dc251a3b887f34b9ea09c9a1838e8aaabb254445d7556dda257dfd5579737fe1dd6c67f3851ca68b011e7cb7b6958d588f143828f0bb24fceca31b47b77d1ce05e75ab05b55d6c9f9107f0c738f2cf8a1629f7e9b2694324e082503937ff8ca7c5098f770289af7d038dcedcf0ed77c8b82e2a9003a6f3db69e14131e144f6be7cf0bb5353ea96aebd78befbc6ceae9bdde97823cdbc5ca8ef8a993a9d9383aee9f2d6a18fc64ab92990672ea2dc9b89ed248aacf7f1a513da43fe5953335afe76d78867a066f226ae9c727c6c60671c50a50732698ef7a492d51998eb6da5368a667baf6d12b77eb36686ee0ca239dc6f3598be0bda79e47f0891fe4d8989df8c685480de11c148a2b44c8a6bea3a50b09be557c51f545a09a30e9362cf3080e6a6bee3dbad370ce24f6c5a6f8091007ca195057fa3af8f99703a601086c2a1ffe55fde4c2c4153dbff8d6601ab68743c0d50d021b0b3099535ba6c40f866ca3ff0df7c19d709a3f58b57b40ab5e43556a8c0c1938c875267bb39c0db6b45840e8ee7c22bf6b48798bd744f70e42fca343a8bdfbd7f55f275ca5d62c7288756d4861fba68d16d842c5b893c1d8171bb3c8b593387d3426f292ace5cee7753c9f9a12e6bb9af5a24192e4184f7d3d191d862d3c3dace7853eaa235b6369fd164e5a7bddd06daa3eec7fe4130e82478d36f88a0999cba1f251ffb3a7689ea2baf016073193898716a9f933448d7ba8e0968c669bdb7dd5e6e32fd84a6ce9e8632b393f9263532ec2107b4c0d2abdf3abb2de2d63511805eb58a70bc4ded040d76640af60ce7f03b9a682b8dd84ed8a47225a48e0b94ea47828f1c8974cd64e5027d8b13d43519875d2bbe4461a7f0f5b5b8d63a472765405ea9c994225806395e64dff88506f7f7f3b6368d769e6e550d4e3e81efb13771cf403e855f75312f1383ce4c2744d0b4e3735a0f1e1b99eb014fa60c0d1ca9035fbc4403330c2fefa8411fb7c3d6ede5b5c8f4736106bbe01923d483a84f031e9685a3b6a70646a2a5059ce35fa496b3f21fca6047471a5bdd33908cc9328de9fb032347c249bf7093390b750696124621dfa67fd9c7fe85d6e5a4d277ad8f8d169f8b5e8dbee280f8443518bd94abc5ca704e781e6cb1868ba2d6fbbaa850326fbfa5a20e4df6fb5f8ee2728e86a758763a8af21e1f7a8584d3f0b09a0b19fe8fcd37bc4fdf45084d7fd92b80544f29aba52496e2c9a0aa4adeb89820be321cfd2f0a53585a15d04c7fe4ec9be6eb5df419e20b71506c1f642df75c53a9e3b2414fe6102fa8af7be3f6c95de824c31fd6fe8ef9d49e26095a2674a33cb574e9e493939bdeaf5b309b4c51256ef71e95dbbcee0a11991693b533f916e1c82ce86d65d89b6d596017fae944ec364546e78abbcbe4322b83e2fcbb4c5d4ccb54d8642c7eb9e28c08598a356a5c46f8813e6b63ec2f3e3bb721b726361f85a734e0514f4e9c4732991ed3998b1ba8f618c2071d1b943eb0f8766fdb7f0492421429bd380deca3325c8d5c7b6ed16429539ae54f1eba39748f09aa44efb67d863cda304e8653ff7499cfad44dc27807779ef8e63be4b376ec403f3c84eda4e5af31c30f9807762e0980b4e5d9dc406cad4e888bfc3ec4186de8ccfcf631b0ba5831747a1c200d45ea06ac82c7952fd09aaae5dcdf5475da427cbc8c1f71ebe5132f2fcae15975ed6fa14a11b38766e1c446894f31c0496b0e5e96507d28e6e4549d6d78841e40630ef306491a1da60eaea3fb69bffcbf192610e2e07bc1124690fea61980e8ed654c5e796f67d26db5de35b4a2c67427833e360ac2a7d4fe7a5ce572144443ed62ac460c1b19402e85c79e3d80e1c143279b20a66d8dcf2bfe1cc44a0f5aa9b0d9b36c46c2cae148dd0f2ffe9a8e6e7274d1832e57aa39fb40553da6414094e838d613a20ce9307d49f97d904648d6460985b01af769800cff9a940f70729fe40e98feb64ff0a81c5b2b096b1a9d832e440c49e4e3684bd17a5169fe138d2544d9806fec027dd2a67f1856178e090f9bb2f9b314a202e7e95f2e41fa80dccf7b1810e9cbcaed2acc2445d60e26f7d63ee4b28e4299e60ea4fc659e7d6f0de91748bf1ede1fdb2acde9482bb76bf6716847eb2dd7517e0a94f0bbf20f248d2c79fa0f518b67a44d5c4c73a9bbc3816ba85ae8344b5f377649da75cf1857d6e4338a76446c48e52cc7bc7ce283d4252f8fac5e1427299edc33f84798316f77bad4a87849e91a1a23c0b7a86898046e278eaaa15ff33730a6d3f885dfe2d1dc0acda2a9e49a71cfecb7dcaa9e70eaa8fe15d4567a280e8960ba49d5289535907e9f277f96e8e652c21d89e81696dd821db5b7e1e53e160584477aa9e4c0e12160c9956df36cce6f4e724dd543827366010ed3d843cdf4319c1bf968a70e9b1b6bcd8af96c9eb0620c569716b7bc42e13251a6adf8201faa129844b5e1d699cafa1b66a674e732c7662b0410e5bca2704c5ebed7850d0ebb825cfb0627a183cc9643b709aedeac2c06700358400c389f99666ae97ccd37f265da7addeb07df9ccad6fa777d0da2fc47b6235179136bbbb409596841e921eb278142a19e6203c7f235bf8461ccadb4b47dd290d36ac27126c808b866f9531261f1e0f5c458a6bab6f064b4efc432e1c7379f9af19ac34c5c22e76e6e7651e48f9ce44eff542f018397889d896cc9001a63e8e455fbe4a9ee9a740edad894fe1af2bb21a1dd0318e28ba982c12ed69c08835ce17336ad1638af3cfe0ea892ab8e83d3f25e6bd98d5e4d36292992e2122c265a26cbb3931dd4c1b0d0ac5ee19974d0dd45777908bb416cbce52531820effcd7f28e1fb2d3d4d826e1b2673e834485a25af9f9d174f566abc3b36732ceefdd91a7c3885e1d10d51c321ff704d0883905b7539309ba5e7b7a2bfefd0494e90e9da7541ec37858ec05ea9a9ec5672b113cd5ad6ebfc5b8fe40ed7c3f17d8a73703dc89086b4d75c5eaf06b840bb2f5b4519a4fb17bfdca9605f17253f203efffc92da96fde023007d22cdad05d18aecb4bf08085c5ca5eecd21f2b611e7e8a0ef981fe7aa2014f5ac6862fab44011dfd33be8a1226943aa7ae5fee9221b0400d9ac2ce5241b09a68cde6b13c47d50bf310ecb37f25c32770a299020d8500d8a4b5d7621e4379dbd6ef34a9aceefd4055ea6144f54bbfedefb5b5b0fbd1d81c7a51a802072ec3d84f34585f22c1df84caca07849b1ef054cbef9b40848e9fd238761df5358cf55a79a53a1bc749e49ffab7c5bd9a28bf24ad5833facf43bcc3852c1e85cfe47929fc49c325c20d74588eb9833519f192243cf96625057899b70a7c93f8fdbfb60d8129d9c43c95f8782ed8293641ffd21d21d91a0b4db69d766f6d6497e9a414ceb04b65425d6ad6c8811da00639dce8d8030038f2d08330c75b0879aab81bfb3330b950e54c13780d308fceed2a103a1a8b77a923b66aba737654ba7995acd306aa7b80f632184412e2369c353c2132ae614553e626f0a3436959104ba6e0040dc597dfbc3602a49e401bf2249699375b2c722083489f54fcdc1f616a133ef6112a1754818158ff78f245b9046100b0e89407f74145fe336976af971c054f12d98002c68b3aa2bd699fbcd71bc4dc071e430bbf694595a951e01098aaa499be2f70611f248a694539ef8936b2e8b7a3c5de8662436fed1f7bc24a4e5c17a663d9a23b4692993301b08cb3bc10f518eca51081c717ec8dfbb0c2669f7987fe6aa0bd98231d8e8b58951b42537f12884a857e02d62de4fda6b88b6b754b1b27394c6a819e0f92f6b2b2473fe245678e252ed31477cc7ec6895bc361b718fcab3aa550fc9faeccfe77cdb5b151ab1db2e569b5bc923ee26f0b6113504d295112d47218140e44652a10af10a088f95c7cf2fccd040fc93980939122411ec643e26e7d69ced3178402e320fe156e774b75b5afc2f3d6b6ab828bb4993b1436faa5728cec34d66f520f59e82716ed6d1324944c3c91d04d5ffc5a921f4716c39de24768484d0096f7d8dbce35aeec22db11f899e5e7e3d57e7668f35d6c0db3542255d9262137d39ae6cf9bcde254dfccc54a6062fcf8982f781d9ffab2df4f49ec04a72eb9646d63bf9e1799bc0bec0ec7f0675ed9f8dc9b8be15d9f2175dfa1c8bc99071c70ad7bedb10a4143fa91c89f54777f84c9eae9361cf7f4c2b7ab873ee5785a5241db0af86f3c6d7f091623d6dc576d07550a42023633a09c8dfa21d7e70cce64c13f37663f75c47921c246f3f2d1d16a8283ce7697da4cb7e016971a2a1d0c59d6202bc18b7cee3828de597efdab53b33a9fb41aa7b49f1c964512901773bb396ac80e90ba1a94c408b2860065ae9aec64a41d76cf8842d299d0babf14d5840d647d075c34175e26a786f30091a24f1ce8db30137520dce1cfffb6318a0d0fdcac883eac603bf365efa2c806eb4f194cae8c16780342165222192f6ee2e103ae2a31dc08a84dfc89c64d2e9ada7ca1839dfff62ddfb7982c79684cfc821a098bc6bf09f87317209b16d14d45c6f38fc99f7bf9bb73460977bb323665d480c87c687cec052a5f08a2c6744c8e177a8a269b4a47a925b9123cd2c014313edae988f8aeaeb633ee5ba6be7f53fe36da3aa37ab2077f5fd75a82a55a0fe62af213b85e9e7694f78cc2b0e63a8c1b89db484722fc62c688678a511c474f0eff8eef1382946d26de00e5c626ec1d7079445c1b7c6f7f05073249b11fd1fb30257724a14cd7bbf451146bf366de2e826fdf1d25705587c4460040ab963e3bd504755b6aa5b18786b68efd3c8e59e8dbd172346fe7f4a18bac98164669d73984044f3c777368f965763742ab86a3720208c64801c796f6e3a1c4748b81e41ac58dcf6ecfa0453b18fad7e3473604f57f7da302e1fa81ad538d4a0280c4ad092007bb9a7a12907227a936871886c699db97d00a1966fdef64d9f3672f1b792c1edadc6781b391c91bea1bd7275f30859dbd1707b1f554e49ceb874ca06e92ab466efa7eeb6990667a27507a7ba789e24d593ea2af8eccb3862cce58daa63eaf212bdd86c01ed471cfc79b191c481ad773d20e821d18af85a7049034e5a9c660357a4c2808b9a6139f32c55c13282b8d98904f4f027d438189dc9487c96172e50dc1100ccc224e7374cf96ea6731032c43fbc9b367a4d1d0b31aa3fa8eb589672e69f1d9144114bbd508d56c2049ecdbfd7b43545375a099ad2885353d8c550d22dbb738e6fe3f104b444c89475a2cc24d7887daced8fa05006c02dfded01c00707e2ad04c41199c5decc1eae34b0c0abb5a5beee1b5253c3350e1a077682767a0b9124a4df2e8879366fd37fc04d4dbcf89883892f46a65ce3aec22123cbe6b3af6364df1f9f5f9751bc8179b6dcc5c126dd65feb7d11a85994e90ab6342834c79c5f82413e88198c73e932c66e3cb60b6e0c0cf438622e5dc5a1036c38afe9cf13559044a9e90f5fd72a3188ef6b1043f5f4e6b40ea51f6235dcb33b3099b2d8c2e02103235f0476ad51bce6d8a2934068549633e521a3ee4c62c22b042fb86c13c8da849233205a5e277aea1129678c31f5c379a71fe08b72fad9449cb923126dd465d1e0ae8a925374149b8248b3afb69f168f3ae701c00f6ea08fe07f1b5338ce6af2f3156ba6f300310114479f2f6119367c88c12c158b84be13b9c8c7b5dd7c90edb5b3ea1fa5927a25ad6d5596992dcd4877f58a134e05dcd80dde4fc2c2a680cc0ccf3084d3f4970e3603fa6bc5a180fcf1ca4241c0b8a1e7c607dc025016e297e2b0645de4ec2fc49851b9374f3ef99edd897c284a67b647ca8c96fcef935d541e9faf334043ea50b99fb8819ecce039227b624e52d8c20003b5a43808e4990da8e4398c4fc172b983351fd11a13dcd2aae5193d42d46e1b57c92e3e01d23fc968c729f3782d6c07dd5a17af2bda96735c12cc7d8023629fb0125e974425f7914690a7ed26508343ae58c8a439ebb6232049a194768d4594f5d65aca37a5686c2a86dd04bef35d74e0755937ac0ce3ebded1c00c8adabf030e5e4a5f44193b62fcf2f1bfa9dca2a25afaf2f1ec06c5d17ef3526d26d17af3e2f257ded24b177ba41c0ba64fd4fbd5042fbd5961a105e0e9f77f3db13c1b6c5bd9a9d04801a5c00a4c544218a21016c65bdff774a44b1d05256e0693e14d76605d67bd10048d3816caf31a6d10886c88c783538bd93e92bbc4484f3388b61adac4b92b911c76ebb1dd11b7b4e40be032bccff610068746f41e34a1fbfbfe5faf57c8a4331008e2c1cfd69f57e74379ac80eb6769f4ce4196795b835201ce4ec85ebcaf5eaaec242fe6695cbce1d53fde5b002e006bba8c8a1ee57da061ceed0d21bdd57ab0cab9e46bf3764d9a6c3ab19736d43b33f32eb955f9174ee4a54666e7f19cefeb49aac7a59b7370d9ae730b7bb4e08413222f0a66bfdac252fb61bcfa838f262312febfde8add8f6843f1d64ea3da42d4ef986498604d65737a44f5a099338520cdbdb65ce73b110dd4bcf8592a4adc3e0170b13404f99f0ec8f9fb225c1275a921f09369db165e9109dd5be472b9bc1901bfd882d264d9ed8d88b4c8f3b35f88b69e3e4b8ef5debb895be536a3af492d968dc1caf31879d672f70ad9869ea98335cf9e4a2760f955fd3e8099e4b2eb4269e354548f9de9921e50e49f3f5cbd63468b9db0cfdf17250c8f13535d4c0a1f21c87967cd798fe93b9b2960447401ef90db22c3adfba0f55f5585ad37040e8d6745184dd536d5a26edec365bd6edff1bcc616cdea3bfc8b9d98c0ef9a626054e361194cd05b2287612399f6d3d3be2f71555f14ad2893af6f60ab61adef663c3c2464ade671dd5ebc71935aad290573588fe6e11f48cd2b7db62e4b9932890d1b96e1b83eff70f026d199db75fb1e83197c937b672613c66ea131f485b4318e27c079b4018d4205484993bf50ce70275b244f2caf47cb47eb2a9ca59afbc78809a912eb56a4bb65cae4694f682c6329c690003a1c355f779b5857a60091b1c3685995a366cb43d753a704d3e59c5f5003c78feed877351e27334b3fdefe5907edd9eb25588a42248b9c4a93efa7cc63bad1e5900b95b70436c35eb85cc8251c4030fab9556920141cca24d6acd3122b92b7e868dc174bf071117958a4797fc90866aca685f1456fab397ae647ab9970348082bd74865bab7f248568db98ced7ed84e8360fa91afde3f23509e6b4caf948349ad9fb6a4efe0a0468302cae7a0f999195af1c19058669fc3b88b2780b9075dc180298498caeb7ba0cf8bd42eb36b1959d5ad3ca6fd1e85f76abd27ec5fb637ee38173ad7d86304d5708b6dc8817e099e77f5d43c1a70624cdb96e4e6103bb25e59eb51d894d1dc533a74005bb79cca35b66e10c61d06b5227fcb071457025d605a0862218ca252b871f8343ec231dbee15688aeb914c0f16ebabe6edb0a489b2bd10d4392c6f1863bb6a62181de7cef61997ab02f3bad0a893cc0cd8a99cd7b3f7773085f0929de36b5d124e3729140c375de9a2d0cd9a360cadf17b9e45b7f2adbdff9e75b743b62642ed67aa703b8ef33dcf51a50edc7dbab42d3d2b49badd2457a9f92847aa6a60ae2beae457a5fce1a9e485ecf907be22913893cd1350f20fc6c81c94be426eaf01864e813a03e4674491b61516bc95d8a77c15f03d0adfc4adc27f27a5ac4165ff6518eda1a5c408708f78a9e26b834179804a312148d4f75f21a77d78387139da40c0a6293c2a59d0162437d68504f189ed970c5abb9ffc6d8e1be2b0877c7f24b1dc273b1765bfc5ce6f4b8d99a96d5b1c92ee53a39f685b304313d909c1ba8130d20d51c824cec420b0315229df295f75b453a6c131afaae0c36d7c4fff70623638a4f7ded5eb7db58d95deb6249a29b171d8ce651556dee8037bf4ca74453a4a76aab7cc07ba44e55de57dbef8542c3851ea353fb8e259ee89bbecf9ce8d8bd6227afc0028afac48a7acd9b4e8cbe982eb1475917ad6be4cdca9cf6e7cddd971b2924f2bb730264801685d387485e41993c3fa0af9987e8b52c21688fd9a9595ad8d1b9f41e0457be18492aa09f69e64e2954d1ca3cc1d32b2915cd9cf6862ca79c80beb47347c4cceadf48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab44aefdda94681407008ea48d03ff21e9bbb4ae7a9aa37c855fe3537c44106e8079f18c24d2584474bd4a99367660ce6f7e6d7c294961e174366e7babc569d5f80572a21a4bd7086629363e0c9ee2599c8b8863c96613ae6c32cc67ccafc66e1cce79654567ad08e62e9abc99e44d6a79ca4d8de15b7f8a763a4741676af0e1f3bd4e002c8fa1ebfbb3bd3a65ae68a80c230422f98f6e1e9837252e045eafd585ba389958297d59aea1e8e1f665fcbc5f7ff449996aa712dc0faf582cf3caf3dbae80594f9f07fc06de63d9d672d14d7ac4662b4a54f40d4aab2de766910be2fc7f6f679b5708790b5376498d3baf0463dca2f093b51bb7e9f3e7033ba0384af0174becc3bb477bc5e86959a12a5e8924adf0bffdf5e5b9c1cf24d232881ad5c05c5c0f50318ea83d8683339ca6a583c52198c00f7c1abbda282e7fd3b179297338ecf9c923a3a87a130dfc06164e9b4c1fe11d51b382643de44b30a6831dee119241d1b6f84f2484784fdf65e41f78c38e15fb4b00e45df1edc40e3467cdcda351a4c0a0185ac4649e91024377e1c331587a8586cc0a4dfe29e14004c3536d305f5dee0eeb8c2f216c1b8d27375b239f6458e08980badd6d82e9ee9e007578c0a3b48288d9ad0ec3c934a99a8c5741149af937dc82bdb545df26428b87fc935c05f1a4964a8408539f267e23de9bc498e2a4b0083cdb7c8e27de6252bfaf680a6d5b7ec1a6dac6d7d537334a95f1553324a0739414dbdb50445a767b0f589fd4c33b35905577ef5a53b0f097191f9cee4836a908748779941de2a78fe1bde0c2efd9f48cbf232ce101d9df93d3ed40d036ae7aedc3a5ff619abd1c159ca8d2dbda7de13b4ca62576c7f925c52925eae2d7500dc969fe14c0a335ff95a7df1d276a6f242765c781208d59edb5848d412b11638b27ce5a61b8209075976c2a6aae88f6e6d8704fe9e83b425dec4defeeb3cd311b8c5a818d51f917a8a4525361791d5c4fd5d70704d4b9fa9df1ea119882f400e682753a41931712c043c120a98f0fe786a600b47befefc9d64cc5bbe8a16c191490874e258760c9e4fd215bebf848e0b4d35521f53ec5f9308644b785171fc4cc3ff886e034bd833d59dbcacebdae8f00e43c151bcb24d1d226d1cc19ecf349361530a81ba3168af3df5536fbe52b3b93621f57959df298e5b4d3c14928d2ef7b9c977c7dda54242d17f8661978a62d94d565b00abc199790b9b25fbfd4a3ffc35c95ccafe35d9a138a2c24d17f06ae2cc376e822317f16fcbcd56e23f84ec135dc935e58c61b34cfbf5a36cb00350483b6bac786030e5c5045a6b61c9aba7dfaa4f7fb21897539863ee865ae061a77c0359915de3aacb3b5dc8cfe53c4d17b393c2b6bb23652f36390407922969d510cc97b99d1df4361530aef10707d7a021b2d9576b2d49ca88b3cc83ad1baa6d88ef8c81c08f8baaf515637b21ace9d5cc8fd9fe4ca6c3aa129caea7060791d566f4de8662b90f9e5d849cdadf9bd23cf6737b07ca105142663c30de27adcea11d64d433fe1ace84b0f6917c8b655f2a421602f07e0a7127e61ae9859c5e9f652ec82416fd2566f291f417ecdf99bf3231d02864e2e5a1cf34c13f59de9aa2760d8734bbda79576c62f566b8269990e9384a41c1634271acb4c7a8b768f276685c3a8c7f20872e56b683244b1af562c3e7dcf592a9915f44f886cc2ac5f679c07d5aa1fd69cf3a460f25c722073da336a310aa551062d92c7297002060072af2f3500b9310c239bedf45c5e985c2e0d60c7dd68522376dc7b560fb34d1b5089450c32ffcbff07b35a96bb6fe01259a06868d00af697f8bbb238d03d49570a109181c9576c1ea9d2ee02000cc23e63d6c93c6cf3050bbb15b6f73b09c25da62e5abd4c2bdb1110e1f25db39f04885595cd6a388c4726c8d4cdbad87d80d42fcaeae843e2e17f44c9aed25c8f6f9736c7ba1bbd3b839126de40a930024a65aacb872936e446114e706a868444cb140e53d976816983f3dd1d57eeca01eab8211b7aa8ae99d26e35c06ea4b226e0a6e52172a40e7f0df5f67759ae2ee026749ba10b8e33694c3e01a001526f9d75f6c419cdccece3ea3f78d69014e509c741214581034bbc7e2bbaf76db8421154abb2233117a1ffe2786b21424576e295c9baef262e80fa2edb69aff800b3ea436eb827e8adb73abc48d740b86c69d557b16e874038598b25f616afeb4f4a900be7dd0d38b5b6fb4259c51a3aaf4748d7a445f518485ed72b25c7df8ed0906b74bd29bd6a5724ac3a503c990f3697a5db484821f68718470810862728a80ce34599a41fc5bd8bb46dd845a4812ae1532c457ef4211d0e41835e5a6f030247614822571c930c727ba397e723d6b3aeba9244f054e331c82e65b74c9f6504c74b4301499a1a6f6269a3352aff57f88442d4eda42a82ebcf7776c5629f97d6160bffdd8282a40ce2e6375b161e4c22ee53bce7a45f4774aa827e2da657e1a1bc07445f0bbd770b7a5a25b1b469fd58715510dbf8d97af4e1b9459a20b08a8d3fa9d92feb32db95b22d36de0bc8b1c397b09970a6826392fd8392b2d790dcc1295888f42ac81ad213c7328b2324b28be7cc1f4fb8414a7785472f1dd3e11d66017b1756d1697be92490e15f056346d7e9126a1f35fd76cb016fe2841c8996a3507c4fffe7fc45026df10b03b86fb6cf26e8418926a030b5fa62748fbb728fa19dc2f8947468c1477750771e442e4a9d25b76d359211c05df788ade5b7824f8770b5dac0819737dec916ee59b28a49666ee8b7ca81386eec8049542f18a3207e51bdbc291470eeefecac385c096a
51MD = b70acba01bd715f542859a4224d035eb177fe7b34d5447e099acd1716ba6d00f515bd02021b5b3015d736b04687544de
52
53[L = 32]
54
55Len = 16
56Msg = 43cd
57MD = 7c5f9ed821a021ef1850dd4e0b179a656fbe27b104463720f467db32bbfab5a4
58
59Len = 104
60Msg = 5f75a437ce0698a7d8151c3fe0
61MD = 774782a9c3023dcef8b2cb83f7994324e3cca35323419b3914a9b6bc3ace5ce1
62
63Len = 352
64Msg = f88bac738d1e3e10f75e46e3fe026d7e423fdcf3d7e4028b33a291bb4aabca53f780fbf99e0346d610d4a38f
65MD = f114f1a390bfc30f34652751f3a38e8bdc9597625e363689459b80082eb34009
66
67Len = 488
68Msg = 832e5b78a73a1012ee62e00621db7f4d248893007c6e5d6e0e689c6b291baeebc72df9cf10b289fe20e7fab80a2399271d0ac63766049da875eed56264
69MD = 7d00fe393c308eadb8c0a4f771d409e17c9a796e63b45fc8e84c0cb2bdb62532
70
71Len = 13976
72Msg = deab57cdeb41974037a9bef5e292894038264eb4d8993d4d1501e6ef9c68fb0f571f57b0925640925deae9a6317e3bc4d6cdd5a0833e52fb48baca16a9ba9b6c8ca469a0555763b54f04c87d4e41aa549258f30eefe5a52d2ba06657a8773b0842e094857b6d8911d6a0636280025e56356fade362b4bf4c875cc19be0c6644b447be0454dbf390eb966c03e10e9de3487b90d0825d327c12495e3c89ad09c9d591e55c91376fb14c2fde9f7461fb25450df1a65806b65f3caf4d5c81ebc6e664871fcf915b9578bb70ee6776acc62205888dce2baa4024941209e81b4b35f0eda1bdcbd9ab1d6db6140bda4c41776fe675d5c681da5852d50c246dda4ddf9fdd7c5fdfeec85ff6c883c78689c2977584406a1ddef977606c182d6c33561c39c071668a2515e5aa6f4aa1faa392aed95b82ab32b79a15e3b5a07551ab068455131b72493126470f26c30b852e4415e1d8b719b3803ecc336e4facbcc5d1908851f4f39b776bec8b6b9794d47e5965458858560eed5a0305e260240c0849d93a19787b0f8c795eb5ba32be573845256ae6d0b0a3336e42a1beac8bdde6d1b6e0b6207903d4b105f4af2ef89bd099ded870daea2f170e03bd5f6f4490e60bc222d4876e16d4c58aeea6e6c400dbb9e9f4b2b142f0fc9bdeaf4132ded38a4a8366e107cac7210945fa2df4b124be37ef76290e5b9758aa3bfe0091bb0448206323584c2f833e0edfbdc0c33075fc9647a3404ca490bfab94302a0679a1a42fe9fec6af0cd98038b09ffbecd2832b579b2294f6ae5b96328fdc0a0b9b3a32cba04fa8bae3389c3951173bdc17caaefe526aa386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f24237d8e795ebf52368218bff3e9d5b040ecd2caef4ab1e7127e53bfa2b3b4fb74829f9993ac703192aedef79dd9ad24c2c976638b4575afbce22ecacc273ba43379ed55ceeb51838b0adb80585bd1b5f2707ee16b67a7232adf7163415b24b9ff9dc94b7197fdc89e2a90d2b9eccde45e965edd064dc0d1eadabe11b8ec3aad2742b5d3323ebf913a92817749090c20758f98aef2544d4c8b48874e8936d7ee492d5585675c214deeb74fd67c4d170ac5e0aeefa607c6e37abd4f8238e776fde3921afab75cbd8f392d3e88da057903ce2e140797f4a85737bd89455e6aa27c7535687b78cd0ea59848e006c8de9c9c0cbc7a9f5e977be850adc710503ce4ba7c7bd0b042297f518abec6c8ef451c33e030251f506cbc3744228b6bb4dab86877d9e6019a0ea9f39ed37557b3b5527c171da5f013e0d3c480a038cff2c087d6e5d41b17e6c8f90c334b5e2b9ccbe9d4efd99fba1f907d00a49b71b5a08aedb644fed24bcf04e71be67b03cd20d53ccef8f854f5e9f7f28c1e98a8a53496646713bebe15a93f1ea336e6e8a4e68de5dab0fe880bf983eec75d1c5027357f6669e098411e0bc3ea2293138f5b34425f78b6508b94d4c0cc32ee9afaa409a26e5f2a1fddcd6d5ff42a89755a58b08f243957a2e208e24b055f51992ab447bc06876eba169c545fa71b88a0fc15d1e0be9d334a1dd0c86f44bd149b42c07608a9a30d0b7e13574f8d862f2ac72b2ed38904d7cab194fdb9e4dcb615f5610b24e202a36866baccac01fadb575df11dd43e00a3b92fcdd8c7702ea49d951e7dad2a56c075730b4af1ceda2bcb2310256f28312579fad40ff471336ea6a44143edfcffc297258d48bd2ea47efab8f0dc00f1e6dba1a55009ed627b7
73MD = 6e5905b22cb95e48b73c5a885f5463f554d81257bd26301c4393d57fff1c8323
74
75Len = 48824
76Msg = 5223e2fece634a95e1e7c83ad4a11a0478f4a41572bd66c2d7902cf4f94404cd80b1f58fbcb8eeba3984fd759410c12f8ee922865f363f684df5a8787c87ceb3086fb8535157f7f39653dbf5c66ae7219253838ec77cf1c6db518225c5ba0a8212e5911236474b8820ddcb8111b87320adb82ff553986324aa2a21c37ce4a083c89ce9931290d4c1fea933e31d014d7507a28e83aa917ccae10bed1a490e77fe501b299f8e3b78e659407ce1934d5d68c7980800746f26ffa9794ef1d23f793bd2eab7fe524e213e58280f441ba48b40162305335b3a480c2afeac11c27f8d817792fd7805d4b61224eb52d35c0fbf471bcaede505fbc9398b216f43bfd69b1a669a61d44fd21faae410af58ff95e1c3ff1528de1aba93cef56bff4d714d8c4cc88a4ddcda52444ec1208d99ab3fd9fde98c1ee6437d8d138f62c5f782eb4660c5eb28564b5b0d46e3a2546009148f3d02b837c5284e9f508290270b97b9b29e84445a0b4df662d9711e6b73c11cebcb7120dc427034b1ccf57d8e4f5bbdb84d2e1d4bc3862a2b51931d3c9a7a5fd6ee5f4c7327c338abd011af638d730141b6eafe63469eff50f473262e9fdce636eff4c5663acb6075a4fdb00c8b8a8d3322e1700a5b3e7db90b36c1a94991b8f51657121b442db6f890e208f312466778d73bfaa8cc0ead4edd0776155f3eddf9abb1bbfc0c94421adce83d7ee94f99f61e1f25a55fb596f8b40ccedbaa8e5e2cf629496f5ca60bc4cf36d917da4e2b973eb57869dddc409dd66d5061f22642743fe843defa0b19dfb2f56425abeb234181267b5c0d2ab4268c538510feb191bbcd1631b0af6c7451cd4c641025cd8bde2d9ab6e6b948f97c1ee6f35098d553e8e9da9b4d437125046864633f109d6a558b38b270a7dd1785d44d248a863a91e3db5c0a1d7ec133decb65e81c3402c98ee329f660a092172bf6b1a02491895394ebc506882805a6c93e767c0e58a5af717d950a206c0f0055cb39ed88816a9fe3613d15f608e486ac08bfa67d462d24e6a0a37716d3fbdaeb9c0e951c1e847fb884ebc1cfe707dc6e7269eed1c44331d5957bc4ac9dfeaed4b157204a3080fafb9df8917b8d15aff9c49cdc739b8fdc26a546794991c183fa523d14797e051894f48b0d62c2b70834467ff9c993b82fc1152c1f5479ec6144c7e8fb10d1bce26bd1cdbeec4e95ee073f3bcc3c7367328e30543d371b27509a577f5c79f14d5f687ce62b82f856695af9f7dd350543ec763de75b593f1859e44c2ac01ba65f98743cfddd8a89a38115badcb51a0ff5655f830c0122af6a830aec13ae5eb89a93755b3a5a6eca233f21cb12db545a24a5334becb8fa32c3d7f5805faeaaeea85a551fc62c94807faa6474c0d74cae79b5d8ddae07498fcc5b8b4f394867112ef5fad1c9da66765ecbc7fc0f3269d29c9c38817c77778f2c19b5a3c705fde9d76a4eb86aed4a7369a832ad267312903462397f7b8fecfa8b195cc2316cd53e48c3371ed2ecaa3e484b8ecd2e22b1aee910c51ed5d71198936266f5a00655d82c089f49295feda0a2bcc1a54ec8adf565acc3a8b2d74c30eafbbd843c59e67f293f6d8296cf7b611f01b57dafec6e2d4d411a633918068c38ef47b72ceff1fae772891141c3bc496824509d78165c1e4cd4b4989321a8722643eed69950dc120fa8da3e53c3181f252d7c4cd2cedf8f086f788ee77a98ab5b019828aa02108f49ea4a51f457f7adfd2220d3e59d5f4a29194e8f5eac40ff80312ff6888ff6393c3fc0914b08c1b9990d247ad80a441558db1ee1203e07353dd99a885a7ff5d791af2548815dde0ca1f56f89d39ef6b93dbcd0cd54b854173903c12649587433f0425fbcbddfb66ebce3eb4800dfddfe7fc44d9b23a3916b1db68c187da4dd13ff0157352814b1a792de7fff855761abc6fb7b93b48525fa90fbe3a51dea974069f3f5fdea86387eccee13f58a8eeb8abc6a43fd30e9788c3bd9ae1751b30a82d420225b2abdb1bc121b9073380be16107188d20be54f2e9c658d5b443869ea0e991c496104086290b6edcc1b656adf94f0d42458750fbd8d88040c518ebbb644f4dc4f7c6971d8d60eee0272df7b51a3d5248b4b264fb22195ad891fb6ac994ae5c0bc6714ae0b0b9a484edc576638b78ee89b568195a8f33ed8362128c30f9b0c7804b3ce1355abc96b15aa55c1e16a9e9ec90d1f580e7cb412a7e85d8585bfb950acd4de5865214ce4db7f6314d81784c588c1482d5f28c5fb62e7dd7aa8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda788eb2015680ac5610fb1380b4e7d7a9cda6178dca98690449f5551b66ad2826cab2b662f56903fc95b4611bc86f7a834a34ddc3be7bf142c8baa096abaa3cd51ad0c0b6d15e590eab9e50a4c60c91061f1ed6373d91974c1ad9d263110a0d43fd8b596396cafc0ae70b7ac24a59bba090a6994ec483db7ed4c572f723670a11c724e8ffa2497d8fccae37eaa1d14ac1537eaf80efbd2e597b2ffac97f2bc3cd2c4017f170544dfbb0d9109478fddf06ec0981542bc8107a725be25070d2cab4716f4edfad75fddd582ebd363c49e8efaed9a76ee51f22304eebc232a4f67f865b04f610a628fdb317116666785fe8ca30619a07c83cc449855202d687f162b12d93b63af6e7ddfb7223d4ab998a5f450523c1d521ab76f4aa113cc2967e04a38dae07c51c2d0f44fdc8605c3c53ccee91a2c73dade5dae021cbc87d5cd6e5fbefb65335827311fe1e91921ecd66b2055a6102d7a976308a80c44e6d47a67718c84f2112d65486a558f1f269b91d9f47e3e11d09c0c748625bad2718e3674898abdb19d3644bcdc9317c09a3ac02f514b2a57e6a706362e5f6e8fb16cc83daea0eec85fdc8c367d84c9230730291440a4b109f7034d510a3f70a22dd4fa69e8b65e5fdf87045d560eec71f4e59531c7711d4f8917a96e22ad07346d2f92a13fb4569fa6a075da6e1acad1eac1cb2ef19ab452264de2357c927c6dfae6598cbc821eaf3b8da754ce91a96c702c95b2c308bf3a550cbf4d22d417745b5f17d36608feb826b862747c59d26a0e8eb96547a1852f9fbd095f1c5d20721804941d462f3ee2f0876ee2825c8df24c4f00f0844e50588ac688127013df8eba3c971362dd255420649245e880212cb3d732fb82f866dda090040f28e09cf1c86eea5dc4fbfc373eb69745b4afd841ca8e172d4a8510e7698345fd4cab9ec2ca0453a274720bb2d2e5468bf0d0f85919dd762fe3df969e6c071285e25c2e2a49659b8a78289aee655965bfa3cbca9b292a19a855ec40293185354ff4da9451ccf98abfda07f1137e79bc89d688963081dec641a99656b040637402890f185edb28e7e6a2f65848a6af158f90eea440aa6246a2e6c31f5d220b9846aae2027afe5a7caad6dc16b56463367cd9e73bf22a1d6172145de4565ee369c55e3b99ccbef70fb080a3748340fbe8f6b95ba46e8b76de5a3c4bedc37c55ae24ad02267da26769a3a732badac2e0f3a5393028dd54d78701647582cd04c8310e9f1ff1b433125229547130e1737a1f33604f0d670ea7221097c3eb9c7fa4b8293d7b429af76191ea8e481dc1da31344537a09b33404d782eda1d6f5775500c1d8efc615778baf0905d9fcba1806ef986c40b1c6a72335104376b58266c36f5939a8b95123e8635c0c95e80aaeb97379b1179d6332dc07539b595ec32eebd3a336a1128f3cf2e2924db6d8504a516b62f26d012b7f75cab765c8374a3824da5a405746023b51894649ab422d636513ee809fa181d5b6fbc63351e37a1b14efc8f739e86ca78ae3e280f1c9e4824b2976ec4dd308ede6171a7474c7f530128089bbd75e10f9e57ee17408b4384f99f886a5f63a2320a9b90eb9bf692e1fc449171eae3bb1bb17a6ed937ea57af3c82db84e073b5306683e1d63705b9742a085fb802cf5a1639818417fc2223f476c2566351f4b3b17a822e11255f3c3412dd39190e200727bcd3f9799519ef792ec7c2b0b9d0e2dccf013d436dee63483c2ce83c15c00a76c4d894a60cb90366ecf9e61221ee8bdaec66d715159876d8305b35c81f96ab2cd8f81f4769e9a6e439c08c329036f5d2591ac42f2747bc0e77d4e566358a3271819b6003b290211b9b847ab70e906aed9f86cc38aae27e1098fdc3bd5d84e66c45292183f198bc329cad794aa4e430534511b7d9a75104061b409676a16c1146af0a286e2de8bf51c4a35193581a902bd3224cb9257c961989042538092af92644a63d6d6f6872a29aceca39341ad29dd22354812c4b7c7068b039ac9ca7e6358e662a28be001d4aa697ace540cc3ed3c97b98d8c5a6fd3543ae9a7962c9229b14b0b646229807747064be3e83191cf24092dd67f675638d9f6510486379f47f5eeda870a3187946819ec9ed05e7b325bfd0eed5c9a0f4a2063d63c1a8a0a309f586c94d4a68bbe860ae9599ce204c92cf9d92cb460ff99cff9e5a8b3824786360e1e1861e71158395faeaebe7aa2f61f76190f174aab9a313f0bf4f1befbbb22768b8c22719cf3fa9ec908b576fa4bbc084b1ee5b5a7eddc89b58b45ae7b421d38215aa6e49304323eb4e202655f3c8b16ebd6b03058e75a907ee63fcf6aad5eb96c1e5faea81b88b5eee525c4663af52877c0f759432913b9d48030903e7f9f70e851cd4e20bc56aaf36cb02293d992b38b583b8f0b25a08c3303d8af5b1b37f5127f7021b13934645ef3020e5caadc5e7326ed4ff56f797e26cb986b6512b0cc76f1d8e7be44aaa88e12cbc644f14a7feb979d2ab66907063c51e052d0f8b25d827377fecc5111be0d365e08d17f559e3134cb9db294f1cac03150f4232f853ec15ecde55fd1023b58e83934869796400088e9177e85a2227ee45addd049c1d6b03e5b29dd570496fdb2fde7d8cc74fbb5fe76266ebd90a3b4d57e6e6cb9f0bbdb7ca03ae955915768011c714c909a27ee20135927af55d4feaf2c345d029a54af942da6f85f2103345d059f66864e6b0578111e2ddd5a1cd8bbf4ae35b60747b93f53ec8ec64c10cf4149909b102a2b88712ff3e5ba3611cf96585a6b36fffb64b8c37a114d6b16a53879136eb0b5e003a5a068e3e8422a4fc8d7c77227cce64ebafcde2437166b62ccf486660a7a2ef37012ebacca26ecd5bdf363feeb06aee39050974c25d6a564594c67f56fcf7ed48b07fab4e25ccffe002bbe460325abafe37f23dd9c145b4667f146a1635e462330f02470b35c5a2519f1350c02b263201ec9026cfc57d3659373910e878f2b6c1c5be774df8e01e775d476956c257bd0ccdec17ee939c46e5653d5813eda752ba7bbb245a99a5db1ae55d19692074c2e5820df97c502a4bd1b12929e1be8e9ce6d802347c3e9c4202de6046436c05ab55b2fcb2c227adade6c2046d98102cfd0d859a91f8104eb9f6f155da2acf93df2405bf2c083eafd3ec41d60b810e0bdef6298b21193642a9c0c646bc6771a5c61a25604d96bdb727abd5a7ebe4ddb2a56a6ddece26d8007b26043ad44279c3c8ffb7e6ffb3cd4e10ea2780f509a8a9bc31f99a7e66201195f1543a0a020f754d9a665a29a896faf673df6811379579891374c71b2234fc61e95d4d46f15d44bdb4d7c3b3be3f46410ca46827b8cca976d8866e8ca33c4945d5c87b705588b78015b529843af0b75a7e1e871fd276c1e947d896b92e6181ab7e3ccc7077bb57fe85a6958667d3d7a790f6cde1cebb494c2912478a0eca2bfaad62492e9f1caaa0cc520da08c0d2d910cd44255f4c2ca0646dc89e789a1cf9a28e2f99315d33accb1639cbaf0c94181b85fef648bb4cc7f66dc65b8e90bf5f3b763e58520098febfe7e47bddc2d9cdd5e40dbf4ddb8d51f51bde2e57432266d248d13ed09e62f66794d188f9861c50ec41f0eee30f76f4ece250956733ee97036098db41991a4a3eb7816196c8e447db3a2913bcd992174a7bde1f42d57c764b47f5bc09533760c1ba74943a0dca291f2746bc1fcc573f9a22c72a5eca347b1679683fbc8f32b08d381baf67b7266b14b3ba46a04a3ee45881ac452f64df1bf17f70f4cf9fa4dfed9ae70184679184784a0451d2f5c19c02031e0e4957b4df68b4a069a6f6f6458f6d773924a1841ba664a55c2c3187dd33416cd410e56e4bf8d3671cf737bf67df2a4cc4dcc786872b9e2dc4009fea0e48a749353ac053d80e36357d24d468dd595bc823017c015d7450fe38149370c5decf13b00b6b0e0a2567ac08b45f7b0c8a7c89d227219d051d17a706ccbea49a42035cb327381568eae23b5e2a3b7e8beef6f260d24ab224827ca8ee9d640dd23eee94ed02c9e26abb3053cbfaeadbb1f365a24d8769d92240da842e0b361524020b5c9c22a2fd8602dc9600aaf02b35344309f6bb018a94d4cbc9639ab7430657c4046f0b25df517e31626abeedd58c2e19aa0ae1a43ed2bacad91dc04a2fdf9cc33cc420f4f04379e95988ab36731d5d5402d89fb47e826f4243bb206124364d63564a0872f8d2826eebd9046c7c6f2e7c951e49d4b22a7eec89da1fbed890d63ef15f26422185143c89da3ee269f83e1de11a7467822146042be92295a585e3a09e720ec522e1cbdcb41acf5ac45ee892677ba3ff670d71339a76ed98237be252ae21268e756f05ba0b094a1803f9da84a8a05d0ec9456cf565e1b548cae95eafa0fb01f091935e6eff2413bcb15f605f15270408216fb5b41ed83dfa1454c522375e35bdefe54275f109d0ab450636ac4d8e4d9e27f2d81a15b8cc5e98549254a1c9162918db3e399118f5864774a9d6a2347e1315753071eb1204c8bf5f52b1a0da37e484ebbe545fdfe6b031215678c3b83a19a24d7b661f626beb01eb82b384f02f42bcad4f40addd48db8a92b90d2297e6143702056123286617f86fbef4fea940f648867d790b8f803abc5f4e0e3f4226954c296afd96e287e21b7243d05e743161810da578096521805edd81f68a45500f6a3a1885cb1f45cbd399dde024df65072eb973c827fca13eeaa3f140842016f509aa9ab4603d2457c92cc9aef24950697a0044e3d7c483b8d8391886cd50dff8c2f16de3d6caa7f864c1b3874750781b2b78b545a94b4da0b0036433c6561f5cfea50eae9f5645302eef18238473606e9b9931880d0f6368fa9970d1ffbe59c4454bf97f4a5e8091801b53ee4a209e0642d83605836f69742071aaebd9d813b10f4ccac03851ee9f20cd1351f8e68554c9bc5f58ad19d474ca128edbf561d195e52ddf3c19bee3bb597ac2f92143bafc98bc09fbda6d18dd4ff2a93cd2ba17f54f75c32d3f141468c2baef4e53b6a340286dc2599bf7bb002aa86688e26f5b51a6aaf32e48ffd539d4f3f4bbf0cde2d20138151c82384f9ff29a634ab4e0103d93340bb9a7b0caa108bc7fdc88d7de14abb17e9efdad2b0f304f0bfcbabaeb1b9db75959dbf54930e67aed3a9c8309aa90506b6b9ed4f1d06c4ced19746e206e1e9b8879663bf56bf6c5c920ac5e09e6579b780cb63e1875ef0a731b726864b7ae5705a2d6d343a4a213a05928b7337a59f900fd04472382610e2a8d25383c9ab5804d609e79a88d70eaef3ea22d3aa9100fa2a6e98e97684ade9fe90d6bfc59dc9dec3d3d8db8990bc2123ba92e64253235e9b4d682e8aa04e23fb9bb6248a77c065e93249de829bb2fc5ea9e396461090222816bb29bca37bf86698fb995f62c50110cf418bbe2078a56c5f1ec9fdf3d0b09a719ac253b5bcd00932ae058b86611aff51c8ca8448978615854b69b0216a6eb8050ce199fd9a13aa0fd652570a1b187f61e6831b3a960521c3705da8c5e6c64c7b196ed4a49c2912d77b670b177c6458a7a49ecc1ffd8c57c0978d2a05cd1f1c7ac9514dd14b7b0933a52cefd40b6452ca0903df1f55828025c7e18109a6e0f2ab25724cad2d6f57cb5d894a6a508134731e9b9c61254f64990941f4faf97394b634b91860cc6ec346aa666600d323c849ea4c4a0ef55acbc56495ca004f3fca42ff0ffb11b0e1164c95ab89bf1db3d4f575ff334d4e0d7d50e0c54c422eac5ef78c5a3be95f2e18872540fccfb597211ec79d9d47b6cf41e385b9c2e92122167fe584210f63bf919c620d
77MD = d7c901f0d92a868dced7e2659e90121108611dd7781325fc57e5c336c2279510
78
79[L = 28]
80
81Len = 16
82Msg = 3dd2
83MD = b7399529fe614af98f9ecd73e45790406883cb22e3bdcdf28fadd033
84
85Len = 104
86Msg = 3d232201038fe7d846ac1bd4c6
87MD = d0aee5482c509540a4ea4b902bf42fc8df3af6de42fb14e903d1b2e4
88
89Len = 352
90Msg = 44c98cfc71f82215dadf494d68d1d6b92bb4eb81fa0fbf945a659d9aa2c2302b5c93fd3eedba31e479e29d36
91MD = 56c22e6066cd4c4d6415c5a225257e7f888b317ba4e98eadb72b4be0
92
93Len = 504
94Msg = 02a5c7b1b749d6d49bed302d9439f23ab83020bd4d573906f4190e74216ad33aceab775f71cd31092bba5cfa42f0845bd16fc1b8bed6434dedc92f80b395aa
95MD = 33a84e66cf1ce6970c35807db25e05ca05809e53d4e34cda9bfc0045
96
97Len = 13976
98Msg = bd70deb2cafa75918308d703a6783fe9dc5e3d21de9bfeb6dbb1cd531ed5dafeec463a02abde302d4ae6ab3cdc2f0f94865e38339c88bde507ff71bbea6b30b9851cd8cf599e950b8c8e620c90adccba0033f934ca66ea0a936afdad575bb6235099beff1a632c9114a8045a0919fdc21083880eb05c0d8c489c7810aecef4a41766f67c37557e28a9db9a0d909c2b167ff7eba79693afd3ee3aeace38eb73a5a02a882cf89b123812cf2a0f6d5edd1d14362ce9c43257474def5cce3adbba8cb48e7af9a45e702a182dbf47e8869b3f99e953ba81628e502c60d4f8ffc551c31b3ad6ca85c52164839d5e9d493deee4d4b76604174bdb5655385d34ced2c1b09dd5a486e1f9ac501bc611f9d7aa5c748f496faecc14c6c18e1dfc6aee2991bd0207ea1701219955a751df43dbf66f57904675a0e9e6d7f9a0b8bb82a8f44951117ab2642d6671daf1e5d1639d48aff6a05781c2b5e8976653b0a164445872d393d30355acf0bb49bf2bed4265c9a3b786249afc7a438d706eadb6f90a7f93ad51bde6d2c8e6ff09dacb3dc67ba0d3030c54c8367e1e4280bb5903274191344610de61c3c770c6820a6cc9d826f7c743f88f13580ba23cfc00598fd733b5dd069bde7f10f2b8961c16b69761b0f308dd137f844a67f6054e065863f226141755b96645a291e3fa3fc853b2475fbe1d3b25ca22f4da4425dc95fc855e63d6699b311ebd5fec1c7753e6e81f747c808ec3f618f63eaeb1221075edff0532225c40ccadee304a8997c03920e7ce4e60e4df4d120611296786516dd4d9cdda2077ac52bce0fdf552e1ee89a0133f1f87a6f6f35f5c53958ed806465919a0a5fa42488bf29caf33a0dd469e13abae351d5c6fb1a800ee384da199c823c965d9d5457a3ef8292c4d9b142e3f1fb502da498eb44d95f8c85bcd6871bbdbf004bfdc09ab35758f5e8b6a0d0f366c3b255333c52c8fcd4ecb4536b5f6e72897649f3415443612d72c3436505249a344feeb04883f41f90ade40af119014b3c56fc108f1ab0a77087d9226665d416cd975e9e4605529c032e8926002a70924820c6c7e264a794b2a3beb63d69ae56e017294fad4d611cbd0d3847212a38f22d623eabe3b884a36464d8814286fff52c4dd366f6c2abfc2eb865e0dc9ec6e55ca9d81f1b8cc47e2629bb162e54655bf2a9e156ab0bafb4b8ce96858aeea6e6665607a3f268036f4890dad759486b15e3c9e791429ec8f11bae4ea7c490656fdb0551dcf0b0be017c08bc674bd97d9d701c3ac955e2941ba7d5f2ba122a6f0c1b164b1caf2d50df111fd4287e9e195d181f6f514d7dadbefdd4274edc234025b727680576046842a834b6ad89eccaff5c5209bb91d652357e3750d8bb0165572fb71d09fdfc60f6b1e5d868c67c0edead427e7aeb734e29b96e03ea174b6b1af523feacaf6bd745ceb1bdecec9251958b7f521182daddf62ff6c4f58977adeba81c616ff2e937ca4f16eb9c44e63f9e974709122083ae45524ff87d7a0cca33a90f09b660db0efeb393c61967de2564315827ef1cf42b71c0f822f471713c9d885a3c3281d7c95dbc96f1c6dde0af70ea11232b00a2d215ec8de8fcf84b6193b6ac9d46de660361aabed3371fa44a6f32107f3854262eac355f9ef98701f580b4649175cefc29950e7a0eec958f629999c4b0a98fd4bdaf5c0bd97c963b551f2220bd41ec00b8726836e949e818a49aa1ac5bf12c64fb9991111ce8be3e0cb9605f753dae1a4c84389416f17fb66cecba45d591b22d64e5a4edcde067a088d9ff7f5dbb9dbf324510000c55d50f480a640fb22da9b4862dd81080d61af9560b601edb5e3346263f5f193df97079a27e3f9876078b80ebdcdb17ca4c50aef0c8329c72a7f77584cd963e105eea9c28a2ad4e95c1d018e27d0e720ea59147f59ad796b80b6293da8a55ed47e8abdd37221db0a5eefff31688e2adc294654ab0fddf9c1ffafd4783f01eb539492cb35a77315d0ad19395f47b18298a7b353dcf5bab0b2f193ff73d99310478d2e5c4ff1c68a2493c138818edef73caec9977bd4eda6249c8933953e06d796b288f78b18c343ef561082fd03bf92b084afaaee741de3004abaf746350048294bc52450e31147173f2da13d6ffc5adc718e149f9df3702f414dd3ee88296ae8a0106b071b589e8696401da7993d58a9bf8e5bf417165498c96b4ff5fd2b45bbf88f551688425122a3737ca54b2992fdb4d60957a93097222c3cf4c45dabe18b9d6a69e6f27567d5adec489e4b6812c29a8fa52f1de642b7b0e749c16f54473ed5ca2fdf2199e885fed308fa62a3e0deb7e0b8e439e25b3e9f95d755fdcb7ebee9d73069dd57dd1cdc5145205882023b54f2c9dec6cced9e3f6d24e8cdbb8ef121b8f3eded574d81908e867af5ac82bfb8ed60848b4bfdc1d998bae3a9ca80c1c49601d11a40409c62b1536f01ca67
99MD = 60700d4ef068822d0fe6df450b4aa8e206b2790d6dcf973229a59889
100
101Len = 48824
102Msg = 5fd54472a44e4476d254c0940071ad42dc723354f76ba61f63fbb9df80d1ee56136f51b6982e66c1da83602fc08093506a9e2cf27cb92085ba5c627dd63f59f8850e91a1d86cb1d4ca38ad03160f3c584b128d9b21e935570e086d3815307ab8df396cfa0c100bf6cbfc0fd7a8258fa1a656bc178e02cfdc868540d8e5ad39dd46794a8bdc205e710555ee7421ca7475a4f3232e6a0cd55d4b5d4525f0bd7eb1e455931aeea6918b9fceb2a32706d31a6d7028a85e102f228417e2e7db68317ae155af70eda98c8dc1ecc32a62e294d92855354c1114c5735a3c81e551b63a81650107557f3237bf953989d17c65a0fafd2bb1e32c237f98f55389e8f8b0810e97e201914c487a68403c6d621a98ddc515780435564245d87ce462b8785def699f7f06ebfdf33dd1ed7dd5a3e781348298c7950a387bff7d1878731d7ac66ad9a6607f2c3a3b6843c2852a5e882a8d78ae9dce2a79d595cdf09626dfa6f1dba7d40ed21caa29e304e7dbd559a89bd1f07d84165dc259ef112dc6e2c5a3e82b1c50106983f6c4965c85073c5deddbe6323003d56abb0df590f69010981ab3407e43eeaa29c6156995c492c931fff1b686eda3741a0bfb9094747d1620b2580415d431ffd6c02245f6cb03e39f87e82834dcea59355b2ba663ce145d2514e15e2b2c60cf518ff510c6c3e2f16d2dc523832762ed8352a320462ddd4d6fe755350672038163d996b44ed3b85d64989291bdf39398cb996de785b9614ec5d4bd73efcfa37fd4470b17d6240b8e4c715759286b04c3d7d791e2689927c9f18320ff2e6bc7306c805e23a5de66eced5f1a630cb43dd46db515f837f6b824b99b86c10b6df7fcf22d97be05284edf0e0be597b3f9c63556db031339f79ac9e6c5f8a1cefdbb4b30f5bcd23c2a4dcf791cbfdd6460284c5af0621ab7c5571e40a87c87be459c85ec81d746930dea24f43bb11d6611ea83409d3bf4f987778d8eed1d5b246a2112ef78ef0252f9ae464810c13f02359441d289958b4766807d9a3be0054897d35b01830deec1151f9e3d42f92b80f4aeedd65c78c6e98afc562a3bcf6d72f238c6e94a38f2288ac7929a7a61c92875c1f115c0ed8d261a727f0794f17ceaa3dabc717478f6ce7f2e8b295f000241e154b4575bfac8483f6b62f9ef4e18f7d341a65faad5e2fc1ddaf2b09adebc155ff09e63d5aa5f95206e66c7f4ef2ae3aaf3ea7c93589efa8c552df8d203e0ea181c1703d7023b56e603f33b4adb9bf44f7af290d8081210f327a6c9b0785709346087fd090c42d2b8b2711b9a1a5173eb5e246320ee27867ad6c3eadc4407bada44561a12cf5d53bf0448308bb536a8a525eabc1410c3a34becee25fd6fda453251ec229b53751f2280e142c6b331daa659ab655b78cfb08bf18e40bb02b7f1650eb2dd4ba1707f0aafa219f21c29521581ce249e2e34f5656b0a04c00485079b040e13cbc038bb9f17f47cb8f908591b26bdc28538d8baffe4cc39b17d2ecffbb9698bc2b8b31b08424034c051b535e0cfdf07b7a0a54781e33ba739759991aeb72c0ed992cbe76eb8ec0ab12c182e8b049cbadd6e82e314f1bf15fef5ae95dc86bd64b8556766f8ff62c33492198e454e5ca59ea856d8e095c04da8045522abac865506096ee1cfa1082af08ca09b3533878ea3580b6c0c57a615e0ab768246b3eda96bb6caa01a2648068e21959f843d853e948588e8c0bfda364ef1f9fbd3235c27916562eb0214891eb55ae0e059f4bf7d1838b5942656c27899dec6d67b823a981d1e1e0aaff5323b0e3d69a7dddf9b12d7787ab763a3c7a2697ac65b655aefc4bae7e6444850ad2540d5193b378682c77a4dbf9aa22e517e68cedfd1ba32e3730ecaa2e3f6ae61a4f427d6e69071dd62a9bf6c860980c9d23ce1fa82a1937e6dc1ce3a2de096b680d23d89ee102912ac0bd769c1c02095678dbb00b4430428797cfb966b2f901480811e1b9cde358b6d499c9e93f0961f050465d7b0c70d4961e75a9fe40a24e36eaad27238231dae6d0a17f446c16bce7348e669be563649eba9f23be29adb8b10f462780a066ae573f74e51215a26097b02469c25180890e06acc53ab063c742e08d51359b0a39749b84b9f6be44f3ae3da8e5a2f340a8607d4eed08877d007928d332d6f49502bb5f416c46d866fc87477c58a22d3c5932a8d6298c1151daa032c84ad92f8f90b8053b5aa6f690d1bf682f314471cbf200f3d30959e07adc6488dd17b0be5279e727f3237b8b4b19b31a220dfe63882937f8d5ead677608c42a57217f2239614c521d94559290e3b0ed8055d5474e96564224f6ca6389b40a71337da11e1c307dead8e4eb43252cc2f1c49addb18781cf20acffd3db693b02e5c8ecc949b51b99005529e0149a13390615f5df6e0bcd68e1ca82b0173d25134dbf76dfe92daa085d3f6b1e4d18217df41b70c4c40101884c2886495f2ef8a473bf23cb47ab6533c93cb38c36c6dcf6837f1272fc91a6962b6e1386fb643e1f1d71fc75ab58d5800bf4081217cdce0c7ae9e3d25de543fc4444314f32067eeb147c08c55c5c8158ed11729837547f28a300eccc312260215f50e98c4e3d4170208a50a4a4def1243538f906df8476b0c46d3449be73866d463d422595300e160840daf8c906ae4aac13a64457853b0ea6d8c32f4efe3b48c0b1450250086d459648b0ab14fd3f341a4a803be77e56a811e7a26827eb0a1a9454f90bc6ece665904adaa3cdeb2c4847858fd1d79750e8cd45d8da9163784b8bd06629410502debfed5eca3cf8fef0fa6bdcef6efaaf35a1986d6fd68e0f436dca9442077a4818ebda4606a94a3c93fda46e7ef5ccfef656896a0d3d93566b02ed8c3f6174417cdcb99a415b0c6e9816d94e64b438c295b4bfd69e0d9ad52911de5509971b7370593160629b641d690eb2828bf363857983e3b9098fcd15e66448f786f196685d2ceaa251b17ad06dacd614d9fa78ce0a8b9c1c360b529d0bc1d17ba0b70ea8ac1b8d67f6e5770f0cbaee0b38109d26b09493060dc851f5fef121e83e30aab9c3efc2b8397e8362aefea1708f7ffa14d3656f7f7610f3a629bce14648a593250c6f309c02c6c552bb42984ac58db920dbc7d98f59295f37f3e9b99da55ef074ed65801b390366669b4c7aa1c483ffd23082793f9e5cbe30c34250f63fa3ea2cd097593dc67e8d27b7e4f07e73a9f7b33a5ef6962df1381a038d4f58fdbca9d71ccf640b917f631b75d4a2e8ba46c64a6223f99cee30f47c1a935dccc7f054fc39d3498c824e10cc3ee337e781a3971f0e98295aca611bde701c2359858914248f6bafc88232bbc27bd85883b00990bba7862fd7a7cbd4c86df049071fcd10d686613ec877758d83927cacc530bed9a596b5b21c6fb748c379d676de7e05719a867c9f934b5dad99ed97dcb4e70a9b6542ed5b2f086d9f56fc9752e788785ef8f7837a31e433438cf2f18f58be37fe8412f6d21a5c35000a5efb862926700079413f76ab2c3e79e20b516eba9d8c29897097bee55157936607cabaac41337ea4cc783c0809c875259f8020e16d5045fcc39ac796d11a82f25fcc9579bf0a010200f5745065175fdc15474ed514cc796672c59637c3c8f236cfc9c0978a3db1194680c58c27746090d76ca09f7c48ee4ee7e1d3cf0ea70dbbbd88e30e8814b57404dfd7c33727a0c84cb7bd468b0bcb3c89b526679c00fb0892d2a5e7a3d73698a3db53fd7d78460cdcf24ed22b5f39b8c00b3506541ae4a5b76fae29c1cd5b0f8c3ce142e0af7ae4efe3fa4c438a604bf4a9abb41e3fef1b9227a7dccc3f4d6026ca289b4b1366d9ed546abbbbd5677c8d582e79e2b544f18dc23809ab753313d84dd10fa3ed2f723f0b46277b8877d4f3e0665e88c50caf0f0708b746b736b00c8c83a7d18500384bd035996aebb7da8f09fd6af9b76fde7fbfc0ee854d7ec02950e76abd23ffb27a6ddf1772465016c79b98a61bd3940547b207b6507e32cb9761a5604f0f546834a8edac7ae06910045de218d761a4accea886188f947b57bd876491709028e2e24b075d6b022b51af1880ca16a8c65b7c69e51b2ad580ee058acc0606f0a3a9ea1cd4342bf4be602e941dc4bef1239bb9bccbc8098a6a17d63186c6fa75ec44b6e4fd38a3fe49c5eb995f0cb884e2f3ed6be02515fa605b98453ad935682c3bac6a2971bb68f4094cefeeaceda92dec803ccd3d346f8b40b48f8f489e118a17367801e85c79e9b3bb5d73ac44a8290cdbf83a154f2f125090d42e1a1cb72f5ebbd42da46c7a4d4b9fad9612a4c800de6467ceb74f831e1395dfbf5799a3429ba34754add4b34b5960a5fee8f752dae78450322a1ab3d7102b77e907fc1eec5355991e0c7d6c0866660e5436248edeb1a37c0e769a0764cfbb6354332d6e55103b9235c84eedaff918af3f0213c435c32ab409a4b5c7eed8ab6ca9e313dba459bcfa3ee92e7d669be0526856ac3c06a57fbecbba553a9cb4655a901d98af02b74098e478076655d325bd7639d73d7ae00c62fdc361a997ea4ff5b0eba33096b12f35cc7cc0eea62950b912b47c11b9fb386a47c4c15c0602d304b2541da889cff299a1fd415e7e25c70ee4cd83feea7e6a9c50c75d9b128458513d61ec5d0299ef8c090472fe0850f384938ed44d36f10cc2c1d31daee3f946a2fa18f9982a988fd6ac973b1569313ce3c8ff5746c4dd85a241f1e9dca0e904c091832ca028533a3e34c184edcc510bf22a27f530bdca3d057928a96f72dafc73a9aa6dbf2552598e468735cc5736c67a620e9455483e9cb2108045ad80569582ea93a53b491e528c8df336fb326ad74317bc1dfb8ec30a73af01a5dff3e437b7fe48ba5dbb3e8f01ae0c6fc28675a415f23a796bb6e0ef0efeb4b14cf20d4ad88ad1966da43a76b454dac8687bdd97b89b8f8eede91eb34ca4a0523ea65736ae39341fb32b9b716f25662a37382c16f3b9c346c84f03bef54acd6efb364c6401b07b3f7679e8e7f8c9b77b75e6e98b90f4df88460f1978d19744eecccb743a999aaedd00b5a94018e9d5a56bac9d5d55f6e93bad52e84aa7340cbbf98d56213d9dd3e1970867e3972dc98e61b3cff40b64ec49463ff79a41c82dbbcaa37a82b761f432849aa83a3d3c9a209e2207b87ae9ed9959ffced165fcb0d8873668c3cd8f18ba0f92f7acd2bf50416c22ce11692bf6132eb9f558dc789cf9776da94e48cf48607f19d9a11d5df4db11dbaa67a1d20e9f0c96f5956ee3f906e371c489efc88b0c1e56d881e7bf8dd5d6742622eb873e253dbe54f2e2e6d0e6136941de8c23e9a632727bb5f88c23170316c7aa0df28d8d07589dd6022828834f7ea9b4e5876a1704944aa3186dbf89e0e81767cfba03bfb38c55a9945209c4dfd88272c49d1745dce5ceb40f0a6713b5139dc2fb87a8a4888406d2610b7b910a9e5782ef0df719028d8e50a40a269dc9bee12157038522d06537bb31fc87d21af9ad4b2e7e127bbdb313e0a116010f65126cedadd4a122d15a71cbcccc346f55100e354b997154567fe3caccd50251d137c58fc3a2048dd5883b6af9248b51040c01a80c051b8a151a8878edf0304b5554746d6116b749221a1d0082ac925e6e140f0c3b6a180742ac8a50ce0e93e6399102f151d7c14000369ff52d0b537fdd51bec99e7271b1255c6fbc36d83408c417f6825a8e2a58b9054ab2c3ead69d97ea9947fec32d720653c123ecf51a9a3f0ed88743e3fb7b94aea59d0bf0219ee50825ef220554312cb907edb90e4d85f29e316ad57d3b90d859391fcfc63e6c0fd3ec27d4e1efd6e0b5ca8165cbd6af25ed8792d805f27fce308ca1d51335ed5d727558dafe05486a6f9149b8d3bc022026656714222830be582889e6800c0b170e48ebfd069e711210e4ac7acf07652a6f5051507de68aeffc9540cab5cdac84ceee46059ec23820c04b127266c0bf8df0d2b856be3377ab42592f495980baeddbeed3ba707a85dba64fe36941eefa8fd37204ec8c18df3852febd2b142b1c9a5cd0f9e424cd408ceb7788270899fd793db99ddb8f9ca8df550c513790d8bad37a1d1f4a62c4527bb64c677462c9b093582decea70c7bbe873095536728e7ce05d5cafb5d166a1f03055e918f787fb244c5857e3d7a1009bd37f30f165564a082c1510ed19bb1633811a76da70dac67641c2478c6b335f409ef54a2d0f370c9510d0aabae3cb998bd023778375cbf9cf5ef125afd584c11efbf40bb51839aacd3016e5e4d79f134245f952dbad617c78cb6f5712bd9c0c7e1303db5029640cf9b56e29329c3e6a9e0a2371aac1a437b9b1c4477ec9842aa80eaa22c5eac11b60c661de6ddbb088e844293ab8589c13d938765bbaa44301e4137148dd0257bd4c8c766c5d3bfe53671e9417cd1b52f622870ffd90f4e17b7a4ae1b5601a2edb032e353bca652fb565beea6fb0b2cdcadac71794c662677fb1dc81d116d94f5eced526b37c004b95284cb6aa2ac415754a1f14882595dcf4d3f1d905c6e8c12cf5a9d23d3ab55bdaf9f17d2f03f933e1bab89040753648c426b072b73aee8c2fc0d1c03fce2c656e20d4c96803fb2ef471b912267eecb4d6f342d3513894b94d77767823fe0c7438e51f21bcf16f0e98b94b23a10760271281cf843989824f7061bf834f93fd8d2090f70e939700dcb4d8964a19da39a9601a7e0ed9f55f567fc7d5682d55a9ba0e68861756bb549f2f17c10ff6bd2042a80477f89743d3d762f1dfaf230bb502eab6f4c46b26135ff3bef5faa179bdfbd288e3cadd3d88d8012706e19b7fcc6e9cc2699d3ba0e624e715599480d6b7dbc6eeea0d12a9236444b17285fc7794040dd40c2b2ef175f7f3641664fc9bb7ea6d7eb3489d504f8013d64a23aebcb5ce233405f5ade067dffff253f27e926431ad806703e8fab23656e0b7431916d8d4c72a7d831e3664e5f30839c76c8167b76f3b2dc75a6ef48df515e06ea54ca51de2fd9c5eeabb1610b7eef06a2f3167859cf82e1a5b76be8ed8beee2bba28c3b15af6890d7a37226834ec9f63306a0da11aff918753d8b83fe7220803c070db98195d6d18357233f5504a6e3bd6f30115d3987f93aa5d89aa0b8b577d1fed94da057a6f088233efc0f44f86798896eae9ad0b20c8c9cdd9d72a3f02213f6797800894b864cb44fed009440fa5b0197023929f9bad16f052cc2d87327788a68b9209f46fb4776b092d75713048b5453ccd699d19cafa8e9a93fdab0f0863711916efe3bd81ee71b8e0221e12e9ffe2f6ee1a4dc1a8de6e593480f3c05b3691e916a4a7ca51971eb2f0f693dd10f6b8468f8cf7bcce285938b5a0a76ef86acfa2990f88bdafdc39a065db17b845028ed2b7a9e331c44217de20440e406868f1eca818d0be20248c2948b8f4cb118b2e456e585949139270f57c54715f3297bf714aa7c5f72ed8ddf6a074703ffbf95e45bc81a02c42822c22d2b718f2de5e03d687a4b18d605ef5ae75f9d43c8cb4e77aaa0c0101d978120f29574b22f52783c667f7daab3e1f9cfacf2e68e94a24918e3fe2c4f061deeb64891b5217fe5908e7f389897751839982b7fb736fbfb1232684e93123611b7fc8fbeb74f8815b5ae13240051920f3b6ed34483ff673c467ed7f0a8fbf619796e485affbed0697415d2d0598ba34d5b9e44ffd12a5edc323883a2e28efe9baf860324f2d2016748503eac1888213926b0e0f0335a4b51820a2bd3b42d982ec6ce307b453b6385aed7a735a1e98479394147c40f01c532926e10e1b26a5b395bc150ec4b4daf5b1436bd0baa225583ffc9d9e9d8a354f60fded37b41c7c051daea04e689ab2d4e24d7d07c75c50ccfd6a527e024d1632246c6f40f06b86ffec0b29cf894b665d53d459226b93422d37a8da23587fe884dc3c0f2fb55dea296a9a5b9a0d101f186d9fa6288c912202547cdf958569d2cbf235740eed38d10b0025dbb6de31058e98780d22149c19d4bcaf06dd7353fd91cd1f47e47f45622e1472542be2f63f463d253617eafd4f2ad609f9020884905dd5c22fba53ccc619104b6c0203a7f6c8c26fc80ff6fceb8c0c51600c2e46b4b872e6d597511524545a76cb42278b519d911e6c1320e01682c551e204ccdf91290c52e0836167a5685cbb1af338eb794c10fac92950f3f7956acf28f1ca984e380bcff9876b0c71dc7ce4011d1d0f955da9ca885c6e7bb74c6194dadb0fb9146dd725c8a9574aaf3824b727c9be3fce59c35850b162c17d3013689fca858a0a51d81cf4f30d6a8705bbfe35ff03c34cc7c56aca32140d72c8e8121fc71353596b777b266d75b322c9a97fd2c5d4e2362f19c99de66da7bd9c495c03d9a15b28431a0c051e786fa80f5503a72519e6b419263d72d553d688349c0cf30918eba0622b953a0efce4415c29515c26ba15f00e548ef108afe3f8194aeb965e5e4be94f10df6c45ea5c133a8c3398d09fb80f950b83c1866a1637d2bcc195e05cc32a9233b244cc2b1d4930e66f032cb1163c37b3e58b576ab76de759569797fa9b8bb4fad66aaaa56f09c7a0ce4641d6799d7bb47cf684990ec1e08871458c211a353ccf1285e7429c7b8520180918f7
103MD = 85747c796a910421ecb364b4b4f0e68b49e9217944f6586eac4993ec
104
105[L = 20]
106
107Len = 16
108Msg = 8a61
109MD = 60bdeabf39efdf21ba9c0f94af6552d2ffe699e1
110
111Len = 104
112Msg = 37487aa02b03bdbc6bc62e7e26
113MD = f146072f92dc4a551721a10bf0b01564cc2b43df
114
115Len = 352
116Msg = 6ecd002568bae3bf1873993041bfa292eb94e9ad092d8eb3585be82e8a20cb36a47a06e7a57d301268a4a533
117MD = b0a2d6033cf1d8ff120a605b745d736ee4aa06d2
118
119Len = 504
120Msg = f6dc1d2f6b8e126d99939664693d8709513f97d730074ec2794e536d94ede79c81f2b2ecbff3c2c26ca2d181ada2c60050997f3bb087ce48d956c18dedb227
121MD = 395dd2989edc854746e384f339f0808c515747be
122
123Len = 13976
124Msg = 07a6372c863c7d7c6764e4f05addbbe161762735dfd2d23bf268e2d603cd28de9c369ac379390473e1d3fa7e37af1178cca54fa0f782dfbe68070952b93462ea46c640d43ffe71f5fba42df98f4c48ada0d8aca8753e0731508bc15dff283178ae5c10a6ff132eca5dde63a78d3ac94685152897828eb25a55fdf140fd33fd4e7b03f283e201a1baae8986d25603fb0b2566aab345fb48031d648144dddc2e3556c0ceb1104f348d96ae7dc0152e45c625d21b46e70c31f250c858aec4ab2cf5e79d8c79b0854e0abf5330b9f044113d306161968f4ad6f0973160c9dc296056d5a11523ea2b56fbce8387070fccc639ec1c65ec663b9dc49aa880dc4ddd3020c9d44ff7e8cab6266e436af19b4ecb82010a0f8f9469ef380034a02e3f50051a6a3f233dcfe9d553459dc1bebc538ae0183448c9405c351271dea808d908480e61e9793cca111b4cfb9874b799626a1bd9a0f6e0929ad51b97ad81b2438f5fc255db3a3dfec9f0d8393c6b245b03d3faeb58021db3ad391b17a91174a66db4feef1b4c889699bcbea7928f4d29be2d47f76455c8cb1dc7da9cda41962a28ad8cd7b39965b809e7c7eca1c6792c1ce1c8a4cad6290170e91fcc49fa5ff64ab433b4aa081c8da2d9bbb072f9f18ca455469b946c877e3006b34ffd2219335b30ba2e0980f43cebfb629d0b11fe70dff28883ca012c6ae4855fcefea20a08e189eaeed7eb36ed6db3835976f4e60053205805727c5eec15d0e9f155637a9e66268b9c1c302bcaae6ae88cbb8cf1668a487cc996c4662c4a4e195f094cb31c717165e0e13718f8388957dfe0bf69c70cd0bd763dc38c530b67b9c12244fcab8bd13f602de848a2937699f9ef77944e5f22e3b470601789e1838fbea9359c733aaee2c7082b02ee459b7684ef9bbc200da4b62d368351f5520a65ffa506dc9b097117bb7ae88d04d85fb525e91327689ec0fe86971480c0e864012b1e9f044c7d80a4e48c07320dd4292086e4c71d4c98dd826a9bfced112bfa2beb1ce85cad204451ec45703931bf637d4fe89fe8f485620b7f4b21e011a232ade7a8c92be77925e878ae0bea9723749528fe83cf89ecb9616dae6ca0e8d5754ec6c92abb21108c2f33cdc18c6887c430b72c5b193356494cddccc577bd4c2cd53188f352846edff0c2ac7869cb74bb16a77c0f0f194a7a9477ae15abb890bd0bcfeb0c39381a87f1d05319c7e971c10e9ef687f96450b400e25b4285032892b849fd5db8649cedfb03c88defea063ee144a1ab1f3bf05f59c7db364dc39c11a446c3ce16307d78d50315ba29f5bb9a57438564c8c7b3e367cd37d74b2375a4966f47489dc5448f4979428abd32193d3840aa983d3020a9f29d760fc7493ab2576c90b1934b799c1d0d55e4f2caa78f4ce61930c79dc017c2dea0c5085d73a3b0e4a6f341e9a5061a6658af11e5edf95bdad915ac3619969e39bee15788a8de667f92f4efc84f35082d52d562aa74e12cc7f22d3425b58f5056d74afcf162cd44e65b9ee510ff91af094c3d2d42c3b088536d62a98f1c689edcf3ea3fc228d711c109d76ae83d82d6a34dcfbad563cf3726519b519fd48b51741aa86720836494b7a589c778927047a25d73508adaa401e9a6c0767a675e31c5556cbe35fadc9671359b45e985c3c8af84113989b299ae4474b85e4b5d4b0578ab1e8a2915a8df97c4f52a639fe32272cb91bbfb721505dec46d51383cb8973425a714245c2e37d0577fbe0d66381d9239db1f08a380cf609dc699698e0fada2caeda44d58d766c4f8214b10642b80b8d7d8add7cc41d47108ab7d07dab71069a2d982cc900b331caec317942122158bac6eac9175c2dcba0c04443aa9188832b553f5ca8c336880824d6bc02486a2b4c086665d276aafe3b1b93729829adca50c44466fd5b5cb977aa78fbcf5c0f0da1b09216468a11493ffb39efdeda5d669ae92bee2f2fb250aa1b9cbb11c36c7a6c6dd26cdc3cfd572ffd8c1dd72a13c27a327a34c6b6b3d80fc6c67c72152eec0c8ecbdc1bd5cb829b811e7f29af6d786f4e93dd4c96fdda295a6aa258d7b2fcf291c2d68e0b1866032475964ec0c6f2fa8c2d6a3936ecb187350def4e818507bf157c0e9b33406be7660605af14cccc9c799b4e051d0d0899e53495bb8931a6e2984bc6dbe4e02ec8b4642fc2f1cb5fd5a5520b48cfcb49e1f9533838753554dd98b6a1b8a67409279df477330e5f37367e06247ca5c3ffefd00e693dcc0c9c30754121c9ee88a574915b9e77c104fd2f921c2c096573951407ba9b440423d76bdc6fc978237a6e302cede7f99038ec31500884775556941f1edc30e3a417b0e02cb6fb5bfbe5cdfacf4006411287bedc565fb06f1be987416407dc852254934df4ab59edce476f3506e65be6ce6ddf91038642291fb8e92ba5b1f0b105670905a2c14796110bac6f52455b430a47b8eff61
125MD = 1adccf11e5b7ce2a3ddf71e920138c8647ad699c
126
127Len = 48824
128Msg = cd8490c93613bdf1f284b94b330f6d6f45a39c651d2a160b340e2eb696fc6d1c35e88872845190d141c669de92a97daa5433b1d7b0b899fdef2ce74b8fe72a7296a5b5be26d1dc86520367c730c7400c2fa06f91ab4c48a7bf4ae35a5b9acd5296c4fdf7451b0ad9cc439b4e34f11e5d7ef2bdda376f8dd34d6f092b219dc085dd4c4a6308b8808f588eedbbc7af7f64e83182fc7ca7cf4741a341060a7969d31445834c982fa8739ded4555108acbea1666a83da17f77cc42ee73323eb53203e3b790f81c08e94c44678b6538096ab7b09916e6cf7ceb2af85987f8e4d982dff1ab59b0bdccaae1f405a73366b5c5935dd0b43e2d2894290ceb66a0246dc02de728c5bba30255fb56ce8107c3144246c5156a8fe40ada9126adf67227fa56b66c37be63f532516211ca012977b04a97916f201f1baa2629eda520b51508ab4229df2ceedce406dece0110e0a911464f69e7be38fb91deba0addcdb3161d2799c628f5a57fa1dc37357c947681bd9c36f4832c20ac466c0c245de3b250c33282ea1a02d007f03b34ed427631283eb614db4d521f555136e7e42b4cfbee8134c63dbe3bb79b5a8b9f9f5b9f5ac61cfab1c54d197f1e3ba613f251eed616df952d691b88a16466343ef2d0f63882ddd2d55b8a6786308b2257f5d7b38af166bd7f1339d2d8899c9eda8fa86215850ba547450c267eb3c9147d96c38161a69d1584e521ffa23384313a1debcd37f72ddad02adb3cadce7ee34b7c1f42a15d0d030487daf9488aa7562845a11ee7ffccdb38b300935caa31f78a4ff3dd93403cf0c6a16ca611b58c736aafd33d6dc56f0f47878211d26f6ab801b9453a7f74b44593dae0f047ddbbf2c902891111729edec44f69a05944b18e7a601f41ad24fd6833da3dbe3029bd390de7c9841b2ee2b079b2bd2737518fe1bbec88da64769dc36e4a8bf716c219b2fe059d7dd220c1ed2c59878db5bf8b198e0689edee921ebc0cd2d3853fcf57c363050ce58071c5fda6ebcfbc1bb62e9eb956286291a108bdd4191c4ff47900d6068e1ea26b487649af119b9bb15dfed804836f2196cbe12d8fc86e3d7ce89b52ad49dc9ddbce5b370f73f512bedd853039366612453733740586d1372143b09f21dd4dbe1a2bfc308db8e4098c5e4b0c1e16141ee50e85fafefc4e2529b3c7252af37aee6f86e19df28871686107d7d57dcc812bc077602642d2ecefdd5f694b8f336913210793e4068da2178600b1f41cffb5221c9b4b6298afb47e85701d7b1a44241679d8996f916c81ff437261cfc358b9ec42a2ce16ca3bacb8690d6c1d91cfb3e0bf1e7ba45bd01606df856fd03c7e946f7ab371a89e1fde86d05fdd97bd7b1c583b04c2ed2b5f6815a460645e4e1b4e950bf6bd81dd0352d1048df85266f1696534aff5b1cbc17f15d82cc8e0c0d4f0453f9439094f8e0f7f4bc045b654d9a2f1f44a9c57019f63ecc41021c05b5380675cb56ea8bb691d79ee204d2c4edacde3c1fb3f4996a11d84b035f965e74009e2ab80e2c7ea3c84a834d4971a1e9cf423e4ea67ee526eb3c3e4c2d7372c4290a0741e1fcca5ae4cf36705abe98ac81e98a5419baefcaf3093a7e0449ef1021f88ffb7ad21b2677e41cdda12025b06542c4b2564f15e0b99db43b7c7020028bd829372122cd910227cb07c53cb58fd9dc620c0491f3e2bf883fe6ee8cb1f5b73767977d857e4513e8b5612f6ae4b56014e6a3ad2a065b65472212e2f611743484cfaef860999d1dc5608c58412fab888ad72bb87dd9b55b692f31e252daf8944ec5c02a5a9c23903c50dbd845f2fcc3bc9806af13ca7b025cabe675195b1d56f3fe7d7bca12530bcc0af217efcb03a218bdb6f9726536ea902c8303b02e3ced22be59753588b5f0e2f3419fa5345a942dbcdf3010465384a225ba26cdd0f1d74999c69f336bb6d01fae5cf81cbb8c1a7a29c1eb83ca6b51113bde56b8cfb6a5d72557622a37f039d090a689accd02b57c691174338de8e05bb3620c079705c969c58e56b079dc9eb44eb0fcebe548f5a31f4072a5ed56a2f03107bf40a359b2601eddf53cade66f294cfeaa40a0d94b9c90d15f61852f295d3911f8ea914d015885c8c64540a83badf0021a416c3e37b78236a2ecd1fce4114033416bdd3a36c18ec13250ee9c74c0fc4dd564b3d24a825802d5ae402a53bacace115ae3bbb329be79d1e5e42dbaf0a6446431145fe49b86a8703c7c41f8985d54f12e314c16ff89351d8addf66ebba2783f2d1a11965182aa0b0dd2de53586c5a695c6265c2b173958da648611090557bdebf11a1e042f089fe98e049f4796c60d26be38356fe020d9ace9008410d53a1bb7db78b52ee44bac364213f5c59f1eac4e3314f3423b92fdd7a6156608111ac6ddf58385ec1f3df12061208db98816ac948d803fad10d5ece2018c60faa13de5e5a9033745c824932e53f4122a39f635813545c1b74732cd55642f19ed6deca1585ebf7242c849bde981572a2199066e9c912b2068c8f1c8b936c43ae95c6e22bd7b80dfea05f495d751107da5928e806d0af905c87b5a0795df146af6580d8f9c6a0e2645686d43822ce9b4be0bd5937c097917e048b5af71c7e7521d490f107e9231ee5bd9fbf0727ba87774ed24cd52f471ffb71849ebd55605996515bdcfe95bb1df3541e7c42da4166dd01ec3597634aa6455d15fe14af435e8d7a55ff1682d55a2da867ae63d11fb3fd987fa5d7032ecefc35d3fb9570940e779e13da18070e6df5292f97f2a281f9598101102c955fe4808a2319c85fdef3d55b19e05bb8c2d3da64bafb67a53491513a24f6f0804aa162c8a7db25b38089373fecc45a0eaef65dd9be3b4b7f9436a5423fdcdb5a9b60138fc6a2261225390d9ae0d8ab7f0f7ffff69dca06881d33a637d634358abebb333df41151f239add91abaafc89070cb2159ce3a31655c22e4696c9fa7a7211d1251d4bb21ea4a321a3dbebc29d97f526251e40e548dcd7ed07587719a266f006179dcd22e50b3705152817057b097b043ad63b8d867edc20aea9b4c959ef4ff70f47128cfcc21e31f17978ecacc366f459ac1cc459a3976e4173ca322675f84f18036119ec2f204c3fb554a0b72f7e9d8c882ab147b3d280ca9dff7b9160b1b437b901f03cbc05fe05c6f44824b48aa8da52ae7dda1653fd500f9ccd221843cf76513b3b74d094f14d93a00d7cb954bc4cf2f04f9a35e38edcb1e84f62057647dcb3571f1dd296ca1e049f1746a8a282e85138500e7649db756b2d2ad88f11c471c89dc6be2cd43481013b8d0ae83da2b855cea7be424f8b2325b1850d1fdef03e765458df4513d57c72ba9751e1edc3c4e7f97e3202bb46eec7be89871ba3704aa6c6fc08851e551a3f655fa1fb798d12f003faf31c56b6df399a5dd0ed29ef9e4139dbc254bc5d6051840a859eabaaad56324588fae881fd638d2b70fb3813402df61d941ab495588e5fc3823249bf9a03cf877902394f512de118edaf98843a5445e9073fcfa409df3db0221f1c77e2dd21e74f9e10c9e180dc4ed17010eb949c6d67a22bd5337b2c68f9eccdec778ece728e91353696b742c8f5a3a569f054efb8c1ed478ee9b75e26c768a5816aa6bd08a4c72e745fdb5deb34ecb86b3a84346c1c70f9c16fc45bc0421f0da2f630912d5079f390cc53b78e343310de722b53d2a3b4aa386caa0d7e91986e19c3363426ba30eb5284293af81d00158a3f5233327b40c3b989725ba7dd5b31ac7abf8d3e0b737e843065cd7316dc2f374a00bed4cf9caa0d6e232c854df1bc24c3d484bc6bcb14ec770d5745474dc6ac3b3ddbffc551c9fcc2c56a5e0ae17948457c01e701bf1554022bc2b7d9dd42b2b91172fd85e6874d2d61fc7b3bb3cee2a9bfec09f6d7e98279c6f511f4140b116c856c1438e34bca59fdca2409f025b896a52d68719bf93e82e7d89bbf798991fda0af8d06d17f39eba4bca09c1fe594b537ad4c9b94ab52c895539d639425f9146b24b016368a638e5bba391bc8763cae7c52ff9c496884f1d84e5e08ed451358ecb3c4919dd410e82cac35ae744078287c05c89b42999ea6b8b127d40d53a5722d45139e8bc507a11e7add7fa9ab12cc40afeec008a4668e3e6440f27bb5780936c0e3668ac51262390c79b3f21fd041cf36ba3522f3a552714ff188bfd554c60d0e7d11213cf7d3864a5175d4047c2f3284741f18ec22995a5b82bf62190151bc1529c6d9927f9b0c1dacebd9c2dc406f7f64a973f9a70cff6e3abeebeb46514bbf2ead382f7262d46bd43d88c1b91a9011d1f8ba81fa536a7162aee2b2ec6fc0f2d6efc87b98d2e41e0f946969da659c21053775ece415a34d42b6cfd5bc52259867b411dfb991461ca618052309ca9c96468c2da12dfab0e822ff3bbe7ba281982a239ac19c47024fe1f0e3550cf0975add1f680a9dac9b2c4ab0aed4f409ddda6765eb8a0a9d1e9d07458c69ac8195541219b18efcd06c0001f2ae7fee2d404666a18ca3cb3aa4f0623e86c5b1229f6c2ca28d951111294b91edc52730b6b2c46e000672a7c89b2f38045bd3e37dbb8a75e18687a514dcf740c87a34834d3c3cc8aadf6166ec0c42d2be92f90a3af49633ff23cd80848ceb57ac550eaf9ae496bdc6a2d7cf50fe107895b4a1ed014f78af24eccd6a07420f1dc0df1e7c44b4ba937dd43cab9c798371b148325578d61931766af02b45054bdc2d9fcab2f4b49092f6fff7c27886820739d6140a4a905f0020249e8ae8dd87da1a1e7b1851eb01045aaa72dc8a2bf68055e7aed41d85336648a3405195d2ab61b0e29a770461f32fd05e14c17d72c5252f026a7b9abe7ea9176d3c46f6ed9fb716758d97b41e4f5d81a24538f763d83eecafafc668422612b40cfc32b3354b24755fbe400a2bfed494fe6d0ba0051713b776e67e2f1915e94708e6dc74b398f2f526933aad8fe7dc32faf40022606aebb6e0756b994c3176fae7640ee06d6c67bd54764c4752f1bf831f43e0227cba101174c5554ce26400f333dd8e9f6db1cdf670ce407d7d06c3aef4c0724b62edc8f1ba3e04f0e394d15a73b9255abb4d6ac70303dcf9160d32dc02d4804219ed5c7e3b48402e58ab2f58305f9bb95d2a8759947de96328ed5234cfe7d0b2a9a014df7e4cd0ae48906315f139b8635d2e6bd4aba32e62b8906cdfe5622c411bf0373d0cb07d17bb2bb5b83eae4401c243605fd1df759fd0ddc704ccab5a9776c40fbf6bde0f11b9646c699f26063a9550ac228c9884c277bcadcc0a2c225dc203e28e253c4e464b23d2529d09c7b7dd3c984667372472b615645f294c4e3b0797f9d1c234015b78502d98bfc04f1fa2f16cf3e7221d5794d035e4b172a4d84e679cb1c82df2fb49d3c6668eb1661bed56705096c2371a19d668832808eedd9e5b1256c18fe7ccc494e5e29145d453c553ec86fb7f3a634d0d45661875f2f1005ba5e734c1a976f37cd23450e4606e32d027bc9ec2edd9395e14b2082179bd7b4f9b8caa2d00a2de71d48553f7d4153cb56a1b08f11925e4b11c9281744ae9171f3d6faa3ab3f88c5c34fd23e4f6efeceafdcbc07686ef56efa62c0ad62f1cdcb4d3b5bc508c1f05263bc347158fa5495828f34eb7fcde98fefaa82bafeefed3f4a58968d751c051b52e0047f066de5be533bc3b1e439ab1c8602f6c67503803c8fa113737cb8279f358dbacdf45432b7a654d0e1122cca93420e956661d7275181c75b0d9c20e84c7007dfc49f27bc00007cf4ffa631c892981fd70141d532fcd51de5c23fe0b7a186d0dc296362f235d61698740cc315891cc9342da17843bcde274c17e462263d0e8b4832dd9075a7bbb443d4b26b41e534ad5551ed5ada102175e695363fb48d6b99ac978a3aa6f405d87f983384ce35740e930491d75675337c5dc081e3d301228e61bde5cc169968e5b4350cca2b085f9f75cc4b88497a78cd0a0073d90246c7dc102c7cbf3516498e8a41aa85d8cc5bc285ff66e8338e85ca83fb6889e2bccff52059bb9e92e92c155a349952680ffd0a3c346061a53fdf074417fc90c4d1af7c2acc3ee4b080752cbc9455ba5931b7e910f1e4af0efce905d2cc9c685923ead387fa532c0e8ad92719c76c281cd010e1acce500ae1443838b8afb48af032069dd07aa4df0d56bcb70a64592633699c8658102f1fbca441325e27f1732a7a973d8cb3a0684d72943ef6f1892f2d7ccf39bb6dfe5801ab98653bdbcfbb787bf125253be2624f6cf44177d588bd7b780d9e3f4e3a4e50b8a253fa21abce6a94b9073289c76773b46140f5a6e46b9de9ec066c176f5d1a69f380e1901216617363362d13ebb26ad74fb008ec08841550ff14ca800a1ecf2e007ebaad9f4e0d9664448d60ac0d8544243129fb81c1723b9b4bc2ee971dff736d9fcde0afbfbf5c50a4cc06a4c363998326c17bdc9e2508651dedd9a2a52bd87f8693cfcff60753acf9716c526e8635f12377e36564ae55d0fdb3c7997ec4dbdaa5b4d18c7b660acd95060831795da7d299a5a8d8cf9e92537dbd3ef7f56aebe38fa97c41da6bf0572a0270be7e5a7dcc0be3529339464c811052b65a938e874ea6da469c7d8992ce0aff1c75e82d1621ecb967213c65f2de582cb41de3804c507ddfc708ef3f6096ba4491e431160f98de806d0f334e03cfb7a3bece601099bd971253f3aa0df845da8b478603d5d88533d0cab9c89f2dd9a1404cf8939ffdda652a94093865a85fce2bc3d7babcff7b9f3306bd76b9af80c78ad518f89ee73b7a710da604e72f4927be8d65d06be2e0732fa786a83e27597cfbed9bf98df445499e0746b9f2cb9659ac0a9cef433148521f33b1d78d13c8441c0d1e20fd93ac450a3787a2292bcbd68cd1f961d34937be9a21abaf26f361bf53aa0c095e53c51f3e04d567eabe6e40d96a17c2bcc9230b18f7e079bc549a314b4ae21d30a3341aa205bc75c7f1d21b0a49549c300faeda243d0ce18da5e66c5b663cd705005dd9fea0a9564174abb797d64c58fdab1fae44576d514b75eaa31c9278b15bf9b6df7c6c2873d7a56fb91ab77b83761a09f9e1ddae535622fb87f7462256a60dd39dd3ceb6690b0272920b635ea639daf24f95462c523e5bbd8d8407c61163ab38877d5edfa04c2a78d4d240523ba97c7d01c71783f8748e85164b4dd08c25506a4ed18300b42b7bc6e417f512ae456ceec2ffc83190991a06d4a58ede215babcd3688e1d61f1975016244e80c88ae2aec05c7eeb1c50caca72b3b415b6b870bf5e10bd1ac3ba6b4acb1d1afac554444d94c97e171005fa4ea9c651bb4e527ff58d0c2f90fb453a92d6546a26e9e98395b09e8471bdcf2a145aacb649708cf048a7856ce8cf390c107ff2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac0d1fb639c516b9bcdf23c34c6145a705498ff9b9747f15e1c08c63da6efeda4eca02c3f00dfec06c82220c9de840040118dde76be788daf84e6a2f44c81fe6defcc474f99c51c4648d297cbc48f081e0809dbda505d020cbe865e430e0491644ec8c52bd3ab8ce8c4862990f49fe2588caf804ce9500ef42d5a50c057c257168e283e4a4aedbe4ccfaf3eeffb212f9e23d15434d60bf4f455f512e2b655aff3225d1b217c261110cec0400f54dd303d6231d028c2eb649bccc91d30a6391c88bff9d447c3cf35a3467be5957e0ea4d4dc237c9f2c68ce48f658f820a3d72d559b60f233ce538c92cb148808e34fedf2d648c21e7f2ea29a77270c393bda42d869351d6c085d965dc12cbfd0311b8bf604f4391d378781eea3b5f1e0da9d0d8f8de88e56fe47d362cd46f591d3ec0f7cccb85a21f21ddcd4107821ce0ca9ddf99dfdfd9b0c9cd45053e5b1b4385bd8f5b227ada31b5c23e9420014474e8b4494fde7c38edfe70994d97b8cbdfac588df49a49c472fcce78cccc051f31cbbc1e0422878d8d490f3aee28adf1587c38fb7e7d1be54abeaa83cf54b633803a5e669ff4295df8735231ce39631616bd05e0e31117c722c2fd6787003b0bc7fe422a089c89329544e085d71102c1813769450a9f66f160d1702cdb17bd2c6fdf0f722762d193ce83623eeffab17b01b10a31db6e2feb6eb3abdbb2e36320e1a56e44e48d26090afa7f65003a98cbfef590ac3ec89b3eb230557cf6aa566e841806aa2767b21bb26fe001f11ae039e0c9a4bf1bf3d271960f16158eb5bd9ebf0080abd8369d512cab2d1aaae2b14d0ff6ee705a38fb0c801a98b0624cc138fc24834fdf430f33e1760db913da3290f34415c9e3df3e97da1780545ab68ac5a24db89f24d62f4a399728e4144a8c89f47ac2d29e30c49b0bcf790a5e3d3fcd1943c6a28f37251d9dd827a69579e6c17b629c927473b5a07b0a29d9562708d6c8ce576109ad1a3473ffb2047eb069beeec24c114bef392c929038c92abd0e6a19b610e27881361824d57008b7373d0ab76379570ded76c9b8284fe2c247791073c29b2fc6fca05019220ab92856892d3c0dcc6da0b597fe559c162d060d71513ebca050d9638164b9ae271fba5575ade787ec5aee8fc253d1b234b1df561db3e36ac64b9b0100dd6b407043537b2b141f
129MD = 2cbc07b9b9c819b8fd38d8a614a8a9c3fa7e40ee
diff --git a/src/lib/libssl/src/test/Uss.cnf b/src/lib/libssl/src/test/Uss.cnf
index 0c0ebb5f67..98b2e054b7 100644
--- a/src/lib/libssl/src/test/Uss.cnf
+++ b/src/lib/libssl/src/test/Uss.cnf
@@ -7,7 +7,7 @@ RANDFILE = ./.rnd
7 7
8#################################################################### 8####################################################################
9[ req ] 9[ req ]
10default_bits = 512 10default_bits = 1024
11default_keyfile = keySS.pem 11default_keyfile = keySS.pem
12distinguished_name = req_distinguished_name 12distinguished_name = req_distinguished_name
13encrypt_rsa_key = no 13encrypt_rsa_key = no
diff --git a/src/lib/libssl/src/util/arx.pl b/src/lib/libssl/src/util/arx.pl
new file mode 100644
index 0000000000..ce62625c33
--- /dev/null
+++ b/src/lib/libssl/src/util/arx.pl
@@ -0,0 +1,15 @@
1#!/bin/perl
2
3# Simple perl script to wrap round "ar" program and exclude any
4# object files in the environment variable EXCL_OBJ
5
6map { s/^.*\/([^\/]*)$/$1/ ; $EXCL{$_} = 1} split(' ', $ENV{EXCL_OBJ});
7
8#my @ks = keys %EXCL;
9#print STDERR "Excluding: @ks \n";
10
11my @ARGS = grep { !exists $EXCL{$_} } @ARGV;
12
13system @ARGS;
14
15exit $? >> 8;
diff --git a/src/lib/libssl/src/util/fipslink.pl b/src/lib/libssl/src/util/fipslink.pl
index a893833c5c..3597bc1740 100644
--- a/src/lib/libssl/src/util/fipslink.pl
+++ b/src/lib/libssl/src/util/fipslink.pl
@@ -28,7 +28,7 @@ if (exists $ENV{"PREMAIN_DSO_EXE"})
28 } 28 }
29 29
30check_hash($sha1_exe, "fips_premain.c"); 30check_hash($sha1_exe, "fips_premain.c");
31check_hash($sha1_exe, "fipscanister.o"); 31check_hash($sha1_exe, "fipscanister.lib");
32 32
33 33
34print "Integrity check OK\n"; 34print "Integrity check OK\n";
diff --git a/src/lib/libssl/src/util/mksdef.pl b/src/lib/libssl/src/util/mksdef.pl
new file mode 100644
index 0000000000..065dc675f1
--- /dev/null
+++ b/src/lib/libssl/src/util/mksdef.pl
@@ -0,0 +1,87 @@
1
2# Perl script to split libeay32.def into two distinct DEF files for use in
3# fipdso mode. It works out symbols in each case by running "link" command and
4# parsing the output to find the list of missing symbols then splitting
5# libeay32.def based on the result.
6
7
8# Get list of unknown symbols
9
10my @deferr = `link @ARGV`;
11
12my $preamble = "";
13my @fipsdll;
14my @fipsrest;
15my %nosym;
16
17# Add symbols to a hash for easy lookup
18
19foreach (@deferr)
20 {
21 if (/^.*symbol (\S+)$/)
22 {
23 $nosym{$1} = 1;
24 }
25 }
26
27open (IN, "ms/libeay32.def") || die "Can't Open DEF file for spliting";
28
29my $started = 0;
30
31# Parse libeay32.def into two arrays depending on whether the symbol matches
32# the missing list.
33
34
35foreach (<IN>)
36 {
37 if (/^\s*(\S+)\s*(\@\S+)\s*$/)
38 {
39 $started = 1;
40 if (exists $nosym{$1})
41 {
42 push @fipsrest, $_;
43 }
44 else
45 {
46 my $imptmp = sprintf " %-39s %s\n",
47 "$1=libosslfips.$1", $2;
48 push @fipsrest, $imptmp;
49 push @fipsdll, "\t$1\n";
50 }
51 }
52 $preamble .= $_ unless $started;
53 }
54
55close IN;
56
57# Hack! Add some additional exports needed for libcryptofips.dll
58#
59
60push @fipsdll, "\tOPENSSL_showfatal\n";
61push @fipsdll, "\tOPENSSL_cpuid_setup\n";
62
63# Write out DEF files for each array
64
65write_def("ms/libosslfips.def", "LIBOSSLFIPS", $preamble, \@fipsdll);
66write_def("ms/libeayfips.def", "", $preamble, \@fipsrest);
67
68
69sub write_def
70 {
71 my ($fnam, $defname, $preamble, $rdefs) = @_;
72 open (OUT, ">$fnam") || die "Can't Open DEF file $fnam for Writing\n";
73
74 if ($defname ne "")
75 {
76 $preamble =~ s/LIBEAY32/$defname/g;
77 $preamble =~ s/LIBEAY/$defname/g;
78 }
79 print OUT $preamble;
80 foreach (@$rdefs)
81 {
82 print OUT $_;
83 }
84 close OUT;
85 }
86
87
diff --git a/src/lib/libssl/test/SHAmix.r b/src/lib/libssl/test/SHAmix.r
new file mode 100644
index 0000000000..453fce20ce
--- /dev/null
+++ b/src/lib/libssl/test/SHAmix.r
@@ -0,0 +1,99 @@
1[L = 64]
2
3Len = 16
4Msg = 98a1
5
6Len = 104
7Msg = 35a37a46df4ccbadd815942249
8
9Len = 352
10Msg = a93aed0fa5e163a82c9a934aebaab8180edf7de0b32f0fe99f9c75ec305b24609334cefa372c7c758262dc8f
11
12Len = 1016
13Msg = 433e88eb2f8aba562d15c18126fbdffb81d5d6c9397fa052321f5f78cd629708ba099b540da5451e949eeab8687a8d6ac35c531411cb37144ab5ff6a7eb46f1ab28fbcd2ea0444cd87c57bf7d3c02952dba3d3987da07622c16e7c086d90e88ad3d9d4afee301d2bad915d868f54197b70b23c9fa385c443404fbc9abf7e6a
14
15Len = 13696
16Msg = 2c46a76a9dfbae1f5e59f085e9c3d4b600c24b2d404d062cf948e75a3d4ab5b137a31397be9eb34b2a03c78367e0b85448891b511ddee1f787cccd498b172cb7e656c044a03ffde8e42478330fbe9c34072a9e99ce31b41757cc820d98e7d564e06694b96b66f4be34c5eadd0ae4e61fe6abbe4d7ccee855104fedee8b451a7fcedb793d469b0094c0ed07c97fda00dd8c1662b44e3ee6775a5ef6368cb662d257be561a5967893433a4b63f97295036a37272176d081545df00852bc5c4162324161296cd51f76433f2df867a5840f2d0c8d5be00b4dc89443d82175bf69c3bdceb97facae2b2ed68e06ae74fef36d8bd1f75f130cba509341dd54079d45de22845cc8e77a022977c7540aa3e779cb1127f39f825d4d78e55a967ef45e7c1dfb02d9999fd15af2914ba47177177d94576f1091a0657d9e04fe81e6be7b631fc1baae66584c9c26ddbb568750d77555c927bcda1fbdc15c7cbe3e3fe88ca13ff12c59b383343c12976708c0e3dff78be0e286dd32eecf20b71a09fee50a9d0b13c85a15b320b162690f399282798aa3291fdd2f9c40ed873e829388466ddd1da42f2de16aaa9272ccf44790cf3c95382c304e25ae8cb2fc9d9869808f3ee7d42cb143bb0c3a55e03db6d1202ca1bdb744e448640c0aa60d3ebbda5c21e623bb080f4a073a48822725d764e51d415aad1d7c5a7f17433d15ac7d849f910c375ee0899f6a576dada42fd651343383f286009902bb62deeeb2514de6af7f09892c20d0b238f6021f03b62444b1e1f21beeb89acfcd7136416fe7bd8f202e76afaf5345311798be7cb25351add2bb044d2380221009c4d1cbbaba4cdc8631dc0144f2778a6aa1eb3d3c81df0b1b2142fce111af8214d049e40f536c5d462b9224a978e82cc6c420e70ecc3cdaffb726a183c793845315f730fa4dac9fe46e4180397107a6a051f7f0a58ceb9bf4df37e1a81c8e9569187228e8037df2e59c52ba815566768bedc8e09d5e7bdc9f2bff23aaaaf133bb5a3332750f6124ce185e29fda0851addfa2c3d52bb6dfb530fd4ee27dd5bfdce5dc2f41debe6740274bc651aecd4023b098a7d622e2296b50d51b79c4e3f521695a9d43f038e8f273405e26584d3db179e7c1758114a3d39970df674580bbf2884405974f0b9c4b0d8b3287a2314f3f81b6991812f354d655f62513c9551b378cc2efa4c3e08b313c56cada52217fb6112eb8299b28445aca8f72e7170a1cd8bbfee4d2145fbe8d49c6af8831c4d4fc7177a50ee55a7b484261504af946c6bd5e1d6b89092f3c487c0568fa07c356fae9b8e831b8320289039746a435b122cfbc4a0d316bf90d481d3b7d979cc50d98c1190af8dc58e0035557dd5e94f437f41fab513202643a77748f76c6b77302bf40c392cd18731da082c99bdedeb70e15cd68bff59619cabcc92adcf122753c55afde0817352bc247d1170b8ddba1ad1b0faadfe0efbfc5fe6334377fa372c3435691f53dfc2ad5e08966b2d3525b1eec2d993a5cd4ff34278bd40dd80313a0727d05e0a932156152f3e11a190d8d69726f5c57d20f811e1e8932e86409ffdac96c6251c2a2976b8757adcac5d2de94931d1cbea866ec8bcba5774f8a7fde792f6acfd0f01356fd66fdf54a416af6a9397e00f848a2e9831627cbcbb52b5a868ec174e69b4cfa1ed72cdf23f39d7eaf4bdb318c188b1f0fe75655e34ad71907cdb77a1a2b162cd7c22d93dc45321eafb17cd60282e83736267b3e1fb249c307d49509f50839942f0f493afd9ef37db053a918e3ec83d801bbdead07554a018b8ba348fe9b7dd92ea7c5fc0e65a644ba19aa1fb6c022ab768ec7cb249ba17b9dda2860bd4aaaa3dc70ec009804141ad5ebc61203658e57a0887ec0fded18d844a96e79ba7e879c4253056f23e205a80ab1471953438f85848f4ab31ab175c089e0bbb97ea0dd6a67385770356741966053735e2cc2ecdd2c8c75cc045181dd7267584b901674b553082b2c58fb8f8be0b99306194a6f069f684535423304d40a268d55784a14260fa9c9cb1306b82f91cbee3c9f43dea9e50903135cc1c6505605a100bfa28564a2057974eef0852b7b72ce264815026d0759f691db618ef760edde73ec888e181403834f7221bb27a69479ec9b28a3fb0c3f68d4467d25712fc48ad78763f9ea6e8a2e85260225ca1b1a38b720e589fafca29f07257c5467cb74ee53189b8c81b784c43e93f98abde1ed53af60b27b13df6ce45001c6e1813de3521028981086f7d88ba13f6fb1a800f312fbe2f842eebe847fd760c394668cfbfd353ec14ca0366eccd7b4cd63318116bdc42e20a632a0d2b8c5cddb37bfc0a239ebe3800a787d2ece077a7968036b3d9b31cd906f888e3ed742cd769033e2c24c5a9e3c10b6d300db5a17dd88
17
18Len = 100816
19Msg = f8ed40e878dc68ceec52cc8e2868722310fb117ca3a52e1839eb85d308b8aa00ed0bf0b76aec8a70eba4f0d14d2d85c5a0e876ce2c8ee59cb36947def6c40a587aa07b368ca8e8a08367018e45b984de0d7f1aa46b977cc18c0cd9b7bb897cbb2814aa0ce8f8c9843e03c86c19f2ba95dd2ac4a466a93aae4b3b05055ff148517ecf43e286c57744a3e10a14d0c26e139a503e7927aa688c78609170ebe3b54104390e5f6cf538093a67922e7210e77fcb584ec9b6844e829be246a266460cb442bad52ca47255fb8cfe276108c36e02f9acbd3d191d34b93d29ec40d80496d1c1bb5ef036221641200e905598c54bc4abb3527c5a5f6258e59d4bf54a0498c108a2725428efc2047e0096b32dfdc6ec69d5d72f81301f881ca62a66c22e5dab9fd9d90084c0a36b2f3a0123cc5327a3bc7a12fd947ab57169ac533e4b6a2cb80fc65b9b527cff9fba26994c7fafb5102a0acd8f9d246a3a54178c23eaa04c0fdfd3c0cd980d1fc7a72b25d74df9b95c3dedce8ca316870c654f9ebea9b806da9767cf40605a4b0c7fb06f6b3f197bae7d8cde9daf38530e25bc51b68f9aa23ec0e95199b14bca96c91f3db15bf8432f714dc46ac87218691bc66cb3a42f6865e1c30f8394c8e68c0ddf5851ab7c5906a1994a9af6ac1c44d0d6b95ff15d9f77825ccea40fb9e516d45888f2378e045d95d936d541cea9c8ca52fe5f7d0d919b2b1c59a42d06105ea4f2943c05178e59d67351c5b2c0051c93a4045e512884fa656b772cf398af89081546d920fd3d24ebd16310506a786ab33293027394c1bcb7b1efe46b550ac28529646e8d2a5ae65c59345e24b44cd7b06673f3ed3b9008aa568a739c26682fa596b7a655842cc6b2758b583487c78d14a76bdac7033806c5c210828ef313f8efc4072681f5fded748c31a58ac933b4665c445f07d603e0905e49b84aa55146eb1c1c99196413832a05efee2e64d6732fefc629b79b37bb9390fcbed7226b412204bda523b8b8af5c4a8bdb263ef9f3f6c7b9e1de3a1dc257c1f33b3d54a9101be5b4f2a9db319993c2cd137c41e35c434ce52e859afd1a635af4d8852252dc5e28c729b2b4c96a56d57f3f3854ded59fe612b9b3a51fee3fc1c83db673b0cc7433bff2472bc74a2eeb6706605e308690fd072a7042ca6474603711d8310909e47063f46f287260a26c4f11fe492298a0f98d28c45948a4899e08fcf443a6ba36457dd8329314d53ac0fd0819fcfc3357426c5bb8d3dfd706e205a81091cf08f31cd3459854f3d07e503991ba5f067e3c406c6c5396d8257496f4ba3703cb1ba25c2fe4aa54577af782cd57e85a88a2d75c54039e8b7bb559219edd6e81e41acb6d575d6f798afb2cbf7f00abd5c9c7b0fceec79f9a0fb040ebcbb7bff3602df7b71357efacd37aa57019350bb81213508a006160acde3dae5c42f03141887eaca22d7b33d6791febfb619d11ebabb13e6c5378e9a72e852ddccd31cc53a43275966b7042ddc51485ca20e1c456dcc7020cafb5407548b044d332229911fc74d7fb97de25abff7efb431da82de2ed7e25d0dcc06ffc74e57ca93a6a9f64d76a5c39776fe2266f88d6d0229b527525fd2e22a1407e26f94c5bc6adb1e7327f3c8bb8d4c983385c579dd8f5623df8cd6da569c7de73d9210e6b9253a177653a13ece075940fc81016d8c35fa4f6542df5120c174158ff32533476f4e059e35117081a24798fbdd1eb10f82809836f8dbefe755611347f75423dd8571695960c6f66cca71f0a01e8fecbe1183bee3335eff10b4ff8104132040e2145ec3164b2448f60c730887b9d7894e5f7df3f876cb17136c99cf32db1c02fba860937378dbd093c4c5112133781f06c8ca07c527c2c085e8ba5e52b399f2909e217aef6e3035ecafe2caeb1004069dea023af7eab873deb5ebcef2313c9827821bb9f89fd3d1570a569673d3ede86a4fb13dff242eb98450a8917fd8865c56e0a9f11d72394b79808b0429f3a83cf2465161596887fa2d557b367a1de9c7753666b0cca9c30cba9f0a749c03c55cdc7a6d45852c76ce2010de3e7f75d95228efdc79949b238d90b25f983868b7f07f585f7b00e45d9e132f3c09ee84f794d899759be3dabd46a256f4cf8da71270617cc2425b24cef25d1d2f3945afa6f81abfccc858cd02e05619649b1a5347650934105c02622d538447223d136a8a0455cf3c6f61f696b32266197b5cd1d936fd3ad4288520fb4a2f59bf95e659f33210446ef18debeb679dd99de0c3c74a6eb3dd783861f5db4e94a151c42ce27519d0bbbf1f3b1163563ec06c8bfd881d94a3b896fc07352fc97ada73685588a2242da1b718f81bb1077bc70fbd58b8b52163489ae403838b533851bec30ed0ecd97d72d1af534f3703db59f1f563bdc39d690a0e90e545506463a37e84974fd7b256bbb912cb4077d3e3f5bdd4bd2bab713b696c830b1f2185734c4d2dbd49d5372fe8b813ce73f5e01c36bddbb376ef4541033f2b0355613eeda8951ebf7377e08f967902eb7e23c0fa798c6ae52401721053f1095cacb1e9496500e83c412236fc21566090b3a3eee55aa402c0b774802fd81c9e8579761cfcfdfb1aa23786b2dc35dacd5ca8d8d283369f53e4a5db18060c2c6b0c303052aeeffe169fcaf7ecc63090a9ade245045ab9c8aebf738772297caaef5f857322a597846c7370083d409df27612e47b0cb240daa3cfa51c57108612ac0dddb0f59791289ccbdb3a2cb1fa9ac31a23dd5440682fb373bf0c1f41c4fe2185ad7c53eb69552807410053b0c2d40132250e637b8c425e6a35d93333b5b7d0557927b6179c848ec455fd1ab38348c0e96c60b2da49bd15118df64b6ce4fa48fbc555a4b2874141718e731a40b85382ae6e86ead31cea77f83bf5c063bf1febf71688a832d615e09d6f14badedeaeb6ffbfe343fc7274e78cd46a2aaec0a349c5f133291ee57cdcb65c5474e46294de6bb50886bce6c6f44dcb95f2a4761ed2e6c9e7bfed51e0964afab4e0f7e0b07960f2590baae66b1ec9a63ba0fb6c0d27e81508c51487dbbdc9beb8879fd58c188dfc774b3d0ddbd77ee8bdcdfa0ed8a9387728e12b13e8b3c10cc1c132bd822c2147c5ddf9a993aedbf78ec256db1be76644ca8ca7727208bf89732657152d34e948d73c47561d156f773136684d4162d02260300020123d13a95f4f835907c344942ddeccafe2abb7dc4792c4f1e39c24748c63cba933b16be0b8853e058c47a1ae2c4dfff39ec2339b345fe3557d03c1df91a0607a711636c4416ffdb73532aeeb74f237ed8bf971388a0659e4682a46b8327e751034cbf2c87c7828da9d24baf07a742ada34d1ef38ab1e8f2b4f801192c146600709533e61bc2665dc1e9e6441bf3c4f6643bc0c102a10f9a69da5b0e3d0a0c7cb694c682493032b5853f02953b5c2fc0e1348565389762fc2dcfbb34fd305f2d9df080e859396ffcbb7da78aae0a0d72e3de76c774bc6a81c87f2872b6afe97ced5269009304a4992c4add0bbe24e57632e19ad0fe37ae910193aab0aeae32cf6d618ab33eba59f6a04fad00b1d2403396e6fa661d31b695a1b349d62f56c08fe6c6eae7a482177adf341e51d03ea511d7959c721bd20bf371860ecd7fce1d25212891850b85648db0a039e6638d9c78bc958add3e41341536b5007be63fd1f7e3308876bcebcb97dc3b05a7b2eaadd00f8fcc8dcfa7b961bbe727c9aed1626ff786d6a0ffdbd1002cae8a7d047b6181962a686c152b2341c7c58c9f1dab5af424d183ed1c7d003165a1d04ea3683ff31a0f68615af6f91c21f736e67df641ed31b998445afadf9052bbe004d5dad08f62e5d353e42fc35a92242d8414d99dc4e7e81c8c027af686baa5c185e3f99abb3855b22cfdff0a62e2f47a632b7df8e00e0317af5c24ce7c64077bbb15ec27e062070cd3eb8e549ed9112469090ad9a96eb59294b021eed81987178cb2dcff67a9a2e930f6032c753e203380f8a7c987cea393234699de03a1d09ce204f0a8b6d5cf522b6887174fdbccb08f3e7c4fe2f778254465b32766c48812a45151ac37ae354dac87419f9476baa27e24b2f322b2da4ddf579750684a5881bae2269351fb7de59b9d5a4badd8951135f2713dafc57215dc626ee170fae7f20bff98e36b864e1fe0f0f9a300c903069bf0e0b6f2f8e78423cf6063e89dde6c81efcf26ef15510563c84730f611ac879a6628e55115e1a29de6945d37fbe4f803fcf2e344712d9e0d6f6c79f8773a9f199b705235e20a7830ee3357c5dca29d7a6c29a3d2628bf2c42c8f076cc4525301d8e1860729070dc53164d9fa08bf63cc889eed01b0130a7146d860bbc09ead3865a3082db0836a45f5506c3e46e452e298764939226cedfd06700e4e33c6b4a78add601140249596831e97f960b973a4e4dc3fe2813fa34eb47f998ce57270368fb81719a09298a223f7e3931ce5cdfab3f658649533354e982c87dc9e49eacebb5bb4af9a767b4f1c03d774431168cd4fec1b2726f1aae3f9a062a825f3295557eebf3af4784487b869fb049de44d03fee71194fc200af72103b157431935b5ab9bc122773ffd313d52d7acf1078386090fc011de695e71567cfd51c06317d4ff8841ceeb74ad35f4e5f4d20921123cb88bb2079674ad39e133cdfd6478d69c9bddc7a818be5d7b254bd9e0abdb030f52846fdfeae8ff370a51a9c5f6017af3c6c3db17c5c614ea18ab0e3ca0dd5de621217dffa36e5c5318fe191040a50cc3ca620683bc34da6c142e1c50afce28a86b8b66d189adcd755561a647080d93f3ede1cf54c3afb7e863fc8a82a2576d3f79e9b2bb634e598507a3d7d017e0176b7868bff3a3dfb4474b3ce03c401f33929364e727fbf8096b77eb351435c7a113b3215cc6246dd86f1517a7e550cf828900248f7c1754e40fed62477b296a37d3e53231360d012c4908b466e49b0e620c0a5031228009f259b030956ebd70e49357c3c3ac2842b6bd6e3ca5a3e985dc03f7105681fec03b320a7ca753b782ad3b52fd9c8e3bd980b48dd6ec8901dbf756108e85015821c880416e0693e0479cb31c0743450f6d9214afabc4feadb9bcee9def460a58d3a02d9e3039970068b8e3fd0a403a6ca7f2c71ae2b46ab3c731b1e65e2104c47fcb1f69e7c8c6df8c09b33f2e1cd4192faab316a44536dcac608832019f5765cc5240eabe3c87445c980c299a5e7ae0acc2c2ed19fdc8f011515bcb00476b03633c7669db1b44f97f6cd402778e9687c740dbe5686789b79d0b13f784a2a866eb91ab2d66f064c49e8df513ec348fd7272ee548ba08e1f9f99696ffb53677550d59c67f88404f6e610455a422d9cd987493ca5c366a397dccface2bba8e3e99719dafa768956cbf6fd8defc4104b8925878716a0514f70cbf3fa2c2bc2f66fabe654eed3076257e71117665703eb88c79e4c2b94e8e856e7a6ef90ee2a358409db78b98056ce1750eb80725d70e35507fdfa5933a61496ba48fbd5555717b33b59d4ef211fe096aefd478859ffc97a41372023ef114adcae5a8d5e03c21369baf1e7f417cb40326bc6db1cdf0904651dda3c1039a2f1755e7c329f7c03bf33f324206ce6e1638711c8c9a45f153aa1f847cca2a5d3af1d24fe7a1e1094819e8e712cbe10ead1012b7371b35cbcc2bd5b10505fb63bea20ac81d25e83ed0105e7595b6c28400f4d336791ce4a584323d0b455bbed44392c5f86c9d5287593f6986d4b0b8f9974a7a4157859ba801251d3b44b2bad84f29cb87dcf1680d6d10d1bfd59f0c95fb7bd07fdb3ea2fccd6e3ee80af438956ccfe31e750972f893ea5dcaa26d077fb3f09d990c2f41c8707368bba007803621ecd76540cdb8705435d74f4300eee04710a936f241c034709e625b0dd5dae1f6e86d034426819c365a05f5be420cdf4042bbff965a666a5756f67259448ebf742b6ea189fa17a4c3bfaf651d19a8a525f09d9cff637c8fac02eaa58d3ee3f7221da1e61833c0b183cd9f47686f09597e8115b435454acef80c079eafaa22b18927d07bf8b7c5ebfdec9c42a52b7824d45decef41e6184dc2db1505ca6f94172fafc10731706e79b9856dfede353d2eadeceaf72a302e3492d7dc81e3777e4e9e1f3d33cc4402833ffedb241a75a09e9495d671f80ad3acf06823bb04a92b815edd0ca7d01dcb3318c1ae5c62d3e99c0ec37908b45b51dd65f6b45b34ede2d6f553f60a45e20fafcb34ae4dbd375f52a5db9c62650deeee78e955087c2bea75ede7c304347b171fe0c1a2a033894be6e04605271307f307b2a9cf6ae24b8c87ce033a3fa4cf2bacdfcf54fcccb1f580476c7d00c631a8529a9eea2a713610341e0e25609dc8927e51c58a0a9197a54963b5cb95877354f4b8316df02ed2bea367704a12274d96bcbe0d0d728923a368bb8ab98d5db5401894c822632308ddfd309071fb4b477d8eac0ea5dbbc3e3606d8510d9051dfb5e4b7cdcf2c57c1b76902d864c3109c901da53019ed33cea84b407490486ad9f980a8a63df3d2e3921064afea137f35179130db3351f5bc3f5e7d590a5ab08b5415efbd345f9d57b71ade7dca939efa5a12d677b9af0af14468176a43712bde10cb15787c18bf066eaef8abcdea77d3a0c61d6c74ae7b54fe90940d0233e4b874c9a141dcc740d7fff43b9fbbc012a933d890232cf74fccb7ff7eac1148e203c7381b7f1d1429b1b1152ec25cbf7562596eb402a9328e43b5dc5cae36592da5523f0b9907a6817ecd395a7c778daae85bb11372b20641a04250b77b3a0ece885d07faf9622650259b874536d6d2b92181c834dc111b6fcba483167be40ecc922fb87006f63b9e8e632879563f37a8f712db9fa68c1a20ab239c0116fe022fad1279f3288b8e74a16d447e467b6381515814dd3aecab5c2a09c400b44e9100c04c720dc7e8c6d9460002da6c52004c16999975fef8752c2f9c229cbd9e6446b226cc454bd68cd665668a17328bb30f301e92ef5c7a2197a326df5c99b422096de8af231d1d8872e6e505bcfff026d4862f28d4bb3856a66ced22c9b0587451d8da4230a38561b5b1c69b523a4701a2001382aa82fcbd60733a14696a540227db44aef346d6c0a7ae5173604d59eb828614cafc1b8cfecda054dcc7306f73925e6d1af56ed74c51c6cdb66e9fee8d7a0078254fedb0c0f5dc85a4686870709b499eafbc8451aebadf848b0598ce8f955688bd2d6032abe10d1391d67c20a049841f95d2ee0c8deae2bc1baca0c098d8718cba1ddcd968981c47cd98d247aca4f838f3bf16d092eab8be8deb1f8d504d37cc44a8c96c9f22f2698036d4ad3bb48b31f109626565c147d20a4a7dfd61fb918f81548fb4f78875c1d138e819f6822651b93a3c92ad77793fba5222d870ea671f9cac967919d18f96e92778548415b2e170d90b201215354fc48a77e62823a2c2bb354782ad052732f08beb278f751529416f37d83ea26248517ae2ef2ead28c1077908995a2d25db0deaa957bcab39715283287fd626ea7388abccba2d90e364a7ff4284c84f70da68ce1aafb5be0401cb9d45e085aab41892a49e10cbd5baf2c34f5e0ca076f2772abea6f622b66020d546f8c2f134a87f96edbeb9b08394b585f2c2f98aa792f97b43b5f3aa9c34189804a9ecc2cfaeefbd0f967d85a25bf3136fd8132dec38aa82e4af6ff677682f3b62be27a180aeb22f918c24f23bf6f5954e0722324cccd06829fc32ae4fe3aee6e5a03b3651900e13fb0a759e544d033418b6ed40d037b4549a0404792c8fddc317b7f028493c4c91d6773932f8486417544f3d007e5f9e6fc02fadff175303f77f6b0e1f709bb3d3a93b38552ccf62688a39da1a602dd5e122e6f4e9171769ada5255cc5cf938dfefcbe3ab0faca434c42dc8c357e89a3d1488fa3df35c3580b124ba3bf6d0d203d586707eb692150ed05a01bf9de5c4e67bb948088784016394d47abb853f2b6b643a066ad81bcd1735aed4e108a8c1fcd025b548de874eb60de7f3c568728959147d1219e4b830e06ca2bee1f8a035e28a54ee6958d4821a84e5d1e41139905f7ec60fe67ce5f4eccdcc2c3d1e4a753a32dd3004970a4ff3824471822fe2b5010b9b6c6b01336dbf0181a95cba2624663215468519871cc39e8a7f4a151c8bd03363b402020f2fb98069b2cb8cc1b7e930938e7540d95d1d223e47865135793f9eb573660ff79f7ed2fae503e68ba44596ee745fbd8fa562c5c666d174cc01b1961736e18b8b517161ab9c8058026e0ddd6c94aed0086a26e1b959a5e05eb9d8c1ff5b2ef518ca23b4f265db61b499a48cc46bed28d23ffc1e8d9c9e345c06079ad47c88dd4e8e286575bd7f9420ab9c2d5c6685488b8b34d4c9ac04e1427ae0994cf789b48b01d1db9c2fe75fc5187727bb11119f82d0739ce4048467a08cd635bf78cc1b6cc9c28fdc199d351064a81456f81c9e56a43aef7332973804b06b18a26caa62523a7d0acc272ba49124b17bb68800d5756afd34ddb2b7e2dd8a118aac3fcf39d9f853c4d2c4fd3ed5bd25a6604d68d57db93d15aa1160f8a97e6c24238e84f272780966867f9c644ca2775cdac4af0ece036cfa6ebb1cd9d701dd7daec5763c9a4de0385db383a5647918e79c6a6de1f4ee1f6b722c561704c8d7efa4710d78dfce8ad2df0d3d82cbb59cef0bcb001f70bdc6e17af1a720b117fe02bb1dd527b18e6bce70e9447cd0cc85cbcf431fe7c006f5e4ef878a974a93b25f492847c9ae020583c9d412f4124246164d8f080b615e2eee267a7aeb5fa0974de52cefef23cdda7b305a33a91e9b50471ceb72dae337c485d636e28d6ee31f5705983808b1567d4d4ae820ec445c56e6a404cad6b408691475397c0dd6cfad232106ba96e5104052700a653e21f9ac6d79578a9f52548f426a1e81dd45bae30acdd4d22a2dafd633564d6b2f45e7d35413503c955cb0a9784b42ae8c2a5933a6729f3922f969a158540dcd201ecb6e32f88b5b4921914a2e8f424c8b031f115ea5d23a21e6f22439ffd7e5d11b08df729f65613b4f6ad3edbc9a066a5e712ecbddfa6fa764cdf170c0485f82d924a99b7e7ad8dc44c1f93e49b6469a9af3de5691944413f1417b753bcb84d5b7a34f362c383cbc802b0c88bd23a7ac471b9287571c42081b1134bfc8ce104a550942ab1f2a074cb00a90558d6e841ff15cfde6951f03e450a1bfc90dec6c513fcb2692ddccc31d22e5274d41036656183c72fce208e44920776f196193137ac67d6d65ce9cfaae774f23a86e6ee8ff3a4e9422a4667d971906e5496a4e80278774899c882708611bad282f6c1d666bc5e7c40082b43a6e98d494a18e9b3cf7f154fdbf90d786e59e83b72ad0ab893c49aca50ed37ea5202e650fda54f5c46ca2a35c476f4b009c5e6733232275abd1341199b63d22386c484cb95c43ea90e609c407bc79ddd00609cc2eb0d82848db239b249f164b7ea384d0239fe1e64d04955b9297472cafa2ff272c5c78100aaa86cdd8120556f25652a3c12da5853338e3be8f505d93ea03cd1cae7e78e95befdc0e26b760d11e05403c348e0523fe036381408033c009a8e1f117af5100a6eb91f08307df465c20bc1dd029875ef7e49338689f602d98f2dc690a57a6f2864e57098f8bd723574944ad3688b292db6d01387a16493912722ac8f91fd12b748899bdaeabdf0479df788eda440d7bf30d1c25d78d757f00b74bb556506637fc1ab87162f05d464e63a6272db3fe56e9357275035d6b6bee32bd92c4a1dc94778551e94ee1d8854f767bfac3811bd0287672aaa01ea18c25650f05a68cbacd9158e479b508e72df778589e1e03dc543b60bb3b10399e5c50de9e728e69774fb3f5fea757ddefccd0f9da75afe4b67f9c54aaaaf646e858fb001a6deed0a8a769ecef0689c988de566b6015fb8c40aeb5f2df7ea4bee60e8e69d15c4a4aa5411dbe63fbdd6418cf025d87f37362f15e22aba83abe1a3de9857c71c2234023b969eacc0bc526363b7f30b092ca114f2a6cefb34394d146866ac86a33fc497a8cb8e2a5bac398579ff7958878421fb08fff4f8f3deb8c9641b8de392647df3017a5467f9d7b23036935ec6e188dd6dbfb544b8a9e04a4b3c7fa1e4d1d9879daf69986b8083e6eb023a4b5eff80fef17f8f65433c882a21565a919448e6091d1b61013fdaf9fc3e45bbe827c9b4ab10b05600a1961e81d31c7404f8e0d32bfcac2937eaed811db167dfdc29286b0d51bad2bcdb9dea76eaf495a31a7fe717c1c98be374a36271cdd06ed06c02ef4c3c06cb42f73b3332ed488416010e6bf2f4dc4dade6e2e61f19e9306bf941868f59fa0939005743dd647f0a04b576a7e71d4c383c479453501e18ec56d7cb79fe31ff534afbd8609ed701ef163f9de31bc58114399fa0f22b62c66c380e8a10c34b7e731df2a8d39dcf36fbf3a66d67b973e3a94bf6ee0bd96f5c76baa76492032fdd2f59ecaee403d486f543f2cd7ae7b0dabe1b5566e681cd40d384a94349e9668650a6f2d2daf86c59a7b02ba466cd03ce1d50c3f0ca4c02dc4b3d1c0e7b9a77df9eae0bfcffa32117d7e05adc7195f4278c93497401629897a58d08ad7141ea52e0163f14992d7a284e7b875ce4640b4dd48ceedad1ea17d8ab1e760773044845e0899602f1bdfff4d42ab80c0765d1a8bde2ba0a830c050923956d06c80b182264ad19ae4f7c39e43195f7d421bdcda00e3eb5ec5ef2ec91d69df691ba7fe250352acf01fa92af5e2c634b9c7c97889e9147e869acc153d88cdc18908f882f371ba9c1e13c26e9cb8e3cbd4c5e1988080ca65a67b3a4c3460cfadbec904d853fddd2f5375b6070941fca53cc106b5748480213cfbdc1c34320a0478b05f76fd0454c75eca069cb1fa7b21704dab67dc40d041c8a1040db378e76655636ad725219c049e6536982d6ee9f11dd032280e622547c7ff44a938a1f233c356a98182d22d5770fbc871e20bb37483dd5d6ea1551993b95b30774a49b50d411ebe0e8c92834094e23ec2664d822c40e96fb42b8607b62b6949e05edcaa436d0ffac6a8ff384068acfc0220c0b098d368fb8113918a4f8c9de37cece74c8695cef2427e54a6e77ad092a9b7f1d94ac9f0836deff41b905b5dafc58ad6063759b0372a634f69a639e19521825d66a282f489c3172a3659264d0132af3571e637782bb6fe5c0afd24547612166fd3409d0991392fa054ea5bd07a4cd0921a13ad7b62a0b5e6d56cd8adb7f3eaa5c99576941c38aff311c49a8c9d8c755869302a2e5e40109c8365a551cd3f859b9421be189d3a0e9ed78830d5cd6a2414e9cc4c25814d94d98f8848e5386d6dbddd65d22b96c5d20020a5dd409c7e5344065871e57e01c91a443501dc8bf619890fe231319b5480c3879dee618d319962596539e2970513fb5c0c8eac3a71ff99962779cf1d7e916566d0e29d121c5cec5d7302a18ed00be9316f3de8c669a64c2a960a588f9c8a42690f6867cda7146e8ce27aa6a7fb27606eed9df6a235a42d17ce71627446e206e879de56025a66556263f06684dedcfd6f083d6a707e5fc8f8212d716e062f0f7fd0c2fc62bea93d68581265a803c31cac3f8ac8939c5f8c464ebd19df42c7e8998494af614c8383294f3f3883f2404ac10404759e182a038c97aea04a85530ec005e203807c5bc30fa9f5339b32fb0427e64915e29a25bb25ac60b92256470e7de5298d42c6b88995f8d2fb704e49d55b66b71e237af90fcbfd71d9093e1a543da2e9911ac4102346dc4704859cb33ac5f5dce2b3331a9dc9fb506461a5436c89bf90d39afcf93cbca4cfc35da6ddb112243928246ae0d1ba269b0fce0468d3ecabbdb925c9ea3241e2dbdc6b151fb4aa724a42f98b0248171fa01fa103f116d0e7deb65dc359b09126f9a420300fd209508ec7a50be56d5b470e387d0c52a1d104625f9571ce1404d1b7af3fb00475b95f752ab96610be112d33ded48624015781e7198f4dcdf917839471fbedb43c34efabe09941fab6b342cf672a29dbb1eed0db788dbfcfcc63bcfe80f7718571f691818dd6f839e3cc282f85f03fe0400171cdf1235049fa53de7450b4c40ed398d5a486f52124c1c63de2afc950e81839f52d17e2a7d32f82788465a65da6cd763c6360763561ed2bf47749080549b6e2db87514e1ee1c85a0bbd346eb6e3cc29267cbedcad67a287fc5be65ec59ba8b6854b31c83dfc5155187d4150685c5c2c342ed68b01ac9e44b60f0c100a347a0f93074dd37d8956fe2f43110dda66e9f9e6185c23dab74cfca21f3ede4bca87687549ea02662f45dfa0ad27f9959a120cacb7c419810e1b1a50fad31c12c47d5bbc61bad77044aa541d29faa6126c60ef088b82eead17a52843307d4bf798b853d90d14c5347ff10615381d85e964331b7a123d15a77a6790d93e920052ddb4db4baaac5e2b27b66ff955e53b8308151c81da4711189ccf0eb393c5bbccfa1f6c94a8d5f4bcd266fc6a12061967ce836ca042257368f567dc42de6ce0be84449234a6163b72069f25b7ead4b2003e1a7665e87ccf211abe94175d1c11bff2c0b6bc110194d34aab96934ef59804cd26e4434ba166d9833fb091be37b139cc10748b881c93690528a96ccccd2dbe024510b8da37dceab567dc52706461c486a0463369cbb99bcca2e8a4d2e005c45401964722a4b3ed37c351c9f21685e8992c9634349379f41796deebffc2928058c8ef6ea37c6e4970dedb78d1c2a00ea9e1ff1e7708470a6c60e6a2b1e966aa872776afdb238e97f716b3df8dfd42bf0f7ceb52bf9eb33731bdba5987b8f48b4599d67b383e77413107857e951ae0625059e5616ccb41131df9a480efd5beab3a9c99615921caedc53dbad675c00ba1030577db1d22731677914fa958b44792cc9c19e2ac71ebe61a05ee67ae7116e39e1c0d103f18bbc9d531164360d901da8234d29fb0b37cd2a60c7aa2adb2a4b297ea2fb14122ad95bd4592ef86c88fdae1e37dc8e44ad03c0fcdfa3801e93796771c5a2ec1e4ab12a64b3ffe48e7442c6224661ed5cc987aada6e778399941f7b20f16f94fb346b916be87f005c9c13789741602039d38270643cce3c347565eef5ee09139330301951c15756be47994de6f1802dc5131b9b011051b1d87d744756831a71cc8528487f032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead7a47b6907d7aa95b79aecedf4a637ead8fc6fb8654c93d13ee79f5d6258dcc61993aebc65e4fc14eea7d006e31f6e9f60e3bca8ce52ec559876fd20255e507daa99b185671ce1ac11d448c30bcdf97b9617195e0ccd2d15246308dd6cda74a8071114327fe203b1adbaa780f3243105c5111636a51dce966f5652e39d4f91abbbb4576234d6cacc3ec57cef2dd4dda49a6c33d12bb7595fd5ab5bb15b40301f34ddfb831a5dbf62218f496c003227fe6282e2ac054c45e7f3fc93e51b3ee8690f08612395095a0a12729d663eded879d9ffb325c62f2cb546a48bed51ae232fa6ce28a2494c132a6e09d98c2e3d478d5d2d15dce2e2665e4a3db448931068b99899c2bd8ba87349b0cf9e3c52cffdcf58a59b4fe0089b298b42ad7553f831bd60f5cfa3e09102fe773e4c05412973a678f3b3ed420433cd664dc7f218e816a17c5c9013ecb84abf2dd073557dbc41b92a91e0339d57b8b077a9a44d56427fec5748c47c1460b2e2412094db6d0ad06dea0aa0c1368592594bf0b2f590a9d6149e44dd4adc4cb42e5d9940d59397b83b33b88604c210694e3fbd84795c80c1b09ddb3b1ec8bef6e9dfc4d7f295e551a79436007ca48aa605ef5a89571e59cb26f2766e564e39d3bb441deaa0c8664549881d90a77256c0f6c77241fd6ab74b0e2890f78ff16fd2f9271ef96ebfbd0b878ba9c703900752b7447f4efaa60bd9dc9cd5673a36b39d49f54274caf03c0cf82b95141fa20ed3ce02ebf0dd74d9eff8eb9e2dd3a2976b244b12fd33ee75c1f1c459f86a1cefbc817f42d7f43ba406098165cbeab99df4fe751ae3382efce32af252e461652c7598161e74fd8eeca474fab6b1ede039935f2fd4d7562623b90a422a78941f47a76863d95857c33653d1b42b806bbafcfeccb7bb4a0c58acebf6104b2570afc3ca88e4fdf2719cf39c964a1ea7d2ae4a7fadc938abc95adac495093f6b959b1347501606b3f960b6d739291aa8c13eb49e98b0f78d2b91400b6d8961cb6165c8b684738e4d4db2f2ac30ddaa03a5e0cde4142b625e81907f08c60d7cb5729456806c89ff0efd08397423e44738ff38f8e88684f3a099dcda455521caca37ab4f4d9ed5d37975d4fdd778b97cc93babc804864a35e3a2db04598152e67a2f1f157681c3962d46ada23ea5d9a524f9cdbdd08a07a3a85b1f6fbde11d5a35c7743b83bbefd19aedf6d92241d16aeca7f33cc51839b75f111e8edaeaed808daf2f43fdb3c6f032ea45052ac31d4870c4d0d76aa75d0b88635ce449054013f234c4a16cffc58c95ba1cb8a0a0399861eecb1039bdedfab4d05f0270c6b16f03f6b8e629f687f133ebf2662c7f930530746679aac2791f54d6a95bfab5be0c33739074ed4e7ae88dde4a8036a7d6095cf41776366b6ae3f8f4a0734f48c275e129cfffff5e0abd042f99a957bf6f0f47fc7288750f4fe30198f8cad7067b36cd87ebca08abd3f9475e7443f83cca91a1ebfc42ef3494871f51f6d52a5524b9391c687571be5327c7c94ee2a096653acb410917fd51e56a92be4f24c1db6b97b465ca84c31c04c2f61eae07e952eb6554aa4d8a380d9ee81c1c462c360fcc3cdff2867a953b655562cd06162af8b99bbe662e0c27ce4d9a1c1a907def48a3231c2110c930a2f1498e32dbbfee0e5c5869332f3024fa5dfb0327a27c663cacd4e9902de34dd93529e90eb347bafa5035f56fc578e8386c7571d1f0ba335225ecd8be026b4544ad70f3af11501a53119ee39a8558ca0ed5b3d897ffb9cf0fcab55a0942d3bf7bc6b94ea27a6b748f2cfda431f35252c44610b7e843ed91ebf7e8fe10638f04f52d6d5a7752ec62350efcb7c473f80b1f2a26805151e8346d39d23551e92fbe372df7979c3f756bbb43f6bed09bbc6b65fe6fd241ae1c2f1a0d0b805c582853b85502968f9478e9a84895f9d4ef01ec4f3f571e57cd0bda68ee1f6f7e14fb6e0f4ef8c7dff6796472a935294fc27b16216966d5021339ded059687355b42b55926854bbfbd9f974a0c26eadbfca8a6183093996cf252894e6db910c71ca3ab2e82d90d371c36b92c9409cf7937bb266ea9b29c41d774aa522e103cb30bbabfe872b57beb027623742806aa7694a859ede9bc1fd7b9e32880b064b0030fce1a0e5cdf3ce558a5feaa32e323dbfab6661c5878c9377ee52a615b7c17bf1228e328aa20f92d070c71561969e1af532e76835fb0436810c3d87b982217edfb1143bfc3405ac9f6f3a50145608dfa8658b0ab642a347255c55b59cd1c5897b2cf625a0f0706c30ca1c1321e90cec57b7c3d1bd1af455e3732db80643383c41eaa6781f63da6233360ee720cc04d171ae2445b0c071e339d547f7ac32f407d29ec7abce0a9e1ef5276544877bab2f84bd2eef47ffa66f96e7170cd54d836c9badbc59435146031502c1a3cc744a470f693636d9050c5b894d2d6047df60eb0bac16d905d46cbf017ca69d66427cb88036eca4ea9d0e579f6bfd8a4a850703a0fe49d39c107c9358e98689fb62bd0475aab4b2031446b437c7f9e373caf0270a28d7b15c71f02079dde401e26175bb6e392106a9072021f0e5c5145a1db6f595b032faed8551f6e2ce318db1ab513db876a3eb42d225014949c19543e9c5dfd2290e28c5d72c87223f0195ffbcba1c02c7d0087721efd2af6881dee7dba7565e07abc35bc3fa41c6a4d6a313222ac6dbb117c69c62db2691c68869ac5fc5e987b0ae4335f815c73ea4235da2582dde81d6fdae5911617daef847be17f2bc09edd88830eac03977f89179fe03eb2dc3b38df43803ca2d38455232549110f4580ec3cc04c0d8cfe493013d2cde47c506ef6a8dfc42d998f70378fac5ce4709345926dc477e9e339d8c87ff6287ea6e2873e14d538cdc3f2a47e0e37a2601652f5b665b616a7d1ef3537a3327a76f93990f7694e6484e7a52a10e9eea2edc92b99406abfb2b11ec86667c7af4a333dfe900bf071d1bbcf4f0ad768fae4f450c53817c507d26e926e753e3395201d3ad89061f16706d841994abad283f0db74cada25beb5fe46f48669a62e0b849cb77097e1b4578b45062af4a071b04f0cfddf87519cf2bfa10ebb4b860239ff187e6dad73806ae968e6ac0f738baa88edb3ae4883a9e59be7a6b222c5f54818f95578daff9fc7a7aba8c4a41a699923e85ddf24a32bb71c808516f64d506058a70539276d57984d75161cba7d53a4a864c51a249a6b8fcad5738dd0055ba8468b56579ba5f102642df65c598490f3a0c9b1064f4eb1962c4c38bfb7d55d496a0b0f7b3f90b42f733d112c89176aaf937eea4bada845f3ca4e9b56b3a5a06b4c90fa4c1914ea47020c2f32531e270007ed389246906ecf2c4465f7cc5d6a347583dd73341ad97199021819be81100d867d628323ef7552db945e4c0be604cf6c4a8197958bcbd6c1879387d3286dff979632c54baba2a35ea84efd7726b662b94fae61464d069e0103692599fb86fdc3a06e01c6ae3deb3de6fdb21806c716e5f82b784e4ad3f0e2de629a18e3a2309003dfde9dde8e5101b83312f76e811277afc286b56879f4eb80468e58c60bc088284d05d725ddfe3185b7c51b472a7ff7db3930839142d4a452ddab628e07d43375801d7c6a711a55b452748d770b84ede35920c1ac74b595baef963d21df9418533fcf959593ccf5afccc753e86c4ae231eafe77a158c2472143faf169db29bf2b53c3288d8b3c9added65778095f85e2cb471ab58362041f0a27d874c42bbb06385a0403ca193cba67cf70029cdb7e73c7e2267b856fa0b8dd4c706b45e7174659b0ee2891df911724324f7ca5daf07c912b9b2abff762e62a1817688757492975db7185c4695f3a90895634b8d07453b36dd95197abc31d5d153dfb0d0ec92639540e99d6590f9b394f14c93a5e829fbb33616e810f59c502be44a13b700fd3009545e34c211abf9afe1bb8ced793c6f516d40010649f83a78ddbe9b71d8596582997d0aa54192e1200db61dade30500d72a184ca7dfcbfb80e5442f489d316cc8b75005564835d4b11c482e2c4d0d160f14a8b13ae0a0fb0ba5e3b782770aaca357df0e1c4d1c3b28b776a8b3e0da1abfd4f7190673fca1e1c5a31c688d6e8ddb21300e4178d07c4e854a718ac3f672b0120d6a54c16957c9ec8c444208e47737bc4eeb0bf2d801eb2fcb72f91fe988aa75f38e6cf26e858dc2a718580ff5d281d13e8fc3e3bc30c75c0193481c39c375a5b06b962d9491f3f1fb80f1cb27067f0709e0b0730573a9b5f5bdbee1708ad84b4ceb1a9a61e4c41e90655764057bfa07b8c81cc83a315be1aed6a49715479c0fd0f53f625fe6c7f36fadd001149ab978532e4d0de3d1a38934c74265b161899843704fad16ffc6189f42a5cadec98603e0f98c6889bd4a559079e074cb40678fad4690a20d988735280a1ee8ea71275069132101b35c18ecc9d3c6eceb4cfe9b165e4b6acc17d4f113ef8283c0fb6506f5635401e916d4f7e7bc3cf49aed166587a0c72cdbe673f467d81bc2e9cd08cd8dd16d90b353481df31e89b45e8b
20
21[L = 48]
22
23Len = 16
24Msg = 3a35
25
26Len = 104
27Msg = 7db15b3ee240b45d4610950996
28
29Len = 352
30Msg = d2a1efc725c46cd6a19760f49edf0bae823c1b4992ae2260085746cf65833bd008e56e64002383f51f960239
31
32Len = 1016
33Msg = d11ad1253592c094746da7b5c88d329bc3ce1929913b8be07e82d3f6b7a536a855f31ad197376eba6f2f4534413fc4e4e7673fdff8739f774a710754b568b7c61a473059a41c98aa4e86617aa66d2601d0f0d584cd9f132afeebdc0ce3da6a8b290059e6e4aa080c195c42ae7f7e1e99865223439929b0a3a0d79b46ca6419
34
35Len = 13696
36Msg = 2f7a9929dffaa4a4dcfeea1fc37b18e3cf935abbaa17cf9d834b3a8d61e9fabfb7683cfc387d6f46ece3f8bf845827c7ebe86a651d6dc1e83c5772cee1a9fee4b04453af2f68430bd87835126cfd1b3f8beea4d3822fb27864570e255cb65b414197480b6bc20a39c5450adf2474da93d72f6ecf8063899722d3755b7a19f71e93e782d89593ab19ddd3ddf053c54e0bf832311fbf132e8b9e540f38e4d9bcc3cdbf69de54e40ef348a9170ba2f65def167f568ce846889c0161448342fe907718a465e451bc1b0f2e4f21f9b911f186589f43dea305811473837c063b915d849c20deb43323bab4b64e61823f1df119e71962dd975700391b411f8778980a3080ba3c14a321d32c082d416ddd2345f0eb751a516d44ee55222395cfa11e7fc4edfbe7cd49bf4ebd4d7428843a2ad5538b3cd201ccd431aeafb146a65d28a4870a6948a7cc0413b0adac7e8dff3a898aeff5f4b65d10b28ceb749bd354c061c3008ec569d5f90a4d4f5caa51d35b49dc4028e738c8ff5939fef3fa202fed9ebef6f2c7dd0ba41cdb5c0c16985f96fd93a65d134fb4a90ffc0fb6cc5396b843c2151bb7c9170f2fa4fb44292a4af28df5481de0c3c917ba1c46467a35302738158493fbf6a0422cee558d4bce3d78e14b4fefb65bb05043e2cc2a6a8ea64565ff6ce2fd2c4f43fc02926ee44ee02fe1dce25cfde0115c9396c9ea06269f17b2caf58e2332cc1c8528d9705c70da1f76f22aeb1d1b93449180640fb5c4c4a708bc4621d7d2bed5b1a752191cfdd45086d34f247ed1df0f24e7c620de32bdfc4d1f882380d2cd7467c926f48abc75cbfac8788f88cd9dc5361517a5eb36311e6b39e21a85fba2038fd47d860f776697bb19cdb5a4d6746fae507e274399c91648537d905015e58910117e5914f44ebcb00e771d38b30c1473e1232d4e222cebceb4810c48e83e0fd4c852f4fffcd643c0ef9e4fae2d0ebc6f102f3f749b02a5e3a61517d53b539cc24120df3957a633d50369d46c0c226f8924cae51dcaf54d716f61385fd8cf38c2c311a32bcd6594d6930133dc18ef36a9671ba8b179abe95f588ef74e8558ebbc974dc73c26bb6eaae78ef464181e18b71f4b0f986ecc8495a9c4dc0b0b96be9806fbd3d32952ca3b4737a06ed6561e9c9581a33a720123fbaa2a70fc3233b83e56444f5aa0cfaf70fb24be6118404f3e11e6ea004cf2d079a3e93a8ac1d4e297cf4fc43851dd26314a7ed6a5a784b386daa26e50c64692f7db28c21d82234289bb45bad5042236667e6d70a24bc9525c3adcb793a6a5725d9b10911e3bc8e3fd604db7998346e7f7dd1815c0cbb735a977bd4b32b5b976932bc92ef3b56bcadc089045ec95f241cdb0a84c67f1f76353da6cb493bb27a881d37a2106b8b3010cf935eb3601ce4dce3e449eff8331e444ab117a20809a1010db4cf3be0c488f777b6532df908112e3d11592f04a0cc16232d62340cbb8b5268a662b8278d37c03d848a04f0ab498f5af43b0a20e310197b7e1395a65299fac29f051bcc5fcd09a5605bfee370ee8ea21f5807d9748acca815a44d81796d68b0014eed3bb6a94233fc51725de3809ac6f538beaacf8cbe3d96aca21a7a763a957f8892f22c6d086d9af2e5ac9d90321e186584f17e964c90739559ddd034df076c4aa38c2b78aab6dec8ef6be9adf33bfb66f159ec4826653ee6cb483539c47a4a1d95663e6cc7a42a3bf628623a4c9500a59a50a312aa104b198ce5f3e58952bb79ff1ccfa9ddba2fd4705e91b5acaddab9d6522d7666264ac5f533b6d8ac4512d8371c69c06b6d322b046ae2a0a20aec1c3bfb05f3d91b9044cabdd873abb5f2b0e3e19740df31e39828f9ff9bbb20b73541a7a70b8174ce4e43e0d356e629cdbc6c08d29bd7acb6a4347823075683ce9d7de4ab3ddda6572b175951f30a15263355fe9641b3322df7dd52077402a884cd472e6d0b6c34cd63ab63cec8760c7ebe384f7cc31066bbdb7a3417425e039c4d340166e4bba4839076ac9457c87459c57957d0a06dced2f7a18acd22b7295785dafa435a2a8a2c3a1fa05d115fe129d19fc44c5a29bf15b4d9c2b375bc8e591f92756cfc573a39b8fccb8395cad7617b11f14a60e2dbf69b897844cbbcb70363010f6e1bc0590ea594aa924597dbb32a868b55551789f82437180b85661809089d34a168d44b4d788dba23b13542715843eee797366d9ce7793e72331735bc78cd61b13421a568ba3e66926921c04e9d00888ba7ddeb474db63813756ea4a02c1823083e36ebd2d32d5c88cdebb98d511304cc276c7799cf84a1699ccac9569b13f530c762732e6bd0f8415001b2c02d11dff36660b717054b16df49ba38425e3764a56052ffddecdfc686aff22079897376cc15591e11579fe4feeccb55f
37
38Len = 100816
39Msg = 5f464d3301c5e0871d6b41b002dcd09abc80a805de3482d97f3fd7b9838745da1c0534168f76b93c3c53bbabd904541ffe5179cae619dea77446140b7400f47d242141c7f2e9894d88f44c9e066861498e7394f206f594a419790d697f6a11187f84bc6fb288186109343eb11172bec076d041a4c7306d7978c009fc2d2d62563614ed3555ba2d21c8fcd70e8389352dbe4ec808af3231ce990452eb05b1b0dc4fbb1b4265e69235cc3561dae4148c386cd770474863a84a822b2e5f905fc255d55f90bd6a760d441dc52240ba7d8c888a5283891a2c99963d1fe680549d6267cdea92cfead167f6c49663668f2bfdc61fa647f5abf3ce5ad2c6c175dbd456ba41436aa06f5f68f5c88e6b74ea86a79934bd05b486210d3d470a0967ad6d67f7385260578088d7e63197849354f651aad07e04ed301f1fe7a6d2047d50ce5dc6bbffbb1da6b47d740898f4eb54e3c5a1fbd18ec93254cc01f705fce04e6100ced132c519674b2345547804a372b5c925bd9ee9701527db33408d37b72f8d18b882d3c4744eb58f011d21fce336d426de1fcd5e09610216248b51fe2b79b96c2bd6ca0155e05a8a516b7a24d529a9a475284735bd9c4c437ddf399864b64fc5d0d6ffc4e5a7a3dbdd476bc39ed29a0a92e1f2b6b3506c2be5452d4f896db6eb4f895b554b2af64c4cb8dc2369b91022dc50b7291404cc9605c31569c32756a64ff8c4fbb0f1bca346c7b58a5c6774b2fc7f7fd50741d34c8564d92f396b97be782923ff3c855ea9757bde419f632c8399763003b58ee9140c2d62e914c1e1fa742661a9166d42267edc40905b35a25d5c3cb3fb457376b7422896df7bb19c23e8f764416731d2e20cf2c1beb8663c07edd8f105e078e2fed05c5e5897c430017fa2160f565a75a4c5c64a15dd7d644bf355d169ae2696ae5ed1a39e8f81055cdf315e5b0c6f9235515fc4dbf30281ef17b83a6ed604f89293904bf78c7183fcb0ab236cb1f8935e59c51559217efabc000b165d819b717118a03facb61a13a99b194f8b6c7ddfe5850127d79078397a56564c7ed6716a129409680434061b2a4782c9006587de927c1ae09d6778a5f1c39fc419fe10493eb0d4ad492fbd05485eee7913c59df82fe7182af2cf06a6e8edf06676200077bd1408f5c1cec537cb8566470cb44895826d04ec20f0aba4297c501add65c75d5767ad2ab63aa81b7b66f01b32590f1d55b7e50e6df1ee077a19c8c895f5ef62d452cc336e9aee171fa997ddcedd7af86e6cc37722fb5838a46c5e58e7f700edfb7c6bf832171d9581f660752867118e9535a6118635709d6f1c1cb21b938068958e956149d9bffc67f355cb88205d4894ba97c3e3c8be9fa2d20abe79f3f93a6a2f4f56fd075bb49a4b7dc83630e58c32a29d757fdbcaa607352f65483cf2cb4208a3bf94ca7a25e2a4e05279be31c33696c10fa4971d1b64ee938dd299f483e5c098845749a3b706a787529bf2ca56693d0a7a98243e6482a43e1f5d3086ca1b00368d8ead5ed2d0fb79b1e2f537ab9340809ca3a9b5eb2900390432293008ab7086c2811d33de0648be5597ef002c7c462b5e0f4e0b1720a98b2299ad7aa55eb78f0c77c2ab4371385f280107ae40ebf814a8223dc74f31483c63d9e4ed09fc7e5a51bac34d69d97163116a66c84ea9fe4263269b71fd228555ae3cf5109c4d6ced7b9049a2b8069bd2f71834d6c07fffbd7561939188bc07dcea08086bc7182a5270427c3199bf5fb5c4549861fd32a38ec81c4ab058c777dc01864787f0275f911a17838272cd65135f66baf06d8d93bc439eeb55d50b7c5adafed8eb8140b4b05f59871dacf954f4b096c30b7857774fcd319c096750bf605db8e31fe02cd1b9294eaf8bb009d4609f2cdb3a8657f650501b8553765de8f572fb91ac77b35db35f402453e5c58f60146f2906ff56b9c6b3a5d0bb6afb9e2201110919ac9c01a7e9750dfdb2f72afbf7a8d6f64b1c68b9de17a2c9abf289eef24074eee9b1649caf3693118165503a30200993d271aa31b8b92606a10a52612dd1fab495b82f9a98cade18b9d8a723a71ceb63fd1d27372bd281f9b40aa1839b0cc2f2177a09aa8e7b159ac118d7c145e7a4f032e788d21facde2b4dbc1d5d2238f530d9bf9bd2798f611d03ed8919f0c85bc2da99750b7a8d6322d2e66ff6ab9ebaf7424e8c1c3f4fe92be61f65359106395f5ef995e925be3868ad513f561f873acdbaf18590c903d64bd275121c11ea655124d091740887868544c5348664399d3da96e2e35fff34f062fb939d656bc072096e510b40b2f75ff010af68d64fd0acc778e2e13c9667de266b1816c4ac449521b02bbb217002c604be72e73051aa9048d192e3210a68769dd2693e5d44951711aed3a751240d42f8925844131daa36c51d7d59bbaf99623fddf1649db954705fd6f3405e63894f5258c9ffecf83208c2c90cc55b1a8d2972ea6b3a049ee54942b50526b7930953986e428b2c75e47ed870bba68dbfa624dd94112f3059da0a80c583baeb570fe8314f5c66501b34116c81148dd22396fcd6479da49f7e952c8084f97d6803ff85c3787222064ca368f596a1ebb6dab20a03916b3ab071c927d87fc10ecc4e7ab4a5761e3eadaea4de1a0dee30aa39a9e4dbee047201d7d8a4df1284cf668ae3ed7dc4cb2cc4b5cae9307353fd2ae4c105c5d9f3bb021535fc3ae9bf3ff54ddda8b2e1037cd9d69822df436dc1c750a9f557d1a3a63fbe73c64261dae0c70bba6edb57519f5b957f138d1aa5fefe01b73c1851aea42938147bac2762527a492cb85da43014c876e223b05597354d7c9b328df67f354d168a84ce86dff57d8a870db034196dbeff83ebef80bbe52425a8810f2c9fea29ee688a201cce4a5f447be789a3881a9da3b6c491288e8f1091719032608b332e0410f4576597e17e0b5dde305f069be2e80d565bb979a3915488f88e3ebb90e81c264bcaddd72b8843af4a4ae31f723d50fa0995b027c334c351128913bb93e67b1b08f101f6b8dc8202b44fbc3d3dfb530f66e5a8f35e69725c86998c05ac87c561a4706e90fa095adab4a566da4fab82bff6b20076e5bdf62dbd6614245b6a6f8cb6bf60106f8d12b9c3e26f8127dc547e2181531ce980a3273f452892110cfe1ea834a30f99d66e026a9d22dc76fc3cec8fda2d7fea701deb84dd45c97dcde57a017693e90983a156f11c4d168d89c06d8a32dbfa590adadd16850854f24bba315b0bbf372f03711a20163afa0c137383b9120b26c59f5e9e7cd2ccaf0ef4e0d70d5a81748ad441ee5fe178e14317cab184fe178fb0cc0d82105d2f423467fdcda0f9871b9d84882609248356f3053a99866dad9f9b0f8c4a897a8cb8f30365a7ae5f3ca6e772d863d445e6d57c6a478e35d719d0e4e84f3a30b1816ddb55bcd79df21ea0e95da72a19cc1fe74fc576120bc108be3ed4cae3bea889fb4ddd67efe858a994237378eb623dab070d954ac780c1e6d2095383c98ba622cbdb18fb53260979fb2672c21a4600f4bf06583a112d303096d4e30e7e1060d869f386eba3cf7aec3052ca17593dcc9969fa9cd88179c262770211cf53f53f175037a5cd445d239cee48f7ed0aa1d715a22ac18a8aeecf191d415e4afd92b76c091803f4c757a9e89f696ab7b11ad6d5f24774e4a004dcb0e3f33705dd8150431f051016af37647b9e44b10bef114276d4b1055b634461c655a82a847639a038ec9f58876e84e9a2955b696e072d8054c3f81173473604d5fcc0a75b4a340dba0c375beb87b8b01a0f2de232bbb8371c3a9d27a0ce521c4c43dd3bdeebf92f42f87d88978d5b4e3e563cba0e5f59dd29c31096885b113ea5c57e66a3be015b703bc26d3fd1d51a7c14f85f65747ac909d7e30c8e800be27eebf4a62e42e538ae30b6883907cebb7fc5e150bc9da3a138f394e817df9a9e44420078f30d0d3d6981ca581791a097a5e3982c983d5cec239096c7d8cc55c87242026d769ef1d04eb96e5b5001e3358af88d417cc61f107659791a35d8b5f7a5767ae24d5b2ba7aa12230076db1f1b9b6f213dceea62949d98bc5db38743b23a59ea75dbe4231a285678f5f07facc053c2048022fcb01f15e8c100d64a877ecd56d196a6ac60ae35e0e09a517224ba409ba7b70d8f9fe65bc427b212a4e9b3cb17b0d332267cea4f3bea7c1e550f7ffe567b20e3057aa0ebb560d00d28e2f7aff718a9f2d4d044f0d20709bb9ad567c98cff7c4810e8c542370cf90a491bc1088f69998d59f344b74db6c1bdb61f284e99b517a11452ca0bb37c7bae77fca6514b341066086e600f098a32a92935380a173c9182a2513584c54ff67e580dfe16b508acf1729a3d649ff1eae286bffd688fe658612d6c8e69e6e7f7de4ba85ec54747cdc42b1f23546b7e490e31280f066e52fac117fd3b0792e4de62d5843ee98c7201529455c85b169fdb90cb05e3403cf2f737148bd20a53c73880880a14ffff37d62130e682e50bc7210ea6c1f0c27656cc1785a0d9ce93ff94dbc5b2877519d9bac4a339e98ec594a7cc76f4ddf994fee8070dd4b8e0fe0e51b93105fcf566f83d914dd862b4ce78de7e9e16f142234bd969ff8005dddc641dcd3c7cfbdd6113cd3ba34a9503a0f433899e90e158abde2ed4ed4b3711c991577c5aafeaa982bce80835f8e6d7c7975571fafb1499991646bc499ec32930367d4b1de76ff656442cab987bdecdbcc2b2bc35ce01816594bfa4b6e33080caa41dbdf8ebf2205649f98a2d3bf331fb16b9ecd1824eacbbc9f81297b115b4d36aa7496e05f7d40d4edd1886c1bac10cf3f97840a03277e6369e7a7e90d932050ab8720fce076de5c355fb17959bd75cfaeff325b0737f8f5b1160de0b0184ba04afcc30bca77a6a37e29662302d01858c0bc1d32b883011b7df5a387805296cd91bbc835a3e76152d017ee929d4cbf137eb78db89d71617dd76cb00707aacb8088ac77a1f52ed710331193edb29933a7efd8cc153e6adfc2c6637e88cd86b06036b8177847b4d086b0ff9b5dc91f3cbd1c08217023d7449253c25331594f0f16a3c5f2e122e0145c4ec94f096b45a1fd0b2dd3f1d51e58978471782a336eae49d7bc4e050d1c6a391658f71a1f752c0ec6302bc2dba9e3766359359ce34955a2db86740c90d09cc50e92dbb76e17a39955fa7108bddeaddaf860d1aff14acec8b609ac1d336270a940604209df91cf45be72edee04277d694a6f968ae6d8e065702f3d607f3baf8db4ab7637fa4c78bb0b7fe69937eb1dcb616fca564a5a521e12df71fefbc321187159bd6a47b066a3440ba634de9153a94546b63aa33aed9da2018e1f30628df37f5360ca4f2660a46ffd73e58183e8abffdea25f7bdf798a2b7cddeaa481bcc6e682a67e99143066963d96d4a928a478951dd6ec59b1be8cb23aa688e1867738aecdd9afade39c92c0b2572bdde84eb912ed990ac618834c412231216fdb84f1e01b3f8414fc6dd0f646fd0fa62bb0157b3535e1497c9272df1cc5dcd4e6ab9a8456222655c56ac73fe0d2aa8b599035daddf0986a45b1a59510abe19a11b6dba065c8bcf8a85d20a3681c2414dab7c036cc1358b1dba98d6ae62c5948c36b5b3e307a6f860c0c822ac724a5c917ed5f98ece548a7a741d366868e6c676394c3659f7f6786594196dde332543376f9ba0724b091d30f431f91d919417e5bf7ba1e9a21cb80f6c204c3a58d59d960a5788b5cba5abd7c7518f4c5170115125de97009a6c3fc4d5773e4f57fdd433eb7422c7c4dccee57a1679633ced3b5f08df763d4577983c5ca8b49bc4e08fa76f8bff36daf0fed068db47f0c87e0e45d518dffe37c129cc6e2f5f9e0430185723098e715284a42f302a6b8368a4f2dc16f534d1e5db9d0b86659fc4ba6f16c982774115d02a57684c7e5489b1f491584b0f0546e4194a6041f5e5be3bfff3852a4fc772d83491023a61a37228ef6260edc0d1cb972cba610d5ad1d92d554700771d8236ef55e983765ed8eb21e7de7c8bb51aee9368758454fee4a3f32179c1e54af1d069e0b9728cd0554351907e018146511e4d6f0450b57c8ebd21c71450116296bdfc779945da60b9192c5bb9a67b1f04d94992df4cbb3e30732dc8af2177fef17e0b7d01740b8a64db16bc29c1e589b6bdfc967edeb2ce8a649ba892bc856a929f0b837a838ca7f917a52436ea3d20e72afacc5b9d58a7fd0fefd96787c65ffa7f910d6d0ada63d64d5c4679960e7f06aeb8c70dfef954f8e39efdb629b72979be208d616071289cfaa0756a4bb5eea5c7baf8fe7a31501e7e2d67d708d461c0c93e85f03afd70bd9e16437171e01a34f475e4b5a58d13ce4e2fba72bbba93403f3f8981e0bbd6a8a6223327bf096c44b36e0ccbf7592a98c1fa67f198b628787ec80aaef848b4fea158c715799e6f458327f399e6420f0e7821f2dc4663bbea065c7bdfe830b6102e2e7193381b9dc7f2381ba808c43b8fdf3addab4b5fa81564716f7d46e0349d9b27b559710d723c7ef2f79eb55c3a9d75b99ae6fde6877b278b583f8ae3cae776b914b0cae0772397fd19b6a27676c7ca02cd07f4b4d49bbe1ec87f2ac7e39e5f7712319c31271dbbbaf4b826af8a9f4acab696c62719f7a6a032c4bcf90922a3c630647b7c1c7b78b10afbd863f07486561a0bc8d9b1ff5fc41998a7e3c604e24af1c1df2da1dd5d83eefa2e4012f7fb5959ef9339574367deff73723484b5a969c8c23dc251a3b887f34b9ea09c9a1838e8aaabb254445d7556dda257dfd5579737fe1dd6c67f3851ca68b011e7cb7b6958d588f143828f0bb24fceca31b47b77d1ce05e75ab05b55d6c9f9107f0c738f2cf8a1629f7e9b2694324e082503937ff8ca7c5098f770289af7d038dcedcf0ed77c8b82e2a9003a6f3db69e14131e144f6be7cf0bb5353ea96aebd78befbc6ceae9bdde97823cdbc5ca8ef8a993a9d9383aee9f2d6a18fc64ab92990672ea2dc9b89ed248aacf7f1a513da43fe5953335afe76d78867a066f226ae9c727c6c60671c50a50732698ef7a492d51998eb6da5368a667baf6d12b77eb36686ee0ca239dc6f3598be0bda79e47f0891fe4d8989df8c685480de11c148a2b44c8a6bea3a50b09be557c51f545a09a30e9362cf3080e6a6bee3dbad370ce24f6c5a6f8091007ca195057fa3af8f99703a601086c2a1ffe55fde4c2c4153dbff8d6601ab68743c0d50d021b0b3099535ba6c40f866ca3ff0df7c19d709a3f58b57b40ab5e43556a8c0c1938c875267bb39c0db6b45840e8ee7c22bf6b48798bd744f70e42fca343a8bdfbd7f55f275ca5d62c7288756d4861fba68d16d842c5b893c1d8171bb3c8b593387d3426f292ace5cee7753c9f9a12e6bb9af5a24192e4184f7d3d191d862d3c3dace7853eaa235b6369fd164e5a7bddd06daa3eec7fe4130e82478d36f88a0999cba1f251ffb3a7689ea2baf016073193898716a9f933448d7ba8e0968c669bdb7dd5e6e32fd84a6ce9e8632b393f9263532ec2107b4c0d2abdf3abb2de2d63511805eb58a70bc4ded040d76640af60ce7f03b9a682b8dd84ed8a47225a48e0b94ea47828f1c8974cd64e5027d8b13d43519875d2bbe4461a7f0f5b5b8d63a472765405ea9c994225806395e64dff88506f7f7f3b6368d769e6e550d4e3e81efb13771cf403e855f75312f1383ce4c2744d0b4e3735a0f1e1b99eb014fa60c0d1ca9035fbc4403330c2fefa8411fb7c3d6ede5b5c8f4736106bbe01923d483a84f031e9685a3b6a70646a2a5059ce35fa496b3f21fca6047471a5bdd33908cc9328de9fb032347c249bf7093390b750696124621dfa67fd9c7fe85d6e5a4d277ad8f8d169f8b5e8dbee280f8443518bd94abc5ca704e781e6cb1868ba2d6fbbaa850326fbfa5a20e4df6fb5f8ee2728e86a758763a8af21e1f7a8584d3f0b09a0b19fe8fcd37bc4fdf45084d7fd92b80544f29aba52496e2c9a0aa4adeb89820be321cfd2f0a53585a15d04c7fe4ec9be6eb5df419e20b71506c1f642df75c53a9e3b2414fe6102fa8af7be3f6c95de824c31fd6fe8ef9d49e26095a2674a33cb574e9e493939bdeaf5b309b4c51256ef71e95dbbcee0a11991693b533f916e1c82ce86d65d89b6d596017fae944ec364546e78abbcbe4322b83e2fcbb4c5d4ccb54d8642c7eb9e28c08598a356a5c46f8813e6b63ec2f3e3bb721b726361f85a734e0514f4e9c4732991ed3998b1ba8f618c2071d1b943eb0f8766fdb7f0492421429bd380deca3325c8d5c7b6ed16429539ae54f1eba39748f09aa44efb67d863cda304e8653ff7499cfad44dc27807779ef8e63be4b376ec403f3c84eda4e5af31c30f9807762e0980b4e5d9dc406cad4e888bfc3ec4186de8ccfcf631b0ba5831747a1c200d45ea06ac82c7952fd09aaae5dcdf5475da427cbc8c1f71ebe5132f2fcae15975ed6fa14a11b38766e1c446894f31c0496b0e5e96507d28e6e4549d6d78841e40630ef306491a1da60eaea3fb69bffcbf192610e2e07bc1124690fea61980e8ed654c5e796f67d26db5de35b4a2c67427833e360ac2a7d4fe7a5ce572144443ed62ac460c1b19402e85c79e3d80e1c143279b20a66d8dcf2bfe1cc44a0f5aa9b0d9b36c46c2cae148dd0f2ffe9a8e6e7274d1832e57aa39fb40553da6414094e838d613a20ce9307d49f97d904648d6460985b01af769800cff9a940f70729fe40e98feb64ff0a81c5b2b096b1a9d832e440c49e4e3684bd17a5169fe138d2544d9806fec027dd2a67f1856178e090f9bb2f9b314a202e7e95f2e41fa80dccf7b1810e9cbcaed2acc2445d60e26f7d63ee4b28e4299e60ea4fc659e7d6f0de91748bf1ede1fdb2acde9482bb76bf6716847eb2dd7517e0a94f0bbf20f248d2c79fa0f518b67a44d5c4c73a9bbc3816ba85ae8344b5f377649da75cf1857d6e4338a76446c48e52cc7bc7ce283d4252f8fac5e1427299edc33f84798316f77bad4a87849e91a1a23c0b7a86898046e278eaaa15ff33730a6d3f885dfe2d1dc0acda2a9e49a71cfecb7dcaa9e70eaa8fe15d4567a280e8960ba49d5289535907e9f277f96e8e652c21d89e81696dd821db5b7e1e53e160584477aa9e4c0e12160c9956df36cce6f4e724dd543827366010ed3d843cdf4319c1bf968a70e9b1b6bcd8af96c9eb0620c569716b7bc42e13251a6adf8201faa129844b5e1d699cafa1b66a674e732c7662b0410e5bca2704c5ebed7850d0ebb825cfb0627a183cc9643b709aedeac2c06700358400c389f99666ae97ccd37f265da7addeb07df9ccad6fa777d0da2fc47b6235179136bbbb409596841e921eb278142a19e6203c7f235bf8461ccadb4b47dd290d36ac27126c808b866f9531261f1e0f5c458a6bab6f064b4efc432e1c7379f9af19ac34c5c22e76e6e7651e48f9ce44eff542f018397889d896cc9001a63e8e455fbe4a9ee9a740edad894fe1af2bb21a1dd0318e28ba982c12ed69c08835ce17336ad1638af3cfe0ea892ab8e83d3f25e6bd98d5e4d36292992e2122c265a26cbb3931dd4c1b0d0ac5ee19974d0dd45777908bb416cbce52531820effcd7f28e1fb2d3d4d826e1b2673e834485a25af9f9d174f566abc3b36732ceefdd91a7c3885e1d10d51c321ff704d0883905b7539309ba5e7b7a2bfefd0494e90e9da7541ec37858ec05ea9a9ec5672b113cd5ad6ebfc5b8fe40ed7c3f17d8a73703dc89086b4d75c5eaf06b840bb2f5b4519a4fb17bfdca9605f17253f203efffc92da96fde023007d22cdad05d18aecb4bf08085c5ca5eecd21f2b611e7e8a0ef981fe7aa2014f5ac6862fab44011dfd33be8a1226943aa7ae5fee9221b0400d9ac2ce5241b09a68cde6b13c47d50bf310ecb37f25c32770a299020d8500d8a4b5d7621e4379dbd6ef34a9aceefd4055ea6144f54bbfedefb5b5b0fbd1d81c7a51a802072ec3d84f34585f22c1df84caca07849b1ef054cbef9b40848e9fd238761df5358cf55a79a53a1bc749e49ffab7c5bd9a28bf24ad5833facf43bcc3852c1e85cfe47929fc49c325c20d74588eb9833519f192243cf96625057899b70a7c93f8fdbfb60d8129d9c43c95f8782ed8293641ffd21d21d91a0b4db69d766f6d6497e9a414ceb04b65425d6ad6c8811da00639dce8d8030038f2d08330c75b0879aab81bfb3330b950e54c13780d308fceed2a103a1a8b77a923b66aba737654ba7995acd306aa7b80f632184412e2369c353c2132ae614553e626f0a3436959104ba6e0040dc597dfbc3602a49e401bf2249699375b2c722083489f54fcdc1f616a133ef6112a1754818158ff78f245b9046100b0e89407f74145fe336976af971c054f12d98002c68b3aa2bd699fbcd71bc4dc071e430bbf694595a951e01098aaa499be2f70611f248a694539ef8936b2e8b7a3c5de8662436fed1f7bc24a4e5c17a663d9a23b4692993301b08cb3bc10f518eca51081c717ec8dfbb0c2669f7987fe6aa0bd98231d8e8b58951b42537f12884a857e02d62de4fda6b88b6b754b1b27394c6a819e0f92f6b2b2473fe245678e252ed31477cc7ec6895bc361b718fcab3aa550fc9faeccfe77cdb5b151ab1db2e569b5bc923ee26f0b6113504d295112d47218140e44652a10af10a088f95c7cf2fccd040fc93980939122411ec643e26e7d69ced3178402e320fe156e774b75b5afc2f3d6b6ab828bb4993b1436faa5728cec34d66f520f59e82716ed6d1324944c3c91d04d5ffc5a921f4716c39de24768484d0096f7d8dbce35aeec22db11f899e5e7e3d57e7668f35d6c0db3542255d9262137d39ae6cf9bcde254dfccc54a6062fcf8982f781d9ffab2df4f49ec04a72eb9646d63bf9e1799bc0bec0ec7f0675ed9f8dc9b8be15d9f2175dfa1c8bc99071c70ad7bedb10a4143fa91c89f54777f84c9eae9361cf7f4c2b7ab873ee5785a5241db0af86f3c6d7f091623d6dc576d07550a42023633a09c8dfa21d7e70cce64c13f37663f75c47921c246f3f2d1d16a8283ce7697da4cb7e016971a2a1d0c59d6202bc18b7cee3828de597efdab53b33a9fb41aa7b49f1c964512901773bb396ac80e90ba1a94c408b2860065ae9aec64a41d76cf8842d299d0babf14d5840d647d075c34175e26a786f30091a24f1ce8db30137520dce1cfffb6318a0d0fdcac883eac603bf365efa2c806eb4f194cae8c16780342165222192f6ee2e103ae2a31dc08a84dfc89c64d2e9ada7ca1839dfff62ddfb7982c79684cfc821a098bc6bf09f87317209b16d14d45c6f38fc99f7bf9bb73460977bb323665d480c87c687cec052a5f08a2c6744c8e177a8a269b4a47a925b9123cd2c014313edae988f8aeaeb633ee5ba6be7f53fe36da3aa37ab2077f5fd75a82a55a0fe62af213b85e9e7694f78cc2b0e63a8c1b89db484722fc62c688678a511c474f0eff8eef1382946d26de00e5c626ec1d7079445c1b7c6f7f05073249b11fd1fb30257724a14cd7bbf451146bf366de2e826fdf1d25705587c4460040ab963e3bd504755b6aa5b18786b68efd3c8e59e8dbd172346fe7f4a18bac98164669d73984044f3c777368f965763742ab86a3720208c64801c796f6e3a1c4748b81e41ac58dcf6ecfa0453b18fad7e3473604f57f7da302e1fa81ad538d4a0280c4ad092007bb9a7a12907227a936871886c699db97d00a1966fdef64d9f3672f1b792c1edadc6781b391c91bea1bd7275f30859dbd1707b1f554e49ceb874ca06e92ab466efa7eeb6990667a27507a7ba789e24d593ea2af8eccb3862cce58daa63eaf212bdd86c01ed471cfc79b191c481ad773d20e821d18af85a7049034e5a9c660357a4c2808b9a6139f32c55c13282b8d98904f4f027d438189dc9487c96172e50dc1100ccc224e7374cf96ea6731032c43fbc9b367a4d1d0b31aa3fa8eb589672e69f1d9144114bbd508d56c2049ecdbfd7b43545375a099ad2885353d8c550d22dbb738e6fe3f104b444c89475a2cc24d7887daced8fa05006c02dfded01c00707e2ad04c41199c5decc1eae34b0c0abb5a5beee1b5253c3350e1a077682767a0b9124a4df2e8879366fd37fc04d4dbcf89883892f46a65ce3aec22123cbe6b3af6364df1f9f5f9751bc8179b6dcc5c126dd65feb7d11a85994e90ab6342834c79c5f82413e88198c73e932c66e3cb60b6e0c0cf438622e5dc5a1036c38afe9cf13559044a9e90f5fd72a3188ef6b1043f5f4e6b40ea51f6235dcb33b3099b2d8c2e02103235f0476ad51bce6d8a2934068549633e521a3ee4c62c22b042fb86c13c8da849233205a5e277aea1129678c31f5c379a71fe08b72fad9449cb923126dd465d1e0ae8a925374149b8248b3afb69f168f3ae701c00f6ea08fe07f1b5338ce6af2f3156ba6f300310114479f2f6119367c88c12c158b84be13b9c8c7b5dd7c90edb5b3ea1fa5927a25ad6d5596992dcd4877f58a134e05dcd80dde4fc2c2a680cc0ccf3084d3f4970e3603fa6bc5a180fcf1ca4241c0b8a1e7c607dc025016e297e2b0645de4ec2fc49851b9374f3ef99edd897c284a67b647ca8c96fcef935d541e9faf334043ea50b99fb8819ecce039227b624e52d8c20003b5a43808e4990da8e4398c4fc172b983351fd11a13dcd2aae5193d42d46e1b57c92e3e01d23fc968c729f3782d6c07dd5a17af2bda96735c12cc7d8023629fb0125e974425f7914690a7ed26508343ae58c8a439ebb6232049a194768d4594f5d65aca37a5686c2a86dd04bef35d74e0755937ac0ce3ebded1c00c8adabf030e5e4a5f44193b62fcf2f1bfa9dca2a25afaf2f1ec06c5d17ef3526d26d17af3e2f257ded24b177ba41c0ba64fd4fbd5042fbd5961a105e0e9f77f3db13c1b6c5bd9a9d04801a5c00a4c544218a21016c65bdff774a44b1d05256e0693e14d76605d67bd10048d3816caf31a6d10886c88c783538bd93e92bbc4484f3388b61adac4b92b911c76ebb1dd11b7b4e40be032bccff610068746f41e34a1fbfbfe5faf57c8a4331008e2c1cfd69f57e74379ac80eb6769f4ce4196795b835201ce4ec85ebcaf5eaaec242fe6695cbce1d53fde5b002e006bba8c8a1ee57da061ceed0d21bdd57ab0cab9e46bf3764d9a6c3ab19736d43b33f32eb955f9174ee4a54666e7f19cefeb49aac7a59b7370d9ae730b7bb4e08413222f0a66bfdac252fb61bcfa838f262312febfde8add8f6843f1d64ea3da42d4ef986498604d65737a44f5a099338520cdbdb65ce73b110dd4bcf8592a4adc3e0170b13404f99f0ec8f9fb225c1275a921f09369db165e9109dd5be472b9bc1901bfd882d264d9ed8d88b4c8f3b35f88b69e3e4b8ef5debb895be536a3af492d968dc1caf31879d672f70ad9869ea98335cf9e4a2760f955fd3e8099e4b2eb4269e354548f9de9921e50e49f3f5cbd63468b9db0cfdf17250c8f13535d4c0a1f21c87967cd798fe93b9b2960447401ef90db22c3adfba0f55f5585ad37040e8d6745184dd536d5a26edec365bd6edff1bcc616cdea3bfc8b9d98c0ef9a626054e361194cd05b2287612399f6d3d3be2f71555f14ad2893af6f60ab61adef663c3c2464ade671dd5ebc71935aad290573588fe6e11f48cd2b7db62e4b9932890d1b96e1b83eff70f026d199db75fb1e83197c937b672613c66ea131f485b4318e27c079b4018d4205484993bf50ce70275b244f2caf47cb47eb2a9ca59afbc78809a912eb56a4bb65cae4694f682c6329c690003a1c355f779b5857a60091b1c3685995a366cb43d753a704d3e59c5f5003c78feed877351e27334b3fdefe5907edd9eb25588a42248b9c4a93efa7cc63bad1e5900b95b70436c35eb85cc8251c4030fab9556920141cca24d6acd3122b92b7e868dc174bf071117958a4797fc90866aca685f1456fab397ae647ab9970348082bd74865bab7f248568db98ced7ed84e8360fa91afde3f23509e6b4caf948349ad9fb6a4efe0a0468302cae7a0f999195af1c19058669fc3b88b2780b9075dc180298498caeb7ba0cf8bd42eb36b1959d5ad3ca6fd1e85f76abd27ec5fb637ee38173ad7d86304d5708b6dc8817e099e77f5d43c1a70624cdb96e4e6103bb25e59eb51d894d1dc533a74005bb79cca35b66e10c61d06b5227fcb071457025d605a0862218ca252b871f8343ec231dbee15688aeb914c0f16ebabe6edb0a489b2bd10d4392c6f1863bb6a62181de7cef61997ab02f3bad0a893cc0cd8a99cd7b3f7773085f0929de36b5d124e3729140c375de9a2d0cd9a360cadf17b9e45b7f2adbdff9e75b743b62642ed67aa703b8ef33dcf51a50edc7dbab42d3d2b49badd2457a9f92847aa6a60ae2beae457a5fce1a9e485ecf907be22913893cd1350f20fc6c81c94be426eaf01864e813a03e4674491b61516bc95d8a77c15f03d0adfc4adc27f27a5ac4165ff6518eda1a5c408708f78a9e26b834179804a312148d4f75f21a77d78387139da40c0a6293c2a59d0162437d68504f189ed970c5abb9ffc6d8e1be2b0877c7f24b1dc273b1765bfc5ce6f4b8d99a96d5b1c92ee53a39f685b304313d909c1ba8130d20d51c824cec420b0315229df295f75b453a6c131afaae0c36d7c4fff70623638a4f7ded5eb7db58d95deb6249a29b171d8ce651556dee8037bf4ca74453a4a76aab7cc07ba44e55de57dbef8542c3851ea353fb8e259ee89bbecf9ce8d8bd6227afc0028afac48a7acd9b4e8cbe982eb1475917ad6be4cdca9cf6e7cddd971b2924f2bb730264801685d387485e41993c3fa0af9987e8b52c21688fd9a9595ad8d1b9f41e0457be18492aa09f69e64e2954d1ca3cc1d32b2915cd9cf6862ca79c80beb47347c4cceadf48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab44aefdda94681407008ea48d03ff21e9bbb4ae7a9aa37c855fe3537c44106e8079f18c24d2584474bd4a99367660ce6f7e6d7c294961e174366e7babc569d5f80572a21a4bd7086629363e0c9ee2599c8b8863c96613ae6c32cc67ccafc66e1cce79654567ad08e62e9abc99e44d6a79ca4d8de15b7f8a763a4741676af0e1f3bd4e002c8fa1ebfbb3bd3a65ae68a80c230422f98f6e1e9837252e045eafd585ba389958297d59aea1e8e1f665fcbc5f7ff449996aa712dc0faf582cf3caf3dbae80594f9f07fc06de63d9d672d14d7ac4662b4a54f40d4aab2de766910be2fc7f6f679b5708790b5376498d3baf0463dca2f093b51bb7e9f3e7033ba0384af0174becc3bb477bc5e86959a12a5e8924adf0bffdf5e5b9c1cf24d232881ad5c05c5c0f50318ea83d8683339ca6a583c52198c00f7c1abbda282e7fd3b179297338ecf9c923a3a87a130dfc06164e9b4c1fe11d51b382643de44b30a6831dee119241d1b6f84f2484784fdf65e41f78c38e15fb4b00e45df1edc40e3467cdcda351a4c0a0185ac4649e91024377e1c331587a8586cc0a4dfe29e14004c3536d305f5dee0eeb8c2f216c1b8d27375b239f6458e08980badd6d82e9ee9e007578c0a3b48288d9ad0ec3c934a99a8c5741149af937dc82bdb545df26428b87fc935c05f1a4964a8408539f267e23de9bc498e2a4b0083cdb7c8e27de6252bfaf680a6d5b7ec1a6dac6d7d537334a95f1553324a0739414dbdb50445a767b0f589fd4c33b35905577ef5a53b0f097191f9cee4836a908748779941de2a78fe1bde0c2efd9f48cbf232ce101d9df93d3ed40d036ae7aedc3a5ff619abd1c159ca8d2dbda7de13b4ca62576c7f925c52925eae2d7500dc969fe14c0a335ff95a7df1d276a6f242765c781208d59edb5848d412b11638b27ce5a61b8209075976c2a6aae88f6e6d8704fe9e83b425dec4defeeb3cd311b8c5a818d51f917a8a4525361791d5c4fd5d70704d4b9fa9df1ea119882f400e682753a41931712c043c120a98f0fe786a600b47befefc9d64cc5bbe8a16c191490874e258760c9e4fd215bebf848e0b4d35521f53ec5f9308644b785171fc4cc3ff886e034bd833d59dbcacebdae8f00e43c151bcb24d1d226d1cc19ecf349361530a81ba3168af3df5536fbe52b3b93621f57959df298e5b4d3c14928d2ef7b9c977c7dda54242d17f8661978a62d94d565b00abc199790b9b25fbfd4a3ffc35c95ccafe35d9a138a2c24d17f06ae2cc376e822317f16fcbcd56e23f84ec135dc935e58c61b34cfbf5a36cb00350483b6bac786030e5c5045a6b61c9aba7dfaa4f7fb21897539863ee865ae061a77c0359915de3aacb3b5dc8cfe53c4d17b393c2b6bb23652f36390407922969d510cc97b99d1df4361530aef10707d7a021b2d9576b2d49ca88b3cc83ad1baa6d88ef8c81c08f8baaf515637b21ace9d5cc8fd9fe4ca6c3aa129caea7060791d566f4de8662b90f9e5d849cdadf9bd23cf6737b07ca105142663c30de27adcea11d64d433fe1ace84b0f6917c8b655f2a421602f07e0a7127e61ae9859c5e9f652ec82416fd2566f291f417ecdf99bf3231d02864e2e5a1cf34c13f59de9aa2760d8734bbda79576c62f566b8269990e9384a41c1634271acb4c7a8b768f276685c3a8c7f20872e56b683244b1af562c3e7dcf592a9915f44f886cc2ac5f679c07d5aa1fd69cf3a460f25c722073da336a310aa551062d92c7297002060072af2f3500b9310c239bedf45c5e985c2e0d60c7dd68522376dc7b560fb34d1b5089450c32ffcbff07b35a96bb6fe01259a06868d00af697f8bbb238d03d49570a109181c9576c1ea9d2ee02000cc23e63d6c93c6cf3050bbb15b6f73b09c25da62e5abd4c2bdb1110e1f25db39f04885595cd6a388c4726c8d4cdbad87d80d42fcaeae843e2e17f44c9aed25c8f6f9736c7ba1bbd3b839126de40a930024a65aacb872936e446114e706a868444cb140e53d976816983f3dd1d57eeca01eab8211b7aa8ae99d26e35c06ea4b226e0a6e52172a40e7f0df5f67759ae2ee026749ba10b8e33694c3e01a001526f9d75f6c419cdccece3ea3f78d69014e509c741214581034bbc7e2bbaf76db8421154abb2233117a1ffe2786b21424576e295c9baef262e80fa2edb69aff800b3ea436eb827e8adb73abc48d740b86c69d557b16e874038598b25f616afeb4f4a900be7dd0d38b5b6fb4259c51a3aaf4748d7a445f518485ed72b25c7df8ed0906b74bd29bd6a5724ac3a503c990f3697a5db484821f68718470810862728a80ce34599a41fc5bd8bb46dd845a4812ae1532c457ef4211d0e41835e5a6f030247614822571c930c727ba397e723d6b3aeba9244f054e331c82e65b74c9f6504c74b4301499a1a6f6269a3352aff57f88442d4eda42a82ebcf7776c5629f97d6160bffdd8282a40ce2e6375b161e4c22ee53bce7a45f4774aa827e2da657e1a1bc07445f0bbd770b7a5a25b1b469fd58715510dbf8d97af4e1b9459a20b08a8d3fa9d92feb32db95b22d36de0bc8b1c397b09970a6826392fd8392b2d790dcc1295888f42ac81ad213c7328b2324b28be7cc1f4fb8414a7785472f1dd3e11d66017b1756d1697be92490e15f056346d7e9126a1f35fd76cb016fe2841c8996a3507c4fffe7fc45026df10b03b86fb6cf26e8418926a030b5fa62748fbb728fa19dc2f8947468c1477750771e442e4a9d25b76d359211c05df788ade5b7824f8770b5dac0819737dec916ee59b28a49666ee8b7ca81386eec8049542f18a3207e51bdbc291470eeefecac385c096a
40
41[L = 32]
42
43Len = 16
44Msg = 43cd
45
46Len = 104
47Msg = 5f75a437ce0698a7d8151c3fe0
48
49Len = 352
50Msg = f88bac738d1e3e10f75e46e3fe026d7e423fdcf3d7e4028b33a291bb4aabca53f780fbf99e0346d610d4a38f
51
52Len = 488
53Msg = 832e5b78a73a1012ee62e00621db7f4d248893007c6e5d6e0e689c6b291baeebc72df9cf10b289fe20e7fab80a2399271d0ac63766049da875eed56264
54
55Len = 13976
56Msg = deab57cdeb41974037a9bef5e292894038264eb4d8993d4d1501e6ef9c68fb0f571f57b0925640925deae9a6317e3bc4d6cdd5a0833e52fb48baca16a9ba9b6c8ca469a0555763b54f04c87d4e41aa549258f30eefe5a52d2ba06657a8773b0842e094857b6d8911d6a0636280025e56356fade362b4bf4c875cc19be0c6644b447be0454dbf390eb966c03e10e9de3487b90d0825d327c12495e3c89ad09c9d591e55c91376fb14c2fde9f7461fb25450df1a65806b65f3caf4d5c81ebc6e664871fcf915b9578bb70ee6776acc62205888dce2baa4024941209e81b4b35f0eda1bdcbd9ab1d6db6140bda4c41776fe675d5c681da5852d50c246dda4ddf9fdd7c5fdfeec85ff6c883c78689c2977584406a1ddef977606c182d6c33561c39c071668a2515e5aa6f4aa1faa392aed95b82ab32b79a15e3b5a07551ab068455131b72493126470f26c30b852e4415e1d8b719b3803ecc336e4facbcc5d1908851f4f39b776bec8b6b9794d47e5965458858560eed5a0305e260240c0849d93a19787b0f8c795eb5ba32be573845256ae6d0b0a3336e42a1beac8bdde6d1b6e0b6207903d4b105f4af2ef89bd099ded870daea2f170e03bd5f6f4490e60bc222d4876e16d4c58aeea6e6c400dbb9e9f4b2b142f0fc9bdeaf4132ded38a4a8366e107cac7210945fa2df4b124be37ef76290e5b9758aa3bfe0091bb0448206323584c2f833e0edfbdc0c33075fc9647a3404ca490bfab94302a0679a1a42fe9fec6af0cd98038b09ffbecd2832b579b2294f6ae5b96328fdc0a0b9b3a32cba04fa8bae3389c3951173bdc17caaefe526aa386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f24237d8e795ebf52368218bff3e9d5b040ecd2caef4ab1e7127e53bfa2b3b4fb74829f9993ac703192aedef79dd9ad24c2c976638b4575afbce22ecacc273ba43379ed55ceeb51838b0adb80585bd1b5f2707ee16b67a7232adf7163415b24b9ff9dc94b7197fdc89e2a90d2b9eccde45e965edd064dc0d1eadabe11b8ec3aad2742b5d3323ebf913a92817749090c20758f98aef2544d4c8b48874e8936d7ee492d5585675c214deeb74fd67c4d170ac5e0aeefa607c6e37abd4f8238e776fde3921afab75cbd8f392d3e88da057903ce2e140797f4a85737bd89455e6aa27c7535687b78cd0ea59848e006c8de9c9c0cbc7a9f5e977be850adc710503ce4ba7c7bd0b042297f518abec6c8ef451c33e030251f506cbc3744228b6bb4dab86877d9e6019a0ea9f39ed37557b3b5527c171da5f013e0d3c480a038cff2c087d6e5d41b17e6c8f90c334b5e2b9ccbe9d4efd99fba1f907d00a49b71b5a08aedb644fed24bcf04e71be67b03cd20d53ccef8f854f5e9f7f28c1e98a8a53496646713bebe15a93f1ea336e6e8a4e68de5dab0fe880bf983eec75d1c5027357f6669e098411e0bc3ea2293138f5b34425f78b6508b94d4c0cc32ee9afaa409a26e5f2a1fddcd6d5ff42a89755a58b08f243957a2e208e24b055f51992ab447bc06876eba169c545fa71b88a0fc15d1e0be9d334a1dd0c86f44bd149b42c07608a9a30d0b7e13574f8d862f2ac72b2ed38904d7cab194fdb9e4dcb615f5610b24e202a36866baccac01fadb575df11dd43e00a3b92fcdd8c7702ea49d951e7dad2a56c075730b4af1ceda2bcb2310256f28312579fad40ff471336ea6a44143edfcffc297258d48bd2ea47efab8f0dc00f1e6dba1a55009ed627b7
57
58Len = 48824
59Msg = 5223e2fece634a95e1e7c83ad4a11a0478f4a41572bd66c2d7902cf4f94404cd80b1f58fbcb8eeba3984fd759410c12f8ee922865f363f684df5a8787c87ceb3086fb8535157f7f39653dbf5c66ae7219253838ec77cf1c6db518225c5ba0a8212e5911236474b8820ddcb8111b87320adb82ff553986324aa2a21c37ce4a083c89ce9931290d4c1fea933e31d014d7507a28e83aa917ccae10bed1a490e77fe501b299f8e3b78e659407ce1934d5d68c7980800746f26ffa9794ef1d23f793bd2eab7fe524e213e58280f441ba48b40162305335b3a480c2afeac11c27f8d817792fd7805d4b61224eb52d35c0fbf471bcaede505fbc9398b216f43bfd69b1a669a61d44fd21faae410af58ff95e1c3ff1528de1aba93cef56bff4d714d8c4cc88a4ddcda52444ec1208d99ab3fd9fde98c1ee6437d8d138f62c5f782eb4660c5eb28564b5b0d46e3a2546009148f3d02b837c5284e9f508290270b97b9b29e84445a0b4df662d9711e6b73c11cebcb7120dc427034b1ccf57d8e4f5bbdb84d2e1d4bc3862a2b51931d3c9a7a5fd6ee5f4c7327c338abd011af638d730141b6eafe63469eff50f473262e9fdce636eff4c5663acb6075a4fdb00c8b8a8d3322e1700a5b3e7db90b36c1a94991b8f51657121b442db6f890e208f312466778d73bfaa8cc0ead4edd0776155f3eddf9abb1bbfc0c94421adce83d7ee94f99f61e1f25a55fb596f8b40ccedbaa8e5e2cf629496f5ca60bc4cf36d917da4e2b973eb57869dddc409dd66d5061f22642743fe843defa0b19dfb2f56425abeb234181267b5c0d2ab4268c538510feb191bbcd1631b0af6c7451cd4c641025cd8bde2d9ab6e6b948f97c1ee6f35098d553e8e9da9b4d437125046864633f109d6a558b38b270a7dd1785d44d248a863a91e3db5c0a1d7ec133decb65e81c3402c98ee329f660a092172bf6b1a02491895394ebc506882805a6c93e767c0e58a5af717d950a206c0f0055cb39ed88816a9fe3613d15f608e486ac08bfa67d462d24e6a0a37716d3fbdaeb9c0e951c1e847fb884ebc1cfe707dc6e7269eed1c44331d5957bc4ac9dfeaed4b157204a3080fafb9df8917b8d15aff9c49cdc739b8fdc26a546794991c183fa523d14797e051894f48b0d62c2b70834467ff9c993b82fc1152c1f5479ec6144c7e8fb10d1bce26bd1cdbeec4e95ee073f3bcc3c7367328e30543d371b27509a577f5c79f14d5f687ce62b82f856695af9f7dd350543ec763de75b593f1859e44c2ac01ba65f98743cfddd8a89a38115badcb51a0ff5655f830c0122af6a830aec13ae5eb89a93755b3a5a6eca233f21cb12db545a24a5334becb8fa32c3d7f5805faeaaeea85a551fc62c94807faa6474c0d74cae79b5d8ddae07498fcc5b8b4f394867112ef5fad1c9da66765ecbc7fc0f3269d29c9c38817c77778f2c19b5a3c705fde9d76a4eb86aed4a7369a832ad267312903462397f7b8fecfa8b195cc2316cd53e48c3371ed2ecaa3e484b8ecd2e22b1aee910c51ed5d71198936266f5a00655d82c089f49295feda0a2bcc1a54ec8adf565acc3a8b2d74c30eafbbd843c59e67f293f6d8296cf7b611f01b57dafec6e2d4d411a633918068c38ef47b72ceff1fae772891141c3bc496824509d78165c1e4cd4b4989321a8722643eed69950dc120fa8da3e53c3181f252d7c4cd2cedf8f086f788ee77a98ab5b019828aa02108f49ea4a51f457f7adfd2220d3e59d5f4a29194e8f5eac40ff80312ff6888ff6393c3fc0914b08c1b9990d247ad80a441558db1ee1203e07353dd99a885a7ff5d791af2548815dde0ca1f56f89d39ef6b93dbcd0cd54b854173903c12649587433f0425fbcbddfb66ebce3eb4800dfddfe7fc44d9b23a3916b1db68c187da4dd13ff0157352814b1a792de7fff855761abc6fb7b93b48525fa90fbe3a51dea974069f3f5fdea86387eccee13f58a8eeb8abc6a43fd30e9788c3bd9ae1751b30a82d420225b2abdb1bc121b9073380be16107188d20be54f2e9c658d5b443869ea0e991c496104086290b6edcc1b656adf94f0d42458750fbd8d88040c518ebbb644f4dc4f7c6971d8d60eee0272df7b51a3d5248b4b264fb22195ad891fb6ac994ae5c0bc6714ae0b0b9a484edc576638b78ee89b568195a8f33ed8362128c30f9b0c7804b3ce1355abc96b15aa55c1e16a9e9ec90d1f580e7cb412a7e85d8585bfb950acd4de5865214ce4db7f6314d81784c588c1482d5f28c5fb62e7dd7aa8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda788eb2015680ac5610fb1380b4e7d7a9cda6178dca98690449f5551b66ad2826cab2b662f56903fc95b4611bc86f7a834a34ddc3be7bf142c8baa096abaa3cd51ad0c0b6d15e590eab9e50a4c60c91061f1ed6373d91974c1ad9d263110a0d43fd8b596396cafc0ae70b7ac24a59bba090a6994ec483db7ed4c572f723670a11c724e8ffa2497d8fccae37eaa1d14ac1537eaf80efbd2e597b2ffac97f2bc3cd2c4017f170544dfbb0d9109478fddf06ec0981542bc8107a725be25070d2cab4716f4edfad75fddd582ebd363c49e8efaed9a76ee51f22304eebc232a4f67f865b04f610a628fdb317116666785fe8ca30619a07c83cc449855202d687f162b12d93b63af6e7ddfb7223d4ab998a5f450523c1d521ab76f4aa113cc2967e04a38dae07c51c2d0f44fdc8605c3c53ccee91a2c73dade5dae021cbc87d5cd6e5fbefb65335827311fe1e91921ecd66b2055a6102d7a976308a80c44e6d47a67718c84f2112d65486a558f1f269b91d9f47e3e11d09c0c748625bad2718e3674898abdb19d3644bcdc9317c09a3ac02f514b2a57e6a706362e5f6e8fb16cc83daea0eec85fdc8c367d84c9230730291440a4b109f7034d510a3f70a22dd4fa69e8b65e5fdf87045d560eec71f4e59531c7711d4f8917a96e22ad07346d2f92a13fb4569fa6a075da6e1acad1eac1cb2ef19ab452264de2357c927c6dfae6598cbc821eaf3b8da754ce91a96c702c95b2c308bf3a550cbf4d22d417745b5f17d36608feb826b862747c59d26a0e8eb96547a1852f9fbd095f1c5d20721804941d462f3ee2f0876ee2825c8df24c4f00f0844e50588ac688127013df8eba3c971362dd255420649245e880212cb3d732fb82f866dda090040f28e09cf1c86eea5dc4fbfc373eb69745b4afd841ca8e172d4a8510e7698345fd4cab9ec2ca0453a274720bb2d2e5468bf0d0f85919dd762fe3df969e6c071285e25c2e2a49659b8a78289aee655965bfa3cbca9b292a19a855ec40293185354ff4da9451ccf98abfda07f1137e79bc89d688963081dec641a99656b040637402890f185edb28e7e6a2f65848a6af158f90eea440aa6246a2e6c31f5d220b9846aae2027afe5a7caad6dc16b56463367cd9e73bf22a1d6172145de4565ee369c55e3b99ccbef70fb080a3748340fbe8f6b95ba46e8b76de5a3c4bedc37c55ae24ad02267da26769a3a732badac2e0f3a5393028dd54d78701647582cd04c8310e9f1ff1b433125229547130e1737a1f33604f0d670ea7221097c3eb9c7fa4b8293d7b429af76191ea8e481dc1da31344537a09b33404d782eda1d6f5775500c1d8efc615778baf0905d9fcba1806ef986c40b1c6a72335104376b58266c36f5939a8b95123e8635c0c95e80aaeb97379b1179d6332dc07539b595ec32eebd3a336a1128f3cf2e2924db6d8504a516b62f26d012b7f75cab765c8374a3824da5a405746023b51894649ab422d636513ee809fa181d5b6fbc63351e37a1b14efc8f739e86ca78ae3e280f1c9e4824b2976ec4dd308ede6171a7474c7f530128089bbd75e10f9e57ee17408b4384f99f886a5f63a2320a9b90eb9bf692e1fc449171eae3bb1bb17a6ed937ea57af3c82db84e073b5306683e1d63705b9742a085fb802cf5a1639818417fc2223f476c2566351f4b3b17a822e11255f3c3412dd39190e200727bcd3f9799519ef792ec7c2b0b9d0e2dccf013d436dee63483c2ce83c15c00a76c4d894a60cb90366ecf9e61221ee8bdaec66d715159876d8305b35c81f96ab2cd8f81f4769e9a6e439c08c329036f5d2591ac42f2747bc0e77d4e566358a3271819b6003b290211b9b847ab70e906aed9f86cc38aae27e1098fdc3bd5d84e66c45292183f198bc329cad794aa4e430534511b7d9a75104061b409676a16c1146af0a286e2de8bf51c4a35193581a902bd3224cb9257c961989042538092af92644a63d6d6f6872a29aceca39341ad29dd22354812c4b7c7068b039ac9ca7e6358e662a28be001d4aa697ace540cc3ed3c97b98d8c5a6fd3543ae9a7962c9229b14b0b646229807747064be3e83191cf24092dd67f675638d9f6510486379f47f5eeda870a3187946819ec9ed05e7b325bfd0eed5c9a0f4a2063d63c1a8a0a309f586c94d4a68bbe860ae9599ce204c92cf9d92cb460ff99cff9e5a8b3824786360e1e1861e71158395faeaebe7aa2f61f76190f174aab9a313f0bf4f1befbbb22768b8c22719cf3fa9ec908b576fa4bbc084b1ee5b5a7eddc89b58b45ae7b421d38215aa6e49304323eb4e202655f3c8b16ebd6b03058e75a907ee63fcf6aad5eb96c1e5faea81b88b5eee525c4663af52877c0f759432913b9d48030903e7f9f70e851cd4e20bc56aaf36cb02293d992b38b583b8f0b25a08c3303d8af5b1b37f5127f7021b13934645ef3020e5caadc5e7326ed4ff56f797e26cb986b6512b0cc76f1d8e7be44aaa88e12cbc644f14a7feb979d2ab66907063c51e052d0f8b25d827377fecc5111be0d365e08d17f559e3134cb9db294f1cac03150f4232f853ec15ecde55fd1023b58e83934869796400088e9177e85a2227ee45addd049c1d6b03e5b29dd570496fdb2fde7d8cc74fbb5fe76266ebd90a3b4d57e6e6cb9f0bbdb7ca03ae955915768011c714c909a27ee20135927af55d4feaf2c345d029a54af942da6f85f2103345d059f66864e6b0578111e2ddd5a1cd8bbf4ae35b60747b93f53ec8ec64c10cf4149909b102a2b88712ff3e5ba3611cf96585a6b36fffb64b8c37a114d6b16a53879136eb0b5e003a5a068e3e8422a4fc8d7c77227cce64ebafcde2437166b62ccf486660a7a2ef37012ebacca26ecd5bdf363feeb06aee39050974c25d6a564594c67f56fcf7ed48b07fab4e25ccffe002bbe460325abafe37f23dd9c145b4667f146a1635e462330f02470b35c5a2519f1350c02b263201ec9026cfc57d3659373910e878f2b6c1c5be774df8e01e775d476956c257bd0ccdec17ee939c46e5653d5813eda752ba7bbb245a99a5db1ae55d19692074c2e5820df97c502a4bd1b12929e1be8e9ce6d802347c3e9c4202de6046436c05ab55b2fcb2c227adade6c2046d98102cfd0d859a91f8104eb9f6f155da2acf93df2405bf2c083eafd3ec41d60b810e0bdef6298b21193642a9c0c646bc6771a5c61a25604d96bdb727abd5a7ebe4ddb2a56a6ddece26d8007b26043ad44279c3c8ffb7e6ffb3cd4e10ea2780f509a8a9bc31f99a7e66201195f1543a0a020f754d9a665a29a896faf673df6811379579891374c71b2234fc61e95d4d46f15d44bdb4d7c3b3be3f46410ca46827b8cca976d8866e8ca33c4945d5c87b705588b78015b529843af0b75a7e1e871fd276c1e947d896b92e6181ab7e3ccc7077bb57fe85a6958667d3d7a790f6cde1cebb494c2912478a0eca2bfaad62492e9f1caaa0cc520da08c0d2d910cd44255f4c2ca0646dc89e789a1cf9a28e2f99315d33accb1639cbaf0c94181b85fef648bb4cc7f66dc65b8e90bf5f3b763e58520098febfe7e47bddc2d9cdd5e40dbf4ddb8d51f51bde2e57432266d248d13ed09e62f66794d188f9861c50ec41f0eee30f76f4ece250956733ee97036098db41991a4a3eb7816196c8e447db3a2913bcd992174a7bde1f42d57c764b47f5bc09533760c1ba74943a0dca291f2746bc1fcc573f9a22c72a5eca347b1679683fbc8f32b08d381baf67b7266b14b3ba46a04a3ee45881ac452f64df1bf17f70f4cf9fa4dfed9ae70184679184784a0451d2f5c19c02031e0e4957b4df68b4a069a6f6f6458f6d773924a1841ba664a55c2c3187dd33416cd410e56e4bf8d3671cf737bf67df2a4cc4dcc786872b9e2dc4009fea0e48a749353ac053d80e36357d24d468dd595bc823017c015d7450fe38149370c5decf13b00b6b0e0a2567ac08b45f7b0c8a7c89d227219d051d17a706ccbea49a42035cb327381568eae23b5e2a3b7e8beef6f260d24ab224827ca8ee9d640dd23eee94ed02c9e26abb3053cbfaeadbb1f365a24d8769d92240da842e0b361524020b5c9c22a2fd8602dc9600aaf02b35344309f6bb018a94d4cbc9639ab7430657c4046f0b25df517e31626abeedd58c2e19aa0ae1a43ed2bacad91dc04a2fdf9cc33cc420f4f04379e95988ab36731d5d5402d89fb47e826f4243bb206124364d63564a0872f8d2826eebd9046c7c6f2e7c951e49d4b22a7eec89da1fbed890d63ef15f26422185143c89da3ee269f83e1de11a7467822146042be92295a585e3a09e720ec522e1cbdcb41acf5ac45ee892677ba3ff670d71339a76ed98237be252ae21268e756f05ba0b094a1803f9da84a8a05d0ec9456cf565e1b548cae95eafa0fb01f091935e6eff2413bcb15f605f15270408216fb5b41ed83dfa1454c522375e35bdefe54275f109d0ab450636ac4d8e4d9e27f2d81a15b8cc5e98549254a1c9162918db3e399118f5864774a9d6a2347e1315753071eb1204c8bf5f52b1a0da37e484ebbe545fdfe6b031215678c3b83a19a24d7b661f626beb01eb82b384f02f42bcad4f40addd48db8a92b90d2297e6143702056123286617f86fbef4fea940f648867d790b8f803abc5f4e0e3f4226954c296afd96e287e21b7243d05e743161810da578096521805edd81f68a45500f6a3a1885cb1f45cbd399dde024df65072eb973c827fca13eeaa3f140842016f509aa9ab4603d2457c92cc9aef24950697a0044e3d7c483b8d8391886cd50dff8c2f16de3d6caa7f864c1b3874750781b2b78b545a94b4da0b0036433c6561f5cfea50eae9f5645302eef18238473606e9b9931880d0f6368fa9970d1ffbe59c4454bf97f4a5e8091801b53ee4a209e0642d83605836f69742071aaebd9d813b10f4ccac03851ee9f20cd1351f8e68554c9bc5f58ad19d474ca128edbf561d195e52ddf3c19bee3bb597ac2f92143bafc98bc09fbda6d18dd4ff2a93cd2ba17f54f75c32d3f141468c2baef4e53b6a340286dc2599bf7bb002aa86688e26f5b51a6aaf32e48ffd539d4f3f4bbf0cde2d20138151c82384f9ff29a634ab4e0103d93340bb9a7b0caa108bc7fdc88d7de14abb17e9efdad2b0f304f0bfcbabaeb1b9db75959dbf54930e67aed3a9c8309aa90506b6b9ed4f1d06c4ced19746e206e1e9b8879663bf56bf6c5c920ac5e09e6579b780cb63e1875ef0a731b726864b7ae5705a2d6d343a4a213a05928b7337a59f900fd04472382610e2a8d25383c9ab5804d609e79a88d70eaef3ea22d3aa9100fa2a6e98e97684ade9fe90d6bfc59dc9dec3d3d8db8990bc2123ba92e64253235e9b4d682e8aa04e23fb9bb6248a77c065e93249de829bb2fc5ea9e396461090222816bb29bca37bf86698fb995f62c50110cf418bbe2078a56c5f1ec9fdf3d0b09a719ac253b5bcd00932ae058b86611aff51c8ca8448978615854b69b0216a6eb8050ce199fd9a13aa0fd652570a1b187f61e6831b3a960521c3705da8c5e6c64c7b196ed4a49c2912d77b670b177c6458a7a49ecc1ffd8c57c0978d2a05cd1f1c7ac9514dd14b7b0933a52cefd40b6452ca0903df1f55828025c7e18109a6e0f2ab25724cad2d6f57cb5d894a6a508134731e9b9c61254f64990941f4faf97394b634b91860cc6ec346aa666600d323c849ea4c4a0ef55acbc56495ca004f3fca42ff0ffb11b0e1164c95ab89bf1db3d4f575ff334d4e0d7d50e0c54c422eac5ef78c5a3be95f2e18872540fccfb597211ec79d9d47b6cf41e385b9c2e92122167fe584210f63bf919c620d
60
61[L = 28]
62
63Len = 16
64Msg = 3dd2
65
66Len = 104
67Msg = 3d232201038fe7d846ac1bd4c6
68
69Len = 352
70Msg = 44c98cfc71f82215dadf494d68d1d6b92bb4eb81fa0fbf945a659d9aa2c2302b5c93fd3eedba31e479e29d36
71
72Len = 504
73Msg = 02a5c7b1b749d6d49bed302d9439f23ab83020bd4d573906f4190e74216ad33aceab775f71cd31092bba5cfa42f0845bd16fc1b8bed6434dedc92f80b395aa
74
75Len = 13976
76Msg = bd70deb2cafa75918308d703a6783fe9dc5e3d21de9bfeb6dbb1cd531ed5dafeec463a02abde302d4ae6ab3cdc2f0f94865e38339c88bde507ff71bbea6b30b9851cd8cf599e950b8c8e620c90adccba0033f934ca66ea0a936afdad575bb6235099beff1a632c9114a8045a0919fdc21083880eb05c0d8c489c7810aecef4a41766f67c37557e28a9db9a0d909c2b167ff7eba79693afd3ee3aeace38eb73a5a02a882cf89b123812cf2a0f6d5edd1d14362ce9c43257474def5cce3adbba8cb48e7af9a45e702a182dbf47e8869b3f99e953ba81628e502c60d4f8ffc551c31b3ad6ca85c52164839d5e9d493deee4d4b76604174bdb5655385d34ced2c1b09dd5a486e1f9ac501bc611f9d7aa5c748f496faecc14c6c18e1dfc6aee2991bd0207ea1701219955a751df43dbf66f57904675a0e9e6d7f9a0b8bb82a8f44951117ab2642d6671daf1e5d1639d48aff6a05781c2b5e8976653b0a164445872d393d30355acf0bb49bf2bed4265c9a3b786249afc7a438d706eadb6f90a7f93ad51bde6d2c8e6ff09dacb3dc67ba0d3030c54c8367e1e4280bb5903274191344610de61c3c770c6820a6cc9d826f7c743f88f13580ba23cfc00598fd733b5dd069bde7f10f2b8961c16b69761b0f308dd137f844a67f6054e065863f226141755b96645a291e3fa3fc853b2475fbe1d3b25ca22f4da4425dc95fc855e63d6699b311ebd5fec1c7753e6e81f747c808ec3f618f63eaeb1221075edff0532225c40ccadee304a8997c03920e7ce4e60e4df4d120611296786516dd4d9cdda2077ac52bce0fdf552e1ee89a0133f1f87a6f6f35f5c53958ed806465919a0a5fa42488bf29caf33a0dd469e13abae351d5c6fb1a800ee384da199c823c965d9d5457a3ef8292c4d9b142e3f1fb502da498eb44d95f8c85bcd6871bbdbf004bfdc09ab35758f5e8b6a0d0f366c3b255333c52c8fcd4ecb4536b5f6e72897649f3415443612d72c3436505249a344feeb04883f41f90ade40af119014b3c56fc108f1ab0a77087d9226665d416cd975e9e4605529c032e8926002a70924820c6c7e264a794b2a3beb63d69ae56e017294fad4d611cbd0d3847212a38f22d623eabe3b884a36464d8814286fff52c4dd366f6c2abfc2eb865e0dc9ec6e55ca9d81f1b8cc47e2629bb162e54655bf2a9e156ab0bafb4b8ce96858aeea6e6665607a3f268036f4890dad759486b15e3c9e791429ec8f11bae4ea7c490656fdb0551dcf0b0be017c08bc674bd97d9d701c3ac955e2941ba7d5f2ba122a6f0c1b164b1caf2d50df111fd4287e9e195d181f6f514d7dadbefdd4274edc234025b727680576046842a834b6ad89eccaff5c5209bb91d652357e3750d8bb0165572fb71d09fdfc60f6b1e5d868c67c0edead427e7aeb734e29b96e03ea174b6b1af523feacaf6bd745ceb1bdecec9251958b7f521182daddf62ff6c4f58977adeba81c616ff2e937ca4f16eb9c44e63f9e974709122083ae45524ff87d7a0cca33a90f09b660db0efeb393c61967de2564315827ef1cf42b71c0f822f471713c9d885a3c3281d7c95dbc96f1c6dde0af70ea11232b00a2d215ec8de8fcf84b6193b6ac9d46de660361aabed3371fa44a6f32107f3854262eac355f9ef98701f580b4649175cefc29950e7a0eec958f629999c4b0a98fd4bdaf5c0bd97c963b551f2220bd41ec00b8726836e949e818a49aa1ac5bf12c64fb9991111ce8be3e0cb9605f753dae1a4c84389416f17fb66cecba45d591b22d64e5a4edcde067a088d9ff7f5dbb9dbf324510000c55d50f480a640fb22da9b4862dd81080d61af9560b601edb5e3346263f5f193df97079a27e3f9876078b80ebdcdb17ca4c50aef0c8329c72a7f77584cd963e105eea9c28a2ad4e95c1d018e27d0e720ea59147f59ad796b80b6293da8a55ed47e8abdd37221db0a5eefff31688e2adc294654ab0fddf9c1ffafd4783f01eb539492cb35a77315d0ad19395f47b18298a7b353dcf5bab0b2f193ff73d99310478d2e5c4ff1c68a2493c138818edef73caec9977bd4eda6249c8933953e06d796b288f78b18c343ef561082fd03bf92b084afaaee741de3004abaf746350048294bc52450e31147173f2da13d6ffc5adc718e149f9df3702f414dd3ee88296ae8a0106b071b589e8696401da7993d58a9bf8e5bf417165498c96b4ff5fd2b45bbf88f551688425122a3737ca54b2992fdb4d60957a93097222c3cf4c45dabe18b9d6a69e6f27567d5adec489e4b6812c29a8fa52f1de642b7b0e749c16f54473ed5ca2fdf2199e885fed308fa62a3e0deb7e0b8e439e25b3e9f95d755fdcb7ebee9d73069dd57dd1cdc5145205882023b54f2c9dec6cced9e3f6d24e8cdbb8ef121b8f3eded574d81908e867af5ac82bfb8ed60848b4bfdc1d998bae3a9ca80c1c49601d11a40409c62b1536f01ca67
77
78Len = 48824
79Msg = 5fd54472a44e4476d254c0940071ad42dc723354f76ba61f63fbb9df80d1ee56136f51b6982e66c1da83602fc08093506a9e2cf27cb92085ba5c627dd63f59f8850e91a1d86cb1d4ca38ad03160f3c584b128d9b21e935570e086d3815307ab8df396cfa0c100bf6cbfc0fd7a8258fa1a656bc178e02cfdc868540d8e5ad39dd46794a8bdc205e710555ee7421ca7475a4f3232e6a0cd55d4b5d4525f0bd7eb1e455931aeea6918b9fceb2a32706d31a6d7028a85e102f228417e2e7db68317ae155af70eda98c8dc1ecc32a62e294d92855354c1114c5735a3c81e551b63a81650107557f3237bf953989d17c65a0fafd2bb1e32c237f98f55389e8f8b0810e97e201914c487a68403c6d621a98ddc515780435564245d87ce462b8785def699f7f06ebfdf33dd1ed7dd5a3e781348298c7950a387bff7d1878731d7ac66ad9a6607f2c3a3b6843c2852a5e882a8d78ae9dce2a79d595cdf09626dfa6f1dba7d40ed21caa29e304e7dbd559a89bd1f07d84165dc259ef112dc6e2c5a3e82b1c50106983f6c4965c85073c5deddbe6323003d56abb0df590f69010981ab3407e43eeaa29c6156995c492c931fff1b686eda3741a0bfb9094747d1620b2580415d431ffd6c02245f6cb03e39f87e82834dcea59355b2ba663ce145d2514e15e2b2c60cf518ff510c6c3e2f16d2dc523832762ed8352a320462ddd4d6fe755350672038163d996b44ed3b85d64989291bdf39398cb996de785b9614ec5d4bd73efcfa37fd4470b17d6240b8e4c715759286b04c3d7d791e2689927c9f18320ff2e6bc7306c805e23a5de66eced5f1a630cb43dd46db515f837f6b824b99b86c10b6df7fcf22d97be05284edf0e0be597b3f9c63556db031339f79ac9e6c5f8a1cefdbb4b30f5bcd23c2a4dcf791cbfdd6460284c5af0621ab7c5571e40a87c87be459c85ec81d746930dea24f43bb11d6611ea83409d3bf4f987778d8eed1d5b246a2112ef78ef0252f9ae464810c13f02359441d289958b4766807d9a3be0054897d35b01830deec1151f9e3d42f92b80f4aeedd65c78c6e98afc562a3bcf6d72f238c6e94a38f2288ac7929a7a61c92875c1f115c0ed8d261a727f0794f17ceaa3dabc717478f6ce7f2e8b295f000241e154b4575bfac8483f6b62f9ef4e18f7d341a65faad5e2fc1ddaf2b09adebc155ff09e63d5aa5f95206e66c7f4ef2ae3aaf3ea7c93589efa8c552df8d203e0ea181c1703d7023b56e603f33b4adb9bf44f7af290d8081210f327a6c9b0785709346087fd090c42d2b8b2711b9a1a5173eb5e246320ee27867ad6c3eadc4407bada44561a12cf5d53bf0448308bb536a8a525eabc1410c3a34becee25fd6fda453251ec229b53751f2280e142c6b331daa659ab655b78cfb08bf18e40bb02b7f1650eb2dd4ba1707f0aafa219f21c29521581ce249e2e34f5656b0a04c00485079b040e13cbc038bb9f17f47cb8f908591b26bdc28538d8baffe4cc39b17d2ecffbb9698bc2b8b31b08424034c051b535e0cfdf07b7a0a54781e33ba739759991aeb72c0ed992cbe76eb8ec0ab12c182e8b049cbadd6e82e314f1bf15fef5ae95dc86bd64b8556766f8ff62c33492198e454e5ca59ea856d8e095c04da8045522abac865506096ee1cfa1082af08ca09b3533878ea3580b6c0c57a615e0ab768246b3eda96bb6caa01a2648068e21959f843d853e948588e8c0bfda364ef1f9fbd3235c27916562eb0214891eb55ae0e059f4bf7d1838b5942656c27899dec6d67b823a981d1e1e0aaff5323b0e3d69a7dddf9b12d7787ab763a3c7a2697ac65b655aefc4bae7e6444850ad2540d5193b378682c77a4dbf9aa22e517e68cedfd1ba32e3730ecaa2e3f6ae61a4f427d6e69071dd62a9bf6c860980c9d23ce1fa82a1937e6dc1ce3a2de096b680d23d89ee102912ac0bd769c1c02095678dbb00b4430428797cfb966b2f901480811e1b9cde358b6d499c9e93f0961f050465d7b0c70d4961e75a9fe40a24e36eaad27238231dae6d0a17f446c16bce7348e669be563649eba9f23be29adb8b10f462780a066ae573f74e51215a26097b02469c25180890e06acc53ab063c742e08d51359b0a39749b84b9f6be44f3ae3da8e5a2f340a8607d4eed08877d007928d332d6f49502bb5f416c46d866fc87477c58a22d3c5932a8d6298c1151daa032c84ad92f8f90b8053b5aa6f690d1bf682f314471cbf200f3d30959e07adc6488dd17b0be5279e727f3237b8b4b19b31a220dfe63882937f8d5ead677608c42a57217f2239614c521d94559290e3b0ed8055d5474e96564224f6ca6389b40a71337da11e1c307dead8e4eb43252cc2f1c49addb18781cf20acffd3db693b02e5c8ecc949b51b99005529e0149a13390615f5df6e0bcd68e1ca82b0173d25134dbf76dfe92daa085d3f6b1e4d18217df41b70c4c40101884c2886495f2ef8a473bf23cb47ab6533c93cb38c36c6dcf6837f1272fc91a6962b6e1386fb643e1f1d71fc75ab58d5800bf4081217cdce0c7ae9e3d25de543fc4444314f32067eeb147c08c55c5c8158ed11729837547f28a300eccc312260215f50e98c4e3d4170208a50a4a4def1243538f906df8476b0c46d3449be73866d463d422595300e160840daf8c906ae4aac13a64457853b0ea6d8c32f4efe3b48c0b1450250086d459648b0ab14fd3f341a4a803be77e56a811e7a26827eb0a1a9454f90bc6ece665904adaa3cdeb2c4847858fd1d79750e8cd45d8da9163784b8bd06629410502debfed5eca3cf8fef0fa6bdcef6efaaf35a1986d6fd68e0f436dca9442077a4818ebda4606a94a3c93fda46e7ef5ccfef656896a0d3d93566b02ed8c3f6174417cdcb99a415b0c6e9816d94e64b438c295b4bfd69e0d9ad52911de5509971b7370593160629b641d690eb2828bf363857983e3b9098fcd15e66448f786f196685d2ceaa251b17ad06dacd614d9fa78ce0a8b9c1c360b529d0bc1d17ba0b70ea8ac1b8d67f6e5770f0cbaee0b38109d26b09493060dc851f5fef121e83e30aab9c3efc2b8397e8362aefea1708f7ffa14d3656f7f7610f3a629bce14648a593250c6f309c02c6c552bb42984ac58db920dbc7d98f59295f37f3e9b99da55ef074ed65801b390366669b4c7aa1c483ffd23082793f9e5cbe30c34250f63fa3ea2cd097593dc67e8d27b7e4f07e73a9f7b33a5ef6962df1381a038d4f58fdbca9d71ccf640b917f631b75d4a2e8ba46c64a6223f99cee30f47c1a935dccc7f054fc39d3498c824e10cc3ee337e781a3971f0e98295aca611bde701c2359858914248f6bafc88232bbc27bd85883b00990bba7862fd7a7cbd4c86df049071fcd10d686613ec877758d83927cacc530bed9a596b5b21c6fb748c379d676de7e05719a867c9f934b5dad99ed97dcb4e70a9b6542ed5b2f086d9f56fc9752e788785ef8f7837a31e433438cf2f18f58be37fe8412f6d21a5c35000a5efb862926700079413f76ab2c3e79e20b516eba9d8c29897097bee55157936607cabaac41337ea4cc783c0809c875259f8020e16d5045fcc39ac796d11a82f25fcc9579bf0a010200f5745065175fdc15474ed514cc796672c59637c3c8f236cfc9c0978a3db1194680c58c27746090d76ca09f7c48ee4ee7e1d3cf0ea70dbbbd88e30e8814b57404dfd7c33727a0c84cb7bd468b0bcb3c89b526679c00fb0892d2a5e7a3d73698a3db53fd7d78460cdcf24ed22b5f39b8c00b3506541ae4a5b76fae29c1cd5b0f8c3ce142e0af7ae4efe3fa4c438a604bf4a9abb41e3fef1b9227a7dccc3f4d6026ca289b4b1366d9ed546abbbbd5677c8d582e79e2b544f18dc23809ab753313d84dd10fa3ed2f723f0b46277b8877d4f3e0665e88c50caf0f0708b746b736b00c8c83a7d18500384bd035996aebb7da8f09fd6af9b76fde7fbfc0ee854d7ec02950e76abd23ffb27a6ddf1772465016c79b98a61bd3940547b207b6507e32cb9761a5604f0f546834a8edac7ae06910045de218d761a4accea886188f947b57bd876491709028e2e24b075d6b022b51af1880ca16a8c65b7c69e51b2ad580ee058acc0606f0a3a9ea1cd4342bf4be602e941dc4bef1239bb9bccbc8098a6a17d63186c6fa75ec44b6e4fd38a3fe49c5eb995f0cb884e2f3ed6be02515fa605b98453ad935682c3bac6a2971bb68f4094cefeeaceda92dec803ccd3d346f8b40b48f8f489e118a17367801e85c79e9b3bb5d73ac44a8290cdbf83a154f2f125090d42e1a1cb72f5ebbd42da46c7a4d4b9fad9612a4c800de6467ceb74f831e1395dfbf5799a3429ba34754add4b34b5960a5fee8f752dae78450322a1ab3d7102b77e907fc1eec5355991e0c7d6c0866660e5436248edeb1a37c0e769a0764cfbb6354332d6e55103b9235c84eedaff918af3f0213c435c32ab409a4b5c7eed8ab6ca9e313dba459bcfa3ee92e7d669be0526856ac3c06a57fbecbba553a9cb4655a901d98af02b74098e478076655d325bd7639d73d7ae00c62fdc361a997ea4ff5b0eba33096b12f35cc7cc0eea62950b912b47c11b9fb386a47c4c15c0602d304b2541da889cff299a1fd415e7e25c70ee4cd83feea7e6a9c50c75d9b128458513d61ec5d0299ef8c090472fe0850f384938ed44d36f10cc2c1d31daee3f946a2fa18f9982a988fd6ac973b1569313ce3c8ff5746c4dd85a241f1e9dca0e904c091832ca028533a3e34c184edcc510bf22a27f530bdca3d057928a96f72dafc73a9aa6dbf2552598e468735cc5736c67a620e9455483e9cb2108045ad80569582ea93a53b491e528c8df336fb326ad74317bc1dfb8ec30a73af01a5dff3e437b7fe48ba5dbb3e8f01ae0c6fc28675a415f23a796bb6e0ef0efeb4b14cf20d4ad88ad1966da43a76b454dac8687bdd97b89b8f8eede91eb34ca4a0523ea65736ae39341fb32b9b716f25662a37382c16f3b9c346c84f03bef54acd6efb364c6401b07b3f7679e8e7f8c9b77b75e6e98b90f4df88460f1978d19744eecccb743a999aaedd00b5a94018e9d5a56bac9d5d55f6e93bad52e84aa7340cbbf98d56213d9dd3e1970867e3972dc98e61b3cff40b64ec49463ff79a41c82dbbcaa37a82b761f432849aa83a3d3c9a209e2207b87ae9ed9959ffced165fcb0d8873668c3cd8f18ba0f92f7acd2bf50416c22ce11692bf6132eb9f558dc789cf9776da94e48cf48607f19d9a11d5df4db11dbaa67a1d20e9f0c96f5956ee3f906e371c489efc88b0c1e56d881e7bf8dd5d6742622eb873e253dbe54f2e2e6d0e6136941de8c23e9a632727bb5f88c23170316c7aa0df28d8d07589dd6022828834f7ea9b4e5876a1704944aa3186dbf89e0e81767cfba03bfb38c55a9945209c4dfd88272c49d1745dce5ceb40f0a6713b5139dc2fb87a8a4888406d2610b7b910a9e5782ef0df719028d8e50a40a269dc9bee12157038522d06537bb31fc87d21af9ad4b2e7e127bbdb313e0a116010f65126cedadd4a122d15a71cbcccc346f55100e354b997154567fe3caccd50251d137c58fc3a2048dd5883b6af9248b51040c01a80c051b8a151a8878edf0304b5554746d6116b749221a1d0082ac925e6e140f0c3b6a180742ac8a50ce0e93e6399102f151d7c14000369ff52d0b537fdd51bec99e7271b1255c6fbc36d83408c417f6825a8e2a58b9054ab2c3ead69d97ea9947fec32d720653c123ecf51a9a3f0ed88743e3fb7b94aea59d0bf0219ee50825ef220554312cb907edb90e4d85f29e316ad57d3b90d859391fcfc63e6c0fd3ec27d4e1efd6e0b5ca8165cbd6af25ed8792d805f27fce308ca1d51335ed5d727558dafe05486a6f9149b8d3bc022026656714222830be582889e6800c0b170e48ebfd069e711210e4ac7acf07652a6f5051507de68aeffc9540cab5cdac84ceee46059ec23820c04b127266c0bf8df0d2b856be3377ab42592f495980baeddbeed3ba707a85dba64fe36941eefa8fd37204ec8c18df3852febd2b142b1c9a5cd0f9e424cd408ceb7788270899fd793db99ddb8f9ca8df550c513790d8bad37a1d1f4a62c4527bb64c677462c9b093582decea70c7bbe873095536728e7ce05d5cafb5d166a1f03055e918f787fb244c5857e3d7a1009bd37f30f165564a082c1510ed19bb1633811a76da70dac67641c2478c6b335f409ef54a2d0f370c9510d0aabae3cb998bd023778375cbf9cf5ef125afd584c11efbf40bb51839aacd3016e5e4d79f134245f952dbad617c78cb6f5712bd9c0c7e1303db5029640cf9b56e29329c3e6a9e0a2371aac1a437b9b1c4477ec9842aa80eaa22c5eac11b60c661de6ddbb088e844293ab8589c13d938765bbaa44301e4137148dd0257bd4c8c766c5d3bfe53671e9417cd1b52f622870ffd90f4e17b7a4ae1b5601a2edb032e353bca652fb565beea6fb0b2cdcadac71794c662677fb1dc81d116d94f5eced526b37c004b95284cb6aa2ac415754a1f14882595dcf4d3f1d905c6e8c12cf5a9d23d3ab55bdaf9f17d2f03f933e1bab89040753648c426b072b73aee8c2fc0d1c03fce2c656e20d4c96803fb2ef471b912267eecb4d6f342d3513894b94d77767823fe0c7438e51f21bcf16f0e98b94b23a10760271281cf843989824f7061bf834f93fd8d2090f70e939700dcb4d8964a19da39a9601a7e0ed9f55f567fc7d5682d55a9ba0e68861756bb549f2f17c10ff6bd2042a80477f89743d3d762f1dfaf230bb502eab6f4c46b26135ff3bef5faa179bdfbd288e3cadd3d88d8012706e19b7fcc6e9cc2699d3ba0e624e715599480d6b7dbc6eeea0d12a9236444b17285fc7794040dd40c2b2ef175f7f3641664fc9bb7ea6d7eb3489d504f8013d64a23aebcb5ce233405f5ade067dffff253f27e926431ad806703e8fab23656e0b7431916d8d4c72a7d831e3664e5f30839c76c8167b76f3b2dc75a6ef48df515e06ea54ca51de2fd9c5eeabb1610b7eef06a2f3167859cf82e1a5b76be8ed8beee2bba28c3b15af6890d7a37226834ec9f63306a0da11aff918753d8b83fe7220803c070db98195d6d18357233f5504a6e3bd6f30115d3987f93aa5d89aa0b8b577d1fed94da057a6f088233efc0f44f86798896eae9ad0b20c8c9cdd9d72a3f02213f6797800894b864cb44fed009440fa5b0197023929f9bad16f052cc2d87327788a68b9209f46fb4776b092d75713048b5453ccd699d19cafa8e9a93fdab0f0863711916efe3bd81ee71b8e0221e12e9ffe2f6ee1a4dc1a8de6e593480f3c05b3691e916a4a7ca51971eb2f0f693dd10f6b8468f8cf7bcce285938b5a0a76ef86acfa2990f88bdafdc39a065db17b845028ed2b7a9e331c44217de20440e406868f1eca818d0be20248c2948b8f4cb118b2e456e585949139270f57c54715f3297bf714aa7c5f72ed8ddf6a074703ffbf95e45bc81a02c42822c22d2b718f2de5e03d687a4b18d605ef5ae75f9d43c8cb4e77aaa0c0101d978120f29574b22f52783c667f7daab3e1f9cfacf2e68e94a24918e3fe2c4f061deeb64891b5217fe5908e7f389897751839982b7fb736fbfb1232684e93123611b7fc8fbeb74f8815b5ae13240051920f3b6ed34483ff673c467ed7f0a8fbf619796e485affbed0697415d2d0598ba34d5b9e44ffd12a5edc323883a2e28efe9baf860324f2d2016748503eac1888213926b0e0f0335a4b51820a2bd3b42d982ec6ce307b453b6385aed7a735a1e98479394147c40f01c532926e10e1b26a5b395bc150ec4b4daf5b1436bd0baa225583ffc9d9e9d8a354f60fded37b41c7c051daea04e689ab2d4e24d7d07c75c50ccfd6a527e024d1632246c6f40f06b86ffec0b29cf894b665d53d459226b93422d37a8da23587fe884dc3c0f2fb55dea296a9a5b9a0d101f186d9fa6288c912202547cdf958569d2cbf235740eed38d10b0025dbb6de31058e98780d22149c19d4bcaf06dd7353fd91cd1f47e47f45622e1472542be2f63f463d253617eafd4f2ad609f9020884905dd5c22fba53ccc619104b6c0203a7f6c8c26fc80ff6fceb8c0c51600c2e46b4b872e6d597511524545a76cb42278b519d911e6c1320e01682c551e204ccdf91290c52e0836167a5685cbb1af338eb794c10fac92950f3f7956acf28f1ca984e380bcff9876b0c71dc7ce4011d1d0f955da9ca885c6e7bb74c6194dadb0fb9146dd725c8a9574aaf3824b727c9be3fce59c35850b162c17d3013689fca858a0a51d81cf4f30d6a8705bbfe35ff03c34cc7c56aca32140d72c8e8121fc71353596b777b266d75b322c9a97fd2c5d4e2362f19c99de66da7bd9c495c03d9a15b28431a0c051e786fa80f5503a72519e6b419263d72d553d688349c0cf30918eba0622b953a0efce4415c29515c26ba15f00e548ef108afe3f8194aeb965e5e4be94f10df6c45ea5c133a8c3398d09fb80f950b83c1866a1637d2bcc195e05cc32a9233b244cc2b1d4930e66f032cb1163c37b3e58b576ab76de759569797fa9b8bb4fad66aaaa56f09c7a0ce4641d6799d7bb47cf684990ec1e08871458c211a353ccf1285e7429c7b8520180918f7
80
81[L = 20]
82
83Len = 16
84Msg = 8a61
85
86Len = 104
87Msg = 37487aa02b03bdbc6bc62e7e26
88
89Len = 352
90Msg = 6ecd002568bae3bf1873993041bfa292eb94e9ad092d8eb3585be82e8a20cb36a47a06e7a57d301268a4a533
91
92Len = 504
93Msg = f6dc1d2f6b8e126d99939664693d8709513f97d730074ec2794e536d94ede79c81f2b2ecbff3c2c26ca2d181ada2c60050997f3bb087ce48d956c18dedb227
94
95Len = 13976
96Msg = 07a6372c863c7d7c6764e4f05addbbe161762735dfd2d23bf268e2d603cd28de9c369ac379390473e1d3fa7e37af1178cca54fa0f782dfbe68070952b93462ea46c640d43ffe71f5fba42df98f4c48ada0d8aca8753e0731508bc15dff283178ae5c10a6ff132eca5dde63a78d3ac94685152897828eb25a55fdf140fd33fd4e7b03f283e201a1baae8986d25603fb0b2566aab345fb48031d648144dddc2e3556c0ceb1104f348d96ae7dc0152e45c625d21b46e70c31f250c858aec4ab2cf5e79d8c79b0854e0abf5330b9f044113d306161968f4ad6f0973160c9dc296056d5a11523ea2b56fbce8387070fccc639ec1c65ec663b9dc49aa880dc4ddd3020c9d44ff7e8cab6266e436af19b4ecb82010a0f8f9469ef380034a02e3f50051a6a3f233dcfe9d553459dc1bebc538ae0183448c9405c351271dea808d908480e61e9793cca111b4cfb9874b799626a1bd9a0f6e0929ad51b97ad81b2438f5fc255db3a3dfec9f0d8393c6b245b03d3faeb58021db3ad391b17a91174a66db4feef1b4c889699bcbea7928f4d29be2d47f76455c8cb1dc7da9cda41962a28ad8cd7b39965b809e7c7eca1c6792c1ce1c8a4cad6290170e91fcc49fa5ff64ab433b4aa081c8da2d9bbb072f9f18ca455469b946c877e3006b34ffd2219335b30ba2e0980f43cebfb629d0b11fe70dff28883ca012c6ae4855fcefea20a08e189eaeed7eb36ed6db3835976f4e60053205805727c5eec15d0e9f155637a9e66268b9c1c302bcaae6ae88cbb8cf1668a487cc996c4662c4a4e195f094cb31c717165e0e13718f8388957dfe0bf69c70cd0bd763dc38c530b67b9c12244fcab8bd13f602de848a2937699f9ef77944e5f22e3b470601789e1838fbea9359c733aaee2c7082b02ee459b7684ef9bbc200da4b62d368351f5520a65ffa506dc9b097117bb7ae88d04d85fb525e91327689ec0fe86971480c0e864012b1e9f044c7d80a4e48c07320dd4292086e4c71d4c98dd826a9bfced112bfa2beb1ce85cad204451ec45703931bf637d4fe89fe8f485620b7f4b21e011a232ade7a8c92be77925e878ae0bea9723749528fe83cf89ecb9616dae6ca0e8d5754ec6c92abb21108c2f33cdc18c6887c430b72c5b193356494cddccc577bd4c2cd53188f352846edff0c2ac7869cb74bb16a77c0f0f194a7a9477ae15abb890bd0bcfeb0c39381a87f1d05319c7e971c10e9ef687f96450b400e25b4285032892b849fd5db8649cedfb03c88defea063ee144a1ab1f3bf05f59c7db364dc39c11a446c3ce16307d78d50315ba29f5bb9a57438564c8c7b3e367cd37d74b2375a4966f47489dc5448f4979428abd32193d3840aa983d3020a9f29d760fc7493ab2576c90b1934b799c1d0d55e4f2caa78f4ce61930c79dc017c2dea0c5085d73a3b0e4a6f341e9a5061a6658af11e5edf95bdad915ac3619969e39bee15788a8de667f92f4efc84f35082d52d562aa74e12cc7f22d3425b58f5056d74afcf162cd44e65b9ee510ff91af094c3d2d42c3b088536d62a98f1c689edcf3ea3fc228d711c109d76ae83d82d6a34dcfbad563cf3726519b519fd48b51741aa86720836494b7a589c778927047a25d73508adaa401e9a6c0767a675e31c5556cbe35fadc9671359b45e985c3c8af84113989b299ae4474b85e4b5d4b0578ab1e8a2915a8df97c4f52a639fe32272cb91bbfb721505dec46d51383cb8973425a714245c2e37d0577fbe0d66381d9239db1f08a380cf609dc699698e0fada2caeda44d58d766c4f8214b10642b80b8d7d8add7cc41d47108ab7d07dab71069a2d982cc900b331caec317942122158bac6eac9175c2dcba0c04443aa9188832b553f5ca8c336880824d6bc02486a2b4c086665d276aafe3b1b93729829adca50c44466fd5b5cb977aa78fbcf5c0f0da1b09216468a11493ffb39efdeda5d669ae92bee2f2fb250aa1b9cbb11c36c7a6c6dd26cdc3cfd572ffd8c1dd72a13c27a327a34c6b6b3d80fc6c67c72152eec0c8ecbdc1bd5cb829b811e7f29af6d786f4e93dd4c96fdda295a6aa258d7b2fcf291c2d68e0b1866032475964ec0c6f2fa8c2d6a3936ecb187350def4e818507bf157c0e9b33406be7660605af14cccc9c799b4e051d0d0899e53495bb8931a6e2984bc6dbe4e02ec8b4642fc2f1cb5fd5a5520b48cfcb49e1f9533838753554dd98b6a1b8a67409279df477330e5f37367e06247ca5c3ffefd00e693dcc0c9c30754121c9ee88a574915b9e77c104fd2f921c2c096573951407ba9b440423d76bdc6fc978237a6e302cede7f99038ec31500884775556941f1edc30e3a417b0e02cb6fb5bfbe5cdfacf4006411287bedc565fb06f1be987416407dc852254934df4ab59edce476f3506e65be6ce6ddf91038642291fb8e92ba5b1f0b105670905a2c14796110bac6f52455b430a47b8eff61
97
98Len = 48824
99Msg = cd8490c93613bdf1f284b94b330f6d6f45a39c651d2a160b340e2eb696fc6d1c35e88872845190d141c669de92a97daa5433b1d7b0b899fdef2ce74b8fe72a7296a5b5be26d1dc86520367c730c7400c2fa06f91ab4c48a7bf4ae35a5b9acd5296c4fdf7451b0ad9cc439b4e34f11e5d7ef2bdda376f8dd34d6f092b219dc085dd4c4a6308b8808f588eedbbc7af7f64e83182fc7ca7cf4741a341060a7969d31445834c982fa8739ded4555108acbea1666a83da17f77cc42ee73323eb53203e3b790f81c08e94c44678b6538096ab7b09916e6cf7ceb2af85987f8e4d982dff1ab59b0bdccaae1f405a73366b5c5935dd0b43e2d2894290ceb66a0246dc02de728c5bba30255fb56ce8107c3144246c5156a8fe40ada9126adf67227fa56b66c37be63f532516211ca012977b04a97916f201f1baa2629eda520b51508ab4229df2ceedce406dece0110e0a911464f69e7be38fb91deba0addcdb3161d2799c628f5a57fa1dc37357c947681bd9c36f4832c20ac466c0c245de3b250c33282ea1a02d007f03b34ed427631283eb614db4d521f555136e7e42b4cfbee8134c63dbe3bb79b5a8b9f9f5b9f5ac61cfab1c54d197f1e3ba613f251eed616df952d691b88a16466343ef2d0f63882ddd2d55b8a6786308b2257f5d7b38af166bd7f1339d2d8899c9eda8fa86215850ba547450c267eb3c9147d96c38161a69d1584e521ffa23384313a1debcd37f72ddad02adb3cadce7ee34b7c1f42a15d0d030487daf9488aa7562845a11ee7ffccdb38b300935caa31f78a4ff3dd93403cf0c6a16ca611b58c736aafd33d6dc56f0f47878211d26f6ab801b9453a7f74b44593dae0f047ddbbf2c902891111729edec44f69a05944b18e7a601f41ad24fd6833da3dbe3029bd390de7c9841b2ee2b079b2bd2737518fe1bbec88da64769dc36e4a8bf716c219b2fe059d7dd220c1ed2c59878db5bf8b198e0689edee921ebc0cd2d3853fcf57c363050ce58071c5fda6ebcfbc1bb62e9eb956286291a108bdd4191c4ff47900d6068e1ea26b487649af119b9bb15dfed804836f2196cbe12d8fc86e3d7ce89b52ad49dc9ddbce5b370f73f512bedd853039366612453733740586d1372143b09f21dd4dbe1a2bfc308db8e4098c5e4b0c1e16141ee50e85fafefc4e2529b3c7252af37aee6f86e19df28871686107d7d57dcc812bc077602642d2ecefdd5f694b8f336913210793e4068da2178600b1f41cffb5221c9b4b6298afb47e85701d7b1a44241679d8996f916c81ff437261cfc358b9ec42a2ce16ca3bacb8690d6c1d91cfb3e0bf1e7ba45bd01606df856fd03c7e946f7ab371a89e1fde86d05fdd97bd7b1c583b04c2ed2b5f6815a460645e4e1b4e950bf6bd81dd0352d1048df85266f1696534aff5b1cbc17f15d82cc8e0c0d4f0453f9439094f8e0f7f4bc045b654d9a2f1f44a9c57019f63ecc41021c05b5380675cb56ea8bb691d79ee204d2c4edacde3c1fb3f4996a11d84b035f965e74009e2ab80e2c7ea3c84a834d4971a1e9cf423e4ea67ee526eb3c3e4c2d7372c4290a0741e1fcca5ae4cf36705abe98ac81e98a5419baefcaf3093a7e0449ef1021f88ffb7ad21b2677e41cdda12025b06542c4b2564f15e0b99db43b7c7020028bd829372122cd910227cb07c53cb58fd9dc620c0491f3e2bf883fe6ee8cb1f5b73767977d857e4513e8b5612f6ae4b56014e6a3ad2a065b65472212e2f611743484cfaef860999d1dc5608c58412fab888ad72bb87dd9b55b692f31e252daf8944ec5c02a5a9c23903c50dbd845f2fcc3bc9806af13ca7b025cabe675195b1d56f3fe7d7bca12530bcc0af217efcb03a218bdb6f9726536ea902c8303b02e3ced22be59753588b5f0e2f3419fa5345a942dbcdf3010465384a225ba26cdd0f1d74999c69f336bb6d01fae5cf81cbb8c1a7a29c1eb83ca6b51113bde56b8cfb6a5d72557622a37f039d090a689accd02b57c691174338de8e05bb3620c079705c969c58e56b079dc9eb44eb0fcebe548f5a31f4072a5ed56a2f03107bf40a359b2601eddf53cade66f294cfeaa40a0d94b9c90d15f61852f295d3911f8ea914d015885c8c64540a83badf0021a416c3e37b78236a2ecd1fce4114033416bdd3a36c18ec13250ee9c74c0fc4dd564b3d24a825802d5ae402a53bacace115ae3bbb329be79d1e5e42dbaf0a6446431145fe49b86a8703c7c41f8985d54f12e314c16ff89351d8addf66ebba2783f2d1a11965182aa0b0dd2de53586c5a695c6265c2b173958da648611090557bdebf11a1e042f089fe98e049f4796c60d26be38356fe020d9ace9008410d53a1bb7db78b52ee44bac364213f5c59f1eac4e3314f3423b92fdd7a6156608111ac6ddf58385ec1f3df12061208db98816ac948d803fad10d5ece2018c60faa13de5e5a9033745c824932e53f4122a39f635813545c1b74732cd55642f19ed6deca1585ebf7242c849bde981572a2199066e9c912b2068c8f1c8b936c43ae95c6e22bd7b80dfea05f495d751107da5928e806d0af905c87b5a0795df146af6580d8f9c6a0e2645686d43822ce9b4be0bd5937c097917e048b5af71c7e7521d490f107e9231ee5bd9fbf0727ba87774ed24cd52f471ffb71849ebd55605996515bdcfe95bb1df3541e7c42da4166dd01ec3597634aa6455d15fe14af435e8d7a55ff1682d55a2da867ae63d11fb3fd987fa5d7032ecefc35d3fb9570940e779e13da18070e6df5292f97f2a281f9598101102c955fe4808a2319c85fdef3d55b19e05bb8c2d3da64bafb67a53491513a24f6f0804aa162c8a7db25b38089373fecc45a0eaef65dd9be3b4b7f9436a5423fdcdb5a9b60138fc6a2261225390d9ae0d8ab7f0f7ffff69dca06881d33a637d634358abebb333df41151f239add91abaafc89070cb2159ce3a31655c22e4696c9fa7a7211d1251d4bb21ea4a321a3dbebc29d97f526251e40e548dcd7ed07587719a266f006179dcd22e50b3705152817057b097b043ad63b8d867edc20aea9b4c959ef4ff70f47128cfcc21e31f17978ecacc366f459ac1cc459a3976e4173ca322675f84f18036119ec2f204c3fb554a0b72f7e9d8c882ab147b3d280ca9dff7b9160b1b437b901f03cbc05fe05c6f44824b48aa8da52ae7dda1653fd500f9ccd221843cf76513b3b74d094f14d93a00d7cb954bc4cf2f04f9a35e38edcb1e84f62057647dcb3571f1dd296ca1e049f1746a8a282e85138500e7649db756b2d2ad88f11c471c89dc6be2cd43481013b8d0ae83da2b855cea7be424f8b2325b1850d1fdef03e765458df4513d57c72ba9751e1edc3c4e7f97e3202bb46eec7be89871ba3704aa6c6fc08851e551a3f655fa1fb798d12f003faf31c56b6df399a5dd0ed29ef9e4139dbc254bc5d6051840a859eabaaad56324588fae881fd638d2b70fb3813402df61d941ab495588e5fc3823249bf9a03cf877902394f512de118edaf98843a5445e9073fcfa409df3db0221f1c77e2dd21e74f9e10c9e180dc4ed17010eb949c6d67a22bd5337b2c68f9eccdec778ece728e91353696b742c8f5a3a569f054efb8c1ed478ee9b75e26c768a5816aa6bd08a4c72e745fdb5deb34ecb86b3a84346c1c70f9c16fc45bc0421f0da2f630912d5079f390cc53b78e343310de722b53d2a3b4aa386caa0d7e91986e19c3363426ba30eb5284293af81d00158a3f5233327b40c3b989725ba7dd5b31ac7abf8d3e0b737e843065cd7316dc2f374a00bed4cf9caa0d6e232c854df1bc24c3d484bc6bcb14ec770d5745474dc6ac3b3ddbffc551c9fcc2c56a5e0ae17948457c01e701bf1554022bc2b7d9dd42b2b91172fd85e6874d2d61fc7b3bb3cee2a9bfec09f6d7e98279c6f511f4140b116c856c1438e34bca59fdca2409f025b896a52d68719bf93e82e7d89bbf798991fda0af8d06d17f39eba4bca09c1fe594b537ad4c9b94ab52c895539d639425f9146b24b016368a638e5bba391bc8763cae7c52ff9c496884f1d84e5e08ed451358ecb3c4919dd410e82cac35ae744078287c05c89b42999ea6b8b127d40d53a5722d45139e8bc507a11e7add7fa9ab12cc40afeec008a4668e3e6440f27bb5780936c0e3668ac51262390c79b3f21fd041cf36ba3522f3a552714ff188bfd554c60d0e7d11213cf7d3864a5175d4047c2f3284741f18ec22995a5b82bf62190151bc1529c6d9927f9b0c1dacebd9c2dc406f7f64a973f9a70cff6e3abeebeb46514bbf2ead382f7262d46bd43d88c1b91a9011d1f8ba81fa536a7162aee2b2ec6fc0f2d6efc87b98d2e41e0f946969da659c21053775ece415a34d42b6cfd5bc52259867b411dfb991461ca618052309ca9c96468c2da12dfab0e822ff3bbe7ba281982a239ac19c47024fe1f0e3550cf0975add1f680a9dac9b2c4ab0aed4f409ddda6765eb8a0a9d1e9d07458c69ac8195541219b18efcd06c0001f2ae7fee2d404666a18ca3cb3aa4f0623e86c5b1229f6c2ca28d951111294b91edc52730b6b2c46e000672a7c89b2f38045bd3e37dbb8a75e18687a514dcf740c87a34834d3c3cc8aadf6166ec0c42d2be92f90a3af49633ff23cd80848ceb57ac550eaf9ae496bdc6a2d7cf50fe107895b4a1ed014f78af24eccd6a07420f1dc0df1e7c44b4ba937dd43cab9c798371b148325578d61931766af02b45054bdc2d9fcab2f4b49092f6fff7c27886820739d6140a4a905f0020249e8ae8dd87da1a1e7b1851eb01045aaa72dc8a2bf68055e7aed41d85336648a3405195d2ab61b0e29a770461f32fd05e14c17d72c5252f026a7b9abe7ea9176d3c46f6ed9fb716758d97b41e4f5d81a24538f763d83eecafafc668422612b40cfc32b3354b24755fbe400a2bfed494fe6d0ba0051713b776e67e2f1915e94708e6dc74b398f2f526933aad8fe7dc32faf40022606aebb6e0756b994c3176fae7640ee06d6c67bd54764c4752f1bf831f43e0227cba101174c5554ce26400f333dd8e9f6db1cdf670ce407d7d06c3aef4c0724b62edc8f1ba3e04f0e394d15a73b9255abb4d6ac70303dcf9160d32dc02d4804219ed5c7e3b48402e58ab2f58305f9bb95d2a8759947de96328ed5234cfe7d0b2a9a014df7e4cd0ae48906315f139b8635d2e6bd4aba32e62b8906cdfe5622c411bf0373d0cb07d17bb2bb5b83eae4401c243605fd1df759fd0ddc704ccab5a9776c40fbf6bde0f11b9646c699f26063a9550ac228c9884c277bcadcc0a2c225dc203e28e253c4e464b23d2529d09c7b7dd3c984667372472b615645f294c4e3b0797f9d1c234015b78502d98bfc04f1fa2f16cf3e7221d5794d035e4b172a4d84e679cb1c82df2fb49d3c6668eb1661bed56705096c2371a19d668832808eedd9e5b1256c18fe7ccc494e5e29145d453c553ec86fb7f3a634d0d45661875f2f1005ba5e734c1a976f37cd23450e4606e32d027bc9ec2edd9395e14b2082179bd7b4f9b8caa2d00a2de71d48553f7d4153cb56a1b08f11925e4b11c9281744ae9171f3d6faa3ab3f88c5c34fd23e4f6efeceafdcbc07686ef56efa62c0ad62f1cdcb4d3b5bc508c1f05263bc347158fa5495828f34eb7fcde98fefaa82bafeefed3f4a58968d751c051b52e0047f066de5be533bc3b1e439ab1c8602f6c67503803c8fa113737cb8279f358dbacdf45432b7a654d0e1122cca93420e956661d7275181c75b0d9c20e84c7007dfc49f27bc00007cf4ffa631c892981fd70141d532fcd51de5c23fe0b7a186d0dc296362f235d61698740cc315891cc9342da17843bcde274c17e462263d0e8b4832dd9075a7bbb443d4b26b41e534ad5551ed5ada102175e695363fb48d6b99ac978a3aa6f405d87f983384ce35740e930491d75675337c5dc081e3d301228e61bde5cc169968e5b4350cca2b085f9f75cc4b88497a78cd0a0073d90246c7dc102c7cbf3516498e8a41aa85d8cc5bc285ff66e8338e85ca83fb6889e2bccff52059bb9e92e92c155a349952680ffd0a3c346061a53fdf074417fc90c4d1af7c2acc3ee4b080752cbc9455ba5931b7e910f1e4af0efce905d2cc9c685923ead387fa532c0e8ad92719c76c281cd010e1acce500ae1443838b8afb48af032069dd07aa4df0d56bcb70a64592633699c8658102f1fbca441325e27f1732a7a973d8cb3a0684d72943ef6f1892f2d7ccf39bb6dfe5801ab98653bdbcfbb787bf125253be2624f6cf44177d588bd7b780d9e3f4e3a4e50b8a253fa21abce6a94b9073289c76773b46140f5a6e46b9de9ec066c176f5d1a69f380e1901216617363362d13ebb26ad74fb008ec08841550ff14ca800a1ecf2e007ebaad9f4e0d9664448d60ac0d8544243129fb81c1723b9b4bc2ee971dff736d9fcde0afbfbf5c50a4cc06a4c363998326c17bdc9e2508651dedd9a2a52bd87f8693cfcff60753acf9716c526e8635f12377e36564ae55d0fdb3c7997ec4dbdaa5b4d18c7b660acd95060831795da7d299a5a8d8cf9e92537dbd3ef7f56aebe38fa97c41da6bf0572a0270be7e5a7dcc0be3529339464c811052b65a938e874ea6da469c7d8992ce0aff1c75e82d1621ecb967213c65f2de582cb41de3804c507ddfc708ef3f6096ba4491e431160f98de806d0f334e03cfb7a3bece601099bd971253f3aa0df845da8b478603d5d88533d0cab9c89f2dd9a1404cf8939ffdda652a94093865a85fce2bc3d7babcff7b9f3306bd76b9af80c78ad518f89ee73b7a710da604e72f4927be8d65d06be2e0732fa786a83e27597cfbed9bf98df445499e0746b9f2cb9659ac0a9cef433148521f33b1d78d13c8441c0d1e20fd93ac450a3787a2292bcbd68cd1f961d34937be9a21abaf26f361bf53aa0c095e53c51f3e04d567eabe6e40d96a17c2bcc9230b18f7e079bc549a314b4ae21d30a3341aa205bc75c7f1d21b0a49549c300faeda243d0ce18da5e66c5b663cd705005dd9fea0a9564174abb797d64c58fdab1fae44576d514b75eaa31c9278b15bf9b6df7c6c2873d7a56fb91ab77b83761a09f9e1ddae535622fb87f7462256a60dd39dd3ceb6690b0272920b635ea639daf24f95462c523e5bbd8d8407c61163ab38877d5edfa04c2a78d4d240523ba97c7d01c71783f8748e85164b4dd08c25506a4ed18300b42b7bc6e417f512ae456ceec2ffc83190991a06d4a58ede215babcd3688e1d61f1975016244e80c88ae2aec05c7eeb1c50caca72b3b415b6b870bf5e10bd1ac3ba6b4acb1d1afac554444d94c97e171005fa4ea9c651bb4e527ff58d0c2f90fb453a92d6546a26e9e98395b09e8471bdcf2a145aacb649708cf048a7856ce8cf390c107ff2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac0d1fb639c516b9bcdf23c34c6145a705498ff9b9747f15e1c08c63da6efeda4eca02c3f00dfec06c82220c9de840040118dde76be788daf84e6a2f44c81fe6defcc474f99c51c4648d297cbc48f081e0809dbda505d020cbe865e430e0491644ec8c52bd3ab8ce8c4862990f49fe2588caf804ce9500ef42d5a50c057c257168e283e4a4aedbe4ccfaf3eeffb212f9e23d15434d60bf4f455f512e2b655aff3225d1b217c261110cec0400f54dd303d6231d028c2eb649bccc91d30a6391c88bff9d447c3cf35a3467be5957e0ea4d4dc237c9f2c68ce48f658f820a3d72d559b60f233ce538c92cb148808e34fedf2d648c21e7f2ea29a77270c393bda42d869351d6c085d965dc12cbfd0311b8bf604f4391d378781eea3b5f1e0da9d0d8f8de88e56fe47d362cd46f591d3ec0f7cccb85a21f21ddcd4107821ce0ca9ddf99dfdfd9b0c9cd45053e5b1b4385bd8f5b227ada31b5c23e9420014474e8b4494fde7c38edfe70994d97b8cbdfac588df49a49c472fcce78cccc051f31cbbc1e0422878d8d490f3aee28adf1587c38fb7e7d1be54abeaa83cf54b633803a5e669ff4295df8735231ce39631616bd05e0e31117c722c2fd6787003b0bc7fe422a089c89329544e085d71102c1813769450a9f66f160d1702cdb17bd2c6fdf0f722762d193ce83623eeffab17b01b10a31db6e2feb6eb3abdbb2e36320e1a56e44e48d26090afa7f65003a98cbfef590ac3ec89b3eb230557cf6aa566e841806aa2767b21bb26fe001f11ae039e0c9a4bf1bf3d271960f16158eb5bd9ebf0080abd8369d512cab2d1aaae2b14d0ff6ee705a38fb0c801a98b0624cc138fc24834fdf430f33e1760db913da3290f34415c9e3df3e97da1780545ab68ac5a24db89f24d62f4a399728e4144a8c89f47ac2d29e30c49b0bcf790a5e3d3fcd1943c6a28f37251d9dd827a69579e6c17b629c927473b5a07b0a29d9562708d6c8ce576109ad1a3473ffb2047eb069beeec24c114bef392c929038c92abd0e6a19b610e27881361824d57008b7373d0ab76379570ded76c9b8284fe2c247791073c29b2fc6fca05019220ab92856892d3c0dcc6da0b597fe559c162d060d71513ebca050d9638164b9ae271fba5575ade787ec5aee8fc253d1b234b1df561db3e36ac64b9b0100dd6b407043537b2b141f
diff --git a/src/lib/libssl/test/SHAmix.x b/src/lib/libssl/test/SHAmix.x
new file mode 100644
index 0000000000..83bcb14126
--- /dev/null
+++ b/src/lib/libssl/test/SHAmix.x
@@ -0,0 +1,129 @@
1[L = 64]
2
3Len = 16
4Msg = 98a1
5MD = 74d78642f70ca830bec75fc60a585917e388cfa4cd1d23daab1c4d9ff1010cac3e67275df64db5a6a7c7d0fda24f1fc3eb272678a7c8becff6743ee812129078
6
7Len = 104
8Msg = 35a37a46df4ccbadd815942249
9MD = 6f5589ea195e745654885d50de687d7fe682affc8da1fb09e681540525f04ecb93022361a27759b9e272c883564223c5e4ecafeb0daaf1abce6caa4bd4153379
10
11Len = 352
12Msg = a93aed0fa5e163a82c9a934aebaab8180edf7de0b32f0fe99f9c75ec305b24609334cefa372c7c758262dc8f
13MD = 66a16799d606c569d2fcd70d7d8321ec90ef61711481aaf7d747744ebfd08ec2e7aead49429af7b4ceec6d8e147ed018e034efbe07982699e818db5fc4b1d71a
14
15Len = 1016
16Msg = 433e88eb2f8aba562d15c18126fbdffb81d5d6c9397fa052321f5f78cd629708ba099b540da5451e949eeab8687a8d6ac35c531411cb37144ab5ff6a7eb46f1ab28fbcd2ea0444cd87c57bf7d3c02952dba3d3987da07622c16e7c086d90e88ad3d9d4afee301d2bad915d868f54197b70b23c9fa385c443404fbc9abf7e6a
17MD = 790bc4844e9aeef8938df0ccda17890556a4151817111a526a88919cfb172f0b03c216080c1b60210eb1942097f17b6d0691bf5b018b6d959198d6a694b922c9
18
19Len = 13696
20Msg = 2c46a76a9dfbae1f5e59f085e9c3d4b600c24b2d404d062cf948e75a3d4ab5b137a31397be9eb34b2a03c78367e0b85448891b511ddee1f787cccd498b172cb7e656c044a03ffde8e42478330fbe9c34072a9e99ce31b41757cc820d98e7d564e06694b96b66f4be34c5eadd0ae4e61fe6abbe4d7ccee855104fedee8b451a7fcedb793d469b0094c0ed07c97fda00dd8c1662b44e3ee6775a5ef6368cb662d257be561a5967893433a4b63f97295036a37272176d081545df00852bc5c4162324161296cd51f76433f2df867a5840f2d0c8d5be00b4dc89443d82175bf69c3bdceb97facae2b2ed68e06ae74fef36d8bd1f75f130cba509341dd54079d45de22845cc8e77a022977c7540aa3e779cb1127f39f825d4d78e55a967ef45e7c1dfb02d9999fd15af2914ba47177177d94576f1091a0657d9e04fe81e6be7b631fc1baae66584c9c26ddbb568750d77555c927bcda1fbdc15c7cbe3e3fe88ca13ff12c59b383343c12976708c0e3dff78be0e286dd32eecf20b71a09fee50a9d0b13c85a15b320b162690f399282798aa3291fdd2f9c40ed873e829388466ddd1da42f2de16aaa9272ccf44790cf3c95382c304e25ae8cb2fc9d9869808f3ee7d42cb143bb0c3a55e03db6d1202ca1bdb744e448640c0aa60d3ebbda5c21e623bb080f4a073a48822725d764e51d415aad1d7c5a7f17433d15ac7d849f910c375ee0899f6a576dada42fd651343383f286009902bb62deeeb2514de6af7f09892c20d0b238f6021f03b62444b1e1f21beeb89acfcd7136416fe7bd8f202e76afaf5345311798be7cb25351add2bb044d2380221009c4d1cbbaba4cdc8631dc0144f2778a6aa1eb3d3c81df0b1b2142fce111af8214d049e40f536c5d462b9224a978e82cc6c420e70ecc3cdaffb726a183c793845315f730fa4dac9fe46e4180397107a6a051f7f0a58ceb9bf4df37e1a81c8e9569187228e8037df2e59c52ba815566768bedc8e09d5e7bdc9f2bff23aaaaf133bb5a3332750f6124ce185e29fda0851addfa2c3d52bb6dfb530fd4ee27dd5bfdce5dc2f41debe6740274bc651aecd4023b098a7d622e2296b50d51b79c4e3f521695a9d43f038e8f273405e26584d3db179e7c1758114a3d39970df674580bbf2884405974f0b9c4b0d8b3287a2314f3f81b6991812f354d655f62513c9551b378cc2efa4c3e08b313c56cada52217fb6112eb8299b28445aca8f72e7170a1cd8bbfee4d2145fbe8d49c6af8831c4d4fc7177a50ee55a7b484261504af946c6bd5e1d6b89092f3c487c0568fa07c356fae9b8e831b8320289039746a435b122cfbc4a0d316bf90d481d3b7d979cc50d98c1190af8dc58e0035557dd5e94f437f41fab513202643a77748f76c6b77302bf40c392cd18731da082c99bdedeb70e15cd68bff59619cabcc92adcf122753c55afde0817352bc247d1170b8ddba1ad1b0faadfe0efbfc5fe6334377fa372c3435691f53dfc2ad5e08966b2d3525b1eec2d993a5cd4ff34278bd40dd80313a0727d05e0a932156152f3e11a190d8d69726f5c57d20f811e1e8932e86409ffdac96c6251c2a2976b8757adcac5d2de94931d1cbea866ec8bcba5774f8a7fde792f6acfd0f01356fd66fdf54a416af6a9397e00f848a2e9831627cbcbb52b5a868ec174e69b4cfa1ed72cdf23f39d7eaf4bdb318c188b1f0fe75655e34ad71907cdb77a1a2b162cd7c22d93dc45321eafb17cd60282e83736267b3e1fb249c307d49509f50839942f0f493afd9ef37db053a918e3ec83d801bbdead07554a018b8ba348fe9b7dd92ea7c5fc0e65a644ba19aa1fb6c022ab768ec7cb249ba17b9dda2860bd4aaaa3dc70ec009804141ad5ebc61203658e57a0887ec0fded18d844a96e79ba7e879c4253056f23e205a80ab1471953438f85848f4ab31ab175c089e0bbb97ea0dd6a67385770356741966053735e2cc2ecdd2c8c75cc045181dd7267584b901674b553082b2c58fb8f8be0b99306194a6f069f684535423304d40a268d55784a14260fa9c9cb1306b82f91cbee3c9f43dea9e50903135cc1c6505605a100bfa28564a2057974eef0852b7b72ce264815026d0759f691db618ef760edde73ec888e181403834f7221bb27a69479ec9b28a3fb0c3f68d4467d25712fc48ad78763f9ea6e8a2e85260225ca1b1a38b720e589fafca29f07257c5467cb74ee53189b8c81b784c43e93f98abde1ed53af60b27b13df6ce45001c6e1813de3521028981086f7d88ba13f6fb1a800f312fbe2f842eebe847fd760c394668cfbfd353ec14ca0366eccd7b4cd63318116bdc42e20a632a0d2b8c5cddb37bfc0a239ebe3800a787d2ece077a7968036b3d9b31cd906f888e3ed742cd769033e2c24c5a9e3c10b6d300db5a17dd88
21MD = a86e07bcd19080d4a83e1384bd8189f60a7dd7a6998406ade0bf03f805375bd823c7656dd51cd9d63e542f8ade41f16d73794d60d0906424133778156ee54b95
22
23Len = 100816
24Msg = f8ed40e878dc68ceec52cc8e2868722310fb117ca3a52e1839eb85d308b8aa00ed0bf0b76aec8a70eba4f0d14d2d85c5a0e876ce2c8ee59cb36947def6c40a587aa07b368ca8e8a08367018e45b984de0d7f1aa46b977cc18c0cd9b7bb897cbb2814aa0ce8f8c9843e03c86c19f2ba95dd2ac4a466a93aae4b3b05055ff148517ecf43e286c57744a3e10a14d0c26e139a503e7927aa688c78609170ebe3b54104390e5f6cf538093a67922e7210e77fcb584ec9b6844e829be246a266460cb442bad52ca47255fb8cfe276108c36e02f9acbd3d191d34b93d29ec40d80496d1c1bb5ef036221641200e905598c54bc4abb3527c5a5f6258e59d4bf54a0498c108a2725428efc2047e0096b32dfdc6ec69d5d72f81301f881ca62a66c22e5dab9fd9d90084c0a36b2f3a0123cc5327a3bc7a12fd947ab57169ac533e4b6a2cb80fc65b9b527cff9fba26994c7fafb5102a0acd8f9d246a3a54178c23eaa04c0fdfd3c0cd980d1fc7a72b25d74df9b95c3dedce8ca316870c654f9ebea9b806da9767cf40605a4b0c7fb06f6b3f197bae7d8cde9daf38530e25bc51b68f9aa23ec0e95199b14bca96c91f3db15bf8432f714dc46ac87218691bc66cb3a42f6865e1c30f8394c8e68c0ddf5851ab7c5906a1994a9af6ac1c44d0d6b95ff15d9f77825ccea40fb9e516d45888f2378e045d95d936d541cea9c8ca52fe5f7d0d919b2b1c59a42d06105ea4f2943c05178e59d67351c5b2c0051c93a4045e512884fa656b772cf398af89081546d920fd3d24ebd16310506a786ab33293027394c1bcb7b1efe46b550ac28529646e8d2a5ae65c59345e24b44cd7b06673f3ed3b9008aa568a739c26682fa596b7a655842cc6b2758b583487c78d14a76bdac7033806c5c210828ef313f8efc4072681f5fded748c31a58ac933b4665c445f07d603e0905e49b84aa55146eb1c1c99196413832a05efee2e64d6732fefc629b79b37bb9390fcbed7226b412204bda523b8b8af5c4a8bdb263ef9f3f6c7b9e1de3a1dc257c1f33b3d54a9101be5b4f2a9db319993c2cd137c41e35c434ce52e859afd1a635af4d8852252dc5e28c729b2b4c96a56d57f3f3854ded59fe612b9b3a51fee3fc1c83db673b0cc7433bff2472bc74a2eeb6706605e308690fd072a7042ca6474603711d8310909e47063f46f287260a26c4f11fe492298a0f98d28c45948a4899e08fcf443a6ba36457dd8329314d53ac0fd0819fcfc3357426c5bb8d3dfd706e205a81091cf08f31cd3459854f3d07e503991ba5f067e3c406c6c5396d8257496f4ba3703cb1ba25c2fe4aa54577af782cd57e85a88a2d75c54039e8b7bb559219edd6e81e41acb6d575d6f798afb2cbf7f00abd5c9c7b0fceec79f9a0fb040ebcbb7bff3602df7b71357efacd37aa57019350bb81213508a006160acde3dae5c42f03141887eaca22d7b33d6791febfb619d11ebabb13e6c5378e9a72e852ddccd31cc53a43275966b7042ddc51485ca20e1c456dcc7020cafb5407548b044d332229911fc74d7fb97de25abff7efb431da82de2ed7e25d0dcc06ffc74e57ca93a6a9f64d76a5c39776fe2266f88d6d0229b527525fd2e22a1407e26f94c5bc6adb1e7327f3c8bb8d4c983385c579dd8f5623df8cd6da569c7de73d9210e6b9253a177653a13ece075940fc81016d8c35fa4f6542df5120c174158ff32533476f4e059e35117081a24798fbdd1eb10f82809836f8dbefe755611347f75423dd8571695960c6f66cca71f0a01e8fecbe1183bee3335eff10b4ff8104132040e2145ec3164b2448f60c730887b9d7894e5f7df3f876cb17136c99cf32db1c02fba860937378dbd093c4c5112133781f06c8ca07c527c2c085e8ba5e52b399f2909e217aef6e3035ecafe2caeb1004069dea023af7eab873deb5ebcef2313c9827821bb9f89fd3d1570a569673d3ede86a4fb13dff242eb98450a8917fd8865c56e0a9f11d72394b79808b0429f3a83cf2465161596887fa2d557b367a1de9c7753666b0cca9c30cba9f0a749c03c55cdc7a6d45852c76ce2010de3e7f75d95228efdc79949b238d90b25f983868b7f07f585f7b00e45d9e132f3c09ee84f794d899759be3dabd46a256f4cf8da71270617cc2425b24cef25d1d2f3945afa6f81abfccc858cd02e05619649b1a5347650934105c02622d538447223d136a8a0455cf3c6f61f696b32266197b5cd1d936fd3ad4288520fb4a2f59bf95e659f33210446ef18debeb679dd99de0c3c74a6eb3dd783861f5db4e94a151c42ce27519d0bbbf1f3b1163563ec06c8bfd881d94a3b896fc07352fc97ada73685588a2242da1b718f81bb1077bc70fbd58b8b52163489ae403838b533851bec30ed0ecd97d72d1af534f3703db59f1f563bdc39d690a0e90e545506463a37e84974fd7b256bbb912cb4077d3e3f5bdd4bd2bab713b696c830b1f2185734c4d2dbd49d5372fe8b813ce73f5e01c36bddbb376ef4541033f2b0355613eeda8951ebf7377e08f967902eb7e23c0fa798c6ae52401721053f1095cacb1e9496500e83c412236fc21566090b3a3eee55aa402c0b774802fd81c9e8579761cfcfdfb1aa23786b2dc35dacd5ca8d8d283369f53e4a5db18060c2c6b0c303052aeeffe169fcaf7ecc63090a9ade245045ab9c8aebf738772297caaef5f857322a597846c7370083d409df27612e47b0cb240daa3cfa51c57108612ac0dddb0f59791289ccbdb3a2cb1fa9ac31a23dd5440682fb373bf0c1f41c4fe2185ad7c53eb69552807410053b0c2d40132250e637b8c425e6a35d93333b5b7d0557927b6179c848ec455fd1ab38348c0e96c60b2da49bd15118df64b6ce4fa48fbc555a4b2874141718e731a40b85382ae6e86ead31cea77f83bf5c063bf1febf71688a832d615e09d6f14badedeaeb6ffbfe343fc7274e78cd46a2aaec0a349c5f133291ee57cdcb65c5474e46294de6bb50886bce6c6f44dcb95f2a4761ed2e6c9e7bfed51e0964afab4e0f7e0b07960f2590baae66b1ec9a63ba0fb6c0d27e81508c51487dbbdc9beb8879fd58c188dfc774b3d0ddbd77ee8bdcdfa0ed8a9387728e12b13e8b3c10cc1c132bd822c2147c5ddf9a993aedbf78ec256db1be76644ca8ca7727208bf89732657152d34e948d73c47561d156f773136684d4162d02260300020123d13a95f4f835907c344942ddeccafe2abb7dc4792c4f1e39c24748c63cba933b16be0b8853e058c47a1ae2c4dfff39ec2339b345fe3557d03c1df91a0607a711636c4416ffdb73532aeeb74f237ed8bf971388a0659e4682a46b8327e751034cbf2c87c7828da9d24baf07a742ada34d1ef38ab1e8f2b4f801192c146600709533e61bc2665dc1e9e6441bf3c4f6643bc0c102a10f9a69da5b0e3d0a0c7cb694c682493032b5853f02953b5c2fc0e1348565389762fc2dcfbb34fd305f2d9df080e859396ffcbb7da78aae0a0d72e3de76c774bc6a81c87f2872b6afe97ced5269009304a4992c4add0bbe24e57632e19ad0fe37ae910193aab0aeae32cf6d618ab33eba59f6a04fad00b1d2403396e6fa661d31b695a1b349d62f56c08fe6c6eae7a482177adf341e51d03ea511d7959c721bd20bf371860ecd7fce1d25212891850b85648db0a039e6638d9c78bc958add3e41341536b5007be63fd1f7e3308876bcebcb97dc3b05a7b2eaadd00f8fcc8dcfa7b961bbe727c9aed1626ff786d6a0ffdbd1002cae8a7d047b6181962a686c152b2341c7c58c9f1dab5af424d183ed1c7d003165a1d04ea3683ff31a0f68615af6f91c21f736e67df641ed31b998445afadf9052bbe004d5dad08f62e5d353e42fc35a92242d8414d99dc4e7e81c8c027af686baa5c185e3f99abb3855b22cfdff0a62e2f47a632b7df8e00e0317af5c24ce7c64077bbb15ec27e062070cd3eb8e549ed9112469090ad9a96eb59294b021eed81987178cb2dcff67a9a2e930f6032c753e203380f8a7c987cea393234699de03a1d09ce204f0a8b6d5cf522b6887174fdbccb08f3e7c4fe2f778254465b32766c48812a45151ac37ae354dac87419f9476baa27e24b2f322b2da4ddf579750684a5881bae2269351fb7de59b9d5a4badd8951135f2713dafc57215dc626ee170fae7f20bff98e36b864e1fe0f0f9a300c903069bf0e0b6f2f8e78423cf6063e89dde6c81efcf26ef15510563c84730f611ac879a6628e55115e1a29de6945d37fbe4f803fcf2e344712d9e0d6f6c79f8773a9f199b705235e20a7830ee3357c5dca29d7a6c29a3d2628bf2c42c8f076cc4525301d8e1860729070dc53164d9fa08bf63cc889eed01b0130a7146d860bbc09ead3865a3082db0836a45f5506c3e46e452e298764939226cedfd06700e4e33c6b4a78add601140249596831e97f960b973a4e4dc3fe2813fa34eb47f998ce57270368fb81719a09298a223f7e3931ce5cdfab3f658649533354e982c87dc9e49eacebb5bb4af9a767b4f1c03d774431168cd4fec1b2726f1aae3f9a062a825f3295557eebf3af4784487b869fb049de44d03fee71194fc200af72103b157431935b5ab9bc122773ffd313d52d7acf1078386090fc011de695e71567cfd51c06317d4ff8841ceeb74ad35f4e5f4d20921123cb88bb2079674ad39e133cdfd6478d69c9bddc7a818be5d7b254bd9e0abdb030f52846fdfeae8ff370a51a9c5f6017af3c6c3db17c5c614ea18ab0e3ca0dd5de621217dffa36e5c5318fe191040a50cc3ca620683bc34da6c142e1c50afce28a86b8b66d189adcd755561a647080d93f3ede1cf54c3afb7e863fc8a82a2576d3f79e9b2bb634e598507a3d7d017e0176b7868bff3a3dfb4474b3ce03c401f33929364e727fbf8096b77eb351435c7a113b3215cc6246dd86f1517a7e550cf828900248f7c1754e40fed62477b296a37d3e53231360d012c4908b466e49b0e620c0a5031228009f259b030956ebd70e49357c3c3ac2842b6bd6e3ca5a3e985dc03f7105681fec03b320a7ca753b782ad3b52fd9c8e3bd980b48dd6ec8901dbf756108e85015821c880416e0693e0479cb31c0743450f6d9214afabc4feadb9bcee9def460a58d3a02d9e3039970068b8e3fd0a403a6ca7f2c71ae2b46ab3c731b1e65e2104c47fcb1f69e7c8c6df8c09b33f2e1cd4192faab316a44536dcac608832019f5765cc5240eabe3c87445c980c299a5e7ae0acc2c2ed19fdc8f011515bcb00476b03633c7669db1b44f97f6cd402778e9687c740dbe5686789b79d0b13f784a2a866eb91ab2d66f064c49e8df513ec348fd7272ee548ba08e1f9f99696ffb53677550d59c67f88404f6e610455a422d9cd987493ca5c366a397dccface2bba8e3e99719dafa768956cbf6fd8defc4104b8925878716a0514f70cbf3fa2c2bc2f66fabe654eed3076257e71117665703eb88c79e4c2b94e8e856e7a6ef90ee2a358409db78b98056ce1750eb80725d70e35507fdfa5933a61496ba48fbd5555717b33b59d4ef211fe096aefd478859ffc97a41372023ef114adcae5a8d5e03c21369baf1e7f417cb40326bc6db1cdf0904651dda3c1039a2f1755e7c329f7c03bf33f324206ce6e1638711c8c9a45f153aa1f847cca2a5d3af1d24fe7a1e1094819e8e712cbe10ead1012b7371b35cbcc2bd5b10505fb63bea20ac81d25e83ed0105e7595b6c28400f4d336791ce4a584323d0b455bbed44392c5f86c9d5287593f6986d4b0b8f9974a7a4157859ba801251d3b44b2bad84f29cb87dcf1680d6d10d1bfd59f0c95fb7bd07fdb3ea2fccd6e3ee80af438956ccfe31e750972f893ea5dcaa26d077fb3f09d990c2f41c8707368bba007803621ecd76540cdb8705435d74f4300eee04710a936f241c034709e625b0dd5dae1f6e86d034426819c365a05f5be420cdf4042bbff965a666a5756f67259448ebf742b6ea189fa17a4c3bfaf651d19a8a525f09d9cff637c8fac02eaa58d3ee3f7221da1e61833c0b183cd9f47686f09597e8115b435454acef80c079eafaa22b18927d07bf8b7c5ebfdec9c42a52b7824d45decef41e6184dc2db1505ca6f94172fafc10731706e79b9856dfede353d2eadeceaf72a302e3492d7dc81e3777e4e9e1f3d33cc4402833ffedb241a75a09e9495d671f80ad3acf06823bb04a92b815edd0ca7d01dcb3318c1ae5c62d3e99c0ec37908b45b51dd65f6b45b34ede2d6f553f60a45e20fafcb34ae4dbd375f52a5db9c62650deeee78e955087c2bea75ede7c304347b171fe0c1a2a033894be6e04605271307f307b2a9cf6ae24b8c87ce033a3fa4cf2bacdfcf54fcccb1f580476c7d00c631a8529a9eea2a713610341e0e25609dc8927e51c58a0a9197a54963b5cb95877354f4b8316df02ed2bea367704a12274d96bcbe0d0d728923a368bb8ab98d5db5401894c822632308ddfd309071fb4b477d8eac0ea5dbbc3e3606d8510d9051dfb5e4b7cdcf2c57c1b76902d864c3109c901da53019ed33cea84b407490486ad9f980a8a63df3d2e3921064afea137f35179130db3351f5bc3f5e7d590a5ab08b5415efbd345f9d57b71ade7dca939efa5a12d677b9af0af14468176a43712bde10cb15787c18bf066eaef8abcdea77d3a0c61d6c74ae7b54fe90940d0233e4b874c9a141dcc740d7fff43b9fbbc012a933d890232cf74fccb7ff7eac1148e203c7381b7f1d1429b1b1152ec25cbf7562596eb402a9328e43b5dc5cae36592da5523f0b9907a6817ecd395a7c778daae85bb11372b20641a04250b77b3a0ece885d07faf9622650259b874536d6d2b92181c834dc111b6fcba483167be40ecc922fb87006f63b9e8e632879563f37a8f712db9fa68c1a20ab239c0116fe022fad1279f3288b8e74a16d447e467b6381515814dd3aecab5c2a09c400b44e9100c04c720dc7e8c6d9460002da6c52004c16999975fef8752c2f9c229cbd9e6446b226cc454bd68cd665668a17328bb30f301e92ef5c7a2197a326df5c99b422096de8af231d1d8872e6e505bcfff026d4862f28d4bb3856a66ced22c9b0587451d8da4230a38561b5b1c69b523a4701a2001382aa82fcbd60733a14696a540227db44aef346d6c0a7ae5173604d59eb828614cafc1b8cfecda054dcc7306f73925e6d1af56ed74c51c6cdb66e9fee8d7a0078254fedb0c0f5dc85a4686870709b499eafbc8451aebadf848b0598ce8f955688bd2d6032abe10d1391d67c20a049841f95d2ee0c8deae2bc1baca0c098d8718cba1ddcd968981c47cd98d247aca4f838f3bf16d092eab8be8deb1f8d504d37cc44a8c96c9f22f2698036d4ad3bb48b31f109626565c147d20a4a7dfd61fb918f81548fb4f78875c1d138e819f6822651b93a3c92ad77793fba5222d870ea671f9cac967919d18f96e92778548415b2e170d90b201215354fc48a77e62823a2c2bb354782ad052732f08beb278f751529416f37d83ea26248517ae2ef2ead28c1077908995a2d25db0deaa957bcab39715283287fd626ea7388abccba2d90e364a7ff4284c84f70da68ce1aafb5be0401cb9d45e085aab41892a49e10cbd5baf2c34f5e0ca076f2772abea6f622b66020d546f8c2f134a87f96edbeb9b08394b585f2c2f98aa792f97b43b5f3aa9c34189804a9ecc2cfaeefbd0f967d85a25bf3136fd8132dec38aa82e4af6ff677682f3b62be27a180aeb22f918c24f23bf6f5954e0722324cccd06829fc32ae4fe3aee6e5a03b3651900e13fb0a759e544d033418b6ed40d037b4549a0404792c8fddc317b7f028493c4c91d6773932f8486417544f3d007e5f9e6fc02fadff175303f77f6b0e1f709bb3d3a93b38552ccf62688a39da1a602dd5e122e6f4e9171769ada5255cc5cf938dfefcbe3ab0faca434c42dc8c357e89a3d1488fa3df35c3580b124ba3bf6d0d203d586707eb692150ed05a01bf9de5c4e67bb948088784016394d47abb853f2b6b643a066ad81bcd1735aed4e108a8c1fcd025b548de874eb60de7f3c568728959147d1219e4b830e06ca2bee1f8a035e28a54ee6958d4821a84e5d1e41139905f7ec60fe67ce5f4eccdcc2c3d1e4a753a32dd3004970a4ff3824471822fe2b5010b9b6c6b01336dbf0181a95cba2624663215468519871cc39e8a7f4a151c8bd03363b402020f2fb98069b2cb8cc1b7e930938e7540d95d1d223e47865135793f9eb573660ff79f7ed2fae503e68ba44596ee745fbd8fa562c5c666d174cc01b1961736e18b8b517161ab9c8058026e0ddd6c94aed0086a26e1b959a5e05eb9d8c1ff5b2ef518ca23b4f265db61b499a48cc46bed28d23ffc1e8d9c9e345c06079ad47c88dd4e8e286575bd7f9420ab9c2d5c6685488b8b34d4c9ac04e1427ae0994cf789b48b01d1db9c2fe75fc5187727bb11119f82d0739ce4048467a08cd635bf78cc1b6cc9c28fdc199d351064a81456f81c9e56a43aef7332973804b06b18a26caa62523a7d0acc272ba49124b17bb68800d5756afd34ddb2b7e2dd8a118aac3fcf39d9f853c4d2c4fd3ed5bd25a6604d68d57db93d15aa1160f8a97e6c24238e84f272780966867f9c644ca2775cdac4af0ece036cfa6ebb1cd9d701dd7daec5763c9a4de0385db383a5647918e79c6a6de1f4ee1f6b722c561704c8d7efa4710d78dfce8ad2df0d3d82cbb59cef0bcb001f70bdc6e17af1a720b117fe02bb1dd527b18e6bce70e9447cd0cc85cbcf431fe7c006f5e4ef878a974a93b25f492847c9ae020583c9d412f4124246164d8f080b615e2eee267a7aeb5fa0974de52cefef23cdda7b305a33a91e9b50471ceb72dae337c485d636e28d6ee31f5705983808b1567d4d4ae820ec445c56e6a404cad6b408691475397c0dd6cfad232106ba96e5104052700a653e21f9ac6d79578a9f52548f426a1e81dd45bae30acdd4d22a2dafd633564d6b2f45e7d35413503c955cb0a9784b42ae8c2a5933a6729f3922f969a158540dcd201ecb6e32f88b5b4921914a2e8f424c8b031f115ea5d23a21e6f22439ffd7e5d11b08df729f65613b4f6ad3edbc9a066a5e712ecbddfa6fa764cdf170c0485f82d924a99b7e7ad8dc44c1f93e49b6469a9af3de5691944413f1417b753bcb84d5b7a34f362c383cbc802b0c88bd23a7ac471b9287571c42081b1134bfc8ce104a550942ab1f2a074cb00a90558d6e841ff15cfde6951f03e450a1bfc90dec6c513fcb2692ddccc31d22e5274d41036656183c72fce208e44920776f196193137ac67d6d65ce9cfaae774f23a86e6ee8ff3a4e9422a4667d971906e5496a4e80278774899c882708611bad282f6c1d666bc5e7c40082b43a6e98d494a18e9b3cf7f154fdbf90d786e59e83b72ad0ab893c49aca50ed37ea5202e650fda54f5c46ca2a35c476f4b009c5e6733232275abd1341199b63d22386c484cb95c43ea90e609c407bc79ddd00609cc2eb0d82848db239b249f164b7ea384d0239fe1e64d04955b9297472cafa2ff272c5c78100aaa86cdd8120556f25652a3c12da5853338e3be8f505d93ea03cd1cae7e78e95befdc0e26b760d11e05403c348e0523fe036381408033c009a8e1f117af5100a6eb91f08307df465c20bc1dd029875ef7e49338689f602d98f2dc690a57a6f2864e57098f8bd723574944ad3688b292db6d01387a16493912722ac8f91fd12b748899bdaeabdf0479df788eda440d7bf30d1c25d78d757f00b74bb556506637fc1ab87162f05d464e63a6272db3fe56e9357275035d6b6bee32bd92c4a1dc94778551e94ee1d8854f767bfac3811bd0287672aaa01ea18c25650f05a68cbacd9158e479b508e72df778589e1e03dc543b60bb3b10399e5c50de9e728e69774fb3f5fea757ddefccd0f9da75afe4b67f9c54aaaaf646e858fb001a6deed0a8a769ecef0689c988de566b6015fb8c40aeb5f2df7ea4bee60e8e69d15c4a4aa5411dbe63fbdd6418cf025d87f37362f15e22aba83abe1a3de9857c71c2234023b969eacc0bc526363b7f30b092ca114f2a6cefb34394d146866ac86a33fc497a8cb8e2a5bac398579ff7958878421fb08fff4f8f3deb8c9641b8de392647df3017a5467f9d7b23036935ec6e188dd6dbfb544b8a9e04a4b3c7fa1e4d1d9879daf69986b8083e6eb023a4b5eff80fef17f8f65433c882a21565a919448e6091d1b61013fdaf9fc3e45bbe827c9b4ab10b05600a1961e81d31c7404f8e0d32bfcac2937eaed811db167dfdc29286b0d51bad2bcdb9dea76eaf495a31a7fe717c1c98be374a36271cdd06ed06c02ef4c3c06cb42f73b3332ed488416010e6bf2f4dc4dade6e2e61f19e9306bf941868f59fa0939005743dd647f0a04b576a7e71d4c383c479453501e18ec56d7cb79fe31ff534afbd8609ed701ef163f9de31bc58114399fa0f22b62c66c380e8a10c34b7e731df2a8d39dcf36fbf3a66d67b973e3a94bf6ee0bd96f5c76baa76492032fdd2f59ecaee403d486f543f2cd7ae7b0dabe1b5566e681cd40d384a94349e9668650a6f2d2daf86c59a7b02ba466cd03ce1d50c3f0ca4c02dc4b3d1c0e7b9a77df9eae0bfcffa32117d7e05adc7195f4278c93497401629897a58d08ad7141ea52e0163f14992d7a284e7b875ce4640b4dd48ceedad1ea17d8ab1e760773044845e0899602f1bdfff4d42ab80c0765d1a8bde2ba0a830c050923956d06c80b182264ad19ae4f7c39e43195f7d421bdcda00e3eb5ec5ef2ec91d69df691ba7fe250352acf01fa92af5e2c634b9c7c97889e9147e869acc153d88cdc18908f882f371ba9c1e13c26e9cb8e3cbd4c5e1988080ca65a67b3a4c3460cfadbec904d853fddd2f5375b6070941fca53cc106b5748480213cfbdc1c34320a0478b05f76fd0454c75eca069cb1fa7b21704dab67dc40d041c8a1040db378e76655636ad725219c049e6536982d6ee9f11dd032280e622547c7ff44a938a1f233c356a98182d22d5770fbc871e20bb37483dd5d6ea1551993b95b30774a49b50d411ebe0e8c92834094e23ec2664d822c40e96fb42b8607b62b6949e05edcaa436d0ffac6a8ff384068acfc0220c0b098d368fb8113918a4f8c9de37cece74c8695cef2427e54a6e77ad092a9b7f1d94ac9f0836deff41b905b5dafc58ad6063759b0372a634f69a639e19521825d66a282f489c3172a3659264d0132af3571e637782bb6fe5c0afd24547612166fd3409d0991392fa054ea5bd07a4cd0921a13ad7b62a0b5e6d56cd8adb7f3eaa5c99576941c38aff311c49a8c9d8c755869302a2e5e40109c8365a551cd3f859b9421be189d3a0e9ed78830d5cd6a2414e9cc4c25814d94d98f8848e5386d6dbddd65d22b96c5d20020a5dd409c7e5344065871e57e01c91a443501dc8bf619890fe231319b5480c3879dee618d319962596539e2970513fb5c0c8eac3a71ff99962779cf1d7e916566d0e29d121c5cec5d7302a18ed00be9316f3de8c669a64c2a960a588f9c8a42690f6867cda7146e8ce27aa6a7fb27606eed9df6a235a42d17ce71627446e206e879de56025a66556263f06684dedcfd6f083d6a707e5fc8f8212d716e062f0f7fd0c2fc62bea93d68581265a803c31cac3f8ac8939c5f8c464ebd19df42c7e8998494af614c8383294f3f3883f2404ac10404759e182a038c97aea04a85530ec005e203807c5bc30fa9f5339b32fb0427e64915e29a25bb25ac60b92256470e7de5298d42c6b88995f8d2fb704e49d55b66b71e237af90fcbfd71d9093e1a543da2e9911ac4102346dc4704859cb33ac5f5dce2b3331a9dc9fb506461a5436c89bf90d39afcf93cbca4cfc35da6ddb112243928246ae0d1ba269b0fce0468d3ecabbdb925c9ea3241e2dbdc6b151fb4aa724a42f98b0248171fa01fa103f116d0e7deb65dc359b09126f9a420300fd209508ec7a50be56d5b470e387d0c52a1d104625f9571ce1404d1b7af3fb00475b95f752ab96610be112d33ded48624015781e7198f4dcdf917839471fbedb43c34efabe09941fab6b342cf672a29dbb1eed0db788dbfcfcc63bcfe80f7718571f691818dd6f839e3cc282f85f03fe0400171cdf1235049fa53de7450b4c40ed398d5a486f52124c1c63de2afc950e81839f52d17e2a7d32f82788465a65da6cd763c6360763561ed2bf47749080549b6e2db87514e1ee1c85a0bbd346eb6e3cc29267cbedcad67a287fc5be65ec59ba8b6854b31c83dfc5155187d4150685c5c2c342ed68b01ac9e44b60f0c100a347a0f93074dd37d8956fe2f43110dda66e9f9e6185c23dab74cfca21f3ede4bca87687549ea02662f45dfa0ad27f9959a120cacb7c419810e1b1a50fad31c12c47d5bbc61bad77044aa541d29faa6126c60ef088b82eead17a52843307d4bf798b853d90d14c5347ff10615381d85e964331b7a123d15a77a6790d93e920052ddb4db4baaac5e2b27b66ff955e53b8308151c81da4711189ccf0eb393c5bbccfa1f6c94a8d5f4bcd266fc6a12061967ce836ca042257368f567dc42de6ce0be84449234a6163b72069f25b7ead4b2003e1a7665e87ccf211abe94175d1c11bff2c0b6bc110194d34aab96934ef59804cd26e4434ba166d9833fb091be37b139cc10748b881c93690528a96ccccd2dbe024510b8da37dceab567dc52706461c486a0463369cbb99bcca2e8a4d2e005c45401964722a4b3ed37c351c9f21685e8992c9634349379f41796deebffc2928058c8ef6ea37c6e4970dedb78d1c2a00ea9e1ff1e7708470a6c60e6a2b1e966aa872776afdb238e97f716b3df8dfd42bf0f7ceb52bf9eb33731bdba5987b8f48b4599d67b383e77413107857e951ae0625059e5616ccb41131df9a480efd5beab3a9c99615921caedc53dbad675c00ba1030577db1d22731677914fa958b44792cc9c19e2ac71ebe61a05ee67ae7116e39e1c0d103f18bbc9d531164360d901da8234d29fb0b37cd2a60c7aa2adb2a4b297ea2fb14122ad95bd4592ef86c88fdae1e37dc8e44ad03c0fcdfa3801e93796771c5a2ec1e4ab12a64b3ffe48e7442c6224661ed5cc987aada6e778399941f7b20f16f94fb346b916be87f005c9c13789741602039d38270643cce3c347565eef5ee09139330301951c15756be47994de6f1802dc5131b9b011051b1d87d744756831a71cc8528487f032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead7a47b6907d7aa95b79aecedf4a637ead8fc6fb8654c93d13ee79f5d6258dcc61993aebc65e4fc14eea7d006e31f6e9f60e3bca8ce52ec559876fd20255e507daa99b185671ce1ac11d448c30bcdf97b9617195e0ccd2d15246308dd6cda74a8071114327fe203b1adbaa780f3243105c5111636a51dce966f5652e39d4f91abbbb4576234d6cacc3ec57cef2dd4dda49a6c33d12bb7595fd5ab5bb15b40301f34ddfb831a5dbf62218f496c003227fe6282e2ac054c45e7f3fc93e51b3ee8690f08612395095a0a12729d663eded879d9ffb325c62f2cb546a48bed51ae232fa6ce28a2494c132a6e09d98c2e3d478d5d2d15dce2e2665e4a3db448931068b99899c2bd8ba87349b0cf9e3c52cffdcf58a59b4fe0089b298b42ad7553f831bd60f5cfa3e09102fe773e4c05412973a678f3b3ed420433cd664dc7f218e816a17c5c9013ecb84abf2dd073557dbc41b92a91e0339d57b8b077a9a44d56427fec5748c47c1460b2e2412094db6d0ad06dea0aa0c1368592594bf0b2f590a9d6149e44dd4adc4cb42e5d9940d59397b83b33b88604c210694e3fbd84795c80c1b09ddb3b1ec8bef6e9dfc4d7f295e551a79436007ca48aa605ef5a89571e59cb26f2766e564e39d3bb441deaa0c8664549881d90a77256c0f6c77241fd6ab74b0e2890f78ff16fd2f9271ef96ebfbd0b878ba9c703900752b7447f4efaa60bd9dc9cd5673a36b39d49f54274caf03c0cf82b95141fa20ed3ce02ebf0dd74d9eff8eb9e2dd3a2976b244b12fd33ee75c1f1c459f86a1cefbc817f42d7f43ba406098165cbeab99df4fe751ae3382efce32af252e461652c7598161e74fd8eeca474fab6b1ede039935f2fd4d7562623b90a422a78941f47a76863d95857c33653d1b42b806bbafcfeccb7bb4a0c58acebf6104b2570afc3ca88e4fdf2719cf39c964a1ea7d2ae4a7fadc938abc95adac495093f6b959b1347501606b3f960b6d739291aa8c13eb49e98b0f78d2b91400b6d8961cb6165c8b684738e4d4db2f2ac30ddaa03a5e0cde4142b625e81907f08c60d7cb5729456806c89ff0efd08397423e44738ff38f8e88684f3a099dcda455521caca37ab4f4d9ed5d37975d4fdd778b97cc93babc804864a35e3a2db04598152e67a2f1f157681c3962d46ada23ea5d9a524f9cdbdd08a07a3a85b1f6fbde11d5a35c7743b83bbefd19aedf6d92241d16aeca7f33cc51839b75f111e8edaeaed808daf2f43fdb3c6f032ea45052ac31d4870c4d0d76aa75d0b88635ce449054013f234c4a16cffc58c95ba1cb8a0a0399861eecb1039bdedfab4d05f0270c6b16f03f6b8e629f687f133ebf2662c7f930530746679aac2791f54d6a95bfab5be0c33739074ed4e7ae88dde4a8036a7d6095cf41776366b6ae3f8f4a0734f48c275e129cfffff5e0abd042f99a957bf6f0f47fc7288750f4fe30198f8cad7067b36cd87ebca08abd3f9475e7443f83cca91a1ebfc42ef3494871f51f6d52a5524b9391c687571be5327c7c94ee2a096653acb410917fd51e56a92be4f24c1db6b97b465ca84c31c04c2f61eae07e952eb6554aa4d8a380d9ee81c1c462c360fcc3cdff2867a953b655562cd06162af8b99bbe662e0c27ce4d9a1c1a907def48a3231c2110c930a2f1498e32dbbfee0e5c5869332f3024fa5dfb0327a27c663cacd4e9902de34dd93529e90eb347bafa5035f56fc578e8386c7571d1f0ba335225ecd8be026b4544ad70f3af11501a53119ee39a8558ca0ed5b3d897ffb9cf0fcab55a0942d3bf7bc6b94ea27a6b748f2cfda431f35252c44610b7e843ed91ebf7e8fe10638f04f52d6d5a7752ec62350efcb7c473f80b1f2a26805151e8346d39d23551e92fbe372df7979c3f756bbb43f6bed09bbc6b65fe6fd241ae1c2f1a0d0b805c582853b85502968f9478e9a84895f9d4ef01ec4f3f571e57cd0bda68ee1f6f7e14fb6e0f4ef8c7dff6796472a935294fc27b16216966d5021339ded059687355b42b55926854bbfbd9f974a0c26eadbfca8a6183093996cf252894e6db910c71ca3ab2e82d90d371c36b92c9409cf7937bb266ea9b29c41d774aa522e103cb30bbabfe872b57beb027623742806aa7694a859ede9bc1fd7b9e32880b064b0030fce1a0e5cdf3ce558a5feaa32e323dbfab6661c5878c9377ee52a615b7c17bf1228e328aa20f92d070c71561969e1af532e76835fb0436810c3d87b982217edfb1143bfc3405ac9f6f3a50145608dfa8658b0ab642a347255c55b59cd1c5897b2cf625a0f0706c30ca1c1321e90cec57b7c3d1bd1af455e3732db80643383c41eaa6781f63da6233360ee720cc04d171ae2445b0c071e339d547f7ac32f407d29ec7abce0a9e1ef5276544877bab2f84bd2eef47ffa66f96e7170cd54d836c9badbc59435146031502c1a3cc744a470f693636d9050c5b894d2d6047df60eb0bac16d905d46cbf017ca69d66427cb88036eca4ea9d0e579f6bfd8a4a850703a0fe49d39c107c9358e98689fb62bd0475aab4b2031446b437c7f9e373caf0270a28d7b15c71f02079dde401e26175bb6e392106a9072021f0e5c5145a1db6f595b032faed8551f6e2ce318db1ab513db876a3eb42d225014949c19543e9c5dfd2290e28c5d72c87223f0195ffbcba1c02c7d0087721efd2af6881dee7dba7565e07abc35bc3fa41c6a4d6a313222ac6dbb117c69c62db2691c68869ac5fc5e987b0ae4335f815c73ea4235da2582dde81d6fdae5911617daef847be17f2bc09edd88830eac03977f89179fe03eb2dc3b38df43803ca2d38455232549110f4580ec3cc04c0d8cfe493013d2cde47c506ef6a8dfc42d998f70378fac5ce4709345926dc477e9e339d8c87ff6287ea6e2873e14d538cdc3f2a47e0e37a2601652f5b665b616a7d1ef3537a3327a76f93990f7694e6484e7a52a10e9eea2edc92b99406abfb2b11ec86667c7af4a333dfe900bf071d1bbcf4f0ad768fae4f450c53817c507d26e926e753e3395201d3ad89061f16706d841994abad283f0db74cada25beb5fe46f48669a62e0b849cb77097e1b4578b45062af4a071b04f0cfddf87519cf2bfa10ebb4b860239ff187e6dad73806ae968e6ac0f738baa88edb3ae4883a9e59be7a6b222c5f54818f95578daff9fc7a7aba8c4a41a699923e85ddf24a32bb71c808516f64d506058a70539276d57984d75161cba7d53a4a864c51a249a6b8fcad5738dd0055ba8468b56579ba5f102642df65c598490f3a0c9b1064f4eb1962c4c38bfb7d55d496a0b0f7b3f90b42f733d112c89176aaf937eea4bada845f3ca4e9b56b3a5a06b4c90fa4c1914ea47020c2f32531e270007ed389246906ecf2c4465f7cc5d6a347583dd73341ad97199021819be81100d867d628323ef7552db945e4c0be604cf6c4a8197958bcbd6c1879387d3286dff979632c54baba2a35ea84efd7726b662b94fae61464d069e0103692599fb86fdc3a06e01c6ae3deb3de6fdb21806c716e5f82b784e4ad3f0e2de629a18e3a2309003dfde9dde8e5101b83312f76e811277afc286b56879f4eb80468e58c60bc088284d05d725ddfe3185b7c51b472a7ff7db3930839142d4a452ddab628e07d43375801d7c6a711a55b452748d770b84ede35920c1ac74b595baef963d21df9418533fcf959593ccf5afccc753e86c4ae231eafe77a158c2472143faf169db29bf2b53c3288d8b3c9added65778095f85e2cb471ab58362041f0a27d874c42bbb06385a0403ca193cba67cf70029cdb7e73c7e2267b856fa0b8dd4c706b45e7174659b0ee2891df911724324f7ca5daf07c912b9b2abff762e62a1817688757492975db7185c4695f3a90895634b8d07453b36dd95197abc31d5d153dfb0d0ec92639540e99d6590f9b394f14c93a5e829fbb33616e810f59c502be44a13b700fd3009545e34c211abf9afe1bb8ced793c6f516d40010649f83a78ddbe9b71d8596582997d0aa54192e1200db61dade30500d72a184ca7dfcbfb80e5442f489d316cc8b75005564835d4b11c482e2c4d0d160f14a8b13ae0a0fb0ba5e3b782770aaca357df0e1c4d1c3b28b776a8b3e0da1abfd4f7190673fca1e1c5a31c688d6e8ddb21300e4178d07c4e854a718ac3f672b0120d6a54c16957c9ec8c444208e47737bc4eeb0bf2d801eb2fcb72f91fe988aa75f38e6cf26e858dc2a718580ff5d281d13e8fc3e3bc30c75c0193481c39c375a5b06b962d9491f3f1fb80f1cb27067f0709e0b0730573a9b5f5bdbee1708ad84b4ceb1a9a61e4c41e90655764057bfa07b8c81cc83a315be1aed6a49715479c0fd0f53f625fe6c7f36fadd001149ab978532e4d0de3d1a38934c74265b161899843704fad16ffc6189f42a5cadec98603e0f98c6889bd4a559079e074cb40678fad4690a20d988735280a1ee8ea71275069132101b35c18ecc9d3c6eceb4cfe9b165e4b6acc17d4f113ef8283c0fb6506f5635401e916d4f7e7bc3cf49aed166587a0c72cdbe673f467d81bc2e9cd08cd8dd16d90b353481df31e89b45e8b
25MD = be3cfa6c965b2ee4e6fb0236665b0b95f66c8da8b338375b7393672283b0e50b96112d7cb76fffaa6db8ea4a7687fc6234dc1ee52e764d69ba8ac40c0f51beba
26
27[L = 48]
28
29Len = 16
30Msg = 3a35
31MD = 87bea682792f6bb4977fe1b92e0cc7017413dd263732c3604f0ebd63c2817ce5ddc5d78c0137f614a06e72ab1cab2f4c
32
33Len = 104
34Msg = 7db15b3ee240b45d4610950996
35MD = 7311a6356ab38a690c0b3a1581c3e7b6de418996c05e79849891b061c51d53dffc0fff2b8ad1c1eff165aee5ef6e18ff
36
37Len = 352
38Msg = d2a1efc725c46cd6a19760f49edf0bae823c1b4992ae2260085746cf65833bd008e56e64002383f51f960239
39MD = adb1778360ec659e90609e74b6af219a01a024f216b68aa944841429ed5b03b139444b8b848f73fd5f350ef02d46b6ce
40
41Len = 1016
42Msg = d11ad1253592c094746da7b5c88d329bc3ce1929913b8be07e82d3f6b7a536a855f31ad197376eba6f2f4534413fc4e4e7673fdff8739f774a710754b568b7c61a473059a41c98aa4e86617aa66d2601d0f0d584cd9f132afeebdc0ce3da6a8b290059e6e4aa080c195c42ae7f7e1e99865223439929b0a3a0d79b46ca6419
43MD = 0cbec7be7299f48f043c3d1aacf833b4258c32190a21a8ac2471666b4a51b63cc77fff6e081aaf5ef21b1b7523d65763
44
45Len = 13696
46Msg = 2f7a9929dffaa4a4dcfeea1fc37b18e3cf935abbaa17cf9d834b3a8d61e9fabfb7683cfc387d6f46ece3f8bf845827c7ebe86a651d6dc1e83c5772cee1a9fee4b04453af2f68430bd87835126cfd1b3f8beea4d3822fb27864570e255cb65b414197480b6bc20a39c5450adf2474da93d72f6ecf8063899722d3755b7a19f71e93e782d89593ab19ddd3ddf053c54e0bf832311fbf132e8b9e540f38e4d9bcc3cdbf69de54e40ef348a9170ba2f65def167f568ce846889c0161448342fe907718a465e451bc1b0f2e4f21f9b911f186589f43dea305811473837c063b915d849c20deb43323bab4b64e61823f1df119e71962dd975700391b411f8778980a3080ba3c14a321d32c082d416ddd2345f0eb751a516d44ee55222395cfa11e7fc4edfbe7cd49bf4ebd4d7428843a2ad5538b3cd201ccd431aeafb146a65d28a4870a6948a7cc0413b0adac7e8dff3a898aeff5f4b65d10b28ceb749bd354c061c3008ec569d5f90a4d4f5caa51d35b49dc4028e738c8ff5939fef3fa202fed9ebef6f2c7dd0ba41cdb5c0c16985f96fd93a65d134fb4a90ffc0fb6cc5396b843c2151bb7c9170f2fa4fb44292a4af28df5481de0c3c917ba1c46467a35302738158493fbf6a0422cee558d4bce3d78e14b4fefb65bb05043e2cc2a6a8ea64565ff6ce2fd2c4f43fc02926ee44ee02fe1dce25cfde0115c9396c9ea06269f17b2caf58e2332cc1c8528d9705c70da1f76f22aeb1d1b93449180640fb5c4c4a708bc4621d7d2bed5b1a752191cfdd45086d34f247ed1df0f24e7c620de32bdfc4d1f882380d2cd7467c926f48abc75cbfac8788f88cd9dc5361517a5eb36311e6b39e21a85fba2038fd47d860f776697bb19cdb5a4d6746fae507e274399c91648537d905015e58910117e5914f44ebcb00e771d38b30c1473e1232d4e222cebceb4810c48e83e0fd4c852f4fffcd643c0ef9e4fae2d0ebc6f102f3f749b02a5e3a61517d53b539cc24120df3957a633d50369d46c0c226f8924cae51dcaf54d716f61385fd8cf38c2c311a32bcd6594d6930133dc18ef36a9671ba8b179abe95f588ef74e8558ebbc974dc73c26bb6eaae78ef464181e18b71f4b0f986ecc8495a9c4dc0b0b96be9806fbd3d32952ca3b4737a06ed6561e9c9581a33a720123fbaa2a70fc3233b83e56444f5aa0cfaf70fb24be6118404f3e11e6ea004cf2d079a3e93a8ac1d4e297cf4fc43851dd26314a7ed6a5a784b386daa26e50c64692f7db28c21d82234289bb45bad5042236667e6d70a24bc9525c3adcb793a6a5725d9b10911e3bc8e3fd604db7998346e7f7dd1815c0cbb735a977bd4b32b5b976932bc92ef3b56bcadc089045ec95f241cdb0a84c67f1f76353da6cb493bb27a881d37a2106b8b3010cf935eb3601ce4dce3e449eff8331e444ab117a20809a1010db4cf3be0c488f777b6532df908112e3d11592f04a0cc16232d62340cbb8b5268a662b8278d37c03d848a04f0ab498f5af43b0a20e310197b7e1395a65299fac29f051bcc5fcd09a5605bfee370ee8ea21f5807d9748acca815a44d81796d68b0014eed3bb6a94233fc51725de3809ac6f538beaacf8cbe3d96aca21a7a763a957f8892f22c6d086d9af2e5ac9d90321e186584f17e964c90739559ddd034df076c4aa38c2b78aab6dec8ef6be9adf33bfb66f159ec4826653ee6cb483539c47a4a1d95663e6cc7a42a3bf628623a4c9500a59a50a312aa104b198ce5f3e58952bb79ff1ccfa9ddba2fd4705e91b5acaddab9d6522d7666264ac5f533b6d8ac4512d8371c69c06b6d322b046ae2a0a20aec1c3bfb05f3d91b9044cabdd873abb5f2b0e3e19740df31e39828f9ff9bbb20b73541a7a70b8174ce4e43e0d356e629cdbc6c08d29bd7acb6a4347823075683ce9d7de4ab3ddda6572b175951f30a15263355fe9641b3322df7dd52077402a884cd472e6d0b6c34cd63ab63cec8760c7ebe384f7cc31066bbdb7a3417425e039c4d340166e4bba4839076ac9457c87459c57957d0a06dced2f7a18acd22b7295785dafa435a2a8a2c3a1fa05d115fe129d19fc44c5a29bf15b4d9c2b375bc8e591f92756cfc573a39b8fccb8395cad7617b11f14a60e2dbf69b897844cbbcb70363010f6e1bc0590ea594aa924597dbb32a868b55551789f82437180b85661809089d34a168d44b4d788dba23b13542715843eee797366d9ce7793e72331735bc78cd61b13421a568ba3e66926921c04e9d00888ba7ddeb474db63813756ea4a02c1823083e36ebd2d32d5c88cdebb98d511304cc276c7799cf84a1699ccac9569b13f530c762732e6bd0f8415001b2c02d11dff36660b717054b16df49ba38425e3764a56052ffddecdfc686aff22079897376cc15591e11579fe4feeccb55f
47MD = 70e1259106fc7a7c6be11d95fb673bfaf0074e342fdaefb458faf4619e7f0edbd68d509b9ca7243d2e5e039d42ee3b47
48
49Len = 100816
50Msg = 5f464d3301c5e0871d6b41b002dcd09abc80a805de3482d97f3fd7b9838745da1c0534168f76b93c3c53bbabd904541ffe5179cae619dea77446140b7400f47d242141c7f2e9894d88f44c9e066861498e7394f206f594a419790d697f6a11187f84bc6fb288186109343eb11172bec076d041a4c7306d7978c009fc2d2d62563614ed3555ba2d21c8fcd70e8389352dbe4ec808af3231ce990452eb05b1b0dc4fbb1b4265e69235cc3561dae4148c386cd770474863a84a822b2e5f905fc255d55f90bd6a760d441dc52240ba7d8c888a5283891a2c99963d1fe680549d6267cdea92cfead167f6c49663668f2bfdc61fa647f5abf3ce5ad2c6c175dbd456ba41436aa06f5f68f5c88e6b74ea86a79934bd05b486210d3d470a0967ad6d67f7385260578088d7e63197849354f651aad07e04ed301f1fe7a6d2047d50ce5dc6bbffbb1da6b47d740898f4eb54e3c5a1fbd18ec93254cc01f705fce04e6100ced132c519674b2345547804a372b5c925bd9ee9701527db33408d37b72f8d18b882d3c4744eb58f011d21fce336d426de1fcd5e09610216248b51fe2b79b96c2bd6ca0155e05a8a516b7a24d529a9a475284735bd9c4c437ddf399864b64fc5d0d6ffc4e5a7a3dbdd476bc39ed29a0a92e1f2b6b3506c2be5452d4f896db6eb4f895b554b2af64c4cb8dc2369b91022dc50b7291404cc9605c31569c32756a64ff8c4fbb0f1bca346c7b58a5c6774b2fc7f7fd50741d34c8564d92f396b97be782923ff3c855ea9757bde419f632c8399763003b58ee9140c2d62e914c1e1fa742661a9166d42267edc40905b35a25d5c3cb3fb457376b7422896df7bb19c23e8f764416731d2e20cf2c1beb8663c07edd8f105e078e2fed05c5e5897c430017fa2160f565a75a4c5c64a15dd7d644bf355d169ae2696ae5ed1a39e8f81055cdf315e5b0c6f9235515fc4dbf30281ef17b83a6ed604f89293904bf78c7183fcb0ab236cb1f8935e59c51559217efabc000b165d819b717118a03facb61a13a99b194f8b6c7ddfe5850127d79078397a56564c7ed6716a129409680434061b2a4782c9006587de927c1ae09d6778a5f1c39fc419fe10493eb0d4ad492fbd05485eee7913c59df82fe7182af2cf06a6e8edf06676200077bd1408f5c1cec537cb8566470cb44895826d04ec20f0aba4297c501add65c75d5767ad2ab63aa81b7b66f01b32590f1d55b7e50e6df1ee077a19c8c895f5ef62d452cc336e9aee171fa997ddcedd7af86e6cc37722fb5838a46c5e58e7f700edfb7c6bf832171d9581f660752867118e9535a6118635709d6f1c1cb21b938068958e956149d9bffc67f355cb88205d4894ba97c3e3c8be9fa2d20abe79f3f93a6a2f4f56fd075bb49a4b7dc83630e58c32a29d757fdbcaa607352f65483cf2cb4208a3bf94ca7a25e2a4e05279be31c33696c10fa4971d1b64ee938dd299f483e5c098845749a3b706a787529bf2ca56693d0a7a98243e6482a43e1f5d3086ca1b00368d8ead5ed2d0fb79b1e2f537ab9340809ca3a9b5eb2900390432293008ab7086c2811d33de0648be5597ef002c7c462b5e0f4e0b1720a98b2299ad7aa55eb78f0c77c2ab4371385f280107ae40ebf814a8223dc74f31483c63d9e4ed09fc7e5a51bac34d69d97163116a66c84ea9fe4263269b71fd228555ae3cf5109c4d6ced7b9049a2b8069bd2f71834d6c07fffbd7561939188bc07dcea08086bc7182a5270427c3199bf5fb5c4549861fd32a38ec81c4ab058c777dc01864787f0275f911a17838272cd65135f66baf06d8d93bc439eeb55d50b7c5adafed8eb8140b4b05f59871dacf954f4b096c30b7857774fcd319c096750bf605db8e31fe02cd1b9294eaf8bb009d4609f2cdb3a8657f650501b8553765de8f572fb91ac77b35db35f402453e5c58f60146f2906ff56b9c6b3a5d0bb6afb9e2201110919ac9c01a7e9750dfdb2f72afbf7a8d6f64b1c68b9de17a2c9abf289eef24074eee9b1649caf3693118165503a30200993d271aa31b8b92606a10a52612dd1fab495b82f9a98cade18b9d8a723a71ceb63fd1d27372bd281f9b40aa1839b0cc2f2177a09aa8e7b159ac118d7c145e7a4f032e788d21facde2b4dbc1d5d2238f530d9bf9bd2798f611d03ed8919f0c85bc2da99750b7a8d6322d2e66ff6ab9ebaf7424e8c1c3f4fe92be61f65359106395f5ef995e925be3868ad513f561f873acdbaf18590c903d64bd275121c11ea655124d091740887868544c5348664399d3da96e2e35fff34f062fb939d656bc072096e510b40b2f75ff010af68d64fd0acc778e2e13c9667de266b1816c4ac449521b02bbb217002c604be72e73051aa9048d192e3210a68769dd2693e5d44951711aed3a751240d42f8925844131daa36c51d7d59bbaf99623fddf1649db954705fd6f3405e63894f5258c9ffecf83208c2c90cc55b1a8d2972ea6b3a049ee54942b50526b7930953986e428b2c75e47ed870bba68dbfa624dd94112f3059da0a80c583baeb570fe8314f5c66501b34116c81148dd22396fcd6479da49f7e952c8084f97d6803ff85c3787222064ca368f596a1ebb6dab20a03916b3ab071c927d87fc10ecc4e7ab4a5761e3eadaea4de1a0dee30aa39a9e4dbee047201d7d8a4df1284cf668ae3ed7dc4cb2cc4b5cae9307353fd2ae4c105c5d9f3bb021535fc3ae9bf3ff54ddda8b2e1037cd9d69822df436dc1c750a9f557d1a3a63fbe73c64261dae0c70bba6edb57519f5b957f138d1aa5fefe01b73c1851aea42938147bac2762527a492cb85da43014c876e223b05597354d7c9b328df67f354d168a84ce86dff57d8a870db034196dbeff83ebef80bbe52425a8810f2c9fea29ee688a201cce4a5f447be789a3881a9da3b6c491288e8f1091719032608b332e0410f4576597e17e0b5dde305f069be2e80d565bb979a3915488f88e3ebb90e81c264bcaddd72b8843af4a4ae31f723d50fa0995b027c334c351128913bb93e67b1b08f101f6b8dc8202b44fbc3d3dfb530f66e5a8f35e69725c86998c05ac87c561a4706e90fa095adab4a566da4fab82bff6b20076e5bdf62dbd6614245b6a6f8cb6bf60106f8d12b9c3e26f8127dc547e2181531ce980a3273f452892110cfe1ea834a30f99d66e026a9d22dc76fc3cec8fda2d7fea701deb84dd45c97dcde57a017693e90983a156f11c4d168d89c06d8a32dbfa590adadd16850854f24bba315b0bbf372f03711a20163afa0c137383b9120b26c59f5e9e7cd2ccaf0ef4e0d70d5a81748ad441ee5fe178e14317cab184fe178fb0cc0d82105d2f423467fdcda0f9871b9d84882609248356f3053a99866dad9f9b0f8c4a897a8cb8f30365a7ae5f3ca6e772d863d445e6d57c6a478e35d719d0e4e84f3a30b1816ddb55bcd79df21ea0e95da72a19cc1fe74fc576120bc108be3ed4cae3bea889fb4ddd67efe858a994237378eb623dab070d954ac780c1e6d2095383c98ba622cbdb18fb53260979fb2672c21a4600f4bf06583a112d303096d4e30e7e1060d869f386eba3cf7aec3052ca17593dcc9969fa9cd88179c262770211cf53f53f175037a5cd445d239cee48f7ed0aa1d715a22ac18a8aeecf191d415e4afd92b76c091803f4c757a9e89f696ab7b11ad6d5f24774e4a004dcb0e3f33705dd8150431f051016af37647b9e44b10bef114276d4b1055b634461c655a82a847639a038ec9f58876e84e9a2955b696e072d8054c3f81173473604d5fcc0a75b4a340dba0c375beb87b8b01a0f2de232bbb8371c3a9d27a0ce521c4c43dd3bdeebf92f42f87d88978d5b4e3e563cba0e5f59dd29c31096885b113ea5c57e66a3be015b703bc26d3fd1d51a7c14f85f65747ac909d7e30c8e800be27eebf4a62e42e538ae30b6883907cebb7fc5e150bc9da3a138f394e817df9a9e44420078f30d0d3d6981ca581791a097a5e3982c983d5cec239096c7d8cc55c87242026d769ef1d04eb96e5b5001e3358af88d417cc61f107659791a35d8b5f7a5767ae24d5b2ba7aa12230076db1f1b9b6f213dceea62949d98bc5db38743b23a59ea75dbe4231a285678f5f07facc053c2048022fcb01f15e8c100d64a877ecd56d196a6ac60ae35e0e09a517224ba409ba7b70d8f9fe65bc427b212a4e9b3cb17b0d332267cea4f3bea7c1e550f7ffe567b20e3057aa0ebb560d00d28e2f7aff718a9f2d4d044f0d20709bb9ad567c98cff7c4810e8c542370cf90a491bc1088f69998d59f344b74db6c1bdb61f284e99b517a11452ca0bb37c7bae77fca6514b341066086e600f098a32a92935380a173c9182a2513584c54ff67e580dfe16b508acf1729a3d649ff1eae286bffd688fe658612d6c8e69e6e7f7de4ba85ec54747cdc42b1f23546b7e490e31280f066e52fac117fd3b0792e4de62d5843ee98c7201529455c85b169fdb90cb05e3403cf2f737148bd20a53c73880880a14ffff37d62130e682e50bc7210ea6c1f0c27656cc1785a0d9ce93ff94dbc5b2877519d9bac4a339e98ec594a7cc76f4ddf994fee8070dd4b8e0fe0e51b93105fcf566f83d914dd862b4ce78de7e9e16f142234bd969ff8005dddc641dcd3c7cfbdd6113cd3ba34a9503a0f433899e90e158abde2ed4ed4b3711c991577c5aafeaa982bce80835f8e6d7c7975571fafb1499991646bc499ec32930367d4b1de76ff656442cab987bdecdbcc2b2bc35ce01816594bfa4b6e33080caa41dbdf8ebf2205649f98a2d3bf331fb16b9ecd1824eacbbc9f81297b115b4d36aa7496e05f7d40d4edd1886c1bac10cf3f97840a03277e6369e7a7e90d932050ab8720fce076de5c355fb17959bd75cfaeff325b0737f8f5b1160de0b0184ba04afcc30bca77a6a37e29662302d01858c0bc1d32b883011b7df5a387805296cd91bbc835a3e76152d017ee929d4cbf137eb78db89d71617dd76cb00707aacb8088ac77a1f52ed710331193edb29933a7efd8cc153e6adfc2c6637e88cd86b06036b8177847b4d086b0ff9b5dc91f3cbd1c08217023d7449253c25331594f0f16a3c5f2e122e0145c4ec94f096b45a1fd0b2dd3f1d51e58978471782a336eae49d7bc4e050d1c6a391658f71a1f752c0ec6302bc2dba9e3766359359ce34955a2db86740c90d09cc50e92dbb76e17a39955fa7108bddeaddaf860d1aff14acec8b609ac1d336270a940604209df91cf45be72edee04277d694a6f968ae6d8e065702f3d607f3baf8db4ab7637fa4c78bb0b7fe69937eb1dcb616fca564a5a521e12df71fefbc321187159bd6a47b066a3440ba634de9153a94546b63aa33aed9da2018e1f30628df37f5360ca4f2660a46ffd73e58183e8abffdea25f7bdf798a2b7cddeaa481bcc6e682a67e99143066963d96d4a928a478951dd6ec59b1be8cb23aa688e1867738aecdd9afade39c92c0b2572bdde84eb912ed990ac618834c412231216fdb84f1e01b3f8414fc6dd0f646fd0fa62bb0157b3535e1497c9272df1cc5dcd4e6ab9a8456222655c56ac73fe0d2aa8b599035daddf0986a45b1a59510abe19a11b6dba065c8bcf8a85d20a3681c2414dab7c036cc1358b1dba98d6ae62c5948c36b5b3e307a6f860c0c822ac724a5c917ed5f98ece548a7a741d366868e6c676394c3659f7f6786594196dde332543376f9ba0724b091d30f431f91d919417e5bf7ba1e9a21cb80f6c204c3a58d59d960a5788b5cba5abd7c7518f4c5170115125de97009a6c3fc4d5773e4f57fdd433eb7422c7c4dccee57a1679633ced3b5f08df763d4577983c5ca8b49bc4e08fa76f8bff36daf0fed068db47f0c87e0e45d518dffe37c129cc6e2f5f9e0430185723098e715284a42f302a6b8368a4f2dc16f534d1e5db9d0b86659fc4ba6f16c982774115d02a57684c7e5489b1f491584b0f0546e4194a6041f5e5be3bfff3852a4fc772d83491023a61a37228ef6260edc0d1cb972cba610d5ad1d92d554700771d8236ef55e983765ed8eb21e7de7c8bb51aee9368758454fee4a3f32179c1e54af1d069e0b9728cd0554351907e018146511e4d6f0450b57c8ebd21c71450116296bdfc779945da60b9192c5bb9a67b1f04d94992df4cbb3e30732dc8af2177fef17e0b7d01740b8a64db16bc29c1e589b6bdfc967edeb2ce8a649ba892bc856a929f0b837a838ca7f917a52436ea3d20e72afacc5b9d58a7fd0fefd96787c65ffa7f910d6d0ada63d64d5c4679960e7f06aeb8c70dfef954f8e39efdb629b72979be208d616071289cfaa0756a4bb5eea5c7baf8fe7a31501e7e2d67d708d461c0c93e85f03afd70bd9e16437171e01a34f475e4b5a58d13ce4e2fba72bbba93403f3f8981e0bbd6a8a6223327bf096c44b36e0ccbf7592a98c1fa67f198b628787ec80aaef848b4fea158c715799e6f458327f399e6420f0e7821f2dc4663bbea065c7bdfe830b6102e2e7193381b9dc7f2381ba808c43b8fdf3addab4b5fa81564716f7d46e0349d9b27b559710d723c7ef2f79eb55c3a9d75b99ae6fde6877b278b583f8ae3cae776b914b0cae0772397fd19b6a27676c7ca02cd07f4b4d49bbe1ec87f2ac7e39e5f7712319c31271dbbbaf4b826af8a9f4acab696c62719f7a6a032c4bcf90922a3c630647b7c1c7b78b10afbd863f07486561a0bc8d9b1ff5fc41998a7e3c604e24af1c1df2da1dd5d83eefa2e4012f7fb5959ef9339574367deff73723484b5a969c8c23dc251a3b887f34b9ea09c9a1838e8aaabb254445d7556dda257dfd5579737fe1dd6c67f3851ca68b011e7cb7b6958d588f143828f0bb24fceca31b47b77d1ce05e75ab05b55d6c9f9107f0c738f2cf8a1629f7e9b2694324e082503937ff8ca7c5098f770289af7d038dcedcf0ed77c8b82e2a9003a6f3db69e14131e144f6be7cf0bb5353ea96aebd78befbc6ceae9bdde97823cdbc5ca8ef8a993a9d9383aee9f2d6a18fc64ab92990672ea2dc9b89ed248aacf7f1a513da43fe5953335afe76d78867a066f226ae9c727c6c60671c50a50732698ef7a492d51998eb6da5368a667baf6d12b77eb36686ee0ca239dc6f3598be0bda79e47f0891fe4d8989df8c685480de11c148a2b44c8a6bea3a50b09be557c51f545a09a30e9362cf3080e6a6bee3dbad370ce24f6c5a6f8091007ca195057fa3af8f99703a601086c2a1ffe55fde4c2c4153dbff8d6601ab68743c0d50d021b0b3099535ba6c40f866ca3ff0df7c19d709a3f58b57b40ab5e43556a8c0c1938c875267bb39c0db6b45840e8ee7c22bf6b48798bd744f70e42fca343a8bdfbd7f55f275ca5d62c7288756d4861fba68d16d842c5b893c1d8171bb3c8b593387d3426f292ace5cee7753c9f9a12e6bb9af5a24192e4184f7d3d191d862d3c3dace7853eaa235b6369fd164e5a7bddd06daa3eec7fe4130e82478d36f88a0999cba1f251ffb3a7689ea2baf016073193898716a9f933448d7ba8e0968c669bdb7dd5e6e32fd84a6ce9e8632b393f9263532ec2107b4c0d2abdf3abb2de2d63511805eb58a70bc4ded040d76640af60ce7f03b9a682b8dd84ed8a47225a48e0b94ea47828f1c8974cd64e5027d8b13d43519875d2bbe4461a7f0f5b5b8d63a472765405ea9c994225806395e64dff88506f7f7f3b6368d769e6e550d4e3e81efb13771cf403e855f75312f1383ce4c2744d0b4e3735a0f1e1b99eb014fa60c0d1ca9035fbc4403330c2fefa8411fb7c3d6ede5b5c8f4736106bbe01923d483a84f031e9685a3b6a70646a2a5059ce35fa496b3f21fca6047471a5bdd33908cc9328de9fb032347c249bf7093390b750696124621dfa67fd9c7fe85d6e5a4d277ad8f8d169f8b5e8dbee280f8443518bd94abc5ca704e781e6cb1868ba2d6fbbaa850326fbfa5a20e4df6fb5f8ee2728e86a758763a8af21e1f7a8584d3f0b09a0b19fe8fcd37bc4fdf45084d7fd92b80544f29aba52496e2c9a0aa4adeb89820be321cfd2f0a53585a15d04c7fe4ec9be6eb5df419e20b71506c1f642df75c53a9e3b2414fe6102fa8af7be3f6c95de824c31fd6fe8ef9d49e26095a2674a33cb574e9e493939bdeaf5b309b4c51256ef71e95dbbcee0a11991693b533f916e1c82ce86d65d89b6d596017fae944ec364546e78abbcbe4322b83e2fcbb4c5d4ccb54d8642c7eb9e28c08598a356a5c46f8813e6b63ec2f3e3bb721b726361f85a734e0514f4e9c4732991ed3998b1ba8f618c2071d1b943eb0f8766fdb7f0492421429bd380deca3325c8d5c7b6ed16429539ae54f1eba39748f09aa44efb67d863cda304e8653ff7499cfad44dc27807779ef8e63be4b376ec403f3c84eda4e5af31c30f9807762e0980b4e5d9dc406cad4e888bfc3ec4186de8ccfcf631b0ba5831747a1c200d45ea06ac82c7952fd09aaae5dcdf5475da427cbc8c1f71ebe5132f2fcae15975ed6fa14a11b38766e1c446894f31c0496b0e5e96507d28e6e4549d6d78841e40630ef306491a1da60eaea3fb69bffcbf192610e2e07bc1124690fea61980e8ed654c5e796f67d26db5de35b4a2c67427833e360ac2a7d4fe7a5ce572144443ed62ac460c1b19402e85c79e3d80e1c143279b20a66d8dcf2bfe1cc44a0f5aa9b0d9b36c46c2cae148dd0f2ffe9a8e6e7274d1832e57aa39fb40553da6414094e838d613a20ce9307d49f97d904648d6460985b01af769800cff9a940f70729fe40e98feb64ff0a81c5b2b096b1a9d832e440c49e4e3684bd17a5169fe138d2544d9806fec027dd2a67f1856178e090f9bb2f9b314a202e7e95f2e41fa80dccf7b1810e9cbcaed2acc2445d60e26f7d63ee4b28e4299e60ea4fc659e7d6f0de91748bf1ede1fdb2acde9482bb76bf6716847eb2dd7517e0a94f0bbf20f248d2c79fa0f518b67a44d5c4c73a9bbc3816ba85ae8344b5f377649da75cf1857d6e4338a76446c48e52cc7bc7ce283d4252f8fac5e1427299edc33f84798316f77bad4a87849e91a1a23c0b7a86898046e278eaaa15ff33730a6d3f885dfe2d1dc0acda2a9e49a71cfecb7dcaa9e70eaa8fe15d4567a280e8960ba49d5289535907e9f277f96e8e652c21d89e81696dd821db5b7e1e53e160584477aa9e4c0e12160c9956df36cce6f4e724dd543827366010ed3d843cdf4319c1bf968a70e9b1b6bcd8af96c9eb0620c569716b7bc42e13251a6adf8201faa129844b5e1d699cafa1b66a674e732c7662b0410e5bca2704c5ebed7850d0ebb825cfb0627a183cc9643b709aedeac2c06700358400c389f99666ae97ccd37f265da7addeb07df9ccad6fa777d0da2fc47b6235179136bbbb409596841e921eb278142a19e6203c7f235bf8461ccadb4b47dd290d36ac27126c808b866f9531261f1e0f5c458a6bab6f064b4efc432e1c7379f9af19ac34c5c22e76e6e7651e48f9ce44eff542f018397889d896cc9001a63e8e455fbe4a9ee9a740edad894fe1af2bb21a1dd0318e28ba982c12ed69c08835ce17336ad1638af3cfe0ea892ab8e83d3f25e6bd98d5e4d36292992e2122c265a26cbb3931dd4c1b0d0ac5ee19974d0dd45777908bb416cbce52531820effcd7f28e1fb2d3d4d826e1b2673e834485a25af9f9d174f566abc3b36732ceefdd91a7c3885e1d10d51c321ff704d0883905b7539309ba5e7b7a2bfefd0494e90e9da7541ec37858ec05ea9a9ec5672b113cd5ad6ebfc5b8fe40ed7c3f17d8a73703dc89086b4d75c5eaf06b840bb2f5b4519a4fb17bfdca9605f17253f203efffc92da96fde023007d22cdad05d18aecb4bf08085c5ca5eecd21f2b611e7e8a0ef981fe7aa2014f5ac6862fab44011dfd33be8a1226943aa7ae5fee9221b0400d9ac2ce5241b09a68cde6b13c47d50bf310ecb37f25c32770a299020d8500d8a4b5d7621e4379dbd6ef34a9aceefd4055ea6144f54bbfedefb5b5b0fbd1d81c7a51a802072ec3d84f34585f22c1df84caca07849b1ef054cbef9b40848e9fd238761df5358cf55a79a53a1bc749e49ffab7c5bd9a28bf24ad5833facf43bcc3852c1e85cfe47929fc49c325c20d74588eb9833519f192243cf96625057899b70a7c93f8fdbfb60d8129d9c43c95f8782ed8293641ffd21d21d91a0b4db69d766f6d6497e9a414ceb04b65425d6ad6c8811da00639dce8d8030038f2d08330c75b0879aab81bfb3330b950e54c13780d308fceed2a103a1a8b77a923b66aba737654ba7995acd306aa7b80f632184412e2369c353c2132ae614553e626f0a3436959104ba6e0040dc597dfbc3602a49e401bf2249699375b2c722083489f54fcdc1f616a133ef6112a1754818158ff78f245b9046100b0e89407f74145fe336976af971c054f12d98002c68b3aa2bd699fbcd71bc4dc071e430bbf694595a951e01098aaa499be2f70611f248a694539ef8936b2e8b7a3c5de8662436fed1f7bc24a4e5c17a663d9a23b4692993301b08cb3bc10f518eca51081c717ec8dfbb0c2669f7987fe6aa0bd98231d8e8b58951b42537f12884a857e02d62de4fda6b88b6b754b1b27394c6a819e0f92f6b2b2473fe245678e252ed31477cc7ec6895bc361b718fcab3aa550fc9faeccfe77cdb5b151ab1db2e569b5bc923ee26f0b6113504d295112d47218140e44652a10af10a088f95c7cf2fccd040fc93980939122411ec643e26e7d69ced3178402e320fe156e774b75b5afc2f3d6b6ab828bb4993b1436faa5728cec34d66f520f59e82716ed6d1324944c3c91d04d5ffc5a921f4716c39de24768484d0096f7d8dbce35aeec22db11f899e5e7e3d57e7668f35d6c0db3542255d9262137d39ae6cf9bcde254dfccc54a6062fcf8982f781d9ffab2df4f49ec04a72eb9646d63bf9e1799bc0bec0ec7f0675ed9f8dc9b8be15d9f2175dfa1c8bc99071c70ad7bedb10a4143fa91c89f54777f84c9eae9361cf7f4c2b7ab873ee5785a5241db0af86f3c6d7f091623d6dc576d07550a42023633a09c8dfa21d7e70cce64c13f37663f75c47921c246f3f2d1d16a8283ce7697da4cb7e016971a2a1d0c59d6202bc18b7cee3828de597efdab53b33a9fb41aa7b49f1c964512901773bb396ac80e90ba1a94c408b2860065ae9aec64a41d76cf8842d299d0babf14d5840d647d075c34175e26a786f30091a24f1ce8db30137520dce1cfffb6318a0d0fdcac883eac603bf365efa2c806eb4f194cae8c16780342165222192f6ee2e103ae2a31dc08a84dfc89c64d2e9ada7ca1839dfff62ddfb7982c79684cfc821a098bc6bf09f87317209b16d14d45c6f38fc99f7bf9bb73460977bb323665d480c87c687cec052a5f08a2c6744c8e177a8a269b4a47a925b9123cd2c014313edae988f8aeaeb633ee5ba6be7f53fe36da3aa37ab2077f5fd75a82a55a0fe62af213b85e9e7694f78cc2b0e63a8c1b89db484722fc62c688678a511c474f0eff8eef1382946d26de00e5c626ec1d7079445c1b7c6f7f05073249b11fd1fb30257724a14cd7bbf451146bf366de2e826fdf1d25705587c4460040ab963e3bd504755b6aa5b18786b68efd3c8e59e8dbd172346fe7f4a18bac98164669d73984044f3c777368f965763742ab86a3720208c64801c796f6e3a1c4748b81e41ac58dcf6ecfa0453b18fad7e3473604f57f7da302e1fa81ad538d4a0280c4ad092007bb9a7a12907227a936871886c699db97d00a1966fdef64d9f3672f1b792c1edadc6781b391c91bea1bd7275f30859dbd1707b1f554e49ceb874ca06e92ab466efa7eeb6990667a27507a7ba789e24d593ea2af8eccb3862cce58daa63eaf212bdd86c01ed471cfc79b191c481ad773d20e821d18af85a7049034e5a9c660357a4c2808b9a6139f32c55c13282b8d98904f4f027d438189dc9487c96172e50dc1100ccc224e7374cf96ea6731032c43fbc9b367a4d1d0b31aa3fa8eb589672e69f1d9144114bbd508d56c2049ecdbfd7b43545375a099ad2885353d8c550d22dbb738e6fe3f104b444c89475a2cc24d7887daced8fa05006c02dfded01c00707e2ad04c41199c5decc1eae34b0c0abb5a5beee1b5253c3350e1a077682767a0b9124a4df2e8879366fd37fc04d4dbcf89883892f46a65ce3aec22123cbe6b3af6364df1f9f5f9751bc8179b6dcc5c126dd65feb7d11a85994e90ab6342834c79c5f82413e88198c73e932c66e3cb60b6e0c0cf438622e5dc5a1036c38afe9cf13559044a9e90f5fd72a3188ef6b1043f5f4e6b40ea51f6235dcb33b3099b2d8c2e02103235f0476ad51bce6d8a2934068549633e521a3ee4c62c22b042fb86c13c8da849233205a5e277aea1129678c31f5c379a71fe08b72fad9449cb923126dd465d1e0ae8a925374149b8248b3afb69f168f3ae701c00f6ea08fe07f1b5338ce6af2f3156ba6f300310114479f2f6119367c88c12c158b84be13b9c8c7b5dd7c90edb5b3ea1fa5927a25ad6d5596992dcd4877f58a134e05dcd80dde4fc2c2a680cc0ccf3084d3f4970e3603fa6bc5a180fcf1ca4241c0b8a1e7c607dc025016e297e2b0645de4ec2fc49851b9374f3ef99edd897c284a67b647ca8c96fcef935d541e9faf334043ea50b99fb8819ecce039227b624e52d8c20003b5a43808e4990da8e4398c4fc172b983351fd11a13dcd2aae5193d42d46e1b57c92e3e01d23fc968c729f3782d6c07dd5a17af2bda96735c12cc7d8023629fb0125e974425f7914690a7ed26508343ae58c8a439ebb6232049a194768d4594f5d65aca37a5686c2a86dd04bef35d74e0755937ac0ce3ebded1c00c8adabf030e5e4a5f44193b62fcf2f1bfa9dca2a25afaf2f1ec06c5d17ef3526d26d17af3e2f257ded24b177ba41c0ba64fd4fbd5042fbd5961a105e0e9f77f3db13c1b6c5bd9a9d04801a5c00a4c544218a21016c65bdff774a44b1d05256e0693e14d76605d67bd10048d3816caf31a6d10886c88c783538bd93e92bbc4484f3388b61adac4b92b911c76ebb1dd11b7b4e40be032bccff610068746f41e34a1fbfbfe5faf57c8a4331008e2c1cfd69f57e74379ac80eb6769f4ce4196795b835201ce4ec85ebcaf5eaaec242fe6695cbce1d53fde5b002e006bba8c8a1ee57da061ceed0d21bdd57ab0cab9e46bf3764d9a6c3ab19736d43b33f32eb955f9174ee4a54666e7f19cefeb49aac7a59b7370d9ae730b7bb4e08413222f0a66bfdac252fb61bcfa838f262312febfde8add8f6843f1d64ea3da42d4ef986498604d65737a44f5a099338520cdbdb65ce73b110dd4bcf8592a4adc3e0170b13404f99f0ec8f9fb225c1275a921f09369db165e9109dd5be472b9bc1901bfd882d264d9ed8d88b4c8f3b35f88b69e3e4b8ef5debb895be536a3af492d968dc1caf31879d672f70ad9869ea98335cf9e4a2760f955fd3e8099e4b2eb4269e354548f9de9921e50e49f3f5cbd63468b9db0cfdf17250c8f13535d4c0a1f21c87967cd798fe93b9b2960447401ef90db22c3adfba0f55f5585ad37040e8d6745184dd536d5a26edec365bd6edff1bcc616cdea3bfc8b9d98c0ef9a626054e361194cd05b2287612399f6d3d3be2f71555f14ad2893af6f60ab61adef663c3c2464ade671dd5ebc71935aad290573588fe6e11f48cd2b7db62e4b9932890d1b96e1b83eff70f026d199db75fb1e83197c937b672613c66ea131f485b4318e27c079b4018d4205484993bf50ce70275b244f2caf47cb47eb2a9ca59afbc78809a912eb56a4bb65cae4694f682c6329c690003a1c355f779b5857a60091b1c3685995a366cb43d753a704d3e59c5f5003c78feed877351e27334b3fdefe5907edd9eb25588a42248b9c4a93efa7cc63bad1e5900b95b70436c35eb85cc8251c4030fab9556920141cca24d6acd3122b92b7e868dc174bf071117958a4797fc90866aca685f1456fab397ae647ab9970348082bd74865bab7f248568db98ced7ed84e8360fa91afde3f23509e6b4caf948349ad9fb6a4efe0a0468302cae7a0f999195af1c19058669fc3b88b2780b9075dc180298498caeb7ba0cf8bd42eb36b1959d5ad3ca6fd1e85f76abd27ec5fb637ee38173ad7d86304d5708b6dc8817e099e77f5d43c1a70624cdb96e4e6103bb25e59eb51d894d1dc533a74005bb79cca35b66e10c61d06b5227fcb071457025d605a0862218ca252b871f8343ec231dbee15688aeb914c0f16ebabe6edb0a489b2bd10d4392c6f1863bb6a62181de7cef61997ab02f3bad0a893cc0cd8a99cd7b3f7773085f0929de36b5d124e3729140c375de9a2d0cd9a360cadf17b9e45b7f2adbdff9e75b743b62642ed67aa703b8ef33dcf51a50edc7dbab42d3d2b49badd2457a9f92847aa6a60ae2beae457a5fce1a9e485ecf907be22913893cd1350f20fc6c81c94be426eaf01864e813a03e4674491b61516bc95d8a77c15f03d0adfc4adc27f27a5ac4165ff6518eda1a5c408708f78a9e26b834179804a312148d4f75f21a77d78387139da40c0a6293c2a59d0162437d68504f189ed970c5abb9ffc6d8e1be2b0877c7f24b1dc273b1765bfc5ce6f4b8d99a96d5b1c92ee53a39f685b304313d909c1ba8130d20d51c824cec420b0315229df295f75b453a6c131afaae0c36d7c4fff70623638a4f7ded5eb7db58d95deb6249a29b171d8ce651556dee8037bf4ca74453a4a76aab7cc07ba44e55de57dbef8542c3851ea353fb8e259ee89bbecf9ce8d8bd6227afc0028afac48a7acd9b4e8cbe982eb1475917ad6be4cdca9cf6e7cddd971b2924f2bb730264801685d387485e41993c3fa0af9987e8b52c21688fd9a9595ad8d1b9f41e0457be18492aa09f69e64e2954d1ca3cc1d32b2915cd9cf6862ca79c80beb47347c4cceadf48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab44aefdda94681407008ea48d03ff21e9bbb4ae7a9aa37c855fe3537c44106e8079f18c24d2584474bd4a99367660ce6f7e6d7c294961e174366e7babc569d5f80572a21a4bd7086629363e0c9ee2599c8b8863c96613ae6c32cc67ccafc66e1cce79654567ad08e62e9abc99e44d6a79ca4d8de15b7f8a763a4741676af0e1f3bd4e002c8fa1ebfbb3bd3a65ae68a80c230422f98f6e1e9837252e045eafd585ba389958297d59aea1e8e1f665fcbc5f7ff449996aa712dc0faf582cf3caf3dbae80594f9f07fc06de63d9d672d14d7ac4662b4a54f40d4aab2de766910be2fc7f6f679b5708790b5376498d3baf0463dca2f093b51bb7e9f3e7033ba0384af0174becc3bb477bc5e86959a12a5e8924adf0bffdf5e5b9c1cf24d232881ad5c05c5c0f50318ea83d8683339ca6a583c52198c00f7c1abbda282e7fd3b179297338ecf9c923a3a87a130dfc06164e9b4c1fe11d51b382643de44b30a6831dee119241d1b6f84f2484784fdf65e41f78c38e15fb4b00e45df1edc40e3467cdcda351a4c0a0185ac4649e91024377e1c331587a8586cc0a4dfe29e14004c3536d305f5dee0eeb8c2f216c1b8d27375b239f6458e08980badd6d82e9ee9e007578c0a3b48288d9ad0ec3c934a99a8c5741149af937dc82bdb545df26428b87fc935c05f1a4964a8408539f267e23de9bc498e2a4b0083cdb7c8e27de6252bfaf680a6d5b7ec1a6dac6d7d537334a95f1553324a0739414dbdb50445a767b0f589fd4c33b35905577ef5a53b0f097191f9cee4836a908748779941de2a78fe1bde0c2efd9f48cbf232ce101d9df93d3ed40d036ae7aedc3a5ff619abd1c159ca8d2dbda7de13b4ca62576c7f925c52925eae2d7500dc969fe14c0a335ff95a7df1d276a6f242765c781208d59edb5848d412b11638b27ce5a61b8209075976c2a6aae88f6e6d8704fe9e83b425dec4defeeb3cd311b8c5a818d51f917a8a4525361791d5c4fd5d70704d4b9fa9df1ea119882f400e682753a41931712c043c120a98f0fe786a600b47befefc9d64cc5bbe8a16c191490874e258760c9e4fd215bebf848e0b4d35521f53ec5f9308644b785171fc4cc3ff886e034bd833d59dbcacebdae8f00e43c151bcb24d1d226d1cc19ecf349361530a81ba3168af3df5536fbe52b3b93621f57959df298e5b4d3c14928d2ef7b9c977c7dda54242d17f8661978a62d94d565b00abc199790b9b25fbfd4a3ffc35c95ccafe35d9a138a2c24d17f06ae2cc376e822317f16fcbcd56e23f84ec135dc935e58c61b34cfbf5a36cb00350483b6bac786030e5c5045a6b61c9aba7dfaa4f7fb21897539863ee865ae061a77c0359915de3aacb3b5dc8cfe53c4d17b393c2b6bb23652f36390407922969d510cc97b99d1df4361530aef10707d7a021b2d9576b2d49ca88b3cc83ad1baa6d88ef8c81c08f8baaf515637b21ace9d5cc8fd9fe4ca6c3aa129caea7060791d566f4de8662b90f9e5d849cdadf9bd23cf6737b07ca105142663c30de27adcea11d64d433fe1ace84b0f6917c8b655f2a421602f07e0a7127e61ae9859c5e9f652ec82416fd2566f291f417ecdf99bf3231d02864e2e5a1cf34c13f59de9aa2760d8734bbda79576c62f566b8269990e9384a41c1634271acb4c7a8b768f276685c3a8c7f20872e56b683244b1af562c3e7dcf592a9915f44f886cc2ac5f679c07d5aa1fd69cf3a460f25c722073da336a310aa551062d92c7297002060072af2f3500b9310c239bedf45c5e985c2e0d60c7dd68522376dc7b560fb34d1b5089450c32ffcbff07b35a96bb6fe01259a06868d00af697f8bbb238d03d49570a109181c9576c1ea9d2ee02000cc23e63d6c93c6cf3050bbb15b6f73b09c25da62e5abd4c2bdb1110e1f25db39f04885595cd6a388c4726c8d4cdbad87d80d42fcaeae843e2e17f44c9aed25c8f6f9736c7ba1bbd3b839126de40a930024a65aacb872936e446114e706a868444cb140e53d976816983f3dd1d57eeca01eab8211b7aa8ae99d26e35c06ea4b226e0a6e52172a40e7f0df5f67759ae2ee026749ba10b8e33694c3e01a001526f9d75f6c419cdccece3ea3f78d69014e509c741214581034bbc7e2bbaf76db8421154abb2233117a1ffe2786b21424576e295c9baef262e80fa2edb69aff800b3ea436eb827e8adb73abc48d740b86c69d557b16e874038598b25f616afeb4f4a900be7dd0d38b5b6fb4259c51a3aaf4748d7a445f518485ed72b25c7df8ed0906b74bd29bd6a5724ac3a503c990f3697a5db484821f68718470810862728a80ce34599a41fc5bd8bb46dd845a4812ae1532c457ef4211d0e41835e5a6f030247614822571c930c727ba397e723d6b3aeba9244f054e331c82e65b74c9f6504c74b4301499a1a6f6269a3352aff57f88442d4eda42a82ebcf7776c5629f97d6160bffdd8282a40ce2e6375b161e4c22ee53bce7a45f4774aa827e2da657e1a1bc07445f0bbd770b7a5a25b1b469fd58715510dbf8d97af4e1b9459a20b08a8d3fa9d92feb32db95b22d36de0bc8b1c397b09970a6826392fd8392b2d790dcc1295888f42ac81ad213c7328b2324b28be7cc1f4fb8414a7785472f1dd3e11d66017b1756d1697be92490e15f056346d7e9126a1f35fd76cb016fe2841c8996a3507c4fffe7fc45026df10b03b86fb6cf26e8418926a030b5fa62748fbb728fa19dc2f8947468c1477750771e442e4a9d25b76d359211c05df788ade5b7824f8770b5dac0819737dec916ee59b28a49666ee8b7ca81386eec8049542f18a3207e51bdbc291470eeefecac385c096a
51MD = b70acba01bd715f542859a4224d035eb177fe7b34d5447e099acd1716ba6d00f515bd02021b5b3015d736b04687544de
52
53[L = 32]
54
55Len = 16
56Msg = 43cd
57MD = 7c5f9ed821a021ef1850dd4e0b179a656fbe27b104463720f467db32bbfab5a4
58
59Len = 104
60Msg = 5f75a437ce0698a7d8151c3fe0
61MD = 774782a9c3023dcef8b2cb83f7994324e3cca35323419b3914a9b6bc3ace5ce1
62
63Len = 352
64Msg = f88bac738d1e3e10f75e46e3fe026d7e423fdcf3d7e4028b33a291bb4aabca53f780fbf99e0346d610d4a38f
65MD = f114f1a390bfc30f34652751f3a38e8bdc9597625e363689459b80082eb34009
66
67Len = 488
68Msg = 832e5b78a73a1012ee62e00621db7f4d248893007c6e5d6e0e689c6b291baeebc72df9cf10b289fe20e7fab80a2399271d0ac63766049da875eed56264
69MD = 7d00fe393c308eadb8c0a4f771d409e17c9a796e63b45fc8e84c0cb2bdb62532
70
71Len = 13976
72Msg = deab57cdeb41974037a9bef5e292894038264eb4d8993d4d1501e6ef9c68fb0f571f57b0925640925deae9a6317e3bc4d6cdd5a0833e52fb48baca16a9ba9b6c8ca469a0555763b54f04c87d4e41aa549258f30eefe5a52d2ba06657a8773b0842e094857b6d8911d6a0636280025e56356fade362b4bf4c875cc19be0c6644b447be0454dbf390eb966c03e10e9de3487b90d0825d327c12495e3c89ad09c9d591e55c91376fb14c2fde9f7461fb25450df1a65806b65f3caf4d5c81ebc6e664871fcf915b9578bb70ee6776acc62205888dce2baa4024941209e81b4b35f0eda1bdcbd9ab1d6db6140bda4c41776fe675d5c681da5852d50c246dda4ddf9fdd7c5fdfeec85ff6c883c78689c2977584406a1ddef977606c182d6c33561c39c071668a2515e5aa6f4aa1faa392aed95b82ab32b79a15e3b5a07551ab068455131b72493126470f26c30b852e4415e1d8b719b3803ecc336e4facbcc5d1908851f4f39b776bec8b6b9794d47e5965458858560eed5a0305e260240c0849d93a19787b0f8c795eb5ba32be573845256ae6d0b0a3336e42a1beac8bdde6d1b6e0b6207903d4b105f4af2ef89bd099ded870daea2f170e03bd5f6f4490e60bc222d4876e16d4c58aeea6e6c400dbb9e9f4b2b142f0fc9bdeaf4132ded38a4a8366e107cac7210945fa2df4b124be37ef76290e5b9758aa3bfe0091bb0448206323584c2f833e0edfbdc0c33075fc9647a3404ca490bfab94302a0679a1a42fe9fec6af0cd98038b09ffbecd2832b579b2294f6ae5b96328fdc0a0b9b3a32cba04fa8bae3389c3951173bdc17caaefe526aa386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f24237d8e795ebf52368218bff3e9d5b040ecd2caef4ab1e7127e53bfa2b3b4fb74829f9993ac703192aedef79dd9ad24c2c976638b4575afbce22ecacc273ba43379ed55ceeb51838b0adb80585bd1b5f2707ee16b67a7232adf7163415b24b9ff9dc94b7197fdc89e2a90d2b9eccde45e965edd064dc0d1eadabe11b8ec3aad2742b5d3323ebf913a92817749090c20758f98aef2544d4c8b48874e8936d7ee492d5585675c214deeb74fd67c4d170ac5e0aeefa607c6e37abd4f8238e776fde3921afab75cbd8f392d3e88da057903ce2e140797f4a85737bd89455e6aa27c7535687b78cd0ea59848e006c8de9c9c0cbc7a9f5e977be850adc710503ce4ba7c7bd0b042297f518abec6c8ef451c33e030251f506cbc3744228b6bb4dab86877d9e6019a0ea9f39ed37557b3b5527c171da5f013e0d3c480a038cff2c087d6e5d41b17e6c8f90c334b5e2b9ccbe9d4efd99fba1f907d00a49b71b5a08aedb644fed24bcf04e71be67b03cd20d53ccef8f854f5e9f7f28c1e98a8a53496646713bebe15a93f1ea336e6e8a4e68de5dab0fe880bf983eec75d1c5027357f6669e098411e0bc3ea2293138f5b34425f78b6508b94d4c0cc32ee9afaa409a26e5f2a1fddcd6d5ff42a89755a58b08f243957a2e208e24b055f51992ab447bc06876eba169c545fa71b88a0fc15d1e0be9d334a1dd0c86f44bd149b42c07608a9a30d0b7e13574f8d862f2ac72b2ed38904d7cab194fdb9e4dcb615f5610b24e202a36866baccac01fadb575df11dd43e00a3b92fcdd8c7702ea49d951e7dad2a56c075730b4af1ceda2bcb2310256f28312579fad40ff471336ea6a44143edfcffc297258d48bd2ea47efab8f0dc00f1e6dba1a55009ed627b7
73MD = 6e5905b22cb95e48b73c5a885f5463f554d81257bd26301c4393d57fff1c8323
74
75Len = 48824
76Msg = 5223e2fece634a95e1e7c83ad4a11a0478f4a41572bd66c2d7902cf4f94404cd80b1f58fbcb8eeba3984fd759410c12f8ee922865f363f684df5a8787c87ceb3086fb8535157f7f39653dbf5c66ae7219253838ec77cf1c6db518225c5ba0a8212e5911236474b8820ddcb8111b87320adb82ff553986324aa2a21c37ce4a083c89ce9931290d4c1fea933e31d014d7507a28e83aa917ccae10bed1a490e77fe501b299f8e3b78e659407ce1934d5d68c7980800746f26ffa9794ef1d23f793bd2eab7fe524e213e58280f441ba48b40162305335b3a480c2afeac11c27f8d817792fd7805d4b61224eb52d35c0fbf471bcaede505fbc9398b216f43bfd69b1a669a61d44fd21faae410af58ff95e1c3ff1528de1aba93cef56bff4d714d8c4cc88a4ddcda52444ec1208d99ab3fd9fde98c1ee6437d8d138f62c5f782eb4660c5eb28564b5b0d46e3a2546009148f3d02b837c5284e9f508290270b97b9b29e84445a0b4df662d9711e6b73c11cebcb7120dc427034b1ccf57d8e4f5bbdb84d2e1d4bc3862a2b51931d3c9a7a5fd6ee5f4c7327c338abd011af638d730141b6eafe63469eff50f473262e9fdce636eff4c5663acb6075a4fdb00c8b8a8d3322e1700a5b3e7db90b36c1a94991b8f51657121b442db6f890e208f312466778d73bfaa8cc0ead4edd0776155f3eddf9abb1bbfc0c94421adce83d7ee94f99f61e1f25a55fb596f8b40ccedbaa8e5e2cf629496f5ca60bc4cf36d917da4e2b973eb57869dddc409dd66d5061f22642743fe843defa0b19dfb2f56425abeb234181267b5c0d2ab4268c538510feb191bbcd1631b0af6c7451cd4c641025cd8bde2d9ab6e6b948f97c1ee6f35098d553e8e9da9b4d437125046864633f109d6a558b38b270a7dd1785d44d248a863a91e3db5c0a1d7ec133decb65e81c3402c98ee329f660a092172bf6b1a02491895394ebc506882805a6c93e767c0e58a5af717d950a206c0f0055cb39ed88816a9fe3613d15f608e486ac08bfa67d462d24e6a0a37716d3fbdaeb9c0e951c1e847fb884ebc1cfe707dc6e7269eed1c44331d5957bc4ac9dfeaed4b157204a3080fafb9df8917b8d15aff9c49cdc739b8fdc26a546794991c183fa523d14797e051894f48b0d62c2b70834467ff9c993b82fc1152c1f5479ec6144c7e8fb10d1bce26bd1cdbeec4e95ee073f3bcc3c7367328e30543d371b27509a577f5c79f14d5f687ce62b82f856695af9f7dd350543ec763de75b593f1859e44c2ac01ba65f98743cfddd8a89a38115badcb51a0ff5655f830c0122af6a830aec13ae5eb89a93755b3a5a6eca233f21cb12db545a24a5334becb8fa32c3d7f5805faeaaeea85a551fc62c94807faa6474c0d74cae79b5d8ddae07498fcc5b8b4f394867112ef5fad1c9da66765ecbc7fc0f3269d29c9c38817c77778f2c19b5a3c705fde9d76a4eb86aed4a7369a832ad267312903462397f7b8fecfa8b195cc2316cd53e48c3371ed2ecaa3e484b8ecd2e22b1aee910c51ed5d71198936266f5a00655d82c089f49295feda0a2bcc1a54ec8adf565acc3a8b2d74c30eafbbd843c59e67f293f6d8296cf7b611f01b57dafec6e2d4d411a633918068c38ef47b72ceff1fae772891141c3bc496824509d78165c1e4cd4b4989321a8722643eed69950dc120fa8da3e53c3181f252d7c4cd2cedf8f086f788ee77a98ab5b019828aa02108f49ea4a51f457f7adfd2220d3e59d5f4a29194e8f5eac40ff80312ff6888ff6393c3fc0914b08c1b9990d247ad80a441558db1ee1203e07353dd99a885a7ff5d791af2548815dde0ca1f56f89d39ef6b93dbcd0cd54b854173903c12649587433f0425fbcbddfb66ebce3eb4800dfddfe7fc44d9b23a3916b1db68c187da4dd13ff0157352814b1a792de7fff855761abc6fb7b93b48525fa90fbe3a51dea974069f3f5fdea86387eccee13f58a8eeb8abc6a43fd30e9788c3bd9ae1751b30a82d420225b2abdb1bc121b9073380be16107188d20be54f2e9c658d5b443869ea0e991c496104086290b6edcc1b656adf94f0d42458750fbd8d88040c518ebbb644f4dc4f7c6971d8d60eee0272df7b51a3d5248b4b264fb22195ad891fb6ac994ae5c0bc6714ae0b0b9a484edc576638b78ee89b568195a8f33ed8362128c30f9b0c7804b3ce1355abc96b15aa55c1e16a9e9ec90d1f580e7cb412a7e85d8585bfb950acd4de5865214ce4db7f6314d81784c588c1482d5f28c5fb62e7dd7aa8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda788eb2015680ac5610fb1380b4e7d7a9cda6178dca98690449f5551b66ad2826cab2b662f56903fc95b4611bc86f7a834a34ddc3be7bf142c8baa096abaa3cd51ad0c0b6d15e590eab9e50a4c60c91061f1ed6373d91974c1ad9d263110a0d43fd8b596396cafc0ae70b7ac24a59bba090a6994ec483db7ed4c572f723670a11c724e8ffa2497d8fccae37eaa1d14ac1537eaf80efbd2e597b2ffac97f2bc3cd2c4017f170544dfbb0d9109478fddf06ec0981542bc8107a725be25070d2cab4716f4edfad75fddd582ebd363c49e8efaed9a76ee51f22304eebc232a4f67f865b04f610a628fdb317116666785fe8ca30619a07c83cc449855202d687f162b12d93b63af6e7ddfb7223d4ab998a5f450523c1d521ab76f4aa113cc2967e04a38dae07c51c2d0f44fdc8605c3c53ccee91a2c73dade5dae021cbc87d5cd6e5fbefb65335827311fe1e91921ecd66b2055a6102d7a976308a80c44e6d47a67718c84f2112d65486a558f1f269b91d9f47e3e11d09c0c748625bad2718e3674898abdb19d3644bcdc9317c09a3ac02f514b2a57e6a706362e5f6e8fb16cc83daea0eec85fdc8c367d84c9230730291440a4b109f7034d510a3f70a22dd4fa69e8b65e5fdf87045d560eec71f4e59531c7711d4f8917a96e22ad07346d2f92a13fb4569fa6a075da6e1acad1eac1cb2ef19ab452264de2357c927c6dfae6598cbc821eaf3b8da754ce91a96c702c95b2c308bf3a550cbf4d22d417745b5f17d36608feb826b862747c59d26a0e8eb96547a1852f9fbd095f1c5d20721804941d462f3ee2f0876ee2825c8df24c4f00f0844e50588ac688127013df8eba3c971362dd255420649245e880212cb3d732fb82f866dda090040f28e09cf1c86eea5dc4fbfc373eb69745b4afd841ca8e172d4a8510e7698345fd4cab9ec2ca0453a274720bb2d2e5468bf0d0f85919dd762fe3df969e6c071285e25c2e2a49659b8a78289aee655965bfa3cbca9b292a19a855ec40293185354ff4da9451ccf98abfda07f1137e79bc89d688963081dec641a99656b040637402890f185edb28e7e6a2f65848a6af158f90eea440aa6246a2e6c31f5d220b9846aae2027afe5a7caad6dc16b56463367cd9e73bf22a1d6172145de4565ee369c55e3b99ccbef70fb080a3748340fbe8f6b95ba46e8b76de5a3c4bedc37c55ae24ad02267da26769a3a732badac2e0f3a5393028dd54d78701647582cd04c8310e9f1ff1b433125229547130e1737a1f33604f0d670ea7221097c3eb9c7fa4b8293d7b429af76191ea8e481dc1da31344537a09b33404d782eda1d6f5775500c1d8efc615778baf0905d9fcba1806ef986c40b1c6a72335104376b58266c36f5939a8b95123e8635c0c95e80aaeb97379b1179d6332dc07539b595ec32eebd3a336a1128f3cf2e2924db6d8504a516b62f26d012b7f75cab765c8374a3824da5a405746023b51894649ab422d636513ee809fa181d5b6fbc63351e37a1b14efc8f739e86ca78ae3e280f1c9e4824b2976ec4dd308ede6171a7474c7f530128089bbd75e10f9e57ee17408b4384f99f886a5f63a2320a9b90eb9bf692e1fc449171eae3bb1bb17a6ed937ea57af3c82db84e073b5306683e1d63705b9742a085fb802cf5a1639818417fc2223f476c2566351f4b3b17a822e11255f3c3412dd39190e200727bcd3f9799519ef792ec7c2b0b9d0e2dccf013d436dee63483c2ce83c15c00a76c4d894a60cb90366ecf9e61221ee8bdaec66d715159876d8305b35c81f96ab2cd8f81f4769e9a6e439c08c329036f5d2591ac42f2747bc0e77d4e566358a3271819b6003b290211b9b847ab70e906aed9f86cc38aae27e1098fdc3bd5d84e66c45292183f198bc329cad794aa4e430534511b7d9a75104061b409676a16c1146af0a286e2de8bf51c4a35193581a902bd3224cb9257c961989042538092af92644a63d6d6f6872a29aceca39341ad29dd22354812c4b7c7068b039ac9ca7e6358e662a28be001d4aa697ace540cc3ed3c97b98d8c5a6fd3543ae9a7962c9229b14b0b646229807747064be3e83191cf24092dd67f675638d9f6510486379f47f5eeda870a3187946819ec9ed05e7b325bfd0eed5c9a0f4a2063d63c1a8a0a309f586c94d4a68bbe860ae9599ce204c92cf9d92cb460ff99cff9e5a8b3824786360e1e1861e71158395faeaebe7aa2f61f76190f174aab9a313f0bf4f1befbbb22768b8c22719cf3fa9ec908b576fa4bbc084b1ee5b5a7eddc89b58b45ae7b421d38215aa6e49304323eb4e202655f3c8b16ebd6b03058e75a907ee63fcf6aad5eb96c1e5faea81b88b5eee525c4663af52877c0f759432913b9d48030903e7f9f70e851cd4e20bc56aaf36cb02293d992b38b583b8f0b25a08c3303d8af5b1b37f5127f7021b13934645ef3020e5caadc5e7326ed4ff56f797e26cb986b6512b0cc76f1d8e7be44aaa88e12cbc644f14a7feb979d2ab66907063c51e052d0f8b25d827377fecc5111be0d365e08d17f559e3134cb9db294f1cac03150f4232f853ec15ecde55fd1023b58e83934869796400088e9177e85a2227ee45addd049c1d6b03e5b29dd570496fdb2fde7d8cc74fbb5fe76266ebd90a3b4d57e6e6cb9f0bbdb7ca03ae955915768011c714c909a27ee20135927af55d4feaf2c345d029a54af942da6f85f2103345d059f66864e6b0578111e2ddd5a1cd8bbf4ae35b60747b93f53ec8ec64c10cf4149909b102a2b88712ff3e5ba3611cf96585a6b36fffb64b8c37a114d6b16a53879136eb0b5e003a5a068e3e8422a4fc8d7c77227cce64ebafcde2437166b62ccf486660a7a2ef37012ebacca26ecd5bdf363feeb06aee39050974c25d6a564594c67f56fcf7ed48b07fab4e25ccffe002bbe460325abafe37f23dd9c145b4667f146a1635e462330f02470b35c5a2519f1350c02b263201ec9026cfc57d3659373910e878f2b6c1c5be774df8e01e775d476956c257bd0ccdec17ee939c46e5653d5813eda752ba7bbb245a99a5db1ae55d19692074c2e5820df97c502a4bd1b12929e1be8e9ce6d802347c3e9c4202de6046436c05ab55b2fcb2c227adade6c2046d98102cfd0d859a91f8104eb9f6f155da2acf93df2405bf2c083eafd3ec41d60b810e0bdef6298b21193642a9c0c646bc6771a5c61a25604d96bdb727abd5a7ebe4ddb2a56a6ddece26d8007b26043ad44279c3c8ffb7e6ffb3cd4e10ea2780f509a8a9bc31f99a7e66201195f1543a0a020f754d9a665a29a896faf673df6811379579891374c71b2234fc61e95d4d46f15d44bdb4d7c3b3be3f46410ca46827b8cca976d8866e8ca33c4945d5c87b705588b78015b529843af0b75a7e1e871fd276c1e947d896b92e6181ab7e3ccc7077bb57fe85a6958667d3d7a790f6cde1cebb494c2912478a0eca2bfaad62492e9f1caaa0cc520da08c0d2d910cd44255f4c2ca0646dc89e789a1cf9a28e2f99315d33accb1639cbaf0c94181b85fef648bb4cc7f66dc65b8e90bf5f3b763e58520098febfe7e47bddc2d9cdd5e40dbf4ddb8d51f51bde2e57432266d248d13ed09e62f66794d188f9861c50ec41f0eee30f76f4ece250956733ee97036098db41991a4a3eb7816196c8e447db3a2913bcd992174a7bde1f42d57c764b47f5bc09533760c1ba74943a0dca291f2746bc1fcc573f9a22c72a5eca347b1679683fbc8f32b08d381baf67b7266b14b3ba46a04a3ee45881ac452f64df1bf17f70f4cf9fa4dfed9ae70184679184784a0451d2f5c19c02031e0e4957b4df68b4a069a6f6f6458f6d773924a1841ba664a55c2c3187dd33416cd410e56e4bf8d3671cf737bf67df2a4cc4dcc786872b9e2dc4009fea0e48a749353ac053d80e36357d24d468dd595bc823017c015d7450fe38149370c5decf13b00b6b0e0a2567ac08b45f7b0c8a7c89d227219d051d17a706ccbea49a42035cb327381568eae23b5e2a3b7e8beef6f260d24ab224827ca8ee9d640dd23eee94ed02c9e26abb3053cbfaeadbb1f365a24d8769d92240da842e0b361524020b5c9c22a2fd8602dc9600aaf02b35344309f6bb018a94d4cbc9639ab7430657c4046f0b25df517e31626abeedd58c2e19aa0ae1a43ed2bacad91dc04a2fdf9cc33cc420f4f04379e95988ab36731d5d5402d89fb47e826f4243bb206124364d63564a0872f8d2826eebd9046c7c6f2e7c951e49d4b22a7eec89da1fbed890d63ef15f26422185143c89da3ee269f83e1de11a7467822146042be92295a585e3a09e720ec522e1cbdcb41acf5ac45ee892677ba3ff670d71339a76ed98237be252ae21268e756f05ba0b094a1803f9da84a8a05d0ec9456cf565e1b548cae95eafa0fb01f091935e6eff2413bcb15f605f15270408216fb5b41ed83dfa1454c522375e35bdefe54275f109d0ab450636ac4d8e4d9e27f2d81a15b8cc5e98549254a1c9162918db3e399118f5864774a9d6a2347e1315753071eb1204c8bf5f52b1a0da37e484ebbe545fdfe6b031215678c3b83a19a24d7b661f626beb01eb82b384f02f42bcad4f40addd48db8a92b90d2297e6143702056123286617f86fbef4fea940f648867d790b8f803abc5f4e0e3f4226954c296afd96e287e21b7243d05e743161810da578096521805edd81f68a45500f6a3a1885cb1f45cbd399dde024df65072eb973c827fca13eeaa3f140842016f509aa9ab4603d2457c92cc9aef24950697a0044e3d7c483b8d8391886cd50dff8c2f16de3d6caa7f864c1b3874750781b2b78b545a94b4da0b0036433c6561f5cfea50eae9f5645302eef18238473606e9b9931880d0f6368fa9970d1ffbe59c4454bf97f4a5e8091801b53ee4a209e0642d83605836f69742071aaebd9d813b10f4ccac03851ee9f20cd1351f8e68554c9bc5f58ad19d474ca128edbf561d195e52ddf3c19bee3bb597ac2f92143bafc98bc09fbda6d18dd4ff2a93cd2ba17f54f75c32d3f141468c2baef4e53b6a340286dc2599bf7bb002aa86688e26f5b51a6aaf32e48ffd539d4f3f4bbf0cde2d20138151c82384f9ff29a634ab4e0103d93340bb9a7b0caa108bc7fdc88d7de14abb17e9efdad2b0f304f0bfcbabaeb1b9db75959dbf54930e67aed3a9c8309aa90506b6b9ed4f1d06c4ced19746e206e1e9b8879663bf56bf6c5c920ac5e09e6579b780cb63e1875ef0a731b726864b7ae5705a2d6d343a4a213a05928b7337a59f900fd04472382610e2a8d25383c9ab5804d609e79a88d70eaef3ea22d3aa9100fa2a6e98e97684ade9fe90d6bfc59dc9dec3d3d8db8990bc2123ba92e64253235e9b4d682e8aa04e23fb9bb6248a77c065e93249de829bb2fc5ea9e396461090222816bb29bca37bf86698fb995f62c50110cf418bbe2078a56c5f1ec9fdf3d0b09a719ac253b5bcd00932ae058b86611aff51c8ca8448978615854b69b0216a6eb8050ce199fd9a13aa0fd652570a1b187f61e6831b3a960521c3705da8c5e6c64c7b196ed4a49c2912d77b670b177c6458a7a49ecc1ffd8c57c0978d2a05cd1f1c7ac9514dd14b7b0933a52cefd40b6452ca0903df1f55828025c7e18109a6e0f2ab25724cad2d6f57cb5d894a6a508134731e9b9c61254f64990941f4faf97394b634b91860cc6ec346aa666600d323c849ea4c4a0ef55acbc56495ca004f3fca42ff0ffb11b0e1164c95ab89bf1db3d4f575ff334d4e0d7d50e0c54c422eac5ef78c5a3be95f2e18872540fccfb597211ec79d9d47b6cf41e385b9c2e92122167fe584210f63bf919c620d
77MD = d7c901f0d92a868dced7e2659e90121108611dd7781325fc57e5c336c2279510
78
79[L = 28]
80
81Len = 16
82Msg = 3dd2
83MD = b7399529fe614af98f9ecd73e45790406883cb22e3bdcdf28fadd033
84
85Len = 104
86Msg = 3d232201038fe7d846ac1bd4c6
87MD = d0aee5482c509540a4ea4b902bf42fc8df3af6de42fb14e903d1b2e4
88
89Len = 352
90Msg = 44c98cfc71f82215dadf494d68d1d6b92bb4eb81fa0fbf945a659d9aa2c2302b5c93fd3eedba31e479e29d36
91MD = 56c22e6066cd4c4d6415c5a225257e7f888b317ba4e98eadb72b4be0
92
93Len = 504
94Msg = 02a5c7b1b749d6d49bed302d9439f23ab83020bd4d573906f4190e74216ad33aceab775f71cd31092bba5cfa42f0845bd16fc1b8bed6434dedc92f80b395aa
95MD = 33a84e66cf1ce6970c35807db25e05ca05809e53d4e34cda9bfc0045
96
97Len = 13976
98Msg = bd70deb2cafa75918308d703a6783fe9dc5e3d21de9bfeb6dbb1cd531ed5dafeec463a02abde302d4ae6ab3cdc2f0f94865e38339c88bde507ff71bbea6b30b9851cd8cf599e950b8c8e620c90adccba0033f934ca66ea0a936afdad575bb6235099beff1a632c9114a8045a0919fdc21083880eb05c0d8c489c7810aecef4a41766f67c37557e28a9db9a0d909c2b167ff7eba79693afd3ee3aeace38eb73a5a02a882cf89b123812cf2a0f6d5edd1d14362ce9c43257474def5cce3adbba8cb48e7af9a45e702a182dbf47e8869b3f99e953ba81628e502c60d4f8ffc551c31b3ad6ca85c52164839d5e9d493deee4d4b76604174bdb5655385d34ced2c1b09dd5a486e1f9ac501bc611f9d7aa5c748f496faecc14c6c18e1dfc6aee2991bd0207ea1701219955a751df43dbf66f57904675a0e9e6d7f9a0b8bb82a8f44951117ab2642d6671daf1e5d1639d48aff6a05781c2b5e8976653b0a164445872d393d30355acf0bb49bf2bed4265c9a3b786249afc7a438d706eadb6f90a7f93ad51bde6d2c8e6ff09dacb3dc67ba0d3030c54c8367e1e4280bb5903274191344610de61c3c770c6820a6cc9d826f7c743f88f13580ba23cfc00598fd733b5dd069bde7f10f2b8961c16b69761b0f308dd137f844a67f6054e065863f226141755b96645a291e3fa3fc853b2475fbe1d3b25ca22f4da4425dc95fc855e63d6699b311ebd5fec1c7753e6e81f747c808ec3f618f63eaeb1221075edff0532225c40ccadee304a8997c03920e7ce4e60e4df4d120611296786516dd4d9cdda2077ac52bce0fdf552e1ee89a0133f1f87a6f6f35f5c53958ed806465919a0a5fa42488bf29caf33a0dd469e13abae351d5c6fb1a800ee384da199c823c965d9d5457a3ef8292c4d9b142e3f1fb502da498eb44d95f8c85bcd6871bbdbf004bfdc09ab35758f5e8b6a0d0f366c3b255333c52c8fcd4ecb4536b5f6e72897649f3415443612d72c3436505249a344feeb04883f41f90ade40af119014b3c56fc108f1ab0a77087d9226665d416cd975e9e4605529c032e8926002a70924820c6c7e264a794b2a3beb63d69ae56e017294fad4d611cbd0d3847212a38f22d623eabe3b884a36464d8814286fff52c4dd366f6c2abfc2eb865e0dc9ec6e55ca9d81f1b8cc47e2629bb162e54655bf2a9e156ab0bafb4b8ce96858aeea6e6665607a3f268036f4890dad759486b15e3c9e791429ec8f11bae4ea7c490656fdb0551dcf0b0be017c08bc674bd97d9d701c3ac955e2941ba7d5f2ba122a6f0c1b164b1caf2d50df111fd4287e9e195d181f6f514d7dadbefdd4274edc234025b727680576046842a834b6ad89eccaff5c5209bb91d652357e3750d8bb0165572fb71d09fdfc60f6b1e5d868c67c0edead427e7aeb734e29b96e03ea174b6b1af523feacaf6bd745ceb1bdecec9251958b7f521182daddf62ff6c4f58977adeba81c616ff2e937ca4f16eb9c44e63f9e974709122083ae45524ff87d7a0cca33a90f09b660db0efeb393c61967de2564315827ef1cf42b71c0f822f471713c9d885a3c3281d7c95dbc96f1c6dde0af70ea11232b00a2d215ec8de8fcf84b6193b6ac9d46de660361aabed3371fa44a6f32107f3854262eac355f9ef98701f580b4649175cefc29950e7a0eec958f629999c4b0a98fd4bdaf5c0bd97c963b551f2220bd41ec00b8726836e949e818a49aa1ac5bf12c64fb9991111ce8be3e0cb9605f753dae1a4c84389416f17fb66cecba45d591b22d64e5a4edcde067a088d9ff7f5dbb9dbf324510000c55d50f480a640fb22da9b4862dd81080d61af9560b601edb5e3346263f5f193df97079a27e3f9876078b80ebdcdb17ca4c50aef0c8329c72a7f77584cd963e105eea9c28a2ad4e95c1d018e27d0e720ea59147f59ad796b80b6293da8a55ed47e8abdd37221db0a5eefff31688e2adc294654ab0fddf9c1ffafd4783f01eb539492cb35a77315d0ad19395f47b18298a7b353dcf5bab0b2f193ff73d99310478d2e5c4ff1c68a2493c138818edef73caec9977bd4eda6249c8933953e06d796b288f78b18c343ef561082fd03bf92b084afaaee741de3004abaf746350048294bc52450e31147173f2da13d6ffc5adc718e149f9df3702f414dd3ee88296ae8a0106b071b589e8696401da7993d58a9bf8e5bf417165498c96b4ff5fd2b45bbf88f551688425122a3737ca54b2992fdb4d60957a93097222c3cf4c45dabe18b9d6a69e6f27567d5adec489e4b6812c29a8fa52f1de642b7b0e749c16f54473ed5ca2fdf2199e885fed308fa62a3e0deb7e0b8e439e25b3e9f95d755fdcb7ebee9d73069dd57dd1cdc5145205882023b54f2c9dec6cced9e3f6d24e8cdbb8ef121b8f3eded574d81908e867af5ac82bfb8ed60848b4bfdc1d998bae3a9ca80c1c49601d11a40409c62b1536f01ca67
99MD = 60700d4ef068822d0fe6df450b4aa8e206b2790d6dcf973229a59889
100
101Len = 48824
102Msg = 5fd54472a44e4476d254c0940071ad42dc723354f76ba61f63fbb9df80d1ee56136f51b6982e66c1da83602fc08093506a9e2cf27cb92085ba5c627dd63f59f8850e91a1d86cb1d4ca38ad03160f3c584b128d9b21e935570e086d3815307ab8df396cfa0c100bf6cbfc0fd7a8258fa1a656bc178e02cfdc868540d8e5ad39dd46794a8bdc205e710555ee7421ca7475a4f3232e6a0cd55d4b5d4525f0bd7eb1e455931aeea6918b9fceb2a32706d31a6d7028a85e102f228417e2e7db68317ae155af70eda98c8dc1ecc32a62e294d92855354c1114c5735a3c81e551b63a81650107557f3237bf953989d17c65a0fafd2bb1e32c237f98f55389e8f8b0810e97e201914c487a68403c6d621a98ddc515780435564245d87ce462b8785def699f7f06ebfdf33dd1ed7dd5a3e781348298c7950a387bff7d1878731d7ac66ad9a6607f2c3a3b6843c2852a5e882a8d78ae9dce2a79d595cdf09626dfa6f1dba7d40ed21caa29e304e7dbd559a89bd1f07d84165dc259ef112dc6e2c5a3e82b1c50106983f6c4965c85073c5deddbe6323003d56abb0df590f69010981ab3407e43eeaa29c6156995c492c931fff1b686eda3741a0bfb9094747d1620b2580415d431ffd6c02245f6cb03e39f87e82834dcea59355b2ba663ce145d2514e15e2b2c60cf518ff510c6c3e2f16d2dc523832762ed8352a320462ddd4d6fe755350672038163d996b44ed3b85d64989291bdf39398cb996de785b9614ec5d4bd73efcfa37fd4470b17d6240b8e4c715759286b04c3d7d791e2689927c9f18320ff2e6bc7306c805e23a5de66eced5f1a630cb43dd46db515f837f6b824b99b86c10b6df7fcf22d97be05284edf0e0be597b3f9c63556db031339f79ac9e6c5f8a1cefdbb4b30f5bcd23c2a4dcf791cbfdd6460284c5af0621ab7c5571e40a87c87be459c85ec81d746930dea24f43bb11d6611ea83409d3bf4f987778d8eed1d5b246a2112ef78ef0252f9ae464810c13f02359441d289958b4766807d9a3be0054897d35b01830deec1151f9e3d42f92b80f4aeedd65c78c6e98afc562a3bcf6d72f238c6e94a38f2288ac7929a7a61c92875c1f115c0ed8d261a727f0794f17ceaa3dabc717478f6ce7f2e8b295f000241e154b4575bfac8483f6b62f9ef4e18f7d341a65faad5e2fc1ddaf2b09adebc155ff09e63d5aa5f95206e66c7f4ef2ae3aaf3ea7c93589efa8c552df8d203e0ea181c1703d7023b56e603f33b4adb9bf44f7af290d8081210f327a6c9b0785709346087fd090c42d2b8b2711b9a1a5173eb5e246320ee27867ad6c3eadc4407bada44561a12cf5d53bf0448308bb536a8a525eabc1410c3a34becee25fd6fda453251ec229b53751f2280e142c6b331daa659ab655b78cfb08bf18e40bb02b7f1650eb2dd4ba1707f0aafa219f21c29521581ce249e2e34f5656b0a04c00485079b040e13cbc038bb9f17f47cb8f908591b26bdc28538d8baffe4cc39b17d2ecffbb9698bc2b8b31b08424034c051b535e0cfdf07b7a0a54781e33ba739759991aeb72c0ed992cbe76eb8ec0ab12c182e8b049cbadd6e82e314f1bf15fef5ae95dc86bd64b8556766f8ff62c33492198e454e5ca59ea856d8e095c04da8045522abac865506096ee1cfa1082af08ca09b3533878ea3580b6c0c57a615e0ab768246b3eda96bb6caa01a2648068e21959f843d853e948588e8c0bfda364ef1f9fbd3235c27916562eb0214891eb55ae0e059f4bf7d1838b5942656c27899dec6d67b823a981d1e1e0aaff5323b0e3d69a7dddf9b12d7787ab763a3c7a2697ac65b655aefc4bae7e6444850ad2540d5193b378682c77a4dbf9aa22e517e68cedfd1ba32e3730ecaa2e3f6ae61a4f427d6e69071dd62a9bf6c860980c9d23ce1fa82a1937e6dc1ce3a2de096b680d23d89ee102912ac0bd769c1c02095678dbb00b4430428797cfb966b2f901480811e1b9cde358b6d499c9e93f0961f050465d7b0c70d4961e75a9fe40a24e36eaad27238231dae6d0a17f446c16bce7348e669be563649eba9f23be29adb8b10f462780a066ae573f74e51215a26097b02469c25180890e06acc53ab063c742e08d51359b0a39749b84b9f6be44f3ae3da8e5a2f340a8607d4eed08877d007928d332d6f49502bb5f416c46d866fc87477c58a22d3c5932a8d6298c1151daa032c84ad92f8f90b8053b5aa6f690d1bf682f314471cbf200f3d30959e07adc6488dd17b0be5279e727f3237b8b4b19b31a220dfe63882937f8d5ead677608c42a57217f2239614c521d94559290e3b0ed8055d5474e96564224f6ca6389b40a71337da11e1c307dead8e4eb43252cc2f1c49addb18781cf20acffd3db693b02e5c8ecc949b51b99005529e0149a13390615f5df6e0bcd68e1ca82b0173d25134dbf76dfe92daa085d3f6b1e4d18217df41b70c4c40101884c2886495f2ef8a473bf23cb47ab6533c93cb38c36c6dcf6837f1272fc91a6962b6e1386fb643e1f1d71fc75ab58d5800bf4081217cdce0c7ae9e3d25de543fc4444314f32067eeb147c08c55c5c8158ed11729837547f28a300eccc312260215f50e98c4e3d4170208a50a4a4def1243538f906df8476b0c46d3449be73866d463d422595300e160840daf8c906ae4aac13a64457853b0ea6d8c32f4efe3b48c0b1450250086d459648b0ab14fd3f341a4a803be77e56a811e7a26827eb0a1a9454f90bc6ece665904adaa3cdeb2c4847858fd1d79750e8cd45d8da9163784b8bd06629410502debfed5eca3cf8fef0fa6bdcef6efaaf35a1986d6fd68e0f436dca9442077a4818ebda4606a94a3c93fda46e7ef5ccfef656896a0d3d93566b02ed8c3f6174417cdcb99a415b0c6e9816d94e64b438c295b4bfd69e0d9ad52911de5509971b7370593160629b641d690eb2828bf363857983e3b9098fcd15e66448f786f196685d2ceaa251b17ad06dacd614d9fa78ce0a8b9c1c360b529d0bc1d17ba0b70ea8ac1b8d67f6e5770f0cbaee0b38109d26b09493060dc851f5fef121e83e30aab9c3efc2b8397e8362aefea1708f7ffa14d3656f7f7610f3a629bce14648a593250c6f309c02c6c552bb42984ac58db920dbc7d98f59295f37f3e9b99da55ef074ed65801b390366669b4c7aa1c483ffd23082793f9e5cbe30c34250f63fa3ea2cd097593dc67e8d27b7e4f07e73a9f7b33a5ef6962df1381a038d4f58fdbca9d71ccf640b917f631b75d4a2e8ba46c64a6223f99cee30f47c1a935dccc7f054fc39d3498c824e10cc3ee337e781a3971f0e98295aca611bde701c2359858914248f6bafc88232bbc27bd85883b00990bba7862fd7a7cbd4c86df049071fcd10d686613ec877758d83927cacc530bed9a596b5b21c6fb748c379d676de7e05719a867c9f934b5dad99ed97dcb4e70a9b6542ed5b2f086d9f56fc9752e788785ef8f7837a31e433438cf2f18f58be37fe8412f6d21a5c35000a5efb862926700079413f76ab2c3e79e20b516eba9d8c29897097bee55157936607cabaac41337ea4cc783c0809c875259f8020e16d5045fcc39ac796d11a82f25fcc9579bf0a010200f5745065175fdc15474ed514cc796672c59637c3c8f236cfc9c0978a3db1194680c58c27746090d76ca09f7c48ee4ee7e1d3cf0ea70dbbbd88e30e8814b57404dfd7c33727a0c84cb7bd468b0bcb3c89b526679c00fb0892d2a5e7a3d73698a3db53fd7d78460cdcf24ed22b5f39b8c00b3506541ae4a5b76fae29c1cd5b0f8c3ce142e0af7ae4efe3fa4c438a604bf4a9abb41e3fef1b9227a7dccc3f4d6026ca289b4b1366d9ed546abbbbd5677c8d582e79e2b544f18dc23809ab753313d84dd10fa3ed2f723f0b46277b8877d4f3e0665e88c50caf0f0708b746b736b00c8c83a7d18500384bd035996aebb7da8f09fd6af9b76fde7fbfc0ee854d7ec02950e76abd23ffb27a6ddf1772465016c79b98a61bd3940547b207b6507e32cb9761a5604f0f546834a8edac7ae06910045de218d761a4accea886188f947b57bd876491709028e2e24b075d6b022b51af1880ca16a8c65b7c69e51b2ad580ee058acc0606f0a3a9ea1cd4342bf4be602e941dc4bef1239bb9bccbc8098a6a17d63186c6fa75ec44b6e4fd38a3fe49c5eb995f0cb884e2f3ed6be02515fa605b98453ad935682c3bac6a2971bb68f4094cefeeaceda92dec803ccd3d346f8b40b48f8f489e118a17367801e85c79e9b3bb5d73ac44a8290cdbf83a154f2f125090d42e1a1cb72f5ebbd42da46c7a4d4b9fad9612a4c800de6467ceb74f831e1395dfbf5799a3429ba34754add4b34b5960a5fee8f752dae78450322a1ab3d7102b77e907fc1eec5355991e0c7d6c0866660e5436248edeb1a37c0e769a0764cfbb6354332d6e55103b9235c84eedaff918af3f0213c435c32ab409a4b5c7eed8ab6ca9e313dba459bcfa3ee92e7d669be0526856ac3c06a57fbecbba553a9cb4655a901d98af02b74098e478076655d325bd7639d73d7ae00c62fdc361a997ea4ff5b0eba33096b12f35cc7cc0eea62950b912b47c11b9fb386a47c4c15c0602d304b2541da889cff299a1fd415e7e25c70ee4cd83feea7e6a9c50c75d9b128458513d61ec5d0299ef8c090472fe0850f384938ed44d36f10cc2c1d31daee3f946a2fa18f9982a988fd6ac973b1569313ce3c8ff5746c4dd85a241f1e9dca0e904c091832ca028533a3e34c184edcc510bf22a27f530bdca3d057928a96f72dafc73a9aa6dbf2552598e468735cc5736c67a620e9455483e9cb2108045ad80569582ea93a53b491e528c8df336fb326ad74317bc1dfb8ec30a73af01a5dff3e437b7fe48ba5dbb3e8f01ae0c6fc28675a415f23a796bb6e0ef0efeb4b14cf20d4ad88ad1966da43a76b454dac8687bdd97b89b8f8eede91eb34ca4a0523ea65736ae39341fb32b9b716f25662a37382c16f3b9c346c84f03bef54acd6efb364c6401b07b3f7679e8e7f8c9b77b75e6e98b90f4df88460f1978d19744eecccb743a999aaedd00b5a94018e9d5a56bac9d5d55f6e93bad52e84aa7340cbbf98d56213d9dd3e1970867e3972dc98e61b3cff40b64ec49463ff79a41c82dbbcaa37a82b761f432849aa83a3d3c9a209e2207b87ae9ed9959ffced165fcb0d8873668c3cd8f18ba0f92f7acd2bf50416c22ce11692bf6132eb9f558dc789cf9776da94e48cf48607f19d9a11d5df4db11dbaa67a1d20e9f0c96f5956ee3f906e371c489efc88b0c1e56d881e7bf8dd5d6742622eb873e253dbe54f2e2e6d0e6136941de8c23e9a632727bb5f88c23170316c7aa0df28d8d07589dd6022828834f7ea9b4e5876a1704944aa3186dbf89e0e81767cfba03bfb38c55a9945209c4dfd88272c49d1745dce5ceb40f0a6713b5139dc2fb87a8a4888406d2610b7b910a9e5782ef0df719028d8e50a40a269dc9bee12157038522d06537bb31fc87d21af9ad4b2e7e127bbdb313e0a116010f65126cedadd4a122d15a71cbcccc346f55100e354b997154567fe3caccd50251d137c58fc3a2048dd5883b6af9248b51040c01a80c051b8a151a8878edf0304b5554746d6116b749221a1d0082ac925e6e140f0c3b6a180742ac8a50ce0e93e6399102f151d7c14000369ff52d0b537fdd51bec99e7271b1255c6fbc36d83408c417f6825a8e2a58b9054ab2c3ead69d97ea9947fec32d720653c123ecf51a9a3f0ed88743e3fb7b94aea59d0bf0219ee50825ef220554312cb907edb90e4d85f29e316ad57d3b90d859391fcfc63e6c0fd3ec27d4e1efd6e0b5ca8165cbd6af25ed8792d805f27fce308ca1d51335ed5d727558dafe05486a6f9149b8d3bc022026656714222830be582889e6800c0b170e48ebfd069e711210e4ac7acf07652a6f5051507de68aeffc9540cab5cdac84ceee46059ec23820c04b127266c0bf8df0d2b856be3377ab42592f495980baeddbeed3ba707a85dba64fe36941eefa8fd37204ec8c18df3852febd2b142b1c9a5cd0f9e424cd408ceb7788270899fd793db99ddb8f9ca8df550c513790d8bad37a1d1f4a62c4527bb64c677462c9b093582decea70c7bbe873095536728e7ce05d5cafb5d166a1f03055e918f787fb244c5857e3d7a1009bd37f30f165564a082c1510ed19bb1633811a76da70dac67641c2478c6b335f409ef54a2d0f370c9510d0aabae3cb998bd023778375cbf9cf5ef125afd584c11efbf40bb51839aacd3016e5e4d79f134245f952dbad617c78cb6f5712bd9c0c7e1303db5029640cf9b56e29329c3e6a9e0a2371aac1a437b9b1c4477ec9842aa80eaa22c5eac11b60c661de6ddbb088e844293ab8589c13d938765bbaa44301e4137148dd0257bd4c8c766c5d3bfe53671e9417cd1b52f622870ffd90f4e17b7a4ae1b5601a2edb032e353bca652fb565beea6fb0b2cdcadac71794c662677fb1dc81d116d94f5eced526b37c004b95284cb6aa2ac415754a1f14882595dcf4d3f1d905c6e8c12cf5a9d23d3ab55bdaf9f17d2f03f933e1bab89040753648c426b072b73aee8c2fc0d1c03fce2c656e20d4c96803fb2ef471b912267eecb4d6f342d3513894b94d77767823fe0c7438e51f21bcf16f0e98b94b23a10760271281cf843989824f7061bf834f93fd8d2090f70e939700dcb4d8964a19da39a9601a7e0ed9f55f567fc7d5682d55a9ba0e68861756bb549f2f17c10ff6bd2042a80477f89743d3d762f1dfaf230bb502eab6f4c46b26135ff3bef5faa179bdfbd288e3cadd3d88d8012706e19b7fcc6e9cc2699d3ba0e624e715599480d6b7dbc6eeea0d12a9236444b17285fc7794040dd40c2b2ef175f7f3641664fc9bb7ea6d7eb3489d504f8013d64a23aebcb5ce233405f5ade067dffff253f27e926431ad806703e8fab23656e0b7431916d8d4c72a7d831e3664e5f30839c76c8167b76f3b2dc75a6ef48df515e06ea54ca51de2fd9c5eeabb1610b7eef06a2f3167859cf82e1a5b76be8ed8beee2bba28c3b15af6890d7a37226834ec9f63306a0da11aff918753d8b83fe7220803c070db98195d6d18357233f5504a6e3bd6f30115d3987f93aa5d89aa0b8b577d1fed94da057a6f088233efc0f44f86798896eae9ad0b20c8c9cdd9d72a3f02213f6797800894b864cb44fed009440fa5b0197023929f9bad16f052cc2d87327788a68b9209f46fb4776b092d75713048b5453ccd699d19cafa8e9a93fdab0f0863711916efe3bd81ee71b8e0221e12e9ffe2f6ee1a4dc1a8de6e593480f3c05b3691e916a4a7ca51971eb2f0f693dd10f6b8468f8cf7bcce285938b5a0a76ef86acfa2990f88bdafdc39a065db17b845028ed2b7a9e331c44217de20440e406868f1eca818d0be20248c2948b8f4cb118b2e456e585949139270f57c54715f3297bf714aa7c5f72ed8ddf6a074703ffbf95e45bc81a02c42822c22d2b718f2de5e03d687a4b18d605ef5ae75f9d43c8cb4e77aaa0c0101d978120f29574b22f52783c667f7daab3e1f9cfacf2e68e94a24918e3fe2c4f061deeb64891b5217fe5908e7f389897751839982b7fb736fbfb1232684e93123611b7fc8fbeb74f8815b5ae13240051920f3b6ed34483ff673c467ed7f0a8fbf619796e485affbed0697415d2d0598ba34d5b9e44ffd12a5edc323883a2e28efe9baf860324f2d2016748503eac1888213926b0e0f0335a4b51820a2bd3b42d982ec6ce307b453b6385aed7a735a1e98479394147c40f01c532926e10e1b26a5b395bc150ec4b4daf5b1436bd0baa225583ffc9d9e9d8a354f60fded37b41c7c051daea04e689ab2d4e24d7d07c75c50ccfd6a527e024d1632246c6f40f06b86ffec0b29cf894b665d53d459226b93422d37a8da23587fe884dc3c0f2fb55dea296a9a5b9a0d101f186d9fa6288c912202547cdf958569d2cbf235740eed38d10b0025dbb6de31058e98780d22149c19d4bcaf06dd7353fd91cd1f47e47f45622e1472542be2f63f463d253617eafd4f2ad609f9020884905dd5c22fba53ccc619104b6c0203a7f6c8c26fc80ff6fceb8c0c51600c2e46b4b872e6d597511524545a76cb42278b519d911e6c1320e01682c551e204ccdf91290c52e0836167a5685cbb1af338eb794c10fac92950f3f7956acf28f1ca984e380bcff9876b0c71dc7ce4011d1d0f955da9ca885c6e7bb74c6194dadb0fb9146dd725c8a9574aaf3824b727c9be3fce59c35850b162c17d3013689fca858a0a51d81cf4f30d6a8705bbfe35ff03c34cc7c56aca32140d72c8e8121fc71353596b777b266d75b322c9a97fd2c5d4e2362f19c99de66da7bd9c495c03d9a15b28431a0c051e786fa80f5503a72519e6b419263d72d553d688349c0cf30918eba0622b953a0efce4415c29515c26ba15f00e548ef108afe3f8194aeb965e5e4be94f10df6c45ea5c133a8c3398d09fb80f950b83c1866a1637d2bcc195e05cc32a9233b244cc2b1d4930e66f032cb1163c37b3e58b576ab76de759569797fa9b8bb4fad66aaaa56f09c7a0ce4641d6799d7bb47cf684990ec1e08871458c211a353ccf1285e7429c7b8520180918f7
103MD = 85747c796a910421ecb364b4b4f0e68b49e9217944f6586eac4993ec
104
105[L = 20]
106
107Len = 16
108Msg = 8a61
109MD = 60bdeabf39efdf21ba9c0f94af6552d2ffe699e1
110
111Len = 104
112Msg = 37487aa02b03bdbc6bc62e7e26
113MD = f146072f92dc4a551721a10bf0b01564cc2b43df
114
115Len = 352
116Msg = 6ecd002568bae3bf1873993041bfa292eb94e9ad092d8eb3585be82e8a20cb36a47a06e7a57d301268a4a533
117MD = b0a2d6033cf1d8ff120a605b745d736ee4aa06d2
118
119Len = 504
120Msg = f6dc1d2f6b8e126d99939664693d8709513f97d730074ec2794e536d94ede79c81f2b2ecbff3c2c26ca2d181ada2c60050997f3bb087ce48d956c18dedb227
121MD = 395dd2989edc854746e384f339f0808c515747be
122
123Len = 13976
124Msg = 07a6372c863c7d7c6764e4f05addbbe161762735dfd2d23bf268e2d603cd28de9c369ac379390473e1d3fa7e37af1178cca54fa0f782dfbe68070952b93462ea46c640d43ffe71f5fba42df98f4c48ada0d8aca8753e0731508bc15dff283178ae5c10a6ff132eca5dde63a78d3ac94685152897828eb25a55fdf140fd33fd4e7b03f283e201a1baae8986d25603fb0b2566aab345fb48031d648144dddc2e3556c0ceb1104f348d96ae7dc0152e45c625d21b46e70c31f250c858aec4ab2cf5e79d8c79b0854e0abf5330b9f044113d306161968f4ad6f0973160c9dc296056d5a11523ea2b56fbce8387070fccc639ec1c65ec663b9dc49aa880dc4ddd3020c9d44ff7e8cab6266e436af19b4ecb82010a0f8f9469ef380034a02e3f50051a6a3f233dcfe9d553459dc1bebc538ae0183448c9405c351271dea808d908480e61e9793cca111b4cfb9874b799626a1bd9a0f6e0929ad51b97ad81b2438f5fc255db3a3dfec9f0d8393c6b245b03d3faeb58021db3ad391b17a91174a66db4feef1b4c889699bcbea7928f4d29be2d47f76455c8cb1dc7da9cda41962a28ad8cd7b39965b809e7c7eca1c6792c1ce1c8a4cad6290170e91fcc49fa5ff64ab433b4aa081c8da2d9bbb072f9f18ca455469b946c877e3006b34ffd2219335b30ba2e0980f43cebfb629d0b11fe70dff28883ca012c6ae4855fcefea20a08e189eaeed7eb36ed6db3835976f4e60053205805727c5eec15d0e9f155637a9e66268b9c1c302bcaae6ae88cbb8cf1668a487cc996c4662c4a4e195f094cb31c717165e0e13718f8388957dfe0bf69c70cd0bd763dc38c530b67b9c12244fcab8bd13f602de848a2937699f9ef77944e5f22e3b470601789e1838fbea9359c733aaee2c7082b02ee459b7684ef9bbc200da4b62d368351f5520a65ffa506dc9b097117bb7ae88d04d85fb525e91327689ec0fe86971480c0e864012b1e9f044c7d80a4e48c07320dd4292086e4c71d4c98dd826a9bfced112bfa2beb1ce85cad204451ec45703931bf637d4fe89fe8f485620b7f4b21e011a232ade7a8c92be77925e878ae0bea9723749528fe83cf89ecb9616dae6ca0e8d5754ec6c92abb21108c2f33cdc18c6887c430b72c5b193356494cddccc577bd4c2cd53188f352846edff0c2ac7869cb74bb16a77c0f0f194a7a9477ae15abb890bd0bcfeb0c39381a87f1d05319c7e971c10e9ef687f96450b400e25b4285032892b849fd5db8649cedfb03c88defea063ee144a1ab1f3bf05f59c7db364dc39c11a446c3ce16307d78d50315ba29f5bb9a57438564c8c7b3e367cd37d74b2375a4966f47489dc5448f4979428abd32193d3840aa983d3020a9f29d760fc7493ab2576c90b1934b799c1d0d55e4f2caa78f4ce61930c79dc017c2dea0c5085d73a3b0e4a6f341e9a5061a6658af11e5edf95bdad915ac3619969e39bee15788a8de667f92f4efc84f35082d52d562aa74e12cc7f22d3425b58f5056d74afcf162cd44e65b9ee510ff91af094c3d2d42c3b088536d62a98f1c689edcf3ea3fc228d711c109d76ae83d82d6a34dcfbad563cf3726519b519fd48b51741aa86720836494b7a589c778927047a25d73508adaa401e9a6c0767a675e31c5556cbe35fadc9671359b45e985c3c8af84113989b299ae4474b85e4b5d4b0578ab1e8a2915a8df97c4f52a639fe32272cb91bbfb721505dec46d51383cb8973425a714245c2e37d0577fbe0d66381d9239db1f08a380cf609dc699698e0fada2caeda44d58d766c4f8214b10642b80b8d7d8add7cc41d47108ab7d07dab71069a2d982cc900b331caec317942122158bac6eac9175c2dcba0c04443aa9188832b553f5ca8c336880824d6bc02486a2b4c086665d276aafe3b1b93729829adca50c44466fd5b5cb977aa78fbcf5c0f0da1b09216468a11493ffb39efdeda5d669ae92bee2f2fb250aa1b9cbb11c36c7a6c6dd26cdc3cfd572ffd8c1dd72a13c27a327a34c6b6b3d80fc6c67c72152eec0c8ecbdc1bd5cb829b811e7f29af6d786f4e93dd4c96fdda295a6aa258d7b2fcf291c2d68e0b1866032475964ec0c6f2fa8c2d6a3936ecb187350def4e818507bf157c0e9b33406be7660605af14cccc9c799b4e051d0d0899e53495bb8931a6e2984bc6dbe4e02ec8b4642fc2f1cb5fd5a5520b48cfcb49e1f9533838753554dd98b6a1b8a67409279df477330e5f37367e06247ca5c3ffefd00e693dcc0c9c30754121c9ee88a574915b9e77c104fd2f921c2c096573951407ba9b440423d76bdc6fc978237a6e302cede7f99038ec31500884775556941f1edc30e3a417b0e02cb6fb5bfbe5cdfacf4006411287bedc565fb06f1be987416407dc852254934df4ab59edce476f3506e65be6ce6ddf91038642291fb8e92ba5b1f0b105670905a2c14796110bac6f52455b430a47b8eff61
125MD = 1adccf11e5b7ce2a3ddf71e920138c8647ad699c
126
127Len = 48824
128Msg = cd8490c93613bdf1f284b94b330f6d6f45a39c651d2a160b340e2eb696fc6d1c35e88872845190d141c669de92a97daa5433b1d7b0b899fdef2ce74b8fe72a7296a5b5be26d1dc86520367c730c7400c2fa06f91ab4c48a7bf4ae35a5b9acd5296c4fdf7451b0ad9cc439b4e34f11e5d7ef2bdda376f8dd34d6f092b219dc085dd4c4a6308b8808f588eedbbc7af7f64e83182fc7ca7cf4741a341060a7969d31445834c982fa8739ded4555108acbea1666a83da17f77cc42ee73323eb53203e3b790f81c08e94c44678b6538096ab7b09916e6cf7ceb2af85987f8e4d982dff1ab59b0bdccaae1f405a73366b5c5935dd0b43e2d2894290ceb66a0246dc02de728c5bba30255fb56ce8107c3144246c5156a8fe40ada9126adf67227fa56b66c37be63f532516211ca012977b04a97916f201f1baa2629eda520b51508ab4229df2ceedce406dece0110e0a911464f69e7be38fb91deba0addcdb3161d2799c628f5a57fa1dc37357c947681bd9c36f4832c20ac466c0c245de3b250c33282ea1a02d007f03b34ed427631283eb614db4d521f555136e7e42b4cfbee8134c63dbe3bb79b5a8b9f9f5b9f5ac61cfab1c54d197f1e3ba613f251eed616df952d691b88a16466343ef2d0f63882ddd2d55b8a6786308b2257f5d7b38af166bd7f1339d2d8899c9eda8fa86215850ba547450c267eb3c9147d96c38161a69d1584e521ffa23384313a1debcd37f72ddad02adb3cadce7ee34b7c1f42a15d0d030487daf9488aa7562845a11ee7ffccdb38b300935caa31f78a4ff3dd93403cf0c6a16ca611b58c736aafd33d6dc56f0f47878211d26f6ab801b9453a7f74b44593dae0f047ddbbf2c902891111729edec44f69a05944b18e7a601f41ad24fd6833da3dbe3029bd390de7c9841b2ee2b079b2bd2737518fe1bbec88da64769dc36e4a8bf716c219b2fe059d7dd220c1ed2c59878db5bf8b198e0689edee921ebc0cd2d3853fcf57c363050ce58071c5fda6ebcfbc1bb62e9eb956286291a108bdd4191c4ff47900d6068e1ea26b487649af119b9bb15dfed804836f2196cbe12d8fc86e3d7ce89b52ad49dc9ddbce5b370f73f512bedd853039366612453733740586d1372143b09f21dd4dbe1a2bfc308db8e4098c5e4b0c1e16141ee50e85fafefc4e2529b3c7252af37aee6f86e19df28871686107d7d57dcc812bc077602642d2ecefdd5f694b8f336913210793e4068da2178600b1f41cffb5221c9b4b6298afb47e85701d7b1a44241679d8996f916c81ff437261cfc358b9ec42a2ce16ca3bacb8690d6c1d91cfb3e0bf1e7ba45bd01606df856fd03c7e946f7ab371a89e1fde86d05fdd97bd7b1c583b04c2ed2b5f6815a460645e4e1b4e950bf6bd81dd0352d1048df85266f1696534aff5b1cbc17f15d82cc8e0c0d4f0453f9439094f8e0f7f4bc045b654d9a2f1f44a9c57019f63ecc41021c05b5380675cb56ea8bb691d79ee204d2c4edacde3c1fb3f4996a11d84b035f965e74009e2ab80e2c7ea3c84a834d4971a1e9cf423e4ea67ee526eb3c3e4c2d7372c4290a0741e1fcca5ae4cf36705abe98ac81e98a5419baefcaf3093a7e0449ef1021f88ffb7ad21b2677e41cdda12025b06542c4b2564f15e0b99db43b7c7020028bd829372122cd910227cb07c53cb58fd9dc620c0491f3e2bf883fe6ee8cb1f5b73767977d857e4513e8b5612f6ae4b56014e6a3ad2a065b65472212e2f611743484cfaef860999d1dc5608c58412fab888ad72bb87dd9b55b692f31e252daf8944ec5c02a5a9c23903c50dbd845f2fcc3bc9806af13ca7b025cabe675195b1d56f3fe7d7bca12530bcc0af217efcb03a218bdb6f9726536ea902c8303b02e3ced22be59753588b5f0e2f3419fa5345a942dbcdf3010465384a225ba26cdd0f1d74999c69f336bb6d01fae5cf81cbb8c1a7a29c1eb83ca6b51113bde56b8cfb6a5d72557622a37f039d090a689accd02b57c691174338de8e05bb3620c079705c969c58e56b079dc9eb44eb0fcebe548f5a31f4072a5ed56a2f03107bf40a359b2601eddf53cade66f294cfeaa40a0d94b9c90d15f61852f295d3911f8ea914d015885c8c64540a83badf0021a416c3e37b78236a2ecd1fce4114033416bdd3a36c18ec13250ee9c74c0fc4dd564b3d24a825802d5ae402a53bacace115ae3bbb329be79d1e5e42dbaf0a6446431145fe49b86a8703c7c41f8985d54f12e314c16ff89351d8addf66ebba2783f2d1a11965182aa0b0dd2de53586c5a695c6265c2b173958da648611090557bdebf11a1e042f089fe98e049f4796c60d26be38356fe020d9ace9008410d53a1bb7db78b52ee44bac364213f5c59f1eac4e3314f3423b92fdd7a6156608111ac6ddf58385ec1f3df12061208db98816ac948d803fad10d5ece2018c60faa13de5e5a9033745c824932e53f4122a39f635813545c1b74732cd55642f19ed6deca1585ebf7242c849bde981572a2199066e9c912b2068c8f1c8b936c43ae95c6e22bd7b80dfea05f495d751107da5928e806d0af905c87b5a0795df146af6580d8f9c6a0e2645686d43822ce9b4be0bd5937c097917e048b5af71c7e7521d490f107e9231ee5bd9fbf0727ba87774ed24cd52f471ffb71849ebd55605996515bdcfe95bb1df3541e7c42da4166dd01ec3597634aa6455d15fe14af435e8d7a55ff1682d55a2da867ae63d11fb3fd987fa5d7032ecefc35d3fb9570940e779e13da18070e6df5292f97f2a281f9598101102c955fe4808a2319c85fdef3d55b19e05bb8c2d3da64bafb67a53491513a24f6f0804aa162c8a7db25b38089373fecc45a0eaef65dd9be3b4b7f9436a5423fdcdb5a9b60138fc6a2261225390d9ae0d8ab7f0f7ffff69dca06881d33a637d634358abebb333df41151f239add91abaafc89070cb2159ce3a31655c22e4696c9fa7a7211d1251d4bb21ea4a321a3dbebc29d97f526251e40e548dcd7ed07587719a266f006179dcd22e50b3705152817057b097b043ad63b8d867edc20aea9b4c959ef4ff70f47128cfcc21e31f17978ecacc366f459ac1cc459a3976e4173ca322675f84f18036119ec2f204c3fb554a0b72f7e9d8c882ab147b3d280ca9dff7b9160b1b437b901f03cbc05fe05c6f44824b48aa8da52ae7dda1653fd500f9ccd221843cf76513b3b74d094f14d93a00d7cb954bc4cf2f04f9a35e38edcb1e84f62057647dcb3571f1dd296ca1e049f1746a8a282e85138500e7649db756b2d2ad88f11c471c89dc6be2cd43481013b8d0ae83da2b855cea7be424f8b2325b1850d1fdef03e765458df4513d57c72ba9751e1edc3c4e7f97e3202bb46eec7be89871ba3704aa6c6fc08851e551a3f655fa1fb798d12f003faf31c56b6df399a5dd0ed29ef9e4139dbc254bc5d6051840a859eabaaad56324588fae881fd638d2b70fb3813402df61d941ab495588e5fc3823249bf9a03cf877902394f512de118edaf98843a5445e9073fcfa409df3db0221f1c77e2dd21e74f9e10c9e180dc4ed17010eb949c6d67a22bd5337b2c68f9eccdec778ece728e91353696b742c8f5a3a569f054efb8c1ed478ee9b75e26c768a5816aa6bd08a4c72e745fdb5deb34ecb86b3a84346c1c70f9c16fc45bc0421f0da2f630912d5079f390cc53b78e343310de722b53d2a3b4aa386caa0d7e91986e19c3363426ba30eb5284293af81d00158a3f5233327b40c3b989725ba7dd5b31ac7abf8d3e0b737e843065cd7316dc2f374a00bed4cf9caa0d6e232c854df1bc24c3d484bc6bcb14ec770d5745474dc6ac3b3ddbffc551c9fcc2c56a5e0ae17948457c01e701bf1554022bc2b7d9dd42b2b91172fd85e6874d2d61fc7b3bb3cee2a9bfec09f6d7e98279c6f511f4140b116c856c1438e34bca59fdca2409f025b896a52d68719bf93e82e7d89bbf798991fda0af8d06d17f39eba4bca09c1fe594b537ad4c9b94ab52c895539d639425f9146b24b016368a638e5bba391bc8763cae7c52ff9c496884f1d84e5e08ed451358ecb3c4919dd410e82cac35ae744078287c05c89b42999ea6b8b127d40d53a5722d45139e8bc507a11e7add7fa9ab12cc40afeec008a4668e3e6440f27bb5780936c0e3668ac51262390c79b3f21fd041cf36ba3522f3a552714ff188bfd554c60d0e7d11213cf7d3864a5175d4047c2f3284741f18ec22995a5b82bf62190151bc1529c6d9927f9b0c1dacebd9c2dc406f7f64a973f9a70cff6e3abeebeb46514bbf2ead382f7262d46bd43d88c1b91a9011d1f8ba81fa536a7162aee2b2ec6fc0f2d6efc87b98d2e41e0f946969da659c21053775ece415a34d42b6cfd5bc52259867b411dfb991461ca618052309ca9c96468c2da12dfab0e822ff3bbe7ba281982a239ac19c47024fe1f0e3550cf0975add1f680a9dac9b2c4ab0aed4f409ddda6765eb8a0a9d1e9d07458c69ac8195541219b18efcd06c0001f2ae7fee2d404666a18ca3cb3aa4f0623e86c5b1229f6c2ca28d951111294b91edc52730b6b2c46e000672a7c89b2f38045bd3e37dbb8a75e18687a514dcf740c87a34834d3c3cc8aadf6166ec0c42d2be92f90a3af49633ff23cd80848ceb57ac550eaf9ae496bdc6a2d7cf50fe107895b4a1ed014f78af24eccd6a07420f1dc0df1e7c44b4ba937dd43cab9c798371b148325578d61931766af02b45054bdc2d9fcab2f4b49092f6fff7c27886820739d6140a4a905f0020249e8ae8dd87da1a1e7b1851eb01045aaa72dc8a2bf68055e7aed41d85336648a3405195d2ab61b0e29a770461f32fd05e14c17d72c5252f026a7b9abe7ea9176d3c46f6ed9fb716758d97b41e4f5d81a24538f763d83eecafafc668422612b40cfc32b3354b24755fbe400a2bfed494fe6d0ba0051713b776e67e2f1915e94708e6dc74b398f2f526933aad8fe7dc32faf40022606aebb6e0756b994c3176fae7640ee06d6c67bd54764c4752f1bf831f43e0227cba101174c5554ce26400f333dd8e9f6db1cdf670ce407d7d06c3aef4c0724b62edc8f1ba3e04f0e394d15a73b9255abb4d6ac70303dcf9160d32dc02d4804219ed5c7e3b48402e58ab2f58305f9bb95d2a8759947de96328ed5234cfe7d0b2a9a014df7e4cd0ae48906315f139b8635d2e6bd4aba32e62b8906cdfe5622c411bf0373d0cb07d17bb2bb5b83eae4401c243605fd1df759fd0ddc704ccab5a9776c40fbf6bde0f11b9646c699f26063a9550ac228c9884c277bcadcc0a2c225dc203e28e253c4e464b23d2529d09c7b7dd3c984667372472b615645f294c4e3b0797f9d1c234015b78502d98bfc04f1fa2f16cf3e7221d5794d035e4b172a4d84e679cb1c82df2fb49d3c6668eb1661bed56705096c2371a19d668832808eedd9e5b1256c18fe7ccc494e5e29145d453c553ec86fb7f3a634d0d45661875f2f1005ba5e734c1a976f37cd23450e4606e32d027bc9ec2edd9395e14b2082179bd7b4f9b8caa2d00a2de71d48553f7d4153cb56a1b08f11925e4b11c9281744ae9171f3d6faa3ab3f88c5c34fd23e4f6efeceafdcbc07686ef56efa62c0ad62f1cdcb4d3b5bc508c1f05263bc347158fa5495828f34eb7fcde98fefaa82bafeefed3f4a58968d751c051b52e0047f066de5be533bc3b1e439ab1c8602f6c67503803c8fa113737cb8279f358dbacdf45432b7a654d0e1122cca93420e956661d7275181c75b0d9c20e84c7007dfc49f27bc00007cf4ffa631c892981fd70141d532fcd51de5c23fe0b7a186d0dc296362f235d61698740cc315891cc9342da17843bcde274c17e462263d0e8b4832dd9075a7bbb443d4b26b41e534ad5551ed5ada102175e695363fb48d6b99ac978a3aa6f405d87f983384ce35740e930491d75675337c5dc081e3d301228e61bde5cc169968e5b4350cca2b085f9f75cc4b88497a78cd0a0073d90246c7dc102c7cbf3516498e8a41aa85d8cc5bc285ff66e8338e85ca83fb6889e2bccff52059bb9e92e92c155a349952680ffd0a3c346061a53fdf074417fc90c4d1af7c2acc3ee4b080752cbc9455ba5931b7e910f1e4af0efce905d2cc9c685923ead387fa532c0e8ad92719c76c281cd010e1acce500ae1443838b8afb48af032069dd07aa4df0d56bcb70a64592633699c8658102f1fbca441325e27f1732a7a973d8cb3a0684d72943ef6f1892f2d7ccf39bb6dfe5801ab98653bdbcfbb787bf125253be2624f6cf44177d588bd7b780d9e3f4e3a4e50b8a253fa21abce6a94b9073289c76773b46140f5a6e46b9de9ec066c176f5d1a69f380e1901216617363362d13ebb26ad74fb008ec08841550ff14ca800a1ecf2e007ebaad9f4e0d9664448d60ac0d8544243129fb81c1723b9b4bc2ee971dff736d9fcde0afbfbf5c50a4cc06a4c363998326c17bdc9e2508651dedd9a2a52bd87f8693cfcff60753acf9716c526e8635f12377e36564ae55d0fdb3c7997ec4dbdaa5b4d18c7b660acd95060831795da7d299a5a8d8cf9e92537dbd3ef7f56aebe38fa97c41da6bf0572a0270be7e5a7dcc0be3529339464c811052b65a938e874ea6da469c7d8992ce0aff1c75e82d1621ecb967213c65f2de582cb41de3804c507ddfc708ef3f6096ba4491e431160f98de806d0f334e03cfb7a3bece601099bd971253f3aa0df845da8b478603d5d88533d0cab9c89f2dd9a1404cf8939ffdda652a94093865a85fce2bc3d7babcff7b9f3306bd76b9af80c78ad518f89ee73b7a710da604e72f4927be8d65d06be2e0732fa786a83e27597cfbed9bf98df445499e0746b9f2cb9659ac0a9cef433148521f33b1d78d13c8441c0d1e20fd93ac450a3787a2292bcbd68cd1f961d34937be9a21abaf26f361bf53aa0c095e53c51f3e04d567eabe6e40d96a17c2bcc9230b18f7e079bc549a314b4ae21d30a3341aa205bc75c7f1d21b0a49549c300faeda243d0ce18da5e66c5b663cd705005dd9fea0a9564174abb797d64c58fdab1fae44576d514b75eaa31c9278b15bf9b6df7c6c2873d7a56fb91ab77b83761a09f9e1ddae535622fb87f7462256a60dd39dd3ceb6690b0272920b635ea639daf24f95462c523e5bbd8d8407c61163ab38877d5edfa04c2a78d4d240523ba97c7d01c71783f8748e85164b4dd08c25506a4ed18300b42b7bc6e417f512ae456ceec2ffc83190991a06d4a58ede215babcd3688e1d61f1975016244e80c88ae2aec05c7eeb1c50caca72b3b415b6b870bf5e10bd1ac3ba6b4acb1d1afac554444d94c97e171005fa4ea9c651bb4e527ff58d0c2f90fb453a92d6546a26e9e98395b09e8471bdcf2a145aacb649708cf048a7856ce8cf390c107ff2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac0d1fb639c516b9bcdf23c34c6145a705498ff9b9747f15e1c08c63da6efeda4eca02c3f00dfec06c82220c9de840040118dde76be788daf84e6a2f44c81fe6defcc474f99c51c4648d297cbc48f081e0809dbda505d020cbe865e430e0491644ec8c52bd3ab8ce8c4862990f49fe2588caf804ce9500ef42d5a50c057c257168e283e4a4aedbe4ccfaf3eeffb212f9e23d15434d60bf4f455f512e2b655aff3225d1b217c261110cec0400f54dd303d6231d028c2eb649bccc91d30a6391c88bff9d447c3cf35a3467be5957e0ea4d4dc237c9f2c68ce48f658f820a3d72d559b60f233ce538c92cb148808e34fedf2d648c21e7f2ea29a77270c393bda42d869351d6c085d965dc12cbfd0311b8bf604f4391d378781eea3b5f1e0da9d0d8f8de88e56fe47d362cd46f591d3ec0f7cccb85a21f21ddcd4107821ce0ca9ddf99dfdfd9b0c9cd45053e5b1b4385bd8f5b227ada31b5c23e9420014474e8b4494fde7c38edfe70994d97b8cbdfac588df49a49c472fcce78cccc051f31cbbc1e0422878d8d490f3aee28adf1587c38fb7e7d1be54abeaa83cf54b633803a5e669ff4295df8735231ce39631616bd05e0e31117c722c2fd6787003b0bc7fe422a089c89329544e085d71102c1813769450a9f66f160d1702cdb17bd2c6fdf0f722762d193ce83623eeffab17b01b10a31db6e2feb6eb3abdbb2e36320e1a56e44e48d26090afa7f65003a98cbfef590ac3ec89b3eb230557cf6aa566e841806aa2767b21bb26fe001f11ae039e0c9a4bf1bf3d271960f16158eb5bd9ebf0080abd8369d512cab2d1aaae2b14d0ff6ee705a38fb0c801a98b0624cc138fc24834fdf430f33e1760db913da3290f34415c9e3df3e97da1780545ab68ac5a24db89f24d62f4a399728e4144a8c89f47ac2d29e30c49b0bcf790a5e3d3fcd1943c6a28f37251d9dd827a69579e6c17b629c927473b5a07b0a29d9562708d6c8ce576109ad1a3473ffb2047eb069beeec24c114bef392c929038c92abd0e6a19b610e27881361824d57008b7373d0ab76379570ded76c9b8284fe2c247791073c29b2fc6fca05019220ab92856892d3c0dcc6da0b597fe559c162d060d71513ebca050d9638164b9ae271fba5575ade787ec5aee8fc253d1b234b1df561db3e36ac64b9b0100dd6b407043537b2b141f
129MD = 2cbc07b9b9c819b8fd38d8a614a8a9c3fa7e40ee