From 4b3adfce94285bb2a748c46b2e9bd74aaa0f64b4 Mon Sep 17 00:00:00 2001 From: Andrew Nelless Date: Sun, 26 Nov 2017 14:58:00 +0000 Subject: [PATCH] Remove legacy TLS support and fix tests --- ext/openssl/LICENSE | 125 - ext/openssl/windows/x64/bin/libeay32.dll | Bin 2099200 -> 0 bytes ext/openssl/windows/x64/bin/openssl.exe | Bin 507392 -> 0 bytes ext/openssl/windows/x64/bin/ssleay32.dll | Bin 356352 -> 0 bytes ext/openssl/windows/x64/include/openssl/aes.h | 149 - .../windows/x64/include/openssl/applink.c | 129 - .../windows/x64/include/openssl/asn1.h | 1419 ------ .../windows/x64/include/openssl/asn1_mac.h | 579 --- .../windows/x64/include/openssl/asn1t.h | 973 ---- ext/openssl/windows/x64/include/openssl/bio.h | 883 ---- .../windows/x64/include/openssl/blowfish.h | 130 - ext/openssl/windows/x64/include/openssl/bn.h | 951 ---- .../windows/x64/include/openssl/buffer.h | 125 - .../windows/x64/include/openssl/camellia.h | 132 - .../windows/x64/include/openssl/cast.h | 107 - .../windows/x64/include/openssl/cmac.h | 82 - ext/openssl/windows/x64/include/openssl/cms.h | 555 --- .../windows/x64/include/openssl/comp.h | 83 - .../windows/x64/include/openssl/conf.h | 268 -- .../windows/x64/include/openssl/conf_api.h | 89 - .../windows/x64/include/openssl/crypto.h | 661 --- ext/openssl/windows/x64/include/openssl/des.h | 257 - .../windows/x64/include/openssl/des_old.h | 497 -- ext/openssl/windows/x64/include/openssl/dh.h | 410 -- ext/openssl/windows/x64/include/openssl/dsa.h | 332 -- ext/openssl/windows/x64/include/openssl/dso.h | 451 -- .../windows/x64/include/openssl/dtls1.h | 272 -- .../windows/x64/include/openssl/e_os2.h | 328 -- .../windows/x64/include/openssl/ebcdic.h | 26 - ext/openssl/windows/x64/include/openssl/ec.h | 1282 ----- .../windows/x64/include/openssl/ecdh.h | 134 - .../windows/x64/include/openssl/ecdsa.h | 335 -- .../windows/x64/include/openssl/engine.h | 960 ---- ext/openssl/windows/x64/include/openssl/err.h | 390 -- ext/openssl/windows/x64/include/openssl/evp.h | 1536 ------ .../windows/x64/include/openssl/hmac.h | 109 - .../windows/x64/include/openssl/idea.h | 105 - .../windows/x64/include/openssl/krb5_asn.h | 240 - .../windows/x64/include/openssl/kssl.h | 197 - .../windows/x64/include/openssl/lhash.h | 240 - ext/openssl/windows/x64/include/openssl/md4.h | 119 - ext/openssl/windows/x64/include/openssl/md5.h | 119 - .../windows/x64/include/openssl/mdc2.h | 94 - .../windows/x64/include/openssl/modes.h | 163 - .../windows/x64/include/openssl/obj_mac.h | 4194 ----------------- .../windows/x64/include/openssl/objects.h | 1143 ----- .../windows/x64/include/openssl/ocsp.h | 637 --- .../windows/x64/include/openssl/opensslconf.h | 271 -- .../windows/x64/include/openssl/opensslv.h | 97 - .../windows/x64/include/openssl/ossl_typ.h | 213 - ext/openssl/windows/x64/include/openssl/pem.h | 617 --- .../windows/x64/include/openssl/pem2.h | 70 - .../windows/x64/include/openssl/pkcs12.h | 342 -- .../windows/x64/include/openssl/pkcs7.h | 481 -- .../windows/x64/include/openssl/pqueue.h | 99 - .../windows/x64/include/openssl/rand.h | 150 - ext/openssl/windows/x64/include/openssl/rc2.h | 103 - ext/openssl/windows/x64/include/openssl/rc4.h | 88 - .../windows/x64/include/openssl/ripemd.h | 105 - ext/openssl/windows/x64/include/openssl/rsa.h | 664 --- .../windows/x64/include/openssl/safestack.h | 2672 ----------- .../windows/x64/include/openssl/seed.h | 149 - ext/openssl/windows/x64/include/openssl/sha.h | 214 - ext/openssl/windows/x64/include/openssl/srp.h | 179 - .../windows/x64/include/openssl/srtp.h | 147 - ext/openssl/windows/x64/include/openssl/ssl.h | 3163 ------------- .../windows/x64/include/openssl/ssl2.h | 265 -- .../windows/x64/include/openssl/ssl23.h | 84 - .../windows/x64/include/openssl/ssl3.h | 774 --- .../windows/x64/include/openssl/stack.h | 107 - .../windows/x64/include/openssl/symhacks.h | 516 -- .../windows/x64/include/openssl/tls1.h | 810 ---- ext/openssl/windows/x64/include/openssl/ts.h | 865 ---- .../windows/x64/include/openssl/txt_db.h | 112 - ext/openssl/windows/x64/include/openssl/ui.h | 415 -- .../windows/x64/include/openssl/ui_compat.h | 88 - .../windows/x64/include/openssl/whrlpool.h | 41 - .../windows/x64/include/openssl/x509.h | 1330 ------ .../windows/x64/include/openssl/x509_vfy.h | 652 --- .../windows/x64/include/openssl/x509v3.h | 1055 ----- .../windows/x64/lib/engines/4758cca.dll | Bin 20992 -> 0 bytes ext/openssl/windows/x64/lib/engines/aep.dll | Bin 18944 -> 0 bytes .../windows/x64/lib/engines/atalla.dll | Bin 16384 -> 0 bytes ext/openssl/windows/x64/lib/engines/capi.dll | Bin 34304 -> 0 bytes ext/openssl/windows/x64/lib/engines/chil.dll | Bin 25088 -> 0 bytes .../windows/x64/lib/engines/cswift.dll | Bin 23552 -> 0 bytes ext/openssl/windows/x64/lib/engines/gmp.dll | Bin 9728 -> 0 bytes ext/openssl/windows/x64/lib/engines/gost.dll | Bin 83968 -> 0 bytes ext/openssl/windows/x64/lib/engines/nuron.dll | Bin 14336 -> 0 bytes .../windows/x64/lib/engines/padlock.dll | Bin 9728 -> 0 bytes .../windows/x64/lib/engines/sureware.dll | Bin 24576 -> 0 bytes ext/openssl/windows/x64/lib/engines/ubsec.dll | Bin 21504 -> 0 bytes ext/openssl/windows/x64/lib/libeay32.lib | Bin 802648 -> 0 bytes ext/openssl/windows/x64/lib/ssleay32.lib | Bin 75578 -> 0 bytes ext/openssl/windows/x64/ssl/openssl.cnf | 350 -- ext/openssl/windows/x86/bin/libeay32.dll | Bin 1272320 -> 0 bytes ext/openssl/windows/x86/bin/openssl.exe | Bin 448512 -> 0 bytes ext/openssl/windows/x86/bin/ssleay32.dll | Bin 278528 -> 0 bytes ext/openssl/windows/x86/include/openssl/aes.h | 149 - .../windows/x86/include/openssl/applink.c | 129 - .../windows/x86/include/openssl/asn1.h | 1419 ------ .../windows/x86/include/openssl/asn1_mac.h | 579 --- .../windows/x86/include/openssl/asn1t.h | 973 ---- ext/openssl/windows/x86/include/openssl/bio.h | 883 ---- .../windows/x86/include/openssl/blowfish.h | 130 - ext/openssl/windows/x86/include/openssl/bn.h | 951 ---- .../windows/x86/include/openssl/buffer.h | 125 - .../windows/x86/include/openssl/camellia.h | 132 - .../windows/x86/include/openssl/cast.h | 107 - .../windows/x86/include/openssl/cmac.h | 82 - ext/openssl/windows/x86/include/openssl/cms.h | 555 --- .../windows/x86/include/openssl/comp.h | 83 - .../windows/x86/include/openssl/conf.h | 268 -- .../windows/x86/include/openssl/conf_api.h | 89 - .../windows/x86/include/openssl/crypto.h | 661 --- ext/openssl/windows/x86/include/openssl/des.h | 257 - .../windows/x86/include/openssl/des_old.h | 497 -- ext/openssl/windows/x86/include/openssl/dh.h | 410 -- ext/openssl/windows/x86/include/openssl/dsa.h | 332 -- ext/openssl/windows/x86/include/openssl/dso.h | 451 -- .../windows/x86/include/openssl/dtls1.h | 272 -- .../windows/x86/include/openssl/e_os2.h | 328 -- .../windows/x86/include/openssl/ebcdic.h | 26 - ext/openssl/windows/x86/include/openssl/ec.h | 1282 ----- .../windows/x86/include/openssl/ecdh.h | 134 - .../windows/x86/include/openssl/ecdsa.h | 335 -- .../windows/x86/include/openssl/engine.h | 960 ---- ext/openssl/windows/x86/include/openssl/err.h | 390 -- ext/openssl/windows/x86/include/openssl/evp.h | 1536 ------ .../windows/x86/include/openssl/hmac.h | 109 - .../windows/x86/include/openssl/idea.h | 105 - .../windows/x86/include/openssl/krb5_asn.h | 240 - .../windows/x86/include/openssl/kssl.h | 197 - .../windows/x86/include/openssl/lhash.h | 240 - ext/openssl/windows/x86/include/openssl/md4.h | 119 - ext/openssl/windows/x86/include/openssl/md5.h | 119 - .../windows/x86/include/openssl/mdc2.h | 94 - .../windows/x86/include/openssl/modes.h | 163 - .../windows/x86/include/openssl/obj_mac.h | 4194 ----------------- .../windows/x86/include/openssl/objects.h | 1143 ----- .../windows/x86/include/openssl/ocsp.h | 637 --- .../windows/x86/include/openssl/opensslconf.h | 271 -- .../windows/x86/include/openssl/opensslv.h | 97 - .../windows/x86/include/openssl/ossl_typ.h | 213 - ext/openssl/windows/x86/include/openssl/pem.h | 617 --- .../windows/x86/include/openssl/pem2.h | 70 - .../windows/x86/include/openssl/pkcs12.h | 342 -- .../windows/x86/include/openssl/pkcs7.h | 481 -- .../windows/x86/include/openssl/pqueue.h | 99 - .../windows/x86/include/openssl/rand.h | 150 - ext/openssl/windows/x86/include/openssl/rc2.h | 103 - ext/openssl/windows/x86/include/openssl/rc4.h | 88 - .../windows/x86/include/openssl/ripemd.h | 105 - ext/openssl/windows/x86/include/openssl/rsa.h | 664 --- .../windows/x86/include/openssl/safestack.h | 2672 ----------- .../windows/x86/include/openssl/seed.h | 149 - ext/openssl/windows/x86/include/openssl/sha.h | 214 - ext/openssl/windows/x86/include/openssl/srp.h | 179 - .../windows/x86/include/openssl/srtp.h | 147 - ext/openssl/windows/x86/include/openssl/ssl.h | 3163 ------------- .../windows/x86/include/openssl/ssl2.h | 265 -- .../windows/x86/include/openssl/ssl23.h | 84 - .../windows/x86/include/openssl/ssl3.h | 774 --- .../windows/x86/include/openssl/stack.h | 107 - .../windows/x86/include/openssl/symhacks.h | 516 -- .../windows/x86/include/openssl/tls1.h | 810 ---- ext/openssl/windows/x86/include/openssl/ts.h | 865 ---- .../windows/x86/include/openssl/txt_db.h | 112 - ext/openssl/windows/x86/include/openssl/ui.h | 415 -- .../windows/x86/include/openssl/ui_compat.h | 88 - .../windows/x86/include/openssl/whrlpool.h | 41 - .../windows/x86/include/openssl/x509.h | 1330 ------ .../windows/x86/include/openssl/x509_vfy.h | 652 --- .../windows/x86/include/openssl/x509v3.h | 1055 ----- .../windows/x86/lib/engines/4758cca.dll | Bin 16384 -> 0 bytes ext/openssl/windows/x86/lib/engines/aep.dll | Bin 14336 -> 0 bytes .../windows/x86/lib/engines/atalla.dll | Bin 12800 -> 0 bytes ext/openssl/windows/x86/lib/engines/capi.dll | Bin 27136 -> 0 bytes ext/openssl/windows/x86/lib/engines/chil.dll | Bin 18432 -> 0 bytes .../windows/x86/lib/engines/cswift.dll | Bin 16896 -> 0 bytes ext/openssl/windows/x86/lib/engines/gmp.dll | Bin 8704 -> 0 bytes ext/openssl/windows/x86/lib/engines/gost.dll | Bin 61952 -> 0 bytes ext/openssl/windows/x86/lib/engines/nuron.dll | Bin 11776 -> 0 bytes .../windows/x86/lib/engines/padlock.dll | Bin 13312 -> 0 bytes .../windows/x86/lib/engines/sureware.dll | Bin 18432 -> 0 bytes ext/openssl/windows/x86/lib/engines/ubsec.dll | Bin 15872 -> 0 bytes ext/openssl/windows/x86/lib/libeay32.lib | Bin 821042 -> 0 bytes ext/openssl/windows/x86/lib/ssleay32.lib | Bin 77144 -> 0 bytes ext/openssl/windows/x86/ssl/openssl.cnf | 350 -- src/CMakeLists.txt | 1 + src/lib/base/EventTypes.cpp | 1 - src/lib/base/EventTypes.h | 9 - src/lib/client/Client.cpp | 20 +- src/lib/client/Client.h | 1 - src/lib/core/App.h | 3 +- src/lib/core/ArgParser.cpp | 3 +- src/lib/core/ArgsBase.cpp | 1 - src/lib/core/ArgsBase.h | 1 - src/lib/core/ServerApp.cpp | 3 +- src/lib/net/ISocketFactory.h | 4 +- src/lib/net/SecureListenSocket.cpp | 95 - src/lib/net/SecureListenSocket.h | 41 - src/lib/net/SecureSocket.cpp | 856 ---- src/lib/net/SecureSocket.h | 95 - src/lib/net/TCPSocket.cpp | 2 - src/lib/net/TCPSocketFactory.cpp | 25 +- src/lib/net/TCPSocketFactory.h | 4 +- src/lib/server/ClientListener.cpp | 16 +- src/lib/server/ClientListener.h | 4 +- src/test/global/TestEventQueue.cpp | 2 + src/test/integtests/CMakeLists.txt | 2 +- src/test/integtests/net/NetworkTests.cpp | 12 +- src/test/mock/synergy/MockApp.h | 2 +- src/test/unittests/CMakeLists.txt | 2 +- .../unittests/synergy/ClipboardChunkTests.cpp | 46 - 215 files changed, 33 insertions(+), 79689 deletions(-) delete mode 100644 ext/openssl/LICENSE delete mode 100644 ext/openssl/windows/x64/bin/libeay32.dll delete mode 100644 ext/openssl/windows/x64/bin/openssl.exe delete mode 100644 ext/openssl/windows/x64/bin/ssleay32.dll delete mode 100644 ext/openssl/windows/x64/include/openssl/aes.h delete mode 100644 ext/openssl/windows/x64/include/openssl/applink.c delete mode 100644 ext/openssl/windows/x64/include/openssl/asn1.h delete mode 100644 ext/openssl/windows/x64/include/openssl/asn1_mac.h delete mode 100644 ext/openssl/windows/x64/include/openssl/asn1t.h delete mode 100644 ext/openssl/windows/x64/include/openssl/bio.h delete mode 100644 ext/openssl/windows/x64/include/openssl/blowfish.h delete mode 100644 ext/openssl/windows/x64/include/openssl/bn.h delete mode 100644 ext/openssl/windows/x64/include/openssl/buffer.h delete mode 100644 ext/openssl/windows/x64/include/openssl/camellia.h delete mode 100644 ext/openssl/windows/x64/include/openssl/cast.h delete mode 100644 ext/openssl/windows/x64/include/openssl/cmac.h delete mode 100644 ext/openssl/windows/x64/include/openssl/cms.h delete mode 100644 ext/openssl/windows/x64/include/openssl/comp.h delete mode 100644 ext/openssl/windows/x64/include/openssl/conf.h delete mode 100644 ext/openssl/windows/x64/include/openssl/conf_api.h delete mode 100644 ext/openssl/windows/x64/include/openssl/crypto.h delete mode 100644 ext/openssl/windows/x64/include/openssl/des.h delete mode 100644 ext/openssl/windows/x64/include/openssl/des_old.h delete mode 100644 ext/openssl/windows/x64/include/openssl/dh.h delete mode 100644 ext/openssl/windows/x64/include/openssl/dsa.h delete mode 100644 ext/openssl/windows/x64/include/openssl/dso.h delete mode 100644 ext/openssl/windows/x64/include/openssl/dtls1.h delete mode 100644 ext/openssl/windows/x64/include/openssl/e_os2.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ebcdic.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ec.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ecdh.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ecdsa.h delete mode 100644 ext/openssl/windows/x64/include/openssl/engine.h delete mode 100644 ext/openssl/windows/x64/include/openssl/err.h delete mode 100644 ext/openssl/windows/x64/include/openssl/evp.h delete mode 100644 ext/openssl/windows/x64/include/openssl/hmac.h delete mode 100644 ext/openssl/windows/x64/include/openssl/idea.h delete mode 100644 ext/openssl/windows/x64/include/openssl/krb5_asn.h delete mode 100644 ext/openssl/windows/x64/include/openssl/kssl.h delete mode 100644 ext/openssl/windows/x64/include/openssl/lhash.h delete mode 100644 ext/openssl/windows/x64/include/openssl/md4.h delete mode 100644 ext/openssl/windows/x64/include/openssl/md5.h delete mode 100644 ext/openssl/windows/x64/include/openssl/mdc2.h delete mode 100644 ext/openssl/windows/x64/include/openssl/modes.h delete mode 100644 ext/openssl/windows/x64/include/openssl/obj_mac.h delete mode 100644 ext/openssl/windows/x64/include/openssl/objects.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ocsp.h delete mode 100644 ext/openssl/windows/x64/include/openssl/opensslconf.h delete mode 100644 ext/openssl/windows/x64/include/openssl/opensslv.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ossl_typ.h delete mode 100644 ext/openssl/windows/x64/include/openssl/pem.h delete mode 100644 ext/openssl/windows/x64/include/openssl/pem2.h delete mode 100644 ext/openssl/windows/x64/include/openssl/pkcs12.h delete mode 100644 ext/openssl/windows/x64/include/openssl/pkcs7.h delete mode 100644 ext/openssl/windows/x64/include/openssl/pqueue.h delete mode 100644 ext/openssl/windows/x64/include/openssl/rand.h delete mode 100644 ext/openssl/windows/x64/include/openssl/rc2.h delete mode 100644 ext/openssl/windows/x64/include/openssl/rc4.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ripemd.h delete mode 100644 ext/openssl/windows/x64/include/openssl/rsa.h delete mode 100644 ext/openssl/windows/x64/include/openssl/safestack.h delete mode 100644 ext/openssl/windows/x64/include/openssl/seed.h delete mode 100644 ext/openssl/windows/x64/include/openssl/sha.h delete mode 100644 ext/openssl/windows/x64/include/openssl/srp.h delete mode 100644 ext/openssl/windows/x64/include/openssl/srtp.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ssl.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ssl2.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ssl23.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ssl3.h delete mode 100644 ext/openssl/windows/x64/include/openssl/stack.h delete mode 100644 ext/openssl/windows/x64/include/openssl/symhacks.h delete mode 100644 ext/openssl/windows/x64/include/openssl/tls1.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ts.h delete mode 100644 ext/openssl/windows/x64/include/openssl/txt_db.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ui.h delete mode 100644 ext/openssl/windows/x64/include/openssl/ui_compat.h delete mode 100644 ext/openssl/windows/x64/include/openssl/whrlpool.h delete mode 100644 ext/openssl/windows/x64/include/openssl/x509.h delete mode 100644 ext/openssl/windows/x64/include/openssl/x509_vfy.h delete mode 100644 ext/openssl/windows/x64/include/openssl/x509v3.h delete mode 100644 ext/openssl/windows/x64/lib/engines/4758cca.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/aep.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/atalla.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/capi.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/chil.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/cswift.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/gmp.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/gost.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/nuron.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/padlock.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/sureware.dll delete mode 100644 ext/openssl/windows/x64/lib/engines/ubsec.dll delete mode 100644 ext/openssl/windows/x64/lib/libeay32.lib delete mode 100644 ext/openssl/windows/x64/lib/ssleay32.lib delete mode 100644 ext/openssl/windows/x64/ssl/openssl.cnf delete mode 100644 ext/openssl/windows/x86/bin/libeay32.dll delete mode 100644 ext/openssl/windows/x86/bin/openssl.exe delete mode 100644 ext/openssl/windows/x86/bin/ssleay32.dll delete mode 100644 ext/openssl/windows/x86/include/openssl/aes.h delete mode 100644 ext/openssl/windows/x86/include/openssl/applink.c delete mode 100644 ext/openssl/windows/x86/include/openssl/asn1.h delete mode 100644 ext/openssl/windows/x86/include/openssl/asn1_mac.h delete mode 100644 ext/openssl/windows/x86/include/openssl/asn1t.h delete mode 100644 ext/openssl/windows/x86/include/openssl/bio.h delete mode 100644 ext/openssl/windows/x86/include/openssl/blowfish.h delete mode 100644 ext/openssl/windows/x86/include/openssl/bn.h delete mode 100644 ext/openssl/windows/x86/include/openssl/buffer.h delete mode 100644 ext/openssl/windows/x86/include/openssl/camellia.h delete mode 100644 ext/openssl/windows/x86/include/openssl/cast.h delete mode 100644 ext/openssl/windows/x86/include/openssl/cmac.h delete mode 100644 ext/openssl/windows/x86/include/openssl/cms.h delete mode 100644 ext/openssl/windows/x86/include/openssl/comp.h delete mode 100644 ext/openssl/windows/x86/include/openssl/conf.h delete mode 100644 ext/openssl/windows/x86/include/openssl/conf_api.h delete mode 100644 ext/openssl/windows/x86/include/openssl/crypto.h delete mode 100644 ext/openssl/windows/x86/include/openssl/des.h delete mode 100644 ext/openssl/windows/x86/include/openssl/des_old.h delete mode 100644 ext/openssl/windows/x86/include/openssl/dh.h delete mode 100644 ext/openssl/windows/x86/include/openssl/dsa.h delete mode 100644 ext/openssl/windows/x86/include/openssl/dso.h delete mode 100644 ext/openssl/windows/x86/include/openssl/dtls1.h delete mode 100644 ext/openssl/windows/x86/include/openssl/e_os2.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ebcdic.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ec.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ecdh.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ecdsa.h delete mode 100644 ext/openssl/windows/x86/include/openssl/engine.h delete mode 100644 ext/openssl/windows/x86/include/openssl/err.h delete mode 100644 ext/openssl/windows/x86/include/openssl/evp.h delete mode 100644 ext/openssl/windows/x86/include/openssl/hmac.h delete mode 100644 ext/openssl/windows/x86/include/openssl/idea.h delete mode 100644 ext/openssl/windows/x86/include/openssl/krb5_asn.h delete mode 100644 ext/openssl/windows/x86/include/openssl/kssl.h delete mode 100644 ext/openssl/windows/x86/include/openssl/lhash.h delete mode 100644 ext/openssl/windows/x86/include/openssl/md4.h delete mode 100644 ext/openssl/windows/x86/include/openssl/md5.h delete mode 100644 ext/openssl/windows/x86/include/openssl/mdc2.h delete mode 100644 ext/openssl/windows/x86/include/openssl/modes.h delete mode 100644 ext/openssl/windows/x86/include/openssl/obj_mac.h delete mode 100644 ext/openssl/windows/x86/include/openssl/objects.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ocsp.h delete mode 100644 ext/openssl/windows/x86/include/openssl/opensslconf.h delete mode 100644 ext/openssl/windows/x86/include/openssl/opensslv.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ossl_typ.h delete mode 100644 ext/openssl/windows/x86/include/openssl/pem.h delete mode 100644 ext/openssl/windows/x86/include/openssl/pem2.h delete mode 100644 ext/openssl/windows/x86/include/openssl/pkcs12.h delete mode 100644 ext/openssl/windows/x86/include/openssl/pkcs7.h delete mode 100644 ext/openssl/windows/x86/include/openssl/pqueue.h delete mode 100644 ext/openssl/windows/x86/include/openssl/rand.h delete mode 100644 ext/openssl/windows/x86/include/openssl/rc2.h delete mode 100644 ext/openssl/windows/x86/include/openssl/rc4.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ripemd.h delete mode 100644 ext/openssl/windows/x86/include/openssl/rsa.h delete mode 100644 ext/openssl/windows/x86/include/openssl/safestack.h delete mode 100644 ext/openssl/windows/x86/include/openssl/seed.h delete mode 100644 ext/openssl/windows/x86/include/openssl/sha.h delete mode 100644 ext/openssl/windows/x86/include/openssl/srp.h delete mode 100644 ext/openssl/windows/x86/include/openssl/srtp.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ssl.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ssl2.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ssl23.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ssl3.h delete mode 100644 ext/openssl/windows/x86/include/openssl/stack.h delete mode 100644 ext/openssl/windows/x86/include/openssl/symhacks.h delete mode 100644 ext/openssl/windows/x86/include/openssl/tls1.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ts.h delete mode 100644 ext/openssl/windows/x86/include/openssl/txt_db.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ui.h delete mode 100644 ext/openssl/windows/x86/include/openssl/ui_compat.h delete mode 100644 ext/openssl/windows/x86/include/openssl/whrlpool.h delete mode 100644 ext/openssl/windows/x86/include/openssl/x509.h delete mode 100644 ext/openssl/windows/x86/include/openssl/x509_vfy.h delete mode 100644 ext/openssl/windows/x86/include/openssl/x509v3.h delete mode 100644 ext/openssl/windows/x86/lib/engines/4758cca.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/aep.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/atalla.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/capi.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/chil.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/cswift.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/gmp.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/gost.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/nuron.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/padlock.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/sureware.dll delete mode 100644 ext/openssl/windows/x86/lib/engines/ubsec.dll delete mode 100644 ext/openssl/windows/x86/lib/libeay32.lib delete mode 100644 ext/openssl/windows/x86/lib/ssleay32.lib delete mode 100644 ext/openssl/windows/x86/ssl/openssl.cnf delete mode 100644 src/lib/net/SecureListenSocket.cpp delete mode 100644 src/lib/net/SecureListenSocket.h delete mode 100644 src/lib/net/SecureSocket.cpp delete mode 100644 src/lib/net/SecureSocket.h diff --git a/ext/openssl/LICENSE b/ext/openssl/LICENSE deleted file mode 100644 index c6cc098f..00000000 --- a/ext/openssl/LICENSE +++ /dev/null @@ -1,125 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - diff --git a/ext/openssl/windows/x64/bin/libeay32.dll b/ext/openssl/windows/x64/bin/libeay32.dll deleted file mode 100644 index 92c3edacc322e391aa39f794c9b7523433b90ba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2099200 zcmeFa3w%`Noi{#k0;Ce1Sko4j>S(4mSZbq#-Kcb%!I?T~XB4VfY>P$^3cElemlj@& z2Eo?sF_|b)~*^e$-RI=1HYmRI2vPG`>i(J0@?sqLL zd2G%tmtTIF+vxg7`aO*YPEL5){CDgh{_t`b$ERM&+ptgm-n^ks{!ZNRru_ZvhNJlV zhyTu#zXwj{y?if@{jc1-VF&((Uis{XA2##vgbn-U{Qj5uH}uM9|o^{Fm=?tefI+ z6n|u#;{o$rlE0O>{^PjwS2+qs#hr*dxMk^_u($4X1|G6;iEsGy}bm^lG zM_qUfu3Y7CRN?Pww6*!dn(ESv(tOg?HegOwb$2+Ra%|f`;U! z13Y#3@HaA`9k2dB`Cnl5sk}gW(48MBf52T3Ecdw!gE$NXDlTvM^EHmZ<|@iu^X)HY zI08DG>1?L684l5G)F0SvbtLb6ai;Tn?4|7QhpInLSo4XWrtI%;tp2hG@6W6HqxEY3 zN$UQtvHBY~cz+#l2)z{cW`FAbwy~Me>l(bjpR4|;Y|Ur>B_+N8%jz$0@cyQ${%C2M zf0eqwo2~xx2k&o$>W}){JUw-PhyP^KTQGQkFSFt1s!aAbDs_KOK6rn(s{ZI_o1aPD-(_ZhYs=7b5PQ||2ch>$_IG>g{{FybvN_zjs>hJl%`}3;);Co^JQulX_)!z$)_t){7(3`{l{Hgof#%4nA z+QIw#x$5s@?C;D^Qqudstp3&y-rqFU-^bbCuTuASv(?`QwA^ul|MU^Tij0x%KIh9L zmYwnHm4O$!s^{WA=k;rFx5MGQH4tue1;$o&RXeXoY!E2_t~)bOzSNx^&?5o8C#Y9@ zD$DQ5bpFDpAM{kN>bqyoqGisXRQmKSt9s`znp4F6v0GO4ELu8ef!cSjDMQDr`n=1Q z&Xblkt9s`wS~_2@)~xE8?G5?V{<5z#94~YJ;tO!XWs8G8y=Ei#Fxc3w-c=1FU~9dr zda*5A{JD+%F)vK`|Zq4@IdH6d|tZF=e{(M{O67TB1 z4DTPXe}3^b8|m|2!#~`CF}&fES9sA5nrU>yo7(>DUESkYma}Rb+7*_)ThKpFA6ufyn0oUez0h4IG}Sj zbj${3P0f#|GO)VWx#SbrI+kWVJ0h_9kxy)s!c>l6WB@8xsnCon-#J{chw+H`@;NM&L_in(mHQ?D3@>GUATSMGA z5~%RGGY8!N8W`XRI5)R19@*F(Slx|%Us%8^c{8tf$6vpI6kqz~M0pPAoke=h^!vRJ zcpvnBEugnS{6_~WCVyP_JM@_udMHz$o)x(3taHsTK#5O>pl|o-9X`F+r+?h1ANF|; zO{rLuy?ou@9Ps5H@p%sW^anG%T6MT`j88wLRr@?grd0g+qYwV~=4M~+LA1v8Os}># zT$Sb1k7zYM&%r4b&s}+>)aCZ&qPHWsp5@iHhr?Gw!L)7YaZ1IDSDoJVr?4;g5L)AU zwpTk6uIA_(&dB)x>HO{)Yy6ynMr&mTDcjaNSZx7PTR29E!u z$6o+`gZ~8s$N&4gSNy9r{^Wt<-;nuAkvaay?ZacXDFu3?_v~H@!mLkS_r5Q;iEZ@< z$N9%LK?=ND#HTleD@SS7((1<_E&Q*-N?&e05$g|5lvYQ)TAfdC3RitZtC3dET{-RR z58vd=Z6t2}%-wIv~AMp#jAd^`S&fp+y;WzAIy+ga$SD3ieWZS2aa|=nLgiX1l_dE_=v^5?`4NMJ0@Q7ATJG1Kj$G=aJqM`9X zT3~0!(vH;7$lUno&lcih0j-P&y~D_4(}--Ng~=*7aSj(VXkt7NSy-4)(1OXBzLRgP z!^P~RWBz*gv9I9b_@rYNf8~$w<6>UYF-u?n^BcH0De0J-p8RPZZEP|!dq4g2lejS} z>5$Llw?UI09G7&+QJ;Jk+ZrE)Nyj|#&qv?EdaAuE)j9q+`x` z@Ff@kP?Eq|ob廟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ºQqNsI}Dq%wQ!8YOac5JsamozEPz|0 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


@?KW_fof0w_VzrEU>=^B0V zw=Vk5)o(fW@S`7o-A8_U&%d3x=)G6H?9&UgKbqeA)MIs@e&OR!zw3|BO@Ha(m5v+U z_b*rf^XXIP^kpYLc>a&?`RSI2|KxjLt)6rBJD&gIyXT(r;U_1%TMwQ%{4d+z^xWUu z_1GKE_}Eu}cuj7k`D*_!4*c%qPoKQwLvQ%PGY>v`xaIdZKj9tE`t;pR3;QbLKfm{$ zv&MgO_Pfu2!}nf$=)Zc7y!Pz#Z@qKlxyRr6le>TVh~FFh;EvzD?Xj=#`|{lWkAA=K zjJo5gpPl}VJ6m7+*T1>#;k)1U+fTmx(zotESY3SWHQ#^Z%!j^sZsl#Mz7Jpey4P&` z?=yaI!{hQFDZlUh-dFt2^S?Ft!`p9r_V%WGhTpxY_3EQ8=|6g?UhCf~^_{@q^dCKB zPV3e5eBrA*?)1O%vfVe=|7`KUpL0k{tt(L@YUb@!>@k(OK-|X-?@4WFjH#Ze;w2r%(U+ zvpX*Ojs2sy-dZ~2+`HfW@viIqy+7)I{H^bK+c%&5y!^G9FF)mHvw!rvh1>q7=kZT( z{l@eoJ~{B#BQNqkb?I}z^S#RlH@E%E6L-Jpx1REr_x|ZyUh$lt4mbSZ`ybtK??qJQkX_|cjF7(MH0iT~5QF<8%wRb*e?(TD5y*jBre$S^qe$VmtzkTW#{_WaL-#Gg*AGvVob-#DXKi&I+jpuy&jeq#uKl_XN+paqN z^?$kH9lw1^`S%`H_oVgue-P?_>JE7?8}TmEfAr9MIsYeO-iN>GKYHBv^(l>ajsE_B zz3yMWHa>p#bI<$aZ~vgL^^XQ`dDiJer(ZJm_2VyX*naDOZ2jKn_kQEbyMO0x@4xGD z|99z=PrUKcccy-P;2WR)=qvAj>xRwWzWqOb@R&EeWAWn2M}77AcRl*pKem4IC8M|8 z_0I05r+wgzzuo=W=k)&kqsb>c>Jx|WdiqPQzVpdHI{sImcEvGfA-Y2#@P?Q z>^G)&onLzX-T(PN<6~d?`pfQp_!G)sdCYgWFMaPdyFd4^FI>CtlV82*;)mUPq`32a zUw_)=m-`p|fA-!z%*yHU|6a|xnW?rK*(hx~=&0Sf2%AnLm94_i!A3G=s;!gJam$qG zU`wc!wp5~tty0OPjbb9&YEYCmDy6Bt6R->t6T0_e{C9@$O^2@}_@x`Fj;#Y%Tht`>DK__MH6ghHu?Z-7_nC^^2FZ z*?)ET)PRxEH>-JXYTfy}qcsP-ye?zmg{p0xwq8H+iV3^E@7W}<{$RxiO@dSQZanu< z#|0%R|8u|mZ@ga~-gj!zq0p|tBctC99lx_d`Qe3kPW;jDeffKe0T_BTcK^5=A`?pv_@$&+V$hC39l*mK245C3*9;OBcWCAlt!I^gcI(65Uy6pEAJ_hqWW&qW+;y@}=9JWxY1dqJ z)q$r=&cDCqpPyPixa_CT>ORx3c-OBj#&2xczVP=W_bh#2?X|-jt$g^oKPEOl)$9Dz z+h1!i-t1d8Z&Tay>$bLecU*kO`}^k}Zu|PCDUWtOa`fNYV-~zR{_cz3|DXH+f1a2B z+r2NvUbCNzA)bdq|I>4^j+Knrzt;Zu)%a(j|LNcV*YAB){lENs)zSalrT@>zcW%?A zt^R#y=ieusc4Cf?JLSgl8t3_){BPx9r@ZRFl~+aV^O|+GJ5uVb6`?bYA*-Yy;GcHT}_|J!=och*0*>Cnz9Z{uxi)%!m`*Nz(-91Q>UCt?3r z%k}3s|F8e^wrSh0eTR;nI(ND0=5GA*d9VCidf(coZ@=68xAz|~@Qyq0D!BWe`|f{$ zug4xL95M3YqEVyA1RvqoD<({QwD_?}*R=kxw*GJZaQ?QP|F6oMJ16>IZLjT$!>ty# zFy`|ip1s2>E?k(f$Zkk$Piv~R$Np!%=_~!$nzT#*=l}nI9|67u=?eul+{TZWIXQw) zIXQ{1=LaLI^d$y z#K{4?&dE`1F1G8)ekaQjC(B7E%f7mHeL3u8IpO3Qml>1S(3p5_x2e(Cm{lG4cXiz6 zb6mm>ah$vix9CN?IlWz|Xn%@jajN0b~9-ZcMTA3C84aV`h{4;%Mz^W|7J-u4V@K zs+l$9QMhTZYG#Y-;C3UbnQ~=(|n1Ychrkp$q=Rcfc_LGO;%Zg}=+zS5! zRpfuLcXW!$y25QP%%uG}^po5TcX=koG*!lXU!h@V&n+!aoEm% zkEED+e{fxtufyxIQq6wyyy~f@PpwpQoZL4r)ih|FYO0j+y`54`Rs-tbX#Z5>CV!5n z+?{Hgl4}e~H8!+i$)oW6uc_aG zYr*LUQ;mmQo_9(_Eu+RjQeDF4cs{>+s^gxh|EbrkTIe z(oB@>tCePA7p0kUvdK#`pVUn=`&E8Pnz_ZDW)kEYm!+B74bx21j$At~Y?Nj?ljq@? zEz(Rrc^$r?RhlUv_r=#;Lp^e&eVVzmW11-@*XW#P?&zLo){y7n-u=?d7V_xR(fj-0-McE}!l68wGK zmY?02W-2I`d%lxqj+5mhuBOPU!1Di7dEpmO;&DB!%Zd6#pM<@GR|EN_NIul&3GJ9qnLF^4<&@oNW*Aw%6pG0neD~*EGdYNV1ZzieCuB3Ycl=E6CpOA^@-2zOEVGb$fhFAY$VImzOv61!W*E- z<+kkmhV@Jxc{TXRQGDY8yS@+K2^xoh%A6d*2SMYIz_q@$*R~%QLEyC8@-yV)v?=e0 z^JMu)aM1_(1bE0vobjDAzxa0WQZCp1o;5_4+rVIQ1pfurIyp=~!RjY212^*(!P<*7f?CUxXHe`4Io0X!RYto$qC&+@G&xmU^Z3s6Rm zV0Wcm--D-v`WC_;IysJAr|dfN=F|2%kKrf(lV)}=WG}^^Bv~u$$>vwu1hwPAot^B% zFM;|N!R4@O~&X}9mg z_kcA=cn$2Q9eHdO&pWdGB>2c-ybb(hImEXFgURya5Ka*NGGu<2~%MXF!dV~1% zW$7mOW7@=%>)Gvu@Dflv5quofj=a8px^Z!={0THA$MFMK*!>CO)CP8T;YygRvBeo4 zyG<9K2%5(be!(e^$XD9+LwIqcbTgh~BRHe6UEhV9gZk#h#h|{)H#bQ)eW)+r1;fYz zJnHInvyvRdvp~msnx>nMV2u^-+sv-x#|N*m$067{-8>Dd6UN^_aF*Nh6mPoOLYwjn zu$vsg4cgES_mm%JwPl=nF1v6SXnL{Ra(4T4)0HgeK!EJROCU&&;FcZf2ic3qfOS9O zhdSBq2k{%A@+kh*DL0+d&6}`;W23lzmvno7!0Vxea(VG}>3rUETYi_kksQN6gRa+f zrH`QY1NaB9?h#z)de*=hw`D)Mieu#mAh#~#j4PoYIf)zJVAq#}&{B2qbKoOK@Nb}V znH$qhKT!7LMNW?3hQ4%DaDp+x?}Of{VtDXPc71sY45UqY1r(CyPn|4(1yd+b;M|+- z>viGDp!0_CP2E_B)bZoT;K*9m06qk&lfakvV2-Hc!Ml61_I}}Bz>RvPo28V?e?uu* zz5qMOCO_R=2kO5M_kgCQZp#Jav(%9{L)Im3%O8?GWce_7$w{1di`{<@E&%l{fS&~a zKDXtKWFPhA?J$rW!{37DI)U%$O`Ss=i=PLz6Tw?Sbz*qvt?XIsnE|{CikG=9Umy>o zO}R%O%E@xj$?^viLp!UN!XQX{z7hYe){c;&= zZ&bQD2U`DTbh?=adS?saqe0d-ZOY9aVLZul?pVg0EdLILWV!n|uAS`1*N(T>whtFg zWDW5BKoFlQW)1L6OyY+gV^62P{C$WqB+FAC=ea-*;Tkiz-^ud7PjVlU<)yP}=Thbr zuX;M&xXDrc_#DQWEFXnFWV!WR_9e313&xY>6Z6L|G%sMA~aLZ-% ziR{H=Ubg2eh~ERP=NNWJ>~-$JOII-_mop}K>g$X-$A<8jQacB6`8vCP9M6xk=Tk>M zxt?(*%iTAy#>jqr_#O5Fz7t5`e?V)=Y)UsNTeyEYmkTG}r%kf_Hx!WN2e&ikWO+`E zW6APzSV)$=A29D^Ik%jBo9x0(K>LXo_jIx!4~N~<3F28!4&&9JzD4oJPLAVapmvft zW0zgWg`0rd@#3B^>}{?W4|mFgcoyi`FkbECDE=69t~fsCiF?+CkOE?Cx`KBCr9zePLAVa zPEO*C-S(Kca5GSwUi>*!GFEXs=5zKUjX!Stg}n}a__;mlCXIU`f_v>{?<31q6|7OR z`HH@OZLdT5#c%8!!P^dysT0F5eP`cO5xfc1hZrvY-fmO&{=hSm`f`&Kb~|3&_oUs9 zA9p=vx8uWqg6LPFOsZ7+KJU*Z1SBKkW0$u`2E{T}w)a zsh^f%_1S}SGcv4wz=a>Lmti(iCyWQw&#<3g*zL)%#zc-^m0=F*y!iF2Gpx@DQT#|t zJBRSHYwY$Tc&^uOKY}-bH759LCns=v8@t?v`-9eY0IzUz6rXXjX`5j>f$I2hiIc;) ze}@dyxjygJ_})$#rhqKZfFg1jAGGw56~oYK|K zF5KVA0ldP=QGC|P=K2g%7u1dicXP5Ik8^See-E191P=9~efBHaGsw>J#Ninxs&c#% z)MgZ)25W!7Z6C7x=EILVIfUOS%rK2SZp*DkW*8q??ga&8KmHYt)4rTilwr=3<;x+D zIv(sEonZ=UCmT!ZN z)RDh~I9dJ!j+4!V4D%B#A}8^U6FKiyZp#-v%6Z9hODH6J@pP!5efbSYlI35DGfWzF z{3a%+f@y?8^2HpwyE{&D)ovGNIMNtPSW$S~c>Uc3~dWcd)p$a3xzTsv9r z2gk{B0IJCHJ{Z=>ZMoJg&P$d(5GKn{Lxe2nJ;~Z2%PF(@=fU zi~92Lr??if{N>Xb#!Hr4&EZLy*LfMHoGiZ#2g&j}s3b@6 z(V?_=@5p!aGMX8b{)BfR)U7|58&Z^AIL-0fM$ge+HIz?hI_FGR@l zSqYGH z08V?w-YZ=AE++@@wpW=K>c{YvD>KYsey$-mTgBc>mhXUtX=Wnq0F+cth7E&&E*vPz-<$;hO%hlfH9wf_6LFHb&?qlw8aui?t3G1z?+wxoF zret|9bS2A=ead;s^5;-Qmj8y?Wb+yG2&NhHh~wZU%g^p++{kkH3)V1M-UJ0?`F$uP z%Lk#DoWKQp*vDvJ-ULyy+<7l+n=I!;f-Db*Bsqxh-bdePN3K!9Iw8xMU(pU(t_3^D z@<^y42XP#-n$v&0;A_?vS$+-LlcV_7Z|r--k7t7Q?y*0^G=a!KJ{RCZI6|B9M5rRW z4sb3=o@1ZHGa*Eq@{(_vQ?mRcM9K2tgBd194&Zi&c((CfjSt@o=4YPW_yy=r9eE`b zkfXTT_xAnkKg@Fj^c;-gzrgDA53~(M)DQm1eG1mS{}b~7`ff9UKRQCYWZ%&Yz6WLx zd7qz?;jO zIgB@g#!5a23CiV0CmAoYd^_Z}U4}tx+u!iw!7)-f*UG+>8B>V7q{11f4@`&tAvy?1<09(j%tDH=; zn=D@k2gyD>0nXE={5#}QF89dIG>ypeH_(+V-&iBl_{o;Z0kR*j1FiokzN%)XNuy0U z0(oTlE%1`%jo>54aMxPSeBnaSy%5BUoE*X1!TQ{Re|E}~xTec4cj4jCvNh`sKXMUm zlI16%kSwo-fn<4)Qy#}R)Mos-7P+bpV?vf2=Vh9D)c4{k5c-SnLh(mXOu76egvs)< zi!;p{vV0t3n?8```=Bd1h$mf| zX$r_8`~d_{G1s^X8u30OKYUrH=}eXk|NPYQFC?U(e>oKonKRyDwUy`_XefwCsD+Fj$u7dGob48}P z0<6zs_%0}+TwV=}$nv`oBg>ycDOo=4lqYeME16&3dAxWIXb+F#^sDT(=fX3b9LAFy zGGArX!LK!PGQREVOzShaAE&gYoO8MGIk4U*y_x1FNNel1+@&L9MV4;?FWHap>cUzj z2k?W}+V?^be*wDQIR4{0=9)Tk`1(v!M3#3#2|14c1J-9rJm5y|N6O_fu#zk<_pv9C z=k%ickUx{2>0m8dC7hphjQjoZq+N(xG0yq zK_jx<2imJXUI4nT2tExF%H_`atV^fHdl`_X5z-0wEdOP240h2$Xqz|Ve5j^on)c8=l|cRLyX0_~|IkGhBZfh@lb z1>_hm9&FbS;cxG^`w)77enQ?0e8$1=4$CxA>dWs#xsJvCi@3%PtO2}dG}p!YjLT!} z_36Slg6=OLe$mMh{5R-6;s=nXU@YhAL_7HEarS(9@kgLFAIAg6+w}u@6OByaaAFEz|6vT%HMWvb+h7kmbzjtOv3SzYVU=Zp%l=Ey?nKX3{2E z{u2h0W%sO1GmPxP&7QQ+>%}Xb9L3#cv;R=Xk7q$v7q{gt2wyk>x+3 zfGoS7W(>*lE|@}=>&)SPCVOxkbbrZX=Q{TqzIUEIcL7{$K7GEH&jolYOd-q5Axw_o z6EK@T%e9|jj>z&PC?(4uKgT{vmOq32WO*MPC(Eaxik!q#7TR+f!uLM!^apE{~^F@{~T11;xAtksQD!kb52P-uNYO zljW=xtY@-(33MmRZD1fdj9b6Te39k*VG3EE1Yxq=a24kz%h!X-efSt`B+HkrW<1Gq zJ2*m??}M{s`P>@%)RlFJ^Io^>c<={Mk8(K)?a6ZP8{ErexijRG<#DClk7RiX1j+J7 zQ2iKwXdV3|%S)hCb?_EAPnOR>j4bCynLDza`8MxbWcf-^eJ}nRa(OPuHPL*C(?fgHe#LEraA@Cne*R+6~RCdQvS9^B2zemud+A-u}TQT&yY z6F7adeXI+2aIz0S=;R>Y1o4;Hm+;`NJcl@!JOa*>gLn;;kmaH8@eCr%BOywbC&6xV z2+t|AuPclzA@(Yt7x3(DjMWYNtPsxy4>^n{zR&!US^j7T`yg3P!Va=*c5+>0`4Ci+<>PRkEY~S#zq^s&XTa^CC0XtUKC&M_4}P*7 zfnj9XwVUTCS?&&DvU~@uBnRX#xdw6!XYaM2Qy%;t=rdpp52|3kN~w>ZR%SfII06+M zD_`+Vrb&?HYaz?WcTITcw~PfjfS>q|>+i?0cq^!#82%0Pu4N8#T~J7U`RPO4BV_sZ z@7a6F@_kT7mZ!jOatJTdKhtIeCl0d@^SMthN-$Q`k+;J@avc8xs-MLE9~cXs`|=!6 zf5P}29HhSd-B0WfWcg3Xx`{p?$uxI@^)niL@lmdqa`^>lNtSp0OdrVdaTrLJ|Ak>> zb3D_`gYo1r{@?`bk{rj~eqqh5V@$C7B%etsm)k;=?87s_nit%)lC`aJ{0ijW?6$m< zT#qbYev18;EVqH~WVr(jB>Qj?XdL7Zp@KH$zu-7oZh6|y@^B~1lbkHCfb-Ok;!{vW z`|`;DFu!DZT9WxA%L^e&j$rev-G8|e#3+}af(o*{9FCLaSD}g=#W`o}{>ux&)y-}B zb8;iHe8kD}MZekQau?`K9UtBb8iyFZcYv4|@%`uw ze=(0_c^@n#CvcN<_Fn46wJvbqsXiV8ak4x+HOm|%%Wp$kclv;T1M7ZC%QEdi*@wqD zIfOSjIgYEGY|^t#e~8kKJPKlDc{5ayRgZDk`%g8d7l*{>`a`|q^Bg>CuWtm3g z5Pl8RpD364$uMX%n|{vKRMtvLBCfauCmRau~03 zaum<0&0OwcKf!r*$R#|l@oTWVCqH+?`vqBUk;k}`z4$#){TS|jahCOclpk*a?UOOw zu&!P1#l1me;>Wcv;e0b$&v*&wyQ~P_3aS&s-#a;h&pFw+vrK(Z9S^?2$v*rTbfs@{ z`lVT>4_OYtFtQxJ%${HQSp6*P{XdBZU%_0f4!*bn^T?da^`ML_=U&OYlI2UGk}NlY z^JFjXc@_0&N1oU)%ecw%0%%E&;Hi!5aSP!_jqU8k@g}Tc>d4Kmw#U$muWXuS{obY* zF9fZz2)?zMGv;_{i!AH&UBwd3hd4&e)+@p1KFzCiW8_!cMo@dzge@l#F?<9!h3 zTyjA#+9AuMVGB8kUj(i52tEYml*`ZOb3c;h6>ydu#qL|!d-Hkj<7dE4mRCVbauna) zn|p*T{|E(SIoOwRAj=^^mbcwbKgsezSVKML~EZ2r|vfN+*^~iGTyXX(^S8{i7 zljRZ6k}NL)A6f1?gfS%h@JP_L2k~+UQ7#{VFj+1c%D9o`Rj`F@nOshe;RW~Fa}>cd z0$KLECEg0wK7+q?ast=6&z?sQ?hLBq!;jw2nA4`5@c{QM*@LeIs}7EU)`NTj^uA|? zWtrKui?#59HSg}7|!#U_T}dwtGCrRg1 zGfp-mn6HPKclsa3-$Hk?+`EW%NR}r;kSy09%`s&84p>SK;5VU^EY}*7WpLcvcWchJ0)RA9-JhJ>T=-32KA8TKi2Oog;D#urjqd%?q4h=7cK9tK} z!7#F1d%T_HSDh@!oh;Xz$UU-%^@E>*DI6A+= zvdm?mV?B5b9HF0b%jw)}WO*}WvHsfbP2}t^oBXfk(||oNKZ^@z0=VToSwH*zL%(LC?W3zGkjn z$BW+pYdmqEdF)+`tsgG{wI9K)=R12ojyhRx{EYovlfQ&T^j~&`si$kf?}7G&I6m^M zGoA}LCs=z04mnvq3>xzUZobgzCteAvAI0UMzQyrx&)e5%Uf|vY^*@6Dfh{Nb*(ILz zBKIA~%G)7GmMdX4*(}O3w}aXb;18Xgz<+?wWfn6&OYHvm@f)Ci%0EK|$I2~U$}-2v zayKXYalul%p8;IB%+5hP^<}%yA$&5zxk{Nk{KzZ3YtfGU9_00PTP|P0yFOWtgO4nq z20vLI`YP{&_)95GM!l4$z+ojpN8_p1+jKzk=br z3;EqO^o<{S z-+=MdkK)}6%_jB-Q1;*fV67!w?39P_&dv6-RUWp5dzSV?cnRp( z2+n=izQxXiA8w@1JaLP9Oye|AQl+Wf^ywxd>;cD;O&j{HM!#Gxc7p9Qq?Co}zhd5cD zb&!ZPV02-?xe%i@l{HBwm z_=cVK*!pk~R6mT5Ips-Q=VN=EJ-C~b{dk;{L--5Ov2on&6T3|>z7wo@$NA;3KHzUa zd)Cq+)+%0}u=^0f2cRYG$YnoJhb-@ff#d|9@}sj4<0?>_<|q0N${}3kWOIaj z2$CEtA3Dmo_2)ASb{*rnPnPe2_GCHdXXckI4}`&FIpa8Mku2AQ60+PJ7Lw&_U?o{@ z3p>biM@W$6?odVc;|CyZyxa0Pa^4;M%mpuprerw^UCHv>(1#qu`#{IaKf&&Se162W zPH--=?18gn`ASIRST8OH{T`tF9IPSBi=m7h#~HtHJnKiE2!)i(b72ZuUax;9$8gq3 z`<`;)R!}&A=M>%vL9%=XO30>?K0ur-w?0ju$?`35p6tibBx6gK_k#JE-}%H@ztU&Q z<+@Nt_TcM5=at`r?qvBxC?F^BWoPVl;=zTWeIST8J2{TszuDzJ{3vK$Merfeev-fg z&f4!(@>0m6efd97k1VJC&VEjoYdhJ417PiecnhcxF`V&-ojv$>(EFk5Pxf=r{Sw1n ztDL^!*`UupVSK?UH-GV&0@P+0|LbIPF3Vg68bf&m_?SESQ5Z-L;q{<4W4P_#&bjaw zC&zGy^G-S5>f{*i@Q+iDH#s?mJO1mG<0$BJsNDF1^InQagPT6c&p}JF{ECyK_$vPE zhPo~9+hWIggyc=RoVnWK}oApb_QrndqtIaFFcBPl2u_ zjLVfNmvcI@4$1OG5G8x?DzL^G{{q%H<2s$0U-~IO1TN~!lc5n=ZhHgsOO|JX%H^xO z+2vmR8st+h&+o;&ljZ+FkSx3MnRl|>AJm5co&oJ2;P0iue?!_m{Ml7p;}-THvRnsR zk^}ft(4QIf_O5Pjgszm!8U5JT$g&%PWVtykB+K1lBUzpRak4xYj+5mGoF~iaw^g@( z$5Jlxv;LWD`Bm_cquAWezaz`fLWnG{f`zJsTlJ?;hv+kY60~OIlaNoA(+4naWET#A zekVt+Kae#{x!eY}kYl*Z9rl{{VfUS^1Ij&kBUnEJ!tuLUGnC6|1@zO!vl!n4fx*1* z;V6tJ%Rj>eZQy@F?<(dA)+bo+ zEqECu%lN%|{1JFKR=#*9^Go*Nq0omczX1WV{65Sk%SUE$zmw%kP z^A4xXW=*!%pOIuez#{6)#ZXEP;VsGu<^rE{vU!TeCbl|0kYf`3dlaZZW-?-n|LnZqc7X{R1)8{oN=R$JP(S= z@&=eomWx*K93=!_7hEUfkEoemvUAK|J5dVf-s--pxARCqc)0@Yip$w)ws^fj7L(y-J^B zxOBb!9Esw$H?fvfj{gGvyk351GyBOf{(K+)5E_x=xZ%6Z9re9<8-y$P*)dMv%DShH z{2TNk%h~TS=4AOY2$DUxL7DT8ftzi!`{Tu7(7iA31O0tU@}&2Qe&XVQjkRZ$DPI(*;``CUC2JsK& zcAt~@`dzHgO1>w-_d?o(JiGA%aFgXyCr9zLPq|+x58+2Yv)c^e$G&7;svLXv+I^On zfc5MU#sBo?kuZ9BJk#oOd%*pcaFqLKe%S|9g_Tu{A zur`MCu85z5_GG!k0q!ZX+ye%a<$Iur9Ka7Aq@S;Hui;N2L7VbJ3B6{^2qWTXhb$g7|Wj-3+j9EESN%;Uq8VfLYCi$HRKo` z{)@ez2eId*o#kClj^l}yc6kUV&+_iUx#ZX%^o=ZE`KP_!y!ZqZQ!f8l#d*o{Kj#={ zvg>c&NkI2z^gN&ME-;>yC-8mzmoGanW32ESV12g2>DBCV7oGzu5997B*=8fh`te1n z+19(62j7*GZTyr6a8Yiy_3j$POTgM^@Ry)_B!TPHpuV1KcmnACB!u@nIe{nFwA&Bi zm0xTNPmbd*b+WBz zw-3(%oi~iL^0G|{b>vYOXPXFFo(o&ZVZ5}ieeDta0qEE`9(IX6h7tTJSmn5y+rAbT z?gko@0A2+elPJ!*)Xpy44D{WX+ylxvuRH?|lI3G?mYl?MF0;olj5mVL8^bx5JLko% zK;>TC*U5f7%E>`I&&grjyW${L2;DrV&{l(ttHX4&YZIpDdq%0%)!p{-#yD*IU@-ZkTC-L*w*mdNltyxc$%XdJ89KdCuwc+t*n_EF`$}d0_b>z*E z`!K%?fp>t19LE>8vHND)W}60}=d64;Y~)yZEtHexI3&nP+_s&4tPf8ER}r6&@ENE_ zmal5h_>cp51?V%KT&)B1O&{bNz);7B?+0tF@B$}Cu<1m3DeDk_1KM*E_)pOHNb)4et0X+XY``!=Zx4~)? zKhV{=ukl6Kvj#Y?2M+}8MFAXhviui}U(EXqzW)ZsnfB$?P)?S=hJ)k;zVb%9pK=(y zl*_xIJ6Zl03dqJsJ79elz{f!SOycu5v1U}~X2!e+Ym9#S@C;C$FmBY7b5Sl2fH+xx z1dfyC$KgCVjK7E6QT+TGr}ko9k>$%FpDbSk?a6WQ*~@@hH$5mfwR#^iw_trQ}4PY;$j4dwc@;4=0;`+2&?Y zfBZP0%z5RfU^ZF)2Ue2hyxZ8@$#Od=C;RX=KYLvr&V^guZuiafCxhDe;uk=36vcH0 z*mXR35NK`7XJ9{V$`_!LEN2enei+SOhv$RFA&jfv;XDiQBX_gbsT0Au_tWkAbc?iTjMsHbLt6@dVJ%yyRD5 zHs$hKSW1rKj4>QbcHxeoKKSry&^UO4-0!f3I`W1`m{YR+5gZ}Q-+&pzci{LKAzc>o$TbpX3_e=DP6q zr`d}dvo>(uxpv0m z&%sNefO5I_v+M(8c^H(CgZLTH7>05A0_s1)&j@h4=U5wLx&K1yljT*gkSu@bl*e(~ z=NS{)lwV!Uy+a+j0$P&g0ZVxHlLPpZm+WUj9ACPWHO8@W8(2e@pNBHC{58bMa+{ZV zhLU}_0IYifhn*}R1C2uxKfm105quJ~KO}L#h@Jho$t#?fzIpMsS9zATW4>_T)pqvd z1z@c=ym5^^*D-wa>-M_x^J|!&!THqmyH}?OLvjbIBptO_uK{<+{jn?RAVN z*@ORtw6UzWH?z$iaFgTs4^V&1TdZ@?+795APLARFQM=rOm&2AXxLf-BEeWdyF&vkxL*>mN!F!EPv;e zC-96i*6kVY1w3+_-Txr=y>G8odGdDVg=0hbL(p}_@#8yrPK@JN{10d@%*Wa0K~Rq3 z+)wQKE<6#mXNGZ~UA*sctRKGyR(;&`Q~SES_$=(8j`@u7h7z(|XE)o^ z8MNoe@VB6TCh$2Yn=e?0pm%8>zG#o#A1~euIyQl;K*##x+-u;aeR%|QCCl@{PnMU$ zFtWT6#*<_C0H~edmpm81`rQe9090=FW}EB4>JP55&+dZ@uL8}BoKnHQI)U$*aSg~L zyYTOzze~Y<#rr1=9MAhFZVdslJQ&84PxXIT*f-LWbv*ZL` zaKO3VZ`q$fYbl72Iys38zO%~%_~wK58usHYp!zXf=X-mcJ$Nc;?S=5mpm~YlLl9=1 z3{tFUh^Amdx=vWWF(aAm>I%3~bVZ0w2QC~g_KC)bNjCmr<-V^LO zWVsK7$bKC8g*CuuNjc>t<4?KV2(l*X@ABf^73z`Yo!}+Q3Gk8SPL-@%vOEh4$#RoZ z^q(wufrVuGE?7wp;B`<*j^e*n&i!IeXPY}g*B-!+Ia%HU8>ugEgL1O`1?(rs@#X(< z<^m6PasYqpP zXR_Q0W|MvRbx{2%9{R7{w*cM_Dv#k?F4*OMe9*}WJi_EyV-m!Ts@d6#r-Qx|3*lNR zIo5h};T2Af;wh*<@hQ=c6b-0=gHHxL#(CImnpE?cgj~ZjhB@ayeFB1Wn0u+v+*SN0!^c zK(Y_t2O75^{s{CQ634$eNca{uDIkaoqTl9J7OCy?C*c zBe1|wonRo@hlhZ! zUH%X@QZ9c9XDP!f0cbL@_J|=r6AW5xsY-=PVkWBz0jE~pM-p}{6l-@h%6rml_zn}4)!(5 z{a`=k^4CyFma8C*F_CL@WbJC)a39e8`te-Qf6qdWLX3XO13J-fasW>Rt&I?V!O0Ok zqqAKe#=X1P_fZ7zb#emNy4J4a!uhcO1^%uB{3MjqAGumr?l1KX_Xleo;s>wi9+}4d zj$7Wq^-#x)|AJh~&5evFSoQHlC&%zDz8tfKI&#OG*we`Jb&w$Y@GGEkh+*H&%%93} zK{wV6S)K|D$?_~%Ne*|X&pkNi5cfEK0KAmT!Jb?vS$+xzt3Dpui~D6d zWVyu2^4rjeIx(Eu&u-I&yMR6y1n_sD^Cs|Uzy0h8;!3bS@8e5vx9fXwS5V)4xCC@; z81Hw=6Zp3N_OU_yJg9yI=MKoRf43ZWzmxke#9GDELFWqL7r?5I`9YoaJ1}ya0?ti+ zxfl3#EG`56?n(@wP`SRNz<1rv`sdo^r=W@~M?g-?%fa?}z4&g>c>{PW^r4RYBMc_Xc|%x3Wcf7ACd;Wq*~7^$JTt()r@r9| zP@4(7_dfbYc>*`M-|nXeU+-iee#pr|`~~Rye0k&pj1kAm`yo!2bBEd4g?oUm-H(@o z<}`x$!4c}q7eB}tlI2#A`#AS39t3Gm@%=E~3-u_MYYu1MBfIeZpx-f*_dq`7a`lH; z1FD0sgCJRc7eZwDJS-)f!W?r0l#=CPBe*WIJQ4PjLwGGDIG23cNY()5^1WbYFn9Po z=sq}U4rbfWFLMQbYA&KsH9xJ z;t`%rPq3%qouF%Rjb+aPYoElPadwtpc5(#o1O0x8++uu=anp|64O)`@csg_?%h?kc z2eLdA3dsTdA?VND$aha<94MF9z(R5qABL4=dHkbXJ6YZfadHA*Rm}X7<$oYamTNx7 zHI{H)_(pJ(lH)jM8vP{8 z??M?_-UAh?gI}CZ9}aOJ;T|F8mvTQYQD*(fA3&0F`2eKNrLYRGwt#KPJNR5ZWccy!yTZ6Ecb>| zvOEYDk>!e~?D7O||Fr!MDIbF}>d2kuFkj>tzGSZ5zPuLN>)yl($S2Ed=G*;=;%A<* z$1RMfh3#<*;q9Q$Trr&TtestW27JCu?G_&Df2A&JXgu=na1zWPP}nL6@F*iDw3EaqCs@{4eu z9KokS<1dd|!oEtDSAd5c#WP=W#srUD%GmO}3*iS|X5Oh2#FfkKu}b3SBX*A93T4)t ze9$TjoWO)RH$U%H@slC^E z@Bq*_$j?KVI`TSLNsi+0K>MfMe;xY|siHaO2CyaBA| z5&jGO)R8aRNc&_Dz7=#`^2acqayjE2#(^BfrJ%hcioXMmt$gDqo=4P?AA>FA5N^EL z?t>RU0P2Ih3KG8NB2q&VJWf1Gu@9z1Z*M0G{OJ5RN!G zia&L794DP@w(<@D);^D~b+QlN&YN zL=NLm!TNp-*ND*v%3b(}57^(xNxb4CJ4bQK4tqVga9_~+^y3+z{)ch(olYHmJE%N> zi$7*P@LUUF_b1FpKh`0h4C+G&$DJ%UEO)L2hny^L1GO2$r<|O`5A3q{oFJ|Qt=l9X z@u{7I_=J;PpYi?%suRLTot(sX?Y7GUc&C%&_!Q{8NnG=DJG=1BPWIz@pfL&K*T1me zk)k+rkFy`*LMI3D%b?%UmCwNz#$3KE&NG56w}b@Qiw8lHEU$<2Wcf45dzyU@AA*+T z1is=+yPqEH+Q(kQ_pWj;u;vawXDOGrrsbNfd3@H!`=A~< zfvdn8&-7eVGb7h}4|n0_pmHyM7Bp57JTNoYwB%U13i8RaJ1f@|ljWrlAj>J$?Q$1> z7W8|75nPy^YrUHVaRhWOd1OwmImkO|1Yez-Yi84q{2;6$%Owye%OBRvHDzS^1gJcT zht|q939|eZoF~goYv&r*eC|!`g+^rgHfT?l$3b^;2>$^UKd|2FYCb*yH2Jd%!vuuG`A4@4?H#Iv4)v8v9&vd|PX~+>d_-%~2Akw{iM|p8*{k#RouR zmB4qjV;yk40sItbj>5PSx>GI>Z_iwl4AP-G47$3xjE2-anlABFle4 zm~0-(H7CJ(hrz=NnG4P(|NC&RDI&|47BMem555l;lI8bCac`34M@MttlEb(H{tue& zK2EB+|Ks?f9nlC%s$H@gff zm6kz~w2V}`+Z+_3<@b7@@8|c&`|*5V=laf>@4277Y3c9J7x6cu@At}cZ(+`ik(ZGo zJ%vk%&VhpTxsN=-F~xsx=NQxF{&z4RdJJzO?H}iJCO%DKbomkKL6^UizH~X}POekB zoJ@SWe4dP>%cW!nU9KQ?blKuA=1h-bJqf?Y$6fE{9>Q{YISJ_UHnIovl<$*{bor$% zFJj4X&gcK|w{&nM3D^(vLDG`-WbhTD>nk;)wf7#0PUPQm;)^5MUb=jP^rYu;<~{6p z-b=0~Tj=tjQJfEqiQxt^iskYzGJ!4+uj0I=%Th9%E)!${U2eRWd*DXy3Ap!tZf;Th zhxBFrUYhHLXwETQK$fw*fZK@f!*alAjs?r*Fp{SG_&&+dM)Y0@tgxQK z8AP99Vvq1y;!%z%Kl6&?ETZQ{4nNMgXG#H|dz}5kIvXFop0zQW62X8-fGLkj;P;lE#=!G0y`1@vEW zy@;D;y5kk#uvgvj^6`dQHa^$d8}SDFP3y;5vpJXOIlTE@o~?8r`^{m!^dvTt@ZXK% zs=4f2mdm;G*$;GCBwOfmd>!{Xx~#6}IY*bTksLjT-w^$KpCTUn0na9u%LN~D&za1B z_YilG9`w{lt-U9R&dDq;vtGc@7qBgiDdIB=-8qoOkBH8b0{&**Tg1GG{vJpMmy+;V zfC16Zl4OUE*(a=1o=%3*jiAG9$?oW++~bz~epkHa^+YaxwK5dB?2xrR(;jQo+zq6c`$7B`0krmV{<>uId9p2fU% z*=Rk$NRu5G>`AmA%$8r*m z!7A%%tg)WM2I~d9@h|sW@bMq(iND#do$h)`VOg{52^>eldl7zRy@<_3@9X`;Yl(Uc z%d97`!g?BCBif%iyvvJt%h|>>&L?_p9)BU)C-V7SB3{54xs$Z4;rpu?*)`&Iq|5I} zH+m79NjRSt5w9}|=Yt9B@-?DocMeZ!83{iFCon}cURGI8nU8dJ9D~(_rhkP@!lS67YSdBW!4i| zVLgRa*3(#HJ&V2fw0YvEM8AVwz{FmW@VF$gl4$)tR$I?tt@S)MS}$U=b#HIxM#8ya zne_x#SWn??*5!DTU=DI389>isJ<)m!*knDxNNcw|ilx@$SZ+OqRo2s3V?B%Y*7JCA z3G3l=dkQDCiFku~-wf{FmibKQa~=MV=v>XpvY{H}AvE6`=DgCgD*dK6DSIO5&GYZJIO7V)Oh18jYW?N7Y1EBk`wKE{r4`$zUt zFXOd%dbddU-|$Uf;>bw&wX?j7pULRgKgv<62p^8 zIDfpG=suRlr9{tbdHjhHZwTv==aEr#ImEhr%DSwxp2x{2xqCST-0MFPFT;9d zcQTDGPqQxjS(n4e9LD(A@f6!vI82@W@8d((GdP>*d&qfw`&9S7d0bBh&ER)h@Zw(F zgIK2=MOM?(IEQSZ%Qa*NUG8!k=R}sDL*Y>*Mwi1#54yaS^rg$^$w0cCMuyPkGBTWA z!1(DAZya5=ID>mBU0(NJ?xl1&lq{gjDP%c4i*t##J&&uc7qP{e?%IsvgGBp5ZX#=W ztvuu`wu>&$ur7V;a*B1ifV6&rIpf0KoQLYTcOTASx;%_{FY-56u@7lamlu(4bUA|b zq{}BrlAgu&qzCJf`=8DEN|)!6fpmEd8Ag{w`m*hGIhSPUa^G{fx6otwG?_z}k^Wr! zblH`xrN{AB5`GPcdzJG{VLnmJ5T7o~F69`}L=yJ?p?g?5auDXtAI=zUc*RxM}t=vu$bourT>=U|N zPJDV1@4AV5FFlQQM1OZeUOJ3zr^^bmmY%}JB>en_e-fQ1vRftR24iF?X+4eW3wOJj zIW)43IQReiEsP=IJp?PPr?AR;25YV7vC(>f5#PNwhGo{1SZUqIYU^37x1PsF>j6e? zb?b>@sr3X_SWjV<^$gZpFJO~(?>3&%MB5U>GV4jKwC-cI^(@v~4={4Oy%x)?C$ZAH zkJZ*QSZh6xjn<3UY(07h+d?#-IF?&aVU_hX)>zMBgY^P7S?3QNd7VkPU07y4iIvuU zthS!PTI)G%uwK9>>j6gYa_fv@sr5LPTTf!8bswv(XRy|K4jZf&u*rIWk-KgESZY0v z<<^r}Y2C+a>lv)Ip2G&~1#Ge&U}U(hA4{#rvD|tRE3NxjZ9Rjv)^pfky?{;D1B{HY z^<$~^IF?&aVx@H-tF33S)_M*btQWA!dVrCUwtg(N9>;R)NvyQ)W3}}R)>27k&l27^=0J20_aBOQqe(}` z%hK`O%johZlA!z8_%NTP=|${1f%_rb8^_y;u8|@}t8L%nut(T-z7G?7G~)gE81Kbr z-~hWn&b^oQ$cIRpE{}YI&+GI!&Yi^bh@QtSBu|$|J;~<)dMJG@y?{Rx-ID|CH<>x} zUP=7^8Rkqc;-5tG^q%GOA=$}moWxN?bCC1M9gLBKrgGfr zDO^YNwNHTmoyNBK9YgP?*D*%UAO(63UzpDP)$!VwdG3#8KVuUK3Op}nFc%Wu$FSUb z5-Y9ySZzInwbpakV7-7%)&q>a$~yTvMLtb*4rK8k>)tH3gX~~#@)FYW<&L2xwd^ap z-2FAi(PcX_kRHQ6L~~B!9oEyhnCNFi1?>2`>oM$4bnKEi%6bNulOe2A_RjJD(dA`i zB0Ys`h~^*Q&^O%q@8dLuG4j^30X{+zmp=}dyB8NiGJ5eP9_1%m~nOROJ!{~A@8AH$Gz7AGE9CgD$Tjed#_P_>DVPV|Wi4$Z|QSk^MrKzmrjP?>mk^ z(cdnXpZ-ASeGB;e8qNp0_hZC6f#?~Oz!BDSxXTuf1UK87^^smOSntT2J(6zD6dx#?$y%z`c$!SzJf- z%nI<*U);XUVDI0!KcB>Ua53q|c-d+j_e8oJLi*C>-DD75ZYIO%$?Xwu*Wcas6~!rJ zBFnS5M$5TJ1$e^_jwQ=|Tt)P=zarlF7yDVu@zlTBc6tKGkPUSC9`S1V+8hsWX1nOJ zlysxZKBOl-i9`Q!+vVdcM03dDIsdw^iBfooSK{?$d;&-BQWBn%8GM6id>*f9QR2;D zjE|2H?OXXS8OCz?JxSAx*kQL4FGG*vb0qv57h2Y;#9gPjndm$Zu+<)nd5vR-4-@@& zyR|68<}^4AzoxpJ0Ra z0ybIqA|+mDqA@Wnv!29C>po5<+9z2oiuId9p2d3W zdE9j$H$IA`))QD^J-}nyv)@*5U&5)R2k$HAlD_mjHWIyW5u2@h9ZI~TiI&H)kM$%@ zCj)t{Jb1qnZ!lf#Cp=f+2|xAi2B zwVuJbBz#8Wc3bY9TjHHaH0K1~X+4dv5RK2_I$Iv#;r(q}@H*>0zGOXz-w?gFh#ksp zTkvA*DV$_Iiz}=b@$mDwPC3Woc&GI=uCiXl!_T)dc&GI=F0@|2qmniT@3fxAh1Lt$ z;Q}`%hSyp5ajEqJcDT^S;C0r0eA{{+ce}`qiQ>i9Q}~kg9B#Mn4d5O^w2diz$$AdA zTjvKNUT>l?Nt|gthuf`tmoSEeV{nr7EUvR2V82Uk3{JA1#dX#LJaM2KlfbdoGq}Qf z5%<1~>x%iv|Bx(QUQT9fTkv6`G4frqm@Ze5)$}6neYvd%|3ikeTwYEl&{Oy#(S10F z>xjEUvI##KTi=J#nnEp2mW8+2LxN4_;^8$9n5|j9z2& z!Hcb@@RDo!T%mo4n~A=T2yoGLCEgxy@>vuoUti+w%=3K5twj4Uz|(GUJ%LYH&*E>^ z`9ntDY@%mV9&fwR?!$P)Pa?wh<<92f}qO_!(rk7qYsP9R0P{D*9#d-wCq8SOqF%F$yvro2}MpMQvF zG(C$aji)m{fv=NU+J_i>*me0e(Z8!I;`0;Sb3BXJSM%9`?>qT8?-Aa&6VLibOT6_& zU!Mk;&bT?quO4HcXnXPK$GI-_br239+RrJx-+BhyJ>j0?F{~&0J1u#9Y9hy1^T&fH z@mjjP@=4x{E}theGzRy3iudCCAu;@gXl~wQju+AAgbdCn%NQ?9pXQlPm&cQB^aMtp zaod}~n~CO}#t(_sQ@~%IWxr2g{Zsg?N5b<5%dID|(z=fmt!J^`dLA3C7xDcXxBfiV zyui82KF{LEMC&i0_oBPE$hdWxvMxs{nlnB&)on`_XHIkbB!>+|W4xF6{7=+lSY|ze z71mQ&Wj%v~r!%)-IUn#jqSxl|iMDxjDt@RxKNc6n$awXp5 zZ@TL=i*4R==WP_Dv+erDK1AzJ;gdw4Te3KhX#E9jvL4`GZ`*d^G1lW)Zas-NThHJO z>pAT84%Z#qF25itx_oj@iFXHGK1asU?`)O%znsx=yD|)MK9vBAGz^a9Jzqw(#ZLSv5&b= zF-Fc`;?BK1)-UDr{~YFw*L~vlt&jUGbN9&@CK}v&WP|krwko)9#kGbwuC)lx@FZ8yO?JlIUFShgeT^U(I9lD%QpNy>HpR z)qEDBXK}wqwu{%w8^2?_=yELa^}e{0OlG|7^F8~DE-xaB>7n$M^a37Tbo(%lgGie7 z$UT4H*wN*EWCmS6N$TjbhAgAYnPdw+hd2M|_LYzSUF)u+6n;x|9TjolI=iOu5fWaf z_&e#sKJnIbPbOL($9ITco5!uTJitqSa^q9D$a(>f-QdQ@vDSJHBOAF_vi>LzweI6{ zMDLZwPpud5PwU<$wuNX+5`QG&XD57NvpaSk>xPoZ@ zMLgzL+do)kJ&muCUW}KWf8%_k%R|UudK@!E*SNfSoBIslqqp7d6ZsR-eu)3hXFsC% z_3iOeN=&PV_u(CIRC? z!`q17H;pw!_xvm_w&ewEvL0aMFE>7lrPkwEZas;W)_ttDp21q{Ib2HgUIpB4%lQxV zcn1*8Cx)k3PvGU&Q#jIk8lSPA#d+5AxXOAFn@RXA+sXGRh}Iv+a_dQ~wC-cI^$gZp z&tZf00ybF>Fw$)M1W&V`z*R)&e-Z2cVGPGQk0btdJ&l`*&QH&4 z-KC8;iY|BCwT+jdN3n^7*BAD0(I#9^5<9nKJnt2gMC(uECnP+tuth63CW==OEl=TH zTCVc}pWMBTm*u^(*g(SLh0WHzJ=%DsM9brNEzxUzoMFpzxPj>NMu3O!>BhuyI??;) zaGfm=u-jfX2G6mc#0Q8zS7dN2nXP?-kL=yXTR@jjkd>M*u_U<3mK}c?LIH53uV&?)-`4 zi=>V*IV?H2P58A;6mKMYt&dBr7x3tqd#^Z-AmKHFA6PHok%zd~#_@WhbJfRhiN01U z;)RF0_f6q@B>ed!9(tI~A1^1`w<#QNJ%jVC=W&zu01xP5#{&CVPvS`HX`E?2hwF*v z7GT%IZJ*%fBz#{SZ#{$atmko)^#Bj(YVV8vtS51#^)$}3p2PJdd|&K(guO3bZ{5e~ z)^oUuXg)>UtDEal>_fDkBtBq0gNv*eu+@=nOceWAPvQgCGx!$K`t$gs^#J!d%C-y7 zw4TJnX(s~hFl-m07 z1nUXB*1C^RSkK}|)(hC`7~3b<$9fVUu%5w1)(iL>(R{pP+jxf&^*CNnv|T<%a_ThC$l6K$P1o`m;mtheQP+-A$Ylh|GoaBa#@$xgalP1@IUp5XMJ zZM>dKxvuf3lerf+GH1M-g!>kk5qGGh{xJT1tIFRVSS1uQv&c2|_l_WtgV#kCVBgdS< zoLMd>li~C%9`|3~m#^0n_&U*X$>Fa=`_ns3Qsa zKKtPw&JA2aH0L6=Pr5nB@LZzxC-FAxY5c%?0Xtp5F=C$bS~8d}?P?ojC~T znEmqs=ficZk948St8U;tq08Gze|j1Z8RE7vj)&gJ`N#4&emRu6P33&RV{UTCSJn`p zF|yS#?r-!czCp6|0ydFw|6ruj^(dBFk7K#@B;G=FkCJoA9M&Tn$uhcJM~d_SkH49F z<|F(*64sJ{<#Il0`60&$&$-2|Gl?hq?w*{$A4vGS92mRR%}qW{bd6{6_}lEBi8m2# zi;uhC&OTxNQGEOkKHJl?c=TPYiyp@dh{mVz=R*!sCu*X?K4}V01Ls z%u4nfK2G#|p;??cmg`!-FN#M$KyPFp;%1`H*a6OZ(DfXyBjL4xZ69Ji%s+-@MDLrx zXNc~lS^Sw4nVZaxXFD}#oKITv+B|;oFkc^PKj6U=IHq)&s^-1u@*Xmnp2qKp)?dW^ zAK@9akl$gz1X)g(Z69TO>GBY=lOD%6ALAari1)>^$KCmsz}tv^uR|^&F~-a9NDsRF zgPcY8o?u(Z#7=Aro;#7R-Ntcl;5U=FuJ!XHeBnuV&gZcEQye?CJ&v=i=kV;w?zkke znS`GQo@PE|0oyBICd=t^HQ7Lyhdsk~(dE@7%G?6H@>#oQVlC0%;gQ!)VgAfPzCZ@j zi`cb>dpKP_LB`PKZO?K4qRS^mPfJFdIBq~r*ObDHztJ-TF+pu^~6hzC*eH- z7ZaW5vFSVuh|Z-n))0-!V!ib|Hd-%Yvvu!fo?k@cV_0TAffd$MSY`r;u`sw`xyRE>w16>yw2y;bNIIaxP_z` zF9+th7tvGr4vDet^1U}XM_G^DK@xQDE$(%*Imb?7{rJw??pc|~hu^W~=)ddkpYoeI zJnvY)oIjW69X)g&bE7A4s5{_&o<~B--90 zHe2^T*7mUv>pO<-wwQC8`OE#uYPu|tEp+*ZE%%miP71t9pAbD0 z3)trqw-1xJmFTqrMwZz=!BXpSEVrJ-O6xvWThHJJq!;U#`+mwjlP-@S!{~9mpNyi* ze?Q|~r_0`-^Bkw=uz_gK1#Ge&VB`y%8>`8dI6iP2RQFb zJ4V<@!efNZ*1hH2ABdL6u*`Y_E3Bum%6b}WtY@*_dLA3C7qQtof0)vHZzXe>%Cii| zf8(Cf8Jyh6@#1@iS^Vcacb$6Q^O=e)X1~dkf8hQ=muHe4^dz44Bm0)02_|p^(ccr0 z(Y1W0Wu5Y9;?v`J2hld>@w;{IzFNfdH@G<@v65(vkJZ*QSZh6p4b}_TWIe#hM)%q% z_8|KGaCsTogE`2rNhiA8LVD2UAEZCs+r+UT;jzFn>j}JXGvoRBV;XCS#$>VHdLA3C z7qQv8w}mkz&HD4$Nc7qwHe2_acwZ8}FP2$P;2*@}dm!Fcz8^xuuK_XoGxvPfDQ_Zq zx_p!@r)Th$U)(Xx;ksYB7qC3QPkyt{Gu!ygOZ2|7XkDJV-7QZ@>uIdB9{-)MVRvxf zW^OTjiRf9G!@r2u>HW!mCE@SaVeBt^p5l2#V^X-8=zBE*_Wqmu6+a7>ITF?Pe{db? zLJ#ouoo@a)e6ZQAGlSp#!#47Lo+6h0>z*BPFX{~?`gxf=WtXTojrGXhq>i4%TZlgQ z$`!jtxwr8*4{=4ys5e9%AJ{GGjiSprWFkF}yR?di&xFw)kIiQ*L`!Tyo4c2TcCT^_Sf)Eh>R<4t4&U9KS0=<;teN8{VG z|B2o=ffd$MIFso4p2NZWM!m(1Ph$y%%SfG&$FmJO8ociLS@6AJLd3R$BM*0qYs;eUiIQlQ@~^_d>JS zMD$((Zu?Kv8^dz1XVkmkWX91`7&|rU&8Ev!$YQ#Dn-u8sYqEh}#65bs`9$%4qI*IH zOUt-l@vM*Iu+up9pR!#zlf>z=rlgab|A4$0NXYlni zquvhYlfzSbN8RTNJf{!a$=8fYy!~w3pE!?bALg+|U#@r7nZa73GJe**><`-i|p}P$Iv14j&vViB;Dxp?eeJClP;H#0rUdya-QAuai8-!_AHO#*+j=E zi8qt*e843{_s;_Eo^)emIa$tY#6$x0c6W$S7Vb`(MQUh%V13Q|NLk$hvP1B@0-EdBs`Azt2%R*nMjT4`f|* z`2@+*v-la&Itv)T%$?8jbE0i8;+~hgImjEx99}E$BFpG<6e()`Sak*WaCIC!$gRi6 zl|=ini1${wp2lCSdsng#iLR+6zF<9vW3F=hB!m4@Zk4hV!3jKgf#-zaS8L6}>$@z|PmYF-g3M=rgl?mULl^{E+md zM+ftnfoPqwlJsS{e3lH-czlWY^wf1x??)2;Zaj9l-n}-4xlM`k8fMgFCki%I7Fqb$`_BPM6b3 zf}X=BGMO$<9nE!3mr1gKF2|7N^bEc_hU=Z4!%vAmr^yy$x$fw)9r5WgyoTr;_VF?6 zS^Um=<^ewYJ?Q2i#Vbi>IsZlgtH>0(ERY;sb{xm?pv$Ko;@(Hk;y>g0tVQ=8j(X=+ zv#(b$f1E=+mdoEBWuMUH(~oig(ra-G(Z5%fH$BdMi7x*~y3sTE2hly&dxC3oqPqts zF-NpqK0JwavF#b`_9Xj<^~-HfaUAI~GMRlykK)%v*F_QgKh0LljiO%5+{`wqWBQV~3o?}aNE@g3T*3NUh>jk&Z(|Fm7ZvH8J zgy`or@J$cgS&cj(tLxuagP%9A5SY>!r)TNH4nV`X<{#k7Kvl zTuaB%@#nXhE6W2cdDrHQzmRYr&f&F0|Gg*q2ARTmSx08m^SF-aSuD?=%Qee#c`;c@ zm)DaGbRSQc=k`egAG4mtbwtN8z@O&3b27lHI<5;od#7<^o_)o7()cFP_&l!qz|Fsi zyMO5B_-OE<>HUohjiIQv^>Dg zi@8^*<8Mp2cIe*HsMm++T1espMDLZsy+5(@3O^%R#>>k;WuMaJNK&Au@pn?B%U!-; z+vze!qI_K@XMf56rsr|da;{l=0i!Ey|KJl}as9G9i!Hx)bBN>7E8Ve(;~hlje;R+b z9^kNV-28ofgXrr)StNt#@`Y8LlXUqGnLwBG$P{`W|NPb+BX2eLE28})JAcQvGbV;B ziN3Zi;-TNW`N#1g(ta%a5RWhN{RGA*a6Hj`GC1}JK7-ZL@xV21ObizieIKlVgMW1E z_i;VZ?=}Q@-&(gkgI^IHuOc3{&h{04M#5(tHWB>}Lx7R>u1E1QqWh=3hXl+`7D!9J z=O%mov7zFi`(89RuWyaK8|g2UrT0iI??r#!;M7yA-$DnE(w?8BI^a*NIJ4zayyC9WvicA zCtaRF`qJgOWDs2rA;akM7BY(NV*}Cq#sj_{A>ll6GSM8ec*`$tpZK`TpL{mpwNX5U zXiWYu?rnd&eU-u$WCCMkpMN2e*JLl5vkuWk5RIfblU#qWdR2C|bL+oi47pJ@F) zR$G@pk>QMyEp~0|O`u1yGtqc?I+?<9`4q{~CcBTQ5$JN}{>RkwnKdgUd*- z)g42((fiWn^a$@om*0_5^dkOCrqE^olD6J7y1bUmq04{CGL6AV8;&1c9!z%7WsL06 z$T7tcMDs~wG1@l#KCS$VOlJP_mbSbXUB1?y<3*RBk=1lr)}gJpg`U7FvXd@f*|)9N zn)j7+NO!uwUt4c0(Rm(V$Bu6Q#IUb*AFHiru-1AG8>|lv)Ip2G&~1#Ge&VB`Q>KbBgLW4ZMtR$BM5+Ij|St>>^{T{c+{Fmj-+A5S2< z*CnvRmZz}FdKzo2XR+RT9viI}vDv!UiR+Q*Jd9zP^#oQ}PhpkyG}c(pV!ib|Hd-%Y zvvsdC>nGv*vCMh`E3Bum%6b}WtY@*_dLA3C2YBN_ZN2Ok{_P$fd~jQDFz2mIk>T_V zu8FZv>o}M2$3wVx@fkS49}l&T*B{n4eCGQ22MIspb!qE;LXxbffJb(1>vf~Y@d2Xq zGlQ*;aIcMGSvSsC#w0L9!fP296OAw614p{`XRz!j*Av+OXxC%dqtupT>toz&qj(|F zK1|_7aqgwOR|-cGEl=Y!*0Wf9oSRP$KkUhV`Hnf@r6==#boqQ4*BxEfkt98jx1Pp+ zWBu~%|F-o4x*SScGRDWAXK^23c>;$J&B4b@db{^c;YbqB4L6bSy2f++xc!sFp(K1Q z&LjG|Rdzg^)pU-1EMhrtR=dZb2w)R+cl1J8&?sXZ$<-uezJ%%%ex!2}!-%7W=F}&A$8uz)G=OE+LSVQ!_S**97$42W#Y_=Y~ zh35#-_&AnZPhzF@G}c(pV!ib|Hd-%YvvtqsK1{UE7?xR2V1@M*R#{JDjrA<9Bzo=? zao<~AkKrZOQ#jFj7MBuTU-F>aI4|k4Cu#o!#|W#4=99*HqV?zTwA;BaF-DFeXVK-+ zcknrlE>9qL(B*|>3|;PaC-b1o?nKMu_&W*D)w?(+iGC-%fbZOG=LQ};+?@k4Tr`T~ zt}%FWm7Q1U6MY{>en2)bMt((h(u?@by?nM?L&ww7T;un#z1ZUZwqBIwQT&;N&m&wl znrlGgas4(B!{=V8`)5}zmW-fBJ@vpkJ;WC&e8^a%Grx_p65r04LcN85UNx|~l| z(&d{O?rC)S1!?^w|84?*CY|U39`rc-iXOxHPq^zVkK-n?Pg$P9|4nlD)eP1V?GxGR zNsbX?HtjJWSwZqWe-7_s_DN`*{p6B>Gx1h2N5J zZrJ?=o)@eqj-#xn@k9M@&g}wre9^WSZ?T@iFNnqz@xZCB$M9t9DXg-d#&)ZxGu-)^#Wh5~pD&+(h4Y8) zmCw%P{8`J-bZ{f-LJzS2tM0v$(s~Zho5j}xyf%qjtp_;0*6!7~-)pvwcyi9oCxM?^ zFXDnX+?WFH^QN1d{FU@&4)R|zi0-}B)_a}wqUZ3g+3xtJ@dKiBvVf&;yZ4IYIHI3} z$W_GWwQ|lo+)wCv{F~_S@XHI|<+UuA50e>m`97)Bc-&5w(dGMdxE|^9?YZ11>2eL( zV;%bt2h_XyWN;_ZJiYfgSIH2@Brs1p(&ek~bI+m6AIMpB*(T4r=uy1%1LnZ@c2bh) z94_E?qVvc5koz;ydnNEqqI+h5trocZKoq+!bUlvgMebgj!(JcTYw< zzQi5t1l~mSw^QVc#AlxJb25f5y``?pW39_8t;=fbvd+5PY+ZK##H~l3Z(aV+x_ryJ zTxh+3+ex^8mT_JXb?Fmbk8%RhXCC=AnauoUBbh}HFwtPwCZ>qiBde^ZF>750MC+HW zKXvPumy$ZxDJw{U?qi;W&rmE9tzR}WnN+;)84mS?e!Xq|Guuj#Bu zb|y3EF&wSsjLBk)m99rIPBdp(Zas;w5WQCpKeOdU+)1<^dFeOYA6dVwAj{|}{D^2w z0Z&-vdJ=sS?tiSdp23Yo?-gL1Z{3(Eb|+eoe2}bW{j!<_^bGz+G{#%a_r8dF8nZ<2 zCFc|U4ujmUk^3!Ob|x`;49kedC-7;a`DF2ZTb{?C$pFU7cfRAe(q%mvPA}j!-}Cv9 z?{)h)foMMRClY6jY$9jT1H7o{#-#8g>qYc_aPyG|63t)UO)_*@MP|^`SVO|?#YJQe z%Vi^3K$q99;Tc4iL&z4oyp`;vr|~zUXN317&qtzl#xZGKzDV@E$YK3j*OTiw{v>?9 z;NL{A_15!!m5toXHn4y2_)Ye_z)2*WGyYBVy&ZYMX0Bz%%WFw5x{tFIy)O>m%4=sa zXIw+{IW52+es<3qFW__6Z_Hb-#oxB^^)=nw&hml4fhjw1^gBd3y;bUDMitR-7mp2K5zxH%NCiG=&=PtHlA9>X&039PW5 z!Yb=&tg)WOdg}#jvL0aMFSpJpmRgTvx%DJgTKBQqdKT-g=dsax5u2@he=}zi&Kb+B zC$PeL3ahNAvBr818>|nW_Vp2iyMS**97$42W#Y_{$-GiMUc z8Oy9Eu)=x@tE{K7#(Ea(t>>}PdJ&tgd;hS060RT1tS7L-dJ3zor?JL*7VE9&vC(=F zo2`5QvVIb-AIq#Ku)=x@tE{K7#(Ea(t>>}PdJ&tgdtN)QGYQv^W!4i|VLgRa*3(#H zJ&W~3_s=|Tu;l?pc5&;BVyX2wmRnC^rF9>xt!J>-dJY?`7jP2^pB>m?SDQ1QVm*PE zTTkIg>uG$(dKTwd&*LiVMf}UU*MfaQ^j%SwVuNU>jiAG9$=)U z?Gr4u9>;z}@0G+mZFw4>v7W_w*7LZ^dJ+G!?(NpjJAj185l^w6z{{)_Qqh0uOqAb=EjnCuWdorHi-;fK*PVRehJ&A7Q zz3|(;Sf1xI502Q|tuu}DiSEw@jJ0-MzC^;GmCIGDSF zK0ZaXEm`c|k!y`~IyJlHLd;gA^X8OJjbpCLM4S^S9TZ+FO}4r%9Yqsv~T zHS14cheJ7Dd~Yg-=McR%iQf|KpCbNg%e}+cR?>yn=CFGgH=j7ZdU!jpzn0_BBiea` z=>=>eT4#WfZmvi19ir{Z;}b`*4g8EXi!U7A&P(%Jc};ibK$q)|VZYJkCQ?V2yB*uk zTSm`fP28#{r9!tyxYMv`c#eO9mUWm8Y90Tv*>as$T#<3>qS=>9p_0Bq@ID+UpP2(YF zxcg)ruOzzGQWy|@KSy5oU#@q$tRj8&T8y6Q#>lZ`IrEVWUa{mkzZ;E7i$Tge8-r}0UmXKohXA)0gY3ZCyo-N$O{8LYLQ$42W#Y_`sSD4D-e<6axX zGV2Mfu%5yy>lv)Ip2G&~1#Ge&V5GvWGm53w<5+GziIvuUthS!PTI)G%uwK9>>j6ft zwDn`D^*EMWPhzEYAFHiru-1AG8>|poUn&tR?f95z@lV3YL#&%fH8=UJ>H;otDVe@I`>D>>jA zmeb|+WEkDY8ARt&5&t0iyUOySYk8J2MqWlH($lz_^r9DW@L=u_S`Qv}1JCGA+>3DZ z5I3I;&L-ithCgdL{pj;3iuh;9iyPwNX6EdK~*%PvTJPK90AZ#YIGOlPzxM*~)xmjC7*Q zK15^WXp&~R%xXDZE>dTVY;g<6h~+XyhS6nj-|f#NenRvND&V=dx}L;4iPj_EB$I#P z=WEzNX3-0{ooI~gaT~{;^~>`~9X*N95`DJG;zFW*Tfj}$1MG6U+n;glM>HmhL#_Kb z-g*XSTF>E9>jm6oJ#h!;7}0uC_yEy7v&RYFFW8_#;U_J6hvX-91uZYIT4tH~Gc&$91^q?p3dZID%CDNDW z@f+gbDw9qypZgqr*H((en{hWBiv_lA6t!d=Rg#v-^2U9&D`*rDxRVI z{6c<3I?-jxy<9K!C?0>G`)rWF32E0eIQoA)UmCgA@WA`sxfI7&t>^Hf(LARZlfpG5 z{Js{B9OJenjZ?=m=UL1LPkz9yCxt7l7jfi+Zh0D4TQ6dZhumlQD2^aH_cHj)cs@fi zfA3+|PZD&w-vs7Nmj_pK52D9#+M{gy3(NtJ&$!P~@-32Kj9f;h(F=IaV{YFjaSfTx zayj^M#?eFRMUBV&BsWhv^hq~QAEy(2#>?RePq}SOND}@IGu}4Y9j`QYeVWfItW&=J z49D)bj-lJ=UFhDkd|n{h4?bQx#l3F|elEO~*?Ep&Mt*+5U=k1ujAX`Oh`RPIY}@Ou>a7CDPCav>Q= zmtT@$^dcswam^mb{Q;}V4wlQuNNd(9x06nExyMUxc@)PJeXh>n;OXo`UhCuH8JutQ z0`C6`b8g4qhrtSxW<7EwnM{}G%;a82PvR01J`3)xyEZ=&NUXAs_9h#Ruo`_1zSHCW0HtGM39WbGeS_@;R)NvyQ)W3}}R&a-U&sC6H!t!Hqa^*nB}9$;jFtp`i3$MJIO zDI9M-gSFOk*kHYYP1Xa9EVOlEsr5KsWIctWt!J>-dJey|Uc?rQY&}?NJ&qSyPvL0m z8LYLQ!v^aG{LQ-eF`vna&apUdAmOtEPgv}pkMbU}`Vams3_d{udKULw!o7=of-I1o zbh(j4857{hrCeV-xHj>lPuh9y>2ek6MlWLTW!!stt^ASX>9UzDr+W(5o8)&URU7jf4Uq-G{(mVNO(`c z2GW!H%Y8oQIZKyElN3FU7m)$XU%sd1bh(&}qRSOzGQEfuU$FoA`Y46(5TEtP>Mwad z(&dX}GChaC5#4XSKNY>KjTVxwOkJo?Wo^d{wuI9eV`r~+iBil&N;40$(#d8Et`;PDF(B)NR3O$7n z6a9{~Jm`D2h2`>ilBdfG>nZe#?jA1BCVECE@fo7+%Hl3RxVc5~d(xiu6mjGl&I5WH zUn2VXsr>Jcd|!p-au7L-E^pBPru+B|NwZz@FEW8H2d!lv(q+GOd|#9<&m+s}vVsJ3 zc>`&wb>fWmbdGf%+y2D0$MW`g9BIFkueq?A1T4?u2V@6*fh3(6BbRJoJ%96i(fB>l zYm0c#My^N3kHU?lHDk75#U?(h(^J@W3!e?>-LRJQpy$wQa_f;tZ{^%(d3St`4A&TZ z>1WOv`V8DjX3*uy0ppoNum5ZBYGNI?&g-4VKo#@{L?`eNnICY`1sAEKq)EYaQzlJY zCNLVIF#;B7Q97|38Fd^Ywp*nuF0#;)=%V0~dU}$me=f4%rho#tfRJFY$A0nI0Nd~3 zA@7mxT0hUR{U7~Y{Rip=Jmfr0Y~R77jpuu8f1+Q1?#Iv%{|Qe6ufK@x-{T?Im|*+Q z`g#0czoGsPj{vXBc8W)ebCB&n>gTfk2_8Sh>$1IBBQALVhhM*VBk()8q(8#r%Xs|C zFW%*SctuY%0yh-yf>)U7(bbRLP&e>G`w_2y^f{$G{4TI8^}~-`{gnLl!;gFh-@m55 zs{R7s|3Li-o_$GuMg1{;{t~|bA)d?EKRov@|E+kG8|qipFX5GD`+NMYQaB7>)jx9c z1sv}N_VB6xT!;Ew^;`Jt z@8dn+QlWYo@Bc2&=4Jf!D);@8>f)J&vkS3(14sF)dJ#W&aIA0RuNuCpzJcR@0Z5qSjMZCw?;F_H>u00zI*;%wUj456ZM<8)zMy^$pZN;*{2H!DMqNI0ycYSX8NmlX z`vT7Sb$wh;z%oI7JZ{Sm(N5m}kr#Pp#G1}iG=3c_@zJ*u6%-?zV%`1qs;6~p2d5*Moc1>^M zRl&`hjPqaP`zv^-e0>p*8R7?=ZVU=P{@XW$OPi{3?Xp@yxYF*JwH&>eci?l2u@!)jO$ zjZ5>=zf3R7%l+lyvW2tpM)4>aso*B^fl|FWzC}0H9c;4H8J74|>(aV(E<2aq%ji*HmJW7D$M8iIhwHa=Q`{4mcY~hG)e%{9(dY641J-ggoZg~c3 z)Eb#12V>%o!cmXsl8v^b{pc{NM)gRITVrEvj;*mhZjZa;aNHY5Svfn*>X|V&=k2*O@67#qIPcB-^K8DEZ|8@3J#Q_{MY!&*qji5B zuakAU&er+5SZ~(b^=@6R_v^#DTGwlp-o)RQxF6#tx;`S?LsTVtCgSA{f4f=y* zkPV8#Zcq-YK|N?)*ca}FcM)84FQSY7MS788%(oZiMSam3`a>D*aMJ;~ydd5n>QuCWu203{;mja9{!h=_nf&qYXyC#OOC;olGiR zueER%oke#MEt17yQ7!6)TDF$P(p*|gd)Zz(OLyrlJ4=5VEW6A8GF~RjbeS#lWwG2W z_shf5Tv;o7)m}L(cjc`*D}NQNx~p*2TScq>Dqbb4VzpUqSG!fY+OH0)YGtg=wY_ey zowc{_to?Pc?yj#Jbv@qsP0>_mbIQeR!q5Ag)FLJJTd!K&uk6*w9(#ykg7_7PU5U6M zYD!f%RSVLng?VXXPI{P+P0SL^!U8j}#O$ln7UrGJIp+<0#ISdY;TADGFoq_g=pc$d zqS!+e6GX9K6c31F3p3Ql9Q6>-E@Ih795cjli+OjPJ2vKyhv;=VcM{B<0&}NCQ$L07iuE(v3Ik6|s#GCk& z?xcs=l$_?%VN!EW*_cya=4aikhq;wxSyp6Q%&$YHrmd-^=a)b2P2*`YEik)eZnb8{ z%;wzco@Q5pxm96qnR9FI&b@hnnHA5Ic|I>Vv(!S6W-r`@x9}IeMGUm%i(;``l*F6? zyb0DkU@QX41Yw)yc3Cd#rLi)JEC;6pn{ZoZ+5?)*B!D1b`m}hRRVejd!$5SnW~G{g>hkCSio5u zNOOU;&IR6-Kd)W^_Xt;J<9xgs?{v)7#F$t*>YYh233c4lNj}+-Ne`21qA~+~DzSI7 zP8R6s$5{$?ZQ{QN!wLd~VcX!?&eR9T_Q0|+S+)Sn?tq0#^Q<*%&)k_e^Jm>z2u#GY z1dLmNb9b{nIkz=8fDB<>53DQbh`_rEm^YvA<|VmT5g{JfC|HERNU}&5o5hx_q{v7% z*+_V(MyNaPZ-SIKC-sNCP8d+Wa^#f355)8ktw`E2W&6M=!5OkK|a_Fw&aRxpcqG+ zG3=1_d*F*0yq{~v*k4r4xAw4&d@DIXI3pUy z13!|FZDeG@j}PvMGC@zn9=mLxncxn=jYr&sSJAaHv2_ zXPXXi6hb2;nB{__Epb#q>lvqvBRFa@PD~sX#L*tgK^Va#8@ONspLr)DjxyqC2Nc!J zJQi`}5l10$lrZ~jw0;mA8N`u890gDh5wwHkpqw}=nT6EI7+E8md8k7)HJKB)$^jYXkka zM}DfI{|utcAHnHYIGxeaF1Zx>G*%rA>uvRYwYZkJZi)`kDt3qNe zA=Wm;+5uUuwK9k`2bxI~lVGh6t(2{Ds3p-#f;EMlWYoU8L#h?fZY+4Kse!CX8+dC}P>8A` z);ef25xgCUHzO0gIn+WyCV1;p4dt2Ott8$Q@n%m2ZynSeA@X4#swgGiw!~XC6}*|m zn@hZPiMN<|D~Pu}bds94h_^QJ<`Zub^iqm^D0th=1#dO05o;lM^Prl#$clougm~K! zZwKPd0NzBOhty7jv>fVb2lXUKQ$(5#eJ<);kk%v8QX*|jq*X+kNu;?%T9-(RQ32&z zLGMxdsOrdREh^|Xs@jg$&=IQHM!SgK5uDZ3(H5##7qyV!EJQUF>uP92oE?ZWgE(`j zrUT-vPn_kbi*~4s4&XIKoY}-#2Q^ZtRdqVdSs9hk)fKB?L79uXNU9=1Sxl4_)Yf}c zMT(WFjT|W`^NF$u^=S%)y+xK3jMY@w7BS`#V3SgY&}G}m71Yy+CBt(A5F%@t{_ zokMf&kTC^g3YyEJ=JKeyLan${Xs(Uc+!ZvJLCxh*a|P5~eQK^8>RT|jhvrhV7BSX_ z=IT&$^{Ba0YOXCcR|PFD7_*?cTxzZ^HJ4~|!PtfvI}l?AbXOZ0R4^70V|`*Qhx*zf zg9^qJ^p}MU>aZ3Rr1hY{5@b+8+LlPGh%^%#%%KJgkU<4$F*H~X#V$zOLxU+ObwOGi z8myx$wFnw4)wS9V8mwZqc8i=QNVA~ATwSe&P+~EanCNmr+JQ(jpv2m!*#v0;k=7^D zawxH#uG$oon5FBs4wP7^E4LI%Y@=(pibykAy}8h0fv(?TXt7*ZaC;z4UACabqz)IX z`NUd8tce!eQj1l(lCy|4k5~(#$YNd1ZHTr5(PluEwOP?cx|+*>?zO$(tkmjWaAp%{ z9j)*MXDO802H8_^RuN|=appp)1rI2F!P)*PYyEnyj9bdrT3>MH5N82&TJ!-Ze!*G$ zDQNy0PLBbtCc0m67F<#Og0m9N&%^3J)ZRh*ST#V(Dqzbxpn9kh=suzrsI*sSU8x8n z)&vwoK( zdhr_l-+yKm!2ZJ;;HlOCQUR3IW8z_%V6gTR=zmfFG4kZmD;3q>rV@L1&EKf~Glk#2 zb*d$QarJ#k<@Ntd-9L`DZ&P>qAB@6R%DqL8T)`U^tcmh^ni}7y?uxWyF1qV+75-7* zKd!nLZQq01I_i2+^(Ix8t9|pIRZTC7Ui7@EdC~HZujCDSSmJ|<3YUscn5N6BFQOVx z=!uFV-(2a+)KumMw7Erft~$U0d}i@Jn{K7(?UH)igw}Rg)%8%(iQkz)Vee7PiAN<~ zwM4m#8ZL!1wPE#U!X@ybrhD)Q3RG+*I$0+Bk1jh`397Ub{$-8&%t2))8YV&Pwp1-P zYOnyhxPT@;j7`*B9^CB+-cgAf_EHC3aMvf(`j)E6dHg^XtjFIpU)1bU%{ zb12nL0qtp`vJo{P+ET_$#z)4&hu>1bWl_N`Rls5~QHAuN31tN2+7n#0T(4YdfoqiO zlWQw+T@Gpjxt#V$z=tDMpkgzjpL=isN+=lz?otB%QlsYb5#Iu_G!eHRyvXwCVTZR=8}V!D-gB3l zBZCW6(*d$sCw1Xh7xbzR0~588hl(gdC#!_J(?YH7qWVct`E21mD^xo^s_H(y=EJ24 zz3Fj=Wl)#+|6p7pQCO4@<$8!u zpB;me9Rm}UtHa8*hfYC4XQV_Ht`WBu-CiHjOHe&X1ZyZe6H)ZRkUc~)XTG)A4UicS zGo~^|QhORicgV3yP<8Iv(?x(I=rxX)q5JebM0C zQsMikx}>(3QQWbzZ?VJc0BPY_|82*5UL4AR4!G3sqF7`+RgBslW2ulsEaVUuHB|sN zQYxzS)M>4NL<3Ibv1)I6Zyv?qv&5d@N-N= zsfV6N0#ACY{b&=uU=PZ(M1R9UA1ncP*E1Wlw~yI-!0h!fdo#@57VD3rgVOXl_i*YI zJ6H}GTgF*Xn}MPCbb?K~zl~3lv(F$diAqtsa-0qAk#yK$i0H-T+8?Pf-y3(t)mK;27tA0dS6{Tjq%pX(q(|w& zDcb0jGBudgh7*~91zPlgdSKBVFlWPAlu>Cs#e#lfMbFws#*5%nXLJzv$apQ}4;%ip zPj5N_Q*5{zrkWaOEFnCb(kU#dEQBj;I)uWqJ0R7@s0q7Xb5q3Q+T?2I3J2V14s7@`k2`}pwB?3v+-`b zP!p1`WONO^-pB(J%NVEZJvHl&3_7&;R~^Z^h%HB0I!qDzN(HcJB6kIvdlNdYJNjTP z?Sc6m-IzY>7Ww=@Z^EMU)r@NV2nKec=K{K_2_02o;KSGDM9I}`5wS~M(5I?23%d`n#SRgx*w?Ya79o2%xn3i7pc`e; zWB1X+Y4|zkiiX2!cDP{aK(7}|z}CfyPh^hR=tu|P?&BQUuwzrtWRA3vPla8=vlU}| zI-4f+NWc|Tef9!3a5E*MHJIMys+QwSImUFW+1`Rec~nd*cA1-b5@01$gqdG8D}f} zLiSR!E3DPVEbCyNg;X&K`zJEnq|R#7%Wk+ngS#lv6J;oD@1X-6V#dYLz+22Y<22*^ zvpKiX+4VtglRS_=5WBYa4ev+qxF+csJrDD-&yKFl#R?fhbdXI)`aFK(6;_Czp`&+P zlO$cW9rTcBZs~G#&h(Hl+(EBwbHHyBwLW?p%}m^*Z+1(4|C)G-BHy!zVNzX+8khK3 zjF4nv$-)I@oM`g;qS2R_cld(JE1g7}T5M4R^UBM0l~#ipO9#)jMV8 zlzr4@t{IvkJ5clzF}!83?EPd$2sPlDS-SDD?NR%W{f!Ih~rjkSDAOt z8EanL*`fCUl9T*M#-B#v;>wZ&Wi_H~Mk>A9Gk6%}PV^+lFhhN>m&zDkw*HS)2W4 z(EM9w{CeIxv5fy7==F8KE79wcO7`ztWE+R;M7pfM&PNI-h5r#x)|+p+hN4DZ6?`;Z zAW`9c-D})pwhJ@2p6$v}2#woZt1F5iKu!t4Qt=QcXx&y@IZv*6s<}46*8SS9UN@I< z{Ym-I3R~}8R>_8RRr*~05ltUrCwhqOoR`* zx7D9vV?g6t$j@zzK_A?ZksIE9ucBzLk7$3QI=7V#&T2i=7}u!Cp8j0?;O0!dQo(Jm zw>`%6x|vT73UBkStHup?-gC{khg@(Sp4)n5M97tevMyqySEh=O0#HP^d9OyE;d$K5 zBk5o!i=3X;c8S;1+g$U0fLoDK{n~o%QiK&rqK(e43RjTdR^P|RuAYAlch6)7@`gRV z-k^9NtH-Zn*!PaA_rN^>9P>?c&Il)ZT?CCaJuoN~xfm zGS(g&uFNP|DYm%U%mQ1s!Iv&_s!#nNvI2-v#aXD0+sGL%*j?0r2@g`TmVyguEW~e= z4xcEFc!@uF%Xw{`t=B$4d9}{w>`$8u)c!W}t$ocs3%#dwe}anca9&(x;4PGAgTjox z^bIN;!RHXG6*QU$C!#k~n>)Do5b1`>MBIoJ zPDIXL!gelh_;#gsca(+qh<2=?4a6mpYT&5V)cy|c)x7@qE-Jd+)Th@GqB4%4s$%%{ zO5IgI!siZp^~clJZBH8qw(iM4tgp_w)PM9{MaErK;##lrYm0t@^F(U&XX>h;*X}a* zSFfw5*F+VlT1&n1&V-6-*4;_oQ|-Gdk?}a?7oW~T|0&!7wbiR}pIm?7gxtI2(Ehj& zgg(2mR-L=NFX)(E-_Odp=A62&0*d_W7Qklu@?_mDtsDheIC9~0I zw?OKcWVJi%yaGChkkm$RptA|76KmMrN)!!O5N?BR-DJ|02Zfv9GdmOD!t2^q=`opi6#ck z=r`lO$4d4pGoalq?zO{CK{Unjb`2)ZN1{Gci0=o(j_9g04OG1Udl=cJ0V0r??y3}< zXN!rSek4?NS4B9#0>0~2P36&h?der81(fQs@_TP3lEd}b!1vf;&hMG?Yjz+kcxr7p zAmXca;DX@5>YnoPJ<)5!OMN$<$-7-VDB3Rl>?h?zW!zIe+3%^BdmxKk%>++2^WJ-u zaX{-H^@^w0jraAPd)p%-+V}APx;zdZ3ivnWW8R6|R9WT3q0iZLeC_FzDb2@G7&vja ziI)v$(1U-{)%Q4LdfoW}o_vd|&K-UKUytr!hOWx>xM?j^=bn=L{x|5$r08}xE_sYj zAYKgasqbOqJ=UGV??=(t*EnoAczBOKUwy?DQn*h;)->Cr55`Tyc|`YE>;H7)oX}I> zo_x0Rd3t!jp~SJ`d&JxhJheFA4|w@avh4!2bfy@51r` diff --git a/ext/openssl/windows/x64/bin/openssl.exe b/ext/openssl/windows/x64/bin/openssl.exe deleted file mode 100644 index 9cdf68c47c3df8894213452daf00bab93cda5006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507392 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
  • 42D)g^}i5VwGcJ!bs4@wKv$v`*=%B$E| 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%0AiReeI=m-tL@gFBjiZ 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%0D$9$7;7f{A>Aft-0zu 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 Ijy3SV0aI7c`~Uy| diff --git a/ext/openssl/windows/x64/bin/ssleay32.dll b/ext/openssl/windows/x64/bin/ssleay32.dll deleted file mode 100644 index 3b172b57e3c219eb274f1563075582f66492c996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356352 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 z 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‘z@^J)^JkPKdh>)qfPAZ2R^ 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 z zrKXsb3CrB{J!|D+s54S~U|FrL>W3;>jen2?ZInSF95msF$u>ki z+w`P*x!<7W@+-R{_*ug`XZ~MJ87N5o`4l54?#x1Vcd4ma@H7P97UyD4A|^H;5V_c; z%1x)0*1szl28wC99+iu~X)CqQXD5|z53vDCx6`a@|ChvX*h>m1_LX}J@+x}5Z5dXq zkksSSh15F$dG$?x2sKRFmgp1)wBnayPa4`s*Ap%SQR% z79fAKOmjvHs_-Qh9Mo&vKb}{=KM`F*f3c+h|Ij7w+E7<%*%+d4?Kp^?!(X z)B8CBeyd=LC|ZNK$F!aE##^i=x-$ErTOWkZruU>N9LuKx^NYQSQQjkwyfNqDpS*O8Ul5lO1nT=DJe!m{KB)AB!wG zvAK-Z$68H=DqCO#C1|?Y*iTVZ`mXXuK346n>hl*x4Qe$%0~YrC=kc0Nifo?FJvjNX znfkiJE#2NWmV-{D3k$w8O#Z~PGT+dS896J3i5wxW=J($Hhh&4go$44cm&+BW>MN)4 z9wJI^W!9Kqdnz?H->>SxAw!JstCR%;S}jJLdRr=Uq3XF*b9po0{FnBC<{xVm1jzp( zdBF4Le^*r;jIHB0Xb~*|ey8~g^J#^(D3bxWRv@G)Gx0CzdP`Lj^H!8=4HZuA$%i^D ztmiB(6zf`gn!#x21)xwa%urH zhF@6jJ#Y7~e@^zdai9vNz<=eIIYVu#FOkaRG`q7uHL0M!xl#wrR_s#-^TX@PA8MOR zG5)I}T(X`odLN@yx9UlJhcd9{>@e=LV%}ptg3{X?^Bxr5pk9GH`sR(h!Rs4Io5hXl ztS-hs6<`?rI$W&kD#&}@0@9x;PkO`;c=vDXp;kj)#*q?I)Z>q^FRT4RUfN4c;)d0J z0U<1{p%YclZQ%aJJiiB8Ma8RNxlZ%9n4pH1(0THol5SXyz0>zdqOV-1N8y*OwpCq3 zrHVbDSlu=-F*d)Y!_)(v!y}LXqfIu!2_`|GNuVJ!*>U>hHw6g_O@dcVf<65S{@~9G z60kQ+6>pmad;1f-;GY*H*hm7`yR}j0xCDo$l&JEKB1S64iem_uA_?ahxgEdE`iU<3gHm&&k{3) zY1g;<_Z#@**WjeJ)pj226wypQ*w9n4(_d;6%;-mqYH*CsXc4Q2K zzD&j^7F9z7=eI@Y|5>b!wMN8&Es_Cm8?SpOYy)vN>!gME^lw7G}fOT zw8-^_V@I+jKGNSnP@0hk`K{d)kM?1n(#2N%p~|ICw@)Ie_{`5Br0|(H{C+-jqW=|g zXzwwoEATqj4@6Mme3pJeofCIRLj9?*ztWGHil4WE*Fbg7030orDKH_g_CthJm>Lc1 zw()#2lc&-j%?D(KMk4GE>LB)I_EX0XJfO6OruZj{j~MQCc56#Z&+q$>iKGTuc~ldlwzMUoO0ZwHiwV26rYl}Abfs|nQY z+sxI)Q7YOO{&XP+>eJ$q`I#Zf2let%tmZ+HM6CXQPa4!}_NX@tkUzafm#-ntk3SCV zsTM;zMT#F~r%nTR{u5g3{m#Uv)8e^!DhR|&zy1X!vKP;N+hj=ZA%%v1xPN9RIa9y1 z5xe8JxLmyHA5A3H*vJlh1@%gRV)*9)OSo+%`Fk%mWwkW&9;img!Sj{UO`&fRJSG(6bDG~PQe6E&n}P&e943*(ewQycKL@*IPuqJ8r3~!I zf^0{ANJmQ6h(m)17ntqYvHovt1C`8(1dD^}=|jb3yN-d^&=?DcWBkkMX$ZRcld7>{Pl4^&q|`jYq%WB!{N&T{4EiTUggB|C=bw9EulIwj%9 z>43b9!&*dNwG93hzIFg?CQD&Ipw}RfBiA#PoDt=n>qbc!| z!|CByG3#3?NdIP}3(t&rouQr!(qk&TPWosHesRK~r!!L`>B0#?N_tNz7e>7orl*I` zBh~I#I2SSh0B*_}LLbILevDpeBUR9-+SXU;gxii0m3zNQ6s;lb-w4o{&Wv63d97j8>7?f4YTj^j;+6OpXp94^fgh-R(sl3^A=EnK zEYr$=6sefgD{m%+D*67S{X>9*L=$VPbiMl<$?kvOj3xde9$7=sJK#?!l_K*l)3#XJ z>mU|o!4e!_LQ-d|1O)7b3P|2l;99Ak<{5nz_Ad&|mJZO>TU|X`5woQz*`86Vgd@ zpa~uEQ?<5Ns&*NpsM=rJ;>N1DnYOqygW@vRwAU$BdW9Kl|Go7&Np*!mFMp3>%7QfN zX#d%PF}`AcPmGaTGAF8zxUFN)U)8iQ3EFq?$E;iZp`?>^fj2L8GvemZ+;vS} zNrU%>v9A$P-bKoow`Z_X9m2v+@lf4`9*md%(HZ=A!; z7|D%@3h2TIuWF5>UK= z7YKw7ck(thgMkG8_%9e@Lhk;TRyF45vklvaYO(MLu;u1=aOk3KnyDOIs%#$z1YR*c zfGLqqGCAwueAD;ydWJWnP*edNodiS_9V`r=L?`|ryu!3w;uvpzj> z8dsQyYY*KT=Qv&IqU&SnTgIaki-v52!qTd(CKRiIn%-0tPR;^qm;GJ zjPWJO8HMcUuG9p8H#0510}l}yI4X$s8x_H{Sj2C{I{H7_)25e;d`ec0h5>(Dsm^K8uW^b}R_j5QYd`yj$l-e{V&U zw_~WLSMkC77ydLQ`f9F(y=Sz-Y1C_57s8=`;9<>MdmOQk?huFD!)HT|`HiKQ)xl4N zrSTzA4B2C$L*cd^k}K0=-+c-44tIHkLfoJbh#K#A8P&4U>G$}>W((oMGDUZovX?jV z*1X0}FRl57g$0^@msKqz#F=S! zdRglgr%&Nz?{UVcOQ%qWxgqq0U49GeYz$>71E6C7EyMb+1**aKh|YaHFZkFHd}NVD zVm9T9&f-gA0yL<$=nTEGrFs7FX+{`tsJR3agkK#2`D<(Y@Q67=#mR(}fH!yA)BOi>g(Qy+U29Wk? ze6zf}fy{ED+DNqY+rluR%xd#%QBk@=vnu(~ua($ho($0--_QDKBE3y;d0{ac4fN4D zHr_}*{uN?4hK(;;l3U5o<4bm*9iem&c_BBF_ys||41C|jz&BQ7R44Hf{*4ID5@TOh zM&<~z0fTSlcWu!uG4a1IU&ycj0|APlswu*{G`oki&#yd9jL~V{s1Gs$X6>LpY%Qep z=JH0Ooo4-&G^5=9xfF$Wk?3JMnK6#=@#2=c|tmaf~s@=IPoQ27Mj5!1mIzezW zn-X8heLI>$`8KrXKJzIa+*a;}GTDpE`?n;Jvjg}!c2eSB&khSMXgQy)wy5`brRfH{ z5ko^Nd^dgd7=J?uLe>+bd-kYiAQ1jNjtx~F2)G3KRS2l1S60w82MpAbo2mJD1smDxX_YmhV`Xva0j%bAe!kJMc4KJ5NXnIdN_X%29n-47y>~}L;At4MiOM{=wJy_5MeK#Jzt@@R0amhsIgJ? z|LJ!WApC1mFpNIVyI0*7^?VLn#L{gYM7zw{SbEJGUj17NSohFPlEa=C36_tD9;Rx8 z$L3|QqlUn1CapHn=u16y2=mzaA)_)G%}UH1IMB>2Q@NqP;cqQ{UwI<|xI-D-VQSP{ zTp9Il!Tqh}5?6E?dAL-SmSN^_se#TPpKU|YsfpYi5)I9@syApAN=LMUV-8!&J(O=Q z2VYW278rDoe0+ixjVeKypgz17IcEgb&QlxbvNcP?=9J5dr>@MTV?&#WO2tm4Z+`p- zyYkXU|5LAE-J{Yq&W(z><>xFQObml*KxHsHeyfSeaFc>Ap!r`nP3Pvb+^RsZ4Acj@ z>FdgO*=`s~c1ub=6%V?h{wVKZAvYu=OHa5bEp^EgS~ndP^B&&IM+SK=BhD(%P0yVp z+u(;KE)ZR2qS;lPYbe~M04+(u<(CcKK!*O+bI8y|hDDC}AsFG`3l3}Yq%K*{A^{Jf zpm#&JzZc9GbrE^x61erTbOPyMCS=!9Om_8Zo!QINte~nCs0bNYxWN z0|~c&L~8@3)(^>qTrb3y+5WKS)O$A+VgwKGbVD0apCH49Q$t$o`@A8NW$QU7N+>_< z%`{?cz3%pyS=d@10u-mkjF5Ndc0lv@{URrAv5@&bQKFI8%N#XgKb(dJt=(ouvVC{S`Ln)YS-Y1sCU_T z|7SMt0SjIIdZoLR!6TiQt8_7m4jZP#1k5jnxchfw`#)g4fFhptf>*!3_luC>;xf&(?6K#z++2{4%YW(a0Bg zzq1OwjE-&Cb3Nl<{1XWh5>gYN5_$ZAZOU)>YQz%LMq}dpOH%f} zW}0Czjxz2eRk-a(WbvL!J*0jOu#r11q$c(M^$A35%M(O`)OOKN;vnGPX?CF*k zX;C_HuMe3>1g5Sf=*F)RCNx!Z_$qJN+@Rp@#yvp5q*hIa<9bHCmBRQ;w5DZJf*bHs zYn5_vDiRbPmH=HOso;_5u`V{yZuRT=m2F&|*q}zqSh?Dv9JFC#jT?(4mk8NXB4Mt* zP8!^DdzaGOff;Q27sZtarhkZJCVlL%^c=stsnl(s^1+lmIwa3^{`09tqni%O1%7;3 z(?Pk!kB787sYXDx4XZNtL4jFbaF+g>Y>f}A>l(b5ImZ!^RCf@`X{g(@SrBA~@Uohh zs8_9Xq}Z(p5tq0%*OxfApHD`kz?)RHMU1GL8ev%MNokRGRCr%xQUPo0Vvyasn zoK(Rko9lYnR=Dl?$#~iy0V~W?= z?onnxTgcZT{bOjUfsJW3fs%%W6gQ9vrBHs9qVq z0;+^D%AZ{?9~Eerdqit4D!K7EdG{G)Z?GVOtJHK|rM!*SUR1K^ogC-3Sa+B_7966v z6rKY9c`xA+6v+#BF7!rXs2p0FjWX_#xoM2MVF1?ca+Yf(nhu%E7n*-=-pz#!%@3G& z-MQu5@jc#S%vm}8#*NZb>g3VR`uy6RY?H|$YG-A%cKf2Y!`SFS?6P4`|(_sX#tIU$Zi3@=CzuS3L>&3b5u%VB!@cdnb7UZxkw=ydb}X5lt{s_9oZ z^)+PBMWqW;$GCknOLXUxdYM%%>o{vqoeVsun*IrF=;|bI7?z zMP`N+yG5EHxTd3x*wd+jV`yNcc6)r{fEG$)C&ZPsp44rH9EF;+FI-Tdt5{iXcIRm; z-@+B7;3nmQhw|gu?`ItT-SxguwjkM)zaSMh?gZ|~l{#is_@s!H&kK9@in6G;)s%18 zRUcaO8~_9GA;5y!;udNzSA@z0|DgIDOLeaA9#h8+9fkhc|49nQ0OS~Ed(iZo@j;N9 zS(0m`Oo%yjMHQw$V_t!A`%am=Vl|&Hxv_qLzG{}~xRA*86fRof8dN-PVto&CbTC(T zEc$x}GvxJd!Ge@q5XG38=!V*hOBOvT2yC7GNN)Wd-!7p+Eg7m}wV^+?cljFPcB|cJ<^PeN=MSavO7wO&S-eMPgN*11gnLOX^}^nM#9(1L{pC9KtisH}eORD7 zzikN!-Z$gZeg{UsN|_w7nnzV&;yd+@-r@XeR{-S@R5z0PIzCV?;!2qxnx(|bGS2SO=0@s? zq~=fcTH6pzQnTFNUF2&zSV&hncRp6E5`V?trruJjYdZKY>76^;m3e+A$BzqE{1drs z#qtP0))BWh!ETB8ryZ;ExB7o9x4-9chrL|3I4ghDUvqb(YE{YIGhDTYtnWjKS)fmjiw~pT;|W9KN;;2i-%Io zXsXE!;iWRD&+I$=O>Mlz#NjcEK!6Wn??dht5*7s!FsXBJ*0%QYR&D!Y zh^+>w1RE8+)QYwhdp&8Y#nuAenBV8S_BoRY`o8b;|MM_8=j`j+Yp=cbT5GSpclEH( zb(4mF9?j>#F92K(nKuS$(whB43o(R;jU8%zTdl|~-u@XX9(dPgSDN@k3F5(>N4k>s zEsR?GSxSPc?gt+&RlK}Q-tO(RX2Y(qN%4k_UVUod0E(lox-fKL-w10)D;XIw+JnMP z!=>pNdlKV~+|LliM~C%Y`yWw#Z-8^Ed68;1#6Ct{%|q2-)KyL2qvVADB$Y*R19wC=RT&LR2%R4L)nr_FscEJDQ+*1^cA}|b)`R-Xn(%tEMjax`>FY2g0uK` z<*ZdX$@Z(NTaFH{WPyWI4ivF*C+h0$irXNiV)yjwvUtO`+Knp?azM=w0UpQ^t41bh zhMpU)P$OxC2y-;;qy_oJ&ytwicz`X@{$$JN0YV}=;66x|EhBbsEKSej+GGL1?atQ1 z=@aiSZ5fehf2!ro`>WEY?V0Wndm?o;cJ|=;kU?hT~L7B8OpjU@0a4Z{zlY5VngiiD0{yA}L{egyxgN z6gw`AQZ%^~%~1+&O^%>vkceQ*6Z2;Ijm>7W z`LB~A1h!gTHUOw8MokeK4|0?(yo*llR0|hG78mp(s!Mv`7VjJ!m+gr4=5pW9y}~_$ z9i^mUuA8P6hOu(BsC0P9z2KJ|6+`AfBZj;b@Az-B_SKihsx;V_H>Zyc?!Qy4#`$&4 zA+{%0Cv0pD?j}NQ{v?4ZZ+WvQDt)q>yEG5v>1FwR#<6H78h~E6D2gdZGi}Q$3IBQJ z{r->KZil}SXWv>rp!}EY+t?)-sXPKgue*lJe!>a7ru!bcKV2E^#p7PqcKN#yFAkfl z(;%!Om&RSlOS2Oy4%nA783S(cb3o(5vpu%s>0e_Ra;Q%}pJ09&MYMc$NR}`;qKK9| za%XdmEHICf$w~vg@%Co2`pZ*cI52+KT zCxj#H{=>1qyHW=m^8ma?LFBC;2EZfa#nEH%^n4XQoldf*f+|J_cPQDmT<+}S44XI! z^b}Wx*pz}Mxt42PQ1d10hI=kU`FG*k`=Q+CL8N(}_we(1|1-aH|Biq5Yeli|^ZOIO zgI_O-y}|FGe-y=@;dk*a&h6y+0Ked0G##^8(YT?1#l84*MK8V#M(8kt2tH zj~X@nyR2;Z_vq2XzsHOj{#{-^{Coeeii+VOW5*8vKHz}i-|_hH@5)N_P4>sVT%d31 zn}MI#zx2JM@EfC6!TMCF`Oml;UNw1V+f63vq6x=4)`LwHY`D|nvW0y!Dm2jCJt5gk zIX8ga_Fdg1u{%IuK%~80gQh9FvQ(okv#B(Zdq!+%jYZlrLwtRgBD>BmW>pC3>#N}~ zOZxdt!KptG+qC3~2TAjSZ+YyDFT5lAlarsC`dU(!d$gshpy?vkI)C3cGd2DQRFTW( zd)F;6uNm32Dw#=~0l=9saa44+h&;`2cEr5q5e8iu1Z0D*?{?X(DN@63*k)gp+CqKy zci`3Ovz(s$mW0n1Op`~D!jpQQ^9&UaDW-1D6Y^trDY%577e%mgTa%d{jP?x>!o z)w(IU2~R%$!CLM;UxMb36r^am@^4D{KWqj9ZLc2Ea{n<*%N;S;VKbt{|eZZ%Gt?tXqxD&m!8B48fcx*t#MlC7sy38jbleCv5}&gAZNV&F#aYc zKh^futHj4UA0Tmf%2nxJbYV`p;;aM?Yb|*)_o|xEW z_>kDDl6QVHO7!~>9cNBZjH!3st>oxgtcq$j^fJ!l4V%0+nGRG&*q?a|hU)$|aVqxH zOyzpM@%^ay6%-E)Dlvj#Ynb@BF!9fR6eT`)2)+K(nQm2G)V)@4P;WfBHSC4Xuzace z<-=rawJ`jbS zqX8{A&p~Jvp0flDYfwODQxgO#DTfRDDTMtx6ZU(nBVqq_L!PyO7RJbysd^{u)3E54 zQ-@^yFlKkGxaBO;lUaad%5bH#GLqi1QlqSYLd4{^QFyS+zmvkFu6T}U7rH$}s@n4l zLe;)!z8dx59BQB*C5o~l3tFOk@+{_9m#D5F(Gp8!W4A|{DODOzU#pY=;_wfyicl~J z7FFxnATMmPh&$pC@rErLnMb%1CD8X}Bo3<-p$s)9SGQpBz(jVH({}K9k9S-&LD6p8o zl((eW<_tC93-qcYc2c626u3|28&08lnh<(Oz+;L`!FRkHWxDPNg;e-bQ~9 zkgvWR09|wBa{KmP(_#{}`{M1d^WIYgc9I&<-J}Du{@kyn!#qozTKj_miB?93yJMwp zh@Wx~m{V$Nr!*MTW%xQhxad0shZX`>dY!V?+ODFrBkn~pio8LmM3Hri)Su2k1qfO=#4%t@n|Z96SZq|bcYR}ZFd2!Rc!|5Lc!0%yxhrL}C zo6Bz*zis^9<#)zAEOhca6@H*gAxH5$j$b|UM69TC*uUapeU_9&fu*I3kMh*Wi<6mLO=+T8=m6c=04F4`KAO2lYG5mY~ud!o?ha7Og@b7rst>8dYH7M(a z`b5n$`+aXO{6@d147G|~tLYG(Nq!E?OL*YeVt0?k7{Bd4sC(+miOdt))KiDX(bslA zK}PeiJn{QP?%es_Hxyb!l9ua2w~x$*d!Q3EgEb=ImLt3m>CPMH64KWun}iCH+^++p zSb0qO7tUkhwKTr|BJ_?;CETVMJaeyT#k36XE>l?CN1tU52Wq~AXfcat;d*JMYoEIh zB2V2nUY&MBYilt>>-J z8s@UiuWJQwVCD(=_~`uHJ6sBMGB=QSQDMtb%PnT0E}V(H|b(?PHrh}y03>iu|V zyuKTF6obV;sJ|HP$32G-2>f-_5IldIwQvZ2n=w90iSpn;>%70tCJLPY{0HSkB7I}N z-`&cqbR`(Ty7~4lM=t;V#rDpIsV4uyW_!o+lHIrScn=Oyv94)TpG|bvfvDiusJwPL z(73RDeXXJc_5bjNpwq5$cv~VRK-lpNi0H!s7x7bI6boW;-oYP*(<%85x&$SMY2TSh{MsL`c3ypTI41k0CN(6LY2A>84AC%X*bMpN%r>=HO zCza^Qx!Q^w>W+w>tH>JE!QgFul~a^FM^>JCA$WO}NaIDisD;g7bK$mU;q{@@+dj$x z5zL8Y!FYS&1RzUlLz6-*_r3Yt=}qCNB}%vmR_3Exl1_hAVRpZ=75`{kSp0w6OMmdG zVZ~b+XXeW&EPk!W%YUUq6-MA&A-}gEHD2X!3qB00!r|+d z{Rfs25}`EY4~EZOl7+M?Uw}`eM?YU=3ko^dJ7t>6><{J-tKQOHmQS0;+AAlHOz3K0 zRTkFQ`T_N6j07Laml4*tAFZZYt0lEcR(BI1nV7uAf4w|5X0oQL(Ej#PwC)VP}B zH0kc)6CU`H8$QzZDH{`agcnsYu=16W;KNEF#|SRRdOtLIZ<>6T;J-mAo0!@5@8%Ta z3i)ZIu=M?!Hn5zW!BYNYf+>{n?R*KX;6>hd@5e;yVHAxQ4dMtm!%_pNtt~5#E#$X^ zUxwdE!cOG3m|twv|G$4+WAy(aBR3vJgMnvv)uHB>7X?N4dpxh9sj;ym*zhZ7#J}E- zM79YiVjY(lSBZjbxHk?9vLSNHupp!2BZmdqIIbKD3Krf%?crSwq9D*0az!`)p5mYj zuI&djxL#Ri8E%tuquSr0CLDitqPbYqrV$6v2pz)lgUe5G@-WJDkB5v|b;)#3v={A4 zyI&yS#!{V|aPoHmEUTjx-SBieuf+{Ppi2y0<7bd26cs7t_D+=U?CP*bAvW zuW~zX}y%OY+GJ>*J-iXEhA{Uhs?#u)EPB+LuZVq z$cvXL#ay4Pi=+O1Q*4C(r7d7!NASEH6r|>Dq_G*C_wf{wiJ8~ad6hq1I77!DZaWl^ z7MAob^z1F13m0a(6@L2CiVfIxV+*}5eTr+|FAl&MXZ3Ck0ieFt zWk9AT1miy=o%z-|l(QGvj;n1rjQIGV>kHAb!~4%5bs-y1Ms>dxe2wwQWM}v7 zT!veFn~;HQ%VB~OMtm1p&*Z0%Qe<>MK{+5qf)%v}H_15t^;=2cW$J)1Snb|z0IziK zHgcD`cN?--xp$4#%nB}T9MhMH1Ty4Q&o?0u*9!Fo!oh6rJW+YEmeY7sX)(51XC6^m zv6iFN0c^I_b_WhZ|AwR)t_(768g+zDNjE8Dx441tt27tzXBVJCUBL4$KxMmt%`QN| zx`3ZpKz~qilR3TbkLHN|4U@OFOXv^}3}yH{cbE`yhl&mA+&rnfiMnm0hHUT$VnR_R z95O|1HkPGYSc8KVpEp9_SO*ue6=L{=n^81j3|zl#_+_s^SxApl_J>dX(52zybvb3j zCOg7Zyn!0>nmojLP~N=e13(FO-6+hPDiq36$6>(8Ba4?vU%0O|#MOu%$j{D?Gv2x* zWR&mXR#(V4|HQZ4kP8@R)8yVE#@V=MXKLf$4!LrZn5K77a&oWn&BUHyh;e#zF%X9A z?he(zzwiuv=4w9oeEBG*=#b#u6(O8$t$cF0bHX1;+JJ_AsWV$XiKFlI`>>4E$Q+&> z`#0W$Uqd#w8K6(sEE%gw;U4&ziwDX_=W?0u=PhfT1-Y_Z^D-Hoxa5o--suT!SzSx9 zX%18YK9`A$a2}bW94Y^iRy~l{@GityqJ6s>3%0+a<#f^od;t{nzl)dP4@-gHjU5;8 zi~<yL70yA-F9(=0mp3^n?@IIUnsv5w7XpVUgG z)a6e%mOSM>aEWU3)-1Azlm9Z0>?J`={zCmh@-<^(%{`J3rL4*!5oPr@_Fr%u5T>QO zg5Rf2RUMFtVe0M;Wu)YYjd=2n!P}eIM9NtQKaiH~cNWy5ol?j9Usd&yJ+Hp3(Mln9r7cJyvWPE++XDEPc__*At)4=VTF}lhB z@?BJ@?Fc9ynRR;4&VEmZnJGF}1_K83jVcz(#uA-9tBCCg87pCIzL%{^Y%1pkzx~6$ z9Ebjh1Y^FXN?)S0YFhb*puNsR1%>~czRrof=%1+DnLEAv?^9LoqseQ1aOev=t$HP& zP`YgpV;8fw1segI=?|fOu{7zrA<{2o9=yw%P$~N7QbnfnSa9*p;Q$@5lh@B;g7{}} zAdE1xcfrkek%nz|$*&bBy0s5OsHtQAoA3?hzxgWXqZsS${%^R~i@{^Y$o8@~Jl_5( z0WMMJIBUVIMJcb`pS9S-@f&+fM=QD6ey-6LA6H-bPxhY+Hf z6FH4cbuKieOwGJc?Nv6c4VST|->}GQSR9rBPgVsyG$wdhr@GQpBUE_GBMV1lc`4A7 zn#iw;Uo}6pm8XI~*$(G)z34#689FupsjW^)%In#~AFhDg9^8F{uyA&04T#%Ue=y3P z+k)E}!GoVm`LjXtZ-Q@%lOR~wHmGA=ng70*ZBRex<|8(Ey2kC3*OO(e4rA2J9n2w5 z-mE;r<@qLg3<5JNe~7vy@G;}o$-N{cy+}eSmOtzNq5FI1OJuS6ww3yjN>lz9sKsH* zB!St~p7KYrY`X~2!K(+IW|)sx&a8}&vpxg$bE?34h|wsznrPvP*l9#spHV^9IS&)4#BVeL(Mc| z>JvCaRC!&RA|&)#$;oUZ`v*u6U%&E2BD&n`4qmh8OaRdYoD+PC1rGURt>9t^8`6Dk zDuw?5$+m0YK(r5W(Auqniqi+t-=TxJEz=*jSTk*&ubfKqbrg`WGa{Qp?sQON+eT$K zP6Orq-FS_08Tc69mF$=Cg&h1zRD-Q*uns6#boqI82t-d=onY(d0&t!7&o0tdwJEW2 zXIZkm7mpKJ`ty)S{XfJ6+Ad)j;yiptAb#pr))QV{bK*d(o8V6cGuF6BsLJj46wzmQGW$Tz1l7DjuJvc z6ej%FX`r}N(w|u!fB1H+6|rRPrZk&xAFAMea4HJ{$=cp{$5SL)SabU{0^{wyeE6d> z!31W?cqd+cv0tbvGEF4j90~8`J6ZG4GQL|TWIlB;>Nef6bPVFjqSj?&xnU2#B5|8D zS&Kl}S)8o7v9yJSt$tRHE)2Hb82ZO>&Rors<66#PP^r_CH9t|2=|od@=5eXEO@c?I z+@SAgG8z$5%>v0f&h3@`U~FTf zh0ETSEpAR(@Qfl*o=xa_dv++n!*sYCiy-jLf z+oqHn@GCSBFx0h{^n;_lA5S9AyPB>V*36f#b4cjGm59b!T!cukO$F^2n3Fj}t*~DF z!09SK(V+=z!VT_ZqSFwxiEawWV@KrU!@A$}wJLXBX?Tm-7sQe@%Z*q&HPn=%Tg<-J zN}HPeKcGe|3eVX}`43G|<1@XiCBKEaN8?#;OH1u&!+$wQt_6}r_nqV(ctxqb`bsU; zC(82v9+gQ=B`av>^Oi4?qgi|lQ+IrR&sS|?d$QCe|JTwmf)Af<<*ID zcDdIE@s-+)MIB0@^NKXF1a}uE{3zn8l*uVDt)?uSusDY)m{pO>eSAsjU^#zqZR2nO zZ9&1RfL&{`*;qIaGuj|fhS2{Zoli5K!`@XCXPUeaoJS?lU1@?Ih-`#22&&2G!!<6P?m!{0p)LlJzq)M-&^fMIuIT!o(9V-1x6#ED+WVjyy zr%`0Eevwqa&7mXDwqVh}xL&$clscNe2mgXb8S z=qaZ8HtxEwa9U!LA|a6^YIM~s|8b|M2REZ6iF+SSEOSM=QLLu(`pCiZG(K~4r-+}F zk|KSql`E{@?CQGj%P181kWtt4KL$-}A>*|U_98dq{QP%F&M+51=r#XKD0Y&^gWBcA>En}H>TgsT`22Lk3^Qj3f z2U(eL8QZ4iJ-8hZL#Zxf`x;^#;7TS$9h+^#Np_JX>kp>>)3N1?N5GCL_RkEL-StTw z2~sA3fV*Sj?Qf0(g1rZ)Ka$L*Xq2;)X4g(KT(5lmlQ3%#o6m^}IV}o^WPHAH%C`$jK!5cGp zU}o>cc>B=?$@qB3&#^mbojKmo3PpwWX1WDS1y@lJ*4i!jNN|}YaQklXKWd+&@63jf zb0+xm9#lR=WuZFJy5T67G0jpKUq`#IE8N#H?(5Th6^Q4@1Hn2nBaf?ApDV{T+MQ5| zc~343B2RKjDp$vEV5hbbMrJQk;Br~F-4xnh7Vo%*&rJ7kflUo?aRP2(uCW}8IB&gMLNXiF)5Yn2%Rp&`Kyyi8DLLpZ#oZe*4p zM+4-B7B#v#SOv|8z=UUd*37AP>?%wC)|)3ak55;Lcy9ZxV>`PH$o}9*lN|e5NHV`Z zbyN^&sj-oi^;tqzu< zKY16U`x3=#>}v-n)8L12)D2G#K7ka9xr^Q)=2OHBOd#yBND5)PP{hGRB(pP59ngU| znX{9{1ErLuoZDQ230CIU$U5)^lGto$(_dy^aeBGoNU6)j^vTq?8RD@)c~QJNl;7aPj_#|OtcT;5m;Da$hF zH1}|F%i%^ql%+aEhd{wqI`L(;X>xDQ>E!=!N?IkiX5{|3Oj-$f42dC2h4z zW#^Oy579z@D~rI%%-*UcNBAYr?c}r+t=glnpp{AIM5)O;t@MdI0>%f&?%9!ft7^$8 zza;*{ttw-9-n}Fc-V?*vQ5`3eLvjwMiLk^jkH_ zQQsK8==UgjVSnzoD6s{W1=14!TaE6TmK{O;e?;V5qZy1V`NAn<*`o9@Jr!U@RQ-21 zhA-$E(js;QBeCF!c0bjYi`C)fF_c_aW-#PWEl55+_{~KwIaG}@yT$Foo@Au)!8Y}L z=kpTw|97UeTai_j+c?WfJq@*1#0|f5&ghl$j@8w#wjUGN%s~7$Iz~c5^N!G85kvR* ziTpWqTEl72-FQXAX)i5JQpdBoP5kYz{Z%@d$n~c9&&uVBNiub1D<-BUKi7Kt7_L@n zt;wa23=?obHfe7COJYL|jVzyQ)Xnz{Uftbl8k|7EVp+MFTQAUVrg4ne#N5W(jV+bk ztzc1o5GK(1Rk}Yf^VY}}$LPT7l5MHUzu_>Z#yu}u)laMHCpeY6F{S%0Ft#^lkujlV4~1hRdgqOv0!!0q=|MO=@fDYU5En4 zaz^|ovU}(oP@TDH0YvprP|3Ys*%3b!(cQuH1JOM!qWc_V?_WJ1`QWaOV%ZhC|C_?H zvzvqI7gC<>+;6GIAUq?{-9rosSCEjkv5#52^y)Oq>b77a-{S9haEX~;DR68N0z2@0 zSjCitP83afH`bwXr`T9ZX{4Cj+;n;UeDe^Wjx|yDD4+H|Nj$kVlv7K(n89PUXU}h$ zPHRS}HS1h!uH=2NI!xwUvdqQ`rBu5wR?2U?l;2RhullsWbE>ib85o^t`i&$5@Z)Sx9-154N7_!HEs1klAP@BA&6M5a`UaNTB>s|$&NnYMe*uCYa zBF7)8ic8Pr;>N;8Rs7+ZWhK3nXO4F#-X9IAloj_LJ99h>R>uVM=rf@mE5f#*2-C|z zyR2qTA2w^VCt)r)g>*J)3~&I>e*PpnjkmiQxPoRJ8K4`8gzID;f>456*;=RK;hywc zbK=s(C1Ug32F@vxLDekBNg|*56N4$|vpgxPo*Z>kO;;-bED`3f&w%*@iG<=hcn@|# zCz<67;N^+TzJt@B2r-fGvYN2V7AfOIm+?Mjd{_jRc|>@{s>K>-%Sp7^FwWXoJa~@y z(BL^zR~R|ZjY9wq5h@tXlWPIwvGH1%O`D7B+@YSKb#py$$V*Sy*&;ngo- zW!Lq-e?K-hpz9C%&mNA{vBAr81-IFN8nUIM{4WZl2@KTSA&UFr(z3*4ZfCBz5vdgY zY`^T~!98S0b6ltopg@^(}_$giMI9toY`1&?s3xkKS)wY^?m zwTUT#yoKIXBkQ`Z0$*WHP!{F{YhljvL1vsy70K+3H-(u`%U!yDe(kQ7PZTX#FqwUk z^D~bVV{EA8bh-l+-V1^3UebMOF%={Na(b zU6WEZ+f)&=aoxqHmU~umU;TXJL4%bN#>&x>RD(N=(ayd6`J`3?w5P33+u2fDH(Wf# zcQoBS$$APXfwIDha6fs=t!KOQ#p@_6xLMpi@8f`=6CIJyrQ%7g{Orisxh=7l%lcY> zuI}PrL&p=#kR94uc}EhuhhRKm;l|At;}wl zH@5wsSQckV`KdC7MbvqcSmuiY7fJJ4EIDu)w5ZcqnFaG=n8{xS_ao{&^jEtDRZyf^ z%9d^pIV2Rr8dzxO_IX{PuqEL?)1c$-cLXWcJG5r<9r}M34YNuJxdrxmOBpZc7xU*c z9Prcd7{5M#xB)l(hTkjv{>twk{Py4%k=XdxGX5h@Z!F)w5a$QVEnQf?l_=guCd!{p zmhVk=edaN~Mkz6$-uavP8eP73p*O3Kw=o2h$h#%)+IGvf+U`lTDcl z_bdaE;rFlQ@Rmm?0p1$rx)E`e8w5ooKPLvXU@)z3PGm1QxQXp&%!#_SMBAc`MCxGo zy%kL*`2U;>ovb)8G)N`A;|Ch0>-djz!_J2jk48qke^E8nQF{lq4>mcj#zjcp#`6=RIDHlLWV(jZ}|epUx8_38uWT zk6T!-p3ih3(0(k@6ibChYcYrT!nCHt6FJP+n+{K$4o{p8Pn?b#W|BoC_aUyYD>nBW zy_GmeowIa7Qc8d7Mu>bN-G$y+qUSmt1f3e0&rlX-s8HM(#f{F#m4|Va`H^nZkLg>u zPS(+cph|)nrzYF3P*$@iVHVnPI<(sWQZgIb)lLpC0XN0)Ik0<~q3l{>2TtWraNT*K zO(Wi+qp_W3{tey|-G?d%jDH?#)-tkfI7&5k#u z)Y+AS&-xN7x>8ueQX?d&HU}+WA7j|k#_a3~mL>R{3t5n`!e>Em#$EmuoXX(`a$i`+ z>TTvO>OsfQLBKZWC%PvR;vY22$MuRy-^L9tYy-AVCNMean%@1`cC6) z{@+Qd3EIXA#frt6Po0od=8$w2hHytZ?t+|mM;Pu7vf$5CR?mt2aTIkN_^?ta%*v5} zd==FN?dMqEWNsQyf*m@ev2kLMV3x#NuPS)yEPFALe?+hdkO)q>oeLM)SGc)l79XzT z!@p`Rgc;d)BL6w7v(nXx{^SqnAl?acmdd$$iqoY1J;7TTklh}UmicG|hvpUOQ%Hy+ zy~E=1n(b|w#=xtS3fz==d=y1ZvJ{DKvBix8CBcs^sp;Gw%6o@?!vgz*ukw^b0yF2- zXW0w|U2YBD#OlsL6DixYWY)|4;n&PN4-`jqEN-SrY8Jej%{CR zzOXZ00UxJ;!Cydu5}R=OClscCpJhhi%wBkCuyBTGI(;(Lm6KYvpHDKY*1X#5Mg?W6 zQu^)wRZ?;*!Ctqdw6GeM6v-dP#Md9-neZ3N^Acv-B(+7~56>vWiOH=y(i|AqP=owd zE2(yG%O3^S6ap?hSiyNKFA%f>jW_g!OQ|6kolFZvMx~Bmmd-Xw_r(CD0eUHKP zI0F`nJ=Z8U7y&bMEUV>=RCZa>mRPaBxr@pIoTWB*ahL6Hkok&bz-VI40drlg<4(V{ zzFko%rm-dImQ92ZBw|=qkC>1gHhkPP{1@R>tVypjgfV*9$G3W&0b|L;reIfCPica~ zk{FhMaBjOwUqtC0FW+>!zj^Sq%-hB3shM{UOdrpD5a%~j{-WhuYgdb*>L{_NgP@=J zaFxFMRvDA0CJA09CJIr~U<%O}bv94=_golWfW$~*FF6K%Cndg7k$3Q^BgVgou{GeI zRl&?s(vK243lp6G&)TzalG3c3^0OKknl0I_5MMuiG$x@_c$zcT6h3f0_T~X)FvnQh zcJY-_wU?GQ#v7i;FJ8HmIJ+VqK5TN>!iL(7@m0rCHs`HBk=e+U_;4>lorkD8?(^(8 zfR}}6N9ob6XO54zYZZ&~TDW@&W{wBxQ$Z7BX>gg}aUUr+G&K;vF+Ou^?T#BS<7T7& z;1{gohSV@SUO6&84hQksxRR$T@B-}|T`zNy-Ye+(}liBgHx_C1);8S)Z5F`~bxoV?ZZWi<-7qxH2~J}YEf@agwuypoKMs0q56 zGR)%)dGXAn}JE{;Ow>)w%t4Zv7#| zcb%jQrn<_+;y~z&8Pfrf_&!#`7@bZ&|_N_f&6I*jV z?K8P2s!k-L$vC6^hub#q*ZZ#jLx0xu?bbA78sF7`Hr4XyY(F#$f4dRBF^zxv=i-d= z27?1_a+bf-pIuSH(n!3sN@Kxawcpr$Cf+%U2yNBb43LffY9lYaVW#An3u?PD7xeZ5 zzOskrG}*#HI^oYQ&0bg>{1&gc6gP-K+U*Zf+W$Vt{kl@Gp)%=xzG4t@Vo{ktqqL@> zG`+m3=JTm^oyOIEUU$aHtEm6c+jsrmaM6yp^l`c zB}FVmUZ}G=ayn+}so*h=z-{o3n>3t}d|#}9d#>&WNren0)b8LYkEXI`l&pU*mwBgb zMU84rWJ@Q?Q$M>-2)%r}q??Uzmt=O1N|l_SVy%f)vG@-+c8#&F(S5Hk4K8cCd`3m1 zzdfN;B({{C6fv!NeQB($m{R@ixvfN$Y|d@kxVNNs`z=*Xm$N9>kjkE&%WayaD^#{5 zS^Tw%%ctmI_PwWTX$pbxHr&&3>{dzbfMj)vpx z(gy$6P1M33nq219QH_^#joIFk=`6%y<87}|A*XHUYWhtH|5vANPk%T;<%!Hd(XvXC zCR$IA<Clb$`4otccg#T=N-;IF#}z#l z%!aYMakXGXIIfbiL)r=_3>Qze`I=Bm1p@#hOC%>%2k(Fv?h1*MoGUn2jOlc-57uP0%p_Mm5Hua z$u4Y*Tq`Sb!m}l^L|>~6`})`5b;;?=&r^l z&o$7q266!0L$31KRK87>uW^-!r}H+Rm-4=7mHV9*;mre_5VCEq{Q!&o?~~EgnO#5 zHp`a2eMn?5(zYvNsszI=(~Y1J9TUTN-Wwu!)> zSH^CnYS6u~W^UP%^P_?I>oc@`H$Eoi`s|6ppZGN8`j%RIsdMUdd5wLA%JqBG^wl5y z+n(Ek6=WJ%hR~D3Z<{-hIsM}fpj^oPKIwmj6-n<%vDu(9xSZ5x4Sr5y_-Efh@(*AZ zhx>DxJ!Z2uRFBBas)OwBCBI@txh~kte5nfmgh@kU!~qn+@=HacPjeo#;g-Q8C^EE3 zJssS$d0(z?#(bjWGD0f7NwkLx7~XUk7n8N_s*##3Y?g)cLZ!HZygZQ8chsDdig$dM z%sMo>3EOgFOA&6;b|`fG;gvd6aG|$S7TmTPjhDW}d;yd`CFC~P>Xjz^V$u01z7k!H zlwk@nA<9fhai)Gg`jf4{L1{_W71?=Xk=bT$hqASzEw;*3l=N&(sL5;7U>9N@c?F-- z<*6QVExrq+kyl?u8cEXX>IN>WVxN$~-ca*(nQGIAp&YnYBwRE0hueIBLO?)PYCvrKEd{%ft!iT zR>ZQ2lG?{_9m-NlRei2G zJK590zfLNO<*@yyMt8AmvaT#l!Lgq=|9(qJYKDVrA zf0XNOt%;@o;qQ(2>^VG@IpgjBpmB}Ai zd($|_N#)N?IC7Cpa4nyP94b>fBk32SzRj*(hXG=u`x+W+Ep|rR8$pD$_NP7>VIF(Q z{E!@IsZKFnRM2|=IZF*%Smdw5xk{h+kXh%NvN<+gG_V^%Zihyj` zl=(aCf)2!i_b5mGo~#XSu|)$WP9^!(P!cV8i4NwA4i?X1#}=&X`;J|_Cf4aVz>mQvK!j#7Tu`tM%X;V)}L#=Wk?nE>v#xVv4a^DUk!GJ((bPt66hPtfqW^`m0e z{lN^r)PGpm`g483iG0@Xz4?!MK&52RH`_it1n9BBW2A~;bjY#NO)4_^s1W21Q3EHb zItPKl=ki5=&lSC(py(;Vg8hmfygwSRZa!E~H)%e|j{Q5h6DrHgA(+Q$BiFi*VFn0} zpokCP$S(gMwActat7hpyrqlk^W`F(~6rOL)SB?#jX5AC(Jc$x z;1Sr21lPbC092AknLTO$p_W9J6}yAh4VR;i&$r#dzY5kB&7V)CPtCl2Nz2Ew)Bp4P z>@Uhm$X0_kBP()r@VF+Zv^8C|_CW;MPMX9!t7sd&7|*7~!uRuXG&CfnPmu1}6$y7MB)8hvD$Unvo^ ztTrBeadGShek=HO@w=Vh*ZF;$-;enHH@}Vip5pfczgPGT^7}BozUQLiSPAbl_|4^a z3BN1(9m8)bzeds&@teZ$8h&m3?&cRe^w2{&Ka)c-N0p5pQ(iIl00Q_IuN-&aLF4r{ z;ow8`_@I9iKlDMNAO1+hEO;VA$J@UI0_M6Y;AV|)SxR?k5KS)wb!{7Oqw$QT7!x|| z+S`m(V43f9q916lArm(a{6l%w!# zClkKLg&WuJGw))+3L*czi`$!TN~;C*2f;@LgWr{pIMqP(C(=D3%x1LqtMUP97qBZI zaFQ$BtcBLFBVE9Y`4k6+wT;n}Db#J?Dd2{qQa)hBHb<=2dQq}BaOJ}a(!)AQUspCP zL#Y2T^wrC48?9R)@qw>?!dC7>{vXDpfFkiECvnm=V&E(t2)W6B#`R%}48WP62^>-3 z+))V5ld$hRY)S!q2*5+|I(Q@>8P$14NP_1P2an%YSD5@sm;MFj6ieSYQR8!9o=dFq zk!P@14xQKaLzh&p%WwGa(Ou~&+2)%>+@Hl(fd=srD0}35iK>4JDqzYI=Z7By6`aai z1+w&i^n4#;QPyk7O14)n8=CJI1lx{rGtUtW8X`AQW}-Vm4$J0do*$AX?|#tACgk_m zmgv5Y(jnN}Rk}_~4Bj}JT+Yh$pE@T~fpSqeM{2cqYRbEAV&BXEB-gQ{+ zuA7#-vzI_`W|C^W>r(vCi>^a0vJ>TSx2Jb!F5J$vR^_b=!>O8*G<-v)U=-n1on9<|y+u_kP^XsTgBw43Y zvtyrhU-!E@9(0dx_vqyjoX9W+SXc)|WGNz;<3eB`glMyU=FDOwm(N{V43gsX#C+bG z;_QTQmOO)i(*fAPd?BU=x-(dHFO_R+zS*qA66I47G@{8+=<3t-5wmJKjX+h?I0Jv| z#S|Vqt8Vo=Ulg1&iik!Yb2M@`@riCZDGj`dxsoO}D#tpPV`pKG%`Qic<@l#^Y;rkH zRgP<2j-W7y%xyIA7|Zc5XE9h6+jlg^^U^|*^i&;)TJDIc54u6dAe=ZtWw3!Fe; zZ$9v27Pw+e+nP$kRGtECdeA-gy1W9gVWh$Kte8aiUP`bG-Xc2Q0#n|i${^#i zJMK>QYC9`Hhr&^Y->Gny!%~nV<@dQJl`>!ey-P3~4}pzewpqlm-gVSr%;;Rb1ds!N zMYc44n5ZgbkdD9Y7OiO(9^!{zW_%fcGyB-ke$M_V>05S>gl7{9+m>vSdGupK)lMA6 z#7{nr(^P+OA7P?Zhn@6{H_#-!Xd$OCVl@GM_(ee+2mu z{qBI5lE=HfwXnLd|3

    W%oB~P_|CC*R?g~nByNbUQO*ae}4pS!pgJF48f5C*f z+6D{Yt6YmuCw4GH)2knYcD5H@5=S%Rl;uf{!EB1ia;ZPe@-I62K zU|;J6&|~U&WDdiAfYkREJdNsBd?|-CJyOC4&_N&>JmHXvUhJV2Qb|K{EDgztG$hIY zj>aVH$~1cq67%VzN@Q1K*pmu(lq5|1m?bAc>D1n~19hyuZEwVSA0HF{0sQaAzfxyC zNs46fK?R4Oipnjdh8$zq!>?4^zXU6*GFgue>Ii`H+e?4V+RzT=PWesst(a*W5Fb#x zQ~urRqm*B%t?&Z?-SxH|p6XqwFMOt_`eW@2c&fK+-)>L!Chb$6>eckIU%dg3mGf}{ z?dE9Dc>`8ObFD$8W^8#W#C}g}cG-ZcBaFHL*noPRhI*jA2DVTKnbrvCj*1;B0E&r9 z3}9;ndV7Vb3Z2NI8q$l%fYg_eoQOrNP@sZi(a9;z?t~6}(N;T^Xuy-ZkKwSaK+^wDhJj=XSM;0Mc zDO)0=w?(W96}H|6EihS7MihhJFLc`FzyPIGu~$k2b1DI~H&n6)@a*JM1gt6-G)x8! zzXuJi=URs|X#|o?>n)DJKWc}%22j5tRIjC|lB*R1=%x4~b_`+{2jRENk5h|3r_O9v zvwuz`8`OS$BbKgw>*+?_5S?dvn>59N)}BUPnU0!h;I9kUfpB zwVHNj9LeYbl`t_6HZTLDMjNB`r0wzrfZ{;gqPl znb)iNK;pDFY`Ob2k}Cy?mq_jgk`{DOb|g+L#;OaXSdkF$_+g!6M0>Ggk)!nnl30M| ztN>5g?xyuNyW-)<40@6AF`e<;_M-YS<7ogSUH7B_pVWY7v;(&7rWy2xo}4tR-%C|M z8fO5fNuWvf!Z%`}rl`CqrzG#vX17`&boClh z7fZ*nb1#NpjXRCU{QpV-i;Il9}J>V4&r@K&PLe`cUA6UG_2_7h)~m{t_3R4 zz#(lLyfUF`^He{B975@1^jL3Fj=n-V$-I(LDN$P`Q(PDptjY5Z$kCF$t*R@jJq(ee z1`|5G?-7O}%qXV`^uQGGR4;=EqAQd~tW^%aiyeHoQ64$)!nl5mcF9~P;bJ5N%WiOc zs>fg~XSp)DJ6E92G}G#%?h0#H%UH0%sQZjm+c^X9 zZ8=9`KGrdZG3K%ZiG=7ABFzaf}|ZPTYDqh7!+Q4gkraVC+nP-_WiU({fif2yua zgKC{*)cpZ~AZ)M(xrgPIr-KBHIvA(~$pT2rSWNYy2zAUWSVC?YEHQWM7!P9ffP=}D zOSyo_tl1v*Qly5UtMhv*z7;heMPW^^Q!hv)dY-feTkRA{-dUB4l?lQ$t86H+h&|3f zF>I|2TbDvMt|<*$(*t4a!<5C`z9hm0H}@!GRKvVM&J2gaYt2!RkaGhjt(E1oP!CZ^#NJN$%RObo+^ZR4{<(k=; zq<6Q9I9^Ua)rIYWQdQg@C{q2}1E$Jv4^*nI3?TPd>E>=J9UVVG4S^mO@Kk^4cuPIi zEshuc?mfo~J-)^9R(h%%=_U0`;h~W~4Ct}cC~=P?PP8h9J#ZZ+K`9AVU9?S{c|33Y7bPNnGJS_lBN>4p0 zQre_y1S%(*drUa#&&q+zXqaeA{cP8MR>60paje(#t?K9)5AvM*Nh9_2<&sSsT9 z-6~!96)6j{_dGpd$5NIVyE7r6o8x_Yyj88X8ut~k9gTrFCx?Ry$ES)oJFW`lZ zgKBTq)xJH*|4f+dE`AF7s)9zKM&hsE| zY`NQv?aHY7fJ@d)RimIO3F@OIfpAR@nZa-^x_blz4%S|#pgIhgbr*ES+Mf zeP{W-*0P}WPQ%`;FeWh8J|p&F=jh>~lFdf!n~adP*6=*sU?kSGc0v?_=A?}^^|Mb9 zrPLHDTpqMGV+#V@G&~El-EnL^gfq<8CmB_{LKq-(!;{t`zRWnjA)b9CTME*KB0)%~ zX3gwNNCfuJuJz}S)^GFgF8Njukb&UirGG@#b&D2uRs{ z!N@@=Kuyt7wHanDR;gh>&z=#(__b5eY0TRh_TG3{#|b#i>@*N8ffQG0b%VSMObL>a_UKZxGdwQQzvQ)8j+GMbwFmI#ALWA9?_x{$}j63{Q;-(XhiE>{<_RR>O|` zR45a1!P*Q&=U~^eQ^Wi2u3-AW&hP+C{MlU_joNTFVh;mImn2BnG!SG02pVl*E7$sAM8))&0%g02hb9#@IGlD$o1ve9&wZ#j99FnUJe*?^I zf-r%wO;r%idRzSjD>Tv9PnaNCiTexySSzjfpyOg6caFMa z2QoYlFHbaK)fBo63t4*vQN(JX>3$>%z_8feoU{Qws+;flLLkBFA zgl+<5g3jGMFX?>%_$m~!*8deft|1j_+tU;Tr{vV7Y4B! zh`52BLsnI`VO6<}hL5l`xC6`1SeSKIpe07u19xEYsQ)3?1MT$nz?y^C18bc1z#6XC zftIxOz-(DDZ2Sicff{|+`GUFKimyp71PWrY+CRWd=foe-pohd_-PX;p#$z3Cd@l@B zHNKEFDnDdZBp30LnE&45;34r67plr-$|R0p38_2bU!m?0SpM#m{a+vjZF&5Ef|L%1 zzU&N8u0W?4|!irO=-+4Ts)Z5sV+FXYlarDSUF)E>n7=;nRFQXU7d5Y|{qg zmuDS3XHVb2qyF__%W2We7%0>m(d1^+ml!x?v#Hv@04ZUdyRqKE7LIDYksCBPKUiPY z88=I^kyx_XwD0kAE6P|j2d)}~vk0a&)Q1~fK6NcK)DH1F5ngqvV8Gd09H<*E{wDYf z)I-zs#v^cH8y^TN3sf!BC+$XI*(KXs2Yj!jZFivf?KN$)j|B;5_C+?<-*H;?;df zkeOI+4tQ_YC)RsB%5WC2@f22&8>V)iw+R5)@WTD1;Yr^(_;fAg>IYE>L@)@S^`;Ko zH82@H9zJK!3LGHS*mxaFF5+0UVtDQfayE7Cj{AE!x4`Qgs&YEg<=n!Z3FeerpD!Z? z`|@(z&cuEmSiax}G6oj_cJi)WmJdYnt{u+m%3V8e4`jwp9Pipy6u_@fNcS=76d-V# zrExva6XCAiPtv7=1VZixyKS5Ys26SZXU$1BGCN-?Tb5SLUx&1EIAXawn3Ravax-VUB@J0)6=7C~F zeeaUqlR$}UO@|wGZMx)vy5xIXt9c;f0Vz=~Md0Anw;JR^sp!ou6J$etC=Nj!rXDLn zxjY{;QX-Q#@q+J@@<9M;zlrBV_QjppXm)N8e)WgzSS=02yKuZ%m%53EHL=u9ytA2; z&kZ2wkC^jT$w?6A`@x%d0BFC7XAlXlOA*O;alnq z9Hr#xSVT=^l%0Ob?xPB_vkJWOpaclT(I^3z>{?3XxNEaIK?-Y9RzF9gTh2zxy5xSe zzO2lvYwFQyKrUk248A*JEBBGCZ9G0%iW866mJRScF{IKufcwj;S25|8%R8H{b-a63 zebTE`1H8zAlhA9Z z*Fl!7O)ZaPvJ9Nb)3@Gus(20{)HzZh#l};8DPYuTs5Xz&;jrdmNOSJJZBUsAI2SWK zk_RWSab}4}tENtoeo=jalp*I~P!LWoM|~vfToR>Q=6SFSNYumoDQt2sIpjszI6K^a zC9w5uX1%`SrM{&o3(}99GWY9>U9m>`U26;P*9b1=!a>&2&Skji?@_1edvF!FA`b5l zT!p(Of_kqwfoQ14J=MbmC4>wTbI?_|7My=0NTGmuL?@zB#v+Wt$d3!Us~w2L+9Bo$ zgijz2Q_nd73Sn&c4>DsoM})k?c`xoeeJ}29)kP{y`Fs&@kk1DjDW6xiY#oGLBmC4P?N8lL5Wt6vZoT^HEzJRYPW7u6RM=88pr9t0cE(d^%N?>i;j1CPHV9~@3%p1mlX zoj3ii+;kKy$9I(aF}?bRHt)dY*n=}#aRReZ-7ja_8hJL=dQ*LY%ZHAgg{6LdoCrs} z4!+P9fT>W*A|GV0pcdFiB|ZgF7^Bw0I}v&ok~k8V;xKYfkyCVP4OoXpoCqrbv%Ki> zizgA@&be+K`rKNhj`@}M4d>2JDbCQD)?l#_otc%pyKo!KHTa-{xvIhOO z>^K%JL%~Tna(W}so(;5iEs?GUcfC8=EP^8ll zQFk_LTH9GoW~z<5fUp|L;b%ZjZ5DboZs-gJ4ZxZKtgT0^9+ZuKBL`7W)$zYtlRR{K z1tQc7OURZcbq5%SGorvX_E^#>QV+3n4!i{*D3Jbk{>XV#A2B?_9);_hI}M(nlq;b7 zapX$<=}Jl_&RgL`xtzP*t$MKaQ1fhDLB&0AB&ZpTq7O{1Mhz_IiDeTMqu(rPDs*(FP(I2_1Zn;7-gk!&Js zOg<}Ds%}6IP~Q)SYkg+y)_hmhn>;`Z&C;muLPPL~FIla*ELo-@+JZ@xiteEA+WDWa z>G~f3M=w?3?p1Fh zo;DNiPBf_v0<=N>#7VCmQl#dicA)cW_Osn!Ve3RfzL1XYYY7OtJJZqKF7eQi&FX4k z1Qv`QPVdx*(50@$x&+Y*_o9;sj58-oo?C5SaE$HGigsFrmcXj#>WtH~Fl1+`Hq%_e6>#kU{c8%Xy@-?OSOOU zJtcWL2lG)Mc%bUp8(8a4sLeVFDqLgQtG<~i10|KxNAN;xqayFXH(+`6xW&+hRKFiI z(AMb(ZrbHtRd6B4@)oFG>0o`0x|5Isu# z!&+wGW$dWh^#_@~&g8IhDPTqNc=U860+0{9=u)CH{Q;Sr3!z17kp2~48u7?wr~$LwTHG)MjQGC~dWs+V*$7U!{mBS}p< zDPPUkNj@ay>!g=;l26^jq}c7S@@t3qG!wrZnOZ3MyG+#m@9ZA~LE#Q{2Qi{yyJ-Hi z^RZWv2Fw-PCA_^)>ilhJTIL@p6g3`%0y?wI$oI^r>TJ)cb+9&W7wY`5W_{os-W$te zg;ta<|GxgTG$__-3@)FnRU5_w7DWCIZBj^Uz zAY_6s-&b3UunyO*opk@jRiOZ>^6H{-bRXyTaT&x@eFK0gca;+AjgWXg2XyR{%;;6I z{h84`(SEeUE2(qFqF#Xs%R^vh%^v^<=3rniQXk^o41F`rQ@sQ65sdLgxL<@NICPNS zsDss2ZG`2@;T~2127wL6A~C(L1+uDZ9YkU#sNVn(i(15C;#y6qMudWV#MX@Z*PR3& ztJ{+Zc^lc<7_yBVbr(``$>lPzZX%M~Q?#Km1<5JCrB_L+DB2yGp4dB9w`#3Q;0}|n zW7Xj@2kXcaPBCDwG^+%f6t(@}QsQW@Xv?h_Mp)OIbX`j|=NbSeH7(i9$qzB0@&5oE zx{i+t8rVqfHBnC^wPt%&ccCKHD5&xE4lr1sV#o{trxcRYep-6ht#jm`0(J2CwTHYt zSmHJOszbrQbV&FBWT9Q%CHq6i@nmHCD=yb+%&`2X8J3c(So>moGpnWq?Z9kIJL^$D z&Ld(#iypCZFPf;khId<>EoB3V61mS{ggs}XF)a?nQgfKK?igX0<| z97Z$dp3Bh_)XqzYTjq&}Mqv2ZWG~6Ua%TgA` zHF$wxi<1&Q7(=m6f6YlhNpi~LPiO0tUpOfq20`&FFzNVx7+<#6CJ8sHlP+O=qq-4r zX;nc#XhsSf`~h0Sxc3YItqjW@)UN^{CEe)H*K#t&Cw4I0PJ#T&J3GcWM+OfXZyigi zjgo-(A@PcX!COsOMo*Kvw^X@9#9y@3-StOO+pNkEP1|Co=!KNj-Hc>)4AbnqMT<0O zcLZCHrPTG&2~Ro+Ux5RyIgq+pA)=}ulVSiZS<@O@pw^K|cHS9IsmmGEs}CD>%HdAR zuOwx?x)n&s%?WrE#o;EAftzyy0WOjT&BafbX!@>4LW+w}&ncrN-MDn-1HRFV=715Z zo{dVak<<29`1C!>n=wbmGOmx;cd!x@pi&IbhgY}ouogT;RCXq#OzOKL`YM&4FUcO! z2jnu^A^=G-t&xO4{TnNynWso6}*x}i3#9|h-k zh=`T?JTf_jA={?@awS63r`QBK$j;6hI%Kf{QJvy*{L1aJ>ir(|J< znvIA|Gxm*d*3vNed=>b;*a!47l~-G_z(BK9zth9_bTsqpM}he;NHnz^jc(@l&n40~ z9+wMQSjL+JJeMsu>MlgDru|z7`8ZP@FHOo7qUf0%QXAE|5+l=~#Ap#yI+HXus{Z(3;>CwXx_k!u zVcARrJmN$jcIVK@&K1zF?O526!)l$nULMqGEZMAnN|Mk<(?BYX$0-bp2wp5c>i0U1 z{uBsaLq-$ho;t*Iy(mJpUci8~V^P}P8m!5ty#*82rJlpHf1n2TmQFwMp!81I>d@&F zw&c}mSF-Z&s4&b;XNr1(c)@ADxCeGmWjB9rfsl6utM-3u22%MLb*lV-%9tVW6Xd!ZNW$tD*QW(n@Dyp18KZWdmB6}RjFyxk?n^~O= zJamZmnZ|`?@jKnf%86J;{xDrqv83TIH`iPHa zHa}XpY|~zI(pGh`l#H=|y?S^EE7%Q{d&_3O>TH{UR#3X10T`f(!B+ zolU7L007$06tiKK&|U>beD!=~ zc)ZkrZqv+>WSS#WRAm9RMi?Mcb)rbs6sd6t%xruGHGc3}EmeV3St3vCkY+5p2C&o_ z6IHgL5v5ruXs%14X&{=2paCR%gJucowmNHZ0^cK(>LXdJlIQW{HCX%Nj0BG51riXa zOo)@2F`)0Pk108Ghoh#wb=Tr5{L@ld=&wNqYLECgsG0Ibk&Z%WFBSZk_iRRtaUPon zq)TlB_jF6}ifk(%x0xrByOFj{vxALP7Kh z%Gw{naJ&HHN<2^bXZR{&swmEUrAyk<;kZXfaX5z zT*RU?^|LGSLddsL=pYnYz(OBjIT+|?uQp76Ol;`63}jP1m3HmUXKg#eEoD128%feqd^L28~9WsGPZn$ zS-@fg@!-zfmr&I@zDERZsjR1fFZpiD=m?5WzWW8V=xqYOL4AfV+UPjlM3JnO$@f3f+Q%I5msvY0wbPjix^xQL{v(Y6jq@^b zY`-~96B`dyZ6Nm{5Mdl-VjHk!4b*_Td?JMr3Ox#io}6Uyz3{ZTKDn&zv7fT}3wO|7 zLr-z3Haxk9T=>Q^Gv zGK4PFDf@n_Q|^SU*>XW6sgzV&7zWYO1J3?7Uw= zMXDE=*Uq~Q{+3ZXel84g^?*?0iP*V4vEYVYP{_Hbop%Lh8EUFd#OarsR>Y#oV2|Y< zNk7)xfl91wWV#d8N7U^ww~)6HLaO`NX;Ny=YiYS}<+>i;U*{}wx4E?0BW58sTjRh1Xn}maf;wo+BS233lG6+#|svT1y$qVSgx~ z{NI^O&s~>HKRi8saxy*dykz>ma9aMs$@JVl$@DGh=_e-B^G*SAQhr@}dZ%Q1ZntFm zgX!siC6A!@?A%k5_-{{7msXT?*_~wlCZwmcuj>3SCi7pIo_=RCJ!jn{hrWL4>626G z=Oxo~($fd0(j!UyADfy#rR494Ivx6^0E4NEdIukun%zxGgWgI0rS!i(AJbv~We19s z{(K4a9G8U9p530J!LZx3hjvp%b&164K|IFi!YKk4zyYY632n(_1IZkOdUGJS4CKL* zGwtE|d^T<2%cn&<%_I%p=Yb? z)9!QN zYin>ellmplqOp419vPf1mB9O2S>al|tu|x(-8b!^>#5lU#K!7uKRys2Eb>I`+3v`I1Jh?x ze8!r#QBZ+rgA2b1$5xdRZK^%PR>iamI|NgBquPBKxdvOez1iony}KXW-fYmY9fJI= zb{hFJd{?u?n|{mLDIRp>N)u=gBnt@JqYBi$ETOQ~#DhnLpTWYIJdf>BDD5$T?P11t zqCJe-ZvNKpMr|*Dt2X7Ctj=);sX*ku0{n_6o_l;K%nn=zt zqdvvg-biep{Pv?Q=W8?(>qe+3oXC*Fbpd8p4{!+7XUa}C>Rv^^#ZdhEFR?B-1Ic#z z*J|TWW!~hNCHh>DiA4#BvT1bD*ZMkmiO=v9u}B@u-wEg7Ba71)rmHmkdHVH2S8Z1+cLSTlF1v z848W<^+xqB;W*ZmXwjZHAx55|W?1)*a!SXi@L;F~tqh#UzYUdS{jioW=?s`B18(dV z?N5XC863A+lKcV3&WVx`1wM1GWZvHe8vgANnJV;hQ>1)5%iIWaK7{ z&%^`q7=lDuUhGyYE+Uhf)L^7L0xL9iq_|!BlJ?6gHbdc#*e9K$17rI$qCTVU8O_r3 zo&{Bvm)PbIb>n;~6tyl`UV$aa9@thr8OmE1#8{cM7c93fnu6b}Qr}!af^Xlk_*Pxb zP0z5JoLbxEU#b(*u%!{C?WwahJ?KgpM)Ripj1xVxcCHUXfKLHFwR4LYSUvYle1H6F3HzFF%esG9#FZej$0hn^d5(*<2PwC zNpC_;e~{wT(uy>5Qmho9kWk1$qv*uwG23?M|ALy}m1@qbu zN+KHRA~dLpSK4M^*^849`-ZR0hMiEcE9Ic8dCkhbX4c-=64uZaJ#y|6)>y{ZT*@2T zzDezT5hD~vO8Y_K4Pt)13j1m?VGgupa-gbpVxZkbK^9SfOG$K3)3!*Fe)3PZ#S2`G!*XMa`&(eBpz35>#9Ar4J!&|(DSM3_>mFy-VCwJ)cEmFB z>wKWgvJhV% zF&h!HgE2c0vzsxy%~(rD)w95fkPES1#(DwgBb*O0MYe&PuszJ8l%P8Tulr9Mx}G#f zI3F*JE()NM>bIE9ws%zr9POvAf)&Xe+va|f1@P!_=z*$Zf&=QQ3`U`$ps0pFMP)GD zHZN9J%oFV@BO1FY%{t$2$-bfaQp)PN>`v^NRFk;wQ=5@2J$(?=^bU4PuUS(yO09uT z!59KVB(^4jE;Q#nx2x)FZi1Xj&H3JW9Ck3q6yvuTfF5+6vw(D6W1Cm0b@w@R;iM4W zB?rNxuarx2;Rq{#fCp`rb2z?H?>zhnS64GupKr!)Mk#yr=V+r27>W77laN#UqP2GU z0d-?L>LmBRcb?7}L}r|iGSC@fw@h?}d3EjuVvIci=R;83SFN;20k zYf!A^uJzznQZ4Q{*u%T69s)rnRHa+pC-OOH8iwPEoQc3n9ggYATk1I`V6GzL`tkuF zol_H@34Bw%%()>H!;8sip4S~(pdLZIBj=c(Xno);MPgKIZP9g1%EvR{pGefUn$1Fd zXKSt6gq~0G&ms93rO+sybZg^!3#Lr9S=K-=Oo!xb%EA!U^y_vt4M7n7T!ad$fyokb zZf*oxM}fp{af5@qu?B-PPSKuoZ_zUhoXCWQwdYOdv1LO z{%{#P7$+zmPzw5wLy-3`gM8mL=kk_Y|$lkYwf8ZW&D{r;|vR>RzeY#C^hk@9h6N;64l&- zh6UG)sG8+GPV!eWcc1IDS8(>Piu1B%1ZBj(nnhLtWtje3-OKYBoM4)%_zPmU=E zjVDPGCX)om?(F!3n!0~a)|B8HR?WQ>=1C3OShCORGYf@5XZuY1yp>wetIt_fj?1SI zrh(XEJZI|(2*64%O62`b%o}Xw)<@4~l7{1f#p&mefF`wGB$D!6>!5*1!zg0`Gz&;1 zWW7V2W3^~`*YqxAzbxEg-(89sBYG<*v&`Ruel53kQYMCmzf;4TR&MqxoE+)CyjmCE%R39huDWInY-LLxgHE1WxUQlV!4PW!illuG~{dMkMk+tOPFWosTa=;?=?p?gQ0U3!u}_iCh=}jeME5*7$~V`X4mo)TXrcFLE9RZTorg z$H-y*bTs?q9<`f=4akaKAF&3(oWgG$VF*yyBNi>#6U=RAIf@l~xk#NM6b>y_r)f_> z6>5*E3bdzE_0t}&`VQ4XlfMeYZgn(b5%{HZ8lw-zi6!uO9GVqM^r7@K)Iz_bm3I&! zSO0T6JpqdnI$|4l)Qc*thDhNu{k}GSH5F6B?99T(D$H}2p$a?Enz_kp=o*xre?Dxv z=#eJY(|}2xlLM`dc`I8`ASf=7#s`J)D#G~*=Q$Y8wDPQm}@mQ2QNl z!VtcYBO_q1Y=`|8+0|=@fL)%cVN2R!cN5k+1Z-!-5%1ycupbe2!XaR|z`I(*_QP*HB=Vjb#>hrgr;+*i8#D*kb0!z0k?+Rzd{?LPz07B3)0J%+fPmzJ{hOpOcS`wj}I2q#1}!67WxdCd$&F_?=yN)ez|@rWNZLmBMIZ}nrx;I- zMfqTDBG1Hfyk}wO;^pxnF!Y9G6vGOP55cT|NG80;$A=sRZx*~K#D`$bbVxS5{`inS z@aDkVFFxcLcss#+Vtfc*f*;Zu-v03+eN(2~v8*tLkxHoo>DBhdiAhSsSm#_(U?%!~ zYPR3!%E$VyXomP*keYTwH5e5Lr8VSU-17o{O`ig7{0B>Tu5SZjoS{r zZQ7%HD<7n?WOLA3J9%8svgW=$nC`Z$WeAPT-I~=Xv3m!`0no6|owZ3| z-^to2@%skGN9OKr*zXQzEemGVOWgj!@nG&gqhYVx$ZAA>-Y=mpJ&pxu9zBr~1fef?Z8#fYe$Hknq`c$Gz zIT2q=1usN|#~bP`9n0ed(|UCB^cV)FR-D5{k_qHI9{#8Y?{M;yt&w{8!x4MR6t<@L zQyl#L5+6X6c{;#xTG{Z1IalPeFI!+6(v}dQaI1xr81-yE&yaU9^BHMoHR7TpPA;g; z=VOvR!Hb;}pXZ+2p^r7eLq?+IdWEyv!iAryIHGwMVaS;#_Wld&gLXL@t#V|<9y`jk z$BvHJ)5avve+;7W;~WCX&RUk$2!G&!5jVd@%E+v5rJ=I0aIrA(oe{4*z&1ndes|Vd z4a?(8-x0P`3N~Ju06>_F8Vk%=XJ4>(xYvvw@Okcd4Yf0^cjZ{1+0dF3v1guXUbB3M znWa+a?Klk{(+l$>RS#&4l{n86wpLXXZV1_xZV=Kf!?VzfR?MbQU_xgeh*y3af~;j6 zNQzGbV!sQ0cIdqyU$#1woarr@p0DAYG%|G2O0Plo=2%M%go0S;I(^DqeVcjka)(~k(-fxhUBe=!F%&cqnb z*i|>3QBk-mf=I9kj9Tmi@>G8$zg)#`Bi=2;Ow`Ly$b8y*;uoG9GQTi9H@N9kdMA5! zH6m)D_Y2SM6@Ni!BRr#al_acYaBBTu&(9aQjCt~}@Lr(zxsQWrH z2wO>Lt#8I0K2Hfnv_ zsHV12YuZMwj)%4aQ3L7@mTe=x6ATQ5j=x-D^#4G;X zwlO|xdoV6z#9c<)rg-Q*O?NO}fo4Y&1>>MKK7N_BXCm)?!)Z$3Z*RPRrOhZJLYJUN z3+e(%RH_|8UvcP8w4+n%HOW%{zZRfW!G{o_$@4(te^!1VI4?ndAV$!Uke_cJ{yXwB zIiOj8964AV!n6dI|{^QceXgg(uqK7AAVG>`i9 zP3Y4+>eDx&PxGix--JHRqdt8T`ZN#vbQ!kdp-<7!Sd6E>cum^7D>j9p2i`E2cEdOT z1@Jm*u>eWGC=NYkEIJmE#i3`4L(dh578PTh#Bylp$>I=FpDqqPTO4|=c==?kf#P|` z$@uA|*S2A_c`}iA{sqAGT2p-d>yxpL8n1Xm4l+Dz+Jj-t!Wyi2k|Ppkk)by@B0-)) zPhwYQ@;ph(S_^VvXq-`m4fp-Nn?7mnM=n1Jr#t>fCkLR=OVqDVCI_IG(kLe$(4DM+ zP#=23vyfV|ur)d~fc$_R_KZSL z+Cws6o4$nYp-%W0>$ESe(}sRDPagLd&`O-Uf;LCm^Fq#?lN}^^KjmetC+ImlE^ChE z0o8443TC=>+%!w%-AHqX2LrHdC5IuM#V=WzYg8X#!<0SQIcF*BVwit%LBA>s^Hk20 zF(;`t`rzM>|5NaPCjQUEe-Qr>JjsL~mFqYoCVjZ?O>(8Cl z8hZiwF|h%|3V5*|fw82pf)vJ9Oq9I|PJvSGCo~RA(OCW46pfV>(gnbbgGq81L|Ss6 z%5Z1}Q<~MQWQx@(f?qPzt8;HGpLU&mt)iU5hw{&hN-P)1FA_CBl;zMKVhiO8n*W6 zLul%EeSiyh;SaTSfIE>#;RVb9Y6vYS+C^{Xh<4#tWF>N2@-yKO!VM~SE}8-y`n~>z zUlCj`K2tBX=WJPZq+U%)(U&~G-r@Y{g1%DAiX^EeZ7PSv@>W+fucX{?6hpEZl1S2Fz00eruJrhq}aj}uS+$FUGgd^A7L=((fGPRrBFOI^nkiPPcD&rnnYG;^b z{aP?Jszf~53xTJ@`*!V>F4TzH<>LWn{vXRn5pt)=$N4>o>>tXtqqE3IFZJ~G zhm??}5lu{S4g1`q+Ukp1U4^7n>iSkAo_kwBDK@-}p2lvNk3@V6U8sb~&G07tv#k zI_$Sm6AS?WPOThem-kRhuwsR?CO4S1)7`CC7>lkGYbm>vJU5o zVc+Qu++h0-ZYzF-*i&;d=*EG!D%s0T=`It;D5(v3%*exIM%0oxu9s2uBhNxlBCi`( zD$CE8$L9>2(#s(cFn(lB6J-&tz%vt{WJe%4{- zZO(a}SsI^0DUyPo#u9&Q@7Sv2Jqw3tB=Y7nsElYglvXuyX@vRaFCEH{&C$j_=8h*Z zzHWlxSbNcU=UX{9A_Bf116D_KtwGSu%ds0?wFgh23~+gBMnVf4b-T5I{Pq_jAam^U z?&@b(YegXKm7+WKNYFt#UhFq#-FhB{$2khX_V5DhKi?kbNPBG8?crRL$EEVL_UJ0@ zF{`~jx+d~w6=}YpJu=eU<84%I$sn+Y?J*U4L(cov>a%EU8>z=-%a;r!3*T8{@Uvw} zfFIo+S;_V|&$AE(9nON#9;bO04n=!pJLTrHTxpakO9nIZeM>_8#Fqs5nTz4gw9o(R z<7k_+jzHUNMT=Zu<-Caq_GXGh?3i*#$sGC7NHYCo#bVq6j%^=SFMveUHC=2Vh)wl`e6%0+nYz|N~t*-o7m9PfU%=~-%WH${f;WYX;KCEQcqI!4&xfV*j*2Lve(}#a7MK!DbLKRL&NMSM(xZ&+M5_r6Wd_0?( zru<|G5VeqICLJ^$bg(Z2nqG_w_Ky-FS^zET2^uIc^uFolx$AKD7(1tBGzWq$L2LfJ z;0ur#?8fM!;9BtVeC}A|QNC-nEQOvxmFsw5-!AW^UYbm4YS~B$sGX@z_?Bf1;Z*}@ zaUs6t6+{@Z?|i^=gT~TVuxu7AJ=9c<TygHAk#}FJ(9p+t4>%!&fG2GXBee6P4 zRXGjd_q`|pqJ`J_-bXSdeAmx$Yat3q8_(DsCFoi&pfo%H&i~FFGM%_MPaZlCh%66SBVx)fRaU?DPMi2F_mXozGLB1z& zVDE~@z(tOWLF75qc_vTI9P$raD<;kH`6AddZ8;B*G@HJvvncl`=pq3D!9J)|m5F9J zSk{wunFj6{bvc=A-=6B+Ds7l`^erp>S@cUaXZ;6M!4C0RLnZ;p2_u0r!*4W`tr?W$7_CC?iH zr0Z*KGjRWkr~2FPH+MYqmb~G70LAf!^Hkh$u6h?-+0L_CcAg)Hc~po9EZh{%32~Xq z&O7a0#P&|b-iH+&ESY@C2DCg#?~VwyJ{9bXJwCOTK|8Mm{+0@@0q(+e7DT=LC6eFQ z&?w`TF9h3jsfc>4q5%D4sfgj9OT@fX#A#0oqKE$sM0ciQr#voTx27T<=Gy~y-ZX+; zgIE+cAE;WW^5CB$SE%!jBRLnRG9AB5upE<$ctuC_OhxR#Dh}xTN@R;%y5TA*$IWuS zPQ^||hXL59sfewx&_K@n+X41x#3JX%z^z%>#Ms9*EP%cRtJJNj;Chg)Ze|eg#(`hR zqb5lzy5XTDF5SL+nSeN#kkflU5gg;?$Jzsd?lE8)ZA_Rk%e5Jk0~-@75qD??-S;Sa z3V#v6F8@fC;YE1e@f{ls_XRM>(xky!QI5K$3(&3}3@KqLT(2JCRqML4tYNS<2r^oO zz}^%PSP~=h)vq*&PlJ?b5T66$1BhGQDIh2*rK%hflHI{szgopkSh!pVauu>1^pte{eyGjs& ztMye!2koJJ4!)kmjWFz?(^M{qYgq`vp*d&*R9z?>;NV1flkc^>ER~sIo72?0;{kss z;Ze>+Wa8!JfZU%_9w`a$&?uFyy?o4OUuV*>1Iu%sYCkeo)Ua+>gbB=UmepjW9BL|Pnt>GXG3++N3_o$eO zPk0nFy6jeWRd@9!yl8#y$wbf96%uZ8o|W|{C4^2>hf{S40dyxKT&>PfSh>&*V-a-y9~lLjn`Bl zRU6b@yzPeXb@GLbRB$eig*?6w+@vl8U11BG94kx%@BO6uXYxM$L=>v}vYTjT(E{F|yss}l-rl-1;UW(u8@I;_ovEUz@%)$f)%y z3h7*o+KTvJC*nR#_Y<740|rXsxK#9tur&q^i#;K&F7Jh%QekyQS0Rg42@rzY@IdxQ`!oiZ#tl1)){iy1fEfci?IZR8$@LbK157e?Ql3Vb&$s1* zw0E&Npi};UlrYyiu>+*)5#aOw^H<_mV4yeOL`9)$LJv@qX1DghBud8|ju_0&=hoeb zuo`~}`+$~(h~>zJ<%kQW$tRGDk8ow+NTcp|8pA913x@S}`R905l=>U*`HNxLq=w_$ zL0nVzAN#G?!)gyD)CHg;U|IAk zoSk)gn0_0OeL%41d!_1zh|(D0Ai9qH;JyeHxByBU45TJbEiq581 zj5%{|W94CpMEyloy_4rL(Vl%fwrA9%o2RpswY#;a8jeDomffu;BEZ!KK7a@j;O0^h zt*q@1o+d{wwrf0F6mJz^?gcztO-M;dzC@EoG*xY1+FH)qWTM}_M`N|T-_7D)E$%pR zhlv{yw^&@ixJQWV7I!}u#BiQk-1o%YDDEeJ<{o; zCGKo-=ZJfUxYgobhW(&Kzqt7C7WW=;?-h5RxDSXsU)-OH`-r$d6Zdg(pAdI}xKD}u zjJVH<`@Fa>i2I_rzZLgoaepW7tKu#ccagY@#r>nWZ-`qj?lN&#h`UPMMse4QyH4B< z;%*dov$%f}_bqX^iu;bZe-`&Wad(LOfw&)u`&V(5xSxposkonsyIb7P#r;y;HgWfg zyIPBSY8Z25e8@5#p84_vz|?8jV~mm90H zB)V!>#6oT;7v8k+elBMgVxQvq8UsehT3&O{ZChkGN|8l%mX z9kDh=4>zzkRxznE`|GWdtWD;m#>feq!jqPlTfJZq5Ax!54>N11yUob*M7v-d&5G^V z9m#5pl%S9`m$qQ7vAv>c^&60TiRE&AUe(iVXz)({x*?JHyejka=;)S zqD}fEtzM4Qg`C4}<&#sm0_jB@o{By$MO162lI`f*MY`fQLr4S3 zA3$?#zmzSe#q^jpP#IW(;Jum_9vsQB2W7POWc$7ZK4T7qskF5|fgLEIJ=o4lvnPp; zcwkuV;o}%NY9{&*^K+0aW->FG%tt1a2Gc@ikanp;>z(fz`LM}kLJDn(X^Lfq z&F8dMyQt|$+LUEqE9zQYbi;>I1l*{oby+nkY7q9_tfJKS zC-(h6_nwi>ZqB;N~WeL8=qyAMgqOL{DbCRqKte@g*=NAh+_-swL20juO1;!l$En0qfN z((7aHdx(iGKIT54V@F_$YP^0z?Cj%G^D&pKBGp{_uHd)cPx{VvuCSfRyI8@;?L;bG zCkCjnF~((nolo9N6bFm5Y68V6a?Y;M-fl>M0JvCCm!Qfg_}Pm3ZdUNq`#HZf6H)a@VtEE zF4qb}hKA#P-p%XD@AdW9>JXZXaH^GdD$;=G|$5Ge76;Xg%hfVTI4C-=Xgo_&bQU@!VggoyQqPE*%wWNl-~?1SH# z9)#rB*Wsf7wrBYC!3V1U_YPCk+(WR+j9hvygH#{eMozz4IdOo^3t)hCtf;s;;5;9rcH#keuNuu&DW^Le~j+^{;I#eP`Y&|r1y&- z8S3Z#{hAZiUqwM0cjb7jpQ}1ieH4t}vqmKTs1?6+eb~Yu6g(HET25gF(Vzt0DM&c)QvGyg9UH`|$h$AjWjy{_q>KnoF$ zEwSpmA27>^ui#gm_bp$;6S>CiFHFGJUEi^0l25SW5IfoR#8Yp)b;U5{X?y*Qd?IR+ zex`TH4HgnkRR0p|Y25X(X|u#%9TOsUJ%Oh_QT+|cp^-~$4}Is9nQIoB^U}P&e&@7g zh@X}=CBj`se&264efv?##Jx8)?z~;PL0|7Q6M1u3dNn7q+ffWPEuRE$+-23^R%jb< zo;R_Y1}A z&T|*vFKyqme3BOUQG{@7?!9m8J`ySz=IK{dp8nsNxDX)cCtoaY!Jx_iJl!KCd|N&? z+IaEz27bI?A%KxBSVPd(uNIkY{X1ZOTgzUvtrIJD@<_pKvr3lZHMSAlnxDpgV$A7H z@3WS?p}qCH9(v4uDX6e%`+s!SuCM3k+4Z}=Uc3E2@_ogg+U-B@>C3OJ-9FP-%=hN} zll8lvso&-9yq!Cg+ka6zRP4_Azq9Kb_5SZ{|M}(lzM#shyjqAmrJLkKepJ_P9x!P_+IyMD4t8I`sJ;RhTV0sdGDZYD1s@!Q#Qb z$J}8kMZH-6EG33&m|15JZj=(|46dUw$7JI}KMXheCmVNeV&|5tTJE{TGZfwBet{cg zw;uIA=6;3t z2WRtGI{&P3mtz-NiOI{6QGEX7&v_)jZdb0bYZJ@3^=;D;9#8M4rh$>sqFE#M`1UkR zvW_by9e&MSyX65U*G(G!nTGWmuGX+d!{7eGD*r)Bl23kK)DMkaA%bTZ_;p?_;u3%T*Dn2PU`Y^`mFq3jMpru;dL5@G`xyu?vno! z`v8G88oyiPEuyTXH*2^T$qN1v6R44W8luc{jjY!FeoMnWI{ju1M>HJLklnIeBMDJk zU{b?NHGTVaJ5OnPaynfezf1WeI{j7+J2d@Inb~UOD;hqo;WssWP{Yq^crPn@u92%X z{!tBY&~RA8ztQkHu|LYEG<-_)#}b1YvBacC&eY}4#+syjSi`q!_@u6v)a}ShT*^&} zlL3BJ=cjf4eluB(SYl8kU()@D`oES?=FZ|Lq#eJ3fN%(QrsZm#!x-y-0q)hKn@c-=*c*tMN7s->TDp zrpMK)@w+rX{z}6>J)VnoyZ4&iU`M*%mo)x}hW%QP3mW!n_+_0R*7f9(J=e$z4KLCC zuhseI>G4hK`j2aPSm%FQ<6qS9UoZT8t&EbFLk-^YIucC_i1>6PXCOCcW5ZfC*cEAhY6=O-|x`4oc+o*@_t?Z zofU_;fg#2O}zhK zAO81shc1*AiiouE9jiZ!{d2wXpvt_u&vlq|&E;6J7M=dZ2j|mkiCL*(o&Ob`Z}+$6 z+g5qY{mr#%sTaSgK1F}`==8#XRo`y!ux`&%m$~+AIz~^?-h@tX((UcgRqcAmbbi}{ z{?xHor+?-Y{dvO{A5X=vng#jx_zJJlUs%_h8@UyGQqy7cf9Hbn8M@x13*=|Z;gVC( zGo|S{mA*8df}ZpOdTe@aem5@2x8-Tmvw1=OQQg4I`C31hTX3OX+5ManUTM`E)v&bO zroUWyjo{K|Ghz8N1ib*U^Td5ECJd7|ydY0p{6$p0gSd!@?Ds9}C(Y z{g$P-;~Fl=Hg|T-8|yc&NE98;RUf|cAHVkT58b!v-OEG{*|%J~X)r%9cTJR*t;sS+E^X!y|#a-7>joG_FlWSf3Uc^(AA+kSq_vSm+;EG z5Nz8Qlv-WP4;PnjGpB_%c*IV2Hf_0Kr~%Tp&!(|jn^bBP<5=C()n060o{+W}o9W9| z8%F1rt=vQc7rk1YZRU<;wpPjgj?Par%T3NpYck6no1bQuo0^x_ zVwRhppJtYuAuZ0lyLv#zVCmIe=!u0dzv-r%x;hw!I`UmTj)7w5^0l>QdlU20{?u&m zXlYuDRc>-#npN%?Y2zs6>S3$jk>~jx1O2SdTll|%j|y(_HcC|8{DLJjofea{-K3Ss zATDVJ`yF{VNS8}Wnkd!bD@e1NC+<*dM0Op6gJyOc`9e=Y7brL^Id0w3(>1vKMzhRo z{BbPvs%2e1wXCH=EsGOxt|~0KutF_yoZ}44_@=y*o(Wf>tj%d~!}yCz9j#L8Jg-xE zTh4Yiou$-26JCHX=h4r69Dyt-v*dzuRqa^n^v;-VHrZ_+w%hDl;%sAM@C!oy_jEtc z);I-!4~pL=Y4o!YFRkM^&!^7o3aIm1{OY_o@#e)di>4UUoBfP0rItBXtE!pGslcRf z!dobB^E6rGf|bf~j#r%%KSQ1K;lPxgYmW8BDmAfGscX(r>RC-gDehPiP%F9?s}(J0 zsulcTV#WP6GiOaLo?J9hRd7_7sp=nkC!`;hfV3!yAD^>U+Y>UvO`zysA%aCOk`r1N&ar&M)duqw# z>n5rTN-ep-t7-=PGZjItp$>p6Tb1*=`Z*{&&5{6y7te5Z);qS+2~ zz9Nmeq@>J}HwbOj>dc>eOdiVp0@DtPi&a}E?GVyGw0JNd7aq(nVjfWU4S3B06%a6jP1Y7LXrmkF2rNc!`r#Vu^o$>TMR`FWz7&sLarabY)m4nmvMftRJYW2r|i z{jk=^g2y;d>WMw!+t*x=Kj>9zztofQ^1wy#_Ygj#+nSG~AM#L!`f6c);lWALEqy6h zXGT2*OJ6)HyhW+23Co`qdXZ_@!ZbCnjDs6OXVc%=abVQ4JyT|N$V_+?EuXRN+8T#X z%@may9Kw%FAC)du`D{SBpZ1$+!=&G3_f5K#n@dyk>&mz&qaK~#reld$EkWm&MCWD= zvu}Lrns>3MCj3VF5WYU^H}MJ5s(vhEw(?8y(mIZhdeui6?^)>RSy6Pl;AwL-c~z6x zA?Y>nL2PkJ*rm=Gux4WMMJvUQc&EBr>>J%*bF)%ECXDDlOL5cJc38STTUTi93aHWd zDD@KIL8)ijfycy+_hJXSEy*v%OY1m7P8Ete4U@j+`Se+~k6&u`6lVK9gK-pH^j)qd zZdK|S;bxn6_#MGLx8ZAlV)1T1j!sfnQCCrRUVZpcifg*s&O6Ja&MJD94<5OxGfCUe z5f1D2OL51!E_H76qQV(%Rfc1^OD%7HUE!>@YQxe=A3BL%YMr#??^Tn30pCA_{O$Hi z@FgqD)zWwk^TeWgK6?aOml%HahWHBg2FKEqu1AhandKf;jowucSRP+^n4V2PLsj2D zm)<1lq9gau$zU^SmQ6AjVUs2H*=Ean_ZWo^pz=Qzeq*0SkD8yR=HX@=@PF3E;i=k> zPa=4ybsMipqmR-uqGyx|?@{WVgwlHR(sViX38k(el$I+^bDZx}=NBu~`S_&sk@NYq zeSY+;DaSUC+E!%jag*LQhxp-JTr;yizbmLlKc&>C2#*Tw;+vmFPl}ah+7Z$xC4G@c zEyB)%kBTo1C`n&=Kd!YIem z=srqu2RGEyarjV&?#Oze1^)y8#0Q!6#eYAb)GdS;b^TJ@;c_S!!*DnqO8D%c-!rPc zsv7xJqc_#araF4Yl#_j_@p8w6GWV&V%E8k}Pt@6TM#!T=$TLLw5PjR_e?nQ; zLp;f&zFdyQUgl{6a$ii@#mxT|G7rW>YUu#0@WPpGcHJK8o%yg*W7HLB_SNica_|eu ziVkpDCu<+8=`bo}Ja1s_r0IR)%gkqwDfJAvKy#cJpE>S2py&`h4i2z3G2;~~7$siq zX6&D5{dPpjUch0FuY7iV4$(2>w+LP@iu#*`Hw!QOp2>sHQ=d$y4&&g52}cMcw3!uMwoAc{_po3aX>0ud6lRx0Pqj>W0?N?tJI{RZC!u=^+Sb*p}x*yPk&#o zuQg#Ur>*~#S<%T=+1u5Rp(_73BDAnWMm@l3( zyT*BWzL*^v7~n;-rh)#>JU5R&;BLteZ0qT3FXrte_1?0zgBs}{XvntTh zYU}eILtD4z2W%>@%r$Swt+RQ4iQ1Om)>(j`mq~0eU*y#{iEZn@AF+wJSeZ9O%EXwU@40^JSYiZD?7$J{O4_mTark z)_gJFXHGz^t?iuy#nztwj@B*6RFzq+_4K!P_S0`)>kV5913i7kEviOs8OZ0^v#D*2 zvcHoRk}CEO6$XifYv;n(o`uvlVHz_O%ZT z^uMdMePAop#H^YY>23q+a^NgI4ZLrU827)KipGnEs7YpC#6~k@>>~lexOz7 z$cRMk)EiW5emLJbRLt91R;AZN3!_J=Xh@v}W=2$dp=Z^$!Br^oD)LvA(6FjEvMRF5 zV&sBS2%)F{Rr0&@?S<0pg}orOp1!TGR$>4RM)~Fyv7Ex`zpvzg!9JgB!l|E+%7ZAb zDI0IHa8;)B+bq1s#tRm1*!YNrH`@4a3vaXWQ41fo@xvCr+r}p>eALD#Equbpr!0KR z#%C=2xQ#3BA#r(Kn%*i4ud(s4g|D>n39nf`ZR3WO-)Q4gR(_j}ud(unZM@0CciVWI zg^$~K!NMnOe8j?!+4!i{{)~<9w(`AhP5-Echi&|@g{N(N!or(u{IJztw~bF)`6D(y zW#PMRe8$4ZZ5$6O*MyB%S@ME0unO`BSBtxcQi)~(H|+4TCW zS~sq}e1lC_Y5LW<=CuviSUI!lSLUv{Jh#EDpU$*Ox3wELXbN*Jxn?~=DNp{!SIcJz z3#eio!m#Yxrp8=zYqn*bg_qE1=7Za`nfTiEYpK-IyiV6Q@rJbt}(f9L{6TbiQDN^*Cn$}tw>!YKwi_lbS;@zq|fzTQr;4tFuAn6 zDa3jtaWplDD#@u`1>@j0v3HE8V_rHyT%QT z-=gs*jcarkbhLMcug~8YF0>D{Z(}__Fc>zsIyPS-R%Q;lN76>l`qXot`JZh zXzv>=^bZunvOTc}V3!*heD!iYebQHZv4>TDxV?94|3FW%d)uIzmtM%{2Q=+HeK)Z4 z>I!%EFsK2GJ)%1&OAq(=%#O>>@9Npg{wXZmDU(z?UG7O|;?kbAGqclsZV2~shq`Fn zmz}{>bBe)hJ3B>J%y%NqITwiyueRO0I$aLtoP;l1 zuP?5;3|6(aBPqO5A9p2i7ppGAIkooOuoLX|F0!0&XIxxJ2{ugvAF3b*OT81@)Xkuc9wUpgiO*bCmfi+nX1cDrX>A>2mO9lCLb_4SAdu{&J7g z6|4v;pTq66sVMUS<3uwr^n|F zx_LL)Nrt1`Qx>T7d3`Ro$LlC74+bh#h0`Ajc-&6EstA@-Lcd)G7rz)MUvPyS_$E$)qe|f;^2)QaN72j6@C1= z>kBEk5%9Z$jtWni)9ZI2aU`UIZsqb((Ln(*T=c3(;^0JWM z>#6j*{Ejj=tgnP_PkE@ES0sJTP-Vd5@CPf(ygs-atmIwGGPD8}2~_wUUie;K=3zi6 zUeK>xZill1X?j9Fl6h4<==1tv8zXXgoeZfW*%6+Tay!yj-~ z1Xal8_E!4P35U<)<+t#zK$*LuJm{<}W7LjH(NR%-cR6onl{wv&e%_mh7DO2ERs`XZ z&;tt{4tHh1R}L@We??iy>j?N2VsiU}E-%b?`aNYX%mzE*ojPBIBZTgHTy9lfQ5kgj zy=5nz|GAxIum1mk&!1f{{~_!95`NCM_lKsZarVp&L1l0CcW84Z{8ASX1HW_ z7yU-%JJmeeDz|{T&6)J1{g>o7&F;_NBF(AIZ&7Bu*J#*e-%pag?OVbt1}XK&==Zhg zI-P%#^>c~bPV?t9f8;&bdH0t}^yAci<1*8JOYA-@c7HNEmvp%WW8UA=H{8412fOWr z9&V~z_r~lL{k%+`Rq4l*`MypolNUeaUUcd6IQt1EzFViSTbtwQj8xBU&NkL=xSZ#U z)?-eg!@gf^^(oX@^v$0_taP&ScEiS|tD0M^bm*D8;X{%*cFCD7zji~zRp915 zaG9;GIJcanR7tto%bRn#^+K*$?<(4pvSEUZC#Kt1MT-yoM$O{WumvyD zf9iaTFXnS{+gZ@_Lj0<=_42HOClKvJ zy~VJYdpMeo#8a!%nUW_TrXP^o(Khk(3-T;kXGr?0IaGBox9E_2{ZeFD9+Fp%X&H@IVI_RtP*E)O46-IUOYcEAM{zxmDaP|@2T_UF=MMN zKue31v~T9O5B5b~QD{DWo!h#2d2vf$X*2Wa;E|;Hnqn!XCSRJvvH0qUv5Kejg3Ckt zdFiDB7G`k?zvT)O#7B(WW9j3hhBF#geN5}Ah7^6xD@+MF#lG~47)BgBZ+7_5lv+(c((z0x4mtE3i@~#5>$p|c^i8P{3 z#?thdq_*g$$)8NZFpO9-3WZ5z7mY%9Iuc93G=^!=Y6^0av6yfP6irFOxnu^lpu;rj z$y6#$)kG|nhMsf`&b22kEliRR^Pw)DL6r;x5puyLB$`H_P$Y&8k5fiE4HqfMsNodq z3KvCfW4uF*6r<8E@{UuFVrkSRZNww-SQ-LR>sX2&(4bf*3cpZev{7^|4lB`=H2lb* z1?dbLi3I2dJvEXLj2?>eCWJfbRD>APM1kWtZWIU&OTp{}DniGxcq~QfIHl2hhJb!S zdrYL3%3wys6Q~OMn@I_0lIUs#-iywQ-XV{es6dQP89xPJW)#baqNG$zlY(+24R{Gb zw1R#h8Y)HODU=-cq{v0xB9J4zNTtyh)Brx3s*IGV8%vXj>_if_PDf%;E`wy05g3To zVNMX0KnUoO*d`J9%7`&otP}o2Lkeb#;W2vQ4(f-Eq0Sf%dM3(&>cEZ|1_wuI90QNQ zAzDRCqA|u8iAD{?gv~MV2(pRu-!voG5{bZCL6GE~u5H{m7;16~|Hg-*uQK^N+ z)3kUqLL`xbU&$m6id=jG)S1c;H4r9BjWtq&0mL9poDgD)CEy8$NrM=sXgdQD z-9j^?7?tQ9&Z}Mch#sXAqWDRQp%+*jB7vQVKaoNwqA`Yq<)GB!3mAPY1Mgx&D-JV? zROliB8HtRvOBp0597g{mNYsd=Xp71?S!&@VU>C*@wPKaxTo@#d7J`%X55}RM?63lTBH?HX4j%63ib+1T_$gNh5391%XV4pPlTsE!9kTZQe+9$1z*1lvE0(P5rA z;|v}W0+?}dt=MY}Zw`%cOiWUyS}avO9%7Uw1vZHX6CvZl;Vtq*GME5-p*ho|BT#x3 zT5%e5jDv!uXaQayLhv-WT5&^&Kf%0+zlB-k$CzQTe0Yu15iw$;2udb+JU)7ZTTja5 zKm`^X;#U*2EFxf8f^p)mMMn5vaavYgv2~(MjIf1FghoG13s@JB6@}3sEEVBhhh2V{Dds& z7iXCgJ+}Qb%PiJk$+#%LsEsT(%ry>6F&cr}5t%t-3>RC#T{G`MqD;ovA~Y~6Y?*?@ zDT9VeHDNi8p(e6yV8TXO@Ob8Q$+|}-C~#I$tn*MgM1>lnsVq$pw@8VJ2xo$=qhMH& zcoUdJ8SF+TcPL^pgSLyU(gotfyNXX?`eiAB+e6op2TVx88AfhS7Kj}_vVNi&e3FO( zi6vpOXdOz%*r1dpi`X4&B}OcZE?6Ye78fD>vo})0Zag5q81t4DS(0XP$q9&rdZr!I zZLxY}5|nu~k`Zy?J7t;5g43MyFjurPgFZ)aD@+PZvq(D1G8#o-!64opkAa&;Kbc%) z&S8OIE>OjMB$HVPw*uX8NtQWOWpF5qh!i!zvT0eCz_=GUE-Hn5;VZPlKvb35WD*iE zj#X0(a?NFj0aH=K2rOkW#9~UEFnqyRG6l($YOt6_dgl6)r5)PCdIAH)v~VjjsX_tG zvz|g`FbUzv(h;ji{H(T^)ZtGY3&gOP!HK;M@(-d9)Ja#W-*|utw|i>ho%H8I9cv7 zZOW1irNQ%>2kCi&17)Kv)oqb<~gL zJzht6g!#$DCwm0k3p^A%VxPde#q|4Pmttkuxa`yz3%*Ns9%PG?#?Zx)V}W}82s6du zqVF&sIf$1bn`w$3aVA&<+efqr+sBAx<$(7Um1Oe4Bg*6>TT6z8n`VtJt8Q_#5G9@& zN5{Gj!(pj_QlQ|%S_+FkA$jqUQ8ZO1a4`wiaZoA3MuTK;B7TKg6*4FfQL>1IY2w8h z6r2`fF*O`5swW1b*;hB3Xx@vc}NKsIe+URX+;$%%;-hlR!npHOI7dtew>@J4HZUq0p+=&lk zI|A{vhF8HF8N4VrlZ?#zh*MUg2pQgDvMi7>dGTZ-epxI_438nSArQD`S|=-A*#HV@ zj6&Rktd!WfXHY~-m9;)&Au^L-`OH#S9+Qme2XNH}9tTTfGl~bmFJTpIjA;~2m)i_5 z(sVQ8O~e7yA`*fWJOT6zN2!4-$Wn-EvgMYY7>tv7jpY&k10JwO!9&Pq6t2i(Mm)SY zG+7#prlOPlg}34X@uNZ~E(BYUsR{?bi+Y>w#@#ew%QpO%;$Sewdvht)mKmu#6RgyrJX=?m+GacHvKLlA?KIT5pF z+F_b!JufRfm@camCPBKyu_VF?;`O;p#qY;VX)wRx>nMT}FxSu}RG52a z^UeiIXHK;!0bQbwIA{n*tHtM_%dm$vN*bkQkTP8{8g^HhKbiy~rWuO}AP6In9W^~5 zayIRVNOVIMSd=uEEYcqf5tt)}3lAy5Xpkwx!5|o~Od_n2nQdjwC98e9Ls4aM%udBL zXel&?2ctuBaU6n6vJVl3C zCP$bqD_zYy0XQ!H!5P_svdBOTOfIMjvn?%QQnI^4L-3HSEKxz34w%5OOP2DC4>mH_ zGRq~!$7G@V_r7ACrfh9rCG}VdfNN?$i z$2-Isb|vy?SzgwLX`@rxuysY^e;9pP)0av+_LbQ3>KAh(%ZK*pmUu^3o()0=_Ly!@ z#5|+2qtWe=RK5ef?Z6$j=ViOMg}I?4 z-_@D!?CeN(M5E?-?Y0Ca8tNJv@ISba8!>#IxW@ZJq|wGFujwwlRULo%1F#de|% z*=Q~5pEa_%Onq%G8mmiLKf)?$kmb_vf1x)eO_|ZxXpb4VA(yVj)5vxe{mmva*@i6M zpf;OrNYs_OX0tsbor~6{YmJ;3a;iRFSC8+&F&nu^vObc@rW4srs==tuWNTRjGBwp@ zlC^bp*<5WZmu|?K@5qFn{DzBX|AC@^9ucYt@e^x*~`inJW*ROZe8Y> zIwMmDH|y}~}8=|pXtPTbu zh)gD%$z>WMd@SJ=?fw4RVi?(sz6(3oYAhG2ZNMucy-aPQfwfL;sy>#DCbF^mhO|+e zW73d0Hx+AuUOX?#Umr*Da}lJR=F464uh-DOSErtV&u>lk4X=7d5)F9vEK-ZqGDYSR zIhMBUYU;9Cv^Rus_IK#`y zDu@X;Qk%}kvULrtw`19QBb_yJxp;lNK8q8rX9Y%n0}Ba?8}$wKb+Nj-HJZRPbIAMaLR%WI=`Ut!)YshCSyU1 zx>NtXTGwCm7OVVj4W~3TF1FI|*5e-0_~p7@w;u1LP7hyVl`m+R*5jSfc%!aYb*WX( ztNGfd@xvMpYksK9ta590y(W#1YB;0enzvfzj%ohv*7y~=-jtoMzyDQu zjrVYW_k8OeJo6Pgc_;7Wzawm&Yp=9?cYfG+BwgV5b@~+WQ%gDLg7nfeTIB4Owq<;um~?@kB?P`t z8K8YmiojaJIOziIGf@P-{#>P=CS72bFipG(xOF*aq7W}VkEQgi7CFP^?^p7>5XuPr z3gKqr0>4YRgZLD%>`i=6{0Dpw2KZUR3scYryzD~qiI<+8B4?_6oNy880zW}mBjtfp z1UaKc;Oj49ytFUyTta~K(sNYge3j@b>ij2K=Fn zz>j61pZF;7!mJfHfZrl`sXGOH+giS@PMJ2~6IbwFAnB!NoyZv|Um!G+F7RIn*Af@_ zzV%A=5+4Bu-bSCqtAMuXk(qgqE zaOEbYx*4MZ>?73t1epR~CLH;x;=_-On;>Nl1Aju0GBdz+Z@1!2z{@vVd@BI&A_(6` zfxjl0?Oa0{g2bDE2mh2adZuX;_`*A^_zZC6wN_mN*rDSE;D-oDW$eJ;5=@=B4*3z} zOcsIN1VtHv7ylWyLR{e6bzI=hIxcXJjtgAbN}#*}Y#|8!ZNS@fd=$8}L#g{H69!)0 zY4NZPXrJXG@ZK)?LK%Ta32np$p2N3O3Q`w1MYxT)z!L-+m*T@q=Mp4ddUlAMA#yLl zc-Dds60avN@NvRs;*-GiR*Sc#XRF8=D{@XsTlS~{ViiBZUCPk?3ePu_uRu=Mx1xp)sqA%&wK3ZX9S^vciENi zW11(xr*wQ0_|A`8<1GMB5Jdk=&nl5~Ox{N*k}hyRVF&TUz!wN2(;46gN3C{t1JB)K zwNrXFikzGB3Bo$+3Vf8%Mtl+&*lV>@1+3HYCg2wcGL{M8Z}wTbRC+FpoZ&J-SWG(t zhsT%;hzs07xPx{5s|mtG1Na2NgvY65Qkq?KL(zWp$3fN6LE{2XEWImQCC z&q)zzdUQEv09H&_7nHD)xSS8OhY)@qeFVNtFi5ZZCwwm21K<2vSDiCw2TV@Pv-5qe{JwAavFMA0@=49pF!Odf;*9M1qttfJ0xw?-Cyd zK1>jvJPNFQ!iv`bzxO2llg?Sz=D9cp;seCx%$x3?Sy0Zfk+?uPi{@$K0)IiMq5L2F zO48uvgewUCKX&7%+xx$t1C!_*RE{1PKTvZpeX!}^=7WWU!v}X996va5@aVx~2ag}D z8m}2Q#?#}C^OC6E-+xN>bj@n$eY`>Cwi~&7<9;!=pP!?;af=Ju-T9^w{Y1 z=)vuyHG#+5aT;otXXl{JpVM-j`H%W=pH`;Y9O*nf2YDs)B9)kAK$OWykj+E;jxut##nl6%~;de z=CQW1?y`NP@pv$MxLgz1b& zdf!=e_<<+P=j*?`>IoO*P1_%QlIWH97d#&7jAi=LTJL_`xUA zxV-DhGEN^5bT_9<{q;@MhB>0Da>g3&%wUVZU+@hR8)6sRv(hFqmIq{pfws>C&Eb5D zg$VI!jAd|Wgt8U@v=@(Qpxj(RN0cfiF~*jVfrz1<0t&GB~Smxsy zm0YA3R+@wLhL2bXg`{`&C?&8i#ulB6d?j@v?wJ1JIL72T19EI(H~F?wlk+MyS3$H? zlYR)GEg8+y1JH>}cSGF27CJp1hrJ8bo5$5lt3`_@jHd_5{UknlQ+DzsCT+K{ZBah}k-GtsdHGYerPdbK7^ zG&}Pe@VJyhu%F+VF(aM%8I%S$d$qeA+o+@3uPU_P%Gz@&+Y6}ImQ;PP{5)9o0aHh& z_PyE`$6cr(Ydah*pefsfhW?c@N_GPACOo8O*p<0aISzm5)6imDavv=e*7D=rnmz%T ztTj8Dv~F2j<*1c4)e(Yos@&h~K6J?N|9aBl{x3sQtU~Lm)cU>Ji!=e#c;lFWcgE6~ zvml;7X6wA+3D^rIF#%r9>!|f=$qMaAg?3O($4hX}$ZVMHe~4OQ{!z}T*$yy#-q-VH zcR)P9*`0V_#k}7z(yVAGVl>oQ0DJme-Dbz-F?vSh6 z7^Z_pg^1E@Yp4P3xW1qF!n)-aQ~_Mg;e-0a0=|~ugzY8rqIOW=Gza!uY z2Kz4=vo5Bq{Aa|Y3!zwqP;5&@VdX43 z#H}2JLR>lpaoEZuhL!uT5LRB*cbsnpq3P13M@=JlawEG(8=f;pVg%k;FB)N=M{l-c*y`WI zOl)D#<>-stBV_`o6unN%J_{Ei>gJ(HKL9N)`=o*V6Cr!3`GifwA;j6I?}F4LeH#Uc zU}nysu~tx5jP>{=)uFd1dpB9)qnbvTmfb->k8~FZC6v)>8HLEFK!#RaYJ|97K`~9_ zk3iwNGw1-H$aH-Yl*A&fA4We=6E^0VHqyC`i$~jNH*7p@+OX))qMopU?u>&nC1XH6 z(tDUEN{EvZz7CphHpZ7hW8wSFQBqXV`lDd@2=0X8xU?JM{zjD12)2M?1UkINNAO2| z$*9&f=?*Bv#Vb&biFWUUbtYTO`^%k4xcq&R;?iG}k}=Yo%(kZSwn|2~r5SDQFxyJg z-vDBcRI_DKBiI=_4674HtiCr#jNmC0#iiFF4v%2FVf9wiszpzXST&=7JmpO8r?X?} zGuE;L-G@^7H8>Ba@~`K45zjB?c`na0czzaV=T!dNJb#Jj&+$CT^Pls4H_z|m`CUA} zmglFZQr&lXKE(4gJpX{_AM*Sx&p+Y$r##=w>oT6F@jRX989dMA`FNgB;Q2)4W&{vz zY&7>9Id(e78_#uk>0DOnJmF2$IP$!6`YWxAjw)VlMt%^-g4o*@wScmzu}>`Oc+<@V-TG84cY~7t z7G87f-Xtm(bXREoL{C|%J?wG!c5(3vM99bCES({FK+;sHEt3AD+ z>Q~_4dNd_n0ds~UM~)@hw;VE@Wv2t>u&?r#lb2ju-^2cZGnn&4Tk?){XL7JA)f<;i z0?}WC4_sT%!c!%&g(rZdnQrQ)5xyq0EU>?{oSV zlno2@s6Q+$hUK=DD#cP`qF)=f|@lwo-GaHj?{oG0+E6d9Y?MvU3z{-%$P@}}?2 zyA7WJS(|yejb`txc1G4t;nWwE5@nXb$uz&En18R`vC#X9 zTi@vdyp(Rl))u_PhCS2P_o0VZl`2iv?=*z5`t4u_Pmijv-v&f)L?*y5@GXv26j1QT zDZLl2#Kd0^`-3G4-yYUqH7A~Y`+}_1I9A|3RP}jIK6Mb4%|7124XHVJ%a7&5Q?w@a z0n=YJT9EV}Fr&x%uR=cc7#LSIy>_^u97N@|zQ<{uv3k1ik{*YwFGZ*H1k{8Va`hHN z7zdw4!4AH?l`hV7k`(c@Ox8}rq)R&<``BXr&I7Q=??9N(IS8i9(9a?=eIaTCBj0WY zHlHwwW7ZwX!L>N?KkPsp#(GoQfqgDmi4EK^r+1H~;%KkedB7VlAHbtqb2uG3W6h}? zvQCnIgF2rro0R=5a8sv`^OLfF4NC5-6YpbonWwTMmd>~)4G6un2Y*4vrw;bfjci+VUzc|^uaLoUgUZFaERi5rjL z&Hzp0v7SeMHs);WaXp4EJCDGNSzAuv{`DQ(bC>X`#&j4uEeqcV!nPh))3+RnPQ-$q zL=_MkEDu(iIYSp7zlN%7$F*ls(z5g3fYtSm={Y_-whH`x+ zb)XMtWvl0)tkDk0?-Y2a^artF$R8b>p8V)os+Wf!UvKOpKJ0Q#$z$^4#k*de`vaVO zWKG(4F-U25G$rG2Ds$wn0lVx3 z?<~)eon7)i^a2T%E`i`Q8!PQbkGpWlE2lOQ1G4;4Kg8=v#2{Alb%7SG9Q?*~0i7wL z87bS7+2&?OOUEI2;m1@VmH!hIAZ8NT3CO2%(*Y)=?clqIDf#3rbVZJ3rt2pSCQbMy zA>Gb(=}fasPW+?8^#>@no~Fstj_<=^i0O}xG2R#L;Io&<@;%T;803P9Tog8a$lt4W(z)QK3SL>DI{O2TeI-yem z!~(KOjNRFnvi*b%Xl=bzh@YOSbERw(!D7`M|KW-0$=Q+% zyPT~3$k7is$*oV3w^k3YL-ccro?u(4$ zmvxs%>*|rVLnJq~zE|(A^mw#qJlYX=>w8K-^}Aco_ybCXyLBj_D$V6t{T}UvN0Y9! zGv;o6-yKz(%CnAZM?G1`ThH921ftG9?W`y32tSNjcg4$xJX)V8UU^pQjj#S7zU(#rrACNnHdEm&BKo0vL#VTi~yY0t->;t*utFkQyJ zLI2=oYe#n^3)L;C*@2qnSoAM!eT`X%tgRn2Yb^^?X*x>VP}+$VpT(CApd)XVp8b}? z*~hy^J*qs5PQ_R2*8Ojc;}+9U=N8m)Tlc?~8wvDCDt=x{L;W5p01n$dFPa{yCXE>p zFN|6G<*wK5a#p__UzUT_B*&3)T}HH6lU%3~>&@(ut^|V^WgnL7_PBI8By~!x*WM#d z1&fHn%`6ujMMep3bvV1aj1>ZRZyGRS#F<>cb#Q#>K45Ggw1x1L%D)+h;#B@i<0*fd z=e<0Ck>>{f3g-uS{yNX!pXv(=ckeHv2>$NigYuL+>cTNu4S~N%i7ypD~+C> zI`lD)R>QFV`;Stot(E-O!PTes442_d{I;xFG(;v|`*@ARjw|$QXXpf49@3UI$y#Nt zo{zfQF#aOEXt2m@IQv>l;Hac^N0-(G98US)OM6NU+xG~%UeGmyE*5mYpmssW3;OQ0 zM*ZgneL~QO1pTg{<_OkMfHKyyTF_68f|id2b>q^6)Pn0Jr*SU zAwMkW9-;rJke?9rML|nNxf=@y)oBBc|3=WCagnwBLeQrL zZ5H|=L4$&Ji}GIy+9mJ{ML!G}hbiID$=4aki$XTb3k80ypt7JV1yu#TPtczW`kbIA z1^qx!({B5vtc6@@zs#T}{+H5TQSq4Dus0wmtt)?NGQZK1jcPnQ@CjrG7A{I=88$MO zi$_P9eqI?(^%bc6Dat+-Wq^3vVKV>2bf@PF{8?<^nSy?%Sxm;#YESjFtJI#d2YbCw zUUfrV#v3me&>WRryJ}fP2}f2{Zwe^kwVPIXl*nyrFtjQdQUZ}k^W1rbMTN!9tAbJ0 zS=`Xvyebe42Lt%hy2fZ_3J5)vCL4r*Sk1wKh<^umtP2pFbD2?YVveFBb}=w|R}5^U z@vRmzEzHu#h$n@G2mMz8YtISP0dFNs)3A3MrRdBt6b1|-0 zbPiU<^-9jgxSs1AtcL5!=VDy13Yf=&{)unfJg#U=Ty|{Uyt!cwhQSK17UKx3^^OWR zw^wuywvyW`8I9E#daiRYLr(^_k=os8d;>TC2B1(8-^5E8t3tcNx9BBf&A=$W1%^n* zq6CaKY=Pn1D6nf8YahYT5|RtM3D!09+kDak9l(WaA`uYY7=4E~zsa*&F^~M)yJHjA z`7@a%+rqLJ;c!KC4d|3~Hf4S$o3b<`WSN!8W;IM?vud*0toakzta~O6SgdKxTAWs7 z$;)7Q4P#l}e9+>okR{#1(kC-E$(G4%>NsXYnGI#O;z&jQ3QB@0ej8O3Q;Y4fdYT6pR}ZfHuasUL@~6Q|B) z&?n0Em!?%&xc#xi_IV#M)^XI=iy1TP2kne~f=5GrqLwrZOT$Epc8e_8=`4Hxc$OW` zsIuf{vRw2zw`MHMMZa^4b3#V>IF?)gfjkQ`|t)SRSxYur>ZbgHH*p#Q~VD_tiHk z^|wJ|i0hHA5m%ui5pxE_4$&S3EE6$jrWx2@?wW^pW)${EU=IQNy!6%igL~!w?fJu7 zv8der4QFv7g&}jN-x5{Ao2ry>V=%m~E>N$O1*5o*h1rE^Hz{gaG#tiNttuR>S0a&$ z1~zjPTGJF(>KXttozUt{5mi}N<6oz^BRBe+72?<|i^m_STLXzJd;M#|b>U5Ab1&Hl|wwbvg}Wtd|J(wC~uWpyDn8b)8x75ueSA7S2L@V02^#%Q2k^#=px z0X2+uvY$$B^@r7HUGuWQ2E0{_Z5UG#@hEGeYu75_s<0Bl0NBIQvOrT^prKi5DBoDG zgvbOsNdskmsajFLu=v}sCdMBO->B44zf7xNFJHR2+-v$WllgpQzDP)^_c!|MeMWPz zpAS5uHu%&{A;sqpGzNVQN<<9@H~E?|XvVH*>y&j71>CJ=OP4LKsi-WUH^0c3pQ{;a z_*L|C9lK_P_bKcK=8GszzD7O>A5CT+^VJ6fjsCUhp)XJu4hJ{*>cVT+V{J8R8m=~r zl)!pFPAlukJ@^AJ-j2`+29%9{)u+|*9qHY)W|RWXZ< zO0&?Hu;_nnygvs3Id2{E@6+`~KMeECix#*sc zBY;bsSE~%U)|6`vIb_NqLvAtU^L(**+0rG8ePuOEy+(l{-&nD@qFN@zkRjF>dzB$q zF7f!vS74hP`5Q=aZ@`4}lq2LuAr}dm&S#WdLT)ldwnE5$AvXzGh{L3=nO2QW_U2$+ zgMzoUUJWx1jC_%zt*&sY8HLd^@Yl6?0Ybp5m-wpOH8QI<-hU-x zSDO@js7`INt3l3RW}3Xr9%-rzD-HH$V>#q@3s)I!M^@qG<=2S%F9lv(_67GcKDtp^ zj?kO@pVS{!bu_z}d}m);?Y6H|)TSVhAu2a;&u8$Bf2MyS(XW|Vc#f6Ts3S!Y>7a&N1~xnFpLF$I2m6PM$WDDb1NnDJI1rC?ME7)r!Njh z8h!3Hv9IWV!vi^tDR`=IQ$%dBZ%@M71s?IhKEOjb{aCOX5An62FX5p(EZr#%;|GNn z@cp1m@F8L&c={mGI+d{%;J1O&-=mN|{m$?v9aiIo#U8uC6Azhj;<1~NU5_JSXSza+5nr|{+!#t-3#V?L5Y7n77-748 z{hj;X$^zSM|7fS_*iUoc@7#0FJ@?#m&%N*NRqdw7*bK&4CW@vp)(51=Dc=A2YXagq z%Z|)pFV8wt)MxUXDQalRF!H{g*D%m2jpv@n&xgM;yb%a`^(!9JJ zyJ7m;OV`JH&py?cF8$Bv^u2_-l6;&FyIvE+`xQbzM%J- z2#C&LEK9IHMHU8wf`?}Y+X7X+Q5rs5*EwZhXRHZr4gl*!YvbhvPjqP1x9Bd_6*1Oe zus#oZAwM`>U}H?3UcZGdm8D%Wc+Giuk;^o8V;rEwV`FSfX{5y``xx7l0~Q!;Hp)Dd zX^#`>QmU)56!FVY5G!^YRX%;3jHOD$x}q2(7(&kmoc1`$UR$fbC2B;E0z~$1pQZ%T zNqP|}5NbB2Z3~#BmrgE_^f(#2PY_?dJ`({)YVh>*$B{ZhF|0gksXj^)9=}}DJtD7( zUoy!h^jZ-A$Ry|VnP7>>kChCn3y?MAX7%^jMJ%tR1g}OJCLFUsskS?1d3-=r??NM< zXtHPXglx~}iAU_VstxGC#+9oc<%;8k+5=l%sn|?MYK)Rs&4JOLbNgL(r}NjQ_}V9y zfhp(o&m`F;ypNmrf&!=z&z4>}6b$?W?)+ zh@B%?wyK8*Pfx|F@F9wlv*(IpK7clk3*D(lGaae%I&COn-UE($5ixM~Od?XN<7-3U zWTeA1NF)9OdQB|dNSgBzCuh%_>RGtw7;*Nzp?)A7wLCtk4Dz%iPV&Kv1mMasp4e#f zB%FnbI?Nf*-tdr^G-r)6p?rjC>mG?&)>yACW$aO!x0f)!_y};Zaq%}l&7*?p8&2b&BHcX zqf9DSxiZGPFT~8rYSZ{Un%_#yzehQ){FW4Wl`B|K zF|+zH=7rj$=^Iniuv$#R*v@~~G-EBQ&u3Gn%0&`aGK*=WRcbU(-J@4#s@p+~U!K-p^@5{r!pmTOL2PT38OlyP+5UVgpBlMx877^|`S=Z!W#6-~r(VERU_MtMneKp}#}dqYU)bZepx;jk$kJ z(_*`Mv-vUz?3>RCn4RCbh7MaXZ(lCjwXUfuj5T;x9JTzqs(>fITgYb&gUsT|*?T?7 z*(Z6Tz+O}NcXFZf?b)8nfk=*WU-pavPh~2S&ErQ)#@}^}aO^Y`l7jdiJNrISIY{m- zV1~%`LW;9KXFccDI9zs&Ad0zN7h*H{KI_(nVyZD6y3XFU`@ms6=jF_&Sr< z-6?Kyo#G080m&Y%DfJilVDRhb7N@SC(}qO)iT%cAc)X;>p@V&H6Cb6Ia}YJmJpQtQ<8Z#a9tsq0`A)n_gc+bvHg|wfTHt)W#j49qxSY z7~uWz0uLNEg_pk z*c>M`>s2gJu5=HPFiE>pqMN!w-X;aJs_#kaHJ-xpr+Yt0HG|wTTHqVG<+#gUXT`Py zY@oeHvpx%(_>%G@BpfPEo^(%G4h|B{snf@)Q}pK4tUnMNL@ejS3yV`l=C>A*?L+oq zgo$?^qiAiO+K0sXOMHWPa_M_G+4JN#E&#?CaHW#tLyC-kQ}vSzZ}a$IHn04r$osc^ zlwjAWy{Y8 zqq%5qLd$QWr5l_6!p@7#GGXbw!7N)?gru2}E`+oX8Oaijqj2P(D<>bZJ5C7K$fMdx zIF;C}T8{i~mav$CHt)l^D$9|J1<~Mfa|tRGtK;U|K_Rk2v^ZK%8cU)c7&8s?f%j}Y zcbF#{^Rb)c+q3S;ij^zoYxwOOAId&%{v8P9DErW@+7jk>P?P7!hiu2qCqW{kSi(F6 ziZWxhBSmLdr@lj+J}p9t9C4)92pt?B29IKXwc<;#s1;um?+?X$QoJ*;aJ1q~@y-%& z+AFl;9Pyql-gCq|U%cmucLCnLCd%yTPiw1XSr`06`%z~jeZ{$Qsi#)=ZtUC*9H*w( zs%cWwdTPZ{YxCG^Q!*ULFLA}BARDpN6AgBoCzV;FN8 z78fjv7LF60s}Y=(<=}ua0KV|!kM%Wlhwj;X22L6{r$pzM80a!^lYv14_ZxV~z+MAS z8+ggU^!N+z)Tz4+^ca|yw;OfYz#kZR(7<0AIBei$1GAUw7HkHV8kn{lSi<(w8XPq+ z&HvxP^xYDzzeW_-?I>7<^rU5UjY6zLkR7^3MprU-p>Z!{y@m`d@f=JO|HD{VrpM=2 zv#L$!PZ)TsoHn-g^{)EYKH2_y;KG6XpD615P06XIA5*NWztz+jl_Jrm`rSb((zd(F zB}KQ%p>R_uECr*{z{*vnWu@hTrcg|Fl(z%|O<`XPE_1fwj%aJTA8ap-3O!TTPWZ(> zi~x!|EPF?gWW)H)L-I7wURK851Fv(6w~H|wKDt!*(;bxk8z33RC$7Ir%gUNt+ZdZf zJsbSe>h<`QQC$U+v7(!JIQ61_6R$?-<=@N`dWARf>V%%{W}eV1xrx^x^vb})Pz_%i zgq{<;OcQv@i)x9{1rr)4XK!A9+d&k?!VUQ;FPsWbXqh5t*86$zqn4Y-WL;r93yB)*FG&1j-GxqsN33KvsE1-K<4f zY*B@UEs87{EeOxwlGblTqG~8soQepA{(9(RVly$HX}wCE;a*4i4)h33877v2aT@l^ zOnI3suOf%#MY8Hl1=*|sz7;ggWCifApgcdU%V)8?a>&W{eQ0YnW1L5r)zrtb$d(w> z%&9S%=4G*YayFY+F_X5GrhdA z)Y(>lu*E9{+i*-{JG{;9Qu8*E8>C537VYac?3c#(ho3xgM)##@bj{xR^r==rjI z->Ndd8!e6)DAM5zHcQo^7!JP?wlL!XNv@7XA~+b=MMBL|G+NWbmQLd~v_~Xg z3z+yx0^R!EQCaF}@OMa6(fj=Yi70lP$>opwwxTAKJ^rl`Uu1W+FA#__-;A1|U-tU~ z{ykE?#~+nB%(0`H>*YYTFD%C*@CB~m{|zUI=LvP1GfAjkUE&k-CT!#Q@lI=Eh*VFW3^0THL#ur7)R*lQdA~H`hz@ z7mEJ^){OCoBKJ!^@+)oiJMQ)C+#W}HDWxX%f3LUN8x2d%{#JjpSMLt?i@}e|Enazd zSn~RVts!rV6qO^P-QEBO&Dfu@4yhw5f!a{LzHwbcO|5%XMVW5%ZiW_q8Gd%KZ+=R9 zC3Y|KMx}Ods~Cir94KVo=1{QJ-v$r8L0=>i+UfO0+IHZ_q~1~wby_3^claZrUAR;h zn{6YlZ_zE0{(Ro|AT9d}|Nlk6hHrEjMaB7!@TWM(&{^*g@HU)H?gDKCT5$+(0$m8C z|BVlUCVUQs;rspq@O>1rqXL%{=rrLfgRTHJ88qQ`gO-7Rk3u%j0kd)WL3Rk27&M`T z@-q1Cz*RU8y#~4hcn0MF=waYB6w)DFhKoR=ZNQL0hk^T0$o_s{1rDhH2%7LA6ykRQ ze`e6X1b%?)-U;w0fZtlAkM|zn4-NV;;0B!i@(~C8z7*$08)*9dL1)4Sv?ZkT9?^t! zrt1Pt*o^W5=>Lo7Zglzp%C}MQKhCe7FIxm``aOjD%)~ROD z{e8dtT@ReS_FjAKwbx#I?X_QLl5@*87ReZk!W#-P)&fY6jfa0fh&3>F*;TEVv8PA8 zI;F+ne054eMP;4EroEv~kd7T46&`Ya`Gi`QRcsjRU$mgHNiYs=g-PCcfW!7M2M(a`mf+W^w$1L+Kpu=kN*85&rtL!-s1DpIE*B zP%?*yGRb^OdZMs!|xRc)!z5o<;!(cKzGgs6?NdBZXP^HR2@%a+@hwd_I5)ty(v#-{biiu7O= zVks}lfkrF!g(7`Y!dObkXp-JWB;c?XWh-h*o2;Cc(o%D}b@-e$LX1I-1)2qtx^%$dgKuY^_1gK8MxveOS6P7VciJ|XV7W2DLbtFh|7rQI+a)K${P)z8jMZf11?Z#O_l>2tx0mA%4!Lji*(kU z*rBv3$JJf1M-=eiqByL!-nTJ674t3^W7$fV>ac*XG9W{`t%|gNjV9*8Xp!pdv zwzoWqTGVe{MMCwHP-%)ZM;GdIpaar1IzLk0FN9F{qbwKdnA#4a-ZPNFS&G)m%ImUn zNKN=A>g$W}ZD{B-_*Ov|zHchh?{3o?`zYso2uWi3ieR~%i-WpY?|lfA0;>(G*Bj_i z_REMTAqSGa8Yr+@)RR{-);E&~vy?-iB_#6H!-OCIMf_91D+5h!>u*q`n{-(&=d#Sx zWH}&YdB2EM1Dxm$rIXhsm!c|aT|5{Oj3$QrWLV2ikjlzdZqRbdLG@}2(wkl)%eUX^ zx^-2@L3(WY7!YDO`~cO8;c#CiVnf3L!{DwW>gJS_F#nN|0i!{fzj9hRM@C;nK?MaK z3f9pWs7Fl%$!${~-VUyO0DK!V2BZ=sTWgU=3V&BL@|q&852Mw;O@`KALbhW54E~Pn zbO%sm571Sj&g)~~0@CbtYy1wMidK9v7Mg(k}{c=C9@xs6(J%GtP}PC+j|rW9JI+zFH!4U!v0z|Bd(68 zeBRR0;VpeenvA;9&S-$mXr^eSom!Pm!A%t0OhGZ;N@`>^=xWi>X<#(i&}>EeOS#t2 z7p|a&et={v964|3{}v5xS*bNNR=o#AgVL*LHTsDp?YMZ`iIHl@R6khe>98_dwQM}#xL{3lfYh|WOzu^X(0jO%^AEZffP@m8)YRjZ57g3N;!Ac5B@vfn+ppm~8HE<)dT~4~MK(ZAt*L@TgKA8Hp zQmr)gnbb%S_4Z(-Ddy8yn`SGWa^MAPJ+-=fBB_|qRA6h-+4ce*kj8|w9Vyu6=xn3Z zCqdM^32bRvZ6R(eIJe{46mzsp6Y{5=TL+SZLK+3P2|Bm8)mw?%G;mX&gnH#bq`Hfs zGD;3)#>!1y#>Qx>s;SM`_&3zm3JYWEk2%SrSdmhYaw?AjftiF)rt1Vl`IR4P#Yq zyvjknb8&u|vEkefsHZ28ctY{ABD#|nRGNcmqOK4_OrM#A&67WjCI4!Y13qg4X~AM& z-jYk|>>+hx43HzrR!(Fq15V|9${E$d>w41q5LZNpQ=bHtH?x()+*hlg#8YSc@&@yW zhf@)gm8@*H)}yQ--7iS5)k&Q}c+YI*O`Z#e>a*jC*K_D@X3RRprBU|+Co6^4B6OVM zgA-J$Fg+?8F*7#2lxx?VADSrq!FbUUMan7BjBq^K5RkruWJAWurC{xIVtw@a%@{ON zC#CUV4e&ndQQ{_m47nzlr+Ne!jMgZDGOuE+y(b~1D$94c zw^+baRY-Z$dZ0{Mc?%<7?IH5?7+;N3S&$?v%Pq39BtgC3%mp1weMrksG%^)TEiO3y zCCTa%WFwNQIz_~$V`LqZt7eNVlRBRB@;!|LvFcP*hn{&%ZaV3kE-U77w~{=^j8`>M zlhL$M#%H3&P3!c>$e|86m5(vjn(hdNLbUq9go(n&#&Vv9TrJcqVZvd(BbvF3T1EcT z{43Inazbt9QWzU=p>eC2f6dVc)SqkUOhO0EqoHG2IiP+|Lr)jzPc-yh8rm$-i#2qW zhW?zS37UVTp;v0?KMC~C7{Pm?hVB;VACDC1G!6ZnK$naV=p+sOut1NB7U&5YS`p~k zn3hTIXpZ)+gA_l&!h}%ggn_%&1VrGmeB)(BhE2pJVLp@<8%Ca#h^RVS%O3?KMxvB} zW~gx&6e=AmR78cY_**C>dI8q4vIF+Qp+2LD^(T!~bqqw~T_VL`>7}hd>ye{K^9x84 znv|v^1{auXS5CmnXCalX^kbeWz=|ZLjiw|Urlx4e)TfYDdt(oAm5EC3`?WYz^QlP;6M&6NK$p9u3tnG5d8y1$;#hGMEOhm$C1h#>UTt06QU_1njmJGM3J%}<8nlu;BQa6 zeYCOZXT(NXV&aJ(Ac66nU>DQRcX{3dOPXi2f4!`L?sd#Uq&;{(Y<@c^3TI#-Z)c+f z=A;uCF|D*g;YhLVoFPGl*lO7o$%|~R!gPp%{jW|oRX!+*#xVHiJ)5YD3UnmUZvC1tV<@lew+ zx?6qFNbh~zq3u^^0Hc_Hxg^{qGl6SZQe{#9Nd5tKr~ZyRiX|2#61WlW01s|%4Q4Ek5I5+|~`m6#z}K+4dm z$x4o6JYuPMbMBy(9Orc(R#yP_swAkgK&WmBRQF}pKMO1u+DC%u0=+xGtbK&_r}}T$ z8MMMLV~AmE4qtFw-Oe`)9et^abTf`Vd6Tb3D+1C&B&oG8h}PyWA>ZOhVXifr^HG$h z-L2MoU}<}`0J_5JiM;6GMpARI`hMYQ(iBbWCmKF9_|`U@FZ0b+q<65M;8i~co&o7F zlC5RnLiIljvw^l30msMWIQ2GBF>NY3TCW6|Gbnww0^&XQOV9=v_NjSslzIxOeNxF{ zPza(wgQ#~m;(DoaUg{@WsYxg$D{)<@2^QxwsX2t$Cp`@WJ*}YQBK;f@Ik-rMSaZPv zjv`(?H5#@vV7MFJY4Uw2(3he}F@U^T-Cz`u20%O5tVh5Dn>er-12ojRoy)u%Xf(%6 zq|~(F!jIHOu-2z8G?{Butk=q+323t+!{!97f36a@9R)F`u7Yi<1>mT}eOF-agillF zQG-k_RkH76BZb$9g3typkPPT!^_`=V0L+WR1fz!C@ljK;6_zodT164+>D;1)m3r9fpjgUQQ@X z%NgScg(W#=T_hmZ4;AoeY0@%Y z2Tr(88^>seiWfOpr$fc9U_x*^AOKBLzFCSC2L^oPzk$_pK>8f(!&cH9b;t=m#N*B{ z;GW~N-U_~|FrUAPG5G#09B+21chaIdARR(EGNJ1f>3Kvs$41WaNhFEcyMo!vVAeZ9 zFzNy$cy~2}FU;v!!PrPs7B&-ycvjq66jra~*|Y;UHa;h^4~y&-lpTtt5_IluZ2XDH z?iSf;l-i@?8_;;9obH;bfL(OfCGZ5dNf^%B?iJ+YbFnCFOg*@9~O;*frp_|aHOF%*= zW~qoT(&9G6jappBribdGg-a3eF%%C>?xZ#ZGP*dJv!8<*2LPObIR`n&c%6g9cQ}~w zEi46I55 z(od0S$Y`7o@(bz81l=M|R|*O~UG?rEiKU-I^So&lJbN3G)U**owswa$_%PjKSWE{E z?68h{i@U55KtPs&R79wNR4hP=0Hp$y3E&o>Mu4>ftP^0p02>6z6u>D!H36)Yc9M#) zQko1UI)gi`ye{Kljl=CZ;?Mk4E`)vR?elgK^wD?kJix+6+s~dVHbu-ZN#i~FYyC0O=j#B zm@GeBrD5PtSEN+ray1(y>aFXLY^?+#={iHqV!P2zd=?w6zJwhpZseM%T3A!E9B^7K zbZ0S}k~TWNN)2_>;$Z>qzp%RGtRF=w_&p>CSVQFk6$*02LYq@If?+Lq7nzaK&~)SakR z==Z@K#KP@42c4d+oT3T(+lb~U{ZN`LE9as5IY3}tN;-G)SvwX@;S;uv)Vr91Wfa^> zK{*9A6x=~2?)K*^(rQ%46`PD^1*8>7wyx0>OOnGczNV{Ur1}>)Gt?7iMx=agze87< zD?8}0@EzLlsW*UFSr(g?KiYo)r`o~z*TI+JU@=QsjKhOy5+qetVhG|aBf9;)NQ@7D zlV`IdL3o^H%+W>SV}{N$2GruehC;Zo_Gg1rU{P#S*WK3!?KoTSMm;z)=>Fn)cvn-` zJs*R#;m%lG${L$eaV)uyw%l;q(-Bwp^(F#nTQv?++FI$`jr9G-%ojTjh7zBg0;in# zAP+b5a03skcz7!hb9p$AhqHNj4G$A|IFg5-S%}ZaJnZ4&Q69d;!^?PBbQRH*@UV=B zphj;U^o`>J%VIvRk<>6)?wsIM^^7!|7 zxQ&PR^Kd&4ALQXfJp2g{cku9MJlx5{hk3Y*hjgnSO5DT4$9ec94}ZbKW*+{EhfgDv z8$L?PQS2~}{n^S9HI7}dIkV+wDG6{o_J;Ry)6iu=}Ec(Kpigj6JfUr{5Xb=}bW-T`PMP)Dmt0JYGI{ z{sfs!&Op4?N%tT*DJPxq2?@?=-8sg2$J|b3QX*MXPWrLabrZ_%n|{ywbAmr*@Va(< z!a!*MpPdRyV?z*&RlDi5*u`F0VOV|Xae-_MXa88az1>uPwmlR&?T@||SSf2f`ohSME zIkk=7L5S;}WvIY{Z*82)DJ)Tg z?+^SR0aOVF055f&nk(2?kpHsCe}?kk#ddI?^dmSwcrj+1720w@jRP-RW60RF7~@(! zOts)rwjq`Ith6=A<8AT5h_0ZM_a8wX91rt@+HB=e=vYWPDC+`-4zDp zSejEH4wh2=%6W8K(^0<>*Az%PrA2xWDX4(1<_@Wk z;I2T=^4&3ro&==|G`Zht=o4JVy+XV6Ln=ewV4@V|2NUQQ))ewd4WUT?HwJmx!mAiJ zh=z~Us_2VOISG4ArZdYzeqCpyIflj!KMSC}F4~N{NZtXmGP!pW&6NZAHcaWoMC6x( znTEcx)W6R{&p7f^-oPh7A(uEqGF@+f-f zf@`+kwc@h@TfP`9CsMjX=Guv5ZwEr=8bm^7alhT!IwFeE7__XELy2>V1T!AI!AGgj z;jRz%57Wo3PYi8F*{j#V{Ljt@`f;T6&C)vy5T}Ks+|UN=lWHifNc#u`q*Ra-C8mFA zE>QcVvA|HR`=rr`(OBFkjn`r=PzsaRw9z=bj7si{GEmJ!cqJ}63;2LD%Az9;*g2eY zXh;;i>k3GS4|qdpS1R=lt!u~vu`mgl?@Ius^6LR`O$qV+P676F7+_{M<)E=?azhzb z+cdjZ$O>|u*fc^dxC4HLkRD1TX*;Hn`5F`p?P~}{Y7Bm#l(v4^_*7i|LL3x*JWKe&W<%duy=<*08>2oL4SzXNU5+%o#6tod zHLI;JM*RU2%?8w()PeRvB-IXmHo}1lembx3gAQ(z3XN62D-tp4dPMp@3M;R!21YGG zpdqQe@V~?CI$JqMgBiBit9Hh4M>v7LAB0^WR^R1zi4jP4{U+&e1#LesX5hUqqp&XH zJ)Duxgbws!lA%WRb^xcoA!?As{ynU%e+P8?ujKnt#z5$m+qX z8ciJbV^N*cZyY1t4mMxR8xvOvyiVih@iB4LfTZ4BG{Cm1<2kgIsdQe8rqFzx;8faM za&U7{o+eFv8QcB!a;fA*1asC14n~_crO`*s0B)?*bGpAXzYjfQu;Y8D6!Wzx*zn$s^0EDL!}*YZB>CRkQL4{~ zT`4*&2Kj0M3DDKlCL0~t8PMv3_|ceBA0tO{_V^WTXOD+E$=t*|Ytih(A~(Qq$j{Gu z_}v*lo<`M5ZmK=K!(S^0a}q-4-;N_}7S2GkOd)d%Qc9bAJ;k3E@nDWcq@Sd87M2n@ zCb_-GBBvmpl4X)p+U4gU1s-skibRTDS$YQ~Zij0>#vYpN|5e#0X@-W`c3oBi(x$rhYjn%|X0l5Ry**1X1LM z*eLanA`+qLB`8hdwB$3E%E2eCwogI0>7zENS2-bOl*h30pz)#{c=fu5L^TT{p~3wr zN9`@$s89Vl?cab1nSVDHG39@$oZ^SaNf_k-Ja)+ZJmrANT-{R#dw4D<8uHcZD9~^jta6MAg7^&7YI>u{MW{ZA0^En~?1A);8Sj68Glinb}z2M*%B z!`clsVe3lT;$PriF#qGUE{~?D;G9JOefSb1UB)5?7JXQ)BoW?}8#-d;^mn{}xL`qm z!S+R7{JWyy9OD;wP5y_xLW%8UD8$o5%kl($Ff_PTj3b^##d?Ibh@&}oo(OLU*mIEWsSmDqbD7TbSx8hBb)wW_xmcc zMxDR`(x?-gPA_oR_*1%+0mrDL+~uRAT>)A)_N8Z34%PHhg;LOUfvUj$pni86Es#!vfT@_6iyE2K|GUjgNHH z;rqKz14=GH$t*biiJRVI#(v|bbIe%8yp)SC;-u@4+Y*B^fu%hV<8M@{6 z-&^ES-Ev?lc8*ylYxLY`KQ1-mQKF$UcApf9NF<7$$x2K-S_>61lwCs~UL=+Z< zvlJCEvW!$ZG1(|qnPg~Om4GR2Y0`1fVENGTBKkL!NVm?R#41>8C~+|lb9tD@!!jP0 z^RR-4xA9QW*YLQ9hh84~cz6fGg9n=p9jK3HfeW9Z{bs1gwv=WFeBHAp$Hx6xZ|6Cj zi43CEQ)fe=Ejj$_vQ@oL4(27J2);m3V4Ya1(TDapHYz?vJAf>YvJ}g@oFa7!%5DSK zWat1Kd5M&+O{q{;n{j))(hfZI_Vx2WMFUAL(bBORJael^zpcSnG}x@c2Q|1sgXJ2` z)8K3kCTK89gCDLEeBaQZuHSZY0=PJzKn@7-3Jv~AgCA({eGSqP2GPZ7kmhSjM{AHi zpQf~=!4h&(NY5d60C|^O|V-l*QLRB4erw5UJV}BV6#^4*IN3w8hlHGr8qJnz6UjEj}z%1 zaKP#pXmUNMrK>dvUrbN^zv0k^;BPo!^)G1f6%AHt^>{Q`tHEY1ze9sBYw&puzOLzM zq9(sUu4=~hGm~e|sw%AY`%-3=RaF(%`MvJ7 z#a=gl99p7Pg!Lz*mmbm=e{kkoe?5MpOTS&UR@V@&-Y$NUs^hH5$?SgMHX%>o*74u1 z(r;mBR?=@zt#hax+Q)zPIx{)Bw0t!X`HYb%&&oej8n1LV_wk4v_-gWAN?)(smrl$B63`eAsy9bR9l zHQUbl4GhEG!uc_LFEmJ3An0O;;RKxtI9hwnTql0FtN(6!rdy=x_sh8;(R4ctQPu_= zR^B=;g>c7#3+sc~gzLl{adfC(ZXg`UjP(tn)}7?RUg% zr`C`B_rliooaX-`Fc>44F)t$75NBX<^B9}>tvHs5%b&!8D_P>~$t=+@o+b2;?}_go z+h&4Hlh86$#SG)3*tprTY+PQnXJTSB8)q2DqI;q|kwp>7L{kqMfj8^;T*5CCLH7yKETJrhCCmn#HOeE} zIc``x>rsax!oVVu5utdLfkllK8?G_tSZ4N(U}o?zgNJ$6n4U?ncmwDT!|DoQW#kL! z8DorQMtsO)1f3Ce>2zm66AzEDSEDmv*AzV~BA3?#yD-GZvUrq>FNk6BC>uY^EV$eY`|yk_(s`{1pQ*6om%)o5=amOuyzZF6x(y=?Yy@;~h>c>gUST_0y~!h} zeOIHOz{3E!PktL`R@k?EiZns4i(Eh~jN)dGWO3f;ToE6^;$|UkmY|DPW;V32Xrdbn z+wsM+v9n{?*jb};iKqVPbCMHdlkgGRn~JmzuZ-7p1?(QWr;l~rc!_e*UBh>?lFFJg zm%C;)_POj1S80X2bPZ9hSV^IHXq?wW7V-i5GneLd;N-A%;)B3>^6-Y?))g`K5O9}z zzFyaI&D4Lrt`&NCK^RK?|F7#>XZE}-`^_n{X42SWFGl70sxpf`J}jUzYjMVezv?53P$m0q8}xN2$5S`1wHJ!xr8MR848mAfo!U8&nc zrIqECr7odH z=q(ZWI$xQ~x8CD+Ro0Z(y2{*jK5y-MR~4#Z>^sDv&W+fz%)F(G3$k;vuAiMOdh`Z{ z5|uuvpqhPaDDHBz8=0%lUEwO{o#UeJPhhUn+M4pp)zGM`rr7JPUF$0LuD%0@y`rRO zoSx;bxueosTT@Mn$De!Q^=K5eHSTqlK9`SF#n@ct^14?;RJYfq<&Aoi`VBu$Ab|Yj}(uvVo&9a>be;)wi(Eufxi&sL&wahx_-v>GqfgO%C&!u z{|YrQvrx>@b%k!%;QU>Rb@aa&pAXwyj;);xhh)jiw_Db@*IUF$;cJdz`HtcFbSw0) zmhb-+|E$FevKME$yl}m)lJ!0}ZEpTvd&BAL+-`V1v1YrJ{CXd|s%neNTpoW(RV8}+ zU*F%FoT655^mMMsZ}w~XMIzm)r|BbhJUx1v4i)eW=;>`D9eamX z-X!>2^mMbxPu0_HBAu(JyG6P}Pxpv)y`JtD>4)_6PLXcb(_EUNAY2dmc9&y`D?fVy zKJ5y_hbdVNgY-2FHjzv8vPe-v9ZA-7u&wTE#cKa%7g=SMPQQkC8A3wwS?;JloJ-pU`oQhq4 z@$zk7lJ8)99I_>>Ic%F*@ZT9fyqGhU0PrNu@&;LhoNKUMY!UXNs z>ec&6=c8))!EzPF-mpma#pE6C5>8;NjERj(Emi03Lo2KiOpLHN@dF znQuJKUl50%WDnv^AR54D@S1Q(0RPO+QXKg3yMgd~1G+zGoQNeJ=m~DcTYxyh-FV9o zhd*VTFGqcdZvz~Sb7`uJ&Zk3o>F*G*NuZgGazq382b`ntLcAX^-6~|T0q(%dzDoQL}a2D}3>?FM`_OFRMT zZxg2?PViN{8xijYjQSSjLY(01c()>c956c-yb*T-HsPhZHUqw(#R(qK;;#XIro{=4 zNfY$(fPTDG?>fLec!>|e7qmD*>DxkvSimEAyFv3BV0AiZ5%&OY$4hb&{0}YO257{c zH{nfy*WxAqNr126eH(FtXEnSvgRvX&5{(QP{0{68@oj)_;U%5C4S3CsBAyI*#)keP z8r-GOy-@5e0@B?N{WWNUbaz8>f^_HNL!98adFVUD|GPdg54Hd=KFMdJ{<}8fYq|e< z4PfJzfYSXB4?HYClKV))uH;>*yMXZU|EzP@@m=b!fnBk?6Lu%EcG$@u@#S1JZ9RHyQgB0XHWf}wmrx9SoS9EP2FqTo4a?#UeDgn wy*+zPk0(7YKVI?p=EwIu-u?K%6F8$YFy;X$;3OmyGBqUWJa||i zp-GfslUuad;?-In@@Q)FyPrqTUVE**_S$Q&z4mLJ4Bp!|u|bTnWW4b>W37PnI7IrtPRu68hF`I7ID2~V z(ebS&&(ZNE)xof>K2*0NRKC(yQC?eH7qKl5*h0}-Td>yVT2O3TSyvgDl9o2au8U52 z^5!#hj%WYIcyIpYGrw^FU;BXld4ktHDB;=%CJ21(1GeW?Q9l0pn*h7O=LDQ{-2NLy z;Nzb!5HMSZ69p^^R#a0PU(_RCA!C*IrLYCx&AHX!>0?*gh9(VX>{?KCg*$VRPZt~w z=)TM+F_t1o=ONn!0vQ$0AXWxeS;+vG;yUFf#+IVaQou@4TTjXu%cX%bo(9J7KkJ^u zScyUV9Ox)uY;z*r!B{@@{i0_|B(Nre!jsn^A(g4`dOwg8kBzaiDWS^pNI7F$EFd}X z5^pZvgvWuBDUywq4Ml+u?=ZY5NPK{{O{tfRqK{=Lr8Yfy6CMZ2TTvCP4C}V4MMEp-grSJ9D1ixC@Xfi9^8X*E#+KU6YOKbduErwv%tfs*3e!esF{V!H zcJnSbKj-C+T$P_yd5^cbEpoeu-<xsj<84 z`D(1hj*73TF^@e*0w9u?_wloZd8f5q zV^Ql7Br5MxV@-A{)HrYt*VN`ymZrg2LNI2QrZi;8>c`{OAgt+ZynEOnRG_8eF2&7X z>`mJT4(8@ZwK|eVb-oYlH-2l_pt}^6x9bclKdj9+7*>hlX%gxQ;o5jv6up`&XXokT zx&XA8@-9#s(iAjBBev7XydUu{X-f_&Wi4j7=(7HHAjcCUvkKQ{yn7Xr2e-B*QD zl0w~qlv>mjj*+6hJ_cPsg2c;Tk{$J#J-oZ;FwE%Y^K;eM6ZTHj_QamEcK~X)gBJxh zu6g-Ax!MAt9^PcPfuHwz`6`>6tC?Cp$gr(mpmH@`wqcAw{G>ToIkVREK z*ux#^YKt628kzM(22Mk$#x~j;0Nvb+yvx2u<*EER(R1>OdN;RVf>u+$%*}^mo-U@m zj~~b6g=al#Plu9J)8Xb&x*h(MpLc=?xvp5HJ;#H@7Pq#|r7p?ts$6y-^S6R43sEBG z+*6pHF=Zam0n^&0X(!FnO`ELU1txMF6>M4%h+!u<1K(`VgfelTne^Iz(R}<*2d6W^eQ9 z=q&pdOp{b}&ubF;ytoufh+VFp)PUAj4}kQP&Z1a#jDaFb1ZvVXt+ znm#&z)!stIp0CqP;tSHX^}zV6a5&*;{8-$2C#qwT?LZBEdd01)Km+n9gkrAE=Src` z1xzZlC-%6VEa>qiqPY27Y)1OJbrePDLyn7gd-)XYd5L0vdicFL+Rr4K$@@HfwN2X!)Pw0pt0c|O zdo$hKovy_Mms~LAyd(yims?01eNxIvC?_RmwwSW|oHQmiO-naV!A#btq?gguGA1QW zP&p|vJ5@0iF^N@7Hkz84rumo+WL|z)OiM9O57KTT=P73AH3g)QoShzhc6zup8)oTp zuI!zo`#~Cd6;rkW9q@y1%0c;azU~KuwAV7IwYYUV*tB*ahIz2)8xwY5wqmS$(}+6) z?q5OW^HX3k$!W(7=myn!yZ`oO3GRQyQQVpfx^@~|!qHv!YA^qHv0-{?AYP{amU;OB zH$O@H-;$m~X^a`$-w{VCHoS$-MXifT%41TBhrf+Eg7p?F_9xnlqlCjwMc3dOG*)rz zi%uw|!B=nL%EQQu)#4*C#*_^}_t8wJ>Cqz1l46)8Rr?K?v^_}RsBZqcn;(h$(xKR5 zrytXM>9TfmS2gyiy#XTB*wb>Q#(Bo4%|b0VUxg*(IPce{2yA{1@6xV9R^`K8yv@xQ z<`~Pmms^A*(CVA7@{y2%T?c0&eiROY5zmCCDu-m1>&?JPs96lRlPmijdcVE`@iFBW zKnMEu1KF>+U)6_O(f&9R*`smmQ()^E7mvpY*#!i?E^QVAlGsr(29DB&bmC}T!(f&x zs2{XieKV&p?@unw)vX}oltfuNa}@I5tIZ!p@6f)A)>Pgnj|GCqYt}9Y5hFy5DlatC zvbJ#8y*Mnq)Qgq%m^Ohbp>M&esw&GBO<*I&Qc?Ei2+{5Nt{GM4$a}L8 zEdHV`0h8tuis4ji?ip#4I+9!MrB0)TdhJi?f|^dVJvbFe6I#6RDLBt! z7giUa2ML{K9ppp#PHg_z-c_EY^3mjG!tJ&S;m`?w@O6@oc4*6`Mq&7yxKabM=*S^7 z7gLr29q5QAJ953zkx#V;!GxCLR^rn_LPP3NZ-JoB0~PBfwc6NrqbC-%J>2-tje`#C z?@w{Y=9*DN9YK*Ai{=azp`;ZC!7#$k7mq<}4obA|QA?A$x$cRB<;k6+25U+cPOU(E3z2; zoSvt^K^d{B>-U9-J$+HD4KlT%QWbGScoX}$)$yK4dUjPosian~3Is z?56X{wJNt(U@224oiyf;<(Z+DXOc%v>WHSQ@pfqNe)Azq^D4}LnnPbf59s7xCGe&8 zTw(YG_OsA#?b@HFl zBFNLpxFE07$!|&WlRCLxCm)pL%aSCwUnlRC~!{1Hbe%R_DJKIwq& zwB#QHLAd)Qu*Q_%0Nq!KGFoP)qT9IQ%$%VwGfCQqh^0t>bD(Y9EY;?C6jIh3QhpDH zn6fre%0wyUMU1AnDE&@*@?t6QHV0P<3?W;EkZFlRCP9dcAAmLw2|3y~E|#J4v^!CQ zq5_K6jo1$k9cnDA3N-C?LYv!Q$3;Lb54FP<;+`z}aFPAwdT<})3-3&`4@lhrF^#hq zTt~xxP%(o}PjnVfTMrXq^w;I0vEPD=r>&Bd1yezJnVN60K7vIf?~wK!u!Bkpq|lON zjHg@+NEPFJlRTioc9JFfWhO~HZ9E8hr_ejmZu23ipeUe;fm{xrnDP2^>KQ_y3u;XRKEvDS@n z0~H%b3CYk8G|Obs1EMHx4k~NYMR7mGTbktE%KD%zzKV)Ri{dU(e1)vdWpOeUe{3e< zh`^vW1uU`3HpyZdKdlSJ@=RlCdYhJ2Zf%jpFH!NcqFALL)v&rC@C3)6MIpc{Z zL+9CI@MKCJy`O)9$+f;zYKu-SWQdQ6lUu(fh5VKnjuQj#5XD`hSXV5jB%=`us|X!p z3dti>G>7>mP?8)=`-Ji>X~O<7EuspZ1#NuWZf^o|ge z5g>k&cQv=&lMS~sO`>@gxBdWRxY$U#D!GvtGpy%z=*pE5vTUeUi*Ce}B%tKcG@|h6 zq3EZxwFaEM*KpJD*35&@89 z1CySj#x_iLy26z~SM3xOlT+P{>debO@bZ52%?AWt{tk{%Q8!mk!yLi@PVmQ+SAp*P z1~|wHvoS?rg&?e;uWdtQZ*ff$1K#*TnY^uuBmGW=qPG64AqUOe6X44IhVauUiYaRn zg}bD1yCK}9{S-{(OIy*rmml-$VO%$Vg^o~nh|)_McJhT6-ELH3M3>OHRHOY$(SASL z8t9x`w*TDqdgngXCWDE#@k`o(7ylG&6se@?8MhuMr8V405ER;hyf7dWZEQ|#V}Wd= z!Du5%JCuwi?`IHV+-z}&RT255>7-Sn5O*V7WN#C>Be>oAkds$hTtd_q7}m`*aQ{Gz zQQSW$CW-T;ai6`5t{gt-Kp_t?N6%knmvH4HXd;v?hS-?$N1y`+Sp;R}VM5ClzMcgh zy1e#K-@kBNPU3LbYbU<_;G?S@-HCD6xa6Kep-!>9U25UP_#J(&z~N4h!Y^uVCDWvl z8R%Gi&P^e_4*0S*T^vivT$7L+)HO5f-3jQ`qxJ^WxMwa`%tmhmD32-U(5-#7C?ns# zUk=S=(N%oG_=`3LOsyZ#0e#&I)TYx<0Y)cZWF7<;TQux$T%Zs34v8PY5lVX()yc^U zxUwB0giYh1#gy+Rwz5&S@;e-B#0>ga>i`8#me>T`>oqXMt!q#fTR;;Uhi{<+^9<3C z3(@(Bq92r^pD;xKRa*(lr5zxz-3y7BLlpemgDeIAwhAa+UF)Ug4x?iRbWyjlShH~PeA?a*B7%=ZTui}t(0w!y`$SC-+`WcA-=vU~d^b>bD?fbc@yY>d;CyZw+b{d zaGz-wFwt&v3M66W-h4uj0Hx)L#LKz+m}qFD=qaYbp!V|nNh^^zDWB-dRC+#ij*RH@$7z)ej?J(MEX~eG9e*Jq*8v0$eTqvM5Mz+I$Wgb zA{{Bx43Ul&X{JcWiu7`%3FgqV3Gu4NGwGgKhTVgaH+%C=d0I;BnVw0VUdx=50S~`C zI~~K|oq6(X__8YJx_4Ngx8)Jm7mqt%8YIZk|KY(p>cM@-j4d_&EN!G}_#UOpzh-^iF{ZZ8VmlUc~sYR9K#&i)IdXzD|NY7HSXYsfYFp^jf&f`4|QT znrzO6XuyW=n;!lFPRko0tEnxTn%CAt9;^+4&<$Pdv9LRSX=0|h#bul60> zVz6Lct-S&#hZq~qRYzs{^Hd&0`9Wm?8bdjAOpR|itUZ9u&CwLMG|$HZsTGq@gv%Q9 z8KUes7QH6=63J9KzQP{X#z7wse`z1p$E1j#j4Pkv;3f?Tlj~s_#GOHPGKob&TH%S#XDlkGoWa6kaKM4ho$lxXa5A0B*RSY)Z_QjYAkCr zagKtW92<^nC!t>63CD(G+Mk4?19x4a2wmC{AHw+K15<3V%@cEE#t@5+sb>0s1a%y4 zd@1?_!`6HvYMEiph3tE2++sCvW2vHbC zkyQiatuU%2H^xoTNf?ufD9bxRRhm#XfK;IV05Ttvo8u9sF+M1I&44UNViThV$m0i; z>P^WzMJEM$$zOv$JLn^V@Ozp=34ePa-85^)NE*F<@fQb(dPS9%0#olu8sC{1e|%+^ ze=Ts5f(9^T4F%UDSf_3UZGH6GXJqV^NB zSgXeeRGyrji>^@2s8>;Ec0@Ar+WJ(>&(og9aWneek7+soMA86uo1# zMZn>yk4bX!)VAJK?fXFXnxJq_JNlf1N$G@dHDMA@*(D7a&D1wjMX?t>DDO!^bfu_AFTTrxv$Rzgl*E-(wG%}828g&F{A3^2j zL*mnu#nrxE;lQ;bD5bT4O}9dZ)*z9=uvrw@-uE`ZgcN@>`iwtIIYU#2ztMQkWVwGA zMo-*Hu=h@aGfjk^j6{z?ZP3WJcY>BoG)2%Xo7;L<;AT2zBK)wiBhC*z>wuKT?i(j{ z>@~Shc6jm*cw&X!cr{D9fPH5z>E1re2xTYgTv|3F?FXP6JP(Wfh_r2hWM2BS5XZ9i zXVF)tt-&gSuF#&4>EZiZy|*z|HA5*q5|2mMsujw5WUy`)3NS2v-3@3G@!y8&7RL(mAD-LZsh4}OR z*2gA@p~i4Xo`%`&ps)>ZM3S3MM2BNRZ$lLT>a1{98ac@ei|@`Ri@d>KR`aY&P_gmt z8`YC9tBs$;qeE!^uSTt2i;DS+I4H`s+d#-WMByM8PG7VGl02GI+HN{gf7~^$?c=U^ zhj2eJCv3WZ*wn^ACR2Ykb^GroKa6!15vHrD^_lHaM2@|g_#QiysD+3M7vflF2Zm$i z^^~{Ce2dp6@l3)Cv7LF-)&1QzH4pi`!gMunzxph+zynEF0m(BOo7oPH_v70BZ+2>g z{)*${PM}W`icTyO>jEuW_%u0tB7(szni98u2cfd_r-CD}!b;LPo?VLq_)JUMGT=QK z*lg4mr5yS80Z2CaBUDiv&B@vyWF|?sON-(aytHPNsx4309iP&5S`N(GY#fgc>ibLsEFT3R$J0E*9A-ag9M@(#tVwL)}r2Nkx^>J)3HX5hCi zg6M3O@qspME6wXk?ct;rmo>0QmQf@Ehf@b&37u);){&5jomAX$<^8s$u+Or&o$@L* z`nFlN=7?M0LKds$kdID{Ya6em+e!AL_D+}yH!HH12#j2`2dOPtDLAF6Ez{$};lHC* zJ`;iZ2t4|@79dd!7zrScxqO*Zq$LV_%EtHV;GK4@@`z5ln{-&&Wb|E;A(TjZ_y7eS@EL4Si$X*?EE5Xx<^-?;3hS z_^)Mqtgz3;54mFAe%=vV_F=5_vqCIAMQUT(!#F#{osAvI*?l+0Ev}gIQ%IcMmSSR& zoY`e5Nh~scc0GZy%HDII;Sgk7Jx;~GLI1%rmL2Wkp{Q;`%`j>fV$mP7?rmo2v#dME zEM+W2rO7BQMQLj)>cmRBp~&f({dd{(4hhvrBX2*HiY?PD``#TaBqpKGcytWyF2gir@ z19JPIEkr!=?6FWRo_!h}jb|SdX{Siv5vipALF6@&(wRS=eMY43i~Kp@O`hu-_+qtI($NhTXgts9aibkqr)3?XwzYe4y9Daz9lmat8}K- zxDJ1$!@WBHQ#$^<4&T(_OugKhCgpuk0M_t*9d6h8f;#*yb_zTVuj=r}I^VzP@FgAA z==}9MtkYq;UjCxNPiq9^jnVaxWX8UskJ|z0HLlU& zTpix7!x|kLayw_R1{xyY*CaIP|0wLx1$2~1xt%(cZt;I6-S|xh$tcGAN&((HDa$Au z1{9$mmgB-Z?ZPq|@@r9f7RqMnWs>8f-&PpJe*(5dDewndcwt^rHqn94s(dC19m*X17#P3GzD{G19z_)lR zH)!_UTvi0yx&hi6Fv;JcObOEOKJ3#`#LzcJ;j<~ZxfN9_u;&4%=`*FE2)EG!C-L|$ zq~UhN*y0OlZoyY}Ax-dAUqJH-zWNJkf^W?Qv=YJB0GiNE=u#s1Hi70cK|lSsFyvR8 zlMLK`=bd*}E=M<5^<2Flp-6?@?Ue0aK)X%0n@B5>d<_@SB;R__)?huDvPS=L%}w$* zLsJ40r{50w(5`OVsbr%kKqLRwX~O&4K%?IR=``Wl{T{})o~PlfD;@|d8v;JPxiZq0 z`n^0H7UgB~w@Jotcv!t|EAd+$`&z;CHxg5tiKW4wrmP_>Yg#(X3Z?fA?;h4Uq|IEP zT9)E7S(2EgC@I%8Dw&O%W@e*`QtC~aDJ-*c6wCa@(7wUlscqxUNz7a_f;lEIwqqh= z&%sXPi9a%unIV&CeRz)$9r`5VrU@x*g6T3grth-)(Ph@$@mHDIRi{U>aj#^sQ7>2_ zcQj*HGj{7W7|VH7A4WoXBF&U#W?7ZPSXRkU^a1?{rPoUu^7sRTEa;t81e)E1CGO@#)Dd{lhV6XDn+N!Pq%WponM(i+%!bnve=TFK1)Ag`U2QTC-EQtn=}vA-!nlsNrZ8({2urUVA#Bu;$=K*I zu#?et0&dDsSjIc4ol4uFGErAaV#;Z(j$;|yhWA=k+Vw)5>~s;&uw*uj{&?wPI=;50 zMTSF<(QMc_##Z8u=rR*=;R{pY3u63JS>`nKf9gg&OaDO z>ao)-Y;0(BcSilFGK23~@Kj(tn!!g<$Sq2O?~>fq0l9-o$152#>irP2@fys&U!fjB zQ<901eRaKZO=K7NQ(6e~0Dowa0Ua|+QdtJ{%$N#)B6&1-1m9qmHWhp{&eQfWtErWx zkgSm@Y-GgDMovp*Bc~4aksXZ3*aK%_Js>(pOuRY3bMfZmO~>sr{aVK6B431;IOX<$ zje;!?)>irhwJUHTWUKrY)q#pTz>#}1@yUnQm3jwG>7uTrx#;WxS_8_AXESJRPOL!* zv{g8Jbc6PJ&zI*{VU>n2&#%%u{@(Me$33Ued28O(DdfJ)nS4t$5L)XCgsSR7E6Zyu z0tIzZgf&8JOwznSq#zm!A>`o;)l~$-VRt3VN}!fhhXUo5ATo`p#cRWnz{--~%78OG zH&_#(9Q%sN6%3az2PT+3!R4Xy(At9Xnwl^xALOnLMuO!v!8-%Ro?tklLL57gTokD( zD6fx1L(m1P;8(eah~}xQyCYgZH(FZ}3D(sX)<#0uUpuK}VK5Ylme-WluEuO+Z1o^_ z*cDhFU9ln%@`VCnbb$RxDXpz8udS>JR2HtO2-K4ZC`lb~DI8y14tgR3DgSAz4{>nf&5~^G4 zuR*67`#M`0SQ!o=x3Hk7bbg83TX_AnTsb~BFw_V}pyx{V)$@6OfZfRa;Xt*&N_4_c zgPFj5`rzc1 z;mH`N$ta(U-^WMbCX;KfpM3pfz004s*!?HarYx1qc6e#PFW2)5u?Kt}oh37NU1ea^ zbzr)e6Pg&47^R^>BYK!of6M6@QZw|bWU+$fxn=nNZ+3&?o#~) z3%tJ4l0yH@g|||b0s6ec`GrN!fdZXg?DV@9_>0~1=mA~g7cmPiI!-@Cx&FIptmAa9qNiHN zv3ZGSy^ibX04T4a-D$0@rmnm)0A-ig+5&6pu?5(w%7ds}5ee1UD(Y5Z)2p=6Ki3gl zSzi;N)sVRHZ%~Bm1Sb|#A#-Ig91hm5uwnjFwR)_CwGrF`sjATiF@^%)jAD5gbxBef zyPGXiS7)oiS{$&|g#;2_i7imbjbeGfpdmp;fc^{mCC1FAA34EWyuj~smZ+>)?mL07 zEm9q@)t5)A(U8bb6jdhL!qw%WK&7ol?!kI9a(rzVU)#z+q`J-+R%R~M=Y_%eMKE3R zb?fkp*!~v1Pj3%*KH)D0KkjfB;0FDF7YaYNxi0CaPFIcYKdP?}=7oB@xR#Rt;(jQg zLx+EF`}MjU*$#%Fay5oQA3$3;T3=rm!UoK?=zL?*e*7O}vw4y1PbGeo7!3HU12r|63jP%VM98ph`-62A5%SR7 z&*v*&5el4V0^eetFBC5K`2UuD{GX-A zf3}=|^t|!U((fPDLwXgy`-#6^I3E|d&L&HYzneI^%yy#c75WPY`Oq5i<@5iL1=1Ni zh1Y|4ANDR5My#<6`NWtb#Uhh47+ViI!LK5|xE1-txFW?He~dpAc>#2SHz01;S;Bls!a%jsk{_IxanVv29!odr6~Z7?Zo*4-2@XRni(=>$(~9GL4s?c}%HDDXV^1Sr2Kayt@l)_@1umsKk|t&V~Qt#a}wHstq7W~g0;DNm5%u}hIBcoOes zRPR``WBraTJNBSP$BwO!+jgoueLFYp+_H1e z&dgo5T{*jQcjfP@-nD7h-d&x$v|Vg>&TilC`rVs$@7dk4Tiea{pn)%+|56M5PeN7} ArvLx| diff --git a/ext/openssl/windows/x64/lib/libeay32.lib b/ext/openssl/windows/x64/lib/libeay32.lib deleted file mode 100644 index c786d5498a0c16aece2222d68520017fa3be21a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802648 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ⅈ3%u>;bovmw9?s>@iK{s?h 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 diff --git a/ext/openssl/windows/x64/lib/ssleay32.lib b/ext/openssl/windows/x64/lib/ssleay32.lib deleted file mode 100644 index f93da7e0373378a5617486158d0f9ca4da60be26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75578 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 RLE$Tt=pOXtUGJLm{{lv^n!x}7 diff --git a/ext/openssl/windows/x64/ssl/openssl.cnf b/ext/openssl/windows/x64/ssl/openssl.cnf deleted file mode 100644 index 1eb86c40..00000000 --- a/ext/openssl/windows/x64/ssl/openssl.cnf +++ /dev/null @@ -1,350 +0,0 @@ -# -# OpenSSL example configuration file. -# This is mostly being used for generation of certificate requests. -# - -# This definition stops the following lines choking if HOME isn't -# defined. -HOME = . -RANDFILE = $ENV::HOME/.rnd - -# Extra OBJECT IDENTIFIER info: -#oid_file = $ENV::HOME/.oid -oid_section = new_oids - -# To use this configuration file with the "-extfile" option of the -# "openssl x509" utility, name here the section containing the -# X.509v3 extensions to use: -# extensions = -# (Alternatively, use a configuration file that has only -# X.509v3 extensions in its main [= default] section.) - -[ new_oids ] - -# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. -# Add a simple OID like this: -# testoid1=1.2.3.4 -# Or use config file substitution like this: -# testoid2=${testoid1}.5.6 - -# Policies used by the TSA examples. -tsa_policy1 = 1.2.3.4.1 -tsa_policy2 = 1.2.3.4.5.6 -tsa_policy3 = 1.2.3.4.5.7 - -#################################################################### -[ ca ] -default_ca = CA_default # The default ca section - -#################################################################### -[ CA_default ] - -dir = ./demoCA # Where everything is kept -certs = $dir/certs # Where the issued certs are kept -crl_dir = $dir/crl # Where the issued crl are kept -database = $dir/index.txt # database index file. -#unique_subject = no # Set to 'no' to allow creation of - # several ctificates with same subject. -new_certs_dir = $dir/newcerts # default place for new certs. - -certificate = $dir/cacert.pem # The CA certificate -serial = $dir/serial # The current serial number -crlnumber = $dir/crlnumber # the current crl number - # must be commented out to leave a V1 CRL -crl = $dir/crl.pem # The current CRL -private_key = $dir/private/cakey.pem# The private key -RANDFILE = $dir/private/.rand # private random number file - -x509_extensions = usr_cert # The extentions to add to the cert - -# Comment out the following two lines for the "traditional" -# (and highly broken) format. -name_opt = ca_default # Subject Name options -cert_opt = ca_default # Certificate field options - -# Extension copying option: use with caution. -# copy_extensions = copy - -# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs -# so this is commented out by default to leave a V1 CRL. -# crlnumber must also be commented out to leave a V1 CRL. -# crl_extensions = crl_ext - -default_days = 365 # how long to certify for -default_crl_days= 30 # how long before next CRL -default_md = default # use public key default MD -preserve = no # keep passed DN ordering - -# A few difference way of specifying how similar the request should look -# For type CA, the listed attributes must be the same, and the optional -# and supplied fields are just that :-) -policy = policy_match - -# For the CA policy -[ policy_match ] -countryName = match -stateOrProvinceName = match -organizationName = match -organizationalUnitName = optional -commonName = supplied -emailAddress = optional - -# For the 'anything' policy -# At this point in time, you must list all acceptable 'object' -# types. -[ policy_anything ] -countryName = optional -stateOrProvinceName = optional -localityName = optional -organizationName = optional -organizationalUnitName = optional -commonName = supplied -emailAddress = optional - -#################################################################### -[ req ] -default_bits = 2048 -default_keyfile = privkey.pem -distinguished_name = req_distinguished_name -attributes = req_attributes -x509_extensions = v3_ca # The extentions to add to the self signed cert - -# Passwords for private keys if not present they will be prompted for -# input_password = secret -# output_password = secret - -# This sets a mask for permitted string types. There are several options. -# default: PrintableString, T61String, BMPString. -# pkix : PrintableString, BMPString (PKIX recommendation before 2004) -# utf8only: only UTF8Strings (PKIX recommendation after 2004). -# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). -# MASK:XXXX a literal mask value. -# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. -string_mask = utf8only - -# req_extensions = v3_req # The extensions to add to a certificate request - -[ req_distinguished_name ] -countryName = Country Name (2 letter code) -countryName_default = AU -countryName_min = 2 -countryName_max = 2 - -stateOrProvinceName = State or Province Name (full name) -stateOrProvinceName_default = Some-State - -localityName = Locality Name (eg, city) - -0.organizationName = Organization Name (eg, company) -0.organizationName_default = Internet Widgits Pty Ltd - -# we can do this but it is not needed normally :-) -#1.organizationName = Second Organization Name (eg, company) -#1.organizationName_default = World Wide Web Pty Ltd - -organizationalUnitName = Organizational Unit Name (eg, section) -#organizationalUnitName_default = - -commonName = Common Name (e.g. server FQDN or YOUR name) -commonName_max = 64 - -emailAddress = Email Address -emailAddress_max = 64 - -# SET-ex3 = SET extension number 3 - -[ req_attributes ] -challengePassword = A challenge password -challengePassword_min = 4 -challengePassword_max = 20 - -unstructuredName = An optional company name - -[ usr_cert ] - -# These extensions are added when 'ca' signs a request. - -# This goes against PKIX guidelines but some CAs do it and some software -# requires this to avoid interpreting an end user certificate as a CA. - -basicConstraints=CA:FALSE - -# Here are some examples of the usage of nsCertType. If it is omitted -# the certificate can be used for anything *except* object signing. - -# This is OK for an SSL server. -# nsCertType = server - -# For an object signing certificate this would be used. -# nsCertType = objsign - -# For normal client use this is typical -# nsCertType = client, email - -# and for everything including object signing: -# nsCertType = client, email, objsign - -# This is typical in keyUsage for a client certificate. -# keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -# This will be displayed in Netscape's comment listbox. -nsComment = "OpenSSL Generated Certificate" - -# PKIX recommendations harmless if included in all certificates. -subjectKeyIdentifier=hash -authorityKeyIdentifier=keyid,issuer - -# This stuff is for subjectAltName and issuerAltname. -# Import the email address. -# subjectAltName=email:copy -# An alternative to produce certificates that aren't -# deprecated according to PKIX. -# subjectAltName=email:move - -# Copy subject details -# issuerAltName=issuer:copy - -#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem -#nsBaseUrl -#nsRevocationUrl -#nsRenewalUrl -#nsCaPolicyUrl -#nsSslServerName - -# This is required for TSA certificates. -# extendedKeyUsage = critical,timeStamping - -[ v3_req ] - -# Extensions to add to a certificate request - -basicConstraints = CA:FALSE -keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -[ v3_ca ] - - -# Extensions for a typical CA - - -# PKIX recommendation. - -subjectKeyIdentifier=hash - -authorityKeyIdentifier=keyid:always,issuer - -# This is what PKIX recommends but some broken software chokes on critical -# extensions. -#basicConstraints = critical,CA:true -# So we do this instead. -basicConstraints = CA:true - -# Key usage: this is typical for a CA certificate. However since it will -# prevent it being used as an test self-signed certificate it is best -# left out by default. -# keyUsage = cRLSign, keyCertSign - -# Some might want this also -# nsCertType = sslCA, emailCA - -# Include email address in subject alt name: another PKIX recommendation -# subjectAltName=email:copy -# Copy issuer details -# issuerAltName=issuer:copy - -# DER hex encoding of an extension: beware experts only! -# obj=DER:02:03 -# Where 'obj' is a standard or added object -# You can even override a supported extension: -# basicConstraints= critical, DER:30:03:01:01:FF - -[ crl_ext ] - -# CRL extensions. -# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. - -# issuerAltName=issuer:copy -authorityKeyIdentifier=keyid:always - -[ proxy_cert_ext ] -# These extensions should be added when creating a proxy certificate - -# This goes against PKIX guidelines but some CAs do it and some software -# requires this to avoid interpreting an end user certificate as a CA. - -basicConstraints=CA:FALSE - -# Here are some examples of the usage of nsCertType. If it is omitted -# the certificate can be used for anything *except* object signing. - -# This is OK for an SSL server. -# nsCertType = server - -# For an object signing certificate this would be used. -# nsCertType = objsign - -# For normal client use this is typical -# nsCertType = client, email - -# and for everything including object signing: -# nsCertType = client, email, objsign - -# This is typical in keyUsage for a client certificate. -# keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -# This will be displayed in Netscape's comment listbox. -nsComment = "OpenSSL Generated Certificate" - -# PKIX recommendations harmless if included in all certificates. -subjectKeyIdentifier=hash -authorityKeyIdentifier=keyid,issuer - -# This stuff is for subjectAltName and issuerAltname. -# Import the email address. -# subjectAltName=email:copy -# An alternative to produce certificates that aren't -# deprecated according to PKIX. -# subjectAltName=email:move - -# Copy subject details -# issuerAltName=issuer:copy - -#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem -#nsBaseUrl -#nsRevocationUrl -#nsRenewalUrl -#nsCaPolicyUrl -#nsSslServerName - -# This really needs to be in place for it to be a proxy certificate. -proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo - -#################################################################### -[ tsa ] - -default_tsa = tsa_config1 # the default TSA section - -[ tsa_config1 ] - -# These are used by the TSA reply generation only. -dir = ./demoCA # TSA root directory -serial = $dir/tsaserial # The current serial number (mandatory) -crypto_device = builtin # OpenSSL engine to use for signing -signer_cert = $dir/tsacert.pem # The TSA signing certificate - # (optional) -certs = $dir/cacert.pem # Certificate chain to include in reply - # (optional) -signer_key = $dir/private/tsakey.pem # The TSA private key (optional) - -default_policy = tsa_policy1 # Policy if request did not specify it - # (optional) -other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) -digests = md5, sha1 # Acceptable message digests (mandatory) -accuracy = secs:1, millisecs:500, microsecs:100 # (optional) -clock_precision_digits = 0 # number of digits after dot. (optional) -ordering = yes # Is ordering defined for timestamps? - # (optional, default: no) -tsa_name = yes # Must the TSA name be included in the reply? - # (optional, default: no) -ess_cert_id_chain = no # Must the ESS cert id chain be included? - # (optional, default: no) diff --git a/ext/openssl/windows/x86/bin/libeay32.dll b/ext/openssl/windows/x86/bin/libeay32.dll deleted file mode 100644 index 7f89690d604d019ffc7d7b086d44a05d3c0efc7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272320 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 &^~Gv~Be#eIr}yNHa0?Md%?dasp|SL+LM;enqQA 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

    Bef3bv1JZnJCI!a;w1v!j5EB?lLMj^scnZLtz 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

    TjLG3XHvyZU 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

    (ck%!8utvu>_``rC4Ei%VA*}l z*?j(|`Ta6ob3e2+7@bXORFhLCY8N#-XVZRb7inF0{>7~G7UG|uU7kJv`Po_Ly^fUl zl+6lZYA>;tRvX)SRw3^#<^9n_FTIzM8wMpyX8Uhw@!pCVS-bbplH~S3{;1!>o0L>= z`~a*t7Ol>2c!4Jg&21P9ur_--wD3)JUBS7BA8c^n!|37Zl3E@(n{g&_dylGu{GA<{6(`cIUF)fxVeY!6i{0ZANo$mN<0l z*4s6PE-B?b^VZ+IX2lhww>)C|t{AUPJkv0Ab69_SNdxbftSpkB%1~xkM#=8dQIYvq z@*gEHi7(wN6|tb|L-1!h=I+AUi|gJ9x14#G)BLh(>Ebh_+MYW#QjWb@rKz$!i|CjC z2>m9aIp~wa+)vuVdub%wc2qYpZ}F;OFZHfc*XUdAW(=<(t*d-t&0PoFZ2Qj)o_$st zaw_uZpBtXtYO^8}_U~AM)qRsOxUF{EDNh`E+~4h(cKXki z4`pQM+7Z?!ACZtx2#@w?_D|K(CB3xN96_OmP-rN7?NkNZY+~!&9(;o=wddyv%;k|@zxzJnHxO$uZn42vdjEFe%V&F`BOeyOt%%l6zOH23;H-GrJEwV~a=ge7ECfWxgrB$5!QEAEDg6TUywbwd>7uxknq_lT+8%tZ}at zG?IM$b>hLf3wMY2RpvyR)_*L{loM@whLKbgItiyE)pi{a5izWM%C}|cReJa83i%30 z9g*C@#a5&G$G$#zV1Df39}o3f1o*U5WEvdERjVjgYUjGlyHC8%@;dQtWCwm>wFG}G zP0)40!*eB$Bio~C&tJ6-RhHSy$@HfQ(sMF=9f=!1cdmfltqq4Fl^qW9-Ne>i?H=O! zQ(>Opt~}b(R}c1!E~Fp)_MDk4b#vC2RF(Cj7B~Occ>PG6%jxjjLB9vw7|)B@^d;Jh z|FlGvOOQhHqi-IkFRg1%N_#%<>yo9BP77CWskl`ViW8zHybrl=S%cwU_~vNDpT>Wc ztQ1%)oZ{xwdk){fSzG6=z~=I|iCg_1tlZ&RP|izS*)iW>G~N2xgyEcPB$u8}&6V;& z%EP-K_l((CEIlD3z1Z8)GPJ;S=%Lj1XQsoN%ibStKmG2kS!c{8@-gA!rezlu20qGm z@{%s6r25l;(_i5B@Fwq#%aMAQ8_(AX-mo<(D@$>dyOl`^_tv=Bb6RajeUn6_`kq-{ zPy0TG=9=5>>8xC`M`Bw+(I)3-A#KZA1kMug9jaN(tGHDqdzry1THj7}wY0YlA5VV` z$$!)IHnH;9yWhXQ=KJO$_Py3N(dY3?(XHOCgJfYA`oXGGW6aV{RgXYl}a~Zp5S8ciS!RFc7R~r(sF%O3GBqjR)cHDm= z^z65cW$VW%xIyZU=G$u4F_r_T?e~uQ8x^KncfC2~7-_uo+HQ#syt8a=>53;~PvvH> zy5B!^Hsx-IBj2AZI+q4LpZ9)&{jIg0T~w``yRYvy>dyKyyxQb`XD{8)x*+r9*HQB& zg}klL>T;gGJss<{vhGUjt{pjo%ZJM>H+t)c302lJ??|I4pa7FcZByz>u*SYouuAn%ps8_ycr_~eNuN6zk1&8Yl6^HJH- zrccVsK}&x>UD)kurJ>y~;CpuG^0&Do5h6#T0++o^O2f!*Fme#dOuUN;dmu0yH%sYA zZGTW`WXs5o{m+I~*7OWruQD5|I^h)Iue&{F|#GF5(=|BFnihU z(0qZC14?=pZX$cs7r&_Q7Uy+WQx|f{Uo4PUx?_HKAXQNDT=ecdzPlfd%E$1HUP)&o zeKocSstzgU969cTjs5#&{;uPtJKmMNWHS8x|J~mXz=t#bt*BwJe+F&9i3>|$@1229 zrD$kSlQYth13TN16So+B{bt&}8b}ljcSu}J6x!vkg}&0^?8W|c1l87-3R`ZpsmqsB z*>or8pXewbtpxbOPI@d=or)4VdU!M8`x$NvoV8J6BMfGLb+PuU+ycVQp39OqdRxT& zeVoMQMFbTNSFP1kQzobf`+6$C7H^!iFiBcoR7lasmm%`?^);I-%~$zCBbcgMRFamH zgA>|kMcr0js_^JhBlXeaW|b?AS4iSwM5*1?1?p?_%P1He4!4BmZhgA0#9CMkCw8N! zS@hN8>jo()4n}Kp)(Y6rDfauTinNT3d5rIOcPhMnbJ;9C#mVH=qicE_%L^n(IDUSA zKNqQB9}oHYe(rMTkCocOPFJiN6|W{QEFho4V$wISFOn999f#K%uL-<<(`D=2v4 z_-eCl8`dd$Fuf@!>I%*0&zUWIsrfSRk`z~q-Mdz62#fNF9HEeU7K4fNP=yR@?sRF&E>^1Xe^{f$TE1?ljh^c6ni_~X8vfP zN%`wor)_%LEHgb-ilLe+QM0x-$EYa3gkOM1NN9ge2`m`qsU(DZ8LY3!7xQ3v3dV-H zX)jOlupwc|WD*Y_-}$;S`&WZqhOft4=$D#W39Ir8iQ>X|@vm>L+eL;tson3nuBfLX zWZ=ql=a&}clg0D!@=}$t%CQmdx{=|tG+C4l+ z>~7p>6kd`x+scXQLfp7vwd9k5R&_NMUX7fb9L(YBQvLhAT}oBexynXH7$Xxp(fshP zbp|HJyk_De1PQ7NkBWs6$>QznOD4N(3N@V=&IAt!4}qNAT z!2xsr_&PfqV$Y`c96scuyQFFx67!*NqHwR{!|ss@0>x z7S+?oiY;r8<iTIjyhz~+ZR zL_(pd{xBq$K-8U}ixPl+VnGb&1M4?Jk)cqO5j5=t6s-l#tpW&m1jD`?Ams*h`Fa>q zVPHKxh^jnv<#}Ke6JSYKVBJ^Hj3OA41Q7rI02$&ite2o!;=np@VMrQ*b(}y{9sxw% z1eid>V*^9F7Q}rsz>gLTg$KaJTNoxAfScXWeIG%L1%N&8!%*CY?$!cUj|5g;0wSgc zqNWE!{u&@51=zv?y6q;2t^=@6Bfv-suu&wy-(e8LA`sKJ!0LyA<#RxkBL{T$#j7+7>8z@;>>>qmere-Mkq00krv&r1M(!Z38#0De}% zu%8C@{R(ig99XLnhS~^3@hym95e!i*utY6D)eV4FDzNiS5LFC_73^Nc<96_0pgeg zA|e1H?ga244ea;`Aomr(*IIy<^C0#c0k)R_>;?lAA#tw)*bfC!q5>Rw0L)(js6=eP z4cO2E;6ni5Mh`^fG{9B@u=F;7&-nnyuK{A#15CXJadibKT>>zD4WL3C#QP(tffNw+ zbP%EC00|~&<2a}c3_w^Uuzmu-?WMm0cuZxNIXXn2+)}huqq93_Z7s|0ianJ zsUT1f=Yi$%AYvauO<+J|UIWW(fp`Uj%G(d3=?`kn0aV{AfJ<_>7X+GK~!r&ZOVhnR0FjEUw*@2 zK-`@`>|cRs&Ih&N1M1~D!0K{jA1S2h{LdfZ1yRSr!0KuAtgZKvz^l7vzFy^?<1MLQ{O886v>`RnQb=U}sLSW?+K|5I-tFf&;K96|o?6{UZ?l$G{eiAj)DOj@3|XJ`5!e z*oXzqssj-a1F`7=k$DWmo&w#O17b}F@vnmB83W69gE+r|;Z6Zod<5N74kCsFQSt*e z^a0rMgW){}!-|DwQvp(hL2Ow72kU`tgn_LZf!*Ff)4M@bsn9)xAnIwT3t)&VK%}}s z{PJK3ngH5Dp?iIhNWkz60&HMm2#y0wZ-8NBLKoEm`_2LOYX+800f^iMEG7!DSOcus z4dNCC5ZD4NSql)tfMK2k;+zWNlM5n`0mu*ou`EaY0BkA(qKkpy@dH>H2S^(L78nB- zP6J3{LldxHEx=Ab3_A~qXbp(mE)b(|80rcTHwFxQ7_dbOus#-smSAJ|zK#NiEyPAEWm4~U}*KrIu*TNEIe2dhj~2KbHuNDK!^;Q`1Q1JT?7u#*Sk zivj4b12#1Z+qLnA-)gZVVzV z!lOb}0o7sz5dIp}Kn*}R1K7|3;3gMfasXI32Slp^M4bjK+X8Ia4D4?Nkd_LnLIhMz z3y5ScKtd|O!#Idc55VbbfY$W@YrY_gd7vg50Y1k8P8c8_G=S|0fbd38VJ!fcy`a8o z0orh&D)Ip49RadbK^2vQstE;-YD0thz(RWJtP?f|N$8L2iA z3=9AqID(2i2I@!^#61k4=?%c`AgBQZ^~V4zD*&G6fchE(_A!!3qcY-eR z2KGT>=nkyk0!2DPQ8;K?0TfM!=H>tdG{dkL0;IG+m*>KeVuAH|K~x2xE7t;>@B&M^ z1M7A{Gm2nHJV5-505XU$te2o!yudn_U`U#Qb(}#|ngF6M158lR@W7C+192|`_#wei zcmZ5oMiVuFn*!**b`WDhV9zcXiYw6F{J`q7fR$&1_9udofw4FoBI+0RGm37?yyTwgIb`0?X%sC{qCTt^%Y8AT|Kj!2^sn12pjilwAk5ZU?yZ z1QuNda7hAoy#kQs0%EZapnwG8*$U8ygQ4pL_*o6ZUJUHp1#saBtkncVjRjF`1ug-co>>Vt^wCu z;J6teCJ$h$1;o`2pwty$`Wiq50mQol)PMtsx-*E7H$VabU>pM~0|yZ11g!7L3ol@x z4x9jTTLEfUfk<2h2qXh^&H`8^1KeE)adiM_<^dJd2?)|9 zc7Xm)fKCjkw*r6zXMjHeP(7}OO59`p~(!vpg~9OzZ{MVN8%{%KJW|F2)dJim}GnVwe~gj2p%qzV#f4 zfv;|3VleTTL`*6s8kF*TTdm?M}v%t_2eOcSOR4u|c<^kW7wPcbhr zqnI(w7eE~%RuD_UN?>KMa#(dN9czxY#M)xrvA)_Ti9HU^uF&A=|hW@8JmrPy-p z7Hkc65B4bb7`7gJ4%>un$97`7u)WxR>=1SsJC6N;{e~s;@bf6}sPgFZ(0MF*ta%tb z?mWIc^LPSzLU^Kh;&|eDGI?@&@_7n*N_i@HDtW4T_V66yspGl8)5_Du)5r6GXOL%z zXO!n1&nF%%j(`)xDd4nmx;RsuInEkqi*vyR-~w?$xDZ?-E)~bZW#US3Ww=eaYTNIfGJ?Su|O7onSQi*S!HL>MQ0 zArN^5c|~}oc$Iind3AXWd2M+aye_&%yaBvHyivSayxF|@yal}5d8>JAc#rU& z;XTLO%G=4?%X^2npLdM+1Me5!Z@grp7*UC+Ni-)q6Wxj4L|vPU1=8IbsX3o!Ck2BK8vR5eJCF#1Y~LB7sC9NsyFDsw7R4Hi=HMCoxFABtKFh zX(1_u6h}%W<&(COc9Qmxj*u>pE|OYE9i)4t2c!Yg3(_d*9qAK^KqitE$f{&@vM$+> zY)WR5-N>F~Z*l-RkQ_peC#RA#$pz$Mav6CmxrTgze1zOazC#`)50gj9@5mp>-^gNo zN_@(EG(Jl{TRu0wd3<4f5qvRx$$S}n%lNYSa`_7QO86@HHt}uY+sSu;?-1Wfz6*R! zd|iBZ_@43&@s03}@s0E0_(k|7_~rOj`L+4=`R(~#_IpCkpTjhzO_)7z)q?7y>~8Ap&6ni2^KvOo4oX zVu5mjN`dVHbpj^^&Ip_nXcHI|cq%X~FedOp;0w&&aDo&;F+n9kWkFp*eL-76dqHo( z0KquHEWupC0>MJT62Vfz8o@(?^@0}!+XUMMI|X|MZwcNLd@493I4<~2a6*tQBqgLE zq%5QcYChmcq8e_QJlxal$O&Ea7Fs1;T~G<-!%h+l6a{ z_Xr;qJ|=ulxJkHOcu06mcwG3KFhPW0L_$PUL|?>G#972eBv2$oBtj%kBv~X^BwwUd zWUENE$R3e>B8Nm;L|R3*w|7S$D{iJFTtL|sJvL_cfQ_NY+P0U+t zp4dXM7_m69M6qRJxnhN4C1T}b6=K`Pc8VPpJ15p6c1!GzSijh?*ofG;*e9_GF*$K% zaYJ#sxV5;mxTkoac)WPBc&d1Yc&Ydn@txw;;>X16#V?3=h~E+)6dw{NNbpODNJvR2 zNvKO`OXy0NOV~;%5-}3-5-TLKCGsW8B+4Z=No>~OL|KNNXAJfN+wHYNLEO0lH4hIK=P>MNy!V6 zEs|Z5y^?n%?@10wK9wAn9FhDW`AL#2MUhgK(v+f0F{BnsMMz~zEt4vhs+8I)wNq-3 zRGrirsf$wWQXNvaqz0s3NR3OqlbVnsN{dM=NSjKVOIu4brQM`Gr30j6q*J9crB_I2 zOBYC&NpF?jF1=6sh;*Iw8R;hJHtBBZKIuEs{nAgRho#?1f0LGwk&~gx&}E!u++=)Z zf@HE}a%C!HHpy&}sgXG#b4ccx%t@IxnJ$@oG9xnIWN@+sSrJ(&S!G#OS$$bUSyNei zSx;GC**MvF*=4dTWD8}BWh-R&$sUqDB702sjBLAXm+URsKG{LpaoI1j6S4$3RXKGz zLphq9xtz5eL(WCcTP{E@P%cU?UXCS~EtfA>F1KB7pWH>cR=IAuKDj$`qjDeQ$ns+H zGV+@8y7Kz+ba`8OXL)ydZ}|XumVB;!iF~R27Wo?aJ@O~z>*d?!2js`)Kgp97&p?Xq%sUg$|Y7{k&nn_(jEv8me4^fX% z&rn;at<*v45Ost)O8r8epb9FBDVr)Yl--oQl>?Q7ltYwR$}5x$lq;1tDOW2WRjyM$ zsobR8rrf9eK>4Zi3*|B8cgkOsaVlgLii(_yvWmKjt_n@XQpH`xTO~pzMunx4p^~jq zpi-z(uCiTar%H`Vy~+iZdnyAePgO=#KB(YS$*TOSnyT8WhN^T`Q&neGUsXTVK-CD< zc-4H>GSy1eeX2)PkEvc%ZB=boy`}mrGQbdHr>J{pn)VHheR6nGCO#Om-r+SzA9rXeA59*)P2^#zw6b%Ut zO$}`gQw?hkdkuFDKaD_*D2+IcWQ}DSxf=NzWg1&Gc4{2asMBcCXxHe_xTWzxV^rgv zhLom^rm3d6rl+Q#W`JghX1r#iCQCC@Gh4G#bF1cd&3&3jHS09bXf|oKYIbW5YL05+ zw1`@QT4GvqT1r~VS~M+NEqg6DEnlr5t%X`)S}|G~TDe-Aw03Hp)4HJ5q;*T{j@CV` zeytI$4_Y{Fg0_gZvbL(Wy|#fU({~VzNOu# zJ*fRcdqjI&8>=IxqoAX%W2ob;6QC2K6QvWclc>Ye$=4~?Dbd-avt8$m&N-b{olczx zI)ggHI%7Itbi{Nub!obEU0YpyU3Xn?-2mM<-9+7F-DSF^x|?*j=+@}&(LJDhLAO(P zNOxFwT=$diH(jzGMNdjkRnJh*RL@e6p*K%2P%lm|Q!iJqP_II7r`{30I=y-10Rx9Yd)_v-iS zV-0WyL<2zs83QE)bpw3^x`DZYrGdS{JcA&EWP>b&Y=Z)W3WH4s+YM?A_81&9s5fXb zXffzC=rtHJ7&agnk`4I{MGQ3!wGA1D&W7%Wo`$}L^9+*>GYnT4<{IW3?lC-MSZCN` z*k#ylc+c>G;gI2o;XA`mhFBv(BUK}9BXc8bqX45oqadRgqg10TqZLL4M&(A8Mm0tU zjLsNcG-@;IFzPnyGwL^bYBXx}#ps(6jz*@*(3EMKG<}*SjY)H+xziTX!e}wHL>h~h zO)IBuq3xs{pdF*N(AsFXX!mF%v=6ii8rfLFSjt$zSligtIM8^ZafETaak6oSai;My z<5J@-#ygGo86PpOGp;voH|{X*GVV5hVLW0yZv4rZNLQ!p(hcdRbOzmp9z+kJ$I#>H zEP56_o1Ravrq|Gq(9h7D=pFQ4`Y?Tr{*8_`p_qu7$e75Pn43781enY-i7<&XNi@kd zDKRNG*<`ZaWRJ;FlXE8RCcP#DCSxWOCS+47Qw39fQ@W|ODZ|v)G|DvDG}ScIbeZW2 z(_GV1(=yX7rdv&`P3uiBm|iq(F}-E_z;wuT)RbUGG!rpXHKUoqw=K=A%{o4cV|LE0)2!QU(CmfT2Q#cW&YWm2XKruqZ0=_6ZNAVv%sj(9 z+q~4g#{7W!A@g?gTju@dW9H-LAIu3B{1(a>{Jc|&ED2rr^RErfB zWfog3_F2?hv|6-VbXnZ8=(BiWF<>!hF=2tVRIpUFRJYW&G__F-`djJ+1k%K z&^p9A)q0tAu642XR_mSCd#v|aAF-~tK4aZt-C^Br-Df>uJ!t*TdcqoOBWNRHBW0sx zqithq!?f|X@v{lCiL!~eNwq1kDYn^Uv(M(F%|)9wn{Jy2HvKkZHt^F!TR~eHTRB@L zTV-2)Te_{et-USNHrbYCn_-(}yUe!0w%m4;?RMKkwnuGG+Mcs*vTe8RvK_Z2*pclh zb|Q8PcB*#Tc7}FzJBHmny9m1|yG*-WyF$BayEAqd>@M21*tOcV+x6Mqvm3A*vKzIV zu;aHEv^Tf6wzsus*azB&*hksN*k{?VurIMMw?ATk(Z18Z*ZzV13;SXFG5c@!at_K4 z>JGXNGzWVJrh~J?LWeMi7>7iMLWgpP8ixZ8#~kV%E;!tC=yw=)_~7u#fz04%h%h7= z$_zTglwr-VX9O~$81alu#xh0);}D~sae;A>(ZLvEj55XL+GUpoSBhE*i&pEd_ho!|BQ{mJhaOub%5FQo@rw_pi3Ter3 z*a`UKV&G^bYI<@qmHpY<@VImq+s8uZVPP=nL=-sXC^HUzQxml~DhZvVl97QgbZ}@6efil$6^-^79MoC7ixTBSW*@>4o=O2$|fhV ze$djR65+U*u(T}d;;^(hbW#qx?T%h^;CLhq1`a85gfoGh+`L@iz%Eo8Iw)rboqf1W z2>cW(ED_andKz{GIZ1w^!@)T}`7=_``B3b%;Yr4k>>o`*KJW~ugmCg?`p-w_^swWg zXOsoX13kkaaL!2sKMWh24sJ+Na!5FIZv^!A6b;xT1*L-_M0PIZ!cfA8k%8ts-v^xv z1*h;h&+$U%eE|&}(1ecYnf}a9JS{9FF(cupa2SlmQ6VsNkw4`T@`D}{21m*LoF+AG zrk{QG8(YUeF)7h+m@}C|zBr`b;YRIk!m(J}U zuAjv|3GhdpDW03mYtsKqU!(M#dP6_N!J$Kw@u92WtI|J2luJkUKK64;oH05k4n1?n z7}*?=AGzosTV9ZVTEAqlGQwxt3Q=4B$ySNF?jPwXaU4tK3|l1XZ>|ZGZLh{d{RnUi z!wp}`M`vPU;CxGr1KbR_L3A+AaQndR3%5Vq0dUXAHzwMceHencR2d}r;F={1C@Wexc;v{Q70yly%k+-n>)B%|G&zI8;;V<$ZCR{ z2MXh+=f;_yZh9Ds`+t>=n;y9+F84zDA=>o3rk8>8L}A=^qqx({!9h3*o8BLY#=X$E zqOdP0;pByA+zX943Y%W$^tzyD6gJc4(zx|QS#$G5&(rfj{+SmyKa>VNPjBDMxX6#f zx$U0W-hYaZ+RW{TneG3l_^1!K{eqr9|5K!CG;aG*{kio*?cn;S_a~zL-)---qW)`- zP=QAvZ*XoctR`?SRL`09nhg5)o#~ABU#b}n<8u&y0^p(>U5J(g z7=o|}-RMHJT4>YEc+!xc5QL!{T`1mbpdlW1CGb zT@EkFxi8PZW&#%PtL$X!!q>?jbJ`#3cD%2gFC}eR>9+i3<)Wt&JsQ%R zKNEx{($+0lbNFB^x7}R#zg7DWUeZ58mlDMLET!)cP(IWze>U>fmje9!d!u}7UZ&1l z$Sbg-ZWE&aB6z$KF-xPY=2J+GU3z^dme zx8J$$|MdTVu>X}wSlKii(S3!_`ifHj5Wa9WNMlQjru3q>k8NZ(#+sax;J>S$|Kh67 zO^@gI&Nbh|KV0|8VBJ@7rG~3}wU!6Ec*Qp^+;aSP@2d4JyHu^KSNjGHjVOg_r(A#B zcl5N}gT=}zuJSi{%QbJ+E;vwe;^pSjvIkA8C+hF7-`iN``PQ`EgqOC3JMLWff5!j6 z(fISM+F;i5`9#n16pf~v_m78a%zD_Kp}5%gtoenH6B~Jt?C=wMde6d;VTAp&c9Gx6 zdd=H3sZE--s}~eY-?h6p+_hDF#OZp%+3PpY$=%BqcX@VA-JMSL_0{b=>X>}`E!KQ( z&&9y}tJur#8(zIOekswNrht2!*LOWB{rme{zoi(?+ANTFa=!y@J-_^pz@hf+hPLP9 zst1;?G`m*RKv8h6pP0X()%_;%xGuy0;I*>El^0zHZi`?0t%s6h{%GGOiND`$9n|8j zzEx7+dUx?VpM$n*lrFv=mbrGUM(kGb-MQ_r4Bq^1Y?1xEFUbZUi?=I_ws#HvTlAuS z5Py35U(YsvQcS$&pvL8UuKPdy|3Ccy--iDiL;}-mHYAIFfBM8CbNQ(Q#{Fw=H(a{G zIzu~aeZ}}x>Gobsy3)RjYreXSs4sqB5x-k4+Uiimwgpe##hR#|NY@=}U!qzj*)h01 zN`LU%>4vYX*4$B1F~IM}EhmZ%&)YAn`nt`8^))i#rBS?l$CcHF`2`O?Z+Fk$)mZpE zE0&HM33_0~t84SFZr75%i8^8*?VUdA_tS(Pr5{>k=Dg|omMZmyO_AgBt)y863ZD+S z$}AjNS$*u5@P(B_o~+N~@hys7yJAh(&w4vtxO0O8nOWj0pU_wI2gcym-xj*phV_H*UlISp*Vfyo(3F`6u@ zk2}*(l}4T8$M|9QNn?ct!yOV8mW2#TQ}!S(Jtis%(IL&h^+U>E(og{LV z{0Iw4jEScGi*O%5zkiu8gmIGoi?r!kDN!M`e_bzjIIITzS~ovGkHyBY$~3di^DXJW zqmBDSzui@O*{M;T+-kcV()1V&-bNd24 zheW4L)j2J0F=B04tx3yDN$1pYk_PK#Q#8a{TueZDvi-m`2qV~j7%`AySjU;HO9uR8 zIASVWPQDx(H(O4+07q`NY(Fb1JtHNA{c~erK~7!>_PF&$&mjyyFW^0_xjYYI>^AghmL9ktE=oZpe0fHP_M)k z8apy9ZpEZ!L?xxesxCDW=&Aoqhu%hc{}dg1DLM|00;MKLq(`MwVId2x&tl?WNjN4f zfeLNSNMdEA!1`!949+Bkp%vn&skK^89e=FdPS%;b#5)y_GqOM8K_k#o^i+64Sa?(d z^#5cXsEJW5R#;5bFKfjJ6sd_&$H}$hSc``SBk6>uW4KJj##w4K>O9ckK#z}LA-SJkHmCDAi}(~=Vs!ovVi!qU^hf&9{A zqo`r5BpNk2d{I;c$Vnu0aa?p9Al2j#4dRoMGoeek?FIhKNaE0bU>~OkxOA@EaQ%s4 ztavWpaB1AW;`ZGX9eDFc`l+U)Z>J!g1HW%zgCW%6M;Kea;3pCpX%Xykm>$M1d#a+C zpVG0zrsV7Auqh1Y6o+A>Il}l!KFdr4Z2E!JT+#V;4xSQE`^R?y7?6LYqiMxI&E*jT z{}VkTHXh~Ug=7L0F5;12-UE=pph%O~FW~?bDEJpT68LH9xaq6%;Z*r)7g{SM-4Yaj zWJ#K$qX%K2IavIli33f1293Q2HG?J(@#JUFs6eC6ps4{(Z3ayXXnHefdO$Ooq@guG zR5$5fL18ku7;s@~g0X>c`sdZK*Mh4MZD;Rxu_Z;;Sj0ts3q+$nG)+($Ya9JY=|F47OkMJyQ`#)@Td=Se_A za_172G@Zo8HIK>PPEG2aS#ePbs0jA_3(fp}7;_k&@N$6io0XBoX6VVh*xnRBHUzMr z(cBZgg-j)ae7L{2Kz)kFyXr3(^FqAv`qg;h9B^}r@xqNocwq;)tKiuIZXdW&9scQR zgs>EJufYr7fb>+9t_0$*#S4o;0#qLA&;PeC@06${nDHa==c>(LWf{!^VmZR>!i@_ze(eu0&-sEjtGM#)$lLVSYc@bwP7aOh6F@N2kH z8@N~FpB%qK701n~;keXYKgZ+7ci1yY-}@uH5j`Ko3;$Y&AAA9GkEwTj&g=)q5#}yP zu+jVhy&rSm`;()>*z%3k5-Jy|3gm(+!LajTu|m*%1kEv#AErrQE(u}Ji>LX4&43Fa z9ipNB4}tjwdPe#F^gKC<{-ypAX({N}UNOkF7R;U_BnL-=9S&~zMIpO?oj@+ox7^Si zl`AVW10w_D1S-|olP}S1Ox=le zu@B@mT|XmT>_3BsbaC(u8j#o*x2|0Of2C}0JE`|L`i2DV%y#}$z5Y+iS^{ODzC+i{ zvN%-G&6DH6_5V}{ZsN(nP>9RbqhBF!^!#L6JJP_f8M zQ+sGy zcvA%Q<~9Ar6~ed}3Qgr^@hg8OPrl$leCPrU%JV-l7h?Vg%bN8cEGzXtSQZ*9bfXLD z8{vLI;l{sUK71Q5Z1fQHQ$M(OV6J-)=DhIScpv7!aHl|6Biygynfd@|a6bZnEyM{0 zS9k#Ofampab8?^d&dJre|2$8fHveSHufER|!@{>MSU*i;*>g`caRiKIPX>Lg&{uij zx7w4g%cPq&=|XaLIBGM(?i){_{!gKvaDx|P^n&9yPP(;|bm3<|+JWNzJ69;Ap+28B z5978w<;Oe>NSqB90H~Z96JW!1S}KS76Ak7~zvzg``QDvi-)%(!^6Yd+daT1 zWLAI|6T_j;_IC3^t8SP{zlS#ilp-h0(|L}|^e``mr*jC?+Y6TIU;_RljSs`$)iDqj z7^l(vd_3Iz*|9iz1$c3CM)Uimbg)E$y*3fHu0(Q8RM5s`YFGl;t|PNxLl0QXBjLRu zF(n<0SYS$n%{XZp5tC+d46?2v3pol&0-j+T62X#;>J*U>6_%8dGKo#pXn0j*8;-aZ zxi~5bz?yjtFVPsBFvS&v{b8Mjr{S%M4>tGgxecAt3NnX59Qy zWe|siu#N4oB?gRmV4y<{$$;gVX>|{egDwSoIZBZRHc&9XLkn10iQ&-YsQT05W+eTq zmU24{jONh)s86QsZ5T&qZ}>bhY#idS(KP>D24Vnq_~c--pJ%WQn>NV~P9C$EunlP{ zvuS>IW*k2!GtTo5p5*vvWDezX=s)<)$zxgp>~M}B6#!xE%)yy-UzaVx(hvGf`c*eZ6a{tMmk8HWe|z>BC5mW%N_QeIeXBJ4V*aZ`AqgQoquw2 zLTpq*3f~J9ca;@hfOzBk=h~6=0z6+xF zChmJ5cRq#^U3(!Y{2J`Hh=%;N&pGd7o5A$}|4j%7XX?5Q{;K^yY`f@{=n>G+`y@9H z68MomMHi~ebMSM+V&R#<4&m&t!oU1E|C#kh>ACfuOvbj2a^GvYZ9(n(IISKiE~@xf zpgn^A0d2wFpXuZZ;|6nN6wY3HWv_FkheXCMW>0<5TzL`PTpwB;kBnVnX<`fx(0}OK z*x<-muBBnx+}M@sIr$TgnQ_4s!r>#QI52ZX>AOZH{4eI-1Fq)pe;j`$DIu3gp%UnC|QM!Nd2GZHSWmue*64BpU3y{ ze?5BjI?r*=d7kIl3&GS?>qX za^bBSBtg@Wg?2z*f))U;&Jg$xm7t}8n>I{>Mu#^|PJ-5eUT_z|Yl>c=qi~AA|4!14 zV8I99mmv|TJ&5}s#U~gC<)+$cbl^f+pKfW(Yr!$h#~7}z2NdF^_$VC3)}wwx^GvLM zLqIP4HMW_2oJ#mQww}90q0;eAv^H3XqZ#L`4s|$jEiCcmRByo4Zl+jiDkp! z6MlQkiZ$WG!3<^`8xZiIb_Y3Bbo7!?zd*J>I1TOFMn$orVeqR-77R_I%`%~@;4Af9 zwB(IHC_m7%Qx)=64e}CR1arm{->eD57vcV&9!&{a8wyv02nUrn^!#7M*CYRUvm-4u#|ASe>gpQcZXORWZwMY99`Z@hJMzz?QG3!oWgu4TVZX~_ zhF1BpQO~6E9i#Gpt!!cq_ceSrsnV*V_{sqPLf2hY*Jpom9=`jBkxkI6ANRVQV!2yJ z=dQNR=2TqBn*a1#LFJ;YbyIvdk5wMj=fIKTcd}J(O6oceRb^kn77e>OU90y*Kxyf&5|oCYUO8c zOVr$5$X$JFPvE`fc_+feq$?HONA*pSa>(14ApM;=X27X7b8(|ZeC3Vd!m(!NXNoNP7U!wMN} z@az2DYq$2eD_h%byH*-B-|5tHwP*X&mmZY=@-~KfJZFnhW%&&wn_2E@qiBgSIbG{l zT{IXlGR?V(*1zl71?iDxF-}IWw%v>wwY&Q{^KD?52<5JJoHA)Y^J3eZCe|1vU;B(=J-O{H= z?b{hQcve}HqKtg5&hpTyZ-+kHHP>{?mcqwgvpN*Ph+4d~;)%^e?MrU$m>l{lXh7bm zi!(Ro{|LBOdq8=uQY!86kMW}v?qroMKF;EdTOd`Qo-Fq6Yoq)H1&8jNF(U`gnp?3a zd}~*1*ZZ(u$2WA9H>R%@i(FOwGu*32cAM#o>&7MNpSArLDCLE>E|W-n$$b9sDKqER z`$dhkx2yXNos=$JTJZgfdfkiR60?sE@6XxGCJqUOmX* zZQ92(^I}|%UHV#56A<^vW83<^bxLo>^d4&SeEHQ8Znc5=Wh)HM&QepWZJ*IAM}ZcW zaQ1%qz5QZYerMb=qyy(2oqy47$2lx<8~4zU8U6FcMy-3=w(lg(X~x2RFS=jelnT#? zD_ohgZ0?!*NSA_NYkd2C-u7aPrgN*FX~E{9!eoslruCJ>d-8Ll}JTN)5r_yyx)Rd1h%WWryxVdR&mF}x< ztTs83F#TBiMb2Yq-vv5@D|Z@~mu-D@)ai@a$;>SOx;8N7MVp+8ts!0vilkgdU#$==io7h)w6Fu>bw>1ef&P4 z0h{b+QTJiOoKLj_f~CHGSeY|Zft7pfboZ3t6UB;6`O+=Yb{pR@V3K<6f=TZhf=*AKczkHz z8tSbNzgc)|$w{}`wA{(ByGK;)@zk3B z^K8h~XN^HI37=;5E?K`;o4v+hh~lF1)#eM6n}Uqq-&=S);r#Nz{bdKoHO)`7AM&o{ z6|?>6C-0QYx*eOuSkjo8?2B1@$2Y9)74`B9sQ{v#qy&UlveE12=# zxqG_xnM9Yfk7+8q`VBWpZkP0+w~k(OG~dCt;(b7{OQKdkM_KOH3CE}3`S~TNt4L~h zzxd-y^YWj9;4=k2 zQ=p+2J&12C;3VOTUi2WG>8IcMOh1djefjtYXI2Y4N!|An{K8OCldFh+xy18*(7ZScCd!Pw3n{J~3vNc=bT z0@`eN{b5{iMuL_FUs@pW1;N;kCCr-@CPAx$SI|Fl^ZGtqZjL`Uio-iXgyvdE?l$lj z5CP%Bi$y|Q;s1AX*P{5M2)Q}%t%8>pEy3U4CgtW`1_CluatrD^0Q_XZ`+ueHS~lc0 z=il`m9mW;DZ<#1RaK8$1w+Vh`j};q>CL_3;IzR_AN_1+5ys`)xEQ4Kd;#QTw_~2le zS)enw@Cvaj+F>}V1yq*#aAQogULZ*TqX>^z$cu} zg@s7`A|>#{V#4WTH2y_Kc;Xn*>?pVciXO<|h9Ti8esV5=ACRVS zaj>f^$j#daBqx+;Qi@h?8FVK*WFZd?mywJFj<=pGL`5|GP9UTxSRTRGvY|ww!^Oxi zhk@$~U&!W_3xpRaC3-~Sc)5-%7LJ_KVFrutxI*jb1dcpn3i@S|I^{-!0Ksrx5qRQZ z76cw3YxtvhJ`SH?@y?>+QR04xv#A7C_)I62C&bxJJVyR}9h6Pr37>HP5d3Vx+RDMo z5u?^tyq(O@mLI<7Ze`&jI8CH*_JUZnHxGP7ZrGz00+?Sq0}8DwkUP#+7O==5v;qTn z3sE?<3L~`Qf@rv3bP`U_W2OtNR0!dCJL)8#;1UYuS8y4H!U-;=2;g|jDI^ZXsE4nb z5b^R;OCB)*zMeQ@{R!{_x}ms{?7!oY4`_G%Q5%?|H_;GZ9B05<8T{l(2#;Dr2ntP^ z(JB;@Nr;XYGA@39moPpSt!+m^4CtCMVLxc`8(o|QA_622Op&6H{3)$T>?k^CdJ0h+0#YO!qW{Fp`f7Pzi1(F)^=77mUfnS zn1XnLMXcXx_JUL@JU&hj4_YvO$PHAs@I^6-3jVBo{4LEq%<%03v;&1?gS*olA^A=o zHqNl34+R=F5qL`LuxjOV2bo|XQ1f$&ES4_*c# z16>H+5Y>?b#hT1WzJD@KR9$hpK(+hLFHZYYCh+AX!a`La4JPnnM-&F3xPbo0xG36R z#s$^zALBywKgGqP{asvSIS|TElwJ}qlwUah4?6g_YDMW@h>xFZsBJ>o3&)=vT^y`L z=KP;|$Tf6lH-4Ux@kB8qSY)mFjmEFKWImF9aLwY?RsrtyLR|;ZzV?LS-c0^*9S@t}WpmJ=1nCHeVZ&Jm$}oPi4<;6Zcxcv$73?1T zL>rB_^F8>{fDZ5+;qamPgI_1Ign7xqnoxWKgJFMiFf2sp4Sp%AKs-dZ&W{7_GzBJ; zqT)v&_%tUgZ+~kyXGgq$69|JptUx_J-kl_?a#myc4>{aVV!qI_ZPhbR%(iib*$&^NBf*AdJRTB#fjawlUDbQ;{Vb*8^Ul zdsaROgDB{5gn*QffSJVaJ$Q5`uWS+Ypg`1pAsGl59d7u&QV|OMD?U6u{IF)gt-$CP zY+#gIunQ(ipg_DZd4h8pd^y6n{){+(-pqt2AK=;1)Cfete~-3^$4@lp{BZeYkdTqz z^znK4%^n|za_4XK@<%=az2N0hWE1ndp8t`zN0@)BYZN97O?b*B^VJQtyN)jYmYyzn zx+xf{B5HpVVVXsb*$H>gs))|z3eGc7xgv1_a||9%X#N$Z$3}kfT|6`;Lt}UsG^l~L zm5>Ta0l%li@i2%Gg-0EJ4?LTg>+!-x=Y>((5S)PFd&+<$j|&rf%p^=+nZd&e?Lz|( zGy?cOG!+IuO2;weUN!KL*KA;$(LxtI=+0WS_KD6;^n9-NL?D>-CrlFS)g@cyKDT^O z!9mIU>+7AO{Cqcjc-?E6xI-HX*LGM`)DP8#=IQkJ1v^Q2h%(1wUd8r5sRnRNIRJ`@kzylL|x zi)D$+yh4_FEl5g9O4#RtS@=CRZ!J8Qz0I|&^Tn0EneC&#FA}G2Zt3o}J$Pc-x!io3 z+Sb36hnExqhgdJ^00qgitM1i9(%;ftwUgpz=t=w%Z+p8dFeC47>du@&p>;XdlU^H4 zGsNzWDvylW+1EL*=C0Mzk-q(txnn;H=x1G5Vsrn&dz2mY33-M*>kTR=-Ols5o=E`_aFFuM%>}ZXYBg+N=9;^d+dX%i;bAdi=0nc zlLlY^{ARn!@LLOtj?+hkf4eb4La1C^{yZabjit%;buy>y2#HX66OzBQ_}-?bgr#0X zhq+F=vWs2&Xw0BL$}h(JJj->`xf|2=z0U|y=-2PUw3@KZiM=>mv8$)IFH@_#=P)UC z+_5F$v*lj2mVQ;VkUN4sJTYHEOFZO?_~-4zQx{eb+2=Y@`UoR+jo6J1`d*UfdlzUl z*Z+K2E%s$ohuRp2`kRr0@{7$n zv3jSLn51%tf7JM--9BU^bC1Hgh%eF(+oD?!GgQSMyU&03TA}pYK+jnr7u5FGZ2h?W z?N+abvox-UiSYQq?Is@Qj$ zTMwnmw!}4SFAp0duBa-0v*A9~o>BRe25BQ6Q_8{r_6Ukk_zRbq#?BM_mmXNu!tI;6 zZ>ie;W4BZ0YqGN~w>M+!O{?4pBN$c}sj=#O1slxM*C| z-4mLfnKgY*FFx}>O1oIExuMcm%4SCG-BY++VW-aY>dn6rtaNtd?M=6x^;LD6?&RdW zFA^QbDyvGLW;L#NUdbtX_D<`)N||SBL2laf#_aDkXKFHz(%r>FLOr_14jFlJO;g>m z0lkV{+249ilzCdTFeLekY}+%dGwFld1-cV5?X6kHn*uu5FVB*j-Fw`;*2Bl~Ek`P! z4Iu3(pGDOz-v@lgLwDdq+87Y;Ejpv|AP#_sH4lcUQ9#w;E!^Q-UD7m`;T)Cz8v zb$p$7?m~e4_L74K13!$>I(ppG^kz%1N!DU7!X*05b22YDrC3neTO-#XAW3`e>OE>r zdakUNH?$Xz{3Fdq-j^oVq5np3jJyW`%DV_kW~YF>LhSb5}m>cpt3K<&zbU7L@^F4T^^o8o!U+2x4tTv-o)u{pK@wV6+k z+eP#b2#OC3upC)G<71+tW6`Lt*#@sRi$77Bm9czKnyZ)ikwXE=P9CR|H|1lDqc;yl zy!t%8GJnz7_q6Z?!;=^DD->3V`5bii$gEvsF0w^_2ORc^XI}M z_WayJq^**wy5EWS~+^7O4! z#&$LdKeJcZ40Ei`y!?EF+oGK#m&JOTsg^k#+&-d)f;sk@2-5eLnphp{X@19 z0~x((7flw(D&xO1{_pkuKg(0GUhOieV@7}4Sg#Q?tn~9eZQtK=U1O~$d=_*8ZO1zp_>G(2Nd#Kkd1gEB9T zNV%%I0aNbBORv9md!zq;>Amd(uRNYRuA<_Vu}gc^?e#VH2ko96@^eVekpS_GAs>xr zRPHXm;_^_fu{j}k^*c=k@wuP4=8u?Lqpo*%l}-)2zcNy7AC`N%S|RPbyYcAP`xcu| zvp7|>+&ge>;Tr1^$Mzq0SJdvk5yWW)z6YJf~v8%50``jHnU`n^qWqbOG8b|iFx`&d5 zVc8q4X;YK+c3httmpM@X^lR~JV(*kkkC+*J_>JQ9rQhE8*dA#st=@qe2I3KG8hB;l z$jgpL3eOUVo^raUJ4g($q(t=TzvuamUn1oclRCaV@xoE5GY`|>%Pf-_G|zQpTWp_@ zg11J6PPQveN88}F~dy{NmzMRN44Blw4 zp7C3|jteP?y=;1{v9XV@>HKZRWwo2;ZsOSQZ@JnJoAby<`b^M}`qgLkkEpktzTf#y zx}p0Mwo2|?Mo9JvtfOs3@&4BVpEXuC%<#^}*n8Y_H4i_%cdA5gKBL&M@!|NR;a(F^ zr0d+do8RsEI>bBY-gs$+8-2P|5A)?i^E~uhc+}oF$yR%)@$%bKTW!nA#c6>5{pls9 z9_&6hB*cvw9{Ppl(Wq*w77?`ln_FOrmQ}0wC@hH`QY1BE!^YhYJp#YfOYd6p&hYr7 z?|FKCIxc+5xqobUuHo8ApRUYkJUAd>cC&&0@eV(I4ZUWWJge%l@^551(&T@d3PjpF zPbTYpR>+n0r%&?6-IUyTKNr)g-8z<6PR}$v^c|We;Ggg8C1y%fPjpO7yj&U_B^&(4 zf*zyhysTTSS-uaw_bT=B3h@(Tb93a!&s%wGGj=}kLb#Yw-(#iMN2p()wRBzh;YGjH zleVWnzxtw*Hq62zBQR>n=f`cs0v?VwnKtrs$~%ks!OQ9V$S@a|m1R3v>SG%s(s}(e zB{#YQqQTu&^U`8UZkLcFNl~NH1pM=zy~HBLByGIQj$d z#={t!yys-k%rT4(zvIx5KkxqFxqZ$I_2fT{{{0j}2Ung@Up{R&k^!{~=ota8ZP)MR zm|xeZ6M8s%&wp1K+v{cpHjUOA6kxD@{Ex+!#y>j8O~1ulvmIOZ>*vcujq9InocXRT zrRqkKr<2;^w=0!y?M=Z3dX^0D)4Y1i`Q_sNU+52thNYi5y6?0UWBv;eMC??D?`GwT zb0bGT((2aqyPH{YHzswo_BJAFsy(CTnRo2B@EVEgn3MF%)}lFSJ*A{zbb?MyPfW^N za-N6oU=!;ysjLvMFBaz0R;ewGPa5op0mz)@#j^-gM{JY)w=j?aS7FwudT5 zb5ujr)aIuNhroyMbeZdjC3@$F{CKIH?X@+IsZ!@ITPPW<8kAh><{+maHiSZ(n)HKq3I9kotbSlE>(HanLXbS2zAiIv`O)&0WRLGSO7 zC*c*M?_gEPu8|bzgKo8)`k) zO;a#k=tmLTCE2|EYE;_sG_iwj_Rr}OQ(hVu93GMo6`b%bsVU(^SkAEE;HIU)QA>j_ zh3^R8ppbZKN4SM+PC=(@pVYfczbIUMS7KK7(ri$@qABNVORb}NuG6x$Q(n0D`_&@8 zdA|8k>$}F4BkG-U*J;g?DU9}$l{kqx-td*V-!*f$m(*vYNmt|^^h<7M^uI3j6xa>E z{qR}Vw2sUb%Viw8srsV~Y3d`YAK>Q>S=0JqYj>_~o9usT#_TjM&e!XU7rrw6hB2g0 zou2Ta{M%BANU=09(n zmFaZ*br!s2j}K2mz%prDRARx zA^}u7)d18I(N6G_Dd3Wl#C{D3)3w_r|JAkWNmCkq$)r^OOwAFl{Ve6MxU=eMNrtn; zH(hB;$0{Cge&xAWI%~B>(a7Z0dmrsfTBDSg?9}-sCb;aZsd0dk=R&UO8BAfW+ z+Yp*wrd!HZvv8VUnrc6f9ZyEAtD213n7dxy;|>+1@g2Q1eb+u6HhoPA<56gioTY_? zB0v48ebBRYqFV1?V{Ggp{t2(#P%lhK+8O9FfKUSQL7}MOmtVQk2 zXm+p0pR(cp*xYGHE1sMRy!+so#8x-&&7ItZ6J|=}2AWuP8(G|V{e9l8C9@vwR~jej zQa13BGUT)vmgTB>pfI**k=?`PbLuV^xocIs-VlF&YvAORi^&yBTlyX`-S<(q<>rmq z4?~DVQ~E-O&jO&brSWv}PY$wap;*L*FHCJ4aIaHF*`cs^WcZxrON?hLM_xEQ;q$ou zhbyi={Yo!-o71OuAX%v@KX_o(oGBp(wly+txA#>Y(^btG z@$$<+8=n}b))toGs7Q^Rs&h6)kMH+yDy7#JE)ze%Uge*6&NFV# z6sr+B6V_WlEPc78x%}m*h?%3NtqFg6t*G2Vdqc|n#{F9Z=Y-E(F)08OH#PX(T(Zk!NACY{puo7D}%J!Hvel=;b}Vdg_ly!5v~^!O6*c`t8~L z>h3vCQlDX1yZwxh@6Iu0q>_B!ULQ)?V*6FOwlL}qJ{si5huRErc=_Wf3^T<;h0^gi zkEH$@5o~jR$BA9(b&z^4f4-bKqBdjA{zxj_)I2~a-TbQdce3yzRchfmg&imwQO^KM zNoc11zGI%{;~it^r#kcf&~FpagY<-)Eq*inxty6#0-jwyyz%%0*^NU32O7xCeV&*0 zHtzWu#;Hefb2h*Jb{1g}5aQ=^=5C?fo9W@sf$LXV>%N`! zt)l$#dAX2lHYvkbpEv5TF$>P!%#?e?9Ljs%qb+B|;;|Nq zqus7H9Oj4jyBtW7NFV2WwJWY4XIPWJ+gfM+tyQIKZrDUM?ho7?zIK>t!qJAtT;nR; zu8bvTs~b#TUD~4FY7Or^_3OKz#47f7w%k-+o!UNxU8!=lYG+XD!4rFyx)2M!H7d)Cpc8=f;?1jVr0P+=eYKeRaHk-gU970^y645B=U2>F@qogM+FT!5QP^ zbyVVS-CtU?L(+Tmqh()GuT*u1?roZI;6~&~jcoCKXWjd`I?0cFP}F@$p!rNYj1;vNR4)NcC+ukWxOjfBvPF+Z|pEb5M%@ z^&PEN`fE8*MUo zTF^BlLF<~`_jSvwE(d57-%S&bYxy!{n%BzP)2BPm8(^M5o!>u1X2*vjY zx#^_75B&6gyz9e(@@c`+S=$z^ijAK9Rr#(eU7ap#t2ip!J#qf5zVV$Cbi6-&jn^?t z>2Cg+=6P22iEm`f413GZIwcPU-KX!*tK7I)PQ&+GxPvpB-N}gD8`^d>_sovKn z*xPD%rk56;tXFG%QK5X!#L~TD%MHCikJRrI&p*2GYx8&O;X@dTSI;F{$!fk|?cuBF zaap@}*ybMc#jG?=*7};YcEQVd-F7pd1h2`Uucdhl(l9g!J z%!yoRV0gP5 z{qi>XQLutc(UR^1?dv|rADEvZQ|uq$|D`c34E@wARH#6AiQM~24?vt8K zE8}#wUva^jqaXKKRHSbC>HeV1ZCUw+)vqd>K8a1bB`uYDqIs#(INIKv%e2B(1B{>d z88qZqt*6zykyj3xt{=M~QO!@%qWk@zn1yc+Tuw?nSP*{sj+@o3Fs;>%BGR$<#G1jo zHEp#nf5`A@$yn<-+w$W2K~#SJr|B0Fz9>D7&Hut^FnX(WH{kd!o5x9X***>mpHgqn z3rRcpZ9&;yn;Rv?UF~BG#NF4;Zuu!zcfVgu6+qz=&{o%>!(ZAc2eF3axL z_x?IIZ^U~y<|&gDHQQ;G!7-0pQ%>u={UGJ!v$H7iu=(Dd+1r$wM~v87W#wOV`@9JG z{xSVJWd5%_skCsnQIz_?IqX!ICbMTlwPX6e_wXtneDsmRg3>|C1$Xi_vJ{8MEVaR8 zbtT`q&pp5J($tkh`%j6LlD;8PxbxhZyw%Rf)RxMwWwoAK+c9wY-t-wRCUtLn@4x(X z%nfx_>bt_Y#6zyla-MeS{6@(qxA$pf%Iux?Ht_DeV&h&LA79;IQkt>phl|4?#gRd6 zp*O9%^Y)pfm!6#-k!iELIrXFSi^mJ9yZTqqUcXjtFfhDleXw=uvFA2*g-XlMD8|z} z&h7C%`gZlkn|Iv;OZ#bbz4Hlb%$0ENSgWBfV{JV;ac%k_^M&GOs#DyD{vo}`N6AG; z7W7uhziD!!Fk-=Z+T={VUM;;@EULWxzv}A`@%>4^E(=_@AI`7XKjMMv<9#-32d=bV zZ~cB{%_S%M;T418qi!hD;|{7$&P?-t&zU$&zc}WDe0_G2=E>cCJ{8u)PW(15eQVmG z!Ef)m4;!1%RbxHwQ1^vyg%KOV{XHJk9@I9=l)A2RNFproP9N7@Lke%l&$?q6w_v@^ z?37W}lQTb^$dkI>WxYYl$MM{;wW{%zv$y+bsQ*F!f7O>MS-uWF-B$Lv<-&^TbxlX~ zuXaja(^+-=_|@Ao_n5iW9DS*n`How$t(QX0kJRiM*R(sWNj<$=TXW&1CF%zQynIY- zKPTzz)?E=WdD(Nl7^?zhhl?AoJzX`mLyorJz^wXBHnUvw{hV3*RZMnCYkj=BV#}41 z1%rm=kNyVuJSypVZQUxDTcLB;pPcVMFUrNnG~6$A#l$gv z%TInEGr!(wju%t!UDcb)12>b#{QA`Q8#Z?D+~GU1i?cIFr4Ksxq~30ZzpdZwYWoMv z)tE!e=TzK_SqX;AyS}Tx4i>0InrrBY^7w4(LzNg8;q@Fns_Yz6Wpv39khDeSr7N z5Of4T061+R0apS15MWyx0lxP)XOH5;rvc{B3D^MW>y#knK zM}$AtU53^Ka2g3a0Nf0)V0m~AuwZ#;LH^0|8wdRF0nQ}l-3jmqL{}rim-m4B1&c*R zB)k&fEdU#-6LbV`1-OcY%K**=I6#A-BX}FY*f;`y3GjA+%LL#Z0CUC@beg9OZ70B{ z6Zr5hfN7cpJO$`^2-f1myAiBSz@b3jgZ%68;k^KJbP0F^(Dwn1>GNUKKcTfAYW+aR z>InOaxpvTd?~Uqr(&=v+M{l~@<1|KB510Zed}q*T358d=Y0U%kTMosJ)v@a;tABUa z`s7jhRr_U%bh5tAtE9iR*p-R3cT4|T*i9QOsW5(H_mxLUOxmFL5o2raayt@tDJ9zu zq5?+WociyELn5voExxUe|K^vHo0^|j#2DD*+`ZiS#HwV+?vsbsgl|}JQP4kfLo%tS z=TS^bcEr|IEFrz5fA8amzL@EGxmXsJ-miRcO0A!=~w0nbm6-QT0VrG_nQ~v2N=2=sXMf}cLk~Tq>chhs0V5tTuVE!YQ*HG3r zP4=mVm9Ou(sYoa)J=8dN_r!JKyA|?M6tQLDA>2I+Q)&vheE%X{cp9h#isTSR_T=w8 zuB)B@d|LC%?9~zxFTQIk$SdYXccq&R79S$D#zl7NtV>?TtCnls+BR;^YWlVm3&nX^Z)E(1#pOen znU3l0lQf_C3?FdJwkSX4-8+Tw>lZcfm0n7Z=AZ~D+F0%OOiW{Bnfs>eA;XOI79ZUC zDCktr%;$&vx32#>gig$LKa-U^RonY{>)oN5-gv)dcyR>9=pVHpFTWYpXyB4gxvDiE} zDBW0MddcYT>V*Ljj#E$VviD1DZJw##rFd2?uX}&JzU}d|OTx{!cBH22o_kdhEGBQP z5uUVVa#e5N<^IJJ=8t%o{l(JGd#h#Wu)>OAYSV%zZ2l0N7q*QO%V&Oi`jnbySH|7${FhkTqh^v>ZuV+wI|(PV~qX!MZ9)qVS#9$J~2%(l z{f$lX}Jc=WmU0fYHco2lr%y$T z=eKZ<)ejX2yvzS+{@5pJW*N2*o(i=;RJ(a0EYxyh{qdv=CwvdgR2t{al-Qyr;2$|D z`Ffyv_|7qdr=ByOB~hJkKK01;t2P1ob%81ocf;i7Yb2&)mu4yMN}43+v+Bn96*E4p z94Y`u28DPJ~BY>DauyI>GjUMUh|xDS@@RSEie9_-gu27PSpj{Xpk5 zQ2ls0xj3M$tbbKiQGD|14QT=2^+wEJAP@lIP6JMiJcj&_)XoU8$jMJWE;FmW=do@` ze09u$$J)o{D^5ygEIGGfg7m;2o2ES3pB{N#zbt6{`wofocYM63PFMR`F?q_#gN5_o zzJA#vJ?BWYsYkVYzn#_|$3x|BjEOMryf(Mj$0I%B-R`$#$DFK~pSRppGqbk!>zS_C z#bR>3`?`x)Pfp9p9^bIz+Lk7{9wBshcmI957z+-C>Ul?=?z%f5r)_NR^bbBK?RSc= zOnL3Fa*_4~qr$!qm#T4G=~qXe_S>$i5kBR~r_bKrJKy|TTBg%HTTJEU<2N#w=}|j7 z#U2)=>+LAr*DV+V;r{z{sd!8L7^f5LakTxK_`Q6W-ThU>devnw9rp0l&_hwvLPC$M zmOs7j=1t6Z!lq-6UKRkv#nSJx+is8mX8O^=dhX*G$%5GCFP2Z84 z)eR3xh7a)|oZtgkRE&9#0IhS@rHKy?nyha={d-rP!zFx_i;r$v37zO5VqHo_APszpwpn>5|v$iW`Hr)vn91I9y}>B~xpXP5tNS zjnSJ8pGg-!D7!y%-YyAxtvwYln(*Q2l^MW`wSSd~CAZcv8T9pw(i!;`ggalyC!eJy zw@-aAHfPF&4}N##MtyTzv23emfAxTQdne4!xH;>J@$AC4vQ?US>z=+(Sp;Fg2^hGq zX!n2-Sw_3i(O;h4ksNsXc~T61&}N|9*)%z`y{8=a#1*n{9Y5VwIrI9~%8nzAejhq_ zr`2jGJek1qIUTip&fM_55B$6}7B&6U%ddHR)>Q4p+VEwLCLdz@bfx*9x3`=Q0WN^| z3^q2lk8H_qN)GfzLgD%Vy5IwyLIJr&joAL>k;EoD7)^MQvTNNQvF!;uhV5UTI;Nh+ z*01cCsJrIL`-pQ3Gu(&ipKqJu{DEI9#L9liJv+3eTJFSgzFsJKXzn#HCk&y^v$;?H z{9WIQSD-0D7l1<)vJ)G*`AnxrMal|R!S@~Mb#;d?vVK@$Gd7ikuKvPRw+;$h7J7cg zN!e?i3o+$=>Ylox8|Ke^a&>TTW!Fh57k}yr$k=|RL+!|&>i99}2gLAD<%p8=BlRzEu@f z%zR#L|JXB%u~$I1NW>?vZ@*(Ku5LRJld$9HH=-OMY3PUuub|95+>nG$bgb#Wc_fq1 z1gCa9IbGnnGjQXLrTrv(ZS8!lc|-l-%ungF<-QNgwl#T_sJiB_uV(;E~4u3F-JP|_0N7bX>71)_3>OhM?JOa)h5)hOgau7&L8i2%Vt}btQUhh4l zQlFon)V#fizW#qZM@Q#&&^!g@8!QoFv}WZ)yk^s@t8&dXy8{T%dq4p?nJWGFHDB%u z%6;ua|AxIj^YYGfRY^w*G~Ix$?3W%tbkpE2C3)uf#@iugKbuaO!Au!8>mhsjl)ylMO*7j^Kue z$`48&T#P!ZADe~bdGVV(;;;5EQ@CHZ+Q-_Q0VV0)y#u3MZ_xG`Fi^@ng-D?=NU3E^&+pz;FdBnmz^7MOeJph%*-O9p7 z+uOszow$jSj*N%X8FXD;J#_UYad#vbCBp9(MZAB(hKJdMPtWN0;6(8m>imIEl#HU7 zMaXC@A}J!`hRZ-i#EtF)(f&P9k<234CK~>InEFN{1o%Vza1+Vz0pq-25W!GSgv4-H z;qN|ReH^j($ShHuBKY+5jeigEPtn5_h`%xat}k6(eVhxdEP>fA!Ez@m|MdwS2r-KY zQxqG1&kL?4Q2`r@l7gr!Jya!<^ACBZD~ef!yvCwp=Y=UkUOjzLK19h&Wtou5__`2I zoSu=0V0m%~^BU+7WkD$5Kk!bRBqHBLlrNF`62&)(C|W{si{dl>yLk0x&#r$0Tab1s-Y3VC#w18hX>bE z6J3$WrWWr_7J}i!b zZj6R2n(1)$uDcl!T#?y4xc3<+fXOXZG_rh8G(@BENa5d~<2B&LYxF;k*Uj33KG6_b zTq1>3@{UKa^JyHF;=x{}LhkponqNw2tX08cM2;`T! zCbW>m*NFH+bA`ju6v5Y?-|cyZs33VGx19Gh`O* zQ-l3B3WbJv@;z{9EIE?Ip}{d?&i0a_Q8S|c0MmgEAN)c51^{zNJ8#smk?u|SX#>BA zQE<|L{7eBqX$Pff2L%T62yY8`Q@|hUf%gDBeU40A0MSB1= z^xIGLpmm<_J>u+XM;^s_9e4r+(vIS+0~|*Hhjjb|aDwt8!CwLn>64Nd&HLVwIB?<* zibHBPsV@QCNWi5D#DVy95DvnlijK=nep-=SmOv+iz(1nW;{iNK&b1^X@)rQOEQkx? zkgRx_0UWYzNa=1r#D!!)4~irS=n+uCBjDEW2xv%rjQtJuz+9e_hnbVJqn()p@Nl%) zV1P9ieWT6EyZkv?aU8yz!*ioGE6U~+5tap**)y{MFu(R;@@OB0k2#dJFpQFVD zv$Xzki7=EG{zH!VKM?DR{Fuq($IXMnT`i z#iZzFM&iy*xIYmt=Y`u30q)TjBC{8GQ`iF^LD^SC`G@LrS}|!~1-`Tru!(m9?3R>* z9Tj-n;LR%g-M$KV#h)sm1)LOan{-Zr&65i74==K>qJ!R}fI9~7ao|4>wpZXSssw)! zrw+U>@KRx-udvK|Jo_p=@#yYZs=d#Kw4fI~?Y=U!@9+j(gZQf9y$qC^jKN&ZR>%p8%AUZJ2osX6klEy zmeHSQTMr*R30dYQ!lGoZY5;i}!Bz{rh{9jh-~ZEIK$_sCH}|yv z;?J`i2ltBN#SAXb<&|9u=MUGeqgYr;M2SUi!BWm*f^|4B?&uFTwsALAN#I&{bd$Rc zbz?GJoiZ813eqqU#Dk$=Hf3l8C_;WhlLKSJ5WlcqBfzpjG@kXy2msyL&JrvDa*=Fk zK1Ii?Gr~w?)@WIVjv4_1#@iSH*o7ULOc)9=!CXk2g=VD9b93_RjGHT@V-{rnH=)D4 zk+f4NEEmTguCf(T@AUqF=b@oYfpta51>7VJWw=pSOGisDl1|r~NOxo;)Ae+8@qGq? zID7}DZyhHilcx`3WQK7P7H$iPz;;h#_z;l>q%Zpa3M5Vp>i5H5ia zV*7K$LXh1>9t@MTuwZmYHIji~C(Ub+IOG9c(cS-vkQ^b{A2%e=$Du2o5kG{(^9$~11n}bvWBUe%@oZ7kQJ8klvsE~A zP?f^0;qr63CSGkZWa(aAC1`?5WV{BBqX!2~RSClFd;UfPY$B9E)*n3lPLsyKCJI-b z2pJC(uH5FT^CFYRm|%-s5Jqu=$#~FoG+iZHE)wmnygu5!ha)MwSsQ!>747sTQ+}#~;op`&OL9A{baNRdXdc0PV#o!M8#jwa zho&YDE>WgOLy;4OL*58!z`ztQ-+%YZ=cBlU$`c(f!jDB3(2(UUMljg8!pje3qbrPq zGk}FLxQ{%V9*;)b5iAym5eXO7gRDq8dXGeb%`H+*sI<|!92PSS#_g!cAbVUq^#~G> z9cjc&TFgRxzj+26H=Y>^t5}gJYOJRbuQ)~s9c+k2G2)n^h#pTYf5ow3=`316M|?aJ ziens$(hDCS3Fb^7$4ITlN25XtR?Wgv@I=H%^KFk&JrmK+KvbxJgUTbx%tU1;4u%Y< zttK;>Xy!pa;Wn2GrV3b5sDXF#bU;%um>a>WUJwgezTklEWxPCtR=_#}Ow2_2M;;&m zH4O|?o1li_)JxOrQh!Mzy%ttcu*O7Y4LD=0wVFa-m zoLC|W$O}9T(}`~z`5kLYz`Xxyq$^ED#~=yXZj4T+6E>_NJaA$v@KxcG)G6*RW)@cN z+90d@G-*s_92fEWkan+qP*}q0!`ogY8WzXoV4-nwkmKNHMdB3-=@&JE2#>zOKn`JZ z&=ebkD^0+rc5FfzlQk8&p?;!DiR`6g!O-9G0HC2tftY{?H8D7k3fBZ5SW_7SIb(wI zgv?W_`{^Msls5*GgGR#9>}btE7?(t#=ElyM4z?7*h8>ZY!f6clNA(>g5?U%4HHL{U zha?X&v=tJ|h@$F|a99w35TfELL+L@{vQa+?Eg#Pfl?OW7zZ-P(!sjASzW9F>dSobr z8~UGyfqU}B|D!NqaOV%Bmnbe28vZjC#u@SW*aXp|p$GVl4rD~b2Yx~v;FqMqybVT> zfWc4 z^pr1_#ffAvSpp2g;RmrI!8)e^xkvh<*_97=n7D!)B&TP z&?UyjgJDcTB=ESIIa&T?(d5@(G~w`#3i3x^D4bd%9uNha$p$%L4h-f>iEas2^yt*Y z%G%6z0v)wRCfeGGiHTZh41;E!?AQ=(vU}4GX2fWP#zmnqDgQAwjfFW+BD_d;G_FE4 zTd<*rz826xYQdBOxe*;VDTd?}n498w)TP2G6E%h~&ayI_>5rq$XM!m!@Ee451rw~G z*uW4vSbstrStw9qd_(oeT-0JA79JideKd5{_{a$-fFBq)poowaSu{^0x@CEV^R2jZ;Xw_Vi6b@dS3>-VF07Kry!3z#sZ!M{6F$<5u413Gh@cYhsCli zpnk(1o;ME<3pQ?eT1Y-Os2#8lO7dZL5PBSh6p7I>TZl0h3xd8MeOZ99fNwI!0S-16 z0&WJlLqR4c&?qSogm_(m&IYN%AOs{IhIzVMxl!7ID9$22 zmdlQ{L%kPTCyIl;$aoe~T0G>nMI@Wc@?f(gLs^j=eLeSR28SEUj>BwO3;?aeV!4#t z36c!u3dcKuz6EIrCg?7)Y$gm&DX*|TM8X6a^9V%)G9H-+ljI(C3NNT&DU;}vw&bAa zz;xn!l^j=KrYIj^<=+(lU_;2SJoz0%eszg&nl%Z#m{OBPSTu-*V<8wf8Ah2=Xbk}e zG1BHSs1u4Wi;Kl_8FU_i!5%>v*brrD+Oi@eqZrYAQcze3Yym@c0n<>CP>=bP9%D`c z0y_{Ho1%vWftg%1IFA*exmY<0Ku{NZ$dNP=PDwDK$p?>2G=3Hk61U|{859;EKpzzx z77`x|RR`aPhLJ7L7xXV+UlQqoiAp^*R+I*yzDGvF;1|}ci2Y(71=@D0U32^uznZ5J{Fa!^5xbnP_?St?-4vf1k-JN0L!NKPvJZ6X^4(t)rp}~pb@WWt5 zhd|!(VP^|>7e0jMq%Q7)FqqC21TkAjGYdfkK8A<5K!0f7h=sx8Wh61MgYrVOv&3wL znww%6%sD_RV$Ok@^&l9g!8j71vlC-~7-R9u9*pIjh;=MCSZPBGTCmEAKA4r43+{lq zGX8ZopMif-`M~)|eq6V>4_Ny^YrUi!=Iewri+I&L4oynoCD<{a-gv!`Vx6Y zct&ADcHscRLq6ed)JYI7s1J}Y2x;YH12cL8i|d;R0`qVua8Q@P6f~VEnuN)5e4dUY z$chjO>Oo_1G=C3a!Aux7XGj~|_<9c{0j;ki18vadK<&dBxU86XDD2SU<6tD@eq5-~ z9F($Yjni3dXaQmD594CgrwXhF!r~z0F$}?woM1mX8sdQ}kqkXJG>`GHJdXM(!~p(C z8`cb1ag2;ag9o&O0m9=G!)VkH5Q+Rfytq)XVx7p~@_JNc)fx@&VB)BWiZj+$+lR)v z)rVFEZ@}$7H0(|v+D>?N>HrU~&fPw=HuT=>BVemOHr5y7M6D*s;15pJ?bFq9oCc1I z!`opYG-dl5b25XmQdl6ql!xmFl1~9pY`N@c0>YDJqM~CI=>roU;t%n|n2Um8;sYBB z@bKmWME-Jp+5Tw0#KmO{(&R=#Vl_d@nlRVU1k-!$VCP^n4me=*5BU%K1CIp=gt7+l zI9eKDQ9%ZXmlF||q=`(7gF6O|E8vT-YY{XKf?*E|$1|glo`N*-KoC8Mfx`?Y@r_|Z zDFHkasyq6kuyr-5%^gi6BNR6ePi<57#Pj%#^+ogZ@F2D(Gd3z1g^9aK`H(w;#X#CY z3kyU9B#$5-4~XX%X1%0428M9>x{oI6EBNxEaC^{%WMRa?a6S<1VdMUYv?4#KeB!Mw zk|>VNWTT8Cx9uH9xNONL+xaN$Wc*dWI4yf26j&<;BhQc?_`|uz#JWC;pTwk zA#eh#YOq&`GJ(Kz;{%BmFsOBIsJ(>|qG%eI!-knCMS~48B)E{ak1!sJD;ZBL zE5U`q<#Iw}(UAfoZmM!YUI&N8qWmM}Ctz?i`w__$yrq)maaa6GEnxN;#q(7tKHq}Tvz z8}1ju(QJ2W^NWWI3e|-2r5PFpb&4Cx&_y!fenT}mY%)Kfjnss?4pRnx`Vfv9uYz8P zMi~6^@o~vel-c+iB8f*!P;U5+5Fr!dg|(7sF3iRu06To1O7e1Hq{NDKV&nZeiHn7$ zYfc#C1c^qnqA*}d&Wbu!N$CXPp@N_xEGx*x*@fZ-gXzEFB4ZiA;T;wSV-rFD(7@o; zkn)RQypr(bNr0lluLcw!+f`)_8gpoKE-DkK*+ewxLj~&&%3@+3 zO3^@QE|+L|QL|3@K?jmx;2y%Gko>sma$uwQpuxx62I!;le%aN+Jvlm#k))ZRi}OIA z4Sgx(DELQiXbgC|AYqW0Y^NAO{=7a7<%yXk9knKO=!sxNM)Wggmi~CN4Z~8r*@p8@ zVN5j0u z$Y{*~uW0}i(ok6ZJXaX1z#IlDS=XzvIJ?=vS+fw#5>68Y!FbQk42@nPzZua`;syMJ+mZ?k z+)*J>NG!||_(Jeu1~H#N$625N;bTrKm|qCO0Wdp?5f*I$Qv!B0 z_$OhY;dmIoz)}+v+BZ%9C=Km>qoM&a5j46PHG;zr@!&Lc6am^@yq>~5Q|oqU=0OT zSa>*WILwy}{Wu(WfCS=$JT%8l(5J)kA|TO)X~bX;MN7s2VUYYVLHFPd1*6$+tOTUz47L#xKneYckxl!ALhk@J>HqWh3y5ScdJRanxc#!-5?Av>Frt z|G8)GX{MTLPzt3%NHt8qRD`CPYGSHUa}%;P%}moU&5W5zMF=5;5JCtcgb=c_+TEwhMf`iz%pKc%5)#m;~|gzdC>LB&KDxRooJT4h%l)89Ht=)#{}hMi&enFo0QF zSq(D-wi!Pu?AqMd@i3jvw!+=w3^uE+;4{GS!3dw_;$y*;Vei}AcgByip{lI5`jT*L z8aO^qrt$<6-lloQWz%`0Sy>Sb3S!)Uc?XG!V0`{ZFGypkm@rW@NskNZjf1|tVMaOS zR?j}Yj0}=ULLlb-F237E+1KJayd6H2EMJ^~HmAJ%iUi!phhC_bLw$khu@> z&VcJIKJd|lVBG`a^;pV>pVc58$dh*TZwe{)p=EF&$Z8VLms|cPKcuLj6jno``Vr4m>^KRAF)cytppSheh*$K$M zc2aY^aYBA#p?rM)xKUoBIo6f)UJ<9mcQ^KtaPdA)$5BF^mDMz#lyHraHG5V<>wX*fvbimNc+AOzr;4$q z6D#8brW8FaQCkb!LU5aE3_jkFGM6z{thSo@M{+Bp4eGWxYi7_Vj2k;{RL;1fNjjF$ z=jx#>WmkfPn@%I)LgrpLvvO{(J{Z6Ub8>ky6rXY1>tpBDTG_ltpP8twjK2X99Bwlylj`uTmDbzxR#EWKpKUe0;AwcggH9~R zA0;U7`1%Qa6e+$hmU*z^{@m-wx*SUTy>&_(W6V-j8@%=EJoy~$*jhf)7nGUp)C(|o z7+F?TQ_;T*+k!T|7f?TYgbNSwn^H=i?fKXN1jpG9IKJl)9Dk zktOdxNZZ()mVLF@HnALh1}Ra-L@k7Q1?j@wdcVnTaw``viu2=9o_Ct48=idIHP=_% zg$I$mZMft8xa4vNd6G8F!euJa0|p9^T<3N{&4kA|QXlopub5S>Cxb!a`2Lc8i{sJ> z8XIp@$>(ldW&TC`^Ajtpc!!(Ehsoz7xoBY>#$7zi7A`z6*8}Os)?U=&e2&taHNlqg zG+c*t-0Ej5D@sR>O4NVJ*zj7Eji*htbtP-zDDZw=^SMiE>!ft~d<`b=mp0=|ViX&D zzb)E&>+;0UeakZH9PcNc+{os#hiyCDHnE)CW^_Fy<(1T?laC|3pBA@D@Jzrj~8D<+>K_e`LYfLMErdTQn`U<5rc+Ew(^2`S`t-J7+Mj zuhZxJg1S_iS=DNK)a|TF9vbm+ot*f`c^HS~lxYpergS_4i{FXeKJ4;qeLvH(KKG`t zF^1ceUrd~bvpg}>bI6?FTOE3e&Z5%zew)iMxk<|f%0!?4qHhZx9EDEz;P}iY$U8_E zlsDcbCAJOTHQ{>J=XCTeD%`#)cx#5iOOj*VD2)rkG=v(61kbBOS2E`8bIQx=%NS8| z4DshG;kw{5Od3KZd{7CAzA`9l{F052QNncbSs>R-QtqtNtSwg^E=5(@f@PP3G3-1| zsdB0qCePvfP5UWZkiOOa0>}Q?8FQ6ja@ulJ_7j{0-e@SD$$Z88)`Ru<^O&Tv1bOF< z8h6(B+{nBVJv&MA@qOkNoHefbSnNvOPLj%&OE=q`j*nFZjkk(-dOTLFOm4to-INYs zrp7)QfyW>0=LF3#CprJp0l^cmCY|qijFz^)bafYwEhu1&MSetb_zj1q;M)Qkb_HJ= zYAzpFLt*8`L6JF6Jpa?D!}Y1*oaV%;*IPUam?D7TXI(=nc9x`GrsO(9^4l4e5jys+-R-ijiKD~ z3f^Sqk7uwG@<)|WiGJueX;i8F*wR?8BGpZ^bJZA6pD=cOY3|rb6LRBgF3?BcbE_Nc zc-vAb{CS7?rJkESgKA6}tLL3mV7wcckTkn$Oqta%x36W8tGtYf3>_tM6BgAF`hN?G>yK<&&7D&6f6hN%;L|Yn%BplMzNz*4{eoyu$+{C^ZI!HiS^DuvEKOy%fUHw*@JWDa@z-K>=Wrn6^H(XUwOzPg8zisSGB=V+eTp(3Ce5*fId}Zw7<0P%dY*y=4~5lH`8^%p z?3>GTTSPcpYWci2zFlrvEstGlt7ZqY6Yd^4HHoF*nJRhbR@X9Bt!~N>K3_97zQAMu zn&5l1$xnvEXS_TUZSlm|`{EN>mHNb0@Dyrn(t@6O^FWoV=2&Nz5q|&Cx6=ea!a*9s z|Coj!3JLNd{EumZANSC{2J9!FmSy4DeNleWeuL$teFV!%`KjJG#NcU7iwiG4cjXgB zxx697=}no#4FGcIFeRdn_VajK?`SoqgugNn{=z``>jLEi>T9R-^Cx;XorrVniTJ=U zJ|uX4T|S_R^uzkc(>ordcRWa67f&-t+d4kj`S7brbAo-5-p|d0JpJ4}5fAf`5A#tx zk7W$qOoXN zEZQa(&4@)aW6^f8X!}@ZV&e?wmJx1}5$2YW7Oo1j&2SMS8Ew2OOp+Gq+c7P*jb7U7 zB||R<^lcM~My?#5ktktWs{Da^=@ic)El8Q^?AnH5SeUk9VcLd!Y8w`&ZCIGLVPV>a z$I>>DU)yQd7DcZ8Zlr^V!=M<4dS{Vzm8XMVvaHhEhmkDl!@|wO?IWq7Ned&|ktVhRKk4~{3*|8o6#CjYU>v2%5N9S0NoLG;ef@-@f7DZ{lQPoAXVaOl)($k>-3O&H1J_mpANNse#ny@}@TDo7!C7 z)aHCsoAXUg$~Vz_Wv2$$M=E&r<3EiTX`FusM2A zb2QOvvr`l8Haqp;<^)}vqurXLhcrjSzK|Us)@-{sN7a{bXQE_j&DEFId|J|)t1oeb zB5iZ^r8QSyT66U!u6vqRbH3@#`L=1cZIW#B-r6*utTxSiYvaA8x}!?*vrh^0 z@8JD(blAyZc07!DzY*^@;{9?X3rZXDek0y*#QTkSzo}s_?(}I+&%HRf?<1IHNw!bniFa`%RC8B0Tc+@X*u4 zV^0qcK0Q48^so<3Pjx*~iny$CKgp8D5{^^%>!MA8&?_H^ax9;o}V(O@@y* zY&ID_t_+{Q3=NEERT&35JjkK$q4K(eD(vd8TRhBk`Pzn|%h}fDZ0mBibvfHPT|1|1 z=XC9yuAS4hce<=Fbowl(&kI9umlvLoyzqSFh36wLJRf=C`N#{;M_$+*^TPI+7dFVe zh-)k_(q01>!5Fn~UsW{!gvz9H1Z5!9D%F3`NTZP(Pr7Py+uM%0{`Rl>RYVR6W6=(= zNIL(9xc3T+8SanW1vTA{(Q#3%N3U3qA+a98?ei42cFxq}j%Y zQ(9JUq)=UvLiIxm)d?w7fA`iYF6mW64hV*km1)sPA`*-zWrFdfBEdLGkuDlEDspfb z=^945g^}aJNS`p$H;nX)^-%Bs*3fwAhX%JimeSf%Nv@}`y23CLM$*DaG>o(hBWVeh zmL9rjbNa;EX!F`OiF6r>m`V|xv}ngftWzR(Kq7WvB6d(B);SUDl87A~#v+M>h@>W5 zqI{7=`67w(MH1zUB+3`bOl+GdX(Ukxk@ktTS&3MOL@aSck;D;25@n7g${cAfbJxVS z-4d}w6S2b*vF?djk3{V7M672bc61^Zp6ZIou?g2Z5j!ps>ywD}O~i5&vEvi56B4n! zM67=zHXsojn1~HZ#0Do~CnjP;60xDNXs)hpUG&TxgI8Vr#H~_e(SEULepR2UJ}Fgw zB2|6Ts`{i?^~tE}lZip4;8Ie76)90*ZAu#;Ns7|6g?7*$vY-QWglsqf4upfCGjxH2 zp(}KQL*P(247x)PI2?LH4jchT!cou*j)r64Sm+JMflA&N`av!n4<|q#^oId35C*|u zI1z@xP#6X$!O1WjPJvV5G#CNYOUg(nfI=7rqhSmb!B{vQ&VXVV2jgJ^l)#xVk!qz5 zBh+7n`ioG15$Y~N-KA5%8G`j0)NuxBGDwp_nhfeVgLE0B%b<=ksN)RkIF0maq)#J# z8tKz?lG1dRn3(D%@LG{ZPHAammBwr}SdPC23DSdjI`K?mnN)h_k#H2SSteU$K7A>D z9plurZ~z`@Q$^d+)U$Ii42Z{=K(~!WeH->&H{wx97mpRYFhM<>ZMhM52}hoha4;VU zhw_ndARp=I9yc}Y)KkMwJvHpq8IAV6GFsKQs;@@1y066V9E1rGztv!TQwe5Q+(c61 zE7F2_m6m<831(DU_RS_GezQpnCQ|a6l_*q=DAXY+44xDa>HxH?X^28iR26ChqENFB zg_?RO)VxDsXAXrCE-x8+>8_U^dTFbdOuZbgm!5jb(aRBfX{VPX^>UP6qIyZ!%fWi- zs+WjfQuWeFFWvNVh+YoW%VBy+(@VBq4$w<4y&SEVWAt(?6&#J|B~35XcqE#x7aBt( znxU6Wy|mR!JH52mOBRn`Qer)hi1j$J&()cW?>U3}KezrwG_5%rO?#++dRnAy#9B?+gOk8u^v78Tz%-`dkW*P3@Cyn1{CqIjl=kWjfZzZyUdJF zi}lziXoZTn#YR2U%xj(!MVhClk>G)r#uVw{FyW9ek{g`fXuP#WbcT*K9`m$pGHEqILvuW{2Zh#wTZ zb`D;<1g{4NuU&)J>A`Dx@Y*pF4^o2Qa0hYOGrrW*OTm6qd&c+KGrrTF>A`kA+r)#6 zAjpYtmlNM0C%!>We1n|$21ms6JR+XthMURL@kBmi+ibZ?HqDRM~ z$Hbz?#-hDr(Gz0PyjZkm^e3X@V&J#)80fG+k)c6z7RIZ)iQK%xR zdM2t!S{R9jk@PUqCX8f+k<2jCHjK0jBkjXTRv76JM#6_YOnI(M&%U7U9z6e(V2iSjRzXZ1m4z%BGKm0cxvhxZ%WFLfAU4Lo6kF=sQ zPIdIPeRd)H1pWWUR1g2K?}rly+eeqj&wB|@bhYnb--Hw0><_kIi4%v|_q5-H6NlRO zw%?5thv8Mu{`M)OXosNx51Gn2%)UD=5A^@bQyUs-KLxiK^#9G3A7j4`w+njO7u)Z{ zbspU*JIDS^`#f9;9Dz^%n~7TlMbE1xok{ld|B9dB8< zUtBR9(<=Q;+(J0Em0yY50KHrJ?YPXMPT9xdRS(t9zaOp?m?j0j)_w_YJ@jpr&mLUw zv9t-i%Gv1j({M{5*ZEv(zX=yTy;Jt_t@0U;6DK&I1x{aq6M1-@-$nMzae}u*1AnXi zHk{z?+Q8pqpLGV;DDakR;2*Xx#0lPh4g6~Rxj4aFv4MZVel1S$7JT4;WWNU|^d$n7 z^9}o6#hhEv=M?0(*w^4zz%ZQptat5q;c~`x%GPfLsy=sw>2ZtUWcywA>u}p(I6nDr zA1-Hnr|jT=N}sf%6juZMbYhFYCAifP{y{sG8!D#1msQq4Cw=+9sk8%2* z_Cs-#p~$|s{e0YV7;E3(ehY3doNj-TefNpv0cY43g!$l>L9u0@2=qBR<$t;TI^1^94~)rQ8Rl~qeFIFkUua*1tATUu zud`o-TLtIZ-(bHDw;RsGtKM$1kDkqWhbg$^zd^WSI6qkupN5+YKWOC_<5s~`yzY;8 zI{yv0Z7|LL9{atx%*may%kas6y>P=}da@*5imQNf;;NtfozHySVy&}((0&C@RNAk! zXK}xO8%Vnws#vT1A9MPgbGUY4CQjGy6ZRE2QSJ24*w4p_3+$h>UyKtM+P`4G61N`s zXjO1t*4b~x?S@(S9H({?xj)_yuf~ZhaLOlYzYQlA;8Z{D?4v*6o(WgtbX*76&&REWtLzW4 zPnpU+5U#dA!oCT&1QyyKXTKJ=9j>wOZy%jT{|49MHAWw1Ux8Z$*Vz}?Z^Z4;I{R_< z-O4CGTyKB2eLZe5++bg3zX`VkZp5n{UTEKWI{hRp#;HD=>}TQ@!cF#b?APPA!_D@W z*hkA5pTI46wa?4!b8v%T2~Nj*m3=X83fyYH*uDw35N@--(|#3h9o%le!hSn$4=lBR z!al2lb_;jdueBeF6L;d(u6|@c0w?aW|G9lBPAs$EYCi=h?zaEPz5*xivHz2OJx<(f z|5y73II$eB^OEvFyge_$iTmu^+AmjHxF4_jJkWkMPCQ`W-F`hztgt`Eej`pih}VAe z>^I}YL-xb$x8lUZcwH|e?RVn#z)Jhm?K3O6ufZes6YYoM3gJChaGy9Y(#tE3n@*UyKt!vj5h8GETf^A6XH< zjw*0sgMEAZCY<=OeHZ%$IPnwvp7u*{;-~h<*{{Hfjd=AZ1MS!1#OwB_+Hb;%pV^PK z-;NV+*q7Sx!HG@wQ|+^7@_Yk+ZhwJ&9!|VzKij?pCw^hSz`haN-a4_uG%ai9gyuZa)ntKDA$KzYr&O*}rDL5+^>hf75;= zPW;LKH}*Sl;&b~Q_R$*354-I@x9^1$U)XF_uf~b?_J`Q7#fdEY z9Q*Y+(E+deIo5tFPIR)Yd>>so5g%gL{KVv@#CwkhyWM7CAIrgvFm*T_`_HWov z!-*s9-?neUiKFa)XTKOHdf9(uzY-^ow*SM*WB;Z7R@@Fa*8W@jJ-B_)+y3A7 znU~O};5hq?mGSGM8&34G?_}Q(C;HlVwJ*epe)c`>r{F}c{jv5N)jkI&2HRKJ4^mn<(Z0^U z7$=6<&#|w-iJ|sa*w4p_VfNSAFT#nF>~FDOiW4W}HO{}weicp(w_jnu5hqTuf82g2 zPMm80oPBgY{S2ID|B8KgoETxh(S9gSc>8^Z^DT}`%mo` z;lwEWFYQ<0#Ay3(?bqPM82f+QZ^Vfr`;158?R+~SoM8*!r4zRG?(PQ>i%?04hDS@v`6Q!b}o;cWXW>^tMcWc%yv`{Ben_P5v<;>5Z3 zciC6q#Ci4)*w4j@DfW-qFUE=U?Vquy>FxJ#1!=`pr+>-m*Wko7``7F@<3ySL8}_?! zV!Hj?_R%Z2zM$OxclOZGx6JAu? zXFM9eE*9d%1@@inm*G~yh4x+T*W)%qjeSr1&A1&f3$Om_So^)WeNbzkXP>!%`w`UH z53}!%%Y%CRk@m&7Qn<+e4EqXP6ExVD+AqQ_gGT%F?bqNoK$HCp`)xQe+rG|z2TojU zKi7U2ZZFKSztTSCO6nEn;-l2V4fa_$F%PfjLO0uY$Mu6t@TvIQ?Tc|Ga4DXDDR2i4*tOpJ2ZSC+@W$V!sb3mfN3ZpSh6xHQZ-E#=bL7+;2a@J_jcrus_?rA5N^m z>v*Ty562b4gLs|y8TONL74VRKoqauSK0Itc*M1RhDXg@=(tZVQH9TT}gZ(<(MtIcz zcKa>3?eLiWa{FDly|Bvu5&M*D=zrjG`={-@;d;Rn_AlAz;fBML_8aVraHX)?{^$17 za5eCh{X6z^af{(;yxQ~o_A7Dg;2FH?`9u3HxZSYE{txz9*HTV+)_%ABaGZD!&%czf z?fbpkAzM6;)PDEc7m`-2bw1zP7vaPUc(u=e*_YtNi+G*)Hml;-V+BsUWZ%htK2EH& z?`FRQCtkKc!hShU{1C5xtdIR_oOs24ko_i{SZ{x-{Z^cK)xOAn2TuIRexm&@oOsQC ziv3=k*kC`yejiT!*uLIA>pI#M{KWne`|ddLQ~QPXy>Vir{mu5napHCRW%k85@iY5} z>??5M4g1yhb8%vm{fqVsapLFp8|;_imcyI&Z`!ZKiC@@nwO^0h2%GIcwBL#ozqH?F zza1yuvj56{H%`25zt8?VoY-RD=J9xYOIbt+zp~G^&%%j!><_i?j1#}M?`7W|C$`!j zZ=Z(~zp)=`KLRIyYd_My1SfuHUu-`OC$`z2W#5Do@7hnZUxX9y*Pb8+G``;;f*?P>{5 z{K>wZ{Ysqp+`hB@dYss8f4Kc-ocO}NxBX6>__O^0`@J~vrTuXGlp81)?6Dth-x(+V zVqaq44=28|Ki9qxC%(3?u%C<*d+lrOD{$hk_H*rPaN-;LtLzux#J70eUl!Xh!>xqx z@ES+mV!s9_{)X54zf0{m;>6$W@3G&C6aT>L{UH0`jp)XYExOUqw!ifXy_t>w%i39ET+ONfl zgY3Vv--HvL?f2Pl!-+2TDNn}xhg~>vuzl2iA5L_&&$Q3JiLygC`z-rjIB|%5w*63? zIMlwgeKAfPX5Y$;J$J!U!m*PZk`(pc< zIB}ePiT!+>=wn}MzZ56>+E2D$jT8Osr`T`6iCp_>_FHk{c>4 z+1J>2$BF*-_4b2sVt{>@>=)w1iS`Tam*K<^`$hJv zaAK(aV*3p^G0c96{Z^bf$$qK*E}S^oewqC~oEUDu+&+5=*BzWV870OB~BFDueV=|6Qk@m*l)s#(e@kd zx8cMX`%U({aiYk6vwg~~^k*>Eev5r)oH*Tnt9@^rIKzIM{cxNpw%=}Ff)nHHci30p z#CZFi_VaOKg8eT0B{)%HzuSHlPMm4K$9@A&Otjx?zZEAY*?(uh3nxnL_u22miI{!L z>UjU3eH-lx&a#i%_rr;^?KAC*aALB3mVE`T3C^+4wqJx>2Ity$wqJu2=h=6&--r`a z?7Q1<#fkInbL@BG_P`J9d)a5+&KLov+V{5ah7;55``P!yi8A{<`w=)X-F}dLDNdBz z54Eqsi3f5}cS}UueG)C#vj=>^I=VO#5Q{Z8%YFUt+%-CoZrrwNF{f z`G*VbC);<&i5mMU_Wf|fVV38<1?&N&IW%ke7cgBg!?O(9Z z!-*^GU$!5C6ASELwJ*VmEA4-5KNBae!s~p!Za){d5U$4SdD@%yOK@T#UeD9sv0sH- z1J~e_|JLC)!L_aYHr!sg4$ssk<$dRqeHZsTScKQ}wC(mIa7A#v{U7aXaP#4YR{1Z+ zEr%Oh`PI1fu(*}qjN1-3weq`h`{3qQK5H4*5!}+s_rnc^C9QlRt^{sv<)`3k;I>wN zK5jAG-pVh>t%Rj`&ExjC9@gT-9rj<_Z@`H=@tTKzW4{Tv4erA0{QlGaJ6zV?^y&8L zPsQ&e-Enzvw|xiu;kaVB2e0yUv9G|*g?pX8oBcxE5?GE``^m9igw!7rN({%PCVxHwf2i}VijKJ0HVDfTHR@w)-=bNe#;ESz}LeujNFocM+Ph4#I0VzYg{eI8Ey(tfu6aGZF{ z{u28loOs**3j0!=*kZrXei}~v%Km!$8k~5?{$~5RIPq)y+wB+P#8&%d_DgW$H}?10 zFUN`B+COB!3MYPN|Cs$+oY-c++I|C0ylelg{brna&;CXGZ8-71{VVo6abmmu2KzlY z@qzv8_WN++L;E-FGf(F8-tdwA+x9s)vBQ3={ZO3v*#2Gn5}f$N{zLnjIPrV?-`g+1 ziJkVl?3dxhAMC%dUxO2WwExO}6Ha_;|E>KFoY-Z*&;C1{_{=`?OuV1T9?s|6;ZJyt zC)?QP;YPscc-@cM*-ysRz;62v_KR@K;0t{6-wNCs_;V}24!0S;#OrhB+0JJNZZGVy zKg>S!6v_#Iu|LK>4_63Z;dQ_3Z$BAV17F(@vtNK)3VZGI?N{N}!(Z*k+Hb+_gm3K6 zwEqs5bt<3#w?D@|2R8`5!zce0;ikafTKRh1Lil?tzYMn;{?W>Bz-@(nt^6)I_-8Ah zeH#50{0p!8DRVi8;)>zl_SN>&a800-9*iICm*Cbx1h4im&weMa+X#OD$9}$jA#N_D z*7>_u>Z<>eK6%^Z_!{!q0GZ^Y@-K2eTW~v|t^E@FeYos=e*edQ znf)MK5wy2oVPAt=2wC>4>{sD7KnMFZ_B(MYBl-OwyvAMY?DKF%(8>PC_A_xpKb)lU zziGb+w;T?zf5(0uP8^8Wb@ZP7Hk>%f{txyk1(XLm<5iwL_MPRRi~Zm1hvLM+_Ni;) z{YEiPbj534(B6J7PIR+B(0(aS9D>(z9b&%$Cl0kg!hS1G9A2@QT7+u@5PB; zc(wCJ`|MGib2u8Wao0TiUN~`#{pI#UaTRc^^SRo7DQ*Mww!hwf4=y^I-~X|{#lAak zIOr!hRh~QSr{J2Pul>DY{&jKNMFA zdG^oS*W(sLfBTp1SK~Ip0Q=YMci_Z8yxQmM_E|+-yD-Rpv;81B7;OJ*`x=}$(f&RA zIRDKo5K8Yb77qQrS>auV!ZuT_8W0xg8lXOJ8`1Keu;e+zsr;dXX4d=-eo@x zHy0+_KVZKCw;m?hKW4uJm(A}rmD)dJUyNG}G5eS7H{tfeS@y5l*A#ci9?owtosCca zE5*%)$$0gLZ#exj+*&vXuT8etZ^NbV`%C8{bzHx;?}roTIsNT~h_VKPos+o#*l$B7HW5gA-TU|G<7Yt`x4aud<(sTL4$v*V`|}iG}v_?APEn!!`C-+3&>dgKOTk*+%-{G>)<@bMD`QErf zxV@F1hFbzlTluxPZE!~`zYmvl9>4$7$`|6Mz+HHif2+$m6Sw4x4%y4_8h3qQzZ5U- zcKV(6YjENo`!DRb;KaT5-`MZPiRJeHw$GYE{lk6sna{`jyO_Ttg(O4z6d9twSUZhAx=DpPySnp6VJEu8*#f~Z7ZKW zjq4O%Xyxm1tKr2~ehV(8jNkvk>wU(jT%H_UDXg=9$$lc_0-#^iJO7wjY^#!UAeb+*U~dPJ(tq6K0RO4voSr_(la|fm(sI7JzvwaF+JDPGdm3) zYY1v#7Sw_6Z5;@20)0QH4z7cqEbIN}!wHuV-U>a4=RjW=4yVEq&<{?5+emXeoJKqs zN?<;DH4%=4i(oVqz;XC;LXCm5R0g;VcO>p8=mp1vep5=n6Q%dI^*(kw={m8jF*5&B zB5b33Ljz0&-4hn#t_OWjYZ$JU@Bl*n&Xs<<>Qa^uB-Ha(JzLc^w+hr29|!&J+ima! zEQLFu5SGBL@F0wWhu{iOKQf*0Q8*fog=3&M=y^mL=w33H@Di8@m%?nA4+nwz`^A(? z#P!{w zWyBw0T^h^h5Z8G4L_&RU??$+a_|-4~2E*M@1(TtPw8y~Fp#DjHn)*BSVfy_1PeGsG z*LSb3g~e>6@#=-jgHV01`sMB{>%O3Sfcks&?dr#MkJ9}}_a5D6bWhQ^;d1htLpUFv zW?OwnN#8TkcUJVh5`7l`$Dr@3=zA%PU?Ut!`lFyLtYG;N!b9OO=nmZ=kNg(GY~t6D zW&x~bc_>^CO)QtQPT$u#hwybmeK%q`>-5?B6L5WD66C`1&<`d;4|te#hZFXM95@2> zUACv;8PNCF^j!{p4@TeFna6s4_p1}(P#6X$!O1WXPJ!WYDhz@la3&PNSU4TdfMPfc z#z21<0r@Zz3ZM{1!Du)Q#=&@)03|R0PK3d5EX1HUltLfq2<<3mIZTHNxCJU<2CU(@ z7m(%(=nPlF)o>MbfrW4_TmuKgbh0~z~Ccq?^2t_a!&VeaDHOvPI0Fu1f6EB<-3op0A_~Vt9~c5B zKtDJU2EjlW3b`;C`a*vg0NLb~N4S9Ub|X9xx)_Q1RFA#8_T@EQCWzJNc$@8MI}4S$5s;S=}+>;(O;n|@Pn z8*GK&z?bk5?0}D91AGno?X7R&ukaW63iiT};XC*dyaT_6E$}w{5)Pyee?|BfY=)o0 zzafR=`X_;YTWcTu3tokd@H)H+zkp5fb9e)O20sD)PS@W+pWpc<`RIMnN|vuv$o_67 zehmIt=nZGFoQmH~{8hqNU_IQ4p9CM^x5ItJcMxudFW}d39O*8E7g;wDuE2cx(cmrMqvP}6Q90spIXXpZl zz@g9;y1~J47n}gMvYp^KaV*7Qa<73Uc#dYkAz zGWtx+Phlgx4*Cp>KChzBrs#7h`pn5MU^Cpqw(pV0FNwbeZ^IV&6}$t#27PAZH}G5d z9c+Vl;XQaCw!;VTAzVdXwUp%s!fNuq5*mqL#JV(S1DC^PFdwdfE8!|w0O=5cREWY< zsD~Pu19i{@7sG6r1((8Hm0Xa^b4 z7BZn9Gup!*xEhw?Vz>xx=4O^B z690qH8f%>Z8t-Y0r?H>LR~qwa%%nbA{Z8vK zlg45iH?1MBr{NiR7Ia-C-yhVszXbQ?BCVbPbTlMpVvL$ zdbYcsbW0(*e^54;bOQP zG$!9o+Ovr3zN&lZJuKf&9=F2h#MQrtZCUMj8R^y$z6>9d<_PEsH$e{k2x>sr%EN?9 zNxv2rz#}Z*fWHYAvHTFr8sn}cyp`}V!aE3G0F8GaXZc3b-VE2X{3y#B1Fs@{67D4a zB4{l96w8ZAcMIIW@)Im;e7u_QHp01tJK+!TS7^YU$1$7_Q{V@1H|`#|7nZ|)@V{XW z`X$HoSNIP80bjwtU=Mr)e}jGSHT)a?0^h>l;h(SQ8Z`gCX{ z&511EMYjB?FARrM;Rxslr@(EbxgAa;o(mU36?v5qK2P`@bSM54;nVO8tbu1?6+8}4z>}~V z+LQJY%JY9R51vo@>tG`^v3&uIgo|J_97(=M!EvnrZ*%0i9LsFd4rRM?!nfGwb@&r3 z$IW5=KZ)z!QqJ=6q&XY1pab-Phw+CK_JkZb0{+N0@4`C}&V4TNvV_*d2!$>HA|2E$}ku-y$9s4ea=}-Z;Kqbt8HIzS`%XT5H=CB9Dbap0+Rz%3umih4bMV>L8sk6*@pC=m^5&}A zQP2yHhn3XrFR80a;+m&^!SbKs1(xdwuYujHzn1V-)+f(X(^>w2b=%=S(szO##J_-F z1FKUqAVPdGM2R=ROvr?(Fbyswp~j)9p!w`AEdQPKe}i4{F+7ETob{IyKY;k>ga;D7 zPgq0x$KW&K9SJoDokiNVtX~D1kG6xyVJR$u+u=6218#*Upb)-h+fQK&{GZHQf5^6n z!7I=iy1*fDD0GExkUVGoPjl7(Hc!2n^Fb^&T&1W~W?QG(6UY)aj;9{5!jnDwK za3NH|Ot=85p&ZI!8cc^um;n{g9Y(-Oa4>X&lVLb?g>H}y`OpInfWu)V6hKcn1rCA9 za6FX232-Ky4QD|ijDj3E0*-{yFb0a?DCh-8!&o>J4un(TG&l_M;6xY*lb{p^!C;8N z>2L-d1II#dD28z`9*%=P&=)4a5aV_+KEL+g9MG(Qc+g z^4#_U{1c>KOIrQSW&IGs{t(V<-(+1K{{QCO_A>3vf9j*JXCIo|sh_?UG+x!*QT^mf zmNj0yj!#Lulijbzs9n< z-lxF%a0lC~UsJ!SI#YeA-ZW0s99{Pp^*L2A6RP0?Q2(z!Tz!wOS=E{9@FLLMMq_!6 z&vg$d2i>dwNjWv=f10?)qv{tmCf0e-_)+IiWA^!={!)Egg!n|#Pl8g2f#!>6!(_M# zo+jPRgo`1S^l5Mp$ECUFIq*60a|t!4yj+g;yK%R%e7p8RJQdO)3hB@W9)rtSuX+0d zxDu{{t6?E%PN#W_`rK)td*h$j=4SHOHKOZ7*NLtfT_54Kp=(L~hx!Zk6S{tNo#^_} zwW9td>{HZV=o;5`tv*P7i~1GyC&_(8a=(y#T_<15;kBy1NBxfa30>2=F4b3reT4cB zUGw2JtUfR7>(qyZea#5s>hHonF6_HTjPQ{NEwQ|h18 z52`;@KdCv%xu8BneTVvuA3zPvf?BA9sW1)7U^N0}KF}BXK`xvC zd7x)(1AwXup4(hOsBxmkiyFf`&blYyNmva}!!xi3G^d`!KIg(bxCAZ*_2Gk9HxS0b zc$fespt+#tghQb9Ty!|@6gU-5gAtGqBcb(Na|~{Ob5wR8JOf-q8J>kEmM;R01NH1; z8LWV=Y~Kx*K`P6dFKI5cfG|p^xs&FennPxS=2`7P^QJ7glO3%g?LUa`gJHzK!u<>W z3SYy&;TzZsDeUK4!WT%Zu~RsX(io}~VlWXV!I^Ltv>pSW5YHwU|3``UAkD*st>^w4 zvud2GXC@k>Ud?`2!D@I4o`z>&4Ll3a!Sk>dUVs_gXW-`e`+3@4F|x1a1eBcE^sh(g>G;N914d)cX*cL=s~D4 zdQZrKBS2$ijhQuGz6oxIyC~aA(mw)6vwS7tRd6*dgkx~WLT|W+<+X4e@jlQO`av!n z4<|q#^oId35C*|uI1z@xP{`&OhY_9x1yBg1K+i13K=`cTbmC_~F^q%pFab*7Oqd9h zpcGBXytAMKoP<9aUc|oy>)>Um!PP@Y(sTmNYcw}q%sS0Q^I;)*YmRdZXg;|FmgDY& z`{4oTPP(?x4m7uX9G-we7zGc)L(l~@-|Gt9Ae;;45$_KJU?6A=Iv7rbAutqH!(*@> zmV@TjkF)P5;7NFpGEb&#*Akw`x|0cq!zpkooCYHxA4b9~sD(PHhl`*A8leeh!^JQM z?k3-R;9ea&+z0o=1F!-fgoof^SP757qp%8|f``cCVOR-|fS!|G0Sn+tcog>-tb)fu z&(E%ct6?ELfqN2G!&7iD?i#oju7edies~BTh9hxD!5HeH2*$$ca0V2^I2aET;6`|p zJbwY3;g|3hybW96SMUz}8n(i3;J5HQ*aq*yd+6iy@CW!K zd3gAMRw_zCVK4j@zJYJyGC{e%Bm5iu9sU9P;Ggg>_&20*F770_3zos%a1Y!IN5U)Qu^wK9 z@&Qe?(+3V7b}^ks`G9)jCk~wx#PNd$_HQ8GSXo}*zyAP56LIw~fgdom*%MFr6Z0-i zq(3pQISuhdnqdPHX$A}!lpIf_A29gDgdaF`P{I!$5EM;iXzJg8VCaLm^Ka@OFMd1? z@q|BdV3=o9{}Yq8C7wt#EXflO{eXeZ+Y(Rgcfi15i981kO-eJgInAKF<}}0;+YTPm zKd~+Gz|SeG&z;j)m0MjgE4Q+|x*~T@Q%xfkx?fL6zh6)1zhBP{VZWZ6#C|E!UP)a|b@@En+vLG{!!90}lV3Y8C*kUYmE+3l>#J+4 z8WU;a>vNiYb?waR>D5hao7gnWZ)|*3%X}x4U072&FLzYIfbqFhZ%TDNEsaRBr+VX_ zNJ0L%QN_h$^K<(T7@Au!vVc`7?0#`o0T&_9YumRsshijdV3*dX{m%cp;Dzu!y8ep{#0K3b=fYn?7Q-qGLRZ~2Vx@3)|JIvsDTbiwhqN*5e& zt90J4`k0pWJY%|C%X%I?vSqsXep{sTep{sTep{sTerfvO+pk>f{kBXO-*1a_-fxR^ z-fxR^+V6x`^&(f-x?b4F_tN27r_(-Kr;~HK*!aRxqdA_&+0!qei!H2f;I*z{UVc+k zL-q98O_f}0vui6VXH?f#R*=ru=A?M?oJ9JZqzxJx%PJbHxn>$0XLGd{RyW4;s;;Xo zsjIGSBAb+nlk#&4%bLn^CRLWtZm4dW*Dq&mZTazG{$t~tl0VzdrW|ZbXAs}G{=#xf z#d)c0XsVu3U0&8ysq~c%|2f~Bk~0b>X&aZnpn21r#J1xK2c(=ac2d65&8irXa$$92 znd0LL2d7LLHL5VYPG(gM=3Y}-5ndw`3kJp4yFX|s9~58jYnS>MRa@RLuUom7;sYa_nx;O1=`XO_t)wjJDZTkd8hWsQw< z>KZCWmNiyZPz=?-rY^SxU9CSv`qJo^14~G>T1W+ zYwOycSXp1!Sgkg%{M4ZrCP z*0ZLpvAnvvv~q5f>a<{D@#vJAy7ICbnt6P$LAlB*8+BpNX(+3wO_U}a7jfJ*Hqo*t zG?X;dU0hvTUK#G6?Q{Xh(`Y_YSzggtmOF=Cay!zx7Wr_-8L8ou^C+u{)mAsfb4t#Kw1XK^B$tEj8O43i4eqb;m9Afg z8bSMuH@d-bms=6kquQl>Sco8fZew*7T~NHHo3~XO?L3~Qvi9Q2n!0)?OUfrGOmaT7 z)KM)GCzXdhgM!A>S5#M3Ha3O(rKYE!D(B@_HB?q|w&)Rq?d$3r>R6}CPq*Z_cxbMlippTU zb`(?uX~!0h$`AXpq%wzx&b}(k!ZB7@!1y-tezwInlp~%#elJ$~q4YvQdXJ%k^aFDGD z8V&MNxADFEW>WcsYbH^aq>Y1Xu5eV)RGdCh_SX9euEh#&0krGZX%l(p=5zCFE}Qco z7`Da#yxqta+j(CD!#4V#w<~C|o%WY>?h?n+T)x5<>9rr7&;OkNgvRo+hTQ)Amwa47 z+xJ-Jzi*q@V%y+a@|fp8Z#!{pL92bLKaF2oiM}vTePQeKR5`1xx+cG(LicF35AQ?m zCrIC17cI}#>{<;v%bR95R91xd&Hub@%kx!USKCB~UOKNn=*PxzsqSZgEzi{~%2!rZ zSs2`C{>O5*JZHKiav7B}9QhxPZF2d{q{9owGL;S5v`h#1Ki3P}CLLb+%(9xA%G#>R za8&m{mX&Rj4l}t)v9!v{8)2;5F;Xq+FNW$#WHf=+;c9*-$ z%EG%^hqh%0UdxUurA@FKCgEo34gOFn+A5|BRncx~EBpgVsS<9&l=AzXbI*PEy?!$Q zwRtr?@7;6HIrsbP+;h(zF!sf5c2J|~P2!s_CCHjxoZ}$zG1#;=2C|5_1FtYChy!OY zQYF)IK%3zL$A?9Kk zjPRt#M9nwMjN-5_vbeE3;u!h#QF8LUlJSbu2KE54=i}!WwpJ!Rt4As>uCJ1~C=a3p zTx9Iyk|@k)8FM)IO7~V8H@Ace$59!(N9Ss(=yLtcG4XD~l3LEt7*^f@8I0jOgguhX zXm)f=*13c4;m0I_m<=3a>S6^&tfqrm|7^cRS4p^vNQ4j1ZmsGmp6* zWgd)iqVnX?Xr5~mMRlDOLrkMY}Ry@2JWBvbedTiaD+S$m`2NoAPl=}26Xqt$w2 z&|YtMTGdP>v>fUx9o7K04^JGnG0F2o9G!4kkRW+#^)X~3%dn2G%r5x2RtB94#1*Z+ zWJJGp5hAM=W)8+N$j?e;9yOh~vCS*c&kd0%@-1yNIm~ofRajSKASiSnZQGP_v}qI9mp@86NJ7+b zYjPL%lvNWc)c}!UsT}X*40Qyi=d@J-DBD378|%@^s7!voPCj-N(qF@8*pQVAOyf!1By5h_N5?fkr?8%tEt%?) z$SnXD>AIu?Qq;z}&f-f^Ra>nUixeUmUiF9d?lG7gxoNe!J0c>+S@~wSuW#xl*AVyi$F_ zb@JH5z#_FQ3+YCEFnq#w^j0qCsuhQ?f-ozWZFCWeuR<{5Gm#0tE&?p?6MWs&V4Vr~ zFEmanaA4gD_b@aZoupg5uqC7PoCzY$slAFBCPX)FEWW5z%F|8E-8@(F$=9t6&tMMd z+hCRtwqN{w-SQwCHtX%>8i6S zo%Twa3iUPErNR76e!&MhRp@wxc(=vi`apl zS~>}b^6An!#x*}IwB`U8ec2_gcX{!`HcWtv{s~iI4y`-!MxF-v)%i;NY-`1)&?MyQ zN++<{_%*s%0$?(olOc^x8+1A0rfJfd0R9&KjL^sLC;W6Kfmfs3Y*kc#m(JI89MTyE zx*5>LM!0*L)0qcck%vMAKg1S4D`j(yHD(Ms44qSKLbN+^;L9?>7N_Q-APpgCtPJbx zRKWo|9cwZ6hW!{48c`q_2Z(unEAiH`#%Z>&>@i*(w}ZZwILUgQ%cHG!bF<#ToHCUO z!XLC@Uzza7I?C|}Y#08r-s(3nV&?HDZ4Q4_2^1puH-Y?O;>t`FbAk0i<>XA7U$5I9h~7ZLv!aX0lUSiNo!kU8qdcK8p`_qj zoWqcwiYH<&>$Zfi6SaWp9G1>;p6UxXd%Tq)yFqUJi_to$o#01XE-01#LL{D zLKQq;fl|l->tR+@0$d-46);4UTnPlLmFzje@^%_>2&c|RIcx*>*#&B2Xw5m*6(iWte8MnKza8&f&)#yeoG*jAJtb| zBICfCm7c48i~-G#*T)e33}gWFejB< zVl4bBv_yJn){&DXeG%Q4hy&x9GK+w7f8cCxbTN)`tRBHz#wZytn78c7K6zA2hkLO2 zMz<72l{2L?*u9)0*UIB`#546?eWeYh6RvZa$JG0AqEgFa)%QunqYm$hQ9SDQWbj1x zs@1~yIeBYRfza=450_eBWm^woUI8(vQ8GT}1#UCsui2b~S{x;O|JM6zp zl|{%`x=tQ8w$g20jsS~QQW8%)_t-MZgYe}_$}2ke^w<;BfjRf|A@{~&*xd2VnfUWs z$ElnpWy`metJE3QL0T7)6!XG#l9KPb?5isr(h%}a@S4f@peJRM_zj`C7vLg{u?B=R zSy-~C>f0`ZEy%HB=-qtyq{;X{jf~3m*T%9lz4K4e zLpzJ(E|$9qPikzTu5kM+6@S2G^)y&x^H1SdD^*siG;DSh*3kXn5!~6cGZk0&C0L(6 zgsFam9wcY2kvP@s7Jq9xNgUvZK2Ovs=j$si?h$yt@LTT`w;_*hp2A#&+XbPYi{~k7 zScY&EADV#Qnojvanq2R>PE~g`(&1U!!#$7`?|S2Gy|c+~FU|L>n-IQY6*ZJpr0X8i z;rK35Dy|ak4815@qBF+~3sc(^?}5&_!|puoPvt&04I&Z)5993Tz}4=h7AAh7AFD0+ zYpp8+jB?XF1%jQep?+qEoC=SF>Tsp|gAuoR9 zkNF&Nc1#0z${_aJkq`4&dL36`!+18g8iO(XONR|faIKNE-MlHG3H&fNj?fWb z)ii_r01a>*I1Ohwsd54C%$Z8SCXEk2W98%2XpVK7)F=(|7k#``zyYTk{dE7H^7GS> zBpl4Zg%%qO-POg_#eVx@JFNE^e<+}4`_>e_ZDFP2m*G*Nlmm7A(D{aFjh*j`Zu)@l zTC+Ypgc3Tmzq3gmxj2xc5NC1v3$=Q)SyOU#V@4=*cKS6pdxEooGaWT-IM&(-7aO4T z+h{i@I!LE|gNOef0KU0#X#@LSG4L1-IRknx-XFqmFMfO6_hWcNeOcgBcu%@-3V#Ua z{vP%3C-IxX?*e``{KyAl5#jUGcyo}R#Ee3-~c3h|e>q_u$9xYj{uM{VLu( zdwLB&!g&Vu_uMznqVoJB;XISdbCCSz8F4Vu2{HpkM@VkxQ4gAXRdj-F3e7}X? zd3?W$-%I%ZK7MQX{w97`@%;n*zK!23+*j~>58r$7-iKd|UvAys#+Zl7KQ%prgB>SN zmA-I#{>;K+`HM@H>hjrV&pr2ieWiip92eKxU%Av--{|(f+8+!zw_e!3{I&7J6Gx6d z@#Is-p8m|^$R>GyY|pLRKmPImZjR)AEBXA~kN=M!e_rX2fA*OZ@QC=k=L7fd`QV4{ z+xy}BKk~pwKZYAdKmODEe&%OC@z5ug^5=g3Q@`+wzZC!S!@u&#{=f3+1CKuTnS*18 z9%od6qkKI?e@R|Dx_>%L-7ykBrg)6V#R~QGJ zuwTRv-Iu4i*U=OX?o2b5q1oeTZaSVX!#^9&F9c!W6D6;=eT`+ z2b$iaJJZk}0P~C)!uS37MPtY#{P=ka|1CXq^Z7Dqu%n50p?NrV z98I)KI5B8a>2WkyT|DyQcF@s0-Q?T9&C(#uJLTJZJJ9TwZ?xaRJc#kT+kB%9DWd_|UFBPZj+%K8 z<44-N$v4`l3Tf^p-~R6`4Z^xpzWu*D(Cn6P>A6#_foTrS4an5;g9wxHW;*$>54iog z`wH>rwa)M50F-&^aFd3#eC~#Zws$NXj?r8D#-pnz(N~1AOETNh4wmvHiE z7|!)w!lBJD{Q0oh|1&*Tb_pkshT-f+L%U>QI2_YSFZp^T}LlH|j z*NQvmbsi1F*^TBmcL?XgF5%?SFr3|JUPc1KeB(I8d@Eo)VZ9Jf`AGid(J-9dX#O(< zLWVYfx|@2PN5gP-tJkzeXW=l$oD(xWyVdJF8iuo5y?!0xFyAaacT=zPXc*3J^_uqd z!f@`UUgyzBdUmPTzv1eerRQ$ybsi1F*{xpx)(+w9R!8$_7|w1qzvk+-rRQ$ybsi1F z*{xpFt|9ANj33{3Q?K)A7|w3>`VWI}5X@cG>pU8Uvs=BUjYj#kl~dhVuP z=g}~n-RgB_oddN_m7aeX;WHoY$NGNjJjRMI>v(Yme%a?EF3v{7vL?-yU1;vl(6Ano zru?frhqE_`8{@#fpES3338xIaa9)REjN%&Rg7}fgRs6ED$o+tkh6sFr0l)DJXum5; zvj-LX0^B$8yHQuzr-8%zZZxMI&5d1X4rFNN9nICo&f)wO;8@)7DYjE3ZoAO@zM~=C z-KJ;7;j;eSEls9QL1j+slx%yrjU?`bbR191E6TfXHj(C*ru!whvt@#9;8gxn-c6b- zyU@_SPgo{gLy@Mux^p;G3=8v@@@~@H-X$EMq@J6n@5dTVe<_b$9HHod`^wy3X8!OQ zzj$9^62A-hDI|(+oZnNp`Kx;h+^6N;w5_%$6ZUz7Mv;YWTfBl5dC^+4e|esIcjr}T#WxYulUpUH0=@haojdmr)R z-nl*8ujamf3;_8}{yXyHo;P&^#vQ+_;CCIrn|B$%E1;vDTzj~0PW^&O02se(|Bn1< z-=EK<{KvbE{KKz@p9AgsBHgzFjA?xH$MXFEetG5F`{$_7_%Yv!OC5|k{P;}b7nUz^ z=>Pv0Kk9&7z|RtQ1L?ep-|Zm1<;I>uxtZVI*tQe-L9!SWg?r5APp59K#xooq}TN3mfP`n zHhp4MFTkET%rQK9G#0G{9-m3kt+czfl_!rfaiRx+eRgi&$Dcdl_uXsV)m7%9_lGfWAmYW`&H%;N0wd{J2~FA|;$Yu2B^&tJl%!_AZaWhB%9m(f@!+6KYsEB@oAF7Uv;gg>8=78sttI z)$C1&S5#xADLm-HP_KmHOT#hxH94o+^@o9Fn z%tvG%>jA@&d=+bs*daMk+l+2XzgIL1f~+uf{hpaBqhwX99RvO z4YKei6a_;VS~)W^4+b4V$pnoz!g9DZHC>a$4;qfpQ_Z@Kd<4z{?X~pGmFJDNGZGI6 zGe%k5k$7Be4G-7U-k--+m>9zKu#?5=;hNOsByNINoY58=34Pt@3oQBdtIDFB6SO=Q3h_blNwqQvS@ zI(t%@srVg(Hr6m{qJW`YFv8X6%0;9RI?T|wJ6W2kRTpb#ic}Zl*>J=~(+WXA3^g$@ z+3dxuIHn4dwS*yNX&~t8gN?&6Mt*!^%x%V^YUfU58_b$7{mDZ$<$%8tl3ph9-6F=NJeW_9;37Y_H>h9nS!$-CcoW#?u#_|4|I; zHVSlovoqw`JSrh(64itaWS)c=N<`Va4q)rWU_Oe{2R32TdIcF6<3LnQMLNU{T?P-- zYNF|8>f=tg-o#7=Ijov=21hZ_ii{A)qJ;-l#~5c0W6cwGfB~;wSAFhFX^W} zV6HFhLQ9o}QFc~zpYd9!rmB8GODs&}DZwoa-Q3n62Os7cTz z4>H|C(>j>w=Xagab@OLE^@{=It*ivZ7#0eJrmfh%aH@2pIZ!{flr>7@;7NGC2pLK1 zQc^rv7&7c@TeoZ}6F0;yyQHIR>B4U(Ye}G_9-M?ZM*wYv@y%nS_~x6-0)ESz_GIa9 z!!9%5w3W{{kJmtW2fIe-r?C=37x=;|3|Y~SHevW~z?_S@op~C8**De&avB+9hrH>2 zdP3|G$s2B(4dB=!Z(Ao2*~S8XdpL+a9Nz{fvBCL07<4Ag&OW}6q`tkKnaW|ty*c3R zFR%qIwpZ|W23SIQWn=7fqP(42OHtq4t$4q}b()iH8g3sp``Gc5cZ!Z{&+a8zS6A0s zF^=9fF2!iGINP$?-HyMqxejycG3P)rj+mj7`x+{7_u{7q@k+gM>Cgy2#-oRt4vrk& zsiSER<(AaPrYI-=6Rj(hvl6x^fU&@TAHT@}#(9Ds82IszC;vieuLAZ#{3h|c{%<}~ zz)S9%V#S%n&tSiU?}HiG@4`(T+DZHj?;H5upMm`ixK}c;--FxY68*Wx<#oUq=P+%5 z;9z0e{tz&xcM?D5!995Y1N_L3Fg}Fwjzhvo%ZD)DcSsmziF^qAB?r3}z+wlZOpg!o ze%Zk&m*Yd&V-EHx-h5K^LdtPP4p5}vy(emoeoxL|ao+9D9H7Acfdg61jhs2a`3i^v zD5jOUw4)2oDI{b((2y4oFm6Zn1B{RrcCmiOkcF-dRK;LZC zv?&rfN+O<{n8i_-D zqPe4A3o{Ec90?zjuROTcSBb(1jZVt){nl5s>gdVSk}dzPr(0P2wcwBMsZ|Ka@TuXTSK@c}xp`325yIaEFH0ZclJ-ADoPs?1whR9? zyxAu`0DqaQ;#+5x6fU^1%gfUg_@&ElyQT|rt?vxSp1klo-+Zue%axm?AK``R--cWA z8PZ$h!?)q^d-7;Ht&I2H|LLQJN${mVAAY>}M-LWmo=9N(0DB3r>xcFheuGGO9>VVx zz%m=Ll0QquFG93E$Ge64t*=7H1w$8jFaT1f%eTKg!0_pB`N(*j z|CY8F!ub%k=3vBQ{J)2|7!A|D4S&4+^D^9Qhg!KjIJ){olAjL&C(A=l1Rm10v-^g? zLg&8P&Z^a=()4l_gNdCDCwJq+@4bKj;}VxQU7WIhY-9ABE}dLhK0}H${Q=OU+5ZQ7 z|5(!$($kOl1^CS`E=XN`-hE{2e+QPKSo_hZbE=$reEv8n^K{>zpicZzl0U}~hK0>Q zKLvktlk6beKYIR$qd;D0NFUxq(%3(xE=T*FW3j_)np`0U=o zZMexxf#MUr?dY4Jld=L>%19377Z<8a&qYhK3)1$EwCr^ zF!*Qlm1jk*R|)fjyg1-}ogePWwtuFf`P_r4KEc{v*dAG@fApWH`w6D~J-~WFpUS=? z+n=!S7(eq-=}&$Q->h%!FZN#7_DvY$9pksp!MIjoTYm(<7_h>>OzOckZpY{N}@Qod@jZw=^#aW4TrV<5)vl;xZ4<1IF?<_crp*!ebdX z;UCtkA>8HSUV)K@;lJo$#^YV^u=>fkyaaz-P9uVjev4N&a=y^6Bb&H35^EG<3kGhf z|1-sEdPl7~p&+t}KIdfZaU3x4^c-hw;nC zfA2qfu)uNnHqvnb?+Y&e@2lfxfxA%9pAC>tIarw9lAdc@x zyakZJ;&a?cdF5x+iue0-dK z_(l>Si#K{m;<5AQ=g>;;k_*YHH)uGJc)`#*Ef#mkgDGYr_aA;zcz&V25zVz$qBHe= zG}Y_leL4EV<_3Np*fP8rRbbJ35gq_nY9 zHdsK(g}{Zy1?eSe@;5A0hL3SBG$Jew44IVYC25zkOx5$C{DTB>#AS>mOy2yP3R%jJ zU4fKiw#z~uN_i#rk6}F>`LeuldSUU|g(wcXny@;tCx}tUtykghJGBvDx}PF$DeE|% zu^aee*bK&+Rx@*l8Y&TS^*hto57A@L;+c-@newI|wqLWOJ`&6U$p#;M%A}X0diaYo z?nq~3{7+J{;MgdWfk}K^LA$|g62B|>2|7I;Qcm2kZLD!SDEDKXi00a@P7^}BDl{J` z%gdqJ9BLJ22r}oBkKo@o{%f6|{9FLD&u=+DuD`O+4d+LjLD}c~&hI^}tFwMTbbgW# z8P6ZV?}LDS;)Ld%c@uZf4fQJ@FsQ!ix6k=~NOoBgfBMDnBP7jHWv$~o_z`z<2S4&E zJ3p3b>Ot9EfL{pThMV$J;!)1f;NJUBG<{sNWS`ji z{cP3)?s4b$^ErN#&X0RV*{2FW*<*p;R&fctQ_mM+%~rNsB7vVRRZ7$IP$yd|QDP;q z<%JToU@KGe26gc1Gi8Ga-qgZ#3{Sp;sjs-p;8&djXRN(TmGb=5bJgOxD!!MBGu6eV z=Nu!!onBm=FHTYYQ+ZVrfcVd4+>0|+XqhR8+5+t1W#UlNh`D%SnHkf9DiAwvBoo+LnY%xpt`io7sp<~#Q#n+-rT?qWKj0Q<|&p9 z%yvc~oqp=+C7Z(IAZRi?yzj%hMRI!hQV>`HMse0&kx}iSqt0HLZ!5b-pMcdfRy&Dh<++* z(`lj-4i|BnDm!1{j$@cp)WSyTV6#@NB4&AV8b@Q+%5#j*bn#?q0j*CQ_eb(7F3ctn z$Vt}fyq`J4~=7{>dc6baSnGpR%KV1+aIvo?y*zQG(5={5OMQZZs&ZFgg9I8!ieEzYX)If;QS8joYh5N zT{8Y!Clg;r_IRAngDok`U+L8+T`zc*>f^mmy}j|#`&r}B_j?FTVxo22pLrh4JmZrkUzL`(_-h;T2|Htur0N=#t_Ybiy;keB~_fvqAKfiwfIKO`izu3V)fRcO! z-^AzlxP#w=@1qXR?@4?!tPkS*l>7b=zRT|WK75~Z-+S_K;d~!7WpG)bU7`6|QBZ$9~QiYEY}w z@qJjoC~8bom6;OvG)@)Iv2U0!K{Xmuqdq-#4l8KU{;|WyICkv$7qCN)I?H;#7vKBv zV_RT7egxmg@SDYt^?e@ibNDs!>*4nzek>oB1q6hlRP23JjDG06OMOBH-ZOGVXJdWMUm`0!!sQ%c|F z)~F7CgmCwLH28jk-)Et4z8G{?C()^#D$Q7wtZckn`Aj@bT8vGQqoR%V+w1PV6@Lk< zpZLpwivQ5LWn8jv<*~m>9@A5^F;=?EOPo3)spaY^Hp{3eXK>mZ{=_h#`=97wCXKd! zV*eQA%WItzT>IevQM_{C*t?4f*TV>$`COFS52(qFIgqH79A^YvrKCKYbL&=pL*j6J ze>3_LDpEYVe5U;6;}Tb^-y{p`_5pXmf@?Pv$DzY_WidTx&U!e}+vODxIF7LjO&+PV zI7^D#%?GZYLmzZzaef{v@)`!CGo>m9KexUooQrLZ3ywG9@NV&3h^FgsZiTJ(^qV-S zP_wn^(xTBh#bH@{p1vx^P;V=laCWtvf6^JiaQg zs-G)hNsRF`m`jZEz|DX)mw|@Y7MNs?;FPMxGtBsz#WT~Tg`z~jaLo_-p2UOnN#v4n zTm+3)!s+4ofy*Cpa~_v<*RXa9VVfID6~a`b*2h7VXfZ#pVV;h&))EJ89~787_j0wo zT&>McRi`{189OO~hn0EISP!%cpX5*_MI*{<00lc2DZ!!JMN{39EX74HG~v!nil6pM zNxgG!5vR$?YZr!tbAIchqx?`j5V)ZMp^Ut)S|L zND0Ffm3B}m8$(=1RrtAqGu1u}7PbpltkX{()n-j%q=jzW3y(A_ z0Ii)_;-rJ{mw9zKajYCczJ#S46}@d#YpXN6z2P%0PmcQ7YdWENabmAfL!}k1dGl(_G-MG6?5t_2+lJL48y|+d~@3$ z66RU(29&BeC+4>@j7_yhU?$CsnKcd%^X_P6y{CN|r&xMuQm0(R!FAv~jqc`EBN*-+ zIkXXQFw;WC;YZwSz1nW!3_9ga*b;}XzCUIQQFlbajc0~%*vg!%8iH+59ua6CDdji|ufnE_V~!_4Z)BK5VR|{7@j0S)80h zQ4#|Viz-59Vv-CBrbFDg_J~J*gQMG8*b0E!b=2;3pznfnv2rGh>DOCC$Z8y3(?+Fb!#7@N4%2o<2-aS5@QdjH|-G4=9mGuLY2<~`xg zCGkhEAbkLI%sBKiF9e?H;{=w|$GI9Gx4I3`N$p1~21nQ(kn`@sPvNG2zwYAA{=uh( zcn+>zoK{#@FSUzx6T1ymAk^_VYzyR-tq+8?HoBV^*J6=FXOjxIv~RY&##$E_Bx@EB zF4i!3Cl_ztO-wCB89&_#K->Xm?xeDkRv3IA>McCjnUK*c+-+K>(MSMOH?aLL=~P|+ z;X9dBJ}0$4!W4fKl?#WdTN@YAOM}4oW8ROMlj*~}A6gB2;tlle10um_1Cofn8W=Lb zaI=A0!o*sA3)=yT5K|lGC<91(e^<0(Qh^OJa0^@VM~Q3KB57G`UqsI<^*^U@JtNYg z-b!$p^msT0DA@LZIix_Z(piTHY=$H{mw_K>x6nti02s$jC_~fY2>K{idAQSUF*`z= zT?p%=&7HB?A@e2N0J^SWsAUV+Pe`*gx#D&~9(rafuq0uAY)OGdI(DuxHuX@B zkjLm)o$^QBq1h*F69vp9?Y=w%)iH}l;%EIx*pA(|^e}as3%j*I-RAzmD#*ikQXfRGx$S;Jk!_UIn4mOFmrTH~{Gah`XJ4g5*qpMsll=YwpDUW1!JxAPicJX3-0k@jY&1LFD)tQ)6`6P8f;+cX7Z+A92L%1eFo@?dKs zn+psviYA}HnegCYT(jqT7}xoKoz64HwF(&1Y3FCjD0_bPmdmR*@!kjj^Q1xK(Ltl` z=@`JZ?lDSx&(ai`o`6ZGfpusdx7BMJ@PYnFtz3D$UTgh4ezf|KvJv6otvZ!ZM)2K% z86NW}&6Q>#U6VCy90HiurR53~Z&F~cb7LqS!#jdpAZ7|cAM;!^Bl8G=kL4!Vg9&SKCw6PI_?4Bw9hIj30nV-L-#DIs6ZlxD_epai(& zz84qfpJRSaPtA@w(I{-Vb{kGXJNa*^YwQ4BnpxKZ zXEY5NtDP@W(ox-b?%_zknjqe(S#Y6aHcnB9H{OO|4`LEY6;&g^zMhguW{+yT_6yjuv1W_%5HL8=8p$}9$ zfGT&x;t0edO3SQi68Tu*L2GR*p*$^Ed8ilU7F=*apa5~5Nis1+($_iD5>fN>Ju}kD zrCqai32RBU0YSH$Lx^CFZfgJPDnr-VL$1qp8H%|?7w7EOvGwf4geF7c2e>G&LQgpyN}#Kk?n~4Bwl1x%tN!uK@$-v%)%fEu8TYs=c*HdY&$=HM zRX${G22bFJFm;J=cX^HJtwF(_c-}o%q6&VJzHLlK&huZbKS2XJ`F@RcXAdcFZm_Tz zOLL=$e+PQZS9auW$4GPHgj2n3r8{?slO_nm?sz+UZrZlQa6BTnh@~p?VrqVV@mb6r z7tg^=H1di4P9{87H7A-wJfPs63#VJOZPEc1eTc zQJDf!JY0hqdy^~mj32GgW?`~Pn8E99_Mv9of$zN{@S?ruZy2qjJG6vt6 z$Ca`BBNjYS8NFAt)uDQKM3_b=nP^~M0hv4YL!CYBb`vIG16i}lhnsC!Gsm_D1*ito z{W2{u+<-Y@vY#+W@XVq#TNErAOFv~WCnLgWj5!2Cl>uM3hG5^~ zg;qai3OU;l7v?3gut8zSF486!lr9H^2mDE3dmO=B!wHXdlO=#_hw91%^NLMu81`Fi zxOfuTGvu;3nd`d>77k{GZRj2)IH;x)JuHa*5nlSM+}QF<`6|p+%9sXR3{Ub~Ah^3l z?DTfJ-Ak~6?&^}CJFt?;Sk0W!LgS)miCJeup9wfulFxu zBTbGgM!h;V^4xx&ZgZhaz*5N+Ft85VzKm{TcP#1>6EBFV)-h+W`(TV403cwK?LX!K zj=S``7=F0}w%W<;BL!U056Pexg)mlL>0?koL%7!m$Qfvo9%jY1FF$YUXWmxT2O}06dC<@371TL zc)Q?L-DL3&sUwE4nRJOHqHw&-{H7 zl1%8vws7t@SyTIP<5jFIv|=pH&BRBZdg^J6qJ!>c9~<7Rai|9zw9%Ph5XAx<-JSVk z^vAUV*b3(ME%2~c4dW{9E|gFpQ;E=+SipH+I%h~49%mgJ?RBX4uySh@Y>KDHaKy&`BY>{z#@?LmsP~ zU#tXp^$p2tG`_ezhGV4h3)nlyrG;S|OF2ZW86@f70Jt-z2e0Djf1zu-r6~CnlKplpUeeWG)Vw zK|IrGqaKSaC9brPwV2tu1Ewt|i!_Vc`Bji5^v1cKN}2T@LMXA_<=jvV(K`&P*zZBt zC%kgzY{S008+V>|Vz|CQmw*Xy17}82vRPRN*7?N2Tu$(raf5iZ-(43{9Eyb|0cYfX z8IYMLf*!t{CE|Q(gVvX~58(^B@y`F6-m7HT;UgIaz&k%yo2T#1TF z18OK5pwzPy{u?{s-vesy`)2vy+yS4s_vYZsu~yj>#JD%;)Echr`MpbdZS}+gcob2e zp3j9R@8|Yr?sN0#{e{94X@ADwp5eWPLK)}U4aU6K2F&(;$#@*@aG(1M+>JW=SIj^# zO~HOy1@|qb#8tSzB2#a+j+}=KX@%V)%l@D&=#EDR*-Ws<=k`pw{U7;!aCO!yeo*ga z9Oeck+5pB5T5OZv<)Y2^T!G*<$sca;Gvyp z{Tls$<=Fj&TR|Ot^ZLgNl!fwnKXk|b^y7t8|K;iwRccwMa{N%;)S$sZSHXDT%VuM` zpSvV=jygm9kZK8}zsktriRaR7N1^)vS`l|3&!+u*_o(0drDMCZ=SLqZsI6)M*vGs9 zxB2l+e-TB_!rBJ45|%4dCm|KjNk67im&86J=}z$gPQqI8%v1>#LcU9t$}-F^VXq$BCK>|1(S$f?%@NLT9LbTreSR;9 z2jT|5(!^PbR%(PhNj8<*+|nZUp>aOc;tgG8il$ZN74+?if$sSS`i`ZEioyaz3LY=e zfn>l_%hgkhIAf-&N42S$nIg0$n1@y734<0pF$+sY9HYU+8ISG~C4Sg}B2}$CQ>x)w z1~GcH1RV?RLjgD9H~gXs-l97h#A{&snnAogOb%Jw2{nwdMqgp4qhcqL}gyqeL2*+9tH4Nv(@txOyGyJd}Se!x_FU%!@1TFPGhq`G7Kv8rLQZl)@)i-W5tsfiou9sCS*ZgD8ABH_4wMPYjO2#zn$F0n3^ zpj?DA(^J(`P>nNN`S6!0V^S!|R7*y>&jCLy%&_k=p?0O!U6Wy#dBgn`z}N=;UPT-v0|9YUJ7PsOI@6ZC-D@cQ3*Xn57+_XVG9St zslBE0B97Hb3N#!KlN}$Y1JbkgsJb!t#G(n`8`K?{z)RPa_`q^Zc3R5v6&5(=}Mjf$>7if#54zZ0H0i7(m_H*>TF@Qh2`?O&{K*tM<{=xO;e@3;>r2Vg{Nh`Xx-bF2ah zk>dIwhLFoR`n;r)Zz77fy3|1x*%XsJ;kXvUwg>?qMY0`S8tYr7=k>xG zF16K6@lk<}&L+f06u`SoLi~NF!A?$Ees-T{q!=JKHOt57vTY{;3*m4-G&mdRTZQeF z`gV!%M_{h8q-3*pFD%3l!4?sylPCUJUDI84Ag=dlKQO!p?A3i~Im-di{93{yItq9B zkM|0U%S`f^buhZQsCzrZqYVF-0p~;f3vl1=-Y+oY(E*HWJK|B!L%bIQ*u4(+GGJG6 z9}v?(9R6MfjCWU&_Ja=gI%#_v2JIUW?>hm%`yA|hfZcN8?sc$RfL#O3t-`oqf$ z9GM_Lo-IM2wfdaR>6?e76^U>2P=B>?Y+}NpM$JRbg^F`D4{aYEAD>dWGx)&I#GsD0 z)of$YWdSu0;Y1lXO_$uBMkzU~-8|GT8z+R>x=7VaZ2odq9nJ@tR%a89VMt#P`d8q; zOe8!PP$v2{`v2;GXG$J3!(co}dMhMn~jx#IEt zQU-{Vd?8-)c5&mefgnDxigd{SV5b%lPvUw!OhTS)2Pchm?Jve*5tHA!Vhq z%>N`mlG^M0Q?YxrL}WZ{gZh>Hzy82fvSob~?z-K#`~x<$l$9zV9z3;!&i z2XQ9kgb z^@qIskTC00$A2!}FAw1svk@Y9gOdGHX_0kl0b^8n7X{s-N`X>Gm6T^PC$F!q?i~MD zenPr;TnD;ic(3G#xx6vJArT&HZ*u?9f1idNdj@+|*ym|;UW76TosjpZyx~rHM^mfV zG*THkZyvz(xEa+Gn1QhGhh1Ap^C{0C1m82*%G2G=#nl+v%s4wwaeG8l(ek;t8bBfU z31s1?x^Ay6feB~{3MgBxc#eBlSes-2fNnbJf*b|Mfw9vCy?|%2<=E`kU)X?7g@Yxa zXeyKTsZ82`)0N?PU_aP_qIidLxbYVsFZ?!;*oJQWW`0?D9`L`i1D{uaLHBYDm;9~) z#x`&Dy8yS1w;W?%huiS^wljC6<-_-N;Peot@u+5ad>d}JWQ?#oBl>wFn?c{yZVptY z13r*Pp4A;`+&=*&Ik`{f9PfmAZ16mmoV=CdAg?d!OV^p#9}KoP^zvQG9QoY(8@uNh zaSFeKJLZ2^@hn|J`%9P~IeN|~CVw%V7q{R~JbQiw_ci1t=RSOdR}7rLndD6mJi`2a zfd1|w{zGtc9{5cI;!Su=Jn;U98TdiK3*aAsqc>d`-_FFBIL`o|abyR_G!Zrn*iEF< z%5NXi5yp}J^s}c5ckI$c7~^*Vu&bDl8jo`s9&7M7dcKDapR|1VehIM2pf0|a;c*rI zlvBF%k0P4lZH>Ankt^z=uWmvtgdPjaQz!eBqfD58$;gLyqc_;>w;3kpT&PPMU0j?b zV`Wc>n~v^_%MfYFWu=PIZ&6SL8HT6;ELSjn6uB$rCc!e2d=-DA%fVl9Adtm(&iK_p z++`0G!h5i>HBm761KmuyBJF0u#nhB&s#u)B+l99vvImBV=2Dhr8kz~dL9X|?;G2zy zS0N$Aa)lH9m!10P7cJ}9x&U7clBEokw*~|Y`#_5h@Tk$Ff?qV<9>&WEW}v4n?VCA`0ZA6b7B@9*Hp`uY~$-^Y*b{ReozhacBC`#x1D9Kerjn{#+~@MB+k z1@Ei)S-S&h|M*W!nZk*f*&}w1r?}D!-|)!1tiLjwPbT5sKxq_T)^4es-3J zTVW9D2mJE;sD4Kevk0&C`eakKX11keKX#{m+noG!Rvyq#jm1$HdBLY#eIOOKLeu|m z{`2nVChvC5w8z0a(RypNc5HXQrj`eb^J{H@25@ma>f&lCztebaqtwpTv4 z{&|uY3Q7LQ@Vl{#eC7uDhULrneb2#|tt^OnxLr^(m-r#vVVimv?wc+SY*Sa^PGW#N z4&c_obhZoqRt$R7A?Mm(HbYau^uDys^=p2gI;U;**6Tf)YqKxobL%g6$&a_NCd5xM z^?z7i*A8kq5Jq-P=XV^;^5Z<*VSe0%+ih&vT-lO{J*>4h_94`L2B#xrgz)J~?aT8L zSPba60@f+hJ1!;V5vw!yT=Mb)n_H3>?9b)7nNF*N`d9of?k`;bAM*A0eMd;J%G839~#t=3vI-26$K!7{)yOor-?s)bqWJ z9C{1YrD8ET3sBLc0BnqQ1|R@MdAbt*96>;X&%CxTRub6w%Xanvctv;CfHbA@@yH~; z5dA(LeAC-M<;S({G0l9KzZU?z6|9xtM7qO#ScAXelV%%kuC4jahdizVcKd%0=K64l zJYIvlCv9-vZBW|!6ls!^?Ai*+uh%F;19)Bx56+-&4f{O5066vFUHwc>zl-gpltKvS z7JTCG=hrdy)&IAFbM0R$9=cKn9BassJ6h1_k};U_?5?csiKknamKN=^6L_*}wOvSt zmfLomjR5Eeh`uOQ;Q2wp0N+`fUgI+Cvp|6!l_Ae>1KZN9CwYF<{oTor$5`mc=fA*u zCVVFUFZ5sdg)sZR^=}jSfB6&A@kU?0)fe;YLx+zJ4(%U5(tLg-4O>TQgT_$08qU`% z++<7Lt{Zdwlv$|cCC5f51dL<7syW&^d|>=hM4o>0-HX_)ftT|m%yS4}MbjTqF@?}F zaM9lm@W{y?=8xOsl_A=fM`L|(9zVN50``+&&PH#bTcQp$k7>{llx47c-<%w6x8DaW z+~>VAk#2K8fPaQfbo>5~2+Z2%yP)BE_6@w*=RGo&(6C*<2Od{G`jOPW?jGP=`Iy4U zhjc zyo~zwi46P{;JuH0r0~fM{2bs{0ROoRd=2ocfd6F%z76;_z(0;m48wf|@aupBJ@wqo zfqnlA501#_uYvvsa4pZi^Q870*YIYt=}$jswU>5)2 zQ)&F~0iSh^5A*jOxOs=@EBI#pBP^OhSwpYD+W2|!uy4k(0Dq#{^9bCmbLJ+GX8Xc8$Nk;T%0VdcM+Dwg%N!@6V^8vH?%{O zwG#I=$Ad7YpJBb8;oCfxPQ$k|e7W|cE)7WKA>Zb6i5*UQd>1^z{Cy+C;}+c4kiSd| zAM&^jSUCPfPp5gj2Y=&v0e&23_%IC@(1(fx|H$hhxXVTDg9s<=0ASP$dKuqVFD3&R zc@wW3z-;VcJHHn6$HdzPUJo$x<3re0z*uiAo^NE*@H+ej+5Ni#H}m1^OavbCxCt2h z2WwAzk0t1e z!a6d3BApL!!9U~?Rkc1c4SX1<9{|U6Xb59Iod44Y3s+G#mewKoT0Ss-?*x3wBd;IW zdlK;t%J;2I-1fmAq^aiy@KXRdm}l1mIK#92vG^VMoTj^gH{*9S%lkk4SSpXnqw}SY z$)1$)=r|tmk~}B}Ja$T>^>r_UhJ1*(Mmo&ft({y4U&}k@?RLNyPI+SB+qb=~{#kb*VtC~DO~Ass!t`66A`Krhe;s(YgEEajuj9vFyuS(m8<}{$?f5brKIC;b zb>$lPS$d_eWcXUTgsI~jox->j1P(7%|n;4VMx7(OLg~dUBXB6 zP!Fa;2?rO%f%F+t^2Y@*yo5v-vN-CHtZN}4bK6j@CL}Dh`)SKvT&0E!v~ez?)#Ub? z$hFD8X!k_(K(h-I=cwhj83&Sh;LI_%w^~gHT(38#c!!kTi9p*e#u$Fo=k^eWGX)o- zBS%(@2kj_8cbujzQoM*SnrQH|0HK#F5o{jfCYV8)SN^7Ji5c~G!`Rb5jCu1AMO622OTBnu@CW(U$FZK_ zboT;Elc83Rq?t9YA41X2T(L-_NBHJuTu6iVf?bSFUZ0d|iUX)WX$?)Pyp}U#KaesP z*;nFColdFqilO{jl8BR(gXHy6Yl|++#}H<5k~{~V+XfBMneQ~W=;}|1qFF~CnRrVd zg4R{O~M9Nv`p9?G@7;N!?2QjTtGt>XZ6oPl;RzlrhEg;6mT)C+K}1jLf>4-^9!q4}jF;yF zoUkV0oPa=raK%1^#}ANGd|XOeO^|~)oquSt*pj1 z4*e0A{xCe0Ci#FO6IZPOm(od8+~VmZFobid1!I{m-lvPFljOQO1Rk^KQE;_Sy4*)( zz3r}u)<@u?l%Z00?TGb28HLwsmls=gRh(9Laj5h9LRQ?+?GvvyX_;ohOW@v`wevfi z?R-5vp^;ELTpNYt5f11cuJHl@DEqi8CIxPz6QUMTyqz8!otfBtKkloD@pFbJ=jxMW z3vYqpR6MOw%$82_ngW6AXq$YSjdt>(U&+~U7q?n-R670U{XT~^*Bp-!?sF~A4<+x? zqVo{n5yFJg1}w$$MqkZ`tiMle%3sIyTC+=fQE-$v%PgS=-5?#KnXl+mu)|{|sBr^K z)OzUen}F+EU_sX9uHt%sc4@TT>=c3+UfR#N=FufNr*vDb4h{;+oGB@4sRyaKTM!wc zTR2;shf(WUxmgzbc%`b)V74ST>mVO}e;?)x>{5@5kpZW?TT??073Mkl;&dL`iFV8e z6Plu{ST((cgZU-6etM?#g1b~ayNH`npmgKelehTk1sD?7^}$695n9S}0^P*{odxGf zZhqr3WnAlo^YaBuzJMitc&1#^eo477{%JqX)mcTfP)GTSza+ViyJ&XvXCKS6ZM)(0 zTbE?a+yTe2sKNfa<}2=yFO^HQzQH?J*`wl)j-uR~qT%HDySq>F;=%QZmS286#UIuh zlJHY`%=L{koQ()d8q(ocgXrz#Z_&$(ANgBe@03p-N4r?&xUVBYec+l4b;xx0M(PXN z<9O2lr|X3H`QB`_tkj=98vQEn`rw%=6g*vAq_sQy2&{AB1_2}M-7-;1Pe92JxTwuT z?pQNv5(d+1-`bRd4#43Ed`T*bHClo+j(%RLM$RPO3C#DG0_R;d%I7TJb80bPTc98LoB$&nlV%-gLUyfc!VOfCfptYl*?Me9Z}>VjPD>~3Pz#Rsm3O6J#!hgKlA zBy`@8hM|IKOK)>pY4!$OCypEfjWgQII%xicIvh+slX51`Ibg2b=F)AkmmA@`W&!UgI>Xhn~>0< z#)_DQbSw~i$Dq>*IpF>tSj{29@i1S?%Fn}@Y_kJM9zhl}EZ=YQJG?~{ZkIcFI~fXK znu{210_4Q{u!JfRb_UIP_CT_jhG7ze7Ko#dud6}IIHZl4on|^AqJP+j$kGP4Gviut zS5vUIhD4AyK!a)-Nnb%uIeminbDc!ucH%SFdw6)Jf&_3kK~;jpj)TOw{WaKQX8H02 zl-XslrY!P9T&Zesj(NdxavyCrLd>Z!=g|vT(>PLja_#k^{_aSZY2zXLR2-7BVv5u8 zgP*7rv2(EqY;L^JulJI2ac^8>Y-<6v-8(Ddp|dcvVbswoC~S|Z1=&fMV5TKJKVgVyL(358Ug6+ zNii!;V4Z6gCh~X}AIreL_4Ys91-Ur8jBA)=ZR@_}+P>M!qWLW?FIe4?dWx|d^GU>! zqxxN385Puhl*V}$iD?&NkBGSjs|*+W-OV1}#f7tZ`1PLCL*3enPn?Jsmgh11m$btY z&)voY2jw?-TnQv~+d(vW7mH;Z+he&*ITL0p<3I^p3= zH}PEfhZ+dJ3d3=;(|4B>KAyM|sn%RMuP==!`RWu%`ybkvmkTilm<3_hjogsq>NEh( zw$7P}_~Wk8gYiWSlze}B|KQV@6s`^*MEe_r<>sSjuRE~E+d;X?TK3if+{PxawK_!Yp%0q34)2!93e zNx(mufqxV5GT_vc3-PZ5e*5o@?mfrX(lDl@iE{+hKj6kQb=Cli_Wqj(vB{t4yI-Z}DcH9d)#}k9`gKMm?sN@s9DHgg;*X$8TIRv^42{Kww0w5T z_g6s|)(z(S>wty25Tt(tFsZk6;32=r>4VtbzojkI{aHgiEp5z%@9hvz%QKdp<(a`4 zR$d*pd^8=YpQH|38QefTSwHwt59xH3#fUJn2#EE}fJ+ATiiVR@N8H^Z_g2CcOn_A?K$y$8=x_>=ah94w1}DuX`@eAOS| zKCl;p;9FK;uw9G&g#-+^tu_^3goF^atpl@jaS+MEMvr^T8m-lb5FT;{xzkxTa*DHz zn(jCYcbqmBQ%O!9LOy!$ja}TRAyUq)e*Cals7{4q24O78DIJ8PFg2W9n_8Hy!S+Q7 zww3)FMq-CKF?p)GhoiyFMRp5hf71f*Qc;1pT$C$skuqCwmj0Tqj4XVJZE3jH?X4y8 ztoc9`=Eb|nPouRRD0BM@CuRRZ=?Ig|b#W56${!J5KR@VQY7Cw_-@EiwGGCjn>4#6HU3R`YFz1X(n2vlom(X5md31h)glFs10#eCh(Uc zYp>K~;ohkCd|823#N=LN;L;>;*`Lug)9p)9D_M#M>#s^W5`2{^0L}57E-lgoFsumZ zE}y|=2e5b!HlEeSfch#Q-6Ya))|gq5WF$NZo0DC&1g9i3L3Q&Qa}h1OI1vA=ZMhlD z?~^$i-L7^L^Ja`Ks=I4Y5shUFrX1JCf`j+j(9Q7E#o)^S1D zXgw3D1GiP9%9#=jOH;P0Rhlp-&!(h^(|F3ezs4N}*T2aXN-Q}@$yBHg8Yka%GE`gu zl#xAZuGrjI`Vp2E*OVzyu`5Nw8UAi!L${VkvN?J8&B50A$aj$gC*@}HTrTioos@Q% zMfb|!QW;dtZQ>ih&WGf&jU`eOIU?u9u+H{!MVB@aftipF{ys*E*&2irJ?3*Rjz~Pk zkI|7vEXx&UIB2j=QnP89?BUv+_byrAE8QJUQ;V2V*mxmS+ArBTQ8)wAwv%yZ=!vIw zS@C3%p22}XmvNAwm|)T;Dya%GR*I}8vu8kD!tYcO64?ggoxXlBkb8(9?kl9cK9q+z z_&_g@6KN;%*<_GG*?O2S1HntGsB1S;1X}&A#b~K0OmoZ1DQA3YcH3$cGRMzrvE=x1 z%#np}%J1;R`QG6Pb`IiabL~eq((}3l-SpY5ci>O`@xO^QUd4|O=X&#iUwh)ig};UG z5Plx;TSxX5{x0CZgC8H_cL2ZruRcPAEb5u zB|iY;THE+m*VFm&Huzk1OvvLMxLHsBQ+$W;cNre|T+6`sqMi}{_cHK@0FM9%*grR1 z*x$n21Kmen`LYfdP^Ux|c?ccp3XHttQTJfYAkJN1Z4I2CB67?`Q>jeN6{n|8VjeDg zi#k>(@QRG}aMN4|ab+$_En?U;2S>xlnCQj|$M?+CjO@L;FhwKNee=Rz-P_W*iCgA- zF0Rc1EWdGM&GAC~D(ShcYv+xAFMW>^yBqJ9)2}!`j^FGc^7;-=0(SC4p6=M^T*5+U zC%Sca+e}_~b`edU-v)N+$kXKm)Yu`Cul1gC!=u4WdBx#Av^=@DWpmxLNDnKMHC zj}1%kq8g_TDlGxj-D1AJcSC!R8yz7c(KE+kk9y44r#OnfNJ4dkY)ic2NZ4 zi&&-rNJU)7C7HC#z;7ViB*2DMfg=XE3|c|NLrOS&0_>wIc$zu6FuyMqj@nvpQ{U8%*-u8 z=V^9c&3-#L=f$giob_*ZE>l7;SJLd{2W#HOk92YYG0H=9g&d7;p!jwUy`v4SXwIK` zV?1ERV%;>%YRw7HTi{$rS`9Q>;!BlgXX5%V=Z9!WSaPFI2F7Sxm}jO=7kQ=jTh)wYmA_%Bd*w?uFvBjJtPJ5D>aW z5D-OQ11D~>P;uYtuE5Z@kHAtBRmgC0$w_PVQO@%Rn~gPW*g^4H_wqJ3xWAQb5z^ku z7LplST%Y6{%kEk@AL7r3irnQz#E zT!D$_;pJ$SO^7!_I^8sLLnl)e$Y!eNn12TMdvcCW?uo)`9}EPqxNx$x;BM1#-?&6n zniclR#IFH4S{quo+pWgtP&PBc-~6bZ8hk_1u$guH3%eX1dLnGYCOqa~L#Vb~<&9#V zFE^+C0@2Y)5{q+F%kx!LUUhKd`iu==yd2%)LYy8ODsTF!F^|(>iJt?fXmJ0yxuySb z{O5Vq7CJWb6ZcZ_%;MRiPXlXG&FP?sY|hatTr{avUonKsUZ31ms#@;OPd3cmx0=#U z;*WNVu1vNYeO6n%q_}hPj5Jcnjwju+x9r^2scG!kE)`EAow(i2r)haXc5cyMrC~Ft zi|FLB!^^hpcx?6{zgPtxFC=4qt(_{)!=Ssk9S*k{ODC6?kZX$P;Ng~WG{1PV=2YJ! zyHkakNZE&7FoLT{q)nn_dYuN;MS+Di7p>|4WA8nnq^R0P-2w)NObtOXmr9OJ4iXv| za%y47;50DgfoYf-GFn8H*h&sUOU^Wiio{k>GPJ0O7-$g`i4B6FAl~P#Fw-;ged|B} z`R={vto84;p59eE$9M1Adw11f`7%ukZ@QQ7>3UK*dzirtsbCt*x=LUEo?)z3m@>lr zev`2PrjthPh?`jlt_wG<|GkErp!InNV~|xe`Y5( zk}uUjS*7xZaVdg4N8|xJa~yfJooA2?5RbNF zSQ%{CS?48`_DOwHjOK5atG!^VWVh04KRD;)UTKh5b%R_MjgsGtswcOSKk+N-zv9P< zy9Q7gL}>$~RWEV)t$4&N&^<~Gz7l2Z8x|6S2<7Bj`n9N1aa0xCLQUiCR@$yn)zTbn zOlA($8>m+6DKS>qzz9i*G~N4ej~y@PwPKL&HS*RA{G-21o> zTJBG9zk~az@fp{tFg8?s>uVvbBqP)%*Ye#$xt0TCrqs}qjX(V&Iysy+Y!vUxkMC&w zhmH^;{F_p4z>riX&b&uk8_-uy)f=--{-My@JaQwSUDHZgU)L)g>A&X?JGub~e8jPF zKF1nBlurHWBP?CZM-^G*?r8~E+l!Uvj8eXoqwbKTa+T`xE!%RH>&oyf|C=90tda5Z zSu;CiQwqzcMM{b+ME;f3?9V|BU|9b*0X9fTNG4Ub>rq-?31&q90XzqorO0*wS>(A` zVll=xX}B6s@KV}#N!uT9(Rz*2j1?n!oR^sb?dwtPnf7Y5=i%{287sZyKXPURREF{S zlOc4r=8S!bTDw@0l~!Xk>fZjz{Jt6y74p6sc~ARX%aO>2OWVz}HPY@xsOYq*Y?i&O zovxjdaox_zIiAS9e+hR7Ze%^s@@B}KLz&DZtjzCFIup@;#q*g=ab4g(+%9igdL^!_ zn5o~SuWiOo$hZa`^?Jtl+S_ZfZ{b(+C}F6$k$0xbwJ0eE4KuyH8JC>zko12+d{mZn_do-iaXQR23{xWUXW-`kne>&X;`&b=?9EF}ytW>UU(7&Rwm%=3~= zVQl1HzHt+oj@_7fBGNH7Qy9mv_Y#*~M&EHS@4yl>DGy1zE_W74UrZDbdkFzut z^#)~{DIJ9|leF1+iJFu#FQu@5!wNy-tRrC%r z_I7=6oAxaqxfUhy@5YUmDgHxN{9-Rk;{Ose2ks){4`CJ=zcx8z{I{_;0(DNM_hLLB$C2}9hui++$+?fnAvq$4l}1^CUqupRmIGHSCNF1 zm%eV-p~PE9!iiA!**LqLB@NARBkzv4>m`9O>^32BxUiS^^c&|v8pIh-ljd2THVjYA zjIXAd_bvO3GH;Fd`kVisjpf|U&_=R|FHa+heXPH$Hcortsp+;Yf1zvqvbdF(btIWz z!;}Ar82858L9FWtpPaLmbm7tb@(u6E>BXxG?Du^b`|Ldv+uIw;B zh9viiGyc_(elJC4xoz)i*o7Hdx*eY-NJ(WJvi&w3#Z)cQecLwe8*^{&Vf3;;&6svi zDW!+a0|#p$)~hJw&9D-#ec#UbCPYM9I<{pYz|N}~e!nDnr@whEJ_i|Ns(Ej%Hrr{F zj}f(xqXye6va8Y@f1=y@k&W~Y9wrB*!K|wcMQx_JJ*Q(@QC00-R{j&@l_0W?myp_9 zUaFH`E>b3T8AXPaR<3d^1~*2Xnbi<0yZwfJLk`R|GNO@hNANOx(rUcO-q4MLGTiZz z35rlLzG=WoEyIlSULE>HWK z#g%eq)f&%NY4e$MKWXc@H68Tvs#PA9kKXbS`3S$s!;F8uNNlFMG}W9V-$pm&#xzq# z6h#*~Pz+tp8#>U%hZ9|7L1$#PxL+_lzhU0_Dbw8k&QLSliL9}|FJymP$o{U7d{ao| zM>BL5g5`5}e3C`>auPXmKDbYURl+z)TbHmGPEv-Al4WM&oC@b5#3iqgmvvxS8|N=j z#>pH-F8@$UhPnBQAI*Hn4~|Q9Xw$My+fHp{LM`o&Pq`QpNR!q~yz;*0j_DtY zOEo_fH`17Y=N3!LJxeztP$haLlex%0`6P{E2i@L~rMyz#`V_hJHQO%I&`OWlyX*wv zR-(;lXG#J24wjuhiBH_Mvt*=Zb`(Wpfq&4Dq!B|jyLTJAea8O;jC4OLvjmnN7BWL? zo?w)-7`iOs!544R%sifWLBHD zZ5lPU#vDH1&7(KZca>OhHpd#njcG2&gG@PR-t%y2zPrP4BLbbr`FLYR+X~No(MxRO zR*joBh%?XP8g5PV=CSQFxHAvVQs!oO^2i#`a55l4_D2k})(zqsHH$ahA$$!pW8*YF zRphjBKg{d{=D+7NnOP~e+?j1tUSm)x-pG;Ew_(TDugD1NZ&Mk~h8V}0to=}t!SQ_k zu5l&t%XC17_jvm-Y%d-!8P$4dQ}3RJ zUk(NE@#X}D1KZRZaZr}Fj7~GNq|3iDkK9wY{P2g$^nFFMjmy973=z+Nc%{u7(T`#e z-)MW1Z_8Z%i)VZl)s{lm|H)Z&kT>4R88&NaiN$rR9Fkb`W+lZueP(}Snsrop{R&&_ zZQHhL+<%rsE&oWo8O*K4bj!@_EomVbZs{xzc7J%W8u`T?z1`S#lc}KG%YKt>&ECP_!JLy! z;$OgWOt2?Q>50;s_=hDUY%*gn3-IP&9NF&a6LFs`f9;}uQj8Ln)+@CyYw?m^%fR?w zq~R%}nduQTyN>LIe`{MOecqBfpnK|ov?Y9{vFuN1$b0!y8vY~GDT`hhDP59MwZSw? zqdKK$U}i1m%a*nLFHnf^w;t-bSUP%y*-pWb9$_0W@AZ-@*84& zE6;2_^i7(Qz29L!GqswZ@tG-wd)w~b?2ONPE3xxRMl3andwH%CGw~Az(=iM1yeww+ zv)&xcd@J)BW-{-R=es2m7G^H4#jmLCnE5f2YdL$@Y)-~!K(Uu_Z57}?bNq)Q%Ws56+Un8~%Yy#wS?u5Bguk#%{=3O90{BW#(8 zJGA$*U;o2lq0CyOusDZDbC1Qr^-ww__${*Roy1YVj_nVU6UANj!fJ zN*O+cv(XH0iM)14NtOe-DxEzMcuD116Bhtj7$WQ=8WFc26tKa-d5x+}p};??GmSy%CC?h#3YQ9=f>0_tairer*daWd-%U?cf+$Xh9 zcT+RvuN)f7#m9R_{yU7P1ln&=chSH|$C(#joc?0=Elo;%_F4VUUj5^(9hWY>eyLE> z@%yj8UgGsu?-n|`W5?MY>v|22$&w{1OU~?BbG2>zeA|XYmgcKo{Y>>u*Ao}7UcG#E zm#CNjK6NVT)DL?;%6sR|Z+GtJxSM~}s6R&C&~MF4N_sab{=^TCx88d7tp_*i4{q14 zL%a3SEAP48@3>3;6==G9_mSOi4)0TK@#2n)Hy$rrW9H1PGoz+wnYv=d2P=ja>2@k_ zUPoScouY|j#@rn9_tf7fRjc-8wfBDe$}^V+)V>o6tqHYn`u%%fe?8{w-#5PZ z{3oAO{N$Bu3zt-=u%p7@dEFbeY+0#guhH{LKYV!Z;fm*f?9r)HgH973+x%6LB5_65 zHYl@a#E6eaEc@X4r5ZK9tFh|Jkhd>heDC6zj$bcbwyepr>EFCqC>;JJ{Keycz1X5f zwH5jQ+xG0zx$9y(cOKXI&*J{&hYx2voa4x>lch_qEZt#7yRo@*m&)yWp>Wr& zTOV%yvF&RvpKqscz>_@=4;r*}&}(N;7oI%1!sPB79{*;~o)degFp zMK4r!m*%~F`|j=EvfYV3dNj|`#{$#7uUGG0y=$M1{UUqz!r4p3FAnI<*&bK)67j-UTnItYuD7Smn&}fPn=kNV&eNx z-KbLKSe40t_x+%E@3(r_zx7%7tXXqrRdYubT)+P9^|fj?pFMQwH$%6qJ^#a@L(zxw zpPcd86Hg>OacErS&zm=|)qI%e?U%m!rqMT37Hx^Yb?e5h{m=YS>8GDI{M549w`;p~ z8`|xBnGZgC3StfEGSWaZ>v0&D<7&n7;$y)^q)G08s%CjTB`YQRWpI3iaMb~TVDLbFJy?5^?dl!!FS@QVtLdQ$| z@cNaiRfARcTE5|K3pSr?}Ch?~J}X>-G$1^ubqClZfmKho=SY`%!umy-+%x5`yY23k+NmW zlr1r(8|@u9@cn@!&VBie%hkiRGoSBrbMG#nPtKpeW`0lgr(b>Uxv|gP>s{}cUcKh_s&V%~hcCYz@#Xau@7G?t zcG23>m0ORWH?P;c1Gg)+`{R%Oe=M$jqt~aOR{6B=@AFp_FFvPuwXH4GE?q`-xutE} zFlkbmNpYKt1cwd#YS@QsE__<6)`ePMeLw7Kt5)S(b?v#}u~%N{^U9HzcF!3(@~@G< zOb#!rSu<4g`!k-4)2HX2UU*9O1)qQ3`}5DX?R$LHs?Dn!ESYnfE_*=RTOUV!*4fUVQcI#ShjME9Na$cYCuZUV7>3 zOP_u{{NaWT^EOnf+j7x~6VIKf_xbp6OiXOd8y#L)IBQmpS$W^gHnB~c;%!*{OfAPhjFHY~+mHn4rcKtG_`xn!P3|Td# z)6ws09XL?qz>weOuFsY&Z?>WZay-?sW8;of3vK)^Ha1`Elg;0F<+ay-eC^!QhrV^| zmacogM%y>alv!J*^@O;7yLO%4wRP~I+#i4Z;>S(SFMGXx`V&bO6rXQavTdC54N^|e@TA7k^JmvL|F8%iV?|=XP zQ?8punl#DYBzL3ftu}6)x-nOY#;e|Z^Vv7+%rEeM;li%MzSvURfBbR9kKG!c+xggI zogeeJDYv?I?MtL7ng-wob7zLbndObL6i6NP;Vctm%ZPGk`1P< z88`RL{p(}2$FfbEPDd10vPUX^C3yrS;7dn=4V5#bJ>PD z+luBN9%LQG*djE;#++>_Sv5*4e%n1qzKws|Sbru-`+s_7d-!0H`1My zP0!xFIh8738P4cd>}0`^s{Mx_$}|2^;fo(*ZE%=*7CLiW=6ai%4cksC!v2b?Z6=4H zSyMB*LZ{|&&3LxrEw}BBZ;9J(jJS+-y^P_Bd5Uq)&HNmt?OvKvWFGBBu!ybPw0v52 zDQtZXvHaL|V>XP8WtPE?=eD#)Lfjeb?1qxrJhHK5wqx1Jc(FxhbL&w`(wrfVl;oab zW-nEzUt1C+%})MMU@hv)dba#OsD`zkDfian6>C-YIbljR;*e8Db2Bx_HZ3Jt*7iKI zRAwI$=1iaYE?rF)?Tmk4@hqIou`cUh)v}5vZOvW?7CU>*J7Uq=wq`xiSi&{eq0N_B z+WT^z)L|Z8G{^HZf%NRhn;XpzD~Fej|CvjD8ubuiV&2QjHt*j`9cHX;vqmYI;=f-# z2Xm6lXbNT-*{NnRSpL{(rOGNld~xEBr9@ezwF|(k-}DG=0U$@v(*9^hy5zVVFQJu{ zNRG2bykJ!9jKqvemP4C%K^UnrmbKGgAYhtB+$Xc{E=$!B1wb3oQaLwmuEZ0zo!-pp zNj8@7r7C2flnqypah#Yx+!-Gxk6afYOljELpi;(>cJwDXt(g8yo|4=>B^fz5G(I(j zbBpp+&ibjikh<38fBQ%_#vFr=U1r(N2a3XNmK z^7ndiYn+xa>{EyE+JYqhchA1EoS}~_kFYhQz)@L^T3?KCZFIXr0vD&>~ZADdFV`cBer#qdaP;)fnYK_ z64HeW{XqWw#Rq;kl_JIP&(vo~hwMfe+h6wo7}%-f+$;Cr|c8g30)ZvEi}XK`r)#`M#`8dv15?J#mptFqfNwPH9zW*8Hza=4*S%j8Qg z<=U8_J)+G^|1}oA8XNC_PDr)>%_;+nm6(XX!qR$;bY(7R%sWKvgQe9r<_#Gytjd#Z z7OK-|ux5c9J6IKz3~{Fk!1RCMN~eho$C4RhthBadxwY3C(S6LOoYv5A-9D8Ud-P3A zO=82(9s?|YX@3c{x@Y8s>w>`13ogcq_s!$IF6J7uZ$HTV;ppkn6j9?_g~u^ z=T40AER&mv|8<#Rq`fCrUb4xgK}v*%N_S(ht6kd|@a%a}npxFeL0m(QcfBqRD4=72NtQ5cG$^2s^ z*N6=xVRC#W?XZJ5vefqN8Q-BNdpZHkBKQ5Ytr_?Ij$v=_x9Ql~@70riuAJ{@+?%q` zz1#6g_}}3_{J`AH6m!}8x`dg}+G`Xu*?+o?nd~=7T%uHXfSHT^rWuBbx!3(VGiI`PE%6w6c`swx_0JS8&J>M&i5{s& z;!cgouf#V={PM0FJM5K&E&GV=wM(C1Kg8O#&}R`?L3DC5#=J(s6)$9ruxC7sM<)H~lQQCsP>TVbA2Xzr2-^ zEmK9V`y|Bk7;UUOM6Aged!lL2)}~xB7g+4)Y7xBhR6#KE+{^lm>@k|_P^L@~+47Hd zEMu&*{MgUZ)_8(EVWJ~;)(8~224k%snWv}C(a5y67Y>Xxu+ArIcGlY?tv5$v{DIWuITolmA2MmUj6Vv?>*MA*jKMqwW{b<9kr^9 zUd2(vFt6;WT2t;TRjXo{S8`M~+@*z=Jj~M_?2|PAFt<)2I&<9pxSNx~%w@P+kkQO=w0>6Qs;8h5mnE$(jQ;e-(1J#L zw(6&f_*;TmM4cJ^t7u9=CPyI)_V zLNQ~lR?!M6ZmcQ{OCHv{n4^+7b7OXi0o*b((k14R>H=qI^JuPmznHKmi*WD53qZxR7U$V5&rL#$*1Nlo8B*zEctP&Ta3{?R~O{$ zNPgx?)PtTqM#)=0M)8!*s_4+Hb3VlbwsPHwRs!G;M=Or6q7@y&!W}4*O9?!dOVJ+B zrMSS?JE!7D_ZQ`9ePd2VgTU|6O7MKN;!D8pr)Wie0{4Ft4tNXZRMdyjiW9Ryww#JL zDyO19nM?8J#s5>duOP;Vg>dx2%f$77aFU7R7ZZtD3L{~N>|k3N%l$3-hzM{}m>tb<+`O5q3mAW9u!>e|>GigR2J z#Zx+m;@w4Ayp}`paV^SC9HBRf&qX|h;cb*d(PMGjjJUDWh)*wx<#a+|9_Tf*IvjX;{GuSe>5+uGbICav7y{9>LTsz2HU_&-V-eIUcQ(aGm?~*?tj2ClHYI$QFh^r{Gg@)4C12px$S3$-Apb9t|I|E+9~{Hc!8sz2 z;)>3ygo?rw@RZpmJOybVIkPH`Tv-(-ctI)5ecr5!3*GZfRweu_?dW-~!BK?v^%(xK z*Ya@>3Sm0Yo%ypXYVPcc54_-t$*zR*WLLuZvMbsX*{KWeKZ{br2ci_$X|oK}Ls5!$ znfefpQa2~KKN6(`xmK^>4uWTB3*S(`XVJfe6-@U zmy|q;MjCvC>Hd+nFpIVw9j$nV$SRql1p1JM3%L}>72KYu%)kc$?!#BnFLM7g<@pQO zFGMS$BGLybbI_kAtladGJeY%$m%b}z&k{a_cyqfq2DgPU&j#4k9&39jy#mm^#V zfnI~~zzco|fl?EHpg|Znnj1d@um^n>ZY2!x6vuBR{6H9#%4Xcbe)s`r0`Y+xJaSzh zzxeT$z`j3z;87~nJgX9D3iW6|Tsub4o>FLk5QI<%2CI(9HE=>8Pi`d)j@xG6_y11a zXD5!k)IYlZ2X*)-*Pz{}&cOKq6x?JXJ&kiIAx|zvZGzl{U@fj+La#$x;MxZP@Ylt> z9`}vVTVn>kwzQF#(Lo=Ho1VE8XRlm}yLT=n%zXgeN1M_UumiOncB6=oYfm5I>&yKZ z+@c3@=kJFdI6C9DKW-ohfdRM~hdduhnv!sb9s(ckoP*FoNyLrtDr3oD!oXb!U6uIX z&7=6h4?zflvOJHXfVNh1kXTSk2@W6jcsUOqFK-q(=hrkK? z*C+JLebnVC#?^0-IYH#e8QQ_OSrzqjuA>>#@?=pw-_uS|;fctHNyuLp@}d*6VKOqk zYn0*yWhwFkLVjcnC|i*spmoPRxO$^+!_O;RCm^qT6GsAZ^d#)*SruO|WLyjLI@r>T z&qrTy&!b(>r`#4$9t$Zi2ri51)dmyjQ^Tg`o6(kSkU%LDpf#Q7ET8VHx8PnRc;704IpRf!Y) z5Cr!o(pZf&b;qtJc0Z902!YC9Q?*5eiSD7yyr8thFM1Hdpxz`d&@c~FAwE#v!|is$ z`5X6HnJYjj2Yq27WsoyB^+{QhE?vN{DBmC0`6!Ez$TMbM;`C9k0SGN1E>Q5Nf(8x< z;w}v8E$+buq4~(g6@;~$FwlK+y@xQ-!w_0YIIFPJax3n}w1NKQXE5nLM>rw!3PA{i z^GDJHN`BIgAGi3UyxiP-_Y(GF)Hm(oU#Y-7!n{s6;D!J=qzyhoxlSW9_mhs#sEeoZ zBOJ}5IM*{r`IJ6+D2ozg4&ocbeB^KzCCo#Te-m|kMpkGTn>Ldd;akQO^dN*m|AW4? z1#|F&`#I79;jFCQ9FJn0q&`67+6^vbzXx1LXbZ@q0E9#)twc_N6WpMK4+5eWAPi8u zl9tZIjl2lS>RSwB2-iC09Hh^B>94LPgxj8a1t0bS(CK6D`lJ<{rwOAn`I0sXA?%fc zv>)6nv{x@}M&sTIq8y(h$KEz&hdv*fvI3cQgSo~$%-@1rywhVLW8He#$lPi(W8hWn zudz;d9roaNCNc^1Fyg__c({%6kuaS*2yYkecVl+~83{h{tfcRP_z8O%JKx9chs@LV zndy*pg+C<^-!VrxOrHIey;VkH%ni2T4z%ZKquH`6y3_}G)WOGf z2)xvbACwc63+1k?qE5gGZqOkBAy8Ih2kt_I0fBCWFCf3QB9tF^xb{#VDrM@YZk$aC zJB~C!2z!P09iVP})Js6>hc@G*f4is`4`|ps1@S}O_zB0&y)H0*xG%$XI8XUqMfTsI z4!{qA4U9t@nO}kj0&=~HacK)W_#gz{&0PDrhJakJKl-~^C`hP|F za?)pV5&jR<2{=pBo*-NyW7*qbdIRM50B)rZ(l*@Sq#b!nG9Hv>EC9U>I7?eIhoG9Cnx_a5YjC~YOrrup(JF0hrGa&%uKP2&kq+Rt^;c!NF@ zrq4k5Cgp3ay4gNxj~|kk{n%5c>T$Eo(ry3!mE!@=)}Vl2u6cG=XVX@=cJcflCay5^ zPi;H%Tkw2JIebQWfO3%jLfWElC@<;lc76mLV>Q|kx{mH!%`^HM+TS{}pK2SC zpSV{yVg4573_3Wxlp(qw!ZWBlaIrR`f({Be8P@|cwlnsJWuAr}l(`zZN}CCyJFGr0 z<@A5M(kMUOL77%X?xQQ*JJAE&t8)K8>fe@tcNXmkl$o?E+Lub(a-j$7p)Y`Wv^((6 zryX+d=Q=FcV#a+4T}2O|2hmmR9Oz;0J?OfaW9F87!gPSMK7P@|;6`qQS&!5TF`lws z=`YCKgt5`{J#(?2n1j)`0z9Mtr&M4g@vlQhfqw((=ibM4kZT=X*+e?gT@c31jhy}; z_5W`Pgcwt`wzRos)ERRb$9l$%_SDmF$jNogN7gV8S^Ma@(|Ux?1kZ$^&f(dK`(R$4#o2dpj!d6d{P$A-|DG@H5b2ZW81^T<%(?&5 z%9l!*e=-06j5sz@{+lT8xy*{Dg1Zp+I&(yCs?1jyyTK3c&4ibSHI1CiZAbGwo0qjFsVnBb z?scp&uwLh3JxG*;wN6pNU-0_@b&YZ-;r~g@ z21ut`f^-kI(sv_T(PPrnEpCJCA9z^{4Y98jU>(QH`mmp{oUEaUa(+l&t#tvp_YtpF znY1UF_9}ZGKGp`@Bgg~h9`fNQePOGt#E+;TWfI^y$5Wi}cG2%B2aRV2QBKP0QOfl+ z>A6H6!)E%`Pncu#yd=s;TGbT7Tu;2jElQO#DMnuKCuJk?h;mSNp_aI(ZoO80s2^En zLivO~AP)A{B9%kZ=fO_O6gglkPbD)heHUw(#G_Ehs-&SJ?sv*OfHov$j5~>6(h;CO zLRS6xta|q2Pai>@v4#-Bk1lapb!o@txJX;2yhM3uGtwVLc_Z4MPS`r@I9|#y^h|m> z4Tt0`acOy^rvJbwi-ze3+Xhc0}@a};{$Y1URsuvW$VFwC{% zab)rf=*3w7;W~)y4kE)Hj00{-6VK9Kbms`#FE|Ka9mzP5N}X{ZDnxq&Ls1q!#*6@j z7#qSZh@Y}jyU;doQ!XIu?cP7A3;L++*Lcy@-;jgsx5zrYj+ur#S(}$Nd2fKVkFty% z5SG5mT8Q%##+4iNJqWJD4Bc^;dP7#~$WK3JvcD9@%z>F-!Y91{r1BnO-Cxc)Y~cBO z6Kg5xA)YyXFOnwC6KJ$kA7!kte(fAW9+5RJ))3VL$aeA|D#%)w&YGzvW;c=F;Jc0v zqP({V{|0Mi^d;|a?CXWGzlwgF=TeaMUjJXnn=9tEXN=iagXr$DT%!j@nP#DsJnT&{ zwsG$p&9gPS7qbw0knvdOJb^QwbXjp53HU$sN2~b1H#hxX%~qKGzW=Y4gE)OfXxjzy zDbADpbO`a?IC2{r?MW&xOkg!)5CKk^91EAvhO)$)w8UHfJ10Xc=ZXV zE^QuN&M)Zw=m+%w0JxC_9^Cn9TYfj~T<#fv!pQz0`=GuD^b7EF@5DUFUZD3Q@^U`o zm?ZgeBToXz0crQ5JoG`i4x>9*pLA7XU5b<0{)*{qm7Xf*wd?70Gxt;Ur_!ujF{Xx| zVLZl9CGG+xIV-4zY%qkNW<#gbt6jU?K!ua!AYo#jJ zNjb74VkJ&15h>~&ETbDCLxbsUMDIYiMvEiHaS;iQ>CVpyQ z*O9cc-xYK+|I?|Pc7)f7@L4l;aOOdu!98(1>e8kdd&0PP|3o?W=eiqmm$azO$v^XW zR}<=|I%V1)_k}3$uB4?s@x079z%}m=Q^IqJGZ$kj>t4R$_!T#`a8p0K;^{#+Cm2T< z^Cdt2wdDUedj#A&$I#B!5MMm;H>D17=Oq466!QEP(m0Fj&9tRe%%vugHp*X{Nxq0n zolW@ob;w%nX!I_)UrpS^&zXDH8YmCk1#%!y$79|Zzaxl;y%;&8q{WdI2l1s6PJngO z^Ncf;flA(;l!vn!b8FHQU=2`x8~?KY*qHKsnQ*Qlk6CXCP}Umf)qKch*EsqX>2V)s z{9i@>S+n*%N18}iun7Hxa&%Mn+H}%NIvtdYCP;vIaCAEO51UlC0@=^g`^%8V=w9KfcX%fHP99OXqZX=3C-bJ)}(GR4)Ht@_A$;-27G6j^A*{ZAo&VR!Vlw+ zQ{osx-BAZ#(yJ0zpgVC8rcOEfQ;7$8=evp=O2!R#nuJez_&XybShrTzBZr9JOZy9w zpCIkkA#=jHyAge|7JY*CJpBsgf?RTv zCjAIwKkh=zg|)eaIS+sR@IxAX$fXc{KTMvbFM4P@8vW2g+YfW?r<}t1*caNz`M^#& z6*p}nK)(2oj}lmbU&=B}ow(@39^ATP>C?3-C+58l@~PFL+;HQht~|I2(+@qI?{hF` z)QQ7KxNh34llB=TJ|F4ulp~GJX-iG$Ta<~5`Js#XTbMj}DU%Ro?+L`}jvrU=?{7Mc)v4L>qHSK6?^|ge7iX;yIkM4zr)G5|8Uw;oP31mr2YGlaWaPv;7*~>d&sYU9kMEsv{WZ; zv?)Jj?x#bcb+?DTYy3J#lm2fR*J_a` z>5r7BPMTEW^O8os$)Wf~R?u%;L&+EQ;iN8HuM!4j%=;)6Z5PiO#N(GV#NcNPdQI{| z+tINPAh-O4?WAwGX{-L>b!3AB_ukd?8{!Efm%_9QKQb~%IzqsA;T07-r2;aI zupBPtRn)ViBkhDX=cqw^pfqGH<{SDfeuAV!r~Dk!M#*E4@LYpQ5A_o!FJ8uNzqliR zA^M({iaqHQC4JOUlRPojxLLb#N!-=h^TjRSBxint9G5;RVN$NnR#}j%jH|>M#%-t? z;d8B09zM!enLz$YcW63(8LxEYyo2`Sr7arq5mpG<7NpFbgyW$d2ap>s+-UTbFtS6& z4xgBDhSyIWI_M)F@~e^_7wJ%n5eNAY<)PjJq{Btsc%*LVGa;TWoU|29+LW{l7xPo{ z?+){9M%Yg3DMb4XPa|D~r;j3B+KWFsWh~_)W2lTz1CST>fP8u95jJ+Amb821LXh}f zxbx+}A8ppdvsZvJ(*QesuDy(+3>V9tbZ;`37X{Cr^ID2$9DyWy60D6)*AY(yl2p$8hS2bJRh?3{$2~ z>d14AxjOAV+$xLWEk%6f!9y5fp40u!C@;!Y&(8WH`SeM=jNJh*a*cBw?(*2l`bG_8 z3HJ(TI$duut}?c$yBS;G#tr6ynaov~i%R=c@hfAzD49RYd5};e^1$Ab;{tPhbmb)d z4BRV72iVHX+0kGL@;Q$<^7Fh58i>-#Zh8 z+DTk4o?}FLWNv{9EM`tfxVF-*^cwfLw^guQ`n8xjEdRE>t@|x^F2eCegzL284Xq}v zJpYJNIZN~?<<9-+b0D5G$ilCgm!tc^3l2~~11Gq_m(5&X&<0S3pnxj6rSvzEkKme33GnN*d)^%}RS{Bl722bIrnodt3QfpA64n>{v%V z;NIszj(}dtOq=o?<*AXEt>lw3(+e|K#m=$8OrJXu`Qu1WPhbP>o^i~3i!cjPf2^ze zINRm>-3pJ0{S{~jl&yz2RniosT!VRerY5Z+r$@ zql{JZ>mYtxh43%sV5=a0b*Ofye9>CtH~ zz5%#L4tXQu5WjBXx0U)AeV_gvcse~?!wt{De!C1Y2$EM(I&%SA`EFQpN8}&Mn?!x_ z{1{@*)tA6LBpLZZo^<4fVIM=;Zy-ICuP6uW`J!~$55Q08N!k%}vVawDs4RIvPHI+L zG8~J0c}8xQUT3zs=+0u4$yU~D=ue`;t7ucW*Le@`iWO14VH`-GnbWK zXBqlG@kT0*wcpS(!iy+dH)#|Vs-E8Nob)qM;m0UPtIx{4tk>8oO#60|S5eL@kBqceF>v>SHo4$^Qji)VmggKh^{sHOz8xS+YZ? zOnmI$c!rtz32>Imtx>l0M^SoBGwpgM`VsRCg>;1IC!!p*Q9pf6R0tU+%1>OOGNki4 z(k10ixu}$-8=0VzCl~!L$Xwga^Ft8X=#zRH$h-h~>7<`KrqeE{Gq+W~PV%B*?xapd zX~;e&?bB8c(qk)i3x3IqPCcpAtG8X05_pd~q_3#$sAFWTtwP9=@JXmknnXSz8$FUg zlyR<|bbHEk28#Bp($9nRUoU0oCLJED?6hmlw6lMx$>M^riLhKKOnIrnv&~`|##+lAA{n~5QRhV+{(my>SC#geGF2)$`CUe7S z**VWgnNueLk#91NAXofSchr%)Hf2hg=&boWc(XzX-6>}13c3b9*$@Pnw}OwR2-#`r&#{|TUnFb~#cUIZaf>LHs!0|&Uk32yL!4qots4+0Q`5a_R@ zw~@#`tSrDiaw<(ltf7bJr?(GhAv2AUX0{)D4rt$tE@f^j=MvHjq2dwo*p}#$9u@mY zC4JRaY5~e5LhhuQN2Jv@vvnCGl!!3xF-ZPf5~;KZH@3MkpG9ViObsYXMttRnW#rsan5$vWlcVwx8F$=ktjB50LG<3t zmADQJ;Mrjy?UHLx8Tw;c#x`)%KD-dV$Gqtt^-uXY%9;ID)+WQa@pq*S7h)~yFXVqr z9>rIZ`{$Uq=f+Hh!t?_%*O*7+&i^=Ov{V1z^tbHHv7W}RA$x?_>zH}VVTXGcZiDDb zW7;%?9+2K=2)8o*p)BT)VV|F{dSO=to+KXPc9teA>|7FW9AR-S%1c;|g4k6d40Jzf z^O43N_X=s3`VgF?$?+^{DL~qA7bG2C!tysK4srJcI_Y;;!;ZYW2uI`E`w%+V+|2F@pmAa8<(roz@Eh-=XtzoZ= zy>=htg_fQBy*%q>WsJCmJl;*)IEXxakLO+FhD*uEc#8QR>hK3C?|e$&2c8KJ(3kci zPe&k&4x{fO{H(n5f-%qQ$6tWwkR!;<6UfnhQWyDHU!rYqpudq8S9YFD>d+TIrVsu| z{I!Y0XqUL#PZ%E)el+`Cq{(p&`yh2Xinu;S{^l^}tv>SM{f&77&*7mgyc>c4j=9G( zmpMoJjv^0egAUwki&YZ&ohTg+8va;YX^C` zNBNURl{(RhUuQkd&HrC~f0N#}ge7Uf&PRE8KgJE^5T1jKC5=Jq#s3;}n;#il2t(^e zIo~BM)SHYQ0oLfk0qQ>*f7>XVW3-RYsMlQPc<08CzMgzsrX5gjVd9Z;aZ~;(Wvo9W zJ>)k;+FjU%XoHGyf^sAMLCQ_3hm4kTdx1I4LE_!W{E0T!ej~lR z4$oD|lpF0Qj9(cm!Y4@&ZB_E>A}lZaX^!g5Kcx;SQxE?wbcm6&%e~5Y;-TK$v=I$IVHy8KmQV*_={NOhEBv=y`hbR?FtSBtxZ?-PmU5B#YzTLf z&M@`hpg#nq&rug4@)4w+NPb<&G3_3Gn)1>p*D!0L3iNy7X;j z%p*LFKI#6M^pIyAJ88G>{e(4|_DvWe{E3<5)yW!z|9j%yflm2)22lo_UGo1%y@$gU=?8~2cAKVgMPqZ&mz z*s~2X9ys=q&Z}m5$$Z#FU4=g(Zu9_U;iC@y_wn-%ee5b}#7v{UL&tcoE6Q^R^EGdO z?5P7kbKf8YKwCu{0oP;HG4n>(Ji;kXyKKffZxiNlZIRbb=7$X-4ztGGH)l>*k2&JY z+(WoF&mN%g%&630y%+Qt`dKdeTw&V$bKnMhUp{0J*A8?q z{+#G8o(g{aK1Ek&Rqj`40Oq9E$xwfcvG4EZN`_}PH#af6c z6@M<=cv%+|<+avOeZ=9&Nn5Z~&f0&bEhvv#zdVU!_d>*;_!*UlD%K{z3< z_5PG?zidjtO;{bx=bBJw?0XPbycw2Og*s#o=Pyc|K^Ns@Z!R#2GRaH3WN+Frndd<6 zz2M;dpr3nZK69KE_kPxu{rSj?`fuh&JSV$ZQ}go97bj;7)oke8yB*AJI2)#*hosFd zL;hAo7BL=p(8FDjPhGj^Tu+GoR|osUUd;Vshq;e6f$$dE9cc~IHl=?_{|zCl+{{J& zn7I;Yi;^dvFGBt3L!eT>+DOWPJo$&yKBX@tA{$ifxt6}+9YT2wX8uau${b9~O*_Ec zJqS5OdR_Pp*PvZV7*|X;hJ3-FmwNXgYt)*QNfP&znF@}4#6y@0;RH#akFY#LDNp2= zQUG~BnDtYMvjFapt&$fN-P@eJvL@%@`CZ}p(utY$LEj3-Wa9DhZ0_Va&fS!HVaz$l zJFD(OzV0zfF{lAep(_l6u`ml3!v^>e4#HXZ8UBR)Jz|t+pbS)pR?rhh!E{&yyWk7> z1^$M|Ux`u5LS1ly8&cs-SOR`H0B7L}M8(G_&p|DC83w{+SPFaLG+c#jZo-DrPzPGW zE8v0g@D?nG_uw=53eH0qvh|En3d4&~1zJOI7zJKf1-syL2*DqauNUP8bs!FU!5EkY zt6?vkhA`yp9iu!C)u1VKg&{Bz=D6*Nb8r`O^~Wugfx6HJ`ob8P3Cm$81mPFB54i?VW>6nmL1##S!7v`) zhUKsYcEMrz7OuiykY`|w@-$R{`rv|i7!0q07goSl2tW|d!7a!(i1q*_;U#DVJ)l2~ zgz2yhHo|T=0%zd@+=PdqCeogu8Z?Ej&=gzNApzOxCsxTu!p#zHnf0vNP@926IQ_cuosTQ8Mp{{Ap21I6FdPWpei(i zI7onDFb<}|Tv!F$VGkUHQ*a*cfHI8t?m=OA4$46_s0U3U4qkyo7z2}F7A%C7uoXUn zBXAC`!$ZiMOn6WZ>Ow2%3d!&$EQ0m$5$uPP@ICwj_n}}4au4c2J4l4rU@okJUGNoL zfrpSQmHGq?%0Uf?g?8`?B*7S%28&?}?1L}hC%6mI!()`Epfa?E9xxOpzAHfm$ z7Oud3C^&+)3soT&;vf;m!(vztn_&lh0>|Jqgy1s#0a-`JCCqKLI>ypgJ1+qfyMA11mFmK1?S-!JcL}M2?xqR zEOdbZFb1Z=0$2mPAqd~XO^6;tnZUD98frrma6u>N4Fh2`Ooc_T9(KZhI0+%R0=GdK zOW8m%Cu#^6nGmJf)6&rb~pmx!$r6TcOdIH!i1-xBD@4mpdIvp0gwvg zVFoOPt*{qP!gp{39zgV~v^%H)ZNUvgU@Xjq<**4pg#B<5F2G&L^BQsh>O&Vuff=wC z0&ouQKwh16!pkrSCc`Q?02d%?e2h{GnnNPYfK6}=u0p;EjE&F+hQL&K7e0ie@Dn_M z$0yQ`p&fX@3oBtKoPpa=a1!~2@(>Gd7ztBgHf(@h@C96ehmdD7G6r6NiclX~f*VGI z7nZ|z2*43I4|gHw6xtG0gu2iH5?~lifCaDx0&p14!VSptI%5(vg03(erot)+z*)Em zw;|6Pv{h&dec)AC0^8suT!ox(#wdlL1XP6v&;j~^2S&qmSOjZeE1ZOL5C&x`2MmSrun^Y59tgq(_#JXgr{6*aXac=qB+P}a za2&pe-yqivWFAz4*3cVXgSTNd?0_I#f`{VWgNSFbB2*Op!^EP2Y zEcAfkFdbIF7T5!);5_^W(X%NBC=GR>BMb*G_~B#t8h(L4Am7^O&X5AL!4JpaBK!tX^QbSV2u+~}B*QdV0$bq|I15+c56Cs2^g>y1LJQ~w z{b3}`fEBP4PQuUd8)R8Pn}VmH6jXsm@G|s*6qp2Fco+Pz559nla1*jG#6MJkh7bpR zU>J;pDKH;a!)`bLU&0m0zKAk`;!q7*LRT09sW1^1!dmzM_QE0f3NFC!kY_RS04hTx zXa~Ju1Wbjcuo-s4QTP$A!Jm+03GEUzC<|4gG4z0uFbkH!cGwL^;VU=~e?YExVw9rr zJUE~h#6nx>0fRvYFD!*Eun$hbk8lf=rO0D=0m?!(s0SUOFT4sfU>U51ZLkv#!x^{% z$}+|;C;^qg39aE37!I$)JMcby2B+Z?Wc4A#pghDvSMb1eSP9$UV>k)l!*zHFkH1Ub z04H>TK`<6xhq8c1Jnf<^nn!c!b;c*``{Ryg-VQg%;2Y zM!{RK3UJm<2v~5B9+kI1QKK z0Tf=1A8a29@nyO4JcZ3C)9Q|JsyFc~((Zukn$!)?g9mi_=Qf&=P8 zOGtr*um^$=f_so}9qk6HK|^Q@y&wf%hefa-EnO4|2Xoxj|{D3C*E9427xi4!j3P;5^)iLfZ)+8iN}q!n?2wzJ|;27ZiP;aG?gc zU?{u=JK+dig!@qN1Ii5QLL4N*L|6!0;V4{$=nt8LLuF_TU0?u=h8eIFw!<+v3)dj~ z4*D|GfX2`jl3+3{g3YiW&cJnu`Uv;nfX2`jJn%X!hWFqQd=IxE=T639s0OW|7mR>u zunazg<8TpvhwQs3Z>S7SARflS3|I==;4}CVu0qb;xQ9v*3*DeUjDcye1UAAa@D1F6 zs6CA5P!Z}uXBYyL!3W#n5PT0eA>UqP2GoW)=m(?WZP*M4;UXye2p6hAbLa*sFd3G> zRyYW!;RfUguvP)jLnVlX_Rt50!xWeYtKb7T2;agLcnIppw09^A^`JGxLo!T(`LGE- zfm3iEZbH^iXroXPYCsF<4oNTt=D|AH1t;JKxC&YJGtNM1r~$2@3k-zeFaf;q4)`Ge zU%^GV1z8S|W+(wQp$){tP?!eGVK)TfXUO&`^9ZO2ji4utfmyH$cEBmP3OPQb9Y7_B zg-$R8#={)g2nXOaT!W~ClpR!o*3cJ*!|N~?mcvf?0xrOxP~Z^#3#vkM=mp8}CM<=G zuoI5M4-kgzhbc2C4Gp0iB*Sc223z0&d<~c3FHny#_k-FH2ZLY&EP?moB>W72!;?qJ zGqi*Rm<;d29ykK$;3nieMp;5NXbB0B3a`Tw*bD(U4Hw`pWIs+jffu1BxL`1hfj3|t ztcH)^5PS{4K$a8qc_zUJ*s4cLagsfTP?2 zcXVXAvRB|5SEv?x5flWaND~!MQIVq90YODT5e1}+QbkZfEC}lFHEEmdE}!r3kLQD( zcP5j`WHRZ;On3p-z$W+xj=}{9?!dSR_d*ls0KK6QM!+ms3G3l2I0_el`wHg*a5pr7 z6zBm1p%{k4IG77>z^8B!&Oy>n^aZF3sSt)rm;#GnEo_G$;7^dgM!Q1|Xaen^I}Cuq zFajpROjraf-~;#)zK7p{`v&I~P#qdWD)fOusDiQZ1k8ek@G7i_U2p<^17;WcB-{*l zLrrJ`t)VM~VK9t<3Gg(`gO}hf*aF|dS@;`--RP@uH#CBl&>p(O!%zSfFb3wqO86AM zg2QkQm_67IPz@SE2grp-U>YohH(@&*gNq=2i}QV`292OCbcYC(!AO_{vtR{mguQSE z{snz6#!#pYEukA^LnS-`i(n0W0=wY^Tm)es+74<#OGt--PzsO3ELaNfz~`_RPQl+G z>_?x0yP!JMg=WwJGN2b^!5|n8<6tt(f`#x3Y=Av*8vXE@tVGb;Zk6;_@ zgEMd$#KV{$?twfoR2<@RSl)$4f6JCLhuoupQ_#>{1paFD%-jENE z!ZcU{@4*f@1s6d)jr|jvLN|y&6-um$$QDfkn_pD-@N1JD|JKsHpuM0gQa!)Dk6 z$KfxK&R{w40JMg57yyG|1dN9TuogDKS8y24z+VtJi}N_B1`Qz@dO$7=g9$JbmcUB* z0Jgzl_#Nb*G5$eaXbGJm7s_E2Oor!R6?_7F;a5od1^Xa0g$~dQDq%d#g_ZCL?1PhV z5%ga%WOeQhf*~*!UV+bGFPw$I1>}Xg&9GSVF|2)k6|~QfWJWf2YmyYK^hE%3YZBiVJn<~%W&<#IIn_-AQSRnC`^Jy@E+`d z<8TR#|4<)j1ASox%!D^#D;$Okz)%KtE!2i&7yzX(6&AwF@Gg7~d*Mg;6RxHW>Q<-; zO&}S1!XTIkOJE&rg>T>xoCTIK@ZUli)P2w#Izs^rgRw9d-hj=p6HdTyAh8B@7c_@7 z=nsQnBs>B0VKsaPhu|z+0)az4p$;TNKNtd&VLq&cjj#)T11(@swV)Mrg)AtBp)dxX zf;q4ZR>20?4aeYTppp#g8n^@QhgQ%7vS0{|fmyH^R>J%61?+=E@FV;V|A87r-Ju>N zLl4Mo}V922Egf`G0 zM!{To3%0}e@CRHa7*s>ZgbJ7jFT#7U8Fs>PxCoMHP`5!NXa_x@0EWOccov?A6|e;k z!JoiO26Z#s2hE^8^n(H@f+6q-OoV4)3A_w%!A95td*CSi0+eh}3S0wsLM?a@lA$Z~ zhhi876W}RW0Lx(=d`QP5+z-v6GvvTXm2EijR3Fg3yunskR5%XaKFD4-AIUFbx*L+prCe!e!8}H>kUz33P&77!K26F|378 z;4qvA`35WlIzTpzgz2yXHo|_m0OE}XbvrbG&d?vqVJa+#4`C1d3c;JOk3b#h00UqM zjEC9q2CRo~;5+yY=$la&xDl#BL+A_xp#mnu0(c!hhCOf+egXOxv_0GlEub6ZK?#h9 z=in7s58uFXxCFwj7?+?fJOn*pFgymc;1&1?zJm)8x()fE0i?npcpRRA`S1#?g{`m; zPQvdHxE=c>+zBWu`nB!!dtKzzJ(L; zCrEc1)GbgK+QP$74AWpCtby(DJ^TfsyRhFv9Y}^AFc?O|OjrgVz&1DtzrepB-;Hez zHQ_<%2z{UsM!^hN2Akjr`~zAw^igO5y7Z?CVFczMMrLX}G z!0({eLSKZs&=NYs04RYmFb9^xde{$t!!@;WOoJBC39_LA#=&#&3cL%S!x1zom;$fCr*Iqsjj(N@DP%%1JPFI-6F34?W1N>lW9SHlFcucTTKED^0o?>+ zEi{BQD1AHp^`04L#B zz=ws@ZO{N(LQfb3BVh`>1Rudc_!F*ejeQ>4LSM*-Q7|1|hWBARd=KY9YJ=koG=+2s zLkUcQrSKkn1*hRWFv%FVpa!&rZqOHs;4yd(*1;|~2S!`;e`pIiFbQ6QmGB{a2?ya9 zpi__^szX!g4E>=TCc`{<5mvz`upfSfU^}b>G>25^3xnYim<;n^9c+Ok@E2(9(chst zbb@Rc0n=d-yb0@JH~a)i9dJ$vcSB1^gFF}w3*c?o3g5$JxHc902=s(u@DwbA58xX( z4gbLn9nmkKGZesBmNxL)ZrwK=nDBT6rO;W z;2qco-@`?ayJ0&*9cT;PAPf~S4ranKcn7|Oqi_M(?%1wyFEoHQ&=qo^5+=ZN@CJMU zU&43rD^MAj7w(5PkO2{R1g63wcoR0l9ykRTA(V+@4%CDe&>IHBqc9y7!W*y=cEWME z09+3oL*X813Z0-I6vJ4U4X?n5unqRX3HSr(o*28K8Z?3S&;!Cy24i6^tbotpAe;rZ z7xodj4;n!lMBq`F2W#PD*a64k0t9!8-U7j=?YRFGziHt^oH!W9SHdp#;Xj444Nm!#l7I_QGlS2gH7u zA8J5z=mZ0x97e-4@B*xc^{^9ufb+oi$9@L4Kn-XFT_6WW!qf0FtcN{t7A}GDFt#T& zhW5}4a$qP-h6V6CY=*t?6I=#u0JaIVf(*!oau^G9VFhf4{csZg0x^vJ5voHg=mrsZ z1ZKcuco)8aqi_k-fv6wUgB0ikc~A+HVJ<9(_u&gT3V%T;3vCJaLkmcSUJ!xdFa@52 zm9PnR!cn*Yfo$}1xF1?UFDQVK@H9LRYv2>u13$q(pyXhjg1XQex5XwcnKn-XPX)qAVU@Xjm74Q*!4M*T-xCCMZV*uO(&7cePhe1#Y6JQR!4jbSg z`~*}U_D84=4?!2mhEkXc%itr}4d+10$M^=VpdS>%P?!eu;SJahhu{?a34sEf3qy5i z3hki}l)`v;7G8yqU@IJkb3hg1dI_pQZDD)fOo7!Ffl9=r!FJdO$KWjd z1AGbgZ@3j|KojTy84!lSFcikYbXWnO!2vh}Oeyw1xB;p|EocO-Ar&%UAml>@jD#`p zBs>cX;5B#)K7=i>6ZXMLxCBxe>Ia_(KN7|VuTrz68Pb>12hw!uJMmXxuXsUuN}{DZ zq#a^!wU4@Ad`iEKzl&=j_TXO%ZVW!i9|_*g@%#_M^k9l~I`|g%smStcxpmy{!Z>|A zR}s8Z=)zCnCUTRwGodZQEuzLR5h(uEU~9f5{z_Pu*d5=7^VBfDi!_1{;s0$NEQz@1 z`9iQc|6Nd*y77MopVm{feC=s%l{QTug;x;;{c|l_udY8CJR_V6hNPOJAV^ew?J;q< zwwXT~tikufx7c54H}VRlQrGb(g1vZ+!jq@aqao~@>bBr7!R5gzp+&)~sCmI8A;b@m zUeyi>V~r)j=Y+Mv$=oq+ojy?Nq+dCxX%jf0W@OA$k)Q{q2 zvA+0c=o?|0*j73g`a^6f3=r-Uua$n1!_q_2E!tY4rI9Y|6=noG@^?~axVxy4q0{31 z;>Ysc)M@TVt{QbzC=0$SE)=g7u9kk{?xFq*UJyRzPjRh;liU=pP<(=`PTfoGXYZqG zQ1??csRyVmsUCH=R;YK@dg5E09->-Nt*JItTk2}Hg<6ffhigZ*r#eunR7a{4HQ#teYCttr z&naD~G_8rYR8ONq!E}n2yHee#?o^*(2DKoR5$qLwj-SVO3-$|N>MfxsLQ_LU z)OL2VJY3nuPE$nr3znC^VY|!kDo<%&vK#nf>SMlyE5S2_r{&+}@8tL7Jh`8Il_D#* z%aXEASt3`H+bX@~w(>Xf0ePf6RnFu}sZy?t8bY0w3b}l)fE&bJP%ldd)N-nV8lY8C z!>AwGq0}AR;?Qtv1T~TxMYT~Mp-!=nQpMb3)Z^4~b~H7H8cU6%9#w9UpOR}Tj66y? z!i}dYsdn51Y9jT9yq=$+d@N3)CR0S<~)cTSig2E|Ho7Ii2040VEimeS=*a+T6Vxm9^Um`%;0=2G*h=cteP{h|5PlF$M? z7h6Ovrs^r*anDmrs28Y{?Cav&+>6vE<|RD0T1qXWmQ%~5m+^N9-q&8i(}-84cjSe} zckB`N5PO(C$bQcrV3&$t1eOci1CkLk1Vc15LpNkYF;rueI$E8n*3q9+Us5Nl2Nm71e2P+wFl)s<>p<88H6ZJ=*dKUW`BpH!b#$EuI3AE_U! z6V)kdv0BeqsE$*YszcOA)cNWQ>T2~U8xJ^$o2;eOG-)%~d~Cr>aBM;p!lDt~yN}tgcWyaP7Ha+;DCLHc-W^HO8&RUB>OkJ;ql3YkjAF zzp!05j4$=i^)31i{Y~lY7zlE1sg;iON-NNbYJCea( z#a_)`!(Pi?$6n9gz~0E-#NN!_!rsc>#@^1}!A_7SO4ZpgpUvOP-pAHp?`Iz~vVxyc zA1Yg@QO4)gR%#nHTIpt}OKlrwr+Cyy) z<^~r8zr}Opebf%42dHxm50{^inp;Yvskty~=aSOl6|dQSK#=P`WACDv!tuL+*Z6v zdP&(Uv%+@yMd5a3sk~IVsNXBkP#%^K$$!Y#DRboJay8{wJykv?rzzLV56BCZh}>Q- zm%A!|>+9sPa+Y#R?<0RE9}T6*hsDX_M)4o9LM{{c3!Rky;%X&bY%F{w+$Y^7D&k;K z7wXB~l|o4oZjj=><*2QJ_wB$KNa2#Wr)eb>!D9V zD?{Ig#wkxI?}gq8Whk43_2Q9GmasRpF7$b*ncPL$9$Fd-O79Dd@Sjj!42ds=-VY5B zzX`1hy%oxlP6}&7pM@G}_iOj+ziUmk4*Eyh+oA1hE4iKYYG{_wL^vNBC~OS9fk!uA zs9%TP)vgmh7jBf3>OZZvdAkGsz3lHdu-duP@>>zH@Zr3)4 zUJkt&dPcrl`7*R26p$-~X5zlkyP=(-HK8|@ee%blZJ}Lat}syBrj<%7#o^+M;)kI= z(vHyTP`0p5*rsj?HPPqe<)vJ)Kq!;nQI3kILyhI{LYIXZ`lI?%sR?&RKSUj-&hy_< zN2u?qAE=|$>A=0hC+somICX+LNu9!54yUPzdNA}8^(%XZI!k@ePgm+Iw~H@?ex`oG z-$N>p&QVtdX0r?U->7|>Ax-5jP`^`u;LV7?sGkDkrLodD>8yN_Di{8yE>V}MH>7{4 z{(4jHHj$NEiG#F9^mnu;^n3LBdX7Fvzg_>Ax<{?8{zvUpH|yb0J@r$ij=F(urc&xB z${)(p%4uc4Iv})FJf=3|PAZh%S=ZDDxl79J>fLH{t_4??bcagO_X#weEiyDqb98`C zqJwl;;OW1`5ZzxA=wYHr-z{CG*VZJuSlg<}v_h-2M(cErV9;H}t7uM?)K%Qg!W^MU zOc5HZHB?TmtM<_sXz%Ev%Bq)@tLba#AxZZIGWGidcj(mu_XIZaleNCu0j-N(rr)gp zskPBZX!mN}^lP;>dX@I0wo>b%6)Kv%Lg^;op*^Z~)UVfW)o1HVwC}Xfw8q*hy_>ew z;Pr2`j@q^K1nnGKAb-kUM?b(lquroaSMJhBX_NF?T(Z_iyPoc;ch}PSr-Du7bHNgM zveHI*Mee6n>9w?;+Qa%!dZj*CKdp!LXZ1JqsoFi-8ZD$R*OuU8tC?D=eo%W&`$@Zj zzLD;ty{NyWm1uLcYqXo_X8fw)2wCA*=+(8Q+RfU{^ewcekI8ze1{H4#4CK~7U?hqL_AC381Ij_=kaAc# zqI{=(ul%4KRravovU}Nm?0s|%db@N#{jpS&et@n;*QR$!b?A4c7p1!NXrmropI#(2 zpc~SS=*DytdaBZtZbmn!AEaB*E$N5oR`i5W8#t* zpXo=rRJDuRNo}Wgq&v}_>2uO~=@;o&DX6y-Zjdg7zLwTX>$%^AkGOeyJ?%qokv>GeD7Mu{Ygfy~N~OG!{Z9Bzdr$aQ+RT2;iozzgo}Q+^qKy+Sh^>V|Qj)Y>+#}SH z9urQ9i^ccEOyLdTRw-5ZA+%GRDV`8+5N{JMhh7n{lP-!+2pLj0X_@$t@S&hdwZ+k) zv7zyyF`;px?sNv7NuOtX&^_s1bZ@#3{iGg}uaTdX7f8=ZKl5k!Q~a;|bm1(2l0VA- z#2@ER@YA^S!joKIx~tHSE(#6`_NNC2KNKIP3xb8g0d$ytR=Y+YuOANV77qqGbLrej z@ok|i*NyAWWpD%O7qrvbCt5b0L+8@R*a-c+K19o-^XUS*kRC)2rn>}}X+?A~{S8oE<_ zO{gK}i3^0V*i}jv-w_{_MDbbSM?nx%#EwEh;)LE(6X|DRpZJpaf!#K(pD(kgMbm@C~QeJOq*j1j&Sr-;qPH9}qC8tG!FmRMI@BsLOf z3Z-ICkr$s4`w50HQT#+WC(1%~VX9b9>MEWT3&ftnvtoDgIq^}UNV*9p9Mi=S;x}Rs z@m{H>)Kt7hI3eCF%@>A>PYGX%HHEpt?LrT!pF|1Ogg-*v)eLp8@tU|mOqM$+)1;{q z9e7Quz$24A`nURI;|ck1b%*+V=t*gpK3_^US{vW!yLBeOP%QPh_7KmCUj|o5m+61# zQGpG@h`{ZEcg0%+!vepBssbf+DP2Ynq08wCx{|JjajP8>x)LO)7B zMn6tJrH-b@(CdR^>1?I8a)&aV8%O`1bTR2ba6CPMUd_G}oJc@MNg;SU~lJV(941^D^Jri=~;BP`V8I0c$RL! z&!(Fx1C;BPr@1-wUrB*rC4VVtbZ{;`k6z2x;-91c2$m}I=>_ywejz~OjYT6cRnP*BgeR2?-0$3*%5U6t@+7%b*eF~dcwGtB&q*ljZgYAXi#O3sz(#!NK^l;%-dIeowdX0XaJ{5X{UP-@6uNPL)tLZV? z_0k%;Hn*1kSa^$mo4!t;BCMmAurF%w(5=OH={vQCdOv+IKZJXceTl8Z)#YAc%efcW zSJ|cPBK8n>kb9Y3&gStI+3&4su+8YZUCu9j8ywrNPg+XNT!$8#5@5Vw_k z+7LLAlej-6nLA0JqJN}M(?8K?=(9A-H4N^Of2Mz-f2BVY&e7-TzodWl6t%sYtaen} zsvXqM>TmP~`gi&d`ZxAZ`YrjSTub>;PEj6LX3OcyTIG3VzA{%iEN3d0`o;E>)sv{yf&|DYe&PwGeY{rUm@ zJG~G7Xd6w{4-^UY0-pvp2R;eZ4tyT?EU+ceK&Ta{sZY?S>NWKLwCUPwdL3<%_Okwv zcBA&K)?Ulf4{KBO;rdv8p*BUkNzc$n>VIo*>G$b58mB*|_tuVU75c+kGp#^hp`Fr- zw7ObXZIJ$jc9S+uTdRMsy{9GXMS7W5p@p@RTDjgw`%9aot<&z)dg!m~C3>FTNZ+l! ztGClz=wr3FwK00Jezh*^KWG!R)>bGfi_1Crg^@)0+c20Xh8>juFwbVCj zgSAasYkj1)TC1iv)=y}cv}XF7dV$tLTdk+)yR`G#UhR7QS8cmit}WJD>HD?$+6P)+ zeXf41_Mmp7K2)!!4bUIdKh}TxpUjZWU&8bGW(OZtgi_9`_tqob*%ZQE@)EfGbHVP)>#xa*Mdd zTzS&-oRqYLlcXPmM*`mkUf^EjUgCZTYz-U@OccHk^iUrToegkIPj#LUV0x*nF@qn= zJ;guGzrv5>l9*@tnfw#{3L(f$<)`x#g3E-jf*%Gi%3sJi3eQ{;LX5!NCW*`p+z@$R z)J2KuX~>MiWEnj}Dx)!X>dkeXF_^2EtC?$+``<-+{O$NZfEXb?qu#_?q;en_b}C&dzt%~8qEDn zP38fn7E_z4!_;N!G1v0-nFdTlrV&#vHfEYIO_^rQh~T%uVZr9igG>viCG!x|ifPTX zVUn4)ObXMEd0THLwP!josmx=cM?xK$PR!Gx&diKZ7bcBKXXYqfnQjcL4;8vI8BC>i zAK#828QdRi!haH695ndt!Q;W!QYOcK4KpXXoXU*>xUdj{W^m+?(QJ(=#oUQBjq zF~5jk!oS342GfJRnU-Q7rZ4l7)Q{;J?9V*R3}C`cLt`M5#VArXlf&d0xlDw~WAd2- zrjV%&b`u6MwS}KUgPB{!BBq#mGq_&gsJ|(1&|g#{#(aKy=y&!H_D}XN_9EMf+a#AT zzXsO@Ia!h~v6opvsU!cx{>#n`sr*x+v%v$QS)o$q1GbDA!gSReYUNA?Q_1vGs+cwM zUBW=)-_Q-hNBR@NJ;8s2{{)W(Tkt_XiPyx*{7^;`hcU^@P~`>VedSYmo-x;0WXv&6 z$eWeAaz~{|zCr1Q$94mZ9!92|A-9wJ%L|Mi@@vX6d9yrOxP$M<4`*)Rrv*nc8Ac}l zV9Rc)x6#K48-0yuL!%gmzmxCDKf*j2dX#yLd7Q}&&0*)VqnU`%&&Ua-t7Dk4%s6H| zGl7}NEDZh-oWx9KrZ7)1Q<PH_~rbo{A|9jI*p&j&*7is zUuIS^Z!)Wx)yx`ZEptGaDSgU(D?B91(k$^|VTMpm>?^%2d@pPghY4SZA>l3YZP5@_ zp-?y|mI|Y`!z9jr9^psMitA+QNce(eO513(kEqRu5 zO!<)ch-t%BDAx$*#W%$xVn^|;*j~&N{uLWYb)|XQAGl!LsCCj5ZatGPZeTVtA2XjY z{kY1|u+XT`EBeIXXG}7;g;~Qb zH%yB_^S~}}B>b`x% z5;(w&S7yr3D5vG4a&KjzJW^Sv{39&ZU)H+oLxlIa4cv#?O+uych#(2qiC+uH#Z2*{ zz=)H?m$`$?AtpmR6gbR$AF3yw4eb!prH)cB;Y4Vz_@uB+yhr#~Xd)I1wfT{O+X6!a zd>{~z1A5@5z|Dd0m?O;h%n!^_<`{FFIl-J{PBA|+r7*3kCx@nmeqzS+6ZkXCS>|Wv7v@*yO?DldADU`3H7?;`zascRpl%>bdqPXq z()C;PT>Y}PM|(`Gq2=q3XuoJXwS9qe%z0*@`Wy3punj*%xxoC+{K5Rm{KZ^kGS$DC zOUz~FALd`?Kb$_(EW@%a#|GFW_5)>;vO)Ps*{FQ1tXJMsKIN)O?{Kx)+H4(mwzgh7 zq*aB6hi>NUvTeC~>}u{c?!Qn2wjuin--vC@Heqx54q8(-SId)L=bEvLrRMB|fo6eO z`h%>@ALriSwgvLl4eBJdRHKqwupNz-fmQ)7iBD?DKE$?STeBYo4+U2Tn+DpjcPcaF z>GI9;D7l@oL8g>SrJpG3|7z{DpTzgLjodJe7w#69h=Ya3(tlzr=_+ZhxJ5i9uH=&0 zwrqR-Kp=%(CtMPr5H}0Y2)7EWgm;9tLN{@QkSfx`8S!`VaBz6wmOy177+?cpKn>gw zxG~U=~^aJBA<4kK{-3kMoc6cLe@R`ZwvHq+gSE za61Cu1WriDrH_LXLz67O;ivAa*cY#1^wJ88zj-+&*p>w~70jZKQm`eaw}xrED2Hge_+) z*h;pF9m)=4hqEKtk?bh;5%y8`G4^rxD}FRPh8@d}WA|{?<+qi)@jyGwe49Tcicn#xXNpJaz7J;hFE zCnn8cE0dmPKjVVRm)tkpO-kp~HYu(9)UQ`7x2T9}ot&JKkr8g2l9Aj!wQFW-dRjQI zJQ7J1FRV-yEr|@HTBl@$vkSw8`H^s>B&U2t8FC_&lbz#F=VjNe*CZ|!8;HqKSspu6 zZX~*lNKUqIe(&;Q>r)!P{L-?@!qSoov$_?L%CKE@cyMHd8?%daV^t-?%CpMcWHgbH zRyW)_txuRV6#3mIH8Y%%**!I_eK@Bek~26iYPEDs)_hbWJ3$c%LM2(nk#JdgVM+V~ z&CL>1a!FNjIIAKjt{PbJM6oO7_0+CQS9|?DYvRV-3cHbLrP9+or?gIUTPh{3N0*fD ztus^F+P#m|+!I8bST*#-oZ>wpw|q~`T{%yzvNYT#%_^{6o0zJ!Pf0^fI;ZwcX`7ka zB_*7dJIKlzJHfL_V<$yhBX){Y>Dahi^VkWVts6VZU9$ue!WEV17WuxK$89QmK06*$ zH9P87EVXsRxB{XvXXa=mI%8U9O8b=V;hf?!t2(K6Ah#+e5N$Rmi@V*OfV&*KjJTz^ zjpEGV+16=2I(PQ;FEi;BXeQj!(%W=QNzM%Clt;2EF&2{EXosS8v;$57b~0K-a%PIV z`=_-{Y3FwKbng_mReVvmX?#)7vb{yPHSh)#*TZd{uF09bJxyUI$-t8nDX$FY6=mgP zNF;0RPDm6hDNdNRv@kbe99=Rl?pD)W5UQ8B24q5P4M;3O4M;dq4M;q;1{j(%Tes<) z64$Z2#!PXVI5r-wzB7ZjQQcVF?BN76R*opMyIMv{w;m~J$tk{ri5qkZ%Ru+?9&PNE zFjokpR<5-HebJnvNLGon*ZHQnJDMFOIkC0OGXc^MoUpSGJL%Fg949>)a6txy=7(-(Fd)SlBbZh9l($Z+3mW;O)F zdG=UjXO1l%={mj{Nq5Q~5l%~O8yCLf+K_p?6Qc)Md#M8TsXbG=XSD7dxA9`9IIS8Rck35B z0S)I}%^sP_W_!BlF;2j$^CJs1b@^m1f!;T>?khHttztnTXu=J_nM7{jh$Cm zQdmi@cI;s`2Nw}Ic9FCE1XFYC72>41)ao)M;fyx9xJ0S28{0kRTiqU|m!MR8e{*9) z>szIeZe5x^D3W8(U05$Sx(JeR7J+IOhp|j+HYerDYfq1v!Ba779%mdkQy4J)MUoNJ zJy#m>U6mhps%{pLn_r$)94;v>3FqNdwJ01ZFE1^( zrjWgkEQ9QR*n-jD7)srEAx0hCZiz|zvRhfmcxvTBVFg)*C1xrQ=X@n~?Vs6M6_G{_ zoCLN>#HvYNIH$0zz)ckA+F43)3<*~{4VM=#slp9BvWz@5Mp0o_HjY_lGB@E0=H-Sf z3QDVrNc%e*2*ViN9SCrk%*DyL6D%mj@w3osGBQ(HX?b)xW_@uxE#1v-MbHH*O09;)Jfw*1 z5#*kjldZ!1QGf;7XGCOao-Ihu3*9bSOiDn@IrH0Tw{gr}8}sAeaB`OnvuN_0T-&>e zuAP!I8oMda{z!6?%~zIHXl-N?!129=9KlJoNZRb2ZYs~(?qot&azT#@#fLg zT5=gK?A>N8tEwn4XTovFYJYe672W}=!aM~bYhK}NhYGW^kiFC_r6O!M1AaJ-P(jw) zp6c!c72eK?@xhuN+eyj5;q+R!lbXTk9!HYiK1 zwHWHD;!t0O?aiDPZqqq6t*v>py0ip`WmGUeMy{WIVQgHC+Bk(F+sl*RTCgWTc51s7 zW1^J>q=$qH(Mdg13ghcwg<`9K{lGV)XLEUqBhkbQN*t{!!|?VQY(8x$PQ}92J#WRzu=mYjPX2>ybIyx2uO+@wi9h{w^=CS5{ht{$x+YC5ZPo z`YMKv=(KQd;n3K0T%O2q?5du5kdDiPHudE}IxbIf6*`-z9His&RFoFsEOkf~8EQOP zqv7~DhWOX0Vn}(SJZ1}zo%=t<@JZ_)oYM2+^|uiaQ!9;b2qGqb30TJgN->P;s9u+oOMKt z+l}FLltOYK#HqH`-;i?G#`$gc3^$pVg_btY0`UON&X2QMD`;mPTwaPZi^1d^GA&$G zQBas?ZaV9iSx0iOl`Pq;BH6X68YzMdXZ{Z6MA1tN%gRe} z!r&|%X>xapJ^J7- zsQFwX`qY<{=tS*@gCv9_mf1p8_CQu;7dkYns45c1UPQI&(JtI2rHg$Zz)s|sm*TX; zld#VD+>p6JF&Ss7=D3ER$D+Y8Al-7{0$r6%JUeb@BP zsmZB$zr!4&6HUNzB2k#MNphFgxVwTgBj*%38X&jK+>}+eli3`@t&3t@X$+5MbBk0p%_hRjzCyy zv@CNTUw4e1Sb@x0l~v`Qs(BVirbZjjGcQ)ZE*>73Q%Qx*F5sPxNwG2eo_fscT2XRV zMg~7~9vu4Wgp*NfVO}8)L6PKw(!!jGwVBOn-6KPB_CsEgBQ0Z1j?U@U$IP39`@&?A zW}@5~CEW2WCS2y-;+R%9W?XZMs%!R6Pb#{Uy5zjk+MQxDS?%S_gytisli`YDTxR9q z;>50HfeCcoUamhVLkKV zreOrvr?HDNn~?M0LZG zgp!?Eckdi-n~KZBuIbUI*0DiyY9Eu&?4sTKbj?f; zllSbcm)nucjga@-opff0?kTO?;)%L>+GOR4#>n+sY^GLKOS2(>%~#>NEr75?LF77hX4Bvrx;%pXUygG>$z2`tVq<_zNj-QI?FKUh^>@0 zhtpp6IBLz2n~m|#+!do~(&wC8U3N7|wqmRl-ktG8a7c^|kq#C+FK)q>myQVMj=+AK zGnicW*vqOai)|#k&CG|qIYl`2b@F=aNPfr8XvXa44tDYRaUIZ(#B@M^)V~SrX)z7z zk0zYM8S<<(wP*15N;~8kRqP1fP{7lAjE%loeZAMt>FK>>lQ}zU+}=+n+Kq3Y3jfb6 zx%T#o9Ynmvke2?Rh1f?YdmT`Ln7x4%=4@>9s-qaApLqf0uDF#04P?Io;WP;1_`zrB$z#dA$^wD1;A z2GJ|-&1B;Lu{V3OTxoCi<{|4J*SSfCnC;^Ug%j_zBu9dslZ44aB6x^&g+3pXC9dl` z(-ZB7WEv^=3j3jda?F0{OiZ*NI@97SV?C9yw`%mo2s<#`cfh5R@upM}UOV$YkZ^}IC0V*9fTJ|>RBb^MZb}C^ZFnAnBkHf+#A7pt&_0c46;*X73w;ZNTQxMVXaV}^<6HR z17q|s45n_ok`}2jZ|9JyCEibiNg%#9i1=2}>E9%GS?uiOy_0Zsvyq38cx%AfrevkU z^_=@^6=uE7m=iK1-d#Bih~+t?E=#pQ%&YvZ(#?9F)ASPwO@78i{< zl^X6_hYsORZQJ2Jk8lGtYlm<;-eS$j=uCc^3v+*j%kZqzECN$-yQT^^lj4)8O>Qo! zU3Ve|Bn_b3Qw<9G!c zzsyy_eMP)x;wG%;-Towb>fJUKFYIKdckko<9wj!2tLfN~S^3nAuAN)=$xP{;X*a(o zV9pbrZs)hJ+QVtB@v)S7O%T15w}RGuzI-wB#?I!SBPO%io@M4aW!sF_(f)?t8L92< zD%c5gR{X{*0OZ~uMP|Tn`(~J#LL0a3U{0`VfgElJGdr9&5bav#9B#&F-0X7ZEb&|2 z4!fH@nnpeCQ)*Htr`9CubP9y+4etChw>1)p`j;K{F3H=&$YiHE$PZEm=~`x-bUplV z`W}8po6Fk|Gg{jzw_e_~Rl9V&eSohc+J>_urPxU`+;nb{Kb4n5HjX>ld^OgS#>3>2 ziVEL6LyLU{4l69dWjdJ!Z;Rm*A`ErW)X=PQGl9E_SQp%p!|S+q2eM!ECo@|2>C9i` z@|*lHFR+|1Jgs|IPS{rl$w%&h;cO}{?ruR8S5%sf7x#-wO9z|Hoo>!#E(te)@HPr5 z+}irqTh*R<%d#p9vPWQWv{ohIR>up;sEDryzRhk;Cu>fgrIDt7dt;|0W6-fj z^G5Y3GwF=yX2Lsen}GxkXGLOAg@vM2aUh}%k@W--SZx0;?&$Evsak(u?=t$)`} zUCGPY<`Lc={qXW?T#yVkh$qMz6S6W|Z!p^rR_z@uB^l8&^Hn-$#I-}@Vl^fdKWq2& z9(Yb-{+$#uTQrGxohx$4hj1nMFbI`&rs3M${zN?*!y72k1bLyzO_9UCo3MMlT@top z9p`w3kAd7=X1pST6De=V{DQ~q*#0oS=D|s?`PkE!J*PA;E2lE1+;C1+Ij)e&d(Hk* zoVcg5q?1`;d$);J8|Os%WSI3Wki5(2?75z-cs&>cl`kg_2zcUMT3m?n)U1BYWOCQs z9^@+UY$%*pS{_qf(mJ?FQsSSHoB$^*wIIuU-8te6fp`_Y@xu`?na0+owC;{y@U! z6N)RhHOb=iM0~4g-}@q`R@k6sz}g$kukoCa-T%pCyZ4iyPTwcL-E%KbN!H#_UTWM6NaSrijOBY7)?VmG1nU4w0 zm%g#;Rs!D!nB9<+VnwX?{+%9U$E-2dPS}0SO66u3Md!7>Und_x zc-DX%LZW4mjPYyf4x3ilSIp!oh`e_nvu@VcMA2no@XjKCDuO)XzDDSCWN`8A<`}W zznYU|{6CxXikUpkN%D{Zl)M&&1Au?~S>vy@mj5$jOo6yz64&~;)1RQF5w+UYJ`@z@ z)+47Fq(z)aMI}P!ftz%X?5e_|%0hc9VlQc%+O>7}%s$b}ZC?ae&c3v{-O}2prjfq} zhBDosSn-lPobZ@`Ey51t07aH-<#Aqec9M8`5Zx&r8&*4;{UpvwnP&mkLdgo_YTTY;rZQT4lQ={4O*YRMy&1Z6R-)QbtUVDdpr0meBK~gYv%^FcY<>l$iE71)L&C49J|Jzc;Xpi zTfmtCf3n428S5Ev!irjdLc_C8_G^3bjbcskt-pIs5N#)f$g$1(ZrW3<)e{mnR$gH_ z*)5`F*axF%Alg?+MhcqwYM@em~e3zgY5rpHp@(;gxaWe$W#pB4>rLxK z&4uqoD{&S@{_*WD<|yHuLRhV3K5e&K%4}t4aI^ZATNQJfc|#uWL%S6+qj=7iRg70< zyrnpIhrBW0iHWszXS=%Re4cQ5uK5*^w}hB=cb4cGQKMT6{n#AjoJ{4Bd<^P%D>}NX zM?=y5(2aR_a&Is}R`2fZX7%jbZp=5-xl!_9GeM=yaDt_gc*4rr6Rt2z!b*}^5>=GM zuUuJcfOflvZ$-#)oV=78*X*Ron32ghV|2^;c7gaji6>vFPFJkYmFn_;)x+JbJ?l@N zPdh72&QYRU(@aIT2uXUkot^e)@NOxR!Lxx#(zjhmAZFFgQ0zg_3?@1Vk_q#3TzMd18<%(0Sr)~b$ zNqnF-%QO$vZs#DOn4>QVUEwHePO`4Lt&xxfq6bwomFS>KCRk(X6%L}&42ch-?(~=; zHtuLlGJ21;Bz=Wl#+?+`vI&kuRVD789_@49V6+E$qTU|o4=2p-?Qfp!p6=#}`t~zV zJf;_Vro?nY&y*{)P;3rgLpfL7-MgEwxtM?R!@h^%3k@|tB1u8ay1uslI0#8wvpC&1 zCJ@GjAwuL*+P)S*pCti2riq`EoX(**>y#pFUu___9VhpnyeYhEOit9}Lecu0=ZEA_ z5q+i2$!`ADC#&vwalJeXpXoc3>@ym>Tx-odwL$jys+;?T`Sq@q-&##GYW_hL^ZB|r zh);#%V%8V5co6T&Xnu$ho6~&ZK5l;V74G<`^_Emz98Y}WW906B?83-%qPQU0ClW>z zm4Iv9_yX*qCw6IMBgAL!*)=|hZ%z^flQR-z?TSyK;|e8z_o!~Y#PP=QVX|8%h$dQJ z`~kMOrS(XSkM(X?r)kgniR1B6>%2HV?p;(_B;x$x9@3D}WOQGNiA8r7a{{?&vU<0< zJH*6dN{MDRCwPj&D|)y!Qk+#j*eZs6qHh&zb#3dOrMdgzE2!+aOy=!OvI69<1e$;D zjI0h`fWhC+ir@L{_jJhwG!MDs8y!3B_xhsyv>mYD6pO~mfy5dQ+@X$yVqUH@yC=f# zs##w^M7Ik5V*>IWc^DrYn0FIBY3qifCtzMuAf1|#(F1>NJR_xhYU|GKZ2qV_vp?(< zfoFwjrbYcbC^HdnV*@)q|K-5Zthg_w;7^2 zNYbCd{*w(POItjn%Z;=#U+a#hqYJU7yCqsl|NP`VMc)i=z*#EhA~A0%PC6!ww`BX) z9;u}H)3c0d+MVAFMVH_v{TVXw4pD45Bo;GcTs3-{f0H(LPAlrpn}UzTylrWvqcd6Q znCzZKVY=IN=JxXjob|9{-cn-Q($3;3xl3E$p93Kq+7rS9e(U1O6E+_?`O{7foH=oD zBR4dnne5lay`e&Ble>CvUV4fYt6mOqs#YRyu9*&a-Qld#2R{x0d}CVw70rWz!7^!OjGu^G2so=7x@`Hx0$hH44#s6dP?Zc$X@;c93m67+}h{&5< zOGeSiOe)h#$Y?UNif+-3Zs~5iMGX~| zZqd$ev1J@a!xkNOmUVMob_SKvXvG#4HJxQ$)?sFIXP6mww$_>N_jg|Ixi^A#e4hPp zCwUH^dw%Ejo^$Sbi}PY_YJvO?l=y3;bF-#$K)$)V^d0wjQC0Cu0_Xz{ZB^?EC0+1k zC*e%#{S4MSEyzU2NK?^C=To|rNC9EiB|$;-j7<8P!m0$EgGxy-+IH(e&Ys{fi;OjO z?11YqbvQ#`gVg5+UzLkYaiu&xUy6eaojh=#Rh5!N-&QfY!zD@2>8i}vE28vQDk7&T zKyE8h>T?tkVpz>ok|IxiVz)RSn6gH%gmZTFO0$0S_19l>1^%K)9AoJ5lRGsPA zv?iOe&xa-2njKXwqSa%gU)qA~2+WF9kJ38QeMFhQWdv@lVIdW3=u@$VJ{4=|Q?W+6redk}HrD5 zB4*CJiQauTBXHhLi;{N}f%9(EyYEK5`)<^`??!#kyO|t$4c8p#%-|!pE=tZoW5U3r z@$RVEtjVJzjJveZyj_n}zhYLd-ZLdN0jGq$Q9zdUMuEcKC}?R<6qGz01xS0N0AWuQ zn6f=l5MfUgj5HesEzd-O(w-<#m_%WI;W;O4(b>#9iYf2s91p0oE}h9tjK{4X@@%55 zHM%Tlor)thCTjAGWB&N5>*r@vnw0Nm7p(epjD4rfxgsYpZokch_^f>$>&BLFEy)Jm z8&1~Kl%FQK;M=LhD;yaj?>axPUSjI#@~8?Fgugn7Evkw%5m7sQ-_pM(C_CH;jF(ow@=Rby zi4xB=aY`@uwKCGOrNKl;X;3)z*CTopBhi>Bv3rqDPqd!OL(_^vz|FD}2p)C&2`Nu+ z*3##mQ7QJ;^vucG=G+`+i4TqM!W|tdD;=fJ@i#`o{i>1!+-p%cClF)eoEjAHpOHH}HB z5^!K+bu!klIu;o<7bqgt>61t4@!2QNZi+@voAOsH{yydG5tbzGBS)nBNEz>!_rLJm z#P<6BUGIBg-%h2mX#b0cnA8qP25m7UMQ{&Uv;bH@I2Df`bQ_IGTCgB_c# z3q0x|@T7f}^ue+XdvBZCOV}fpRPT}EHF{)x$Gx%;&=))O*DXHH|(hSXv! zrP8UO#0NgAxmsn!hFTrLI5DMdQ)EtIOf0FkN?YL?80S$=I8;_;b&L&IV!mtqz>e*> zyHtM0w$}%%IQ2JUBJ?*&d3d1yGHSQ9M@r^;pd?v`dnS0P9VT$t7TLgHR~eu)(`(QZ z(jMvOVCNYoX)>NNMh8UXv`FvHPyd2W%TA3Co4wbN<5Kf$QmIq%s%ikHY-x= zIz-Po1AUz&jj2VNVCIp!*XFSY_vrLQN`u9dqIaXpd1^Y)=h!EY+V6QWWzT^|oO@KE za6&_wIWlaqvEtbivd@RE_#T`dm1k@Tnmu73@dEaFUWp;HF8Rz~Ip|VePGyd06aQhu zy5O^T$|X{A4dnh^ctYyna3frS$V)Ky^_bBpE7tSqeN3c)WIRDOssMQXYOh(p09dUs zN=P-{R^8tbP4T*4#S}ZRu|omJNI%8{HFcdaM4`?|q+~N;SS#suJz_=clb6;4s3)Ch9fB6Q&csg2Rq8utSP-}_ zpiS9F|4@(bY$zgf-H4#qRVsg8-S;x~i1MytH!Bip;$I@OUSe_LtLO!c?bE#|iHajM zjvZ0r7K;;6>+N^nf~ydf%(}D^$Kl?W#!!{@ZKe)jJee3KU!o(=evFP$k_3*h_mfN; z_6u;R?Jp0&jzEH2a5T^W+kju01r9-UI3jw9tV+C_AF_?;=SbV41y?tzMg9%F$(5~v82 zAM#UIVv8HBb+<&uM!a~`gs%jc4w;$c?sw&g>jqpqCuiNy370jPRm5D{BTn>1Gv-+; zC0UwbB>0VT5nKACKgbuv1zV^-*q_Jm$U1WPZ4rwe7O^E-TXp-PcS^tg%d4*RgQQgmK`+FYQEXKABZY`IKap@xje3mL0t&MZ1EYJzL|q)*|DQ zG9ZqaK#3)mKiijPGMYlE7AQ!m$=J^NC|+cX$viGPMZA+X#0ZiG!b(gb=g{f+kyA+& z^g2{|LH;1E?hUA>-U*pIG5_XKtnE|2pQK8~Leum}IEnV*a8SMHxYVE0kn0ACuW9sCaxPT`yhGbz;23y*W4D-!~ zUwv_awT{+bzAJ6_#GItf%PGn_BzsOoFW79+4H5*jF7-8AV1-lE7NlQ+%x4 zeK#xY@t{wsQI>mZ1taeD_p1~ZIF8;@$+XB}Umv6&FX8E-S8qE+~#DRZ3I=`z0GQ8_7 zNhg-Qbn(&>j+=U|_9=U`zjJqQ`4jnL%AhvuO)hQFQx++IYBlPjT+EP6&uKSSn7Ff|l-rkgv1fxYP4KU5hv>lWv=BXU_V0}yYVqsd%$ryilCiU1&nQ>U@ zxZ{tLjuzv-BeQ%Z`;PQ{{>ZT@*B13?$yB;CCa)cNee)^lq4mmm<*KoY3JY7_w9f3< zn0MkJ<1KB@%|}?^Ypk<$k{jP8(YrkYl{29n5a;O>`#j) zUU})oXT-*HYR{kko|KMd&wfr6am+fwg+G_H6%B=c3r z!7;J^JF>nWn}YPb-JH7-yK@ zZcHLd z`>)DA8XdB3!;DV8I298cX;ZSeT19#4Hg3;zJ|D{@l!;TgrC_SpF+Q-3wcctMl<6Ny zcsnqrgmF5%WA>ONq_f_%5@|aBZGlYEuPG7kW%n_}^Cp_yBpKZ3hS7?b3pS*3GJ&sKFb8}hBH z?aKK8%n_|;>gi4QvIkAA2(P1o+-K`jtQ}2>C5~C4#Bkr(o*f@>D*QxGH;FE>{Jw+R z$FdHr%sR4?#39>8yEapO7vg_PZaqjz9Zz1_Ua#Y~YBics?zKo~QCgPxXKaaI`}ZBf zQ3Z0e5P!m#Me_&t?AxpTc&stKd#qvNvr0JEGcB?1wVqDoEG+!cF?Hm_>KO$_J;+SE zdNgb4#PZbZ+5#T%Q#hvMm8GdS(F&+XUSFe5{Sz0g2ju)5?jN1guGNxJSX54$b2ySl zY&Ykp7O||*@%cme&Gy3+nc#3K#}vj3;)Giv%##jEA9JjY`-HE5krWGRgw9xd`>~`K z+b`^hLG;`al9HHunx@!~kuozM6wR&s_rwg72;)?=Gpi1v!!`EkUVprx>gaGv~k#5iCsX+rA5@Z18t2J$lay``D8b z#z}uvJkLy+VnzYZ%F6oX$h23E#Q1dRJP4+a=(xcT zrE@6Hay^VBoutHv5O-%!u8H<$6)*eg(`2^F}l*qNkTBA?Nq}VN))H|gMS{xW^J|2kz zyEgVgOJ~z6gu~WK0!S4VZACdPe@!l`ZvZqlY{tRjg=r?TTma zs#8cDLS~)v*|Cj{ceIU7t!iYTHBzDL=TuO%nKw<+~DcNG;=7jz# zEgFJnxB_qyUO2YcKJ-dwc*LoB&K+kXo!AV?c*(=7i(!FA=OPV_|nU*sdT<229_WG*CJ-$-x`ic+5 zq$4k7!juYrRiXc~g^Mv>m_I@n3ta4EEza zF0bGM&*>xBIPJQStL4xGObI2>8H`O_n|eAUCE}bAR)o3f*V*)(Gg$g)fL@ydah zCic9-eUIbPY0ijDnRBf%6S;VhvC7Ji&&wOQVqLymQL13L29l$Fyrx`x%^gK4_x$mi z69lYx5hH4yb=F3Li6;HXjXdVHXxV+{tI5O}R&W~olsSHDE$d0{1=5~6Qto)@mD`o{^Je5j&|<+wZrk=c6e$jt2GNgUwDwQv$?*HBKj z%t~<#Wmc4YzOs6so+tUPJ!I1A6~`&}lrP{I>Yf0JC3wp{x*OghBQ(^Wq(zRwkBe&}8F}L++kBP2CvvR3PQ^HJjnliI>T1x6R)+vKj zjh8Y>TJ4lrex^bhNegi-O;+Yqo7S!_5LVy6G_d^k%`6%`?%iqD`|gzXeRmr4e|MVn zd3TC?-d%*5cc;vG_oSh)Cm|xG9H}X*j!4EYXr!1+HggDBxj}AT}>7oSZY4(24|eE$TXhBw*Bg(vmoFQKC$w6JgqIPaGvX5InL1 zKM2bZ!|_|BbBhbUCn^*sQDG&3 zxHBh`l;$1^jMQjA+h&ZHSfJEQNoq@JLsOQp;zXTBp?aDJ6Fo-!j!vR6{^C|<&r$Cn zpHM=Ndhg%8Xa87z-@dWrY2t;M1wFB4P4)CvqL*p0M62zys>9tb_?d2E$Nn*?Ly(8Z zygqWAACflU;DD9RooPH6o+qzuy*3t7kg0+M~{qgjrlS1kPOELcY{0Hp7^S`W*kWi<2qAK4(8V#udtmI1^t8( z$tEzhszXnqXuC){+-H$QgGq_5@`=eKCuL}?#t8Gq9~!HJyAtsAv?IFK!iSaCdpfgbuDOPtlmQtClD_r}Q6WiIVke}G;L}_KquA^nY-_d3q zODpD@quOw6v)XX9h+s9N$Jv2ef+c}_UN|_8$?dsCon5j{PzzB{VjYw6EU_w5(`$dM zA^Yu*HRORX8N=kAZAi|0TNyI2s(z5nxEBK)8-voH^;(Q%wghh7eUtvEy1M8<8wj_!4II32zDuo#i_i%TIvH(lmRtp`S`M=Gv79bH(Y zAoW==5Jzsmh>YA0W3#@yU#08DRE5%DGXVB8oFYoQJeXucc9vUT-CR9>WZ|f)!^D$R zwz=gHKBXETvCTR!)Bmx7&`d9}lbPg{0qY(-`iqbGDFw0?#*UlT)HnI)p6v?Vg;T{`#EW-{)| zgiAMWrIWZY`I|^=wk9H`>*IoyeC1Ft6C~wskeO;jv^J=*efwTMh{H8_ju@{j5x){4 z7I3~kbVIlYb*OQ z^V5q9llY-hc_m#fELz|Hfqo^Vuc<8}eNAm^=$P6PGF^<=05YNK6|s&zQ|(L0 zSjdM3N=}bQq?yEJvWi6~ILc%er}u4AM(MYq5r6yd@5q>>-Pj(cI;BubEw5xrUMZD@ z>CD3#Be`%kvFvu^C_@E|5}@oLdb@V0Z5r$Za|yEkw6)31NC|wC#TRc$NI^?*4$~7v{SVX$IUBQmz(63XzlCkm7ja}?cC)IAoM0er@dEO|JgRH zw@dW65R2OzQ(}|U+Ex;p?2hDYK*~Dw8DI9-_hF?4O0}`41n!s=aa2OYNq5&>iTYJm zaw{dCPuf^V&V<&(P}g5c|Nah~kHPh)pC_2yF+D0{)usUF12T<+6`54D0-KI{7C~*r zP)U>$G2Z+|RbIcx1SRD$Cbs6#ZrDF_N4xTiu+%kHZinw;rn;c`Sl%@2Cv6mT&BF}_ zN$769!!T_fPK^yb9Y#`=X$iTHzVUJVvYGhG`Xe2Vk@O^tYmiD8Yv5$G4lf-s{ZaRr zW#sxeSDPGe=BD!1sd?yUy5dPBrqZDVrRlM8qFFX<%5=5kd?v=HR9{hqwy$V(Nneo? z{O-)xO48r$F7DqYC(iL(&WvFk6UN>+SJq8C)gw3Ul5y>p2IZ7F*W;fSX7WGffM!k+ z=rK$80ZsVE<5V$8yS0N4<0i>_WzorhC13_|6nOLqm-g(mQwqid$w1kPvv=|MYnURI zVuh_r)n* zizl1-IRnAq*9%*2Z04cFA^%U#>RK)FN(}nuDhp{cHIQ=AKYi&y50bMTEc9S!8S zuzoJgZwr|ep&Rw%P#*)G4*k57A6ff2aoYFvTdI1H%QP~s#07R9VpjR6nsmpSYJPrf zTeE2TW;j+3fT>G8p-!w6HErlgsigpk!=sxPWMk(GixEPypp%A-sn zLaILFb_JDlm2t<8;3q*CVjsMl6v{A@t9^5aLiNH@2s24a(?0n|aZlb*n8}y%{Rgq} z4r!|5rnIT9rV_CNbFEPCw4c@zQ_}PU6QR>UBtoYcCPF99N{BeS;qnzy-^r`ET0Y5q z>dXhsXPZy@cYJk@99|cFZnY9qN@uU>!jado0jjSdw%p8_K5fb&lg-?c-0RYbq}oES z;*un6%CAiN_L}h~-lTV)HFw8AJ!Vct++*fsO3Ex%HKt75Z!u-iKkbo$&-6)Girubk z$|o^=Ornd~j2`Cqx|(Uq`4zp{A?_ZNfMO=)gNtVSx^-K#Y^ZJp+hfMpcw8bQ-1N8H z<2tE^dySHjR?19DvR&mOFN5-*>5q!!ECj4mk^ zTEgy-t^}2&XCSA=s;{75O``AAS$4t+54OLQWE!Q3F5Ay{2ZVMoC~xM}aF`M0PE#{$ z?rcn##4^UI)-0)dq*_r!A}pxKYE<2Q7J0JTP`rXH^+}3;?&!S!)}S>tu{7Hg=)>wf z=`pfXsQpYZarUN4&K}cbhPJO!f0riXQh}zrL-Y&+R8VfuQb~1dqcu!vJDK3f>{!W> zrN>Cdz-ju7$c~99==t@7LU+)b=v5CxT_T$q2S2nGx09~u;iA&RtWBo9;Iw1PG1ETav z{bDzLuzQ3fA56QQ$g{GPHQP+FXd@tJ4ni+Qln-CUR!e3vKRGK=!sP6bVXu>JnzRLu4xM_!l}dmT=Tvy&LPdt**|x67 zsoEv=SUV~;oPzEqp{$2AbH`%9PtVNYD1p_T9OJDMg8` z6LSmOk1d!P0$PLQg(=*DrE`oT_fw<3_j?j)&xb>4YPN`LAPU1$Y#D=Wv zc1xQ(E0ugTDQWVB^@u0zg#Y|vvx#3YF~qWyh$>XJJjs`Cbg-q3^|^SM*3ts@D5U40 zTM2h=%ZwxJT!14;uh3*Z9>JufIX*``cLi=Go0Xf2HY+!?wUB2gS0R!@&7ZmGwc`ck z$>gZAC;ChbjJ3zOcE0O3pXGZoq2;Zh%{1ze&^O0|*1AC^mfR52(p2l>7^%%5sNG;LRCifQ~ePe#{cptghB%E=PI?kcT z%x*2tnDhx-Z(Dvg6Erq3mhze>#Ie%ka&6&W9J$14|v zW+Mx+T8rIdz0Vu#x7yt62`y(6;#j{7!}SSoO&xhdcI~EvMEf`~k2WhC#S@QDmaq20 zFndfc%r(`#NILlDOZr#?>dkGd z{Owm{=a`O3Mtm70e%bQwNHk!cnZsRVJsf zvh}EXW-WYldJb1SpmvKEy3UpagB@gp%=uBbs!oB4v4lI;AaKz3yj%!k4?%H4-W(j?k@krj1G1K0-E&|MUM?$Er%u^0W1MXw0C*KG~a#y2!xR_Yv`qn)!?%9F*O4euW*>yn4anjNbwUlHJ zxA4*joPaU0f9mMeOmksBs~XJ88Zl1`kY_AOOfF|uUfI*bX(2f?Ty%SIXeNG*_<)lZ za9$tVj=R(jsVq#qlMoWEEP_$8)PdvTu`7{pzE_H2kP({N!3fOB*4o^xQ890s+^@lr zm9d0hKFzcINHs6IT{~#om}O2gr&EZMGrP4QopbKV`}SQ@LLH0biVo#ZHs03UL>m{m zVOo6r1Jd@08&os0c}&fI66Si>Q>X^$Y_9V(1<`sV3Gr0$V+^y-#q z5j^Iod3tA!X)a`BYClQj{^N3JRcu|mDt zkL=jt-Jgk8U45D8F-qmyp_G7^Il2OUxnWvlQ&d9cu5>pT>Urs)>qgckqyt0Q)7J(j z7Fhu0>OWUx?ygfZbE}f*?Da=RCqD>jjlIN3>3L+_X6F%==S!-r%3)xeC(L>8t{r{W zx+^jjhIXYtQ+09>i-A1pGo7tFdt!51!m696F{h;J5MD>rbI7q{mK;#*2$_uNswS}! zfjad!BejS4I&$|7aR98U4f$H`?FOzTSMFL*pE_zo$eu2m@+$2n6}qh_B`%3k<}6SZ zjy>(u(VBBSmFRItUpl60d7~1jn;9fc)iOjIZKX9Yp04MU20MwpwP9Z&)mGulPh3gZ zDT(zbE!DwO*yEcKq?}q|;*wRE3D7;C(aMqo6cbUBE(kl@IyoX8jGWdauJz$h@{B#< z=CCEBcMhZJBeJgomyS)7qL6Y9j=7~CUHe>greh<92kMDMoIYXlRhv0ho%0@y3$x=t zt9N}dc8pKSj#F`ETLPJ_mECGqt~akadb3N)5gj~~Xr!U%g;#ua@lYgk*Ht1yP3%~} zg&c_yI(xRBR_-A&Nn!;$`9yEGIwZbWk*Z+Dn(dER9qJw|=}%m7X|bbA3YNGq`Drwn zXfjh%(R6ZIJCQ~x2>_L1qQOdsM3eFdugU@K$zw-1Z^8CKOt)hS_?apW>FX6g|L(0u z`s{O?-)$^E_w2j-h&NZa^t1hJ_4&-msEHB} zmmKyRbc&b*OlRF*QuK zw(OV~iKZ=DkxguEkQydi>l`M#8W|>AK{8BEM4T2#bQ~sIU3O5M80bNg_3ttB{DhqS+sWO%X&x`0AgsRfA%&lIj}tNTdSn zm7)eSLh}(Cff*EQbGP}HHn`R z>R8x8uXdJ=w>4*zD?zz~Vi7olVxvzFij97@d>Czb# zr?oP;O+;o;oRV<#kQJoe*+H?jW(LKsfNihUv&z{a4Yn2OL2;tjgJKHo$XEIrrdks3 ztdSZNr)YVk?sGey8}59TX>aWKe9idQfcj=r&0I#}&w+ z*b$gPaY`hE;*SQP^X&_H#P;A^KgW{CL4vJl=9uy~{-a&C< zws+^Q7oA|8F>+!@kC8J1Jw{GTlQD84cVGDVY~!Hb)=30sfXta!TTjzs)~vs?$2oD6 z+VP2NmLBVbW^O3yA-7Gqe#3N=09mt?cW&BjO+v~J)5Wi3n4W0uFkM8C9i}IydYCQ( zHEKv6lT@(7bTLe~JjsANv2ShIS4g#3j+J zk{YHPnKMkcq9k4DO7E;RIpv6SFlv}i*JhZ`XAFt$FkS1N!M7v=tT-b3DjBg3MTXe# zGw#d~PW!9}a8`$5y7TP%Eaze-Ub@3{?ZOPfjSoie`eJ3;Cuf*WUu@eXqe(SPH*zyf zPxN+}o`^6gw;E|EIZRJWWSE|aI80A;7^b@#HU3RWOm<2P*+bQDB6>R}PkgZ=)jbhw zw$-;fJxsSD$uK?9B?U`dAlH%rn1!}AHO4m0t-y_@-lLZI!C|@$jl*=SNxiQ21IN>f zw+pY$!=hX@YrY`p=heV5H3009O^nOWl-71K9Mx7cBew4aS#!o z=8oVd9rJ({%CA!+%b`Jisv@4a29)5UO&$z8pVmpH8*{lmDr3u$S-Xq4Z4*~vEWSpD$(Q^^2KCvd;K68_xmg^TZ zIxK}e!gUT>?|8tYQ;ZlJOWv^0b4~jw$3$zVaz-E~lVqp!b}UWFW=+=2%^_pv-tse# zx0PuTQ(mngRbJ=cK;}+iWj*gz5RK%teUddB)M0ZNAnBrsg%cuT@<61MhEMYo^Rir$ zVy2101h1TtXRL{XsEMRdQ00fuIPH)!yu1dNZB86pJaJU?(=*4E0nd|xy~PvrMx@S6 zgX|+yC+ECmH4tXKyf;l+I4dbAbBAPN$rT*vk?@5*@9fE^@W1+7xA2trpcZ*oK9tB# zK^8-H(UJW+WFBNY9k&}7pYkq4cEhpvBX2$BZG`NwWAEuxPkGCbEzBojeDJ%U^6qSp zys9Jn2xR9Wd+4~m2-zXXa*n-UgKQeIb&l*FWTzqX7*G9|JN=Y5`9kD%9eW!f+X7ka z*n1JO1;{o!_NE~_2mgi~*;&Y%kUenX_Y08K8E&7yFCmQ2LVZk!^nEwUTL#QXAe+ueVJeR?(P`jbN z3GS~!_64XPf%*j0DX3|vEl@8&HDHf_>+!r6%7^+(#Hp*}wFEzY9_lL8uR+~}`dz5M zfLetrAYbo-{9EgJt*?PvfSQMT9%>8J8mM6?q);n>DnLC6^#s({L;WqNJX8pkgPMbC zLJdHD9n{xC#ZU~R^$``;whuq$&Eokx5kCK>HGRk)!i;~{Ap0UzN1Lr^`KRdzo_`wh zH}QN4>R&?*qx?J#^#W8E`n6EM3iT@N{Ww^M{D$!x`~|3OF#96-mry?q^;b|o4)udj zr=d*K~-V)4yXduL)g6! z^%ZUZ*YW(jP)aCdpmHpF1D>=6C=+0Jbnbp{J|%7 zO1rpEos8st$CEEjE$ozADs~)c&U=SNzX#Umy&vYYvbf#zUfQ`wd;h@OIdyXCbsViZ zb#fQ4xH~YncoOUTe*Ve*y;8XR$B=U^y4Zz&`_5Ol*Ntc1Pdgu4>_oE4$d+Pw& zUf$>N>ohrtrT8ii9Cn_>aW61>zxVA=zJh~Qaf9OvbEmd@@1f0|JG|dPNZ5WkKZR%Z zeNB3N;E7$QW=tU7alY3pbCZj+Q@gRAZgvWB`XXhF#rDZbEF?sM{!K~_EKDjZcz^0& z#J-YoT*T?UJ@|es_ne~M`v6VGa7@`QS=Z=&J@q@(Nde>2Tqe9{(({^6V3p(K4xX6n zEy(kWGbiW8M}+@zk?chaOfR>4XFRc~1OMU^FQUa7n|bZz5ge6tbzp4n$fVZ6?a1JP zRQM|cuVAzB%nO*09-n(Z`bRr>e&(MsRtG+eOglb~-+#Qt!9+7YCoe{^_ukz5c)4JG z>ZBw$7H;m~IgeQL_qEP@=?ue*{S~F-Ge_SLYo7P5124_ay>?{w6}i)mdAW$x{LB+C z@>pQ3-I~Yo(R+Ak^b3o}xRUU*g9lGcOEygII&~DM10a798wTioJKyZF#!vOe$NTW$ z_|(bcxbSshN=MQ2zI$NLyw=Q}d=bY};s%I1GMPJX{yd#3+vjaU92(eztBSCz3MU~S z7(-#-&Gp_3@N4JPYm2YrKr-XU%Q%~N*O)15-^Pag=rm$q_ue`>4~^%&=;4ODqv)-8 zyZOYfg7*@ij?ZC<>KI*!y_fkUj(3U+`tqEIHk|2#?NThPC%2&E1BWNPQEvkM$Vu5w ziLMMLWz0$0axAI$>W=*f_j29eGh3>vUWk+n{CJ_fn0Rv@{jd`Y$LQA-J`rz{F<6*e zob_Vw=nD5IkIbNie}i`%o$k4#p101E?yC2V z9=-$-eY3|^y+=?)k59cDO-9v|?T~oTjcqKXy6*h9h^Y3 z@k5O32`1})Pp!s(!_&*}y=iY|UasZwz86oY)FW~PUEditF2_&+=e^fp{}_*h_7=Qj za)PwyEqceM=I|zOg6eyI%R43qNqgQ$ykkg|dG8&b>@Y(lzQ4FCbZ@#v8 z%*%OLdJLzYw+9Q%8Q&693PqURlshe5AmwMcL zPx3r5O(U|D0ed_=T02w zC+fXBWdkRbp`cEvt@+-2ne(bCn$RZfc}x4Tfn|E?D6X|OM#>RN8A~&&2$uM-hfW^6 zBh8t29iM;KTQeu#1@m{|)0&xk*X%Rzdgfi~^U0W>M6HMt{8en=jj|SuKWZo7H@3d>24Fh>SH7~8pSF?o_NvA1m zm;dtjH%S5Xk-gO?pN!*yC*vwq9jXb{hU!3dp;n>d9L%BWR8PPTR2!-T)rDGxis4Tc zst(nJYD0CPx=>Fb9IAIzqqzFilksM-25tf=Yv||YcRm?=o8Sjj6RPvBC*#_;J{hC3 zQhzmn&9yyI>^1#0U9#@4c|bP&HMwsCTmG7LWZPe}k?i_wwvtQ!n%!i_Uvr3D_Sejk z`VU=|HK(CRIBU*3^3q42vT$d5e!U|U4P&-xf~3fBkRGy zWswI1%j62)SLhGiBRdF(Yz71IFN3RiU$PwxY$Ls3U^f{D1LI^V7&uHW1p||!&krn+ z)nK4S>ObVez^Px1V&u!fSrA>9feRq2_<_qHn$&@7;OpRR5Dmz{3W(--U==(8#>j{7 z0ylu@G!AS5-vW1nXz&Nd!8gE35KYm*0*D4;panL;bKr--i{Npv1Dg14{l2H-@Si~c z_i}MDWAJd#`)YmvgYR=lGS|9`={V) zm|IJF`P>F_CCqIlm-4yYWH-zm66SMFG7fVsvJ>RalPme$C9>}4u96KucZ+QLxqD>G z&%I5y{oLA{U?-p3NG|7d+sIOw8zWcqxx?g=pPLo)Aa|OqhPkt3EzDgc>tXI1*$8vD z$!3^)Kz96G?l-`8kXuiBh1^!M8{`g=wR~=YT=sM4MUMEAD}L@axfyaw*JhBuj`N z*+M#tIo_Y_gt?~3kdgxKUb5#)K zIkyc&dCnaIQJ!CGVI}f6q=B|J!kGY#5%6aY%cm{k3qFm?Ve-_0b0ZZT) z!EIm@90yN>P4Iibv*34wOW?=BYhW9^1ulWB;17Y`Z%6T`z;)mcgB!umgImGx19yWL z!3OvRunB$|JPZB+cmez|umk=GcoY0_@GkiM;41iop!Yjb{Jr2>5c7<=P2eZM8i?;Y zHxB+3I1QcyPlNbAb8Yay1+Rb@6yz~!J2lbxWjfo%GPnlLET$+lmZB&$JTfvg3E zGh{s|oF^MW;S#yz7p{^WzpzYp{X$oWaLHxA@PJ(P3y;X9ppg4huoV>6k?o+ckt_v; zt)%|L_fe=pkMds_15y49he3Qt1(tt&FNJC7@x2sIflcrni0`Yg1me3Yu>9bADO`mf z-$~&Xi0`Vf0-}5s9)c)O1(pXBZv1Ca-2H9T>0i#p_1{bKApQ#S1j^Vmtbgh$ks)5A z_5W4E8=VH>@91d|<#6;oh9GDfZp$A`();kYS8 z+eOyU#*+0YzDhQt_$Jwm;=5!kidV_yD9-)AU^O4FBWwA16Isv4JIO{qK1_OR;svt0 zCO${TYvL9da%Cv4lkI#wNiOB%Q)DL} zx5?#ve1+`h>?}*%w-xj$a zmj)nj`tdfh<;UY>JB(*V4)>z>>&5t*a5%n6w!-)!=>_pn z0LDSQo-76NCbAmD+sI}y9wTc(yg=52_ySpq;u~Zmh;Nh4Abvo$f;bnF#dtm0hJWM| z{3AO-To-vUo+Oup_?(y*;||#k;=AMu{KL0lCM#baa*<$&xI<5_aK7@s0nigBA< zEykBfZz#S-HuLcUr~tN5Pmn87yoIa}#k{ zgK|$Up}rvXANmXN`A5<(h?l@N^jAUDXYoxC{p|QIi2iE)2t@xnW<801YP|OUmi}hE z2}J)s9s|)2jSqw9cgIZ-{pk1{hug4t6e;j-pdWObV;J0C)ie0(R{O_Z;9vb{vPcqi*tWA7@STVLzP?XUCW+BZ7>xBRE?(_YPg z`XO2OpB_2_HvFg8lWqU$O=Q!5x<=|hg!44VzX<1P_U{por^jKAcs$MWfc$%!{dnZx z(~K9&*V7G{qaA;`<@f`CgD&+oKe$V_{onyv_XF=Wu;B+oWXliMk>;=Fmzqb#UgLBWy z(qRzacc}?B!E+$K&(b9j-(%@2*aB~Ys259jK#Z44_d(QurAHv@y;A)8Fz5eD8$r}_ zr5cEOu2ct6kCY}s)K8_;peY7Vq6gp5`Aq=Z!5kBsQ6W7FE@y_C9v0otV^@^_;ClS@wcJ>JFv4&*?SWH-Gsfy--S6; zE)9nD6l8Diq^52>;ek5686^{dfr~eo4t|U~Ma39UU-pAnI8Km7ORJbj$a~A3NDW#9$U+KH>9_OG(cy72|=;I$$ z{(UXdWgPapKLmSFtshnHJ8irJ>?}j^z5W)$Jq3HE&mcZjpH=eGPa^F;2X|1kSNjso zeg*OWC8Pp}VNh{Z#k{_u5*f&i;C4Nit0V_ z=GUn&dEO1O>UqmM+0R$y6+fPPw>Z41@I791RG!k&Vs|>DR2#V24sM3 za4mQNEP+el2zVJRgIB?C2A9DN;4N?zyaT=iTmioYd;oqc_z3*lptm?2{~cg0xDDI{ z{#|f4_+D@l{CnVOum-ll?cfFQ1@JPs1MGr3!TaDY@DT{eUkm@U3^HAQjfvIv!^snC zSWd$QvhIg1a>)DK_kd8WKZ>xo3VTb`e-!HD%I-3_@=4f(9oj3v-q_wKUdD6n)5;G0?0$a`ul_)Q zZ(iB^g6H|0KD&nfS-%FN|L7kA&w`U6;_IIR(a-eHfK8C|2xv$A^Uz~H)@Q#N^UMAv z=+O@N%OLv2{vGfPxC(w841aPB`?>x`5bcl8el^m;AA=tAynX}x8SoT{_Q*d6{w#PA z{33W2L_6f)0?|(T_rVtEU0lO{roR?MzuMmjqTlYe_7exQVzYn4x;SYUo z4f_@T1`zGOzXe45?jHhw9&Cc>U-)N1^e_BNplAN-1wTGdebFzG_0Zo!mWuvPa=GA- zldA>)Fc}y9S<&bH(`2{cx5;YJzev`6zeC0a|2o+S{aa)+^zVv1^dFG5(D!}}>;(Q= zvRd#rlFNa=ja&-+I$8JqCh3L#8FDr7FOVy~e}ya+{AIG?`?tty;NK;^g8zW51%B?w z!ByX1N47$LBN+#NjcoeCY9t9=gj=jVfX35xY%;|_jn`d3kW|Ie|G;yW;>H5SDy zuS9Y9e_||;`ki&X@ig>GUj55K+<{^+r9mASQ2)Io3`)E24&zlQKDVC_<0_Q5Rp}{f z;JKw${GKpw<9QjRnfZ&y;K$2hy!#7J#cTi3ns^=5dZ-fA2B?ito1m&tTcEZ=ZG);o zG2Yp~QlCHCx%vB;L-`8c`ClRp{w#{GK&`{P${DCtsI!OB{vllsAzdzTjEJ$ZQD292 zeslxr{zqZl{bR%ziv8Tu-7t>-G>n^2OlQ=m(e68I;@<)ffw#a}5ba5H21LCdwL#Rc z(M1sTXw(5wFGe@OuYk8e)Q{195cOWP3Znjs*xsPNio!o!6aOK&5k$Qd)j-rs5!)5i z^HCl8UjQ56KLMLy6J)#c55e=$Ujf;^pgoH&LyvYTx&fm7iB>?=-_auw^>H-xM^Z0F zB@pdUv;{=F5Y<7{w^0*B`xmu9)UVNb@E5^LUunX2f^dq8a@YCP|_&!0!hyg6F`i;Qs>N1b+a$3;r6o3jQFN z`_nb?m%+8*Z-8uXe+b+F{qKU?z~2K8fw#dX*apvl|08%2M7tVY1<|fXH^CnT?}6vR zx4|C+*ZtX=cp2OR{x~=e{yx|Me-k_fqP>pV;016A{0w*%M0+3cckllRya_$}Nzn>; z5qtpt5tv(9!+uk=4n)5p+5)0~5gh{m0GtMwz_Z}z!3*FQ!0RCTNl_R4r{I0?*TLMM zuZjO>koM6(h+^n}7G!(>MX(C}&w=CM4X_E`1lf*X2G2l`{zKFTQBA17njc-HzV1g? z$c7&+lTAOmE%u7hJ<%7VRWdF{;XemkeiV~!KdN=XB|kbuF8k3m+4Z9q+3}-uWUCl0 zkt+y?T=k=Cq!&at$T*1Zkjq2SD!EdO-X>d7H1uV#U5qx8rDC*G7(|E2Y7kA6wIDi0 z)`RFQ*$ATZWHX2^lPg2fb#k>Bb;))Rt&puCdYklyqWE{gcqrOHHin|DWOXRoO)f{# zA+k9X&64$@s6{Rz9I}IO$VL=hBbS5d7TFz&R)j&cO0EP^?)SjeAX-a$VYGp)7NaV; zRE%n597c7r6h_lzEsR=ZJ&Z1p)iAn3wxj3fMKcN=VlQHflNqAg^n z80{w8VRV>`qiC8eMbRnJi=wk+tr%S(m%`{0*$JcTWEbg2mWHBxWNj#VL@tL>`1>>u zqjls;7;Pd~!>C4j`KV6D`Dm6b<)hPNH6OLfT0UAL>-nfdHuBL8vYC(WkgG${1G1Hm zysv=me6*Ha%10Z?PCnX7wvb<9J`|0U%lT-M?B=5;xtfn!WHpM~VqT0ckzOIXO2&og z23apgx5;WDx<}Ru(L=ISh;n~G^FkDpjY3o+R|?T4(HEm_WU~;BkxN5SL-bM9Bs)l7 zvKB=b$$AuBAzOv$8rd#HH_4?!v_f|9J&-H;D2MhD{jF#nxs340ZXw!An!l2MSPk;m z{}0N;{0%Y=^IftO=I@ZzF#mvT1$pl;!FG^eN7ll8m8^&Ptz;w2?<7}({5aVS@(r>X z=9^?I%%3LPVg4Ms6z0#9bw9sEHvIf$vgzlqku5)ei){P(yJXGJuaZlCKKC!cMvz}i zcKrMnvKi#Z$Yno&i0u0LNnw~@5IMpnJ3;;uxf15Di#*78MepbDk*j|GA?XGA+ygL1 zIAkfvm&gv@o2&-;-DEAuA13QTeu30~=-=eeL681Tp5tcpZ}Lmfqkog{fD7Oh?||qhLXlFhIp%vAvin3e*cCHid)E9P^^>npg2i3 zg5m<%42oyTR#3b^dimmIvK=-*1YES5l&v*I=o z{kvivL^&-^f-P_XM7|f#favEIFMudt#Vg=P!RsK(XYm$@@?2a2QND{0L6qxa`0u1# z6*)hGeqwPw^k=|LAj)U42BQC2Y=9_t#U_YyRXhu#+!mKWl-ptlM7b^A2JxK~AA%^q zMb4X{{1?N2FW*IRJ&1B!Ngb7SC#2WNx3I=`ZXcH z2|3~?e*=#EHspAJ`O7)-70B^^@;B(nS0P9G%Ac>f4FA0+V)papFL2~BA-;HPeXtDB5y=xjz!Cv>9;dVn}R)@af=#2+_-|j#hGi~^ecks;g*z!8ozTlZ@ za36dGCGU-8eIXRzbuG9aito1ptU~dfwt{0&{}F%CrvAnupN3+1r@?bj4DTY?fns>e z;B6>|cOS%3EeQ|Hvf}kn3~wX21&ZNq1IM74Zim5HC^zix)H<_3D#Vbs26YN*>o*|JVCNB7`uaFN1oa48H!gi6?0r)lpNIVBNF3wmpZG3h zOY7r!+kb4AF!tu%os|vGc@LVgDm-Ap;DBmVag)){5v3@DXTnf|)%IirlU*1SA2jwkfGc4DH z`SKW9%a;#}dA__ruKMM3WIHHdBI9vY&(uv{Xmh4L1%j&R6MSUyZPgYqe|f%g)I%N@}N<(p(ZDBmT!`SL2c znlC>h+xaqj{O~_tUQd?tz6MI0<6u4ErJF74S0nHuz)Ux-}@D;6@PjO1TE2o+^)nZEzNBfoH)_ff(L%yj;Et zqTVmx1do9jX0qNdqj_OFP+l9y91oW_foMOyJ@B)bTpxgm} z7Q6+15nKU34?YCZ9+Zc^CT4q3UJs%@C~pDL4wQF;=RnR^V4k3S7<#mSCo}s)R#C$+`6NveM@)(GDfN}%G zJV5yj_&M+jhk8vL9|!p!yx*JWzPSjy(}+4|8pS6 z`Dehh(3|o?j-ie@1jTxI5?p{{J$wc{55;=;5_k=Y_3$n54ixMCd*ItptcTa4j@t+o z;(05$8!C_IL*Oh_0naV44dvF!5X*ck!<4@-72>gXAWl%!Q_eW>uMV?G$eY@Xa$~jx zv(u2bwHf0|C4aw+b(4@^(PoUhF>Au?8sxXM8Q+Cz!M_!l-G%(VHe(xO;?6w;tB}8~ z&G_ENUHdB96x8WMQ1plCKy&_;V73nOP1;O^Rljn2H|*95m2*PBa*?bTDp$#se5EUT zzjB{!_!Vyt*z_wg+43tJ$+lnFN-p`8akArAn&h%yIYV~gFS+7ZE|aT%^rxkR>tN{4I*l`gpyR34BW z`1dln98@-tUHC_?1eL>Nr%+iSSA)t~(hDo+$vCWBB}-xDCRq(DD`YLKJS6L3B_5-B zp;97O^OdcnSE!7Wjj%FJwhNUrWT{wLB3BEQWwKkStdPrvO70bKrBK;OHp9vo*$OMO zWIL>!BbUO;6|xgnZjsAjizn$?c=OSXoP!@|6u_HD9TbwR~lqtmi8YvXQTxBAfZjd9szSTqfK3$}+i>uiPc8 zh05DxCtr!{;BvmQp6uo;n@Ih4)blD^q5nm23|s=I!AbB8I0Y_&$H40#>ix<+a2k9B z{ygZtPwMl^dJtp6N)<%?UD*wy{;te|sJ|=cK-AxrDfH;3|lA zq~h(DdbP41MEg_O38KBJ90F0#RTjVwcpgMMSmE!tXa_6TphtaJxdo!$t~>;Y(GFD>K-9ODb0F&5$`bf1;AIf)LghO6OJEm7Jzu#CqTQ&x4WeDB zgyS)PU#M_?x&?B6`lBF!4@Ny*Sqt-D0M~=xM|1ED&A~5%hd|WZl_rSsK&1tK96Sep z0%ZGg8N3MnC&3PQ7Q7DreefRmDe!F&?OKL$R89_>?Q=v8U=E9*eC_myoR+S|$@@Rz{_ z5ba~-B8Yacat%bgS7Ez^cCT^=`m5l55ba;(5s3D$62CtwpC~88)96Sb|A$Y5D3`-+ z5an{X1ETy4-vCj5hVOzXU&9YUl-J?-15z%BOCZYQ@J0~jad-%u`x$Dv2L z9&Ugrcf&0ZtrJsZiu-*JWDS5!#DW;9e?gGA!)Am|_ zjXl(BBMXzLU)sUQ8L}0QoF|vVkt<{~9JxU@f{}Y<%^&fmz`8%Oj%@fN8_8-ovXgB3 zBZtUtFfvOng(GLkmOrvYdcnvQVK}l(w*8SVx#W+mkR5+yl`I7#xnp2G99c`&!jX++ zH5l1OHo}oHay1w^L@pydvJ{TAMDLGWAiMs^6>=pQSr+;ux5*mbhm3=fRbe<1z7BmS z94V3QaAYgl3`Xi?Js6oLmx7T~WC!oT-);0C`Y|JC(2r_^T-ShhXXG60p+7Tn2}HX( z!hX`nK(22<`!})-Ir=#x>@T4m99e-L?efSfh<14-oR^V66pp8c=E@A(g zKjtGbGb23CiLj34VXv8iu! zq7pm%_Ha~UhHwA62$8iq`p-{|tkv7Mts`rV^le&Xt;xRq^U^&Ks5OuK%xkSRSmv`< z&OiQ+zXncq{(Jpq6)zThnCoA!_wDh2JpZ4Mhi|9GBxMcrKR+fZ+qY>kNn3oI5tFpf zw^@-%xxUSgOu8PnMUx)*Ha9w{{BUf1Oi~Tst}B|Pgl%L}OW)>1CUy30R!mZcZ)0PU zCi*rzCTW3hg{Y);;m3<5<@h#GEa|LoQ=^h@`!*vgDPjaRGb$<8w^>n1@xDzflBD=H zqexOq-^Le9>fzh$sH9Bau8T^V?%TtBj&F0LlD7CZHah9BZ{wqra($Z_lXN3&izG#l zLwe#(|n56!`Jsh1h(YJqIn3tq1?h~()va!Ugq-|K@ zQ_^89@hIsMmUWl(0E^!zm3|={KavzI@gu1zmUWoa8B6?2>Ww8{B#p$fZj-XGtk0x1 zSmJ8ZK5Qm77fT#TdVpo!CY2u*UbjgpSmH=hODyX)sRx#Io0Nei-X{6`b%>8i6S+_P zOPYrzjwY?a60ehTu&mdl!`KXLE|z$abRC<84U7)Q!=z$Z@<38NmUW(V7C$3iCSAu8 z50V1-$*b7XSmJL|3YK`7l#0cVlR9FFr%5BRe~o8{ANhW%7wL0wEzE=ITz$Bd%C!L3 zF^@eGdui<7{N3R;fBU+B+vmi3jN|;d@^rrSE|A>gweaU9`+1G=OwQmwc_euZmVA&r z4@+K3-iT$MlJ{X*SIL*K%u8}aR(SlA%VQbmWIz89ACvw1mvK&3c${%gZi;1`ll?r9 ziS5XJ;$(7vEaR9w8_T#PufP%~leb}slgY=ij9>B%EaRT+=MUm!vY$W5JIN6JKz3!VO&#sydIv9l!;izJ!Li)KTlbPW!_S@ zVDXcbgILBrB^UeG>p8xZq5k&TRSzD$7R!KU2DPl7&P!5@O1xsM+NM`H2I;A|}Z5%m2L{|+wW zK7JbX{R=-0ZsR`dAb1MPIu2gPg3E$|6=A;(#$q$LUjxfJ2`X6DMX)6nzYKQ7vfhLJ zvG{dxG8VrM`nbd&oA5;_63kx0{oKgl8sFZC3~uvnAS$@ex3N*dT;Ik=1@HQ{b&+7{ zrP$OWLBY2|RIq9IepE2cx2>asBg6M2gIVGGk-=rYO^Xa}^le6DaF1^@BZFss8(SoJ z+qdyWg3)hdvm%2ve47>(G<=&86>RO>%&1`R@ZY0?V|<$(6`bwcby2}JzRigW?(yy6 zsNf~v=5oBgy%80RU4{)r2jhJk8y$3f8y_8P=UX8Q1u-VuO*xT5@dK3rO(m&^ViR%rncexgOFaP~(VEy;6gZ1Cv z!20js6k7t@8SB4)2G)Q7iCF*r=V32KUdstq*}J$?!{HPDFxve7)~bPT+&*wTnA3l7 zVQ1S9y{|u2yl2llwLX2h{FkF^&2K-xS(o*F*500RX!BR?(l?&`tjm$pQ_`w*ZZ_l6 zw2xX}ICUa7ckk<8m1=4m$HrZqJM{d}uZBNYb3sdS>7p3t;jmZI2d7>6^tIoL-jx@8 z_3DPT9~FK7$GeA1#>R6j{?)(u=aGG+WUPSoul~hPuU;ue{hiY0QN8K0Nqq^C1l`O@FEXiw*0I zcy7|34{Nw5f@hNFD(0L5=Lg=IzM!`E`?NAk7M^R{BJ{-Y2kSpQGj2k=Chq2sFUBlN zn_qg$3m@%UuZ%l*HF}`9M_|N!%^{{3@@8`KhfIw#^?5k()}7$O{wy(xBEo>!%q(x`tbIdqC+29 zakc9k*Jr(Oul<%;F~PYj%h$TH>bDd33s>y9!7BS!xjAWHuIu&T4}Hw&E3JQzIK8sz zOJ6)97HYA&Wa0^TNv{#Za%YYE;mz!g2Wky@yLH+oclPVzgQy>0sqoz9!S4qw4)_sQ<+Eq>R?>#)cP*MRs{=(AB9$ ze>&4K;^q6-dwg8^{OW}EE96nFBOWOyudTah)zoKZ3@#H}__ulGla7}8w(p#)W17t| z%a`jo=a&PuzuEs}%ja)&`E=83OQWtYosc}g(4^w!>x@`*(LSWrYuq(U8k11|^XUFV zZ$`}9*8B;zSg!$d=VnCJI~+YCa%Wf_ug4N<(d2aj30maF!J{1&JSby{h%-Z zzCp{|d&hR|Hhj~|mmb^IX21Y7ua#c<*;@mO))p!?w7%F-Va`wIB9s{~L^p3!eSRr> z`SzHCLl5?v8vR7UT1P6M&79V4?;d4W?}VkNOYF}d^}qjrQ;byhtG6G2EoXVw*$*F1 z+IjA^SLa>bIBVrI>rN!kj67VqX-2~EbCtHdfAYeij9Tf{e)z6an@LOT#HG8lvRlpl z;LR>M{hny@^q7?8pKq^L`oWBP_hx((ac0-nGgn$3fAsV3C)7M0Q)aW$dv-*C;lK0$|HAx7pD5{Ltbl*@FaDYoPL_<#!TMMK z^3QczBlX~bs`qAJ{%YvZm`-(fl>9NRX{hIGUPSK*XW+>zFB#I@TlKE*?{K>FiBfN` zKUm?~jUCmdx~p2>8GicH52u}25}9&w{;eO&yzy?Xo>}5(*Mp@`>jiFadA`B>Cu_H96EC-@dGKJyTkAct%XIaz8}${$)%2SnhY%XVEH2z_SZIkJW((3*5s4@D>t3iut@6bi(k2R zyK$D>RrmOE&dAV`)r^HBx@tD?k z_0Zhn;`zFF8-?zcdUU|@kxMt+acW0e=Q{mRNbdc@l~;0>zSLsjZ|7c~5S+B{K#P9D z)&4ym3{gJ2kyvrXQ`bsGjVZJ&qF(jtUr(L*VEdNeFV=l-;l%@GUrQXh|7Pu>8xxh@ zcP>4%p!;g8XN_h3X8kg}<_}FCOx^KrwV{Dy3t!zV?Xy1?KN@m)&-PQ(&r2&ej~QWH z`u2~K&%gfm(5K_J|9AcWH&6awhm(ZU?2Yh=H2=!Q&xxhDHu~o8?@9mbala<({69SI zzh>zF@VNiF=*{Tv_?y5rmfLCA%H-klf8LJfcKn~Whk~P1xIL2Rq;XsL^Y(P=DC5uD zBf0IruOLdYqH4Nf)^E^|U&C$Ev{~~OEgyfPRqHlSwr$tG!&4ofekQ$J_a4vn?A5zZ z-+uiE417Lg5I>_bZ1{+gFN~@e^xwn3tgo=6(G!ab? zHDBxM$Blnp8t{1qc)y{6!GS)3f&6X_zYZJdA9#*;9>{OZz?}!GhMyzwn?C}-D&yO3 zVSZ&)pf0a%$a4np)kEn#{{@aFoqI5>hDriS06DZlnt;Lnll!7n8FBl&+a_U#y%=XsBQd@lSqN93Px{*3(fKL2^v z|9Q^E3k>5mEjiy_;j{HUAcOPEKOcWC17WZD_s8NH@0DCde8}XNit6&&0{>JV`#KrbA7)V5}xPb{NICT`j_2_9NW?n-3IDzP|8)dFM?OHhEEbgJO2zCzD*Qb6N7?+BoqyXR@CR<>-=6Al8;|i{ zvsfQ&+5Yol3k0GIz>{d7X@|A1wJ5!~UQUnKpU~UuUG-l29DRZQj{cs0R==oU*YD_w z#-oO8I7VM%kTJ@bV5~Q`7(0#6jl0G}Bif8JLuO;MmD$mpWWH+7H5Z#-n8(d?=4G>r zRl}-lX;u%bpEcBa(OPYNU~RSbShuWuRzW+)9$}BQU$L|7?e?ekA^W6V*eT|eajH5k zowiPA=Q(GV^Op0rv&K2?g+k>4VuK#PL{^Qv)|K;S5T?17zZkgOaod36NcRi$lb5 z;w*8AxIx@09uxD#pTz=FDJemcrTS7^DP0;Ojgw|cOQa3bPU)DGC;coHkW0x4vMkq^ z+sf(k5P6(DOI{*xkax<*E^0Tmw>nmxsJ^ByRF|nc)t}Wk zt*n-$Ez#EC33=Krt$^M}U#oA|59(L+NTaf$86l%Rvp&w4X)H1J7)OmCj3`qyo0%QV zuI6BKv^mpUYQArNY92GcF~2i!oA=EatE%N%ZJ6^{tXbAt=KH91$@~^w$s%a=uC6wINv&VoWgDyw(`XnnO8wei{l?E~#|?SyuoQ7@{O(JScHbV+Zl zx6(W6>3Uy%oc_B0f&QVsi@ErUm3V=bSkS0vm`1A6*m&G%YdmFiG184*Mn5CYtY4x z+(~yvI+Iv!*{roK&gaa;1E&=8Ah~Va7u{Ffcipw_hwffx;=Fs0l~&mcdJVibUT3eb zH^>|9O=h)admnfQy~Eyd@09nzD;z4zoYW6J&TI@1O$p5ly&YN~+7|je^s^5T;|m7r zFek-@L_riRAys%vNE1c~FAKATg~I#7C&B^YlyFJ7Arus=i$Sr0*i?K<93#FeE*7_l zdzh~u#DG*nswkzfrrNNg21=u)S6EZ;NWV)ZKsgAF8|6FV#FXUX!$z zT1Rc5Hcp$Zy{)~cZPWH@7qs8B3dGFLdOv-nK2guom+I4vWvr4)=HuowW*=6@F7piQ z;RP$&o?_3o7u&1s4fYoMGy5z1g8hSCz$xXFcWOA2;S1rY@QrXyxFf`g)%bBjN%X`PVta9r_!8suy0}POEp8(2 zd?}t2FNi;i_r=1D(6iD2X|Oa_nkLO5?z}I3BJGk6NoS;Qi999bDspwXo@~pH$)n}d za+Fd@sja9=M`f6@S}COli5+7YkB#aV>O-}JW@>G<5!wuGt~OtLSNljis$JB6)FSm; z#Pno4Xg`K`t+Dsow~6N^oHowW&U9xUzO~!A;zYYi?sG)$EH{u^Fr1TY{c-)8`MViN zD;S99Jg3PEte6t$ZOn&1LnM^{RN9 z*VJq6^&lEg^cHz}#9%wrIMj*U%1N%vAJ=w5e_^sPS9n{vFFc~mQx>S% zv_;*f=BRtred;i6Wx0^fFt?qwTPC+UxzK&JQP;L-w? zBMFis8ImKV;!jPbmQrh}ozzj9=EV7*bE9COGI4RTm>_q;&l?!cjMl{YuEul5BqPgM z3+}pP+&3c4N6gZu0q$yNb~3w}v(5SDT4w*Kna5oJY!+sIOOb_Zk%yaFt*mFr14FE_ z*2~s(Yn`>%`hr~WhgIILW+&OY-G(vmWxvQcuO&9^VC7!0zqfDLzuJGWf-5=I9nop# zw01fpx@4R2U2HCIvIb3yj}iOz9s)IM<_8$dF4?>R177gG*&t*-Ic-0RAr{J07Uiy zIps65|4EQo3AG|9%vIZ{X=*=pFt}@l`o6kZ{Y1U3-d781MYPgdb*+{rXd$h+)>-RL zj(L%o@*0?Ih4#L-8PEDsI}JjJ)646R>Y|=Twi&Fy2tHqshIlLeGSHgvNr87Lr{8v4#9nAkab{FHa#$ zt^(71CZ}sNwVPT3NN}9KUhi!@Z;Ul28%vFqc;8;*tZ~t}1@6xAN8D-hvjy6^&YnV00nr6Ley>D%{J_P~(V*PFvv&-579@p4zZTGbYv9@2eciQ_v z{yq{c=)^hI9F<(y!s+M?btX8kI}3`5=p8}7a6O~<=F1CdkeGtkqa<7k25|k802kCcGx+#Oe`g8EAHOj}zXX+vKocf(wK#SJOX*D%l zYoN8!y5b*SY2Ru;X+`u{Fl1f5q2647TJNd9r7zLf=^yLI^)vca{jOfzC}Y$xMDToP zFyk=eHGJe9<9%blao9L-TsPv)WK%O!K`!ZLhB-DIRaTiFg6uDlKku7mtjgpIlX%j> zdd?bbEeG3gBbww|-!Z!ZyP}=I?7DV3@q2_l4vfFlUQawZVV||H*>~+EM|K)e+x2t? zIAfftAcA+9-QCW2&X3OTPL%6cce?wS+n)G7$Q|o`;C@65IqF__e`a=Ly`*sbXyy&@ zh7vbk_1^W~^FE=*%k!>yzj_fNBNPJvcci|1A&mc5hBh#}UxGM)^XFD56zIs@77Ueb~F(8*&{6&q>DzWxO<}p)y1vIrx+p6u-j%eq!cs*Iy^hSCoy_-HrAFb!;pHTx` z((kj@=$%eXFQl9;~K;)>_%G+i%({?9KM)_Hp|nxKwgXr>WC{dGc4`OxE8q=K?FR zh#LzUsO^p>#xG&j#rQccwGhAY9thZ~tz9!(SpDqU-h6+&TNet~(6-3!v_fI*R#B`e zHW%Abd5sY#iL=3~ABxkAt=4E~bSRKfC{UTF_LH{~dv@uyiDJ`?V|G{f4eIgyzfF)T zDIN3{<_z-(>km5^8t;EjRw39)G>B3qd9ZvRdjdtQ}vjmy8YbUp+I~@pd)`y5Kf4xtduxqrLvWEaT2svP%Wn> zsvBS+M7=(vosOqZ(?20v^{0w0i^slb&9(;G?VS;zjRjPu4e-0Q?jDyn6e7Z7*Gw2D zOcz!Xn|BINi_^s2REFOxkEls%WAzED?u%+At(lgl_17=!Q&|(An^(=E)}vN)tFILd zrH8)v&nq?mz3K`Zg?3^$ahbS6TqCX%Yf~@XmTJo1D*afoHML&aTCEe2^o~B-*kRl= z9yMoMSEzU@{|l}1UaceipGgSp6n=qaXe$mCUxE244a(~$jZq%gC+IVc#l|(`3G+3x z37Bj={K#hVVoi9i%AlvYZWJs>6VD7S34I*;ArwfP z7s$vz&e38>Y9$5KO6mZ0pf-o-b4xSyhx$uKo{?w@=F8>=qW>>u5*fXO-Hf{K4STm; z)|u}ZTH>ieREaM8oxJef@iVpi#hVYQ1j#C*t2`f9D3gZd7cUaC%F;mEKQY(NF@hzE!9v zv7HaiiU_a89^~jac%AOXbmKGQ6Z5BEr487sYDw&)QD?OFbEk*U{){Od)4)GN)P}TSu&Pc$~scE$X!bn-&*c-y_e;Rv554lEO%7wgGux>`r!rTb|=RE>VU}>f>&YuvmhDsx)F;b>9QJO4G2S5KH{VF|> zHpmC%3UCKcD9w(S}v>7#xXTg*kU=xp+ldazNExV9Y z+zC;GW;#1KkAPdxeHzwjw_6-G_kD7FAQTLZ1Fszl-Sm&=Mubmq^M!lugbBjC!d5tu zt3n#=$6}EFcJY>270#m{T*qGNjuc0>eoy{UE&^W9P^O2`)CWYN3&bE%eU_?p2h4_` z^@NqnqJm$p?a*Rj;=1V>dM4wuSpQnj)qm3e&}$g3(Fr{K9(d`#p^|H7fPVW~uMw#h zf`-mB-#!wOY|DPy?oLHD4VLYQeaij~uBVeTm`pGoJiD8GdLG;pNj`1hHVfBHFT2y- z^~_mS{CvK*1s3gsch#F5y62y7pl~>@2vj^1V8{xH(c*P6mdH|GstkX8Q;LTr?yvZj z#vZ*bOl@VbKmi!o4c1Ipr`vXMrzYsDgR{_i*{$dWP~ZD)f$E}6om5(Kr9RTz(s`*X zSag%}iz2C$s8epLuWReI@3a^7kMz~%*X9^+h4(x$y)gYZ%6w@X?DYw$tgOLV52Sur zDeq^!i}0Trto7x}VdYnj=xxn2#+aGrM02t^oqA!mIqx5=#U}G7vpBK7pOtOx0GE`a zHdx~9a~pe2!xhR#_^)wYa z4tj~Ojtl*9OD!DEKW|bQ2F17G!%9O=H5=zkQ2X&qtgHoh~G%pvA>r>388TNe&aM?RyfQ%bykx!OV2as zS(hBeo#-BSYfyQ8@0AEi@X{mUqOO(0zCIjqI(U4XJJap#?WInS3)Kj<3_TlqHT0c-K3Rpsv7rj}_)J#fuR?us zBs|F>@i#F6hGURaM{Y)i^R*nUBvLD{0H36)57Y#z-Pzhgx=+7ptzl0Sz)mk2*~Tt% zYf&@NY|UuDPeoY{nb=*F<`!y*lKu-l5h0F(1zN@y=o$X@OK4 zZlSUgPd$;M)KLWGadnvb5?z}-D!(dPd#$$qtX{=oa^nBA0w=6f+x|6JV;#*_Z7Hc2h?s z-yS0V{OXks384Qtkj}y$u+2pGdv}cYTIf7S97!*m&3zp29I=$rTDhlGQQw3S(X?l%WPjD3 z0trs019=Re2pTUNzZwrf2gzm~`cB`NA^J%L?04*4_8Geh5$%Xm5LTe7Yr8cK0$w0KGSHdx=>}6UR(L?1 zsV{bf1qj0Lr4v=RNWEayKcdS}U6oZ&-L8()?rDehRO;?;&AQfnYa{sN9wXnw9&N|D zUETd|dGCeLKA-gxBExyEEc!JRqK=HVsG- zQnXY|`YSW!bB?=+FyBapVH|#xe^MH#&D7Fbd9AV*uhq~}v^sE4ie}K4O4T~+Q>hsq zF-pS|q|jR$P6f8o_{O+l6gRst5>sK6FPX9QGcv7tR%t58%67b6!%ng5Q28siVONFk z@96Y)`m;W&6FH{1Z<5o#cO&S|##6ytFfuE>^WF_lqGQ)8)HO6BGzq_YFCWXLMuvMG zbp%IvlIr{|VTrJT89c_g7Ke}5#l~=Y9mHPLQ{F?q~7rJ8PZUx zGd%hR`gHr`L-I-alKfDv46o8s84m{i2A``%jnGe>tDdJb*I4VKji#@&3--2^-a+4^ z?}J%8Of_;!A51>oYka{d+&0F;v+p)*TOPga(^j5!*d7InO!4Y?f~R-}>{BW|=%!vv z`0;jLNAH?9CG>iTy{X|CSrX1+6dC-0@FDfrFJdd{IpY6|(#v%6cS}v>PB4vc%8RM} zK9WC|zmtEH3(|}6`@S~EJy4lIj#xlmJ+7Rh*PE+cqHlFwNzhCy)jDg9wwKul>{PcA ze0@u|wcF0^=yrC~+#dAHZ&RzwMDDFb$)BhzA_F7w*%!nlsV=MHp43ww5RM!F`)&~y+;@Hs&&J9 zNI$NET^9~=s6Bz+!a`W8Lt*aYy8XM|h)&3>Af@eetE#%K+&*+0=DSPjfbO9aUD12S zdkfCGXs9_1;+)X3(5ld0^03cTvj;Vtdn&?Ex1p!mo0#yT@QN^>7<69vR;VD>qMO-C z{FI)t&ljCgE5kV`bQD)cy`&<2=+6z<^_VFp-2!%u+jn9_mkx8!ib-Ph9ebw)k2i8+#}ca91_*-FFPp9IlfMuTzBsqHGvW+I;6 z+w1RTz{ZV)$GVtOWZylZbE#5ZIL3Ob*oS!4ZwYx+_TLNB) z5@W@(tm-s8p(;I+G_dGzQX#nr5qcS`po`iCeM*9U!+6WQU`6BA{m=wlcVUdkyODu- zI6X=5gqMULi4sM{@?sMG{l}=j)5Yh-7hwe!h^xp{d&SGt1$R-+ltzhBm%j06MrgCN zUpmdFm60pcm8(k+w1NB#++HT$xI_LzewrTWSS1Q{*j*h(4}Y$@2oKCrThI;er;P%? ztkZVW0lfrLd!R+@CG|x3qc(8#Us6^5OnxnGR5fbD57noWGu+68liz6^pz=9Gjr|=l zCDN>9RwuK$_-P@OG84!$JE_DTT2*Zmj^}$j0E=YPo10DTSkf&IJKEbF?k;oJ5m~E% zfjW9q80FvT!F7W-crUamw3|NrMSpy9^7BV6p)u?2ePJ)XxHvqpvG@##=rwUUoWeoz zD`L@2v4oTaGOABUWH|bVC3Hf*lD?OcWeeRy8zSi-G%1Va&CJLJ^eBJGjfqHo$@yc$ zeUCSkg~}>rqq1FTjMk)wItONL8AvKmy$ZKhPisoAbOCtwB)C zCfAG<^Dz_*Ls+k`nG5M<<-j{!Ht(6mtZIx!g1w0P`8`K=w{ym|JR6lyA37R&-b0iI z2_c#OFP(C5RAj)x9}J;B-A6ytt`RnYNTbB6^mF}Qc?jm~X|m=-@hy0sfA5ml;Ox_- z=ZVMTr5SMc@330({-ZzMgHd=_{*a7vOg_g*`~+WCNGYK-QXW@Eqsn=M_`E{d1d`9C z6B(!4WZS3I&ggD@43~}P9HH-11pdAQ(5wBpV&! z846oftoqhyV%JSP;t{)~U6p>gYIi1fjihHc#hy#`pJ)F>+$u;7U5PrcBI~1$m+n1J z2V}fAgKF{}dOth7FHp>ULq@to7wFND9(s%j<|DhT&>Da2aw7wGF;Vd2qA(67XQ8lE zc#jqOsc;<(9W6d0R$y(3aAf|v8V~B24`Z6F93Q$X{(;sYnYE=zSEOg;3Dj5p z>0YeSKBkNH1+n@veWlv0j%W1&^svT)KO}SjZ2A3omPgCg>V2&@FKM-Y~u)0|Tse(6JpMVBa?RIt-=Jv3C2|hjr zCVq=^jc)uHjyNhXo5OAq?s#qm7i|-JNzR`tfua)q)**`|K2I@(z6 z6U~oJ_4EcD#Z!6@808m0*&Fnu^c8;6E1~aeZ}g@sbjJAIsAje`(@=K3Wv(jlZ`F*^}YSenv-8#xuR zj*kl0@+E`{V8hSo#~hIKuwJfpvHBK&Cwz9?& zI@UX>7V?~%^x6|bBAvia{`(41VGY5Na1<;cjnij>DAt36k5F&l)CAcHJ4fX)zYZKo7qQ*!8fS_;=BY;^y(9h(@{i?^Jc zC$tp0z@jY?J|J7C;9dD>^)EKO{-=qLn?l13%4jl{U7 z8c%{6)5rs($po*{)5*i-FkT9LDo1B zp<_R3SAtvE3df9RWJHB|uAag?L8hkoOnNA_f#o_Z`!(xV%8$x;xPlAts139xuu#*9 zR2lR={n{trgU7&TPIPAC!9UQyEJpqFsMibcmy4XqTOId5D}meYdRA*gdZgq0&&!J9H#dCTSVO2M7(#2h-96}s&ft8Pk~bx|bidk~ zf|7M1tm-dRmqo!&epkCI<1tKnN!kQT*iUtNPWp~s$sf`{~f)27jP$UzBt9IpKrIEtdM6IH1x+Ui|UK@Qd5 z0x^v=$D=SfVg5=UNVOWFX=w>pc-MLW*BW6z;k@BJOWn`OWJiVT{!BQ+$#jOY;27o! z3xsST8H5uf)rOINQq}R_n=sPtQBf=+_SGZqyYkSllPlx&qSg;+= zEho+`hZ?dqEZ9U?u-fDjK5Jc6xX0K8r2jJ6QlzW-oH`369jCP*qp#LB!LxPOXXtP1 zMd(RvLoHpAisT>)ET8Xu3zV1OJPM!Ho~~jOYPILcTth>9LMK8G{Bz04kEtPQ{s)3g zt$$1uKqqgYPm#f4zssf3p3J7>7pt~}yWFlOf=4%NXSA|J*`4%MS`)F(8WHq_H<BNqGg8I!hTmhH$SFT6sCzK(KgMJu1UAy_sXH@I;W;;jlg{^wboiYu<`?r ztG`~zj5U+Y5-86`Qjuj^6RpW;lCn6u8`f5O&*L0FPM1Mp+MDQ^=N-r&iyKj4{Z%qd zfJ#?>zNkrEq`PuiWi6H6XvWgC`#3+5Gs?QMt5JQQ_Lll%$T#5oJoi?i0k5co&hAOM zJ6gK$7`+urkV_7Jq0eHCfWlp=StnA)iB3? zhqOICtWqGmSJcO~SBZmpT0i)%rbauoH~Sd#TSkl-gi(7Mh4eJ@adgmc;aMM97p*(= z-F;j?!`^1+P{-}F50c}L!)%_lbM3wELD%)V5FaX`(U}j|9vzs@F_aQA=p~M%Yo5tU zjDa(lDIJk2pm1GBzHg0EWTkRO83t>-SpA5O;4M^|3G@Wd8YRrvQ3JLBGYvw8lV{bZ z8*$T)L($a+E!Q}D`|HVvwP6WngRQ@Guers%nlKoC?m7=&;H$CPhOYQyDMb6*3j!sD zk;I26QRR4+(%lS6i(%9fQL`)o4duxKw5Z{-+CN3qStM@a(OywPzpEkszabSh`@KLMs)-!f_^l?J$O<3vrT%-TVVck&c{IT(b z7le1_(VJGG zuWGb3h8o9=aUij4W;z}5Sa5$ybO@VKDdstqP-8p=$F>2^@DLjLnq-)ss50k)d5fTT zdO9==ZVe7PE&uo)6Pm-k3BdDsV24Wlk!tAm8<1R%0hK1y94%8 zyRAl{9z$ktiJD-)UJN$kSA0r09r(aS=G#FElj-jKNFHiS zh5CZ>Dn6*u8*5G#KM$mHQ2k!5h>p3rHYKcK-bntrN?n=+Hr@f(7Y+LDL9FhN4(gWK z5S+RI%(u*1VXdJPaS>I*ul7vN=buW^>yEE@tl_2n$pwb{x0%sl%(_fiK}KDN!e9&4 zMFlZd`6tI8@h=VRS6{gvk6DGw zLSZ7p9rUG{^xsa)Bgk+$WZk^~P{P)sDj$JbJ6*qH)S++L4UNSb6haCSc&*hR#m@xi zu5-tAyn%Fh%7PI-@z+##bl?&uf_W(>#0sT_@kDBPKpyX@pl-+4Czg&FXP>h z6}CyKua*ZV9?|_Zv;;PACpD9^&Ac+tAIL$Dc@gmBr z62!s2sIcd7R;S(X+=p&#sBXw(ra1VV{Mc8Wepe@OPa&~5tL0sBlk&MT8rEtfnw(Pb zj1%Bsj)8dA7$3tyoi$pb8{P>170Jd+!#hOop)7igdTb~fi4*ocyA82UrWc<@jL8G} zOdewQvr+u}=$Hq^r>e6O4VpmslC|c>mDC488 za#k{Gpi!t)_o0ctjz&abf6Qq6J$Scj&XZ0*)JIcMg8v3$8iu-giaU?~-M8?MkzR4H zf|u+`UNijbX}FeGiMt!UJ>ChgSg1TbQURu+MJOXQow3@)-j^>xc4zXHrZ@7(tT5}T zHrTt5&|kbF4u^S~$PSIQoXt;CZ5a7;@;qfR9##rPQy;Z68FQXy(w*2!SE3gB%~56s z`|AEeQuD0?_DEFOFW?^)P!WkJea6ALZo@;01XkcCUBUOmz{9&yOOzH3(GgR{MkpOy z5@FkknfUcr>WYHKt*^NCRR=+=#+`uiQlTnM%4 z7%=BV_=M@yd$aX<^zQEK0(D)MQQm574-4<`i$mM{cZL6uys12<_p{e-a)e>Q9AlsRA?S@4DCuXI+Fo)?@Nm5O6?AR_1eD+d;sU)MUDAPpKXB zf$R(^!G6WfC}e6_?X5HLCK2Gmcyz+Y&PJ)yw6L10rEplK-3YbqEEFOqIP-FJKAuJ^)zIu`-n5#aoxf=(bB3)^ zOMZu*bsXG9UYHq>@QhWcIqrIc=u?Mdj!-1rfAM2Z{czM72hSEQmPTW`hAj3Iy0fle zmYFC?cM{7Bs0m<}CGe>`!I}m1Nb2pb`kVS@dQ(2e)7aZl3*B`kIvE?_QO=;CsN{{n z6N|GeZZJEE)}VyF72-QK!}&<0x?D(=7_fIjn@rbXs3^7rO`CG;c6^oD;r^u62=cf2$PPyEFK3I*g%%Up7ry6E&WFNt~1#W@)MuucSJu?=YXIKqFNq|SKrrLpjrPNja47iXMM@J z2Z)I;fhR87@r>;v{JS9Cq@M0uAf7+iUDJ*IfS-GRpljZrz`)Zysxmup9; zhtg40&qQOlQ{M|K^b31pQ&5INU+fgIP6n!`qAvd zXaIxO8@1m&Yd4YRXKL3(x~6U6_b0HsCWn!1;*M9)7gSdF^L?v8UE`sS+1%HFT9 z?fOm+YBtXIMv?G7qy3Ud&nizItF(d*m<8wBTpy+vGM3qI(!I1fg15;))V6$U%urrd ziZ01g5b1rPj3|Sy_p*bbk#te&LI3#|xr6euvI{j>S@lu+7cauDmWBzO#CrG`&5lWL ztCZ0M=5D^V5+(kA^djGTKZfg$TI}QT_u}>m4P@`<3?jsj)YC-+*t0&>3L;_k{f@NBh8XOo3(Z!;YMlFiYPP?Q5YP+D4UIi}UY8hh?R*U-@1sqOMf; ztLxxcw!-#)Mt9*D{e|S>%2=?Ahz4N7hg1SCW|4#pbUfw;TePJU8KDZnj{6wP` z>J$|Q)8D1lfjt#zbhCOJ{ow$H8Y7J{AoqzVMyHblXXE1w;5C;SD~vV9I%6a8VjB$S z9@v6|rU;W?+B`MDW`14&&&hzw37MUZPjL(EE@b`uF|M7m9{^2%ChR z;^*w88AqS`ZP}xjjat7wk?0KPxfuM#Zykp7R7;dPzX;{w-aS-m)g%*M2hFcki(TH`seyB0 zF`6rr=;mF3FYHF|?nU%htI@29)a&UWAHQO(44*ZVT{iEsPrC@3))4j1D%5lr;g_S# zGW4xdscZVc{>W(85~&Mkdd*-B`qFt?lwZfS&L8tgIs)B^$BV+N;3Rx+w3r}HU?sdG z-j|-B7qCJ;AeU2)vPaot7uj++o|5FJvBa7S^mY1xzb3-9Z$r0oK#!-d6lI#kx&7u> z^py@X}Ur%Ke4b)(r7ZCE%O*%Ez zD&9XutRo7d@-NicKHP)8O4sngf9RGHsI)Tw2Mt33z9B&jcim>9kU7E}#j)RJDy+^q zu&D)Sai08SgJ5o=VhFJAli10j>&;-sN9e0q%YN1#!%AGu8vF`1-(PjuU+ZV0IfXsj zTg}sSp37S*%;F+zJ9WYLs1N_Ca&qics)T3J_O60c{n1w0A2}2a|5a+}8th`K;|gF~ z!*#+Od=RB~3)p@eKIT1iU5tBX(ZDv0&EB%L>{+ZpcRGdfcoq&hgU;%kbXEOaEP;Br zNhhVtWaGI1VW03)bR-&D>%J(17EpU1V)sWS_PVxEJHg*{$4`IMo+YBy+z2~dk{PB=7Tx%oH^*n{p#7@ZMB}rF2Dn}2=ymc z@Ozfwz04)Rt_Os+pof`%R>&>DSv|wwX>pu=<6vgZX%L;_`9$U;V6Qk_n7I5AEVrvj*CUH|d{Vw*+eFY%=^#_J?0!XJH{Hh8-l^VTkLxW5BNEyj|W`-gWOb z7^QTmCRKD}zNw%mUEx>AR?FZ%J`Ej2DaCJOhWU>GD7^{&k#2BPZ=)#qO(@GQu}s$I z5)>5Qir3)zBI%7ZWOw*m(#Pm*zM@juikj&*5v(`ew%aJ7P5Qz+|2*qttuEYO6PWgN z_K{CVA-|g*=}#zKdh09U?rTxC9zh@Slkp3^@PsgPl3y+RJjoomg64lRk~d*<)9F*} zWY!A6fV6?jT|k80;TB>?WOa5z4xkS{o>;pU{^+Xr2newSy3!7{G4(F3pdri>9`bapB`rsL(9esMwdI}cl8+y5o zL9~ltX8A3Zu+FO!IP-7bD@WJ^-aJT8>$p&x?{JTh!xO zRA4**`M2y5FH1+#Ksh{=UdJLl<#Vc`qA2y^jEerg7rv9`1S3`-mMMR< zzBW68y5ELVItFid4^}A}{lpP`-5{tkr0MFaa7y8IZIPHnN3400D8Q8nte@np+o^2bD|9~sFG=(*og zcWCAHztwWCz9ZaOP6+eO>HqTO2S!1Z&mtUA12XzZ_F&#d7b>8u46(~-g}u)Hkm~L- z5$6tZ_*uRcVTn`RO?HE>M)zp6I{~FyHpgDnD+xEzkX_dP9{q8sw$Jh{IM>ju#ZeD- zMmKy8wc2&?WzldwSWu|Kj>t*EoA8Mh=rl|Vf6qpa_?ei>SrtXSeN-ODSwx_cOxHW$ zo9m6{^n~)e7MG}8uCrhKHdwj|d<5pX1 zIQ^fw;DZh5D08hM=tzU?9c_rR9qv+#)NB;Nnv)SfE-CT z!T@FTX8-8>%C|}v)>t+6@D|peCO0KhHLhnT#PcYe>p0t}w-sjeiu(e)lu(Mt$ArhV zr7)bCs)F(+2EP6bnXnT(!g{N#h#_%c-KFR{w(GZzb7n96z9td=IpX?FbTT8+;?6=P z(1#uN%##qq_v`U{48j#*zNqspABI+nvFVEfzXhGSWkk>@cI;ktdZDX%gcU*jPmKxp zSY_~vExu1>e-Vs0klo`sC>Hji27f58WZ!!$_PIZ#LYwL%6!xXBp%YmX=It|cg>{DA zWE0qP>NAYxsOqbm?L|cI2k%mdSab&7D;+kd6dH-%Xd&vb^ZqgYWfU?lJmM@+c@g^j#mFK3y~W;C zuue=EGru6VKquA>9~%oJwNfdpR#WSuu9yOwe@ksd)ijLm_Fc4HE$KDAM742^YN8wS zJ(YNsN0hJ1uH8)fqVKVvs|KsRE$d(`EaWvi78OBd)_4^(Z)sHe8@-QUlB&aY^rx=Q zAD?n)O1rUYUq{^-L{B>nU;7@#cT>44=yfDM|Dm=Kj9Srn4Aqg($``cCTA!i{u7-wZ zC(5Wh;FDUgx^q}<7x=~noFXeG%9Epf)&EC z!=QDBW7WD<2^t}TPJ%0}Xb;30H~~5cQfGl44QEk;D^f6S9aIQgkqTA!dY*jmrS~V- z>qV#2fA~Yrq4|D4pXYf$@Avz8e-$Tw#?mBf+S>(eCEc)tPdi<8z#HhukAp#uW1>9* ztaunblt(jhvoQ_Qc1TpHnDl zcQtR%_c#~yb}>6~*S3Z|S2DGp-gXgP>{uq&XWFO1=}*GmUEcW#xQHjV9nGBfWnY?} z{mY)SV2qQ!DKe8L*bafUgWo?~ar%ku0ep>Jw|MjSTUU2Dy|&`&nZnV&g^kKz(63J= zx$R`;PIqUVo_r*ETW8`!x!<>eCmm(#yR^3`cdJ-CJKON#PIA8vg|EZa2X^Ui{WyH+ zW;TZ|p{l$c#P&$r7jf`y>v$I~sJpx_`qKbu0N+B5JemBqf7^DM?`S&Ei|hxTrW+o7 zQ%!l?x8i-igc@-SzJFoI^qc47*CP!Hj_*e;N1;XE#k3m4yZcRiI%l&_b#vQc za0HLyFnL=?8hm&iO2ZtU$!lRX52d!*dhK`voxOFSqe0RftW%al4lXrLh0QK!ubP!xt;OH!QFi+Eu z-w56qL3e)EcO-L7mQ4}zQZoVp#xG{5HI z|Fy-_`eD*8CfTer*+Tu8#%-OOk|!yWwQuJhTxyrt`bu19eL9lh-`dGs=;`S> zU-!fA#`XHEp5uD^dOt)W#P?yW)hlc|)bDyY_2x+a+P{Y1`wH6Med^SI(ma-$^CmL2 zK7#^rqvrTM17dxFz3^so;;v-3^jb9MhvsxOmMddr1*|*vAI*%xX z=Xl=jxs~bcPP|ahlFYZ2M3|G9&@Nyax(8+M0g&y6_N^p(oTT%>U%_fUgqOSxM(V40 z7k}0frhk5hx?N@#xUlnL)T@6%yV{7laVgH3AK-rJfkplTE|N#Ly%9&pQ@+=MV(UPF zGQSBk=OX)LkX$@Yo!?>Pct@whHN2|%F!FFtMQ9%b$_b+$?mI}Q#w#-zm7)x zJ<+>^4#j_mpgnhi0lxyLdk53!vf08m=e5)p$?VzCdIXhUcDv4@i(iUUTX=$dl_`)8 z&}=yZuhK5?5bt7xI#Z+*T*@Z8^n!J{ROi>YLlq1-`zJ@)j z4&Pbuz~4Ygx}^JkXgD`I2xfjg+{^pP1pudt_rCUf(e4x45Txq@szxRjP4fqMX*$^n` z$DRNvV6Cmc{ex_IKGojFZqRk!zr(}#ZTiKJtr~e6`u1b|!jpT>!?zN{eKm^v;61Qo zup~)`YL-E6=9f)B{_9VJ^ru@+0d@SS^)wRv9)}ksWet2;ZExt<22(Idox2U5BTC=? zIeTgiU8mwqxe%xER#fdlT(f8U#(X#V%H0+9FdvSGxtAIi#EqHnxsRLj7~aq4UD1+2R&~XYUt*X*n62@E^7XS`YUg5F7OBEFzMH<> z32sI8Tiw=)KT-4dvJTY@o?<)aCY0b~+B)DO&jVk63dQVtILQa`5C4>Hk6(jxB|$dN zlq(6chWAjsz9+)ao(V(#F;wd-I*-Ry)dO}o36=jYw91QMD6WNRx*whNxtv#_5;U{=&+dJ`;jNack!moTXb}JMUq4 zHOaP9XZIPf)%T)PKi&O&_Z<95Z_Te;tlh&?$V9jv=H$8NtJq?Dq2)Br=bfC-_j$gB z7qbsn*$+Bgoc(#Ghu6a|9>SS?0_1c7b?{-H?@{#B7kn+`0K`BGDO8%PNNjL(zHpW; zIuu9M(@(#II`iMn5Af?F@O}Tp{@+%Zk#_YoUDWnbp2WYmosSaoMEe&|88(n}aso`) z$+!xSU`OI|X4YT$&gp)lTM|1{>|?pXm$z`9m3yx`BqEr-ypQ5w`wF%7dHg-ECVTTl z90H%9`#s*kY~EzV%N2;#c>C~0Y5hvhquUNKBo?RU_f4uOpgfVw`;B(T61#MPkP zJIN?{rtK8?qcoNDX63k6;buKJt%A6gKMy*&2EMBWH^Vx=LNThUET-p@tbK8jD{9(vy6cs0&ubKp{b<-_2U4c$kOscowQl zPnpb*>uFOL&~+q~9?jk~Px%-$IXiKb8Ee;IyyfF1;P??LO-ILm;-tzyd!b;o+Cy zH7D5SSdv{%97#zvRQnE@1IFe z8G)<2h7GuzQ8G%*kQ;j5z+`hV?xa*tJ$&vdy~Dkq#%obvQu`rTUU^P)qiUq+OgPz& z#K(3#F1Ayt*OEVb23r~DnqlUM0rMhM>dQ>Szft#WM)2gA2b9z~0fL%DxtZoU=34VS z$?XhDvDHC7lu3UNXXBjMO;D&ZHy9LDz`;u~hec#JGj`P<~L z62_(k7OyZ*I(Vy+I$*LZ;)el=(8*(-1fG}_evK*e5oYj-6mfFN-tmgZrn#N#J&P+; z|26!7>vzj*ifDo=o8<4yqI`<#DZROo-t5E6AM6Tu4Z#ME;sl?-XPITjo5dwj1~o3@ z3peoiyL7``RF@E*i2?FKhdCo-ng}XbQoPhfYTXJdmxIi$CZC5KL1S^F_U1LyXtt4= z;$YXbjy_!9>}H34S4FDkgQ_;Kph+3*(K|_3k$lc6)oMkh6@7LEW!9#OtZ1=boO~gs z;bGWX$v2rGdo7EnZWh<|Bo2;!=Zh|rsaD5EXFZr~cikvpZE;7sGrCKg1*5FOVHwt( z>Lz<>5EdxL9K2CIj8V3v$3W*x^(m&}UR=*r zo78GAbEKamgN0>~;+fw}gNm6EWq&m#vtSz-Iz``w)?XU)a?I3Tnp4@{bP2%ojJ0XOcFu)TU z=IM;0#H8>@PO=G|qjt@rd6e*TR=^S~Y%thJ&!~gPZ(!ry!!zmQd4!m-Wt(o;ntxIt zpGhX}oT{<&BnT|F`rLzk8_;5 zSx`d>TvEXmP&;=HPF_7efF^pR5B;*A(--0V4RHcT$k-VtUuUAz2yW6|FiD1}yxVy; zwHEjdYxE8$*&p&wFBrjAOVy596i%75ouX9LuvKpXS?zwk5ZnIx&S&wh+aL&eqUTS`;vMFrFYNa`IOUE zMgLzTHNx3lr!D~5zzb>$hn&6P?u4GdEcrh(xcG`-mqqRItMqsq38yYPeWNCc1lVDU zqTat6z~@p$p%}%zfncMHc(2$Y3yYSH_#jG4QWS6FtrMMJjGWoa-g6& zYhtay?5~RYQP^bIY%;St@$|dFK~1;<{bnCqfMFb*gCL+`God?lX*{x%>@MVWFS>|! zyNFt}OjfG&RHt^+#%8nG!=xY`G|WspfQuo{w$hk#;u%d;%roE4!WER!5ti7^SJ3zM$wL~?+C9c_WNzJjC(gcfwW>=I^j4LE&t-`F^Tb-?Sx-X zK}}E})a>+xA|1hCSw&xSczjE+j>0*v>Xx)qla?AmJRa_`Y{rH?QOz%llU_H54xQp2 z3-ZZ>d}g`FWxCOlW{unFMJ`PjH`~1Qq5$6L5Vv@cUKD4qc9dJ3rWZ|V-gyBV&4sr!`MLt2KO1^Tii6!F-iEZqrI$&pnoE z?$>%A)`}j}t~{nr>P|yYU1)<^^%IJQ(wa`6rSi{kvy04gi<(8h zswwnNwgBt7-Da1E+Z|vU2$M82!0nEM2FKV6OmVxX*tyAf6+nbVMTAQr!WC|}eVc>Z zE$Ks|kNddYL9k&|(>UXr8lO~jIHgQuK{xHnAjAsydzFkUyY?5iPdbZNdrDBz_@Hj@ zCg6!`UoDvQWx?h%-0>p&K8tjeWp26AZR3`^KyHod_3>-wj&zv;ZhD*vWelHHiu*nV zj?Z@&$c`y?mvOZ&f#_Gb?{+qVUEul#?z@-VpnxU@MKx1J(k@52^=WccrZhpN&@;!^ zHOlOGSGf19pg_B#KsOk$iQDgo-42p{9O3@Qn0^u@Adgc6GN>6@^!^!YK(V(3tFVOj zvnumqaZ~LhZKjPX;9?$XG)<-X%dJD9`)Pu}@N2*^@UszqJG5Y!l6(9-n%jnlB^7>thqJEL0hW_k)qrlbW zW)3uW%z+{9{~)tqTsMQ0x_39F^I(DQKF|GMBw@3vo8NZ)YjxcJMkYhA`tgEv_Xzht z#%!3-Z$_k5ZOH0Q(VXttE-JoU1zp;>|1Oes8WmUiae4G}|D$ZE#OUuM-2WsfGov$H zp3R3@?thu&wMmEN@$i+T2qv=nx8bM-_}{A?=N%zjb0n~ z-_={s{Wp6(-2VWXjA6cSHNgFkv+*&e8gd2-!+|0+D8U8icd&eLAqC<=lC zBHaHN&Vht#DMe<@6K>^D;Y1?$tuIK)nB**yms~BNWzyS9@jw@qK zy`ULQvdU|QRZ-KcmOue3+<$wkgZuA>>o7q9KJI^zFR4WJ8!B=AdP)*CYl8cqh4Cn; zN2RR#xgEx%?hhWxyVqg)pe8{KuEXF0Js_0HXJefSkX_EXA<6cpW;72j8X zCkTH`zZ#SItug)-7$8Rt5S(A$4e7fT>wDGf8{7%)kCEw{-fztB*WAFc;{Mof$Ul!t zw=4FyEBCwW1Q693APxo?r3UPC4yZEI9`bT?z!>{nd!7Mg0&u~m3HlF!{RR08?oZ-` znIc8K0OBwIj`4n4S=a06 z`^NY&ocal0{*MsRZ#Kf*Wn+(c{{JJI_mX%OfScPFmY;)RF8_fedSTiR49^!~mj%rm zY?|#4mY*UsqJXwhhQ+PI;R=TT!$9zY-vzx3b{FKn|G3?VZ8oOSB?SBC;lO16owK$W zWC|7>EPR;E!h(jSC(17;f?R78rA-*?AUZ}A9b**UC_g`jG6xP2sBYHF`Y{=qy zXP5{}$_CjrW!A?wv*?K9@VS%9-B6+y+fn0$v6reVT)n&lQ8*(oCBl!)>Rhy-6OqA0)THdE_*4g&gyQJA zX*iH+Wj~6rA8SlLl1T1h-WdSrj3~az!fzIPEBKZ+>yD|^Ko?ww7bZidn1p74<#h98 zi99E}@)SeNCo+|kz$kW7vwh4SF&GEQ%q_FOo_vVsE|c~Q z&%DYLmo3jQ`pG!+v)nfMZlkc@!_37~uwe^K!L`}90X;OJifBX`?J@kCN%hv%(xqyh za0R}rj#;-sxvtur8)4Fw_aVBoyc1!yOc3nX5UN>TL6by7;XHHnB!@a4ojAzU{@tUo_W|} z8sdsJcXPMlR7Pq)DJfz^&krmx}+N-K2F&%6AqZCuvz!b7EuOP-~?^@H#NWr3Lnr9 z9}wYts)7UtVD;qgj#-X|JbzOh=RuMxHihq?pe&PcOlu@U3cn=mQXky1FiXNKje|BP zL7Ou$$|c_Zvc7w#GD#jPov=v4Aqj&d{LwTwOy0OuyEJ@IMit0uWrais5@uMqp`zZg z1!ahq)c3JsRYiW^;%40;3ZYNbSjjPPOVPqD21-P|b__oZWC#XQGziiEtI9Ff!7(<{ zCA`WoVkpv_v^iy8g>?N|nVT+V~>< z#Z+g&pgI9E@QitM2B~dM?J5C!N)$aI1(RqvoyHnJXA&+o@0sD*msJ&ALlxcAZ;*WC@VnOdT@K+*^}ig||8koDvL9VBOoz&&HyALBK6Hg3cRGruFwMKI zz#P`=9i9UJ3!87i<4esm+1K^M;0b>}%pD!&Z8AjQOYgXw^YCtl+iCQHBZ{hh*>~Kq03MSNZy?G&8?qR$QH%4M zprXBW*M#e~E7RQs(X#fna`uxbL0LFpQTJ`= zKQ2{ty{hJh;e1Q5x(>M9K9t!Jcw2djHMFc{v(D4)YdoyM_aD4;e5r=g z^+&iJ6ZHORZby?cs)MMdBg|XlsP$g0fbw+ZKFCd&=KRaaUsP7q*irLVQ8!$0n@x0j zsdxo?`;y#q(`k&N!3(}>P^K}WY4;hbQdXZ-g_^X&{onaHg-`{>`!tFonARtiRUM#& z4p2b@u%Q9C_~uFzN}!+qzWtunklKWH`U3TLHKaDA2w?kp&4JTO z+?pkBp`Fv}Mz8nsl?_2^gZNDZ8KhC^v-Rm9BzHx57KG zgQ0I!^*w;@K15#}(X`GCxjZ?}!W?Ho&`1?UPSBr=^U%co@}aax(BfiRF_WALIS~bA z;KkvwivH$+e|OU{J*aOrOfsmv`#8LN25gdrZ<`01h(}6pX&r2PBb)U;y{92=YD`&n zsj5?|vCXNzCY^MR6ic_>-T*qfFlvG&NA&9if+lC^utiQ=g-#+j*rg}UulF~s?AZwH z**M*Gg6^7C_PhjpUJ>Tp?^GY5U>FywSre+6V3{C{`4DQ^IG9G*vK-Tb%n3%&X{0&2 z6_CIxzr;nok!lmb-6hpVv_k0(Q`!rp3oNQeD8HeeUt#h)`d|jbT7_b&45szF3VTBd z9`1}(qS`NsqXY;Cxczq&)w#|e6m_cS*G95mohJHu;r{#ecMPEZ$5s8G;I~XO^~lz? zAT+^ea{KDh`vj-;!TW_^{f6QF#@K;NgC=sYeuCDPKoe`=2`7l6fqLg5yI3mS02n() zCr#qNnBrs<@a~myUQ~Cu_vBRg)Ne6>-y*KPG;Jv{a~57*)j4iYwR=6jlIJPi)WBa+ z$Mf9&H2M88r)J8E*HZd&tp`j0l|8U}YI?2u_!V(Qz+6M(v?II0X~;La$6+~TddPvE zNR2A~+PSV))KO~Js_Ic>*sn+? zPE{QT1;}4K!(UueP^(}72MEB;U+dAF;V|BbA^u{it0^k$6q@M_n(20wV&Isl)5_XJ zZ4IbSGK5ZIWSz!5e|i(=+0S_n!eS4>VXuF`bD-k|6ssz(6&ub_7hm0LLap-AyCZb& z7$;hKb{c#kI$3_~*dk2jV^5m-Ez(zq3(Y&pteSyZcTj z!4Nr6#4H?9364;v>NRkL10+!oer$p>@-b!igUKVz*)>G5_lmL%u2=(EIGDuhar!jj zaGcsGIDkm@(n6G8QGC+7ssWZP=;9Md12Tl)%TlI ze^9~7vy*wFg0fIm{@7TTV^_b!yWX$P_2G4{^Lf9U44g0ORLXg-1T&1um z!#jPQS}^ylx`zdMm%$Xm6bgS?g)I;cQy2r``vr~H5XSaO69QQbfY*k9&-h{(96b68 z?YAudL2bAECUqjT7o2gh>O=*Mv0_z=mq!_sRERy{48a($WNkPY7^B95l))F4e=xhn z@(wxFJ1CQdOcbKGNdmM?4pYj42zOA{*h_Lp?;Z59341}o`g>a53W+^8D|A)TOOx<4kEBc+=LSqp23 zC!w}OR@)qMvp3{r%b*`TA!uUgpzgaJjEay`E~BJO#&3rm*4Ko({g^%WRuydc6!u&h zUVi%cO=b^xgTfXgh<7Nj?9|>n<*L;yYl@%D;RmNnh7QsUzJIr&4&JC?KQ}<<4|xA` zhMO?Y1YXhIPn$aJ8xHcu=cu*sdGOA^_&CbehK)lV_O3n7-TT7M>(BrG^~9Yg?=|%D zJ)L}E%Lmn!aBwE?S8(nwZqe^{*_2zax8`n92?ENn?>>9iy5+Pw?022N?B=WP6K`))w znN$DLX${8Bw|nQ_cI!>IUH1*|4cC41o41C%*Wc*9E&NUI&ENFaToLeoOqUzkDol}ES8d&bQ-7|iQGmCQfQ;i%8acl`RHk}Feb z_BwKNhU5%G<)D_%&z0cW&%y16a|dg#TDuW7Kw|B;!#hw{F2eI1)%Qq3!Vy^B`sM!W z0EZu;v+!;}z5d6)?g5VF&B$>Y(*4Io4#x__S7*k9&RHj92K0503*9&`grFCGW0i|# zWzjPJydZDfZL_ZnUFUG@dH_VS><{9-p>M)!kT*^zbF7#M1anaT=j7I;d*=)99#0GpeSW$0lcY7=v?@e?LoaH&)fy7>K3TC>rg4EYL@BbhAHGg+1#=>=hto}yIAG>w5^Q@qXRX;QD;?{qZ9 zcdI|*9S`}6B0UAM!>-uFsE}B9Xq+)7?_NjHuiip5$!xLn^$V;~|89*#{RO>0(&GuJ z)mFMD)n>T@P3ms#Tz@r^#=5)wc)4m`oNhD|^d|(}bQsW)PfojYn(Nuf-VxP~q%XD$ zucj7|1OTGHZZ$qObgnDu0>L-`NnI^w%grLjG( zXcsWY4tG_uOw(STZdAk3r;@J!ESZe-6silCqJn#4$xvJJf(FnE{GOm1hEU-5qCJ!s zZer~YT^X3?G6H>-R6%o>WV1XNTgVwZj~>fu*MQYJD^V|M z?Bh;HpfOl}xT!q32&G)q=JVkx#Z%F7YYu`c@l@fd##4l+7>@@}37#4}Woqvd)Z6Yw z%|17)+lwK_IEc<0P=7@P3Z||DxsS17V%_2K>S2WXBzR-MNwHbEA90`^vi$`KNS8w&sAq)8iYzN^Fr{ zV0smWA$DMn4_s8^t1utMu-CZ)h!>wY(G7e%fiIXd(NBDvbAd9t^S|J`=NNom^D^Lr zXejaPGQ(Nn$Indu%<`)X|I8wLz*j{PG>gL(`wCF7)GWPuGN9?{TE(J{k8fV=o;cj1 z%AYfFx>d@JpQCE5R9;3&-$$KgmbB9RCAxFh(^eH$JB}N3$1#|z%qC*)6wJqsb^I|{ ztIZr@?ddnYgBG>=YRqnMNY^e4xE-FX%X=DYQgaM>@5gA7%z7+Kw06DOpQ5^=&1A8C zfLT0jVgVX+8(8e}oQZWdi*4)6Vy7)SkFr$=Ii@dk{2QG=F(f{)z4AO)6w;JZ%^OEw zm7%D@>SoygEqM^y0DK<_z~t(Wcq5n1;w`Xq z0m&7T(sQZe0Hio6XcX+LaU_-tE<`Yg@8ojDoI>*Y~p*Y)k8KKKeDU#Vfzb3F;b>4q@e@4)K8(DSH2;Y=WPi77 z>EGa*;~Gbp*d(P{e!)4$jDe|#VO2W|fc^gA(%S@3^`KhjfDo>cPz8S9=u*);}=fw}{} z_`#qG;f-OyA5?S2<@6gx@1~(w3bgwYH3gBAdfT=@p7}WRqJSl+<3WCvkR(n$_RZ5C z?yw{=(OFMLYCOdb+~V;LUdE zIawn-5eVZK6Cn^)npY6f8bPG{V?WVt0el)=l?juBqigN)ly@k&sh-?sZUBpSt+Q}s zJ$@0sPT<=JzoEbIR`q-Y;P`i>dcfgk1#$HpPkBz))%{Z-(CwET>Cw|H)Vt4o1Eh9s z7sT1t_&FM5;}>G|Qlw8rlzBHX@3KhFUf*H;l~C52RYdS+f9ubp?l%Dbe0d=NT}xLY z%KR%@xNDyv?;pQe{ee1{g&(q2IqwyjY%V0)gZ-+`6LobC0Kzl_S0|=+_5#adS6XAa z!qQl_h*I2FV{yg)7x`*DzlSS+3mFH3-*Y+M?7tnKev(Y8l6#yEb#prfB!A-vF{oCk znG(QXj4CqmsNg{RPjpaDKuo+-^B|c`1l0MG))Px&s0Z0iP!?K)s#roPAn*SgLk*{y z9+d_l&XQ<9)XB`3KSm>$8_xIAiQZm75(*(a8;l}5_(cR8Www7k{WZ4#Df&aU{}K9^ z+5W}!Z@2w-(cf$PTj(!-KTXC}@JD)Tj5<5$5+*Th|9JXW*#5KV-)s9%qTj93Cz{)lgZA2h3Tk}p;2wlx7^{XmwhRmhMIc7j$DFDrFI=i_LQ=oVM<(%J4u4>jUqdEf z%6|l5;5si^?IR4{Wd;qO0Vq4H6NF-9JfHdw`hrB|ZGocm8;L7~E_6j+Z^w5D0>$=) z6hwHZ9(cj=MP@rxwm@S_Go_Rw4enU-+b38Yc#6O|&C8LJfaosJZge0^_bZenSiVP{ zlnz?@D1rh(H3T6rTv33=w}Mq;+rpTgN+eKz&9D1Tmq`0hCc?C%?c>zFj9TMt!7{e{vW^)%(2Xa^~Zl^ve7J@mHX(dE*UW z#+{*>>3J{sXQ=lGS??fCa0CDT74zNPf~tN+$b!Vt3#&)_|+c(0NTOyr&uLATcZHiQ7RUh%|y}aE2anIjUQF!FfT!%mHr5FXNNe4 z=|rb9&xSM8V#Z|xhq~~4u=lXk&}=a$q0L9EHtY;dY7VnKh*tOb!6mF=GGceQ7IeA; z;AW5C*ugTRven=2lIX;6qgMxc)eZ?N45~8#+NAafRRz%QB3qMJU%3fbFoO!8VXOv# z@icydDqk`|PYD+WjCBY~{F=#Nw%Q2jV7ynoAy^7A|4D|{p+|lXej4`*VteL4Kt>5P zs#|nU=!=o~G%9Fb6v7MJ+-yWNsTmqYd=nMTE4AL=S%?ZzW0ygv_F?i|-m@s`D?m^@ z>T~n8#OJ{)5MSvl#k(>7w7i4ybv_^bP4NxlM^>K4ngI`HVNHz;PB)f+l9r>-eOu}X zQ%^_B5UZ`8&|xUeM8g48ptQKjuSS8!l)pr5wtiJe>Wx)4zFP&>mpDH%nVC8^V*=|4 ze?4V;rqReNNYLrIBp}V_ihc>h+hQb*LRg#uch%rfS=G33Gi=@`4-PkWB8UYp0yV6m z^6hFO_~f1*R?((8V7Q{eoan#N{uM`PXNpL+(T!;Els`pulQ2OM?2knq({mQ*Oo?`f zkDU8rdt2d2gI%%jA*-+6bA$zVMScX&!kWUO*n#*2?%hA&QUT*3s! zT`X*@Tb55<(>9t;02{0ADlSAeV6O6R^8?^jjWAYAH9D zMP1AQZ7%i+yWzX8We%>`4>OzoDK`B*1jwrK@3^B+;~N~I7o&a1uA5qtLK-Tc!nF*K zPvxQNM5el8r?Z7S?G`=_E(|)8h3xK_{ zkz7}zE|fNad<}g$aEU4u@}01!EJCbXX|4tt;ZqFtak@{92@A99QeL?UBb3h(x|m#z z6#=zHVo7`1oMn)_zk?sy&Mj!LHze(!sW!z^J*&lD6BolS)tO zQS;x|X0k$vl~If;R2K=Zf*@!tREIVF<=xk8QXgoy;N!}L{_8Aa{m)tKbaXg<5JjIM zbKt3f2&6_{!G|k&73y@byO`v#{Bi=Kv6ROOyFt(v$av@Us~$~!c{k<~KkmK;Cb)D~ zlA+G;FbtSFzoq{%KdNJ2klz8xAe~=BR{7nR&TsU8%x~%!=XYn{{Pu;|)Xx80KH=vR zk)JHA1tIkdfY_m)03a%?h!rbFV;>aUm4Xe%({SE3S8fVW5cVvL+$1XgL)>A)(xuf1BgEYKLc{|(lpQSZLnkg2vApDIb+<=xj_jjU45 z|G9T(A&Cvb>`SYi(cN3)FqRwwx(jAP$eh0iwmQge^?+b2?D!_vdIqZX$R}}O*XqNV zyJlx#ay`4pRr43%@)%qD=AkCAxX|4TF*Kd7W8Xv)s~rFPEs-_x&FCAjb`@@F(xj<- zr7k(|VSSEnGLG6n^N$5GijMRtnCd|ZC{hYz2f|a;2S`tyj^h-q$@`?Zn54L(9C0prvu^X4-sl=S-Osp@U zSrezgFE|_FD5hb$G@we5Wu%AV;Uokgo9j~KNRzv!9kgqslk+n5Agq?QKDLDLTGNR~ zeVlGUOIeN=$SOd{D(&>bxmr7m;yF~+m=qdW31l%QEpBRQ;oFT8RGrlrW9MQN3)%h? z>0e>{2hgu<|KVHV_t}E;J^CAL|LgRx0T)^LH^UDTbEAp?k;s2nbW}d)WRX84n>b&* zxDh;5rf$&jlQy}Q?&8FfSFXm{w;s)?ZyRi&X}RUA>Lh$^~2 zF>p%z1dOQvlo1upQHv3E59aJ>GIk^{YA@iz?r$I%_Y`a>2oaR+3p~3dvpz$&(t1_j5>c z(nyA>$AJW@275o&i|`wOCf$ur#az7zsA$Bh)!YL3s@1RlMG@dbFP{LhQwp7=*c^>L z4Jf$jq&b6AF|}A~j~d9hObz6Rt?VCAx39hC>aU}Bv&&=tu|CTA2SviB$OfNQ)}ya* zAaC`R#SVlfG^(>nqi9y8mW;s6(qpT67X!0VWBbb`CwJtPr10k@Y-ZYg8`WPW#tCD@ zQZWxUsy`w`Y)ZcP?Xb11l&rWkiaHLx5EPa`BUFQBN5 z0Ch!6*$L59<^yoR?rd}-Z%Z~l)j|Rb%>qQpIAA*9GUnP%wGb)53oDS7@W$7{5o=(v zwm9N*WB(TgbkZEJYTIQ!FY4<7F8)zDC_ju2V$fHfgo~q;V@uT6&Nu#Kg^!DLq0#W6 z(d+QchIxQ&2xlvvYCJV~ym&agG$Z+3b~(I#d?UFGR8iknLPdqKk+2OJtwjjddl=fy z7YsUZ?$9Ao9a4&rr|HBHjRdpcU87?vFfKH}%i6(fp?t)UFWvu@#&Y75t@u(Y{ zAEx9?oXYWNqwLq|?z{QHcZGlt9-3O;P&*G&({!Rp%+kCLh}Rc=P~(Wd+)td(0#dJ; zsQGD}q}?1!oU&acYn;WJ&g)rBy^N?^)Z91(xP1Mg&lTf(g~m6+rm$-0(^HGqGEXOYc`n>pIcz$<69d zfC#Dte$n$w)Ov}9=E?QlS9MZ|g=*jc>?4vLhmRT^uqYh>0-0jf&B9+u(W(PJ)hPn% zAdn%8diBX1IM(@AG50|XT<66#E4kYy&NvB4Fs8v=}J;sb}p+VEt z4|SBf1#i9Vd`}PM#HRHPAM}Sotj2s`a7JT3jm*qLgV31G{lYaAy|I+lZ~lhBvjrIX zSeE=hOhhOe-EDq{@U8uXKUMS5i-5&g$7MK5G)Nt@jOapwuK)ei)Qv zrF^vjXk`gL>%McErg1E3yi8~WeL`nFbd4oMC`<8KBedG@H9)32<8~5PL0s+qYQK{; zaf@tR5ZAEV0MSC-7M49MJ9%c2Hql0>XFle`#JJ3A4y;dS$sZQJ4*;Dm>M9oXtHihR zc=0`wiI0Pid1L_at?oCzGj;V{nu(7CtOr7IudGSjzrMR)$Xr|U zY2_A)@C2re>$mm`+>P;d2kKAYZzTMVe#0+J!JkR^H~S60H3k2!6Y%@`4d0!De}eF` zr6udG&GIiv!QUwPV=H3zV?V`lvs7LQf%gmX{g8izui^rKpIoI?P7Qs@6LaEKb(r!|58|2O!467xhI^KYn%B-+(fgC<_E-ww;SLObk*< zc`T%-U+}Djpd?YopThFW{ ziV8u|kM`#NVZV741g)>JVB0}l*7DgJJ}yP(mVAc3Zaz(X^~Zyc<(Vh7YY<0sf6G&$ z`GqyC`Ni5ku!BQ*gD(`@>52_QB(jnDk?gx(KU=cNmV+#w45st&tFCKh60!<4XMPhq zZPw527e=cVoxqr`#R_u{u&r+sL|ONj6Rq+CG>xetF{Yyy8>2P}!F^1a)^wcxVKRvg1jAz6glAnf&m*~8UEVCS_cB^x{9LVE14OBp zwtL^QhH4Xb1-N2=1#=jOKCDS8^2XINWSQq5!c4QzmZZxirVyAou`(8-?3S`$ff!?r z?f22Y!S;LTSGM0tzh{3M{?JwMm)ZV(^!si9F8b%${vP-v*p;->4*DgNbld*N=-+Sq zzej)JfpnJl&|hWyzeWE%+kYMXYi$2?`ghy@DeyHV)%O3C{=$Q4kca56u>Ieq zf41$vlm3;q|0eo3*#0K^9sf+@y99ocP-h2KFv$wr@1uX8?f1}M^sh7uC;f))KQt5m zRknX0{k^t-7yb1%kM_V%5*FG)zhshb+y9s(ahtdN6MY0b_^t=bLaY?geuB;N%^^?F zaLW>ooa(wwl4A`@{T{S+pr?ubVmcQ8x)2cI;*u-&Eg;eB@MSjWcq^wIk;K^A2Qa=)4oz-U0oH)_1*n*H(RS@i`xM^FlU{VQl zKn1qZ#onRxSauAOD+xeDCRQ#a6-`F!PM|~e)Q8VBdX51o(YZq6VQLO5X1z{YhNQcW zN&2a-NF*(jq^H4e>^mmWZUkBuc312HX8v&yA=pNE&nHy5T+u&~?xKJ9E&O8|H@TyY zKraBudq9A40}Vl_J`WdpIU*k>?b z28>l8*8Kk8x%Y97WXM{LT?<~uX&A=cfw(R&Xw&n-?3Nq5q+B(BLX~rue*+t5IEMq@ zF@@Z~ny?y2QYApF`g0?8(4K`Kzx-kc?K&|WsuLuPzu+nB^d7q4&jG}3luzIdK3yj^ zNQ>Fd*@HFvt>kvgG`YmL3l)S?MsLR3m<5Wa!)VhWfZeP+3v%u6$fm_;TrX2|ySdSN z4E;wzN^12aU!4vg`w2UKP`QWUc#<{(>0TKf1@#zA=XJ&Y0@vq|Jws%c$vt1a)?gzG zs7*tGOj}-wObk)4AOmy*48}gcG4B}46l+!vN4cSU!gK{_&QRAoFh|ERS@atp(3~BF zNSZqxKc)O>o1QBD2pHmM$;UP)S2Pdg-otGcXhT;Ax5Pkon9I$RgCe~lS1gVYV<9N8 zs_yOp_z_li*;{HnZAZ*T1aN{Pw^_PBnatqj0%<(Ix)y||dD(+Nzp6!$=4Gy6rFhwg z&`6K)@++7R1dIygV{T4BEFTD?T%eGON-2NZxI!WFcp|M|sdAl*c>ttfHMTWPg@Ikg zg*D8$H*-;@CcVu-7vfZ4 zwaT*&PNegKGV{+LB$JKmGeGLd@&f^N4jHG}*GjJ06Al<<$Rbn5PGmk-51fS*UslZ| zx!R^=?R2be^Uyflf$SDrABqqvc2-qL9kxv#-`A#%t z&5LNUvhw7F4Ptk9)f_2591I4z6`&%ZK9$Dh_Rkv459%R=oSAgN{NMWxSF8ej7x^sD z)p0Hy>I@J>Y_(cGTR6H>I6}{7uC-s~2lcHSuyLZv{0$kZ*;foj!cRp44N)O=9$=Mo z_qh-0p;*WD`T({phbQ8kw7QnfkLD|YsGXgdW^FwG=n5tVt1fuOu6B01@&o3t6=?3w zbH&bt@k&z~RJlSV*Mw%rcO&!B#$LNkpAl>YE9?SGT2vfM2^ z6M@9-hkTuXR(weETSaQW5Q6R*J~5t`oLi(0AOI^hJ(u5yJ;IVlzjwOuZbFnmKg{oGDe%n(zMF%I{@}4wl z4Vx8D3AP4_i2dkKY($v@{uGU3g$}t~U_GE8uwMc!nJ>^nJ*FCYQ;)d;`KC#&7g8@J zscpVc1dGGT(CGmdtTKaC-7iS$fF@J=4o>)|C<<74|9iJZQTS9VO#KQ4Vz3%VQUdA#z;y##&z{Q|q9-iu8K&^X& z1dz(X#wy}`j5zbQRCCmG0C6!ZP$TNL5lt3EZY&DXIO%XjJA^P-EQWU+iV4rxhKmBK z2bGJ8rLNKu#wIaW^kE#kz)q*rB%%OkqYujtD6jf0O3ogGq(FjoWAuoHw;*-cYwWPI zUVj;zLfUgW%83?FoM7y=;~zmh`V2^;-I7gI8Y)G9ZF7XrMBqXOhEIWu(!dcOjy)nn zDL=}SX#KifjTbz#nXBX;c>qb~*d>EWiWmZ)`7%_hUamkg?yUWtdIt z6L8uby6tbsr@=Q1wv2M#so=H5L zWO2~7$SK&Uc7n{HnyD*HYJ*8aXIoMZja-U`aHF>T)F`AW+=*e>Ks8Fc5mT3{w9r{( z3ZyS=Qook`o&H3=W|D&58mJVf_J~T7s&7~HY19k=3Yyd-pdm3Jpq|3ps<^Pv@Bl1T z+h78}I%Pd-NUIrWmxtfMY_Ig#G#_qn!2vu_rb2$}bR`@)m=Q05{ zM1%&aD_KO$&!n~~TVsy`iO~jX%qd6U^3ydQE(-kx%pe0X>c5zXQKG!?F8F$dR>2b> zo|S|?f{tOV#aL+m11@X-^pn@<^C)iIL2{r8!{tacn|I4Vtfa74`r>8gqv+R*^Qy|) z&a9fS;50@DbbNAT5mYH@5hh(!X3j;@mH|dR4h>+iuA|)_ok^=f1(8hyOs*BTOhnw; zw`u{b000=6f#xJvr=QPJfE*e0^1RWTI_!zK$$Hh5*^FlZn@Jo<( zF&(r7iX9-JX4h$sgB>6|DqytgyuHehybDu#Q+xRt@}M$a0FC{8KW+gEsw$+y_!U$) zNdDZa!oqs|YAYy2A-r*=9u-vJug}DR&2P+UNh+t$YNhb0oFW$`8^hDoTF^xqIWY1v zwa*fgy$EC{$Ft7-YK_FB{lhiJE{&>Kouva)sMNPKk_iJtUB=o}qNT{MQC%-l>GE;f z;k7Cl^&3PisIO3OgXBffS-2Gm@`O7I8lJNx>b@!dm!^Z%Q3oN^f=Q zBrmHuu+rN5Wmh05&?xs8RKkhV2-uIq#o6-128R)2Ir1_bUNN)z5a9SN2TcrMHT0Ap zfUATqysNFZXpivIa>8&gCVJe%Bf}D$;Hp*_#5p!0wiMi)M35g(10K%#XXBZRB<(tN z2;O;k%J3L?DzMq04)0kiA?4;aJ3q%_V>PI?2F^Qhj0enZo)1mizDnqFg!&bK!Hub1 zN?&-DP#Mx>-kmV)XB79MMe;7YmXZ!@RSYcgtKa8RlcF^BtLLVHZ&v!c;fZW9u&O4^o0UQtMTn$InNav2W(yIKzR0d@eD=1QA2Z>@8$!zQ-HIZf1#QL z8j}Zy`BOs6g1(H;+05SnfAVFKPq6*!4gkk5aiWYU;ym+e;*vcTz|{`y*=~f=>{lqs?)Aza)^xaDO%;(_jlC2e4Uw32`@_R&*DrCsKgNS5xdvliaUDVf^ znjUmiiypLIjn#|lq!q^yZI6^St4TDFo~n`llSULNB#>%kI}y~iqhH9Z!mcK=RAFbC zi-<^e^Poj*vTx7RG-*MAV?!_MU){EieTRJFG0TZn-e}Bg;6cdMYtA9yApy*uADAy~X%6!&f*%!d>c?63 zKf+UQahUJpx6APvMMpp3eI7uWKP7z0@xYfz{x=c6vcK>aw_OO}G`IQ8Q;4hD!qtw_ zWnCW@zV`r<#@B5A0p2dzl+#~%WOc0vi4VdXo$X5X@mFMTPF3R4uDbq~w~XxDb}4W* z0M}6U3ylk&&;`1K_|=mLlhGw~dcq?s$MY_dF$#&?V71cA!1)+B?%x89nuCZnp3uzl z7Z6H`yp*ST{&D+cK`JA*jNwpn8r1KqMH!l@o=2V_sz$V3szT=p5j=%og>Xab zM=N!ps82q);qa&rC6J3vxS404WW!y6EE4eiF&!{d2h6k(YjqMSHt7_=Rjn@Q!Xm*E zSvG)-&?m03d;5b1?%t-#!b662j?f5XFbfqp*a)GBW|7u{m$s0N~hW|1B)wchB`VHH^0R9LTQJ2|4txU4P_BYdi z(Dv8U@5@bRQ3b!|Afx)$YKQ8T)+;gB=~-fH`8G`VrqyFdI}U8CqZ6r7@i*QJ#;j7m zLvq}}g#a+LT)=`eDz0b_)Et_3j$m9zgU)q?Mj3}!*Wj%E`2f)Q!NwZ6mTG(cT}%*VwJceWw1YuaYN zvCyu#Je1k$dXGr)-DW#YO|Z9?Zv&Y=l>dQ^ATtRv^R`;_=556lly?j^*04ZRksi~K z%TPl#*qK1wFsX%3KFFU8m#uOrUo2*iVrfipmtRwqT0k$V+qB<#t7VOTY>fW1Eb9c1?CwrfbqK z3EYW%5o2gpG(UyRa;ag;#ONus>T3O(wT!we5j#}qR8UgFY2dt|ngx_CJbqNAJ{78p zzyW87i7DCCXf#2&P+sZ3l($lQn_&4(xPZ>>z%?PzRy{{R1bEQA8JK~$j%?1ek#1U~_2FaKR&FH==BpMdIk|nHQ3iC0XOMpt z+GQ%+rCCt1UA|=L$7r6fAu!cE2cAha&rN8a^K^1H5BRYdm}YV8_yDD_3dsASjM>Pi zQH@4owjb`H%>gaO%Pf1Z%mtg&ol@~UVghq*IMiqufH9AN)ATZ#`FA*3@u(M>8d?qT z*9)!MaYf&PwHz&3ilPltKL9=;k2OHbcSL>dpv`a8F{5Qx4MG5g)EuiBk_(138Y`Kq889q0vZ#cGkZEySEya_9X_Q@|+22Ga znFJbQq!B28Z}=b1tk|xDK${S2Lm6=M8hP1=EDa;Er3#7L6JjK@&!uKY%~=kQ9jgidB$t zNa9zgOF|eS4L@tr|=aRY}OR7NWxwkj4CR%x@t1MquO~X80w+1CpR1ld5|Wl%{Hj7`~g-H*~r_ z6jdYdA22h&Q6tFeB#}F@ENv~@zMX7RK-DD%(y`pP4vgeiKfy1UpL+x12ji~?7N4BH zCHg;~I=dPYYf6)vC#>jPlN+vR@nRXnvMGZYbnHe!|5Zr>)WM)J8#6-?=~GXAS^DiY z*Y>&0ptBTosRv;KOWh&L4n&)pjPiJkT)^9Fg%|S;QpT%VV8q@I!R!35cCZqp$+UwF zc#y-2*unk=(;B-fE)-#1RhJ)*=Usu7UM|ew(o6Ii=8b`sG*$2o?yHo;cS|wzjhE~D zI{Q06v(ENlM~JoGSdG9G0$dF2Uh@pjsparq*0vrC;axVujkx?(BdjoYLT>8|K(j_@ z?JYi=g_ILgtP-<>h*B1^e%MniY2ApAT z!7EBiHwCF|1k}GuMPgyeqR?8dHA4^px>7i>Lv^fx<{-7xs5VJ*UhwDT!eb@&CK&fU zQG){EM?G3*H9$#X0+xljB>ep}{y(Jfdw^f|)+EsFL@~j_$TAHIO_YlH9w_FkZ2AL0 zV%6RUg0Ilr30RD$xYKAb7C-9&4Ou4xEEX}*sxpjYWnV{dT>CydIrNA%IicZ3H;}8< zKN9Vhi_>dz5xARy_h$q;5!lPXyD|a`5a=C%z#HvAi0Yw6H3R(!1U^wFT+v^UiEb}Y zcYFy2xV<3KJ@DbkI|Dl^ayNdKr>;YwF%T(?S%3^;CF=z;a4$F(%C6gJMW|juH{V7o z&|cJp^Z4pZfD0IHh{Yn`-XB6U!v{Qgt`j#m&c6cVZ|DC!_0%~Z{r%OC_1O4({LZ8ARY`^x94WNf$VttWN;M8k~?9$S|>B!KH=n`?Z|afx$a*U;{B6Qd(Xa<%)M#E8g|JlC_`>#-RWn_-_{h{SS%6#5oEN8(T3 z;Z)C{9MXk{(Dy_MOHnLz*w=Y&@8m+GdJq;P(ND09c>vN~*2OTp!c`J@ym)Hx6yd4B zQ-!Azj|WdNo;o~k%*3D*Ln|snMt=E4rTtf}XarJbYDEW^q_v{5LTHQV1qOAZxt9ZZ zDV_=rJXC?=17XR9r_R!cX3FK`FHty-(fZJ)ey(>}_cfb9VXe31u1%>gW#;t=*80$< zY!?_Tgez=>zZ6>n6|6dQI1$Qe?5q)5H-29N$as^i7&iDy&8?7}S|37*`=bx(YoL!% z@TRa;nAG01KGfg(v#7)RuDyQXGtVJD(TVztkJ?QYB&)-G55HP90*mz7>mDo)UrSmZYfK}3o|Xuav?D9z?p)g z`Ew!TaTEC#eG_^4QK*wY@==6At1GdD_Nh;?Q_5Zi5w?49#IL(cp9t89p2dy%*l^~G z@{l97%2{|DPY+6~W2?^)sc*i7X&3O$G~A%YLcS1jncCt!`ZKgegZ>O{aVGs4+F~93 z8QNkc{UtX368bZ=$0GQtEoLZ?`Am|bJ^uT2_zfGyyY#QM{jbq~$o9WLe};DXYxs{n zX!jVxxVlkk*UD0YwcGyr^k*oo-xQD{^C7N3KwtZz)Gj8B9DM%75Ke?dmSgZ~;Z)TS z{=)(U+;iv7t9Gc3ILIRHO>HH7G6sv2jlFiBgC&oG#Aq(?rM?N4&+sJ-Z$voFMa7uIphU(zn~JZ13Zv8Zj}xkJ5+%g# zZOz)s)Tk~N%+OIn7wKHF&1w?L4JA*RUJj%DrJK+K^ZZEuQ=FQWn`Jbsti4I)(ujx>e{aP^Cf>GPR;x zBte0BBe2URecbOXK_Gv@R^UqA4v#HAsB<>c-DoB%Y9pGA=Q$5~mde@*=+cS7Y?LN- zJKWqzh(^Vv;!V50J{yysR6HP=6q*Mx?!mT92)PoySe*(tY6^44*vp@#&7wC-dZ+n2 zq-W-rHDyeK9z^%zc0FEC$o>B@-jl^`drc~aEJ;asxWeCLJVknC-gJY2AiXc))>Pl4 zLu#-{g7iS*2NIbQnUh()ScE`%@NFimer4)9R?vH(!d7Bh)EH0~01K!`K$XK4<*_($ zh8xFe2I~kCVzuh`1=eYPfG#Cdw}5(Mv_ zc$(CqQ_(uuS*jVc#u2^^C9h*Q8XLLW=V%OsT*g}V;(+dz30%fcZ;j zFoLlL7nImzreh;8zGqIyh7?PGNEBeaXkbes=Xy|!$<&`EihCoxI^b;`pyyt@bnm$K z8i?XLRk{KjA+VDX{6t$y-;cLqzJ*Sf`W`6mRK_%0-G%G(c(F3R2O0(>EEk2Oo6ANKnF$SIw5osGH&9eoXGmoQubUrxH&M zo>n~EfLVcO79Imn8J>DPTzhWA6Otj7JdRqaa(JPUL1)1;4}LH5)Q0HajpA6rUljYl zPPu-JG?`PbyBEl4!x8-7P{(9L=F>pyPljQ+dq4*44t---Yr0A2!0G- zHEN#-EvIa8@L>eH9Hx{@yAA?vDrMICeQ1OQ;x`Tf-W)Ip471X=7gZ8@!Kt^p?SYE7 zEFN}rxeFmPHqYso{yH>O!Da+#EYo#A<{#F6sy0+=e3}z9p*3fj3T6XFZ>> z@RerbGtBp)k9B#Zc>SF3TKL`sL23GCi+*=}_HYZ|l1zNX<|U*rwKuO{<<(mQc_5*y z_;||4_S5sfP0-c4ycUkE>znX1*}=>R;eE#gKTqH? zV_jAK&7bAh^Unz3YmNt=H~TouiwR$MJn(v7X&&M0j|aY5m!GB<|M9~|2tTvG@TvX} z;^SfI{}AHlB;uNF;p$g^NcDf>OUaW`^L^BCmvJ2UT(Q^CHd;>Z22t_5Nu!*9X-bad z=gO&`Y57<28lIhJzVS9oX_9%XD%>(cSYwhNpd8=cizQVj6$FL9z|^1{7X9- zS-03z(Ejn@P=5QzL&F|?l!T~Vk>B7*^5%O4H@2|NQk+$pNtWA5m#pO_*AqkRZ;2odWQ0$Y?YAGEsFi(AKYbYNC&i~>J2A-3 z(unGc(Rc<;3gA%L-Isw!xke?7@n#e|a6a zV*_Ev3Rl{m@W^mcIB}d4A1U}9Nw;vFF#=SBn*gfS&9@Lhk9>dgRm&s0cB?Iqe0K9P z?E$Ezx1OF3DAS0B>j0>oZ7R|MMYY~Hi-_ft)Ol9wCBEGtCjJ6XAz=&eS+L^Y(?czE zld%j{XA$|PTc}Uqy9IL*nkaz6mbq(pgTxnRZruGDf{bn?Hn!V%mNRfK1NYm33mE7a zioinrSUI*Z(9M)3c3>j|Ilvp0c3?FEY1gVFh6X#lgo!ErjAeG<2@IqNGdk_S&s+#3 zUmJ()K$C&I!rLetmZoYK1KC53Ry*)H1V(!5jO7S2R@&h|W#X+2++hcPpMggiSZFiH z-3;WQZ+PuMgMoGM8x3|~fPo8b|HbfI8g`9!`l=)9YX^H-_xHgC!x)ltDy?PMoQIN2Bfb5>D!d1`bx}M$IF=a=jchH@#4(FpC zGgU|NmC)F$68VuMw}ig3xHd=D9C1MNHJSB?hIRUZ0-u$e$`8<2A#kQ6bYZ~o+gVT2 zStq=;8~-+#i8zblXN`Vmlp&RQ2j+jjMaOg)G4Qt0j4-)uMKz;eLYP-{T$bAz#6ilB zOqtWiU)*Sp$$RmmgmE9zZ~QpVT0j-Z4rg6Q#k3iq3E!6lJS`0J&0h+G@t7Nc!V<`U zQaIK9LpfXGuWYRLs`(PYUkrJ&Nuh|fv>&=QP00K327HYp^kvy>9aJxnXSwe>pw`2w z+b*cqrQHFw2JT3Y7mYM4KG}_VC5?CYfk0q#J3=SHl;os2N!y6fc7E<6goVj68X*pM zW*jUOc7W`|scU>Y5haIsnGI=jC$GJkg-f_B##whI1t9mieoc0DTfx5;1pJ~OztKnQ zc(LimPG9Sqjb#!|3*Ji0f`^o_LGb&LMdth1U<-(5w47u=h}kzolA}^S)kSG=xMKg( zPOqbLIU4cz3-RNsIfy$0I#CDsYPhg;0oJh*fv!-@=H3bzzxp1k9Kx^yWvcF2BG)}k z7bfs;Mmv2^s?dkRUNP?`pu1Vn-SnT)P5rOvrl!z^e~J7`+AAI53;NVcFHc-|f=H|G zzC8pSA~%v1r0Z@M(g@d-BFJEycA+HkQ)x(r!S9c>H*C3)ZiQ!aBSpHY z5mU|Tl&=fAqU(T11<@Y3|9vn)Ib+1QfiIuKyr}u_bYVKbnuflmi9|`N{EB^zbqEGR z!d3^i_d!?y(`a2;2=p>RS!gO~E5aS&ELv}(S}wUkkWbwwd4dyM_ul|}$mh91Sm!m2 zyGUN_S2KxWx3&}c(6bIhF=eOu6Y@oNIBGJme5ZM`_Ia^sT$d0;gwUW9(ArB-;OY1Z zBc?dADiE$Rw%e6|bkOH3zX`c_q)v$bP~;1@&@JUxFOX+tt}FT&khT;UJ75!NQooQg z;dp#O_#}S{ut`0X4i1HleRh_Mz97qe*i{S2O3 zREtDBd9hct1p7~Tk5y2O*S$M&i+spM+c$Ei=nwx*52_+7y51-rp62Su3qD`5pW&mG zhQm&?;0x0HncujC6&w}qM|=MQ^fjt?BnPNT;Tw!H8~!4|Qz)Y}57)IpKtc>xOmA@*_mD1i zktAR*4B>Ko!_f|{5_{6rt0E0pBi^4cE4&utB}Wg z(J89fn7G7dJi<6{#_}V+-6#E#*FqIFsWT*X;iS#3*dh$SR{DW<`US5GTMTJZN1amV zUqXdGF9gS*14O*_a`~VivXNI6Kl%v7?#$Fq29l>DH52(=+b;yo-SYxb! znquYvla-M#UwGU!VHXb?t+sr;SqLjMw<97oaGG1;Q9nH;{h3DD#9SEv2v>S&d6c@> zBVOW70mPe4vd4NrFVgY?ApjMqt8VYg2+2Q$DEgsmhAZPO>Nqj^z z^tFz<9qmU3-RWGsF>zu?-E-|n^6zvywg7~Z|tnGv+mdGgdrueUvU^|hT~X~#9246jYmy)ZbTVe$RRYq3vC_OHh;!47#y zosp%oK)`9?f?)E_0yTn?3JvbWdNVGI`;!(AGT{t22h}$C`{?hXO8|uy^B8YpBuHMU zMk2FhtrKO9%y;HtL0skn7phNlg@`S+7*;{xwVRB68epG}IA#~Sy{QbV5$8P(Wdw^6 z%%=$}ksjkAl+xJifrkC`iOBXfWJgxQjND_aNXKnY#o<7W#}%7`2)HUkS56ocE;fG5 zbY&x_Ia=~m7gz+hkYFFifC*zl-^TZ8E>uIM>==*d-y9$2`h8Ah??tX>+sja|3v(DS zB{O77PJF<^nYln;6&{S=YFBh8$|)JGOJ_7l`TJz##?iA2)oSTV$Y{YpOp*DS(5&(! z3Aq_WP01Ci@-l<+B*>W= zb(+MbPT(NU=3eZFoP~_l09bBP>uuOC5yxs7g+nWKq1LAOrjYR3nxdii=cSH_yuL?(k;$_LD=N$EjdOf5~O@Q z>R4uZx|kx;{5>bU4^_o4Y|1BSm?D*Ig-!xp{^&iZX0LwG;hb^q*3by<4wAF3n9~6h7_RfouYTY6(R=aD=RW_c%EK1$ z+>XK*fZcKKR)lQ~xmamlRA!G(kB;hI&+KE{;#*wPo|j@<1p|FQLMkauGb2FC4-f!- ztLUE36trX4z2{+AM+_!xSAUl0DBnqKZCl4}!_)fJ;u=pqz6IXgF?GPhQ$G4Ea%5QB ze%G@#zUjj5973?QxFzpHhBd)?i_QM=Q`w8oeX-*n_KZmfLmp#ZnuXnzbeQZGZXV#P zEl;NNb3I#Mbxp?|*xKGu_4W8hNX(7qfYd-ydo=!hWUp)E2hNRqbBAnoJ$nzw4}vsD zw&X3W{geQC8_nE}d!0j`PeXlXC0tmWj3iyRtpp*_G$Aungb12rb41pXhm>|JTI!#OvMyGc#L1egO>#@&!CU%yN1o05=P8gFpiwZVD*D!_5LUc&hPK z;ql_(W&xfg_KDdMC@Tf!2H$Mt12wW-{qW;F2n7Cu&eZ;ZVhr1_`&-Ae9v2cQs5f`z}pg8WK21?of$%o-LVPIamzfv3D1N!-ggzdHmv@I_VZ?Bs0l zJ@~rjqFwuS-^wtI0o(-PMN2pmKkJ$&2(sVL$`6$hp4KOad{wurO;BXH6cJ7#C=vu` zqF-5yy4fNaH{lYeE6UR%6VSe{*c))^TCqsu7{&b^W#$%GeENA>?kvF`0SX$WzN2w> z%*-KfR6I?1=3JtU_N&yRi0wRL10Fd60U=yzjwPlg{lb*0KU|W426z`Ho30hdg+Q-L zuO@<3$AzF;D7b+L)*KgtDnW2M5MZeb$7%P3he_4M{}JD04j^78z~^nZVYKmL4CYOF zMMyRxwlj?V%D-o{tL80Kr8n>SyiM3&<+`6c=VRMkF??D8;((GBI$|Xhw9>GgpQSZP z?K;ek%-__e(0UqUc^wq8D8;;_5~E;|@mnO;^2$L~;&nt;LKge=xw1z99}&~bQrZ6x z0uvX?WPp|$4Oc91faznA4ybFGcLO$w;;Ys8elOHNuOl=>PMuQ(B~C&S2TW-26(Nu| zND0j4Egj)f<5i%Kbmz)6f?J|ysauZ#9gOvb@mDaq%5|ySILx{u=WPT4ATR#iUdUGH zu@$(272`gHT0U-ZM5=DTQB6u=rH&t&uC5W;BSxjuSdW;5$s5XHv4Y6 zl=Z1nVxaSKO0`ZaG~=n^INQpfnKVMpQcE!Zjr5eE=7$UR z=YYk73ZI{(pT4|9;#54*U^pU-x1@Ymx8@lNh%DIr9!Vk4ls>8O!_YpvkEc^ahdze7SPD=-19Axr(D`1IlCRuNjwSIdOY;E`S zPz#WGPA89#tFf@f$WR-Q3uOv;fI+^H3z1OVaZ4`5HSQUPhexhB#``dIm2ek5SpP!x z(!VGM_?t1Fk7-OT9oa+rS|rIF(w8=+hx9Os#N-Veh;L7ALNQ%SZzI!|TN~80KAi37 zW_^pVnHc0dtLRZ~5MFE!L6APbvbi7o=Xk}CyTiyeX=m4`R{&m}?aqO)1)pznnIXNU zEqnM;`g}K``;@0B@s&;Knn4Y2ah1a{ z$#NBVjs36?yfp+u)`PEBECnsbTF$VwzV@es;OZT=e;fV1w!e#hUr{>!&*=Bt{)gc| z_H0OuX%^aP!tk@RZMTE2m!N|3WTITm$@mVtT(W)d9XRY=j!3`!QmVT#s9a)2za(JJ z@;#RSciJx-FLW0hf_oU*-()kzXVOJ+fHM99_wg2Q0-qLR2(3wPtH(t$P3o0@5XOT* zAp*0vt1*yDy@kia_BB59gvlC7T#%@eWv?dneet_tNqWv&?=r7~l!GmA6fCJYY1HTZ zNsCS`rrXT39y1W0dDdg9q$^Svq69RbxT1rB6jIoWPk6vs8&LI9HstGy{sUZ)CcPS2 z2Ab4acJvNJ<5uf8@v@90orUO5>OELZ?fFCjf@Bvmm0NsgJ2_!8TLj;eUj27A2Y)jJ z#TR~0`aVhHQ7__)h4Gc5X3KSWtH5*})0|zsU;uPycRcGJc(WQSx$`$=BgKkVN=V82 zwp-^4CO>=)N7m#9xp{&3}x z{?HNqICHD_SkuGHgR237AP$)bm#9((bWAr*T8 zUaNKDcD#U4uJ}agDjnLx7dBAfDMct74X<@NGz8~C?JS0~Q#(1!u7=l*w2ylpsU`fp z$BW^3+{+&yekSBw{jDOw{>I<`SARQE((wE3RZb|yyyLhHM*u7@uLd@TIUIAA#mBGT z_czQ1@NM>X5R~=zEr+7;!anBv_(Z$)d1{WoS$?0>+HdN^^j=R=$qeR?iEG~Jn7j9v zo>6+Q=`O7H>+_&eh32J1Sd(A@Eqx@K$?;z)b1$wk2i)-@sbG z@_5=S)&80I>dZ%puUVR_pZs{b)&7td`h30qzA3s1`jgk3O2o2}HR~@9TNK{Qxo_&e zyOE<{+r#wu}5_Wi};rwSXJ7JB9yB3x@B%$}bteEX|Z^p{<*6FIOO()thvpqe~Q#}doBY$h>cc+ zIm~wAl%qXa=JTtG2osY8b~PfGEg9cEC*97qgFpZ|4#WYcUqah zA@E*{!LpYB_&zErz@GrGm77VGSDRI^u56;$1oYczG zICt3Oj*DEdI|oMM7#>A%!Nd0^t(PS zd_CM^ohmrzOC}G^t)JU(eC+?6-Rb_1-}P<%Y6y#-icETzke)TfwXomxSPi?6`=wLm z;{*<5aylnuevPP?_lrymZO4B=EBta8_}8xzwAu5Eg}CBBAO;IM%pVf*+J4b%b@9LS zesMLRe>)Oi?c@!VDS0z&VgdMj8~FS3oQZWg;bD=@xmYuaZVT@#?@r{O(jD2#&*Q}w z1Etmp+lgF0UqWjlzj0tqBRQj#<5ItYO+RtU7sRHdg1X=@*d4G3aQi_Kcgp@0@Aw5? zh;U;oN}POMOL7{mV&6rav0Fkd!%p}+>auq*miPAE(_~zL1~K*_WyiOM2GzZPMUvf6 zSbKqhBmN#NjPM3(%OqIvrsx#r;bNMx0%|^p!bh9|9#HedeMsD`a7VDKh?en$r zo;@&X;+7F4=~&{U79^8)eyx0nfEB~sH#r`audW8+#+RpjX$tNGGzc?ifdaqbvm?GC z5pMGmM8H7l38-yCtP}jqD&t@B0-6V`viP7?YyBvC0$}VrF|WQ(?31X4m4Jy%rX|4< zt~BbAnK4sxBpP*t;4hSEGUVAwb^=v5k=0jVu0I8L?l3VFvpLo`&i(2f4G5TlY6i$o zoMV07yaOJ#7fy8|YCNOxmGi&gjc?=O7cqT`@MT}R2vbuz=}$hBOh4}PVRNFoz&5mw zpgHr^-aoVcbtMGU%Rk6P`yZlW$Z~4*Y9RqZ2u|6AC#YWl0>)i`>RaOXqFUrz;(cHm zgg}_X!{@0sKqRgSsyif%yU(A~-}<)dzWYzQ6(1P|(?7rbo#i4%#z(*XMzb^psYVmO z37ROftO9HS0iv;nV0p&=pDU!I(4@PN1{YrJ0RgH6KYsbeg$Em?hLlIb_=`g%>x2iD zL&ErrzOmBR4isuXMrptN!ibLRg`O6}6c00Xo-F+{x|VO)me=r&TT@rz4Pz3A5C(q_ zZ=*F`1dDE0if;5fJ5u$I*ZkB19OyJG1P*3Ae-RESl3if=!A+yC=w*lwss#EpWC1n$ zi3|v+Z(ktbT*Z!_g`j{jPcoKOfeMs_J!%*tKp%TP_+-4X{8-vMD!6 z?M1*KAEXG^alNt)?LtE=+XcsNa7#S(e~Sg45Z?8GHHtEiLp}M1u({c8;ex4^z0g<% zYML|>a&qdctGA*P$Ct~1g(V2NsKsu_IOWg}U8- zbrOoOfknU`^1RfEu;-<6}u&>N5LJ*6?sF>}Nk2F)q>$+lYBC4YZkL~Fs zaUzjiHJIdT76Om2L$G>5Dw5rCpgI89glDm%>f1Q4ePwvCJrgnt&g?7HmS%uG`#G@G z1jO(FtWWO`0*<_h74cAIhc@y;qQ7#rC85G62MwrgMrbDPb|ePwKgxkRRupj8*|=}8a8K@wTOrtJJr?(mGH{Or-K#Y2htjx52aPrx z_dpBx+apoM57M(ihA@XK)&WSY1Ga))L_n@SHmh=GWl3WWd(w?MZQTE}OSfHY(gU=@@zPi3e<7%N0R1hf{oAqnId-ntR`coD|+>G;a*M><1r$o&+* zmR^WHvEVz#E*tMRb>2{yW!=rJ1`S-0#*TL+YE-o|*a{GbuIQPFGM+}L74_S%rK1KD z3Z$`bd>!l&G}hW#46%w=g9yKI)Q|X3<8nUwqmoD52UnWbJd^;Ps>0Qx&&25MF+g<(+5M>`P$)E zEt&#UiZ8WJUIijD`8mpTQzae0L5`0@VT^A-R`I(ZWwb;sh95f`cW_JZHI*A08;RuJ zQ0ASj>K2|vjesk=b?S#AMbYb_+t0MCXtd@HGm1Qru1%eRPKF+UuS6(634`$D%t><% zrGCai`ft3VneP$+v-$o%-rfgJ>Zwf_uO;O{dexU=bpP5X*=|r()0F^{JFtwE2VkOGar}$oyI{-b9PtkPgU~XKG7azC&0PC_2`k-NPa+sUE$(j>ASl^uV86Khr3jglifWOOL|#vU2qFE3s$_l{B%VglI1_?K1rVN zCKAsYV%O&qEH_Oy+S6_uH1I1Efo%lxsw_dg3XH!){%GC$sx?*%EB*XTu*?uOF5+tJ zNrPZ{;GM~VESEQ3XoJbKP+MZMongtV!$y*Uob1>&rH(`fOP^GoKCL>{5wH_yGf%aS z=s>c3)_n~)g-)5e%fFXS-H;AuzdO^tG22F z)!~;oWEJ8qWyJ3cn&M<%jFNqfWX4CY08`fMcAK~WUI$>>I?i!Xl;Z?)P`z5XvMD`t zs}lJ!!PYp{2|iWvn6&GR27ZP=^0uFFO(^Lr6Tt3SQGfw_4d zh^2$7_m-!Vd&4u}T(i7Iqufs*PQ}{@h z4j2H<;XDjzO33Vyp2R0$O!+NET|R6?pR)x*JWrsqJ;fI+@6ZQA;JjN-Jycc3eW?$@ z47217nRAHkqo#({e-iUiT|Wz!)So@1FF`N zU8~|-zPz2QIF&YwsyOW5R&kHGio3^E{57YYNmRvps@S^Ygq5Z}lDy$>6zTV) zQAL?RX5+MmWJmzwzimw7I{5v6QeU1vD>v#TR5Pma-qhk>8+E@e79vd> zG&eff62p69lOe;MU-*|5pyRkM1wf<9LTbX(WuGFXu+lbTHl<29Tu2r^P*pgxa9(v} zK%#^55HHVo47Om8Ri6dc*hhvTcV4Ca#P}`A9=6~HW>H~ax4TY0qenigo!>tIAjH7DepB2Yl+(a_lC>rs7&Xz0sOJ7A9?jTHvpVwe?lqp;(VAXtW#^9BLI^rX(&A zSRV|6!Sr`0{}rJnhVn@zM--{cA{t9scY2%Q$KpE!5-zxhh#-h@Z1FgTyMy~jHjij& zq3OcOkfhWI(MvjiQbWHSck8|lR=4mMg#Q}`?@g-U*CWB9z0&SK3BrB={z?XKtql)` zaB{(+%o|-n8@Pr0U=u`U6R^ktzPP3)7hEgXa?^!OF8Cy#CA#PlEPOXPrT|gg*CCya z0ZC@2gFD`xigkBZ zVwgXW(E>0hTAbZ+Wd#4qtb!mXE1|nf!G#($6#CqgmOzYq9r>)U-bli1#w92)>&Ag)hT&_Y^vAvqEhztj>jX)0 zCK4^LS(#bWx@@-0xYMbSDcVZ`eV+3(Ax)g@{S=8~bTJ^88$D|XR?T7(cPjcJhQWC1KIny+)Rr)`O(jDo!ZgW&% zf9`;I?#sFhIfG!%R$BEZTEg)WQG0agS>o{+O^tCYJp5BXZG45KdPH^^UkFkbjDPze zFNicFZ&wjX8cltG)2HWA$?bRzduX!r;WR7fqsYXquGdV#A`ZZ1ih%vldvq>2#m@O4 zMDBet;$7|$gq?;sm+>@PhmXV$w{9@}swnOiiX$hNhd#5;`V^RGadHW~Mwd59OW;}s z7QI_%9`5(J3wBvaMeh~txT}-t?|VP-{g1n9Y{^RRS9SUFJi`Mp>9Dz{uNH#UtQ+!T zs|aXwJuZKZ(u?<4z)%5^nQoqUG`a&0fO=Lk%_7v_TTb5T8o-;#z*rAOK42J0#Hq34 z?!y~(=TDI>l1|N*bETbsxY;LK$8sHnp=mExps*>rN>z`D`?`%%u(zvJb|a#zJKOU_ zzkBG%%z*ZnzFJq<*6nXPt{|9!jVLI|?WocV757o&$O;qZxI&q+qckg*H{pf1T zToZnpIdIT)Ka-GEUmyleYGU z`v?=aMRkqrH`WEO#0lSA>wEHFpz?L)e5=C?IQ)S3nTS05f!A61%tTKnB*(nlCx z7$Lusta|#IWW`?xGs~&nSCm#ew}1WVf#SKEAjRMCng9RKM^n>*un0XHXY&fRo9VmG zg@_|}>vGQ+DXO@2v9rMtdRuiSYik$%pmLb6-@js*U*y{mE0yIotntfgS7jr9{vj=E z4U}xW5e(p=mF@9Sq8T(9_nbMvMmB=FnIqoE%-_Yk6bE~h&$ zX1&{=Ud+@8v&agRZ#EklK}#%l8w$Lr6W?y2Ypu~y7ub+7nReR!P7Sm@gXpl?`83Q$ z`Te?rt*xce;2v6S#e_p>c{d7dDUi7`pNe3g1nlqykS&<4qz+wHY;b4#%CO+vFawr> z`?wjWlp3DZg?yD1DmfZDu>Hi`sP^XEUhPNcc1ICSd!|>4BTv=I)Wp9PK1&z*eHqe% zyC`MVc2Lv(i-GF*+(;(O)$#Dj?^Ros5BWGd$j=M<;%YvP@6TMw*fmR}B-T4YE3C4MR_ zU&DlqJJ`yr8owcV<1;Yx5{n-Rv4eD5xe?wEcHOSgnoG;!4p!>kIC@{AsaN;`xU5XK z+wSK@X6pko?pHt$?v2wHe?)s7NW#jo@C<=kjNwQ>3%xV$PI8$HQ_>gu{J;HZl_yRg zjf;Cl=^;4o_Tm5SM_a!CHu8UoTLx@*3V(Vw&MowX7eX)^igsxU8skcipgzzk98Ywm zRixOx%2v4goPnLZUNf)(M=3syu$isvVA@`nhrKc3 zVs8jB@zu{pN5eexpmp=`#}ZX@Vnod;EkOYMrpgECkfE`D-E+ zwthv7#vG4EVHg#hmg?eKc9T2Sa#d-f*Z~wCbb4CDtuO0d=9?{SchA`HNijK}B*lhA z?v(!HUFc^8c0$)w)#rE1xUD__?>_mOp8l3x4L09ufrvZ5C&8ohBMCv-0A}<4C~;p) zes?&xw+Kw+W_G!o;_wj$X&zgdp1y-}NB8vAFB(W`FaTv-m zpSFP0&Irt+nNX`@Swm4hx_Zx^eh$Q?4AA;&v4*!~-?rq{1y{JLy6{h=X46*R4BZC% zo=j5H<8Z(h-mq0?^)dr8(D!ummS2w=lK(E6Xw~!NAIy64JMs#L2l-O(lD$r7+a`mS z9T~SLHI2xST&R8kE&J)_-E`(8aUy-Y8;&cDYkJ|IG+YPvO07@SF?Jt7D6vpuoke0A zgOdH?tbQGv)VmEfTvBS$6-odkO0H8kAk(6&nD6Lf9cpO=XlmYve_#VwoA4&Z&f}u| zNxEW@$Q_t@&bHcjB4}oA^4f?D;_dG%FGcr%-+E$c*d%*LP(zxt zDGYFcP#s(UU^!HcW{yu=hMMqnU}oGk6lMK8ik%+C9!V@+CN}{H&8ufp9_!_>!sKfF zlcCATRSGK(D|A$!lP0V|rOb)Zsx>&Z;S1F<5~(=)jTOSWCR|?;?P46CiK4$zj^;V9 zIQNgD=w6~33&D&y=N(bhWkhA&LS{+ZfiNvM*~xCj`PnBdX?1uSN#PM%y4~-TyiWtB zf9{dUMSp`ot8VfPj*L5(zdqs0C}9J8m0zm~p@2UrtO?p$xLJJ*)h~`nyTfdh>N49h zx`(>Srd zb#a=HSQ_5qqf6Kn%h4}fA1Mn*t7)Nf+CBS#jWji4l9+hXXNi8m_od=!W`!1a7vK=- zf6W4IivCabe@q0^SKGf`n9-&0avWJIE&_$XtunShj;2Nq|*KSow6FCM4Jd&N> zZ%MNAtK~-15-q`NE^}qAaHH_X%@Z5x$B9gCSf(gupK19wlzx}gFu)i<^WeQ~THJv| zs_NKsXS^A}QL<{&s!hAw$*CGKczOZKZon%M<*h!N=o_;^V+`UPKtx^J8JejO`*-L- z#{jQ(jmKr&fCF9bAeZ$k-a?*16V(ZSpp{A>4H)fuZ2n`+enxrU58 zbVMX#tVn-AO*id6RO5GpQFR zm&;Zi*ponE{7^g0}zUBVb|F(Osdgl7gf$9<#cUW$}9Ybsa~ zhh9!7LZ;Ro{VP`r0r%Lqhsn?=`lBP}6|?Rky!eU-YWaX9iQ?!=Zs};tu4hP6bc;53 zgKr6M_vbqA(YR!y8V!x#5|Vku#~+EJ*esH7j!T0xb!T#{TCn30x^5 z%J9oDnGMOkJIxSR8z4+)NMHBdx1wHktr1j$t!7E))_anq-BW7B(&-E)eiCf968VS$ zx*6n)Bbd!dM6Jl&m~lz(L6+Q1SJME+saH188&53h)C0y?^eo@1`%ADs0#zm8Lb<;#3|okKl8?Uq3|KsE*+Dub+7 z_h)~%Nqv7R5LG!lrkO!bV(J#Dk?R-1F3}!~CW*^#Tm%n9v5O{&yKG)Gsdn=u>*bk# zc)k~{2UXL{+bVncSHB7HiSO>^Um!H&{tCe;HteTj)UQePqj%tJHYdFRi_J*pmV9Pt z_*;UYdTp24c5+`uFNd=PBs>ojp{C+0!L(s^)&}V<=Jly>u7_b3YO^ z1}$-d*YCCj#e89eI7J^nJ&u1mitp~fswP+%hp#0ZSPfn7#41R)MH1piIS9C$B*py; zBYp}&nQhK3j1aLGomIW_fc>n2t!~{>=v*oGfw8#FP_3Gz5g(cg83JE3ciX#GI5yg$ zj9G$olh{#Xhsu4KHiY!mJzM%OV(r+_)h%A?8VFq27W}!??(FyK3&ZGk7pqGk>6DbS znn4%74U(Du*8VH2yWN)_C34uTp+V>SQMuk!)x?4~`6X0^8LFl_`?ZJd92z~hX0dkj ztqS$@yBod_m`Far)Mgh80%C1YimsXbry{sg$2X|0k7`)0qes;yzxMF>E%{>#XH^v* zS$h56C#JZc`3vr6o-^dcwC-mSed9)zb zf5X}pqXF_HG*~pXu@0M_b(Qx6 zF8aEVueRqA(Hy$E^oq^cC%8&ccszIVrlBps_V!Iop9nhEjeYE#4o1Ucc8*El)h?&%?hnM=JTrhd#+CuP8vs#NItj@6PR?- z`XyHlVNzY#c}%|wxW1|dIsFTa${Oqbnnkaya;t5;)7W_p&$?h^Jc_Qm%UUVaQ8Jd# z678A%0kce^5xg9yN?WQ_@iXn`5`8W}>Vwzg=wqVj>FpDVo@mk4aZeZ(MW58(MYN7X z>Vx_?`tQqxLaKOB@+Z_vku7oLGd_~`E!i(;yiya5*CuPEc)T|1fJQG0{>o%A(JR+L zl#%=Dpe;UjobRF9ct);FCrY(G%Wz(TeeJ$s$uEde>2F-nJM>gLUtp3ruuWt?xRda< z9|jow=$7qoX5Cyh^F{SM3=tLTErKJpIo-k3xC*1Kuo|Wkd&+^eLmEY!)%{>RkM#2+ z0^RCtFq>S(Ef1~3BwKMTyhI%R(FG{KW%u~OXA^Ukn`o+Qz#ZTv}2+@^Kh?dJO| z3sfy=EiJT6f*;>|XB+*KP)5Uiu3cg--9ISl!x0x;gG!?fk&Jr~aGI)WBvU&@!xg}p z{y9ukn|+M{zi%d33r5{;4M7=%i9fI?xVbp$PDM$#%tz4{weB(-?MyeCU^gs1c*v=V zkMp}d`jrPi4zo?~ocFU9`#D-pp9bdG+LEI_ZMH=l9oiN2E$D&5 z5N#^fr%uh?s6FfF)XIzpPWb%f1KB>^^LBskX!lKKszM*NnAM$ieKu{Wt*3W&WrHPT z=ioG5mIa@|Fz~F1$e9 z)YVZMj+8qGN7fzUz4h)a!y<**Rjfs(V*P+s4HW1eWKSQ@k21&Hgu%p!(QC=3GfU`A zZXaMgBuP76cPy40uQ{ObvsDfJS9l7W^MAj;@L10a!~T9BX;Z`gDcXKy^T-n=z}WCL z=rIu^Hb~b;^E%f$8a?Aq_^Qp4#j_-GPX${ourUfeL1On*u+0LKQD9?FUp;{@Ti}1) z;j<^xL7xSL7En|8Y@%=h(#~tLHop#QZCzvkLKG(QAY$1?!l*Sqd&@2!@%q5VyO zrf_E5HzS~9NZqrpBOTOQ@C_dH*%KD@U;CY)&cZ%T7;VS<5!I%D6)pDvL09Y9*ifSI zsv6NZgUmuFP_#@7&#CtJJTBw4wOZI)Uv(?2dR2btv69pSKUxOIcznXm;_r@<9pqWf zX}wya{XBZKZ$_Y@e3Q9YVu3!1{N&@l2g2KS95u0_eK0809dWsY`;Su0`(W|Ac_xheJ;tcCRZO@RNJ`^0q2l>y?xsaUiZ}MWvs-R>&pW&4dkpZs z0{jYsb9X2JdG_;FE@xEG=nex_U7X0&erZ{%m}w+bG7i}N$S5hjxF)tYnmXJppNybp_H*6t4)2E~DRn36QtC&gIgO+> zXd`K?>*r4N9b^OHsRW1jrSP*nnacjRqI9cTM8r*O@XhXVH>Ne&P!N{D{QHhDB8%>3^I%*58;Fu!~Ur)Yz||8}^ySDXSW zJPk#-)3AWfTwd#Ul?@>pdx_O`GU~Qzfc6mb5zvRo83BE@p%Q3Y_!n9~dZ{3~51%@5 z?}$H64>|E1@yF|i!Xm$mKh8(?qNQX}=n}r-GT=4q&18CHf?DTWgM*iPH@wF1Orf|k zqUnI)?Jaz0CY^03!jXbeE4zmSrdF+6tbd|ClkZa!o$PGCT3vR@xomaa+qX(2S(5TyTR&7?y3;iioVLGqIy}W4 zU;+9IzhQ_j$AKHpaXT zEUQ^(QsDtqv%j^{4BaZrrAtX!~0 z$s30;DC#TQTN%&b}6ZoU<&M{AqxIZ4!(yWIp2#wPJ(ug;+RuS~gvZE>jTar@+U>v2P) zS3)KjGkGX!3PE*YS`97JEDm`YMRm9Ca78Piidx+uMv)n^7R8@uEtIzuDWfHk?aH0# zt^j;-T*hC|2tjAkxg*KeG!QPbW&8FcT-Q*>$5aGF~Bltdu8PL3-ZPV0XKu z1$fxq?jh23O>!eju;8k z1ywP?`94Xpq(D5%pjKIy^BGNTZqr^Y15%(6iL}`~-Y4;@Wv6+M_L~P9n$1G{*KSiIs2lX>_W+B!VEKvk=Be~^ z!&jJ`ur%wID;;vfs=^3DYPDysa|K_e&0?_<=&s#KqO7~XheFUT7?aYwVs+_YDNswJ z%TQp8CxyAGQ7QHu#BttpQDKvIXeH)F`!Pvb+$029UES!cyqd{sjW>n^=w(CEdjJ`W zR0hAQ#Ay6m!|bmv6&ciF+8DPjX9237Ut@`nXb>O4Le-=%WwrIZgYoEpG7>yLG2ZhN zn@juI0j{TqoMmt>WIBnK{@3ax#S|Cc5K7kUd5O&fU7#a?d&U6oDg$f^PZmJ4$U0zv z`*{r4lGAe##yz|N6;|iy%RHARdBi}`+q1mZKOhKZ$Q1|!&cBbx=IBan8jG`5%>$L| zlVzK3XGb>OHk-`w-8S8xrDzZ5kGNpjN4rfo(wm+7kEYS@5bT?y+pQud;y5*xo&^u3 zCR?(*nEp$Nbobn#PNu(TCf{xz{UsBdcc9&?)t7^%WqfV&NiMiu__J%%buc~mj=cw4 zhT`x`W^&TW;e z^Du%dSLeSk!M`?Myk?wv)pf$l-rbaZS}H`}G&AAhr%@{jIh2_taoUJhvPG zq-dJ?fdQ=n#8f~8ZE>O-M z6ny?M3w1$yKx)y2EJV4J(kz(!SW@QSYu>w5!qHl{J0V<1OJYsZ*6q2|2~JINuULJm z#&4hZYr#mnR|%lMHEAKC%Sp~!=1A;;kG~W|0rj~i!JmH{?SW zZk=EzyhGdxiZ|I(trEfSK!aD!>T+1+a(!rw;c5d^6J7um-i$h*PvuhGcfGZKC{sdF zoxb2vqC*@>nAV#%^#RF&OY*H=(@^Lt++lYh{RY@hELnJU3}A;?d~H+AcP2DXFu`b7 zJdIx)KRr9t$!{FLDg4s>X7HQNZ!*8B{5tr}Mu9HnX0eR<7YykujkYVM(yi_Y@K4)c znzyvb{mZk1HKeNCN&lHWWi+onfN<%AlbTRs$sg^uEfO^S6*L9XO8e4Vczcj-LjQ3J zazC;7T69S!LzvcA&!UF5MEYHKpjDEfdVQ%tt*vs0!4{OxhyHKt<%E%?3EHjSJ6N~Q3ebv^2EATJt8Z5&w6^e3&Kg&n z;rPMw8xg!=mGJ7qs|7D7nZ;n?MeN1{R4*dmvB(BI|56_wBDj8yA1H$mAt*!EW%5l6 zx6zMQFGXBf*gQD-$Dw|mA6*7#+%-+oq9GOb3hr$Ncc2JH5Fe&$9>EgCW`lUFAUtEl?=?}QlV4|;Q}&IPeZcyF`Evfr zp|-@UU$>eMJpX%r`&=7O1Cwr$66>ejaS^cEPZBYDX8NYGi&4RIQ zSL-*$n176? zne9cn54${o6F;rZmpiqGw0#V{*={aQo>ae7A#6;GVVh}!soDV zCfWb;P8PSeeUNMQ*^h{`=gyC^j+-?U?YnnnC8#FKdM;maqf2@l=Tl&ow?jXta>TnV zc#M#s7Sct$#UhKUZhbZKA7DVL>~*bfcR9XjjlBeC*XH3`Z}p$SgjjQR8rq*5%}AMx zE(Z&7)}88MqLGD`3BpfF{W*d@7qQ888^yY8*m+Yh+|t+FHSQCW5VdNbms z>!4!gn-MThx<5v#bJB%joWMqvm1W)+7e=+ccK4u-nudFel|nJmwW}$&lPQ;WD=Zbw z!hy_mr7FVOBlfwE@C^5D&oDwzx8%a#6N4P>$v6E)7d{cOrU)&xEws5}6RtjFtSXWs zJy(MELcWDHJK^)He(6PE*$?MBpt$!dVuYfahFgU zYgw2khb3&vf^UuCyUleHn{_uEDYcX9{SvJNR`ArRNYTL~!$37mu`}?EFR-h6x||U0=kfD}BFbC27R1Ar zyPZTCx5iMYDK-ZyVwzk>Ap3y2@H0r2gXhbDTwtlafGq;^!nJ~24HBJb&a1^;9gx$3 zi?jXM(g@MXr8NKb`FEwcy_{wWTEE-l%=3v5+?uGsLzx>QC0(n>49i#t@N^zijd8}) zEu*?X2O})E7n;+S;RQNdF%?vwqOoQn2O5Z-sC|RKfcE3*}|04x`UJKteJlRPy#?>-I8l|kN90o`6y^L zCdCuOo>@}$UaoUKh~*N&#~QsH_v z-ra9^CcFzt5_&l15Kg z=SbytM+o{5w1mP0&Pe2%*$7=se%qLJyN4|Uq`&rO(WZ=SR>+YgBFoG~ZqLGmYF*Ds z%+C$!*YnsxN!Yqstz^R1BPi!MUk(%USAr%Zgbl=*Rz!8Ujje6vUTsPgzK(Eaq}6;( zD!3{QVcq-Lqw@kFSAy^*c=VNZrly-ewf5$_UUhHbrn@&G9(J~Ym@#ZlWCB@)Kw@EifMy#qE%2P_|qU@feK)e#OCEPJ#I zSo0zKVByI&R(U(p9{x~F{!+2Jy9mz#pbT$Zc&Xs&b&6euhnPKv*A|WuybeawpyBOF zuNR}52%n_1Ze z#j$@s{F1yckAp@i$@8&)M;?FOspTU6DF2Mu|BU=M$No+7Z;Aa6%KvigzeoPM)5`E} z#oxp8)}3)skCM!b{a4C=ckKVL{99vxm;8OPe}ept6Us%j%0DgkA143&*gqOSD6~Gi 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ùp4ZMybJ0+grfTxA2|B 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%0DT;3#soe!0O8I6w&S@BY5a)rOo7FK4KNdB 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 C!T(7B diff --git a/ext/openssl/windows/x86/bin/ssleay32.dll b/ext/openssl/windows/x86/bin/ssleay32.dll deleted file mode 100644 index 5b86b87782047f047746752008c038aa28e410f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278528 zcmeEveSB2K_4m#05*7&Djjk9q%7UwnCSo+H0tvc-5Ks{}#O$J?;Op z2?>_~ZEdTqt<<)^V%3(mHb$+Q5G3F$zO-VgEn2m6-J)1)08#h(erN98-C*tWdH#RU z?7cH{=A1KU&YU^(dN00wqvqB$&4a&8M$>xm7|=)@{1j9YlEDrVHH1;+fji?c#IYri)~F?v2+Pq;+J;!ZS2&c0r+b=l9DlbJF%| zuJNM^#%S6}kkAAa7XL0k1@At*R8neq<2$ewGK7E5Q`-oMQmFXn)CqlOX=5#N%fORhzdlnG=b1?>M%aMv%o1%Q;1wh-y3 z;(7d+;HDw=|NqOAKvi%5^ZEa(cJ}n1o6^cj6a(`9O2R8J9*i9d~YYt7M^ zmN}*anUmW*o%O+@9xs!gK$0Hq?Wzy@|D_juf-z56oHpF8CAay+!^7MfGu2kQedfww ziTUeY$kMqeSkksHag4d<9fZu5d-2=WtIrTj$jmH_ibp59kl*uwR;g)mUsU|U35O6K z5f#Udmg&i-??zTF@iiljhw;$4ZlCcxzO~>d<`-okpWNn8?#L{-GP$j&KlyYA8+qK9 zS+fo=18ZauF-?&td=oV7DJrQsvl@jfnW~M4bT+gSer8g*_0$hh+%rBOhuBo{a7~kO zUc4CBLyn3#>}!_zgC0rTij2@Si9P-E7=#fUmATC~FtdcsL7X6Ad?@_-GXZAKoQD*$ zXtsobv~y;)^%GE-S`6m&4a?BXr;<;-s|v4Y_`u=Rj{vQ&S)R#c^zN4U37RhxY^%T{ zIxrK$1C7IH1KoZ|vu#jc|2)b7D$xOne*zE;%&cZf2WHkw=&ol`GQjrgsqX>SngH?u z0W+F47VlZK?;M?nHUUsT9Rozr17A2Qz6*0ps$Nj-7=dKH?FFJ*v#~�)SWM=vt4X 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 z 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

    ixF7mkoJ~xATBN5YGe+L_I~ei>u%Q1b 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 - -# ifdef OPENSSL_NO_AES -# error AES is disabled. -# endif - -# include - -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 -# define AES_BLOCK_SIZE 16 - -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be a hidden type, but EVP requires that the size be known */ -struct aes_key_st { -# ifdef AES_LONG - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -const char *AES_options(void); - -int AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); -int AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); - -int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); -int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); - -void AES_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); -void AES_decrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); - -void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key, const int enc); -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num); -void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char ivec[AES_BLOCK_SIZE], - unsigned char ecount_buf[AES_BLOCK_SIZE], - unsigned int *num); -/* NB: the IV is _two_ blocks long */ -void AES_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -/* NB: the IV is _four_ blocks long */ -void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - -int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); -int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); - - -#ifdef __cplusplus -} -#endif - -#endif /* !HEADER_AES_H */ diff --git a/ext/openssl/windows/x86/include/openssl/applink.c b/ext/openssl/windows/x86/include/openssl/applink.c deleted file mode 100644 index 2831b39e..00000000 --- a/ext/openssl/windows/x86/include/openssl/applink.c +++ /dev/null @@ -1,129 +0,0 @@ -#define APPLINK_STDIN 1 -#define APPLINK_STDOUT 2 -#define APPLINK_STDERR 3 -#define APPLINK_FPRINTF 4 -#define APPLINK_FGETS 5 -#define APPLINK_FREAD 6 -#define APPLINK_FWRITE 7 -#define APPLINK_FSETMOD 8 -#define APPLINK_FEOF 9 -#define APPLINK_FCLOSE 10 /* should not be used */ - -#define APPLINK_FOPEN 11 /* solely for completeness */ -#define APPLINK_FSEEK 12 -#define APPLINK_FTELL 13 -#define APPLINK_FFLUSH 14 -#define APPLINK_FERROR 15 -#define APPLINK_CLEARERR 16 -#define APPLINK_FILENO 17 /* to be used with below */ - -#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */ -#define APPLINK_READ 19 -#define APPLINK_WRITE 20 -#define APPLINK_LSEEK 21 -#define APPLINK_CLOSE 22 -#define APPLINK_MAX 22 /* always same as last macro */ - -#ifndef APPMACROS_ONLY -# include -# include -# include - -static void *app_stdin(void) -{ - return stdin; -} - -static void *app_stdout(void) -{ - return stdout; -} - -static void *app_stderr(void) -{ - return stderr; -} - -static int app_feof(FILE *fp) -{ - return feof(fp); -} - -static int app_ferror(FILE *fp) -{ - return ferror(fp); -} - -static void app_clearerr(FILE *fp) -{ - clearerr(fp); -} - -static int app_fileno(FILE *fp) -{ - return _fileno(fp); -} - -static int app_fsetmod(FILE *fp, char mod) -{ - return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT); -} - -#ifdef __cplusplus -extern "C" { -#endif - -__declspec(dllexport) -void ** -# if defined(__BORLANDC__) -/* - * __stdcall appears to be the only way to get the name - * decoration right with Borland C. Otherwise it works - * purely incidentally, as we pass no parameters. - */ - __stdcall -# else - __cdecl -# endif -OPENSSL_Applink(void) -{ - static int once = 1; - static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] = - { (void *)APPLINK_MAX }; - - if (once) { - OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin; - OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout; - OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr; - OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf; - OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets; - OPENSSL_ApplinkTable[APPLINK_FREAD] = fread; - OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite; - OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod; - OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof; - OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose; - - OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen; - OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek; - OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell; - OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush; - OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror; - OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; - OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; - - OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; - OPENSSL_ApplinkTable[APPLINK_READ] = _read; - OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; - OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; - OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; - - once = 0; - } - - return OPENSSL_ApplinkTable; -} - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/asn1.h b/ext/openssl/windows/x86/include/openssl/asn1.h deleted file mode 100644 index 68e791fc..00000000 --- a/ext/openssl/windows/x86/include/openssl/asn1.h +++ /dev/null @@ -1,1419 +0,0 @@ -/* crypto/asn1/asn1.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H - -# include -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include - -# include - -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define V_ASN1_UNIVERSAL 0x00 -# define V_ASN1_APPLICATION 0x40 -# define V_ASN1_CONTEXT_SPECIFIC 0x80 -# define V_ASN1_PRIVATE 0xc0 - -# define V_ASN1_CONSTRUCTED 0x20 -# define V_ASN1_PRIMITIVE_TAG 0x1f -# define V_ASN1_PRIMATIVE_TAG 0x1f - -# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ -# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ -# define V_ASN1_ANY -4/* used in ASN1 template code */ - -# define V_ASN1_NEG 0x100/* negative flag */ - -# define V_ASN1_UNDEF -1 -# define V_ASN1_EOC 0 -# define V_ASN1_BOOLEAN 1 /**/ -# define V_ASN1_INTEGER 2 -# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) -# define V_ASN1_BIT_STRING 3 -# define V_ASN1_OCTET_STRING 4 -# define V_ASN1_NULL 5 -# define V_ASN1_OBJECT 6 -# define V_ASN1_OBJECT_DESCRIPTOR 7 -# define V_ASN1_EXTERNAL 8 -# define V_ASN1_REAL 9 -# define V_ASN1_ENUMERATED 10 -# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) -# define V_ASN1_UTF8STRING 12 -# define V_ASN1_SEQUENCE 16 -# define V_ASN1_SET 17 -# define V_ASN1_NUMERICSTRING 18 /**/ -# define V_ASN1_PRINTABLESTRING 19 -# define V_ASN1_T61STRING 20 -# define V_ASN1_TELETEXSTRING 20/* alias */ -# define V_ASN1_VIDEOTEXSTRING 21 /**/ -# define V_ASN1_IA5STRING 22 -# define V_ASN1_UTCTIME 23 -# define V_ASN1_GENERALIZEDTIME 24 /**/ -# define V_ASN1_GRAPHICSTRING 25 /**/ -# define V_ASN1_ISO64STRING 26 /**/ -# define V_ASN1_VISIBLESTRING 26/* alias */ -# define V_ASN1_GENERALSTRING 27 /**/ -# define V_ASN1_UNIVERSALSTRING 28 /**/ -# define V_ASN1_BMPSTRING 30 -/* For use with d2i_ASN1_type_bytes() */ -# define B_ASN1_NUMERICSTRING 0x0001 -# define B_ASN1_PRINTABLESTRING 0x0002 -# define B_ASN1_T61STRING 0x0004 -# define B_ASN1_TELETEXSTRING 0x0004 -# define B_ASN1_VIDEOTEXSTRING 0x0008 -# define B_ASN1_IA5STRING 0x0010 -# define B_ASN1_GRAPHICSTRING 0x0020 -# define B_ASN1_ISO64STRING 0x0040 -# define B_ASN1_VISIBLESTRING 0x0040 -# define B_ASN1_GENERALSTRING 0x0080 -# define B_ASN1_UNIVERSALSTRING 0x0100 -# define B_ASN1_OCTET_STRING 0x0200 -# define B_ASN1_BIT_STRING 0x0400 -# define B_ASN1_BMPSTRING 0x0800 -# define B_ASN1_UNKNOWN 0x1000 -# define B_ASN1_UTF8STRING 0x2000 -# define B_ASN1_UTCTIME 0x4000 -# define B_ASN1_GENERALIZEDTIME 0x8000 -# define B_ASN1_SEQUENCE 0x10000 -/* For use with ASN1_mbstring_copy() */ -# define MBSTRING_FLAG 0x1000 -# define MBSTRING_UTF8 (MBSTRING_FLAG) -# define MBSTRING_ASC (MBSTRING_FLAG|1) -# define MBSTRING_BMP (MBSTRING_FLAG|2) -# define MBSTRING_UNIV (MBSTRING_FLAG|4) -# define SMIME_OLDMIME 0x400 -# define SMIME_CRLFEOL 0x800 -# define SMIME_STREAM 0x1000 - struct X509_algor_st; -DECLARE_STACK_OF(X509_ALGOR) - -# define DECLARE_ASN1_SET_OF(type)/* filled in by mkstack.pl */ -# define IMPLEMENT_ASN1_SET_OF(type)/* nothing, no longer needed */ - -/* - * We MUST make sure that, except for constness, asn1_ctx_st and - * asn1_const_ctx are exactly the same. Fortunately, as soon as the old ASN1 - * parsing macros are gone, we can throw this away as well... - */ -typedef struct asn1_ctx_st { - unsigned char *p; /* work char pointer */ - int eos; /* end of sequence read for indefinite - * encoding */ - int error; /* error code to use when returning an error */ - int inf; /* constructed if 0x20, indefinite is 0x21 */ - int tag; /* tag from last 'get object' */ - int xclass; /* class from last 'get object' */ - long slen; /* length of last 'get object' */ - unsigned char *max; /* largest value of p allowed */ - unsigned char *q; /* temporary variable */ - unsigned char **pp; /* variable */ - int line; /* used in error processing */ -} ASN1_CTX; - -typedef struct asn1_const_ctx_st { - const unsigned char *p; /* work char pointer */ - int eos; /* end of sequence read for indefinite - * encoding */ - int error; /* error code to use when returning an error */ - int inf; /* constructed if 0x20, indefinite is 0x21 */ - int tag; /* tag from last 'get object' */ - int xclass; /* class from last 'get object' */ - long slen; /* length of last 'get object' */ - const unsigned char *max; /* largest value of p allowed */ - const unsigned char *q; /* temporary variable */ - const unsigned char **pp; /* variable */ - int line; /* used in error processing */ -} ASN1_const_CTX; - -/* - * These are used internally in the ASN1_OBJECT to keep track of whether the - * names and data need to be free()ed - */ -# define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ -# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ -# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ -# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ -struct asn1_object_st { - const char *sn, *ln; - int nid; - int length; - const unsigned char *data; /* data remains const after init */ - int flags; /* Should we free this one */ -}; - -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ -/* - * This indicates that the ASN1_STRING is not a real value but just a place - * holder for the location where indefinite length constructed data should be - * inserted in the memory buffer - */ -# define ASN1_STRING_FLAG_NDEF 0x010 - -/* - * This flag is used by the CMS code to indicate that a string is not - * complete and is a place holder for content when it had all been accessed. - * The flag will be reset when content has been written to it. - */ - -# define ASN1_STRING_FLAG_CONT 0x020 -/* - * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING - * type. - */ -# define ASN1_STRING_FLAG_MSTRING 0x040 -/* This is the base type that holds just about everything :-) */ -struct asn1_string_st { - int length; - int type; - unsigned char *data; - /* - * The value of the following field depends on the type being held. It - * is mostly being used for BIT_STRING so if the input data has a - * non-zero 'unused bits' value, it will be handled correctly - */ - long flags; -}; - -/* - * ASN1_ENCODING structure: this is used to save the received encoding of an - * ASN1 type. This is useful to get round problems with invalid encodings - * which can break signatures. - */ - -typedef struct ASN1_ENCODING_st { - unsigned char *enc; /* DER encoding */ - long len; /* Length of encoding */ - int modified; /* set to 1 if 'enc' is invalid */ -} ASN1_ENCODING; - -/* Used with ASN1 LONG type: if a long is set to this it is omitted */ -# define ASN1_LONG_UNDEF 0x7fffffffL - -# define STABLE_FLAGS_MALLOC 0x01 -# define STABLE_NO_MASK 0x02 -# define DIRSTRING_TYPE \ - (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) -# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) - -typedef struct asn1_string_table_st { - int nid; - long minsize; - long maxsize; - unsigned long mask; - unsigned long flags; -} ASN1_STRING_TABLE; - -DECLARE_STACK_OF(ASN1_STRING_TABLE) - -/* size limits: this stuff is taken straight from RFC2459 */ - -# define ub_name 32768 -# define ub_common_name 64 -# define ub_locality_name 128 -# define ub_state_name 128 -# define ub_organization_name 64 -# define ub_organization_unit_name 64 -# define ub_title 64 -# define ub_email_address 128 - -/* - * Declarations for template structures: for full definitions see asn1t.h - */ -typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; -typedef struct ASN1_TLC_st ASN1_TLC; -/* This is just an opaque pointer */ -typedef struct ASN1_VALUE_st ASN1_VALUE; - -/* Declare ASN1 functions: the implement macro in in asn1t.h */ - -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) - -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) - -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); - -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); - -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) - -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); - -# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) - -# define CHECKED_D2I_OF(type, d2i) \ - ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) -# define CHECKED_I2D_OF(type, i2d) \ - ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) -# define CHECKED_NEW_OF(type, xnew) \ - ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) -# define CHECKED_PTR_OF(type, p) \ - ((void*) (1 ? p : (type*)0)) -# define CHECKED_PPTR_OF(type, p) \ - ((void**) (1 ? p : (type**)0)) - -# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) -# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) - -TYPEDEF_D2I2D_OF(void); - -/*- - * The following macros and typedefs allow an ASN1_ITEM - * to be embedded in a structure and referenced. Since - * the ASN1_ITEM pointers need to be globally accessible - * (possibly from shared libraries) they may exist in - * different forms. On platforms that support it the - * ASN1_ITEM structure itself will be globally exported. - * Other platforms will export a function that returns - * an ASN1_ITEM pointer. - * - * To handle both cases transparently the macros below - * should be used instead of hard coding an ASN1_ITEM - * pointer in a structure. - * - * The structure will look like this: - * - * typedef struct SOMETHING_st { - * ... - * ASN1_ITEM_EXP *iptr; - * ... - * } SOMETHING; - * - * It would be initialised as e.g.: - * - * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; - * - * and the actual pointer extracted with: - * - * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); - * - * Finally an ASN1_ITEM pointer can be extracted from an - * appropriate reference with: ASN1_ITEM_rptr(X509). This - * would be used when a function takes an ASN1_ITEM * argument. - * - */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else - -/* - * Platforms that can't easily handle shared global variables are declared as - * functions returning ASN1_ITEM pointers. - */ - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) - -# define ASN1_ITEM_rptr(ref) (ref##_it()) - -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif - -/* Parameters used by ASN1_STRING_print_ex() */ - -/* - * These determine which characters to escape: RFC2253 special characters, - * control characters and MSB set characters - */ - -# define ASN1_STRFLGS_ESC_2253 1 -# define ASN1_STRFLGS_ESC_CTRL 2 -# define ASN1_STRFLGS_ESC_MSB 4 - -/* - * This flag determines how we do escaping: normally RC2253 backslash only, - * set this to use backslash and quote. - */ - -# define ASN1_STRFLGS_ESC_QUOTE 8 - -/* These three flags are internal use only. */ - -/* Character is a valid PrintableString character */ -# define CHARTYPE_PRINTABLESTRING 0x10 -/* Character needs escaping if it is the first character */ -# define CHARTYPE_FIRST_ESC_2253 0x20 -/* Character needs escaping if it is the last character */ -# define CHARTYPE_LAST_ESC_2253 0x40 - -/* - * NB the internal flags are safely reused below by flags handled at the top - * level. - */ - -/* - * If this is set we convert all character strings to UTF8 first - */ - -# define ASN1_STRFLGS_UTF8_CONVERT 0x10 - -/* - * If this is set we don't attempt to interpret content: just assume all - * strings are 1 byte per character. This will produce some pretty odd - * looking output! - */ - -# define ASN1_STRFLGS_IGNORE_TYPE 0x20 - -/* If this is set we include the string type in the output */ -# define ASN1_STRFLGS_SHOW_TYPE 0x40 - -/* - * This determines which strings to display and which to 'dump' (hex dump of - * content octets or DER encoding). We can only dump non character strings or - * everything. If we don't dump 'unknown' they are interpreted as character - * strings with 1 octet per character and are subject to the usual escaping - * options. - */ - -# define ASN1_STRFLGS_DUMP_ALL 0x80 -# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 - -/* - * These determine what 'dumping' does, we can dump the content octets or the - * DER encoding: both use the RFC2253 #XXXXX notation. - */ - -# define ASN1_STRFLGS_DUMP_DER 0x200 - -/* - * All the string flags consistent with RFC2253, escaping control characters - * isn't essential in RFC2253 but it is advisable anyway. - */ - -# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ - ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - ASN1_STRFLGS_UTF8_CONVERT | \ - ASN1_STRFLGS_DUMP_UNKNOWN | \ - ASN1_STRFLGS_DUMP_DER) - -DECLARE_STACK_OF(ASN1_INTEGER) -DECLARE_ASN1_SET_OF(ASN1_INTEGER) - -DECLARE_STACK_OF(ASN1_GENERALSTRING) - -typedef struct asn1_type_st { - int type; - union { - char *ptr; - ASN1_BOOLEAN boolean; - ASN1_STRING *asn1_string; - ASN1_OBJECT *object; - ASN1_INTEGER *integer; - ASN1_ENUMERATED *enumerated; - ASN1_BIT_STRING *bit_string; - ASN1_OCTET_STRING *octet_string; - ASN1_PRINTABLESTRING *printablestring; - ASN1_T61STRING *t61string; - ASN1_IA5STRING *ia5string; - ASN1_GENERALSTRING *generalstring; - ASN1_BMPSTRING *bmpstring; - ASN1_UNIVERSALSTRING *universalstring; - ASN1_UTCTIME *utctime; - ASN1_GENERALIZEDTIME *generalizedtime; - ASN1_VISIBLESTRING *visiblestring; - ASN1_UTF8STRING *utf8string; - /* - * set and sequence are left complete and still contain the set or - * sequence bytes - */ - ASN1_STRING *set; - ASN1_STRING *sequence; - ASN1_VALUE *asn1_value; - } value; -} ASN1_TYPE; - -DECLARE_STACK_OF(ASN1_TYPE) -DECLARE_ASN1_SET_OF(ASN1_TYPE) - -typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) - -typedef struct NETSCAPE_X509_st { - ASN1_OCTET_STRING *header; - X509 *cert; -} NETSCAPE_X509; - -/* This is used to contain a list of bit names */ -typedef struct BIT_STRING_BITNAME_st { - int bitnum; - const char *lname; - const char *sname; -} BIT_STRING_BITNAME; - -# define M_ASN1_STRING_length(x) ((x)->length) -# define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) -# define M_ASN1_STRING_type(x) ((x)->type) -# define M_ASN1_STRING_data(x) ((x)->data) - -/* Macros for string operations */ -# define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ - ASN1_STRING_type_new(V_ASN1_BIT_STRING) -# define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) -# define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) - -# define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ - ASN1_STRING_type_new(V_ASN1_INTEGER) -# define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) - -# define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ - ASN1_STRING_type_new(V_ASN1_ENUMERATED) -# define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) - -# define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ - ASN1_STRING_type_new(V_ASN1_OCTET_STRING) -# define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) -# define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) -# define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) -# define M_i2d_ASN1_OCTET_STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ - V_ASN1_UNIVERSAL) - -# define B_ASN1_TIME \ - B_ASN1_UTCTIME | \ - B_ASN1_GENERALIZEDTIME - -# define B_ASN1_PRINTABLE \ - B_ASN1_NUMERICSTRING| \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_T61STRING| \ - B_ASN1_IA5STRING| \ - B_ASN1_BIT_STRING| \ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING|\ - B_ASN1_SEQUENCE|\ - B_ASN1_UNKNOWN - -# define B_ASN1_DIRECTORYSTRING \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_TELETEXSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_UTF8STRING - -# define B_ASN1_DISPLAYTEXT \ - B_ASN1_IA5STRING| \ - B_ASN1_VISIBLESTRING| \ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING - -# define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) -# define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ - pp,a->type,V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_PRINTABLE(a,pp,l) \ - d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ - B_ASN1_PRINTABLE) - -# define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) -# define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ - pp,a->type,V_ASN1_UNIVERSAL) -# define M_d2i_DIRECTORYSTRING(a,pp,l) \ - d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ - B_ASN1_DIRECTORYSTRING) - -# define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) -# define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ - pp,a->type,V_ASN1_UNIVERSAL) -# define M_d2i_DISPLAYTEXT(a,pp,l) \ - d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ - B_ASN1_DISPLAYTEXT) - -# define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ - ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) -# define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ - (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) - -# define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ - ASN1_STRING_type_new(V_ASN1_T61STRING) -# define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_T61STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_T61STRING(a,pp,l) \ - (ASN1_T61STRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) - -# define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ - ASN1_STRING_type_new(V_ASN1_IA5STRING) -# define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_IA5STRING_dup(a) \ - (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_i2d_ASN1_IA5STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_IA5STRING(a,pp,l) \ - (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ - B_ASN1_IA5STRING) - -# define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ - ASN1_STRING_type_new(V_ASN1_UTCTIME) -# define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) - -# define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ - ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) -# define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ - (const ASN1_STRING *)a) - -# define M_ASN1_TIME_new() (ASN1_TIME *)\ - ASN1_STRING_type_new(V_ASN1_UTCTIME) -# define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) - -# define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ - ASN1_STRING_type_new(V_ASN1_GENERALSTRING) -# define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_GENERALSTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ - (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) - -# define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ - ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) -# define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ - (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) - -# define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ - ASN1_STRING_type_new(V_ASN1_BMPSTRING) -# define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_BMPSTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_BMPSTRING(a,pp,l) \ - (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) - -# define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ - ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) -# define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_VISIBLESTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ - (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) - -# define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ - ASN1_STRING_type_new(V_ASN1_UTF8STRING) -# define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_UTF8STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_UTF8STRING(a,pp,l) \ - (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) - - /* for the is_set parameter to i2d_ASN1_SET */ -# define IS_SEQUENCE 0 -# define IS_SET 1 - -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) - -int ASN1_TYPE_get(ASN1_TYPE *a); -void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); -int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); -int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); - -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); - -DECLARE_ASN1_ITEM(ASN1_OBJECT) - -DECLARE_STACK_OF(ASN1_OBJECT) -DECLARE_ASN1_SET_OF(ASN1_OBJECT) - -ASN1_STRING *ASN1_STRING_new(void); -void ASN1_STRING_free(ASN1_STRING *a); -void ASN1_STRING_clear_free(ASN1_STRING *a); -int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); -ASN1_STRING *ASN1_STRING_type_new(int type); -int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); - /* - * Since this is used to store all sorts of things, via macros, for now, - * make its data void * - */ -int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); -void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); -int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); -int ASN1_STRING_type(ASN1_STRING *x); -unsigned char *ASN1_STRING_data(ASN1_STRING *x); - -DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) -int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp); -ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, - const unsigned char **pp, long length); -int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); -int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); -int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); -int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, - unsigned char *flags, int flags_len); - -# ifndef OPENSSL_NO_BIO -int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, - BIT_STRING_BITNAME *tbl, int indent); -# endif -int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); -int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, - BIT_STRING_BITNAME *tbl); - -int i2d_ASN1_BOOLEAN(int a, unsigned char **pp); -int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length); - -DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) -int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp); -ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, - long length); -ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, - long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); -int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); - -DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) - -int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); -ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); -ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); -int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); -# if 0 -time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); -# endif - -int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, - time_t t); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, - time_t t, int offset_day, - long offset_sec); -int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); -int ASN1_TIME_diff(int *pday, int *psec, - const ASN1_TIME *from, const ASN1_TIME *to); - -DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); -int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, - const ASN1_OCTET_STRING *b); -int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, - int len); - -DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_NULL) -DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) - -int UTF8_getc(const unsigned char *str, int len, unsigned long *val); -int UTF8_putc(unsigned char *str, int len, unsigned long value); - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) -DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_TIME) - -DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) - -ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); -ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_TIME_check(ASN1_TIME *t); -ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME - **out); -int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); - -int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, - i2d_of_void *i2d, int ex_tag, int ex_class, int is_set); -STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, - const unsigned char **pp, - long length, d2i_of_void *d2i, - void (*free_func) (OPENSSL_BLOCK), - int ex_tag, int ex_class); - -# ifndef OPENSSL_NO_BIO -int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); -int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); -int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); -int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); -int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a); -int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); -int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); -# endif -int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a); - -int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); -ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, - const char *sn, const char *ln); - -int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); -long ASN1_INTEGER_get(const ASN1_INTEGER *a); -ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); -BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); - -int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); -long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); -ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); -BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn); - -/* General */ -/* given a string, return the correct type, max is the maximum length */ -int ASN1_PRINTABLE_type(const unsigned char *s, int max); - -int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); -ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, - long length, int Ptag, int Pclass); -unsigned long ASN1_tag2bit(int tag); -/* type is one or more of the B_ASN1_ values. */ -ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp, - long length, int type); - -/* PARSING */ -int asn1_Finish(ASN1_CTX *c); -int asn1_const_Finish(ASN1_const_CTX *c); - -/* SPECIALS */ -int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, - int *pclass, long omax); -int ASN1_check_infinite_end(unsigned char **p, long len); -int ASN1_const_check_infinite_end(const unsigned char **p, long len); -void ASN1_put_object(unsigned char **pp, int constructed, int length, - int tag, int xclass); -int ASN1_put_eoc(unsigned char **pp); -int ASN1_object_size(int constructed, int length, int tag); - -/* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); - -# define ASN1_dup_of(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(const type, x))) - -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); - -/* ASN1 alloc/free macros for when a type is only used internally */ - -# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) -# define M_ASN1_free_of(x, type) \ - ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) - -# ifndef OPENSSL_NO_FP_API -void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); - -# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); - -# define ASN1_i2d_fp_of(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); -int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); -# endif - -int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); - -# ifndef OPENSSL_NO_BIO -void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); - -# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); - -# define ASN1_i2d_bio_of(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); -int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); -int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); -int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); -int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); -int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, - unsigned char *buf, int off); -int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); -int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, - int dump); -# endif -const char *ASN1_tag2str(int tag); - -/* Used to load and write netscape format cert */ - -DECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) - -int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); - -int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); -int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len); -int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, - unsigned char *data, int len); -int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, - unsigned char *data, int max_len); - -STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, - d2i_of_void *d2i, - void (*free_func) (OPENSSL_BLOCK)); -unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, - unsigned char **buf, int *len); -void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); -void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); -ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, - ASN1_OCTET_STRING **oct); - -# define ASN1_pack_string_of(type,obj,i2d,oct) \ - (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ - CHECKED_I2D_OF(type, i2d), \ - oct)) - -ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, - ASN1_OCTET_STRING **oct); - -void ASN1_STRING_set_default_mask(unsigned long mask); -int ASN1_STRING_set_default_mask_asc(const char *p); -unsigned long ASN1_STRING_get_default_mask(void); -int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask); -int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask, - long minsize, long maxsize); - -ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, - const unsigned char *in, int inlen, - int inform, int nid); -ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); -int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); -void ASN1_STRING_TABLE_cleanup(void); - -/* ASN1 template functions */ - -/* Old API compatible functions */ -ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); -void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); -ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, - long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, - const ASN1_ITEM *it); - -void ASN1_add_oid_module(void); - -ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); -ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); - -/* ASN1 Print flags */ - -/* Indicate missing OPTIONAL fields */ -# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 -/* Mark start and end of SEQUENCE */ -# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 -/* Mark start and end of SEQUENCE/SET OF */ -# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 -/* Show the ASN1 type of primitives */ -# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 -/* Don't show ASN1 type of ANY */ -# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 -/* Don't show ASN1 type of MSTRINGs */ -# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 -/* Don't show field names in SEQUENCE */ -# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 -/* Show structure names of each SEQUENCE field */ -# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 -/* Don't show structure name even at top level */ -# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 - -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, - const ASN1_ITEM *it, const ASN1_PCTX *pctx); -ASN1_PCTX *ASN1_PCTX_new(void); -void ASN1_PCTX_free(ASN1_PCTX *p); -unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); - -BIO_METHOD *BIO_f_asn1(void); - -BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); - -int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const ASN1_ITEM *it); -int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const char *hdr, const ASN1_ITEM *it); -int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, - int ctype_nid, int econt_nid, - STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); -ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); -int SMIME_crlf_copy(BIO *in, BIO *out, int flags); -int SMIME_text(BIO *in, BIO *out); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ASN1_strings(void); - -/* Error codes for the ASN1 functions. */ - -/* Function codes. */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_ENUMERATED 101 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENUMERATED_SET 112 -# define ASN1_F_ASN1_ENUMERATED_TO_BN 113 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERALIZEDTIME_SET 185 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_HEADER_NEW 115 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_INTEGER_SET 118 -# define ASN1_F_ASN1_INTEGER_TO_BN 119 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 -# define ASN1_F_ASN1_ITEM_EX_D2I 120 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PACK_STRING 124 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PKCS5_PBE_SET 125 -# define ASN1_F_ASN1_SEQ_PACK 126 -# define ASN1_F_ASN1_SEQ_UNPACK 127 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TIME_SET 175 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UNPACK_STRING 136 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_UTCTIME_SET 187 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_ENUMERATED 138 -# define ASN1_F_BN_TO_ASN1_INTEGER 139 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_BIT_STRING 141 -# define ASN1_F_D2I_ASN1_BOOLEAN 142 -# define ASN1_F_D2I_ASN1_BYTES 143 -# define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 -# define ASN1_F_D2I_ASN1_HEADER 145 -# define ASN1_F_D2I_ASN1_INTEGER 146 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_SET 148 -# define ASN1_F_D2I_ASN1_TYPE_BYTES 149 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_ASN1_UTCTIME 151 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_NETSCAPE_RSA 152 -# define ASN1_F_D2I_NETSCAPE_RSA_2 153 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_D2I_RSA_NET 200 -# define ASN1_F_D2I_RSA_NET_2 201 -# define ASN1_F_D2I_X509 156 -# define ASN1_F_D2I_X509_CINF 157 -# define ASN1_F_D2I_X509_PKEY 159 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_SET 188 -# define ASN1_F_I2D_ASN1_TIME 160 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_NET 162 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_X509_CINF_NEW 168 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_NEW 172 -# define ASN1_F_X509_PKEY_NEW 173 - -/* Reason codes. */ -# define ASN1_R_ADDING_OBJECT 171 -# define ASN1_R_ASN1_PARSE_ERROR 203 -# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 -# define ASN1_R_AUX_ERROR 100 -# define ASN1_R_BAD_CLASS 101 -# define ASN1_R_BAD_OBJECT_HEADER 102 -# define ASN1_R_BAD_PASSWORD_READ 103 -# define ASN1_R_BAD_TAG 104 -# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DECODING_ERROR 111 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_PARSING_SET_ELEMENT 113 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPECTING_A_BOOLEAN 117 -# define ASN1_R_EXPECTING_A_TIME 118 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_TIME_FORMAT 132 -# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 -# define ASN1_R_INVALID_UTF8STRING 134 -# define ASN1_R_IV_TOO_LARGE 135 -# define ASN1_R_LENGTH_ERROR 136 -# define ASN1_R_LIST_ERROR 188 -# define ASN1_R_MIME_NO_CONTENT_TYPE 206 -# define ASN1_R_MIME_PARSE_ERROR 207 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_NON_HEX_CHARACTERS 141 -# define ASN1_R_NOT_ASCII_FORMAT 190 -# define ASN1_R_NOT_ENOUGH_DATA 142 -# define ASN1_R_NO_CONTENT_TYPE 209 -# define ASN1_R_NO_DEFAULT_DIGEST 201 -# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 -# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 -# define ASN1_R_NO_MULTIPART_BOUNDARY 211 -# define ASN1_R_NO_SIG_CONTENT_TYPE 212 -# define ASN1_R_NULL_IS_WRONG_LENGTH 144 -# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 -# define ASN1_R_ODD_NUMBER_OF_CHARS 145 -# define ASN1_R_PRIVATE_KEY_HEADER_MISSING 146 -# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 -# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 -# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 -# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 -# define ASN1_R_SHORT_LINE 150 -# define ASN1_R_SIG_INVALID_MIME_TYPE 213 -# define ASN1_R_STREAMING_NOT_SUPPORTED 202 -# define ASN1_R_STRING_TOO_LONG 151 -# define ASN1_R_STRING_TOO_SHORT 152 -# define ASN1_R_TAG_VALUE_TOO_HIGH 153 -# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 -# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 -# define ASN1_R_TOO_LONG 155 -# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 -# define ASN1_R_TYPE_NOT_PRIMITIVE 218 -# define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 -# define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 -# define ASN1_R_UNEXPECTED_EOC 159 -# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 -# define ASN1_R_UNKNOWN_FORMAT 160 -# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 -# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 -# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 -# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 -# define ASN1_R_UNKNOWN_TAG 194 -# define ASN1_R_UNKOWN_FORMAT 195 -# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 -# define ASN1_R_UNSUPPORTED_CIPHER 165 -# define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 -# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 -# define ASN1_R_UNSUPPORTED_TYPE 196 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 -# define ASN1_R_WRONG_TYPE 169 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/asn1_mac.h b/ext/openssl/windows/x86/include/openssl/asn1_mac.h deleted file mode 100644 index abc6dc35..00000000 --- a/ext/openssl/windows/x86/include/openssl/asn1_mac.h +++ /dev/null @@ -1,579 +0,0 @@ -/* crypto/asn1/asn1_mac.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_ASN1_MAC_H -# define HEADER_ASN1_MAC_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef ASN1_MAC_ERR_LIB -# define ASN1_MAC_ERR_LIB ERR_LIB_ASN1 -# endif - -# define ASN1_MAC_H_err(f,r,line) \ - ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line)) - -# define M_ASN1_D2I_vars(a,type,func) \ - ASN1_const_CTX c; \ - type ret=NULL; \ - \ - c.pp=(const unsigned char **)pp; \ - c.q= *(const unsigned char **)pp; \ - c.error=ERR_R_NESTED_ASN1_ERROR; \ - if ((a == NULL) || ((*a) == NULL)) \ - { if ((ret=(type)func()) == NULL) \ - { c.line=__LINE__; goto err; } } \ - else ret=(*a); - -# define M_ASN1_D2I_Init() \ - c.p= *(const unsigned char **)pp; \ - c.max=(length == 0)?0:(c.p+length); - -# define M_ASN1_D2I_Finish_2(a) \ - if (!asn1_const_Finish(&c)) \ - { c.line=__LINE__; goto err; } \ - *(const unsigned char **)pp=c.p; \ - if (a != NULL) (*a)=ret; \ - return(ret); - -# define M_ASN1_D2I_Finish(a,func,e) \ - M_ASN1_D2I_Finish_2(a); \ -err:\ - ASN1_MAC_H_err((e),c.error,c.line); \ - asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \ - if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ - return(NULL) - -# define M_ASN1_D2I_start_sequence() \ - if (!asn1_GetSequence(&c,&length)) \ - { c.line=__LINE__; goto err; } -/* Begin reading ASN1 without a surrounding sequence */ -# define M_ASN1_D2I_begin() \ - c.slen = length; - -/* End reading ASN1 with no check on length */ -# define M_ASN1_D2I_Finish_nolen(a, func, e) \ - *pp=c.p; \ - if (a != NULL) (*a)=ret; \ - return(ret); \ -err:\ - ASN1_MAC_H_err((e),c.error,c.line); \ - asn1_add_error(*pp,(int)(c.q- *pp)); \ - if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ - return(NULL) - -# define M_ASN1_D2I_end_sequence() \ - (((c.inf&1) == 0)?(c.slen <= 0): \ - (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen))) - -/* Don't use this with d2i_ASN1_BOOLEAN() */ -# define M_ASN1_D2I_get(b, func) \ - c.q=c.p; \ - if (func(&(b),&c.p,c.slen) == NULL) \ - {c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -/* Don't use this with d2i_ASN1_BOOLEAN() */ -# define M_ASN1_D2I_get_x(type,b,func) \ - c.q=c.p; \ - if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \ - {c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -/* use this instead () */ -# define M_ASN1_D2I_get_int(b,func) \ - c.q=c.p; \ - if (func(&(b),&c.p,c.slen) < 0) \ - {c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_opt(b,func,type) \ - if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ - == (V_ASN1_UNIVERSAL|(type)))) \ - { \ - M_ASN1_D2I_get(b,func); \ - } - -# define M_ASN1_D2I_get_int_opt(b,func,type) \ - if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ - == (V_ASN1_UNIVERSAL|(type)))) \ - { \ - M_ASN1_D2I_get_int(b,func); \ - } - -# define M_ASN1_D2I_get_imp(b,func, type) \ - M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \ - c.q=c.p; \ - if (func(&(b),&c.p,c.slen) == NULL) \ - {c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \ - c.slen-=(c.p-c.q);\ - M_ASN1_next_prev=_tmp; - -# define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \ - if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \ - (V_ASN1_CONTEXT_SPECIFIC|(tag)))) \ - { \ - unsigned char _tmp = M_ASN1_next; \ - M_ASN1_D2I_get_imp(b,func, type);\ - } - -# define M_ASN1_D2I_get_set(r,func,free_func) \ - M_ASN1_D2I_get_imp_set(r,func,free_func, \ - V_ASN1_SET,V_ASN1_UNIVERSAL); - -# define M_ASN1_D2I_get_set_type(type,r,func,free_func) \ - M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \ - V_ASN1_SET,V_ASN1_UNIVERSAL); - -# define M_ASN1_D2I_get_set_opt(r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ - { M_ASN1_D2I_get_set(r,func,free_func); } - -# define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ - { M_ASN1_D2I_get_set_type(type,r,func,free_func); } - -# define M_ASN1_I2D_len_SET_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_len_SET(a,f); - -# define M_ASN1_I2D_put_SET_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_put_SET(a,f); - -# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_put_SEQUENCE(a,f); - -# define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - M_ASN1_I2D_put_SEQUENCE_type(type,a,f); - -# define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ - if ((c.slen != 0) && \ - (M_ASN1_next == \ - (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ - { \ - M_ASN1_D2I_get_imp_set(b,func,free_func,\ - tag,V_ASN1_CONTEXT_SPECIFIC); \ - } - -# define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \ - if ((c.slen != 0) && \ - (M_ASN1_next == \ - (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ - { \ - M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\ - tag,V_ASN1_CONTEXT_SPECIFIC); \ - } - -# define M_ASN1_D2I_get_seq(r,func,free_func) \ - M_ASN1_D2I_get_imp_set(r,func,free_func,\ - V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); - -# define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \ - M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ - V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) - -# define M_ASN1_D2I_get_seq_opt(r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ - { M_ASN1_D2I_get_seq(r,func,free_func); } - -# define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ - { M_ASN1_D2I_get_seq_type(type,r,func,free_func); } - -# define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \ - M_ASN1_D2I_get_imp_set(r,func,free_func,\ - x,V_ASN1_CONTEXT_SPECIFIC); - -# define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \ - M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ - x,V_ASN1_CONTEXT_SPECIFIC); - -# define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \ - c.q=c.p; \ - if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\ - (void (*)())free_func,a,b) == NULL) \ - { c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \ - c.q=c.p; \ - if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\ - free_func,a,b) == NULL) \ - { c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_set_strings(r,func,a,b) \ - c.q=c.p; \ - if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \ - { c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_EXP_opt(r,func,tag) \ - if ((c.slen != 0L) && (M_ASN1_next == \ - (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ - { \ - int Tinf,Ttag,Tclass; \ - long Tlen; \ - \ - c.q=c.p; \ - Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ - if (Tinf & 0x80) \ - { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ - c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ - Tlen = c.slen - (c.p - c.q) - 2; \ - if (func(&(r),&c.p,Tlen) == NULL) \ - { c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ - Tlen = c.slen - (c.p - c.q); \ - if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \ - { c.error=ERR_R_MISSING_ASN1_EOS; \ - c.line=__LINE__; goto err; } \ - }\ - c.slen-=(c.p-c.q); \ - } - -# define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \ - if ((c.slen != 0) && (M_ASN1_next == \ - (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ - { \ - int Tinf,Ttag,Tclass; \ - long Tlen; \ - \ - c.q=c.p; \ - Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ - if (Tinf & 0x80) \ - { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ - c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ - Tlen = c.slen - (c.p - c.q) - 2; \ - if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \ - (void (*)())free_func, \ - b,V_ASN1_UNIVERSAL) == NULL) \ - { c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ - Tlen = c.slen - (c.p - c.q); \ - if(!ASN1_check_infinite_end(&c.p, Tlen)) \ - { c.error=ERR_R_MISSING_ASN1_EOS; \ - c.line=__LINE__; goto err; } \ - }\ - c.slen-=(c.p-c.q); \ - } - -# define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \ - if ((c.slen != 0) && (M_ASN1_next == \ - (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ - { \ - int Tinf,Ttag,Tclass; \ - long Tlen; \ - \ - c.q=c.p; \ - Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ - if (Tinf & 0x80) \ - { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ - c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ - Tlen = c.slen - (c.p - c.q) - 2; \ - if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \ - free_func,b,V_ASN1_UNIVERSAL) == NULL) \ - { c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ - Tlen = c.slen - (c.p - c.q); \ - if(!ASN1_check_infinite_end(&c.p, Tlen)) \ - { c.error=ERR_R_MISSING_ASN1_EOS; \ - c.line=__LINE__; goto err; } \ - }\ - c.slen-=(c.p-c.q); \ - } - -/* New macros */ -# define M_ASN1_New_Malloc(ret,type) \ - if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \ - { c.line=__LINE__; goto err2; } - -# define M_ASN1_New(arg,func) \ - if (((arg)=func()) == NULL) return(NULL) - -# define M_ASN1_New_Error(a) \ -/*- err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ - return(NULL);*/ \ - err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ - return(NULL) - -/* - * BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some - * macros that use ASN1_const_CTX still insist on writing in the input - * stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. Please? -- - * Richard Levitte - */ -# define M_ASN1_next (*((unsigned char *)(c.p))) -# define M_ASN1_next_prev (*((unsigned char *)(c.q))) - -/*************************************************/ - -# define M_ASN1_I2D_vars(a) int r=0,ret=0; \ - unsigned char *p; \ - if (a == NULL) return(0) - -/* Length Macros */ -# define M_ASN1_I2D_len(a,f) ret+=f(a,NULL) -# define M_ASN1_I2D_len_IMP_opt(a,f) if (a != NULL) M_ASN1_I2D_len(a,f) - -# define M_ASN1_I2D_len_SET(a,f) \ - ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET); - -# define M_ASN1_I2D_len_SET_type(type,a,f) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \ - V_ASN1_UNIVERSAL,IS_SET); - -# define M_ASN1_I2D_len_SEQUENCE(a,f) \ - ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \ - V_ASN1_UNIVERSAL,IS_SEQUENCE) - -# define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_len_SEQUENCE(a,f); - -# define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - M_ASN1_I2D_len_SEQUENCE_type(type,a,f); - -# define M_ASN1_I2D_len_IMP_SET(a,f,x) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); - -# define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ - V_ASN1_CONTEXT_SPECIFIC,IS_SET); - -# define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SET); - -# define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ - V_ASN1_CONTEXT_SPECIFIC,IS_SET); - -# define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ - V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \ - if (a != NULL)\ - { \ - v=f(a,NULL); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -# define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0))\ - { \ - v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -# define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0))\ - { \ - v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -# define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_##type##_num(a) != 0))\ - { \ - v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \ - V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -/* Put Macros */ -# define M_ASN1_I2D_put(a,f) f(a,&p) - -# define M_ASN1_I2D_put_IMP_opt(a,f,t) \ - if (a != NULL) \ - { \ - unsigned char *q=p; \ - f(a,&p); \ - *q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\ - } - -# define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\ - V_ASN1_UNIVERSAL,IS_SET) -# define M_ASN1_I2D_put_SET_type(type,a,f) \ - i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET) -# define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ - V_ASN1_CONTEXT_SPECIFIC,IS_SET) -# define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \ - i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET) -# define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ - V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE) - -# define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\ - V_ASN1_UNIVERSAL,IS_SEQUENCE) - -# define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \ - i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE) - -# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_put_SEQUENCE(a,f); - -# define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SET); } - -# define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ - V_ASN1_CONTEXT_SPECIFIC, \ - IS_SET); } - -# define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); } - -# define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ - V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); } - -# define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \ - if (a != NULL) \ - { \ - ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \ - f(a,&p); \ - } - -# define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { \ - ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ - i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ - } - -# define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { \ - ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ - i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \ - } - -# define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - { \ - ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ - i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); \ - } - -# define M_ASN1_I2D_seq_total() \ - r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ - if (pp == NULL) return(r); \ - p= *pp; \ - ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) - -# define M_ASN1_I2D_INF_seq_start(tag,ctx) \ - *(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \ - *(p++)=0x80 - -# define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00 - -# define M_ASN1_I2D_finish() *pp=p; \ - return(r); - -int asn1_GetSequence(ASN1_const_CTX *c, long *length); -void asn1_add_error(const unsigned char *address, int offset); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/asn1t.h b/ext/openssl/windows/x86/include/openssl/asn1t.h deleted file mode 100644 index 99bc0eec..00000000 --- a/ext/openssl/windows/x86/include/openssl/asn1t.h +++ /dev/null @@ -1,973 +0,0 @@ -/* asn1t.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H - -# include -# include -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -/* ASN1 template defines, structures and functions */ - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM * itname##_it(void) \ - { \ - static const ASN1_ITEM local_it = { - -# define ASN1_ITEM_end(itname) \ - }; \ - return &local_it; \ - } - -# endif - -/* Macros to aid ASN1 template writing */ - -# define ASN1_ITEM_TEMPLATE(tname) \ - static const ASN1_TEMPLATE tname##_item_tt - -# define ASN1_ITEM_TEMPLATE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_PRIMITIVE,\ - -1,\ - &tname##_item_tt,\ - 0,\ - NULL,\ - 0,\ - #tname \ - ASN1_ITEM_end(tname) - -/* This is a ASN1 type which just embeds a template */ - -/*- - * This pair helps declare a SEQUENCE. We can do: - * - * ASN1_SEQUENCE(stname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END(stname) - * - * This will produce an ASN1_ITEM called stname_it - * for a structure called stname. - * - * If you want the same structure but a different - * name then use: - * - * ASN1_SEQUENCE(itname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END_name(stname, itname) - * - * This will create an item called itname_it using - * a structure called stname. - */ - -# define ASN1_SEQUENCE(tname) \ - static const ASN1_TEMPLATE tname##_seq_tt[] - -# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) - -# define ASN1_SEQUENCE_END_name(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_NDEF_SEQUENCE(tname) \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ - ASN1_SEQUENCE_cb(tname, cb) - -# define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_ref(tname, cb, lck) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(tname),\ - #tname \ - ASN1_ITEM_end(tname) - -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) - -# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_ref(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/*- - * This pair helps declare a CHOICE type. We can do: - * - * ASN1_CHOICE(chname) = { - * ... CHOICE options ... - * ASN1_CHOICE_END(chname) - * - * This will produce an ASN1_ITEM called chname_it - * for a structure called chname. The structure - * definition must look like this: - * typedef struct { - * int type; - * union { - * ASN1_SOMETHING *opt1; - * ASN1_SOMEOTHER *opt2; - * } value; - * } chname; - * - * the name of the selector must be 'type'. - * to use an alternative selector name use the - * ASN1_CHOICE_END_selector() version. - */ - -# define ASN1_CHOICE(tname) \ - static const ASN1_TEMPLATE tname##_ch_tt[] - -# define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ - ASN1_CHOICE(tname) - -# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) - -# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) - -# define ASN1_CHOICE_END_selector(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_CHOICE_END_cb(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/* This helps with the template wrapper form of ASN1_ITEM */ - -# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ - (flags), (tag), 0,\ - #name, ASN1_ITEM_ref(type) } - -/* These help with SEQUENCE or CHOICE components */ - -/* used to declare other types */ - -# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ - (flags), (tag), offsetof(stname, field),\ - #field, ASN1_ITEM_ref(type) } - -/* used when the structure is combined with the parent */ - -# define ASN1_EX_COMBINE(flags, tag, type) { \ - (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } - -/* implicit and explicit helper macros */ - -# define ASN1_IMP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type) - -# define ASN1_EXP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) - -/* Any defined by macros: the field used is in the table itself */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif -/* Plain simple type */ -# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) - -/* OPTIONAL simple type */ -# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* IMPLICIT tagged simple type */ -# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) - -/* IMPLICIT tagged OPTIONAL simple type */ -# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) - -/* Same as above but EXPLICIT */ - -# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) -# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) - -/* SEQUENCE OF type */ -# define ASN1_SEQUENCE_OF(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) - -/* OPTIONAL SEQUENCE OF */ -# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* Same as above but for SET OF */ - -# define ASN1_SET_OF(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) - -# define ASN1_SET_OF_OPT(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ - -# define ASN1_IMP_SET_OF(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) - -# define ASN1_EXP_SET_OF(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) - -# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) - -# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) - -# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) - -/* EXPLICIT using indefinite length constructed form */ -# define ASN1_NDEF_EXP(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) - -/* EXPLICIT OPTIONAL using indefinite length constructed form */ -# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) - -/* Macros for the ASN1_ADB structure */ - -# define ASN1_ADB(name) \ - static const ASN1_ADB_TABLE name##_adbtbl[] - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - app_table,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ - ;\ - static const ASN1_ITEM *name##_adb(void) \ - { \ - static const ASN1_ADB internal_adb = \ - {\ - flags,\ - offsetof(name, field),\ - app_table,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - }; \ - return (const ASN1_ITEM *) &internal_adb; \ - } \ - void dummy_function(void) - -# endif - -# define ADB_ENTRY(val, template) {val, template} - -# define ASN1_ADB_TEMPLATE(name) \ - static const ASN1_TEMPLATE name##_tt - -/* - * This is the ASN1 template structure that defines a wrapper round the - * actual type. It determines the actual position of the field in the value - * structure, various flags such as OPTIONAL and the field name. - */ - -struct ASN1_TEMPLATE_st { - unsigned long flags; /* Various flags */ - long tag; /* tag, not used if no tagging */ - unsigned long offset; /* Offset of this field in structure */ -# ifndef NO_ASN1_FIELD_NAMES - const char *field_name; /* Field name */ -# endif - ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ -}; - -/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ - -# define ASN1_TEMPLATE_item(t) (t->item_ptr) -# define ASN1_TEMPLATE_adb(t) (t->item_ptr) - -typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; -typedef struct ASN1_ADB_st ASN1_ADB; - -struct ASN1_ADB_st { - unsigned long flags; /* Various flags */ - unsigned long offset; /* Offset of selector field */ - STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */ - const ASN1_ADB_TABLE *tbl; /* Table of possible types */ - long tblcount; /* Number of entries in tbl */ - const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ - const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ -}; - -struct ASN1_ADB_TABLE_st { - long value; /* NID for an object or value for an int */ - const ASN1_TEMPLATE tt; /* item for this value */ -}; - -/* template flags */ - -/* Field is optional */ -# define ASN1_TFLG_OPTIONAL (0x1) - -/* Field is a SET OF */ -# define ASN1_TFLG_SET_OF (0x1 << 1) - -/* Field is a SEQUENCE OF */ -# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) - -/* - * Special case: this refers to a SET OF that will be sorted into DER order - * when encoded *and* the corresponding STACK will be modified to match the - * new order. - */ -# define ASN1_TFLG_SET_ORDER (0x3 << 1) - -/* Mask for SET OF or SEQUENCE OF */ -# define ASN1_TFLG_SK_MASK (0x3 << 1) - -/* - * These flags mean the tag should be taken from the tag field. If EXPLICIT - * then the underlying type is used for the inner tag. - */ - -/* IMPLICIT tagging */ -# define ASN1_TFLG_IMPTAG (0x1 << 3) - -/* EXPLICIT tagging, inner tag from underlying type */ -# define ASN1_TFLG_EXPTAG (0x2 << 3) - -# define ASN1_TFLG_TAG_MASK (0x3 << 3) - -/* context specific IMPLICIT */ -# define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT - -/* context specific EXPLICIT */ -# define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT - -/* - * If tagging is in force these determine the type of tag to use. Otherwise - * the tag is determined by the underlying type. These values reflect the - * actual octet format. - */ - -/* Universal tag */ -# define ASN1_TFLG_UNIVERSAL (0x0<<6) -/* Application tag */ -# define ASN1_TFLG_APPLICATION (0x1<<6) -/* Context specific tag */ -# define ASN1_TFLG_CONTEXT (0x2<<6) -/* Private tag */ -# define ASN1_TFLG_PRIVATE (0x3<<6) - -# define ASN1_TFLG_TAG_CLASS (0x3<<6) - -/* - * These are for ANY DEFINED BY type. In this case the 'item' field points to - * an ASN1_ADB structure which contains a table of values to decode the - * relevant type - */ - -# define ASN1_TFLG_ADB_MASK (0x3<<8) - -# define ASN1_TFLG_ADB_OID (0x1<<8) - -# define ASN1_TFLG_ADB_INT (0x1<<9) - -/* - * This flag means a parent structure is passed instead of the field: this is - * useful is a SEQUENCE is being combined with a CHOICE for example. Since - * this means the structure and item name will differ we need to use the - * ASN1_CHOICE_END_name() macro for example. - */ - -# define ASN1_TFLG_COMBINE (0x1<<10) - -/* - * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes - * indefinite length constructed encoding to be used if required. - */ - -# define ASN1_TFLG_NDEF (0x1<<11) - -/* This is the actual ASN1 item itself */ - -struct ASN1_ITEM_st { - char itype; /* The item type, primitive, SEQUENCE, CHOICE - * or extern */ - long utype; /* underlying type */ - const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains - * the contents */ - long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ - long size; /* Structure size (usually) */ -# ifndef NO_ASN1_FIELD_NAMES - const char *sname; /* Structure name */ -# endif -}; - -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * For COMPAT types the funcs field gives a - * set of functions that handle this type, this - * supports the old d2i, i2d convention. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_COMPAT 0x3 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - -/* - * Cache for ASN1 tag and length, so we don't keep re-reading it for things - * like CHOICE - */ - -struct ASN1_TLC_st { - char valid; /* Values below are valid */ - int ret; /* return value */ - long plen; /* length */ - int ptag; /* class value */ - int pclass; /* class value */ - int hdrlen; /* header length */ -}; - -/* Typedefs for ASN1 function pointers */ - -typedef ASN1_VALUE *ASN1_new_func(void); -typedef void ASN1_free_func(ASN1_VALUE *a); -typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in, - long length); -typedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in); - -typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); -typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); - -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, - int indent, const char *fname, - const ASN1_PCTX *pctx); - -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, - int *putype, const ASN1_ITEM *it); -typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, - int len, int utype, char *free_cont, - const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, - const ASN1_ITEM *it, int indent, - const ASN1_PCTX *pctx); - -typedef struct ASN1_COMPAT_FUNCS_st { - ASN1_new_func *asn1_new; - ASN1_free_func *asn1_free; - ASN1_d2i_func *asn1_d2i; - ASN1_i2d_func *asn1_i2d; -} ASN1_COMPAT_FUNCS; - -typedef struct ASN1_EXTERN_FUNCS_st { - void *app_data; - ASN1_ex_new_func *asn1_ex_new; - ASN1_ex_free_func *asn1_ex_free; - ASN1_ex_free_func *asn1_ex_clear; - ASN1_ex_d2i *asn1_ex_d2i; - ASN1_ex_i2d *asn1_ex_i2d; - ASN1_ex_print_func *asn1_ex_print; -} ASN1_EXTERN_FUNCS; - -typedef struct ASN1_PRIMITIVE_FUNCS_st { - void *app_data; - unsigned long flags; - ASN1_ex_new_func *prim_new; - ASN1_ex_free_func *prim_free; - ASN1_ex_free_func *prim_clear; - ASN1_primitive_c2i *prim_c2i; - ASN1_primitive_i2c *prim_i2c; - ASN1_primitive_print *prim_print; -} ASN1_PRIMITIVE_FUNCS; - -/* - * This is the ASN1_AUX structure: it handles various miscellaneous - * requirements. For example the use of reference counts and an informational - * callback. The "informational callback" is called at various points during - * the ASN1 encoding and decoding. It can be used to provide minor - * customisation of the structures used. This is most useful where the - * supplied routines *almost* do the right thing but need some extra help at - * a few points. If the callback returns zero then it is assumed a fatal - * error has occurred and the main operation should be abandoned. If major - * changes in the default behaviour are required then an external type is - * more appropriate. - */ - -typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, - void *exarg); - -typedef struct ASN1_AUX_st { - void *app_data; - int flags; - int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ - ASN1_aux_cb *asn1_cb; - int enc_offset; /* Offset of ASN1_ENCODING structure */ -} ASN1_AUX; - -/* For print related callbacks exarg points to this structure */ -typedef struct ASN1_PRINT_ARG_st { - BIO *out; - int indent; - const ASN1_PCTX *pctx; -} ASN1_PRINT_ARG; - -/* For streaming related callbacks exarg points to this structure */ -typedef struct ASN1_STREAM_ARG_st { - /* BIO to stream through */ - BIO *out; - /* BIO with filters appended */ - BIO *ndef_bio; - /* Streaming I/O boundary */ - unsigned char **boundary; -} ASN1_STREAM_ARG; - -/* Flags in ASN1_AUX */ - -/* Use a reference count */ -# define ASN1_AFLG_REFCOUNT 1 -/* Save the encoding of structure (useful for signatures) */ -# define ASN1_AFLG_ENCODING 2 -/* The Sequence length is invalid */ -# define ASN1_AFLG_BROKEN 4 - -/* operation values for asn1_cb */ - -# define ASN1_OP_NEW_PRE 0 -# define ASN1_OP_NEW_POST 1 -# define ASN1_OP_FREE_PRE 2 -# define ASN1_OP_FREE_POST 3 -# define ASN1_OP_D2I_PRE 4 -# define ASN1_OP_D2I_POST 5 -# define ASN1_OP_I2D_PRE 6 -# define ASN1_OP_I2D_POST 7 -# define ASN1_OP_PRINT_PRE 8 -# define ASN1_OP_PRINT_POST 9 -# define ASN1_OP_STREAM_PRE 10 -# define ASN1_OP_STREAM_POST 11 -# define ASN1_OP_DETACHED_PRE 12 -# define ASN1_OP_DETACHED_POST 13 - -/* Macro to implement a primitive type */ -# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) -# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ - ASN1_ITEM_end(itname) - -/* Macro to implement a multi string type */ -# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ - ASN1_ITEM_end(itname) - -/* Macro to implement an ASN1_ITEM in terms of old style funcs */ - -# define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE) - -# define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \ - static const ASN1_COMPAT_FUNCS sname##_ff = { \ - (ASN1_new_func *)sname##_new, \ - (ASN1_free_func *)sname##_free, \ - (ASN1_d2i_func *)d2i_##sname, \ - (ASN1_i2d_func *)i2d_##sname, \ - }; \ - ASN1_ITEM_start(sname) \ - ASN1_ITYPE_COMPAT, \ - tag, \ - NULL, \ - 0, \ - &sname##_ff, \ - 0, \ - #sname \ - ASN1_ITEM_end(sname) - -# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ - ASN1_ITEM_start(sname) \ - ASN1_ITYPE_EXTERN, \ - tag, \ - NULL, \ - 0, \ - &fptrs, \ - 0, \ - #sname \ - ASN1_ITEM_end(sname) - -/* Macro to implement standard functions in terms of ASN1_ITEM structures */ - -# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) - -# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ - IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) - -# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ - pre stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - pre void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ - stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ - { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ - } - -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ - { \ - return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ - } - -# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ - IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx) \ - { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ - ASN1_ITEM_rptr(itname), pctx); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -/* external definitions for primitive types */ - -DECLARE_ASN1_ITEM(ASN1_BOOLEAN) -DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_SEQUENCE) -DECLARE_ASN1_ITEM(CBIGNUM) -DECLARE_ASN1_ITEM(BIGNUM) -DECLARE_ASN1_ITEM(LONG) -DECLARE_ASN1_ITEM(ZLONG) - -DECLARE_STACK_OF(ASN1_VALUE) - -/* Functions used internally by the ASN1 code */ - -int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); -void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); -int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); -int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); - -void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); -int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_TEMPLATE *tt); -int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); -int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_TEMPLATE *tt); -void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it); - -int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, - const ASN1_ITEM *it); -int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, - int utype, char *free_cont, const ASN1_ITEM *it); - -int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); -int asn1_set_choice_selector(ASN1_VALUE **pval, int value, - const ASN1_ITEM *it); - -ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); - -const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, - int nullerr); - -int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it); - -void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it); -void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it); -int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, - const ASN1_ITEM *it); -int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, - const ASN1_ITEM *it); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/bio.h b/ext/openssl/windows/x86/include/openssl/bio.h deleted file mode 100644 index 8f2438cd..00000000 --- a/ext/openssl/windows/x86/include/openssl/bio.h +++ /dev/null @@ -1,883 +0,0 @@ -/* crypto/bio/bio.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_BIO_H -# define HEADER_BIO_H - -# include - -# ifndef OPENSSL_NO_FP_API -# include -# endif -# include - -# include - -# ifndef OPENSSL_NO_SCTP -# ifndef OPENSSL_SYS_VMS -# include -# else -# include -# endif -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* These are the 'types' of BIOs */ -# define BIO_TYPE_NONE 0 -# define BIO_TYPE_MEM (1|0x0400) -# define BIO_TYPE_FILE (2|0x0400) - -# define BIO_TYPE_FD (4|0x0400|0x0100) -# define BIO_TYPE_SOCKET (5|0x0400|0x0100) -# define BIO_TYPE_NULL (6|0x0400) -# define BIO_TYPE_SSL (7|0x0200) -# define BIO_TYPE_MD (8|0x0200)/* passive filter */ -# define BIO_TYPE_BUFFER (9|0x0200)/* filter */ -# define BIO_TYPE_CIPHER (10|0x0200)/* filter */ -# define BIO_TYPE_BASE64 (11|0x0200)/* filter */ -# define BIO_TYPE_CONNECT (12|0x0400|0x0100)/* socket - connect */ -# define BIO_TYPE_ACCEPT (13|0x0400|0x0100)/* socket for accept */ -# define BIO_TYPE_PROXY_CLIENT (14|0x0200)/* client proxy BIO */ -# define BIO_TYPE_PROXY_SERVER (15|0x0200)/* server proxy BIO */ -# define BIO_TYPE_NBIO_TEST (16|0x0200)/* server proxy BIO */ -# define BIO_TYPE_NULL_FILTER (17|0x0200) -# define BIO_TYPE_BER (18|0x0200)/* BER -> bin filter */ -# define BIO_TYPE_BIO (19|0x0400)/* (half a) BIO pair */ -# define BIO_TYPE_LINEBUFFER (20|0x0200)/* filter */ -# define BIO_TYPE_DGRAM (21|0x0400|0x0100) -# ifndef OPENSSL_NO_SCTP -# define BIO_TYPE_DGRAM_SCTP (24|0x0400|0x0100) -# endif -# define BIO_TYPE_ASN1 (22|0x0200)/* filter */ -# define BIO_TYPE_COMP (23|0x0200)/* filter */ - -# define BIO_TYPE_DESCRIPTOR 0x0100/* socket, fd, connect or accept */ -# define BIO_TYPE_FILTER 0x0200 -# define BIO_TYPE_SOURCE_SINK 0x0400 - -/* - * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. - * BIO_set_fp(in,stdin,BIO_NOCLOSE); - */ -# define BIO_NOCLOSE 0x00 -# define BIO_CLOSE 0x01 - -/* - * These are used in the following macros and are passed to BIO_ctrl() - */ -# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ -# define BIO_CTRL_EOF 2/* opt - are we at the eof */ -# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ -# define BIO_CTRL_SET 4/* man - set the 'IO' type */ -# define BIO_CTRL_GET 5/* man - get the 'IO' type */ -# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ -# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ -# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ -# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ -# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ -# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ -# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ -# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ -/* callback is int cb(BIO *bio,state,ret); */ -# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ -# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ - -# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ - -/* dgram BIO stuff */ -# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ -# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected - * socket to be passed in */ -# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ -# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ -# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ - -# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ - -/* #ifdef IP_MTU_DISCOVER */ -# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ -/* #endif */ - -# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ -# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 -# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ -# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. - * want to use this if asking - * the kernel fails */ - -# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was - * exceed in the previous write - * operation */ - -# define BIO_CTRL_DGRAM_GET_PEER 46 -# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ - -# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout - * to adjust socket timeouts */ -# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 - -# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 - -# ifndef OPENSSL_NO_SCTP -/* SCTP stuff */ -# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 -# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 -# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 -# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 -# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 -# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 -# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 -# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 -# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 -# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 -# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 -# endif - -/* modifiers */ -# define BIO_FP_READ 0x02 -# define BIO_FP_WRITE 0x04 -# define BIO_FP_APPEND 0x08 -# define BIO_FP_TEXT 0x10 - -# define BIO_FLAGS_READ 0x01 -# define BIO_FLAGS_WRITE 0x02 -# define BIO_FLAGS_IO_SPECIAL 0x04 -# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) -# define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 -# endif - -/* Used in BIO_gethostbyname() */ -# define BIO_GHBN_CTRL_HITS 1 -# define BIO_GHBN_CTRL_MISSES 2 -# define BIO_GHBN_CTRL_CACHE_SIZE 3 -# define BIO_GHBN_CTRL_GET_ENTRY 4 -# define BIO_GHBN_CTRL_FLUSH 5 - -/* Mostly used in the SSL BIO */ -/*- - * Not used anymore - * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10 - * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20 - * #define BIO_FLAGS_PROTOCOL_STARTUP 0x40 - */ - -# define BIO_FLAGS_BASE64_NO_NL 0x100 - -/* - * This is used with memory BIOs: it means we shouldn't free up or change the - * data in any way. - */ -# define BIO_FLAGS_MEM_RDONLY 0x200 - -typedef struct bio_st BIO; - -void BIO_set_flags(BIO *b, int flags); -int BIO_test_flags(const BIO *b, int flags); -void BIO_clear_flags(BIO *b, int flags); - -# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) -# define BIO_set_retry_special(b) \ - BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_read(b) \ - BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_write(b) \ - BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) - -/* These are normally used internally in BIOs */ -# define BIO_clear_retry_flags(b) \ - BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_get_retry_flags(b) \ - BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) - -/* These should be used by the application to tell why we should retry */ -# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) -# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) -# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) -# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) -# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) - -/* - * The next three are used in conjunction with the BIO_should_io_special() - * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int - * *reason); will walk the BIO stack and return the 'reason' for the special - * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return - * the code. - */ -/* - * Returned from the SSL bio when the certificate retrieval code had an error - */ -# define BIO_RR_SSL_X509_LOOKUP 0x01 -/* Returned from the connect BIO when a connect would have blocked */ -# define BIO_RR_CONNECT 0x02 -/* Returned from the accept BIO when an accept would have blocked */ -# define BIO_RR_ACCEPT 0x03 - -/* These are passed by the BIO callback */ -# define BIO_CB_FREE 0x01 -# define BIO_CB_READ 0x02 -# define BIO_CB_WRITE 0x03 -# define BIO_CB_PUTS 0x04 -# define BIO_CB_GETS 0x05 -# define BIO_CB_CTRL 0x06 - -/* - * The callback is called before and after the underling operation, The - * BIO_CB_RETURN flag indicates if it is after the call - */ -# define BIO_CB_RETURN 0x80 -# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) -# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) -# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) - -long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *, - int, long, long); -void BIO_set_callback(BIO *b, - long (*callback) (struct bio_st *, int, const char *, - int, long, long)); -char *BIO_get_callback_arg(const BIO *b); -void BIO_set_callback_arg(BIO *b, char *arg); - -const char *BIO_method_name(const BIO *b); -int BIO_method_type(const BIO *b); - -typedef void bio_info_cb (struct bio_st *, int, const char *, int, long, - long); - -typedef struct bio_method_st { - int type; - const char *name; - int (*bwrite) (BIO *, const char *, int); - int (*bread) (BIO *, char *, int); - int (*bputs) (BIO *, const char *); - int (*bgets) (BIO *, char *, int); - long (*ctrl) (BIO *, int, long, void *); - int (*create) (BIO *); - int (*destroy) (BIO *); - long (*callback_ctrl) (BIO *, int, bio_info_cb *); -} BIO_METHOD; - -struct bio_st { - BIO_METHOD *method; - /* bio, mode, argp, argi, argl, ret */ - long (*callback) (struct bio_st *, int, const char *, int, long, long); - char *cb_arg; /* first argument for the callback */ - int init; - int shutdown; - int flags; /* extra storage */ - int retry_reason; - int num; - void *ptr; - struct bio_st *next_bio; /* used by filter BIOs */ - struct bio_st *prev_bio; /* used by filter BIOs */ - int references; - unsigned long num_read; - unsigned long num_write; - CRYPTO_EX_DATA ex_data; -}; - -DECLARE_STACK_OF(BIO) - -typedef struct bio_f_buffer_ctx_struct { - /*- - * Buffers are setup like this: - * - * <---------------------- size -----------------------> - * +---------------------------------------------------+ - * | consumed | remaining | free space | - * +---------------------------------------------------+ - * <-- off --><------- len -------> - */ - /*- BIO *bio; *//* - * this is now in the BIO struct - */ - int ibuf_size; /* how big is the input buffer */ - int obuf_size; /* how big is the output buffer */ - char *ibuf; /* the char array */ - int ibuf_len; /* how many bytes are in it */ - int ibuf_off; /* write/read offset */ - char *obuf; /* the char array */ - int obuf_len; /* how many bytes are in it */ - int obuf_off; /* write/read offset */ -} BIO_F_BUFFER_CTX; - -/* Prefix and suffix callback in ASN1 BIO */ -typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, - void *parg); - -# ifndef OPENSSL_NO_SCTP -/* SCTP parameter structs */ -struct bio_dgram_sctp_sndinfo { - uint16_t snd_sid; - uint16_t snd_flags; - uint32_t snd_ppid; - uint32_t snd_context; -}; - -struct bio_dgram_sctp_rcvinfo { - uint16_t rcv_sid; - uint16_t rcv_ssn; - uint16_t rcv_flags; - uint32_t rcv_ppid; - uint32_t rcv_tsn; - uint32_t rcv_cumtsn; - uint32_t rcv_context; -}; - -struct bio_dgram_sctp_prinfo { - uint16_t pr_policy; - uint32_t pr_value; -}; -# endif - -/* connect BIO stuff */ -# define BIO_CONN_S_BEFORE 1 -# define BIO_CONN_S_GET_IP 2 -# define BIO_CONN_S_GET_PORT 3 -# define BIO_CONN_S_CREATE_SOCKET 4 -# define BIO_CONN_S_CONNECT 5 -# define BIO_CONN_S_OK 6 -# define BIO_CONN_S_BLOCKED_CONNECT 7 -# define BIO_CONN_S_NBIO 8 -/* - * #define BIO_CONN_get_param_hostname BIO_ctrl - */ - -# define BIO_C_SET_CONNECT 100 -# define BIO_C_DO_STATE_MACHINE 101 -# define BIO_C_SET_NBIO 102 -# define BIO_C_SET_PROXY_PARAM 103 -# define BIO_C_SET_FD 104 -# define BIO_C_GET_FD 105 -# define BIO_C_SET_FILE_PTR 106 -# define BIO_C_GET_FILE_PTR 107 -# define BIO_C_SET_FILENAME 108 -# define BIO_C_SET_SSL 109 -# define BIO_C_GET_SSL 110 -# define BIO_C_SET_MD 111 -# define BIO_C_GET_MD 112 -# define BIO_C_GET_CIPHER_STATUS 113 -# define BIO_C_SET_BUF_MEM 114 -# define BIO_C_GET_BUF_MEM_PTR 115 -# define BIO_C_GET_BUFF_NUM_LINES 116 -# define BIO_C_SET_BUFF_SIZE 117 -# define BIO_C_SET_ACCEPT 118 -# define BIO_C_SSL_MODE 119 -# define BIO_C_GET_MD_CTX 120 -# define BIO_C_GET_PROXY_PARAM 121 -# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ -# define BIO_C_GET_CONNECT 123 -# define BIO_C_GET_ACCEPT 124 -# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 -# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 -# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 -# define BIO_C_FILE_SEEK 128 -# define BIO_C_GET_CIPHER_CTX 129 -# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input - * value */ -# define BIO_C_SET_BIND_MODE 131 -# define BIO_C_GET_BIND_MODE 132 -# define BIO_C_FILE_TELL 133 -# define BIO_C_GET_SOCKS 134 -# define BIO_C_SET_SOCKS 135 - -# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ -# define BIO_C_GET_WRITE_BUF_SIZE 137 -# define BIO_C_MAKE_BIO_PAIR 138 -# define BIO_C_DESTROY_BIO_PAIR 139 -# define BIO_C_GET_WRITE_GUARANTEE 140 -# define BIO_C_GET_READ_REQUEST 141 -# define BIO_C_SHUTDOWN_WR 142 -# define BIO_C_NREAD0 143 -# define BIO_C_NREAD 144 -# define BIO_C_NWRITE0 145 -# define BIO_C_NWRITE 146 -# define BIO_C_RESET_READ_REQUEST 147 -# define BIO_C_SET_MD_CTX 148 - -# define BIO_C_SET_PREFIX 149 -# define BIO_C_GET_PREFIX 150 -# define BIO_C_SET_SUFFIX 151 -# define BIO_C_GET_SUFFIX 152 - -# define BIO_C_SET_EX_ARG 153 -# define BIO_C_GET_EX_ARG 154 - -# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) -# define BIO_get_app_data(s) BIO_get_ex_data(s,0) - -/* BIO_s_connect() and BIO_s_socks4a_connect() */ -# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name) -# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port) -# define BIO_set_conn_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip) -# define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port) -# define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0) -# define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1) -# define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2) -# define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) - -# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) - -/* BIO_s_accept() */ -# define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) -# define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0) -/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ -# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL) -# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio) - -# define BIO_BIND_NORMAL 0 -# define BIO_BIND_REUSEADDR_IF_UNUSED 1 -# define BIO_BIND_REUSEADDR 2 -# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) -# define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) -# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) - -/* BIO_s_proxy_client() */ -# define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url)) -# define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p)) -/* BIO_set_nbio(b,n) */ -# define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s)) -/* BIO *BIO_get_filter_bio(BIO *bio); */ -# define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)())) -# define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk) -# define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool) - -# define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp) -# define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p)) -# define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url)) -# define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL) - -/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ -# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) -# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) - -/* BIO_s_file() */ -# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) -# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) - -/* BIO_s_fd() and BIO_s_file() */ -# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) -# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) - -/* - * name is cast to lose const, but might be better to route through a - * function so we can do it safely - */ -# ifdef CONST_STRICT -/* - * If you are wondering why this isn't defined, its because CONST_STRICT is - * purely a compile-time kludge to allow const to be checked. - */ -int BIO_read_filename(BIO *b, const char *name); -# else -# define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ,(char *)name) -# endif -# define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_WRITE,name) -# define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_APPEND,name) -# define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) - -/* - * WARNING WARNING, this ups the reference count on the read bio of the SSL - * structure. This is because the ssl read BIO is now pointed to by the - * next_bio field in the bio. So when you free the BIO, make sure you are - * doing a BIO_free_all() to catch the underlying BIO. - */ -# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) -# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) -# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) -# define BIO_set_ssl_renegotiate_bytes(b,num) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) -# define BIO_get_num_renegotiates(b) \ - BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) -# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) - -/* defined in evp.h */ -/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ - -# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) -# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm) -# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp) -# define BIO_set_mem_eof_return(b,v) \ - BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) - -/* For the BIO_f_buffer() type */ -# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) -# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) -# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) -# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) -# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) - -/* Don't use the next one unless you know what you are doing :-) */ -# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) - -# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) -# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) -# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) -# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) -# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) -# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) -/* ...pending macros have inappropriate return type */ -size_t BIO_ctrl_pending(BIO *b); -size_t BIO_ctrl_wpending(BIO *b); -# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) -# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ - cbp) -# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) - -/* For the BIO_f_buffer() type */ -# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) - -/* For BIO_s_bio() */ -# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) -# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) -# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) -# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) -# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) -/* macros with inappropriate type -- but ...pending macros use int too: */ -# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) -# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) -size_t BIO_ctrl_get_write_guarantee(BIO *b); -size_t BIO_ctrl_get_read_request(BIO *b); -int BIO_ctrl_reset_read_request(BIO *b); - -/* ctrl macros for dgram */ -# define BIO_ctrl_dgram_connect(b,peer) \ - (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer) -# define BIO_ctrl_set_connected(b, state, peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer) -# define BIO_dgram_recv_timedout(b) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) -# define BIO_dgram_send_timedout(b) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) -# define BIO_dgram_get_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer) -# define BIO_dgram_set_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) - -/* These two aren't currently implemented */ -/* int BIO_get_ex_num(BIO *bio); */ -/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */ -int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); -int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -unsigned long BIO_number_read(BIO *bio); -unsigned long BIO_number_written(BIO *bio); - -/* For BIO_f_asn1() */ -int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, - asn1_ps_func *prefix_free); -int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, - asn1_ps_func **pprefix_free); -int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, - asn1_ps_func *suffix_free); -int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, - asn1_ps_func **psuffix_free); - -# ifndef OPENSSL_NO_FP_API -BIO_METHOD *BIO_s_file(void); -BIO *BIO_new_file(const char *filename, const char *mode); -BIO *BIO_new_fp(FILE *stream, int close_flag); -# define BIO_s_file_internal BIO_s_file -# endif -BIO *BIO_new(BIO_METHOD *type); -int BIO_set(BIO *a, BIO_METHOD *type); -int BIO_free(BIO *a); -void BIO_vfree(BIO *a); -int BIO_read(BIO *b, void *data, int len); -int BIO_gets(BIO *bp, char *buf, int size); -int BIO_write(BIO *b, const void *data, int len); -int BIO_puts(BIO *bp, const char *buf); -int BIO_indent(BIO *b, int indent, int max); -long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); -long BIO_callback_ctrl(BIO *b, int cmd, - void (*fp) (struct bio_st *, int, const char *, int, - long, long)); -char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); -long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); -BIO *BIO_push(BIO *b, BIO *append); -BIO *BIO_pop(BIO *b); -void BIO_free_all(BIO *a); -BIO *BIO_find_type(BIO *b, int bio_type); -BIO *BIO_next(BIO *b); -BIO *BIO_get_retry_BIO(BIO *bio, int *reason); -int BIO_get_retry_reason(BIO *bio); -BIO *BIO_dup_chain(BIO *in); - -int BIO_nread0(BIO *bio, char **buf); -int BIO_nread(BIO *bio, char **buf, int num); -int BIO_nwrite0(BIO *bio, char **buf); -int BIO_nwrite(BIO *bio, char **buf, int num); - -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - -BIO_METHOD *BIO_s_mem(void); -BIO *BIO_new_mem_buf(const void *buf, int len); -BIO_METHOD *BIO_s_socket(void); -BIO_METHOD *BIO_s_connect(void); -BIO_METHOD *BIO_s_accept(void); -BIO_METHOD *BIO_s_fd(void); -# ifndef OPENSSL_SYS_OS2 -BIO_METHOD *BIO_s_log(void); -# endif -BIO_METHOD *BIO_s_bio(void); -BIO_METHOD *BIO_s_null(void); -BIO_METHOD *BIO_f_null(void); -BIO_METHOD *BIO_f_buffer(void); -# ifdef OPENSSL_SYS_VMS -BIO_METHOD *BIO_f_linebuffer(void); -# endif -BIO_METHOD *BIO_f_nbio_test(void); -# ifndef OPENSSL_NO_DGRAM -BIO_METHOD *BIO_s_datagram(void); -# ifndef OPENSSL_NO_SCTP -BIO_METHOD *BIO_s_datagram_sctp(void); -# endif -# endif - -/* BIO_METHOD *BIO_f_ber(void); */ - -int BIO_sock_should_retry(int i); -int BIO_sock_non_fatal_error(int error); -int BIO_dgram_non_fatal_error(int error); - -int BIO_fd_should_retry(int i); -int BIO_fd_non_fatal_error(int error); -int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); -int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); -# ifndef OPENSSL_NO_FP_API -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); -# endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, - int datalen); - -struct hostent *BIO_gethostbyname(const char *name); -/*- - * We might want a thread-safe interface too: - * struct hostent *BIO_gethostbyname_r(const char *name, - * struct hostent *result, void *buffer, size_t buflen); - * or something similar (caller allocates a struct hostent, - * pointed to by "result", and additional buffer space for the various - * substructures; if the buffer does not suffice, NULL is returned - * and an appropriate error code is set). - */ -int BIO_sock_error(int sock); -int BIO_socket_ioctl(int fd, long type, void *arg); -int BIO_socket_nbio(int fd, int mode); -int BIO_get_port(const char *str, unsigned short *port_ptr); -int BIO_get_host_ip(const char *str, unsigned char *ip); -int BIO_get_accept_socket(char *host_port, int mode); -int BIO_accept(int sock, char **ip_port); -int BIO_sock_init(void); -void BIO_sock_cleanup(void); -int BIO_set_tcp_ndelay(int sock, int turn_on); - -BIO *BIO_new_socket(int sock, int close_flag); -BIO *BIO_new_dgram(int fd, int close_flag); -# ifndef OPENSSL_NO_SCTP -BIO *BIO_new_dgram_sctp(int fd, int close_flag); -int BIO_dgram_is_sctp(BIO *bio); -int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void - *context, - void *buf), - void *context); -int BIO_dgram_sctp_wait_for_dry(BIO *b); -int BIO_dgram_sctp_msg_waiting(BIO *b); -# endif -BIO *BIO_new_fd(int fd, int close_flag); -BIO *BIO_new_connect(const char *host_port); -BIO *BIO_new_accept(const char *host_port); - -int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -/* - * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. - * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default - * value. - */ - -void BIO_copy_next_retry(BIO *b); - -/* - * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); - */ - -# ifdef __GNUC__ -# define __bio_h__attr__ __attribute__ -# else -# define __bio_h__attr__(x) -# endif -int BIO_printf(BIO *bio, const char *format, ...) -__bio_h__attr__((__format__(__printf__, 2, 3))); -int BIO_vprintf(BIO *bio, const char *format, va_list args) -__bio_h__attr__((__format__(__printf__, 2, 0))); -int BIO_snprintf(char *buf, size_t n, const char *format, ...) -__bio_h__attr__((__format__(__printf__, 3, 4))); -int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) -__bio_h__attr__((__format__(__printf__, 3, 0))); -# undef __bio_h__attr__ - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_BIO_strings(void); - -/* Error codes for the BIO functions. */ - -/* Function codes. */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_BER_GET_HEADER 102 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETHOSTBYNAME 120 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_ACCEPT_SOCKET 105 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_MEM_READ 128 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_SSL_NEW 118 -# define BIO_F_WSASTARTUP 119 - -/* Reason codes. */ -# define BIO_R_ACCEPT_ERROR 100 -# define BIO_R_BAD_FOPEN_MODE 101 -# define BIO_R_BAD_HOSTNAME_LOOKUP 102 -# define BIO_R_BROKEN_PIPE 124 -# define BIO_R_CONNECT_ERROR 103 -# define BIO_R_EOF_ON_MEMORY_BIO 127 -# define BIO_R_ERROR_SETTING_NBIO 104 -# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105 -# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106 -# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 -# define BIO_R_INVALID_ARGUMENT 125 -# define BIO_R_INVALID_IP_ADDRESS 108 -# define BIO_R_IN_USE 123 -# define BIO_R_KEEPALIVE 109 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111 -# define BIO_R_NO_HOSTNAME_SPECIFIED 112 -# define BIO_R_NO_PORT_DEFINED 113 -# define BIO_R_NO_PORT_SPECIFIED 114 -# define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 -# define BIO_R_TAG_MISMATCH 116 -# define BIO_R_UNABLE_TO_BIND_SOCKET 117 -# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/blowfish.h b/ext/openssl/windows/x86/include/openssl/blowfish.h deleted file mode 100644 index 83293027..00000000 --- a/ext/openssl/windows/x86/include/openssl/blowfish.h +++ /dev/null @@ -1,130 +0,0 @@ -/* crypto/bf/blowfish.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_BF -# error BF is disabled. -# endif - -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! BF_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! BF_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define BF_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define BF_LONG unsigned long -# define BF_LONG_LOG2 3 -/* - * _CRAY note. I could declare short, but I have no idea what impact - * does it have on performance on none-T3E machines. I could declare - * int, but at least on C90 sizeof(int) can be chosen at compile time. - * So I've chosen long... - * - */ -# else -# define BF_LONG unsigned int -# endif - -# define BF_ROUNDS 16 -# define BF_BLOCK 8 - -typedef struct bf_key_st { - BF_LONG P[BF_ROUNDS + 2]; - BF_LONG S[4 * 256]; -} BF_KEY; - -# ifdef OPENSSL_FIPS -void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data); -# endif -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/bn.h b/ext/openssl/windows/x86/include/openssl/bn.h deleted file mode 100644 index 633d1b1f..00000000 --- a/ext/openssl/windows/x86/include/openssl/bn.h +++ /dev/null @@ -1,951 +0,0 @@ -/* crypto/bn/bn.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the Eric Young open source - * license provided above. - * - * The binary polynomial arithmetic software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - -#ifndef HEADER_BN_H -# define HEADER_BN_H - -# include -# include -# ifndef OPENSSL_NO_FP_API -# include /* FILE */ -# endif -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These preprocessor symbols control various aspects of the bignum headers - * and library code. They're not defined by any "normal" configuration, as - * they are intended for development and testing purposes. NB: defining all - * three can be useful for debugging application code as well as openssl - * itself. BN_DEBUG - turn on various debugging alterations to the bignum - * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up - * mismanagement of bignum internals. You must also define BN_DEBUG. - */ -/* #define BN_DEBUG */ -/* #define BN_DEBUG_RAND */ - -# ifndef OPENSSL_SMALL_FOOTPRINT -# define BN_MUL_COMBA -# define BN_SQR_COMBA -# define BN_RECURSION -# endif - -/* - * This next option uses the C libraries (2 word)/(1 word) function. If it is - * not defined, I use my C version (which is slower). The reason for this - * flag is that when the particular C compiler library routine is used, and - * the library is linked with a different compiler, the library is missing. - * This mostly happens when the library is built with gcc and then linked - * using normal cc. This would be a common occurrence because gcc normally - * produces code that is 2 times faster than system compilers for the big - * number stuff. For machines with only one compiler (or shared libraries), - * this should be on. Again this in only really a problem on machines using - * "long long's", are 32bit, and are not using my assembler code. - */ -# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \ - defined(OPENSSL_SYS_WIN32) || defined(linux) -# ifndef BN_DIV2W -# define BN_DIV2W -# endif -# endif - -/* - * assuming long is 64bit - this is the DEC Alpha unsigned long long is only - * 64 bits :-(, don't define BN_LLONG for the DEC Alpha - */ -# ifdef SIXTY_FOUR_BIT_LONG -# define BN_ULLONG unsigned long long -# define BN_ULONG unsigned long -# define BN_LONG long -# define BN_BITS 128 -# define BN_BYTES 8 -# define BN_BITS2 64 -# define BN_BITS4 32 -# define BN_MASK (0xffffffffffffffffffffffffffffffffLL) -# define BN_MASK2 (0xffffffffffffffffL) -# define BN_MASK2l (0xffffffffL) -# define BN_MASK2h (0xffffffff00000000L) -# define BN_MASK2h1 (0xffffffff80000000L) -# define BN_TBIT (0x8000000000000000L) -# define BN_DEC_CONV (10000000000000000000UL) -# define BN_DEC_FMT1 "%lu" -# define BN_DEC_FMT2 "%019lu" -# define BN_DEC_NUM 19 -# define BN_HEX_FMT1 "%lX" -# define BN_HEX_FMT2 "%016lX" -# endif - -/* - * This is where the long long data type is 64 bits, but long is 32. For - * machines where there are 64bit registers, this is the mode to use. IRIX, - * on R4000 and above should use this mode, along with the relevant assembler - * code :-). Do NOT define BN_LLONG. - */ -# ifdef SIXTY_FOUR_BIT -# undef BN_LLONG -# undef BN_ULLONG -# define BN_ULONG unsigned long long -# define BN_LONG long long -# define BN_BITS 128 -# define BN_BYTES 8 -# define BN_BITS2 64 -# define BN_BITS4 32 -# define BN_MASK2 (0xffffffffffffffffLL) -# define BN_MASK2l (0xffffffffL) -# define BN_MASK2h (0xffffffff00000000LL) -# define BN_MASK2h1 (0xffffffff80000000LL) -# define BN_TBIT (0x8000000000000000LL) -# define BN_DEC_CONV (10000000000000000000ULL) -# define BN_DEC_FMT1 "%llu" -# define BN_DEC_FMT2 "%019llu" -# define BN_DEC_NUM 19 -# define BN_HEX_FMT1 "%llX" -# define BN_HEX_FMT2 "%016llX" -# endif - -# ifdef THIRTY_TWO_BIT -# ifdef BN_LLONG -# if defined(_WIN32) && !defined(__GNUC__) -# define BN_ULLONG unsigned __int64 -# define BN_MASK (0xffffffffffffffffI64) -# else -# define BN_ULLONG unsigned long long -# define BN_MASK (0xffffffffffffffffLL) -# endif -# endif -# define BN_ULONG unsigned int -# define BN_LONG int -# define BN_BITS 64 -# define BN_BYTES 4 -# define BN_BITS2 32 -# define BN_BITS4 16 -# define BN_MASK2 (0xffffffffL) -# define BN_MASK2l (0xffff) -# define BN_MASK2h1 (0xffff8000L) -# define BN_MASK2h (0xffff0000L) -# define BN_TBIT (0x80000000L) -# define BN_DEC_CONV (1000000000L) -# define BN_DEC_FMT1 "%u" -# define BN_DEC_FMT2 "%09u" -# define BN_DEC_NUM 9 -# define BN_HEX_FMT1 "%X" -# define BN_HEX_FMT2 "%08X" -# endif - -# define BN_DEFAULT_BITS 1280 - -# define BN_FLG_MALLOCED 0x01 -# define BN_FLG_STATIC_DATA 0x02 - -/* - * avoid leaking exponent information through timing, - * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, - * BN_div() will call BN_div_no_branch, - * BN_mod_inverse() will call BN_mod_inverse_no_branch. - */ -# define BN_FLG_CONSTTIME 0x04 - -# ifdef OPENSSL_NO_DEPRECATED -/* deprecated name for the flag */ -# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME -/* - * avoid leaking exponent information through timings - * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) - */ -# endif - -# ifndef OPENSSL_NO_DEPRECATED -# define BN_FLG_FREE 0x8000 - /* used for debuging */ -# endif -# define BN_set_flags(b,n) ((b)->flags|=(n)) -# define BN_get_flags(b,n) ((b)->flags&(n)) - -/* - * get a clone of a BIGNUM with changed flags, for *temporary* use only (the - * two BIGNUMs cannot not be used in parallel!) - */ -# define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \ - (dest)->top=(b)->top, \ - (dest)->dmax=(b)->dmax, \ - (dest)->neg=(b)->neg, \ - (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \ - | ((b)->flags & ~BN_FLG_MALLOCED) \ - | BN_FLG_STATIC_DATA \ - | (n))) - -/* Already declared in ossl_typ.h */ -# if 0 -typedef struct bignum_st BIGNUM; -/* Used for temp variables (declaration hidden in bn_lcl.h) */ -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; -# endif - -struct bignum_st { - BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit - * chunks. */ - int top; /* Index of last used d +1. */ - /* The next are internal book keeping for bn_expand. */ - int dmax; /* Size of the d array. */ - int neg; /* one if the number is negative */ - int flags; -}; - -/* Used for montgomery multiplication */ -struct bn_mont_ctx_st { - int ri; /* number of bits in R */ - BIGNUM RR; /* used to convert to montgomery form */ - BIGNUM N; /* The modulus */ - BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 (Ni is only - * stored for bignum algorithm) */ - BN_ULONG n0[2]; /* least significant word(s) of Ni; (type - * changed with 0.9.9, was "BN_ULONG n0;" - * before) */ - int flags; -}; - -/* - * Used for reciprocal division/mod functions It cannot be shared between - * threads - */ -struct bn_recp_ctx_st { - BIGNUM N; /* the divisor */ - BIGNUM Nr; /* the reciprocal */ - int num_bits; - int shift; - int flags; -}; - -/* Used for slow "generation" functions. */ -struct bn_gencb_st { - unsigned int ver; /* To handle binary (in)compatibility */ - void *arg; /* callback-specific data */ - union { - /* if(ver==1) - handles old style callbacks */ - void (*cb_1) (int, int, void *); - /* if(ver==2) - new callback style */ - int (*cb_2) (int, int, BN_GENCB *); - } cb; -}; -/* Wrapper function to make using BN_GENCB easier, */ -int BN_GENCB_call(BN_GENCB *cb, int a, int b); -/* Macro to populate a BN_GENCB structure with an "old"-style callback */ -# define BN_GENCB_set_old(gencb, callback, cb_arg) { \ - BN_GENCB *tmp_gencb = (gencb); \ - tmp_gencb->ver = 1; \ - tmp_gencb->arg = (cb_arg); \ - tmp_gencb->cb.cb_1 = (callback); } -/* Macro to populate a BN_GENCB structure with a "new"-style callback */ -# define BN_GENCB_set(gencb, callback, cb_arg) { \ - BN_GENCB *tmp_gencb = (gencb); \ - tmp_gencb->ver = 2; \ - tmp_gencb->arg = (cb_arg); \ - tmp_gencb->cb.cb_2 = (callback); } - -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ - -/* - * number of Miller-Rabin iterations for an error rate of less than 2^-80 for - * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of - * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996]; - * original paper: Damgaard, Landrock, Pomerance: Average case error - * estimates for the strong probable prime test. -- Math. Comp. 61 (1993) - * 177-194) - */ -# define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \ - (b) >= 850 ? 3 : \ - (b) >= 650 ? 4 : \ - (b) >= 550 ? 5 : \ - (b) >= 450 ? 6 : \ - (b) >= 400 ? 7 : \ - (b) >= 350 ? 8 : \ - (b) >= 300 ? 9 : \ - (b) >= 250 ? 12 : \ - (b) >= 200 ? 15 : \ - (b) >= 150 ? 18 : \ - /* b >= 100 */ 27) - -# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) - -/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */ -# define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \ - (((w) == 0) && ((a)->top == 0))) -# define BN_is_zero(a) ((a)->top == 0) -# define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg) -# define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg)) -# define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1)) - -# define BN_one(a) (BN_set_word((a),1)) -# define BN_zero_ex(a) \ - do { \ - BIGNUM *_tmp_bn = (a); \ - _tmp_bn->top = 0; \ - _tmp_bn->neg = 0; \ - } while(0) -# ifdef OPENSSL_NO_DEPRECATED -# define BN_zero(a) BN_zero_ex(a) -# else -# define BN_zero(a) (BN_set_word((a),0)) -# endif - -const BIGNUM *BN_value_one(void); -char *BN_options(void); -BN_CTX *BN_CTX_new(void); -# ifndef OPENSSL_NO_DEPRECATED -void BN_CTX_init(BN_CTX *c); -# endif -void BN_CTX_free(BN_CTX *c); -void BN_CTX_start(BN_CTX *ctx); -BIGNUM *BN_CTX_get(BN_CTX *ctx); -void BN_CTX_end(BN_CTX *ctx); -int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_num_bits(const BIGNUM *a); -int BN_num_bits_word(BN_ULONG); -BIGNUM *BN_new(void); -void BN_init(BIGNUM *); -void BN_clear_free(BIGNUM *a); -BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); -void BN_swap(BIGNUM *a, BIGNUM *b); -BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2bin(const BIGNUM *a, unsigned char *to); -BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2mpi(const BIGNUM *a, unsigned char *to); -int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -/** BN_set_negative sets sign of a BIGNUM - * \param b pointer to the BIGNUM object - * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise - */ -void BN_set_negative(BIGNUM *b, int n); -/** BN_is_negative returns 1 if the BIGNUM is negative - * \param a pointer to the BIGNUM object - * \return 1 if a < 0 and 0 otherwise - */ -# define BN_is_negative(a) ((a)->neg != 0) - -int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, - BN_CTX *ctx); -# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) -int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); -int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); -int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); - -BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); -BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); -int BN_mul_word(BIGNUM *a, BN_ULONG w); -int BN_add_word(BIGNUM *a, BN_ULONG w); -int BN_sub_word(BIGNUM *a, BN_ULONG w); -int BN_set_word(BIGNUM *a, BN_ULONG w); -BN_ULONG BN_get_word(const BIGNUM *a); - -int BN_cmp(const BIGNUM *a, const BIGNUM *b); -void BN_free(BIGNUM *a); -int BN_is_bit_set(const BIGNUM *a, int n); -int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_lshift1(BIGNUM *r, const BIGNUM *a); -int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); -int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, - const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, - BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); - -int BN_mask_bits(BIGNUM *a, int n); -# ifndef OPENSSL_NO_FP_API -int BN_print_fp(FILE *fp, const BIGNUM *a); -# endif -# ifdef HEADER_BIO_H -int BN_print(BIO *fp, const BIGNUM *a); -# else -int BN_print(void *fp, const BIGNUM *a); -# endif -int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_rshift1(BIGNUM *r, const BIGNUM *a); -void BN_clear(BIGNUM *a); -BIGNUM *BN_dup(const BIGNUM *a); -int BN_ucmp(const BIGNUM *a, const BIGNUM *b); -int BN_set_bit(BIGNUM *a, int n); -int BN_clear_bit(BIGNUM *a, int n); -char *BN_bn2hex(const BIGNUM *a); -char *BN_bn2dec(const BIGNUM *a); -int BN_hex2bn(BIGNUM **a, const char *str); -int BN_dec2bn(BIGNUM **a, const char *str); -int BN_asc2bn(BIGNUM **a, const char *str); -int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns - * -2 for - * error */ -BIGNUM *BN_mod_inverse(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); -BIGNUM *BN_mod_sqrt(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); - -void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); - -/* Deprecated versions */ -# ifndef OPENSSL_NO_DEPRECATED -BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, const BIGNUM *rem, - void (*callback) (int, int, void *), void *cb_arg); -int BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg); -int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), BN_CTX *ctx, - void *cb_arg, int do_trial_division); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); -int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); -int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, - int do_trial_division, BN_GENCB *cb); - -int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); - -int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, - const BIGNUM *Xp, const BIGNUM *Xp1, - const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, - BN_GENCB *cb); -int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, - BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, - BN_CTX *ctx, BN_GENCB *cb); - -BN_MONT_CTX *BN_MONT_CTX_new(void); -void BN_MONT_CTX_init(BN_MONT_CTX *ctx); -int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -# define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\ - (r),(a),&((mont)->RR),(mont),(ctx)) -int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, - BN_MONT_CTX *mont, BN_CTX *ctx); -void BN_MONT_CTX_free(BN_MONT_CTX *mont); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); -BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); -BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, - const BIGNUM *mod, BN_CTX *ctx); - -/* BN_BLINDING flags */ -# define BN_BLINDING_NO_UPDATE 0x00000001 -# define BN_BLINDING_NO_RECREATE 0x00000002 - -BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); -void BN_BLINDING_free(BN_BLINDING *b); -int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); -int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, - BN_CTX *); -# ifndef OPENSSL_NO_DEPRECATED -unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *); -void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long); -# endif -CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *); -unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); -void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); -BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, - const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx), - BN_MONT_CTX *m_ctx); - -# ifndef OPENSSL_NO_DEPRECATED -void BN_set_params(int mul, int high, int low, int mont); -int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ -# endif - -void BN_RECP_CTX_init(BN_RECP_CTX *recp); -BN_RECP_CTX *BN_RECP_CTX_new(void); -void BN_RECP_CTX_free(BN_RECP_CTX *recp); -int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); -int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, - BN_RECP_CTX *recp, BN_CTX *ctx); -int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, - BN_RECP_CTX *recp, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M - -/* - * Functions for arithmetic over binary polynomials represented by BIGNUMs. - * The BIGNUM::neg property of BIGNUMs representing binary polynomials is - * ignored. Note that input arguments are not const so that their bit arrays - * can be expanded to the appropriate size if needed. - */ - -/* - * r = a + b - */ -int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) -/* - * r=a mod p - */ -int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) -/*- - * Some functions allow for representation of the irreducible polynomials - * as an unsigned int[], say p. The irreducible f(t) is then of the form: - * t^p[0] + t^p[1] + ... + t^p[k] - * where m = p[0] > p[1] > ... > p[k] = 0. - */ -/* r = a mod p */ -int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], - BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], - BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); -int BN_GF2m_arr2poly(const int p[], BIGNUM *a); - -# endif - -/* - * faster mod functions for the 'NIST primes' 0 <= a < p^2 - */ -int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -const BIGNUM *BN_get0_nist_prime_192(void); -const BIGNUM *BN_get0_nist_prime_224(void); -const BIGNUM *BN_get0_nist_prime_256(void); -const BIGNUM *BN_get0_nist_prime_384(void); -const BIGNUM *BN_get0_nist_prime_521(void); - -/* library internal functions */ - -# define bn_expand(a,bits) \ - ( \ - bits > (INT_MAX - BN_BITS2 + 1) ? \ - NULL \ - : \ - (((bits+BN_BITS2-1)/BN_BITS2) <= (a)->dmax) ? \ - (a) \ - : \ - bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2) \ - ) - -# define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) -BIGNUM *bn_expand2(BIGNUM *a, int words); -# ifndef OPENSSL_NO_DEPRECATED -BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ -# endif - -/*- - * Bignum consistency macros - * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from - * bignum data after direct manipulations on the data. There is also an - * "internal" macro, bn_check_top(), for verifying that there are no leading - * zeroes. Unfortunately, some auditing is required due to the fact that - * bn_fix_top() has become an overabused duct-tape because bignum data is - * occasionally passed around in an inconsistent state. So the following - * changes have been made to sort this out; - * - bn_fix_top()s implementation has been moved to bn_correct_top() - * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and - * bn_check_top() is as before. - * - if BN_DEBUG *is* defined; - * - bn_check_top() tries to pollute unused words even if the bignum 'top' is - * consistent. (ed: only if BN_DEBUG_RAND is defined) - * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything. - * The idea is to have debug builds flag up inconsistent bignums when they - * occur. If that occurs in a bn_fix_top(), we examine the code in question; if - * the use of bn_fix_top() was appropriate (ie. it follows directly after code - * that manipulates the bignum) it is converted to bn_correct_top(), and if it - * was not appropriate, we convert it permanently to bn_check_top() and track - * down the cause of the bug. Eventually, no internal code should be using the - * bn_fix_top() macro. External applications and libraries should try this with - * their own code too, both in terms of building against the openssl headers - * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it - * defined. This not only improves external code, it provides more test - * coverage for openssl's own code. - */ - -# ifdef BN_DEBUG - -/* We only need assert() when debugging */ -# include - -# ifdef BN_DEBUG_RAND -/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ -# ifndef RAND_pseudo_bytes -int RAND_pseudo_bytes(unsigned char *buf, int num); -# define BN_DEBUG_TRIX -# endif -# define bn_pollute(a) \ - do { \ - const BIGNUM *_bnum1 = (a); \ - if(_bnum1->top < _bnum1->dmax) { \ - unsigned char _tmp_char; \ - /* We cast away const without the compiler knowing, any \ - * *genuinely* constant variables that aren't mutable \ - * wouldn't be constructed with top!=dmax. */ \ - BN_ULONG *_not_const; \ - memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \ - /* Debug only - safe to ignore error return */ \ - RAND_pseudo_bytes(&_tmp_char, 1); \ - memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \ - (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \ - } \ - } while(0) -# ifdef BN_DEBUG_TRIX -# undef RAND_pseudo_bytes -# endif -# else -# define bn_pollute(a) -# endif -# define bn_check_top(a) \ - do { \ - const BIGNUM *_bnum2 = (a); \ - if (_bnum2 != NULL) { \ - assert((_bnum2->top == 0) || \ - (_bnum2->d[_bnum2->top - 1] != 0)); \ - bn_pollute(_bnum2); \ - } \ - } while(0) - -# define bn_fix_top(a) bn_check_top(a) - -# define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2) -# define bn_wcheck_size(bn, words) \ - do { \ - const BIGNUM *_bnum2 = (bn); \ - assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \ - /* avoid unused variable warning with NDEBUG */ \ - (void)(_bnum2); \ - } while(0) - -# else /* !BN_DEBUG */ - -# define bn_pollute(a) -# define bn_check_top(a) -# define bn_fix_top(a) bn_correct_top(a) -# define bn_check_size(bn, bits) -# define bn_wcheck_size(bn, words) - -# endif - -# define bn_correct_top(a) \ - { \ - BN_ULONG *ftl; \ - int tmp_top = (a)->top; \ - if (tmp_top > 0) \ - { \ - for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \ - if (*(ftl--)) break; \ - (a)->top = tmp_top; \ - } \ - if ((a)->top == 0) \ - (a)->neg = 0; \ - bn_pollute(a); \ - } - -BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, - BN_ULONG w); -BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); -void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num); -BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d); -BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, - int num); -BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, - int num); - -/* Primes from RFC 2409 */ -BIGNUM *get_rfc2409_prime_768(BIGNUM *bn); -BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn); - -/* Primes from RFC 3526 */ -BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn); - -int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_BN_strings(void); - -/* Error codes for the BN functions. */ - -/* Function codes. */ -# define BN_F_BNRAND 127 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_NO_BRANCH 138 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND2 108 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_MUL_RECIPROCAL 111 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_USUB 115 - -/* Reason codes. */ -# define BN_R_ARG2_LT_ARG3 100 -# define BN_R_BAD_RECIPROCAL 101 -# define BN_R_BIGNUM_TOO_LONG 114 -# define BN_R_BITS_TOO_SMALL 118 -# define BN_R_CALLED_WITH_EVEN_MODULUS 102 -# define BN_R_DIV_BY_ZERO 103 -# define BN_R_ENCODING_ERROR 104 -# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 -# define BN_R_INPUT_NOT_REDUCED 110 -# define BN_R_INVALID_LENGTH 106 -# define BN_R_INVALID_RANGE 115 -# define BN_R_INVALID_SHIFT 119 -# define BN_R_NOT_A_SQUARE 111 -# define BN_R_NOT_INITIALIZED 107 -# define BN_R_NO_INVERSE 108 -# define BN_R_NO_SOLUTION 116 -# define BN_R_P_IS_NOT_PRIME 112 -# define BN_R_TOO_MANY_ITERATIONS 113 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/buffer.h b/ext/openssl/windows/x86/include/openssl/buffer.h deleted file mode 100644 index efd240a5..00000000 --- a/ext/openssl/windows/x86/include/openssl/buffer.h +++ /dev/null @@ -1,125 +0,0 @@ -/* crypto/buffer/buffer.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# if !defined(NO_SYS_TYPES_H) -# include -# endif - -/* Already declared in ossl_typ.h */ -/* typedef struct buf_mem_st BUF_MEM; */ - -struct buf_mem_st { - size_t length; /* current number of bytes */ - char *data; - size_t max; /* size of buffer */ -}; - -BUF_MEM *BUF_MEM_new(void); -void BUF_MEM_free(BUF_MEM *a); -int BUF_MEM_grow(BUF_MEM *str, size_t len); -int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); -size_t BUF_strnlen(const char *str, size_t maxlen); -char *BUF_strdup(const char *str); - -/* - * Like strndup, but in addition, explicitly guarantees to never read past the - * first |siz| bytes of |str|. - */ -char *BUF_strndup(const char *str, size_t siz); - -void *BUF_memdup(const void *data, size_t siz); -void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); - -/* safe string functions */ -size_t BUF_strlcpy(char *dst, const char *src, size_t siz); -size_t BUF_strlcat(char *dst, const char *src, size_t siz); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_BUF_strings(void); - -/* Error codes for the BUF functions. */ - -/* Function codes. */ -# define BUF_F_BUF_MEMDUP 103 -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 -# define BUF_F_BUF_STRDUP 102 -# define BUF_F_BUF_STRNDUP 104 - -/* Reason codes. */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/camellia.h b/ext/openssl/windows/x86/include/openssl/camellia.h deleted file mode 100644 index 45e8d25b..00000000 --- a/ext/openssl/windows/x86/include/openssl/camellia.h +++ /dev/null @@ -1,132 +0,0 @@ -/* crypto/camellia/camellia.h */ -/* ==================================================================== - * Copyright (c) 2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - */ - -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H - -# include - -# ifdef OPENSSL_NO_CAMELLIA -# error CAMELLIA is disabled. -# endif - -# include - -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be a hidden type, but EVP requires that the size be known */ - -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) - -typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match - * with WORD */ - -struct camellia_key_st { - union { - double d; /* ensures 64-bit align */ - KEY_TABLE_TYPE rd_key; - } u; - int grand_rounds; -}; -typedef struct camellia_key_st CAMELLIA_KEY; - -# ifdef OPENSSL_FIPS -int private_Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); -# endif -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); -void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char ivec[CAMELLIA_BLOCK_SIZE], - unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], - unsigned int *num); - -#ifdef __cplusplus -} -#endif - -#endif /* !HEADER_Camellia_H */ diff --git a/ext/openssl/windows/x86/include/openssl/cast.h b/ext/openssl/windows/x86/include/openssl/cast.h deleted file mode 100644 index 0003ec9c..00000000 --- a/ext/openssl/windows/x86/include/openssl/cast.h +++ /dev/null @@ -1,107 +0,0 @@ -/* crypto/cast/cast.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_CAST_H -# define HEADER_CAST_H - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef OPENSSL_NO_CAST -# error CAST is disabled. -# endif - -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - -# define CAST_BLOCK 8 -# define CAST_KEY_LENGTH 16 - -typedef struct cast_key_st { - CAST_LONG data[32]; - int short_key; /* Use reduced rounds for short key */ -} CAST_KEY; - -# ifdef OPENSSL_FIPS -void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); -# endif -void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); -void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAST_KEY *key, int enc); -void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *ks, unsigned char *iv, - int enc); -void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/cmac.h b/ext/openssl/windows/x86/include/openssl/cmac.h deleted file mode 100644 index 175be834..00000000 --- a/ext/openssl/windows/x86/include/openssl/cmac.h +++ /dev/null @@ -1,82 +0,0 @@ -/* crypto/cmac/cmac.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL - * project. - */ -/* ==================================================================== - * Copyright (c) 2010 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - */ - -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -/* Opaque */ -typedef struct CMAC_CTX_st CMAC_CTX; - -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/cms.h b/ext/openssl/windows/x86/include/openssl/cms.h deleted file mode 100644 index e6c7f964..00000000 --- a/ext/openssl/windows/x86/include/openssl/cms.h +++ /dev/null @@ -1,555 +0,0 @@ -/* crypto/cms/cms.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL - * project. - */ -/* ==================================================================== - * Copyright (c) 2008 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - */ - -#ifndef HEADER_CMS_H -# define HEADER_CMS_H - -# include - -# ifdef OPENSSL_NO_CMS -# error CMS is disabled. -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_CertificateChoices CMS_CertificateChoices; -typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; -typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; -typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; -typedef struct CMS_Receipt_st CMS_Receipt; -typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; -typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; - -DECLARE_STACK_OF(CMS_SignerInfo) -DECLARE_STACK_OF(GENERAL_NAMES) -DECLARE_STACK_OF(CMS_RecipientEncryptedKey) -DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) -DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) -DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) - -# define CMS_SIGNERINFO_ISSUER_SERIAL 0 -# define CMS_SIGNERINFO_KEYIDENTIFIER 1 - -# define CMS_RECIPINFO_NONE -1 -# define CMS_RECIPINFO_TRANS 0 -# define CMS_RECIPINFO_AGREE 1 -# define CMS_RECIPINFO_KEK 2 -# define CMS_RECIPINFO_PASS 3 -# define CMS_RECIPINFO_OTHER 4 - -/* S/MIME related flags */ - -# define CMS_TEXT 0x1 -# define CMS_NOCERTS 0x2 -# define CMS_NO_CONTENT_VERIFY 0x4 -# define CMS_NO_ATTR_VERIFY 0x8 -# define CMS_NOSIGS \ - (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) -# define CMS_NOINTERN 0x10 -# define CMS_NO_SIGNER_CERT_VERIFY 0x20 -# define CMS_NOVERIFY 0x20 -# define CMS_DETACHED 0x40 -# define CMS_BINARY 0x80 -# define CMS_NOATTR 0x100 -# define CMS_NOSMIMECAP 0x200 -# define CMS_NOOLDMIMETYPE 0x400 -# define CMS_CRLFEOL 0x800 -# define CMS_STREAM 0x1000 -# define CMS_NOCRL 0x2000 -# define CMS_PARTIAL 0x4000 -# define CMS_REUSE_DIGEST 0x8000 -# define CMS_USE_KEYID 0x10000 -# define CMS_DEBUG_DECRYPT 0x20000 -# define CMS_KEY_PARAM 0x40000 - -const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms); - -BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); -int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); - -ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); -int CMS_is_detached(CMS_ContentInfo *cms); -int CMS_set_detached(CMS_ContentInfo *cms, int detached); - -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) -# endif -int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); -CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); -int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); - -BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); -int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); -int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, - int flags); -CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); -int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); - -int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, - unsigned int flags); - -CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, BIO *data, - unsigned int flags); - -CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, - X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, unsigned int flags); - -int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); -CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); - -int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, - unsigned int flags); - -int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, - const unsigned char *key, size_t keylen, - BIO *dcont, BIO *out, unsigned int flags); - -CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, - const unsigned char *key, - size_t keylen, unsigned int flags); - -int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, - const unsigned char *key, size_t keylen); - -int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); - -int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, - STACK_OF(X509) *certs, - X509_STORE *store, unsigned int flags); - -STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); - -CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, - const EVP_CIPHER *cipher, unsigned int flags); - -int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, - BIO *dcont, BIO *out, unsigned int flags); - -int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); -int CMS_decrypt_set1_key(CMS_ContentInfo *cms, - unsigned char *key, size_t keylen, - unsigned char *id, size_t idlen); -int CMS_decrypt_set1_password(CMS_ContentInfo *cms, - unsigned char *pass, ossl_ssize_t passlen); - -STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); -int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); -EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); -CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); -CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, - X509 *recip, unsigned int flags); -int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); -int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); -int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, - EVP_PKEY **pk, X509 **recip, - X509_ALGOR **palg); -int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, - unsigned char *key, size_t keylen, - unsigned char *id, size_t idlen, - ASN1_GENERALIZEDTIME *date, - ASN1_OBJECT *otherTypeId, - ASN1_TYPE *otherType); - -int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pid, - ASN1_GENERALIZEDTIME **pdate, - ASN1_OBJECT **potherid, - ASN1_TYPE **pothertype); - -int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, - unsigned char *key, size_t keylen); - -int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, - const unsigned char *id, size_t idlen); - -int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, - unsigned char *pass, - ossl_ssize_t passlen); - -CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, - int iter, int wrap_nid, - int pbe_nid, - unsigned char *pass, - ossl_ssize_t passlen, - const EVP_CIPHER *kekciph); - -int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); - -int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); - -int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); -const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); - -CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); -int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); -int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); -STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); - -CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); -int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); -int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); -STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); - -int CMS_SignedData_init(CMS_ContentInfo *cms); -CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, - X509 *signer, EVP_PKEY *pk, const EVP_MD *md, - unsigned int flags); -EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); -EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); -STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); - -void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); -int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); -int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - unsigned int flags); -void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, - X509 **signer, X509_ALGOR **pdig, - X509_ALGOR **psig); -ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); -int CMS_SignerInfo_sign(CMS_SignerInfo *si); -int CMS_SignerInfo_verify(CMS_SignerInfo *si); -int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); - -int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); -int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, - int algnid, int keysize); -int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); - -int CMS_signed_get_attr_count(const CMS_SignerInfo *si); -int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, - int lastpos, int type); - -int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); -int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, - int lastpos, int type); - -# ifdef HEADER_X509V3_H - -int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); -int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); -void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, - ASN1_STRING **pcid, - int *pallorfirst, - STACK_OF(GENERAL_NAMES) **plist, - STACK_OF(GENERAL_NAMES) **prto); -# endif -int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pukm); -STACK_OF(CMS_RecipientEncryptedKey) -*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); - -int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, - X509_ALGOR **pubalg, - ASN1_BIT_STRING **pubkey, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); - -int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, - ASN1_OCTET_STRING **keyid, - ASN1_GENERALIZEDTIME **tm, - CMS_OtherKeyAttribute **other, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, - X509 *cert); -int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); -EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); -int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, - CMS_RecipientInfo *ri, - CMS_RecipientEncryptedKey *rek); - -int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, - ASN1_OCTET_STRING *ukm, int keylen); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_CMS_strings(void); - -/* Error codes for the CMS functions. */ - -/* Function codes. */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 - -/* Reason codes. */ -# define CMS_R_ADD_SIGNER_ERROR 99 -# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 -# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 -# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 -# define CMS_R_CIPHER_INITIALISATION_ERROR 101 -# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 -# define CMS_R_CMS_DATAFINAL_ERROR 103 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# define CMS_R_CONTENT_VERIFY_ERROR 109 -# define CMS_R_CTRL_ERROR 110 -# define CMS_R_CTRL_FAILURE 111 -# define CMS_R_DECRYPT_ERROR 112 -# define CMS_R_DIGEST_ERROR 161 -# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 -# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 -# define CMS_R_ERROR_SETTING_KEY 115 -# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 -# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 -# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 -# define CMS_R_INVALID_KEY_LENGTH 118 -# define CMS_R_MD_BIO_INIT_ERROR 119 -# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 -# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 -# define CMS_R_RECEIPT_DECODE_ERROR 169 -# define CMS_R_RECIPIENT_ERROR 137 -# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 -# define CMS_R_SIGNFINAL_ERROR 139 -# define CMS_R_SMIME_TEXT_ERROR 140 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORIHM 149 -# define CMS_R_UNKNOWN_ID 150 -# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 -# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 -# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 -# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 -# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 -# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE 155 -# define CMS_R_UNSUPPORTED_TYPE 156 -# define CMS_R_UNWRAP_ERROR 157 -# define CMS_R_UNWRAP_FAILURE 180 -# define CMS_R_VERIFICATION_FAILURE 158 -# define CMS_R_WRAP_ERROR 159 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/comp.h b/ext/openssl/windows/x86/include/openssl/comp.h deleted file mode 100644 index df599ba3..00000000 --- a/ext/openssl/windows/x86/include/openssl/comp.h +++ /dev/null @@ -1,83 +0,0 @@ - -#ifndef HEADER_COMP_H -# define HEADER_COMP_H - -# include - -# ifdef OPENSSL_NO_COMP -# error COMP is disabled. -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct comp_ctx_st COMP_CTX; - -struct comp_method_st { - int type; /* NID for compression library */ - const char *name; /* A text string to identify the library */ - int (*init) (COMP_CTX *ctx); - void (*finish) (COMP_CTX *ctx); - int (*compress) (COMP_CTX *ctx, - unsigned char *out, unsigned int olen, - unsigned char *in, unsigned int ilen); - int (*expand) (COMP_CTX *ctx, - unsigned char *out, unsigned int olen, - unsigned char *in, unsigned int ilen); - /* - * The following two do NOTHING, but are kept for backward compatibility - */ - long (*ctrl) (void); - long (*callback_ctrl) (void); -}; - -struct comp_ctx_st { - COMP_METHOD *meth; - unsigned long compress_in; - unsigned long compress_out; - unsigned long expand_in; - unsigned long expand_out; - CRYPTO_EX_DATA ex_data; -}; - -COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); -void COMP_CTX_free(COMP_CTX *ctx); -int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -COMP_METHOD *COMP_rle(void); -COMP_METHOD *COMP_zlib(void); -void COMP_zlib_cleanup(void); - -# ifdef HEADER_BIO_H -# ifdef ZLIB -BIO_METHOD *BIO_f_zlib(void); -# endif -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_COMP_strings(void); - -/* Error codes for the COMP functions. */ - -/* Function codes. */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 - -/* Reason codes. */ -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/conf.h b/ext/openssl/windows/x86/include/openssl/conf.h deleted file mode 100644 index fe491130..00000000 --- a/ext/openssl/windows/x86/include/openssl/conf.h +++ /dev/null @@ -1,268 +0,0 @@ -/* crypto/conf/conf.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_CONF_H -# define HEADER_CONF_H - -# include -# include -# include -# include -# include - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char *section; - char *name; - char *value; -} CONF_VALUE; - -DECLARE_STACK_OF(CONF_VALUE) -DECLARE_LHASH_OF(CONF_VALUE); - -struct conf_st; -struct conf_method_st; -typedef struct conf_method_st CONF_METHOD; - -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; - -/* Module definitions */ - -typedef struct conf_imodule_st CONF_IMODULE; -typedef struct conf_module_st CONF_MODULE; - -DECLARE_STACK_OF(CONF_MODULE) -DECLARE_STACK_OF(CONF_IMODULE) - -/* DSO module function typedefs */ -typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); -typedef void conf_finish_func (CONF_IMODULE *md); - -# define CONF_MFLAGS_IGNORE_ERRORS 0x1 -# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 -# define CONF_MFLAGS_SILENT 0x4 -# define CONF_MFLAGS_NO_DSO 0x8 -# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 -# define CONF_MFLAGS_DEFAULT_SECTION 0x20 - -int CONF_set_default_method(CONF_METHOD *meth); -void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); -LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, - long *eline); -# ifndef OPENSSL_NO_FP_API -LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, - long *eline); -# endif -LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, - long *eline); -STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, - const char *section); -char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -void CONF_free(LHASH_OF(CONF_VALUE) *conf); -int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); -int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); - -void OPENSSL_config(const char *config_name); -void OPENSSL_no_config(void); - -/* - * New conf code. The semantics are different from the functions above. If - * that wasn't the case, the above functions would have been replaced - */ - -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - -CONF *NCONF_new(CONF_METHOD *meth); -CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); -# if 0 /* Just to give you an idea of what I have in - * mind */ -CONF_METHOD *NCONF_XML(void); -# endif -void NCONF_free(CONF *conf); -void NCONF_free_data(CONF *conf); - -int NCONF_load(CONF *conf, const char *file, long *eline); -# ifndef OPENSSL_NO_FP_API -int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); -# endif -int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); -STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, - const char *section); -char *NCONF_get_string(const CONF *conf, const char *group, const char *name); -int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, - long *result); -int NCONF_dump_fp(const CONF *conf, FILE *out); -int NCONF_dump_bio(const CONF *conf, BIO *out); - -# if 0 /* The following function has no error - * checking, and should therefore be avoided */ -long NCONF_get_number(CONF *conf, char *group, char *name); -# else -# define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) -# endif - -/* Module functions */ - -int CONF_modules_load(const CONF *cnf, const char *appname, - unsigned long flags); -int CONF_modules_load_file(const char *filename, const char *appname, - unsigned long flags); -void CONF_modules_unload(int all); -void CONF_modules_finish(void); -void CONF_modules_free(void); -int CONF_module_add(const char *name, conf_init_func *ifunc, - conf_finish_func *ffunc); - -const char *CONF_imodule_get_name(const CONF_IMODULE *md); -const char *CONF_imodule_get_value(const CONF_IMODULE *md); -void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); -void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); -CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); -unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); -void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); -void *CONF_module_get_usr_data(CONF_MODULE *pmod); -void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); - -char *CONF_get1_default_config_file(void); - -int CONF_parse_list(const char *list, int sep, int nospc, - int (*list_cb) (const char *elem, int len, void *usr), - void *arg); - -void OPENSSL_load_builtin_modules(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_CONF_strings(void); - -/* Error codes for the CONF functions. */ - -/* Function codes. */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_BIO 102 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_MODULES_LOAD 116 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER 107 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_STR_COPY 101 - -/* Reason codes. */ -# define CONF_R_ERROR_LOADING_DSO 110 -# define CONF_R_LIST_CANNOT_BE_NULL 115 -# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 -# define CONF_R_MISSING_EQUAL_SIGN 101 -# define CONF_R_MISSING_FINISH_FUNCTION 111 -# define CONF_R_MISSING_INIT_FUNCTION 112 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# define CONF_R_NO_SUCH_FILE 114 -# define CONF_R_NO_VALUE 108 -# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 -# define CONF_R_UNKNOWN_MODULE_NAME 113 -# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 -# define CONF_R_VARIABLE_HAS_NO_VALUE 104 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/conf_api.h b/ext/openssl/windows/x86/include/openssl/conf_api.h deleted file mode 100644 index e478f7df..00000000 --- a/ext/openssl/windows/x86/include/openssl/conf_api.h +++ /dev/null @@ -1,89 +0,0 @@ -/* conf_api.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Up until OpenSSL 0.9.5a, this was new_section */ -CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was get_section */ -CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ -STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, - const char *section); - -int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); -char *_CONF_get_string(const CONF *conf, const char *section, - const char *name); -long _CONF_get_number(const CONF *conf, const char *section, - const char *name); - -int _CONF_new_data(CONF *conf); -void _CONF_free_data(CONF *conf); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/crypto.h b/ext/openssl/windows/x86/include/openssl/crypto.h deleted file mode 100644 index 6c644ce1..00000000 --- a/ext/openssl/windows/x86/include/openssl/crypto.h +++ /dev/null @@ -1,661 +0,0 @@ -/* crypto/crypto.h */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H - -# include - -# include - -# ifndef OPENSSL_NO_FP_API -# include -# endif - -# include -# include -# include -# include - -# ifdef CHARSET_EBCDIC -# include -# endif - -/* - * Resolve problems on some operating systems with symbol names that clash - * one way or another - */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Backward compatibility to SSLeay */ -/* - * This is more to be used to check the correct DLL is being used in the MS - * world. - */ -# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER -# define SSLEAY_VERSION 0 -/* #define SSLEAY_OPTIONS 1 no longer supported */ -# define SSLEAY_CFLAGS 2 -# define SSLEAY_BUILT_ON 3 -# define SSLEAY_PLATFORM 4 -# define SSLEAY_DIR 5 - -/* Already declared in ossl_typ.h */ -# if 0 -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; -/* Called when a new object is created */ -typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -/* Called when an object is free()ed */ -typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -/* Called when we need to dup an object */ -typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); -# endif - -/* A generic structure to pass assorted data in a expandable way */ -typedef struct openssl_item_st { - int code; - void *value; /* Not used for flag attributes */ - size_t value_size; /* Max size of value for output, length for - * input */ - size_t *value_length; /* Returned length of value for output */ -} OPENSSL_ITEM; - -/* - * When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock - * names in cryptlib.c - */ - -# define CRYPTO_LOCK_ERR 1 -# define CRYPTO_LOCK_EX_DATA 2 -# define CRYPTO_LOCK_X509 3 -# define CRYPTO_LOCK_X509_INFO 4 -# define CRYPTO_LOCK_X509_PKEY 5 -# define CRYPTO_LOCK_X509_CRL 6 -# define CRYPTO_LOCK_X509_REQ 7 -# define CRYPTO_LOCK_DSA 8 -# define CRYPTO_LOCK_RSA 9 -# define CRYPTO_LOCK_EVP_PKEY 10 -# define CRYPTO_LOCK_X509_STORE 11 -# define CRYPTO_LOCK_SSL_CTX 12 -# define CRYPTO_LOCK_SSL_CERT 13 -# define CRYPTO_LOCK_SSL_SESSION 14 -# define CRYPTO_LOCK_SSL_SESS_CERT 15 -# define CRYPTO_LOCK_SSL 16 -# define CRYPTO_LOCK_SSL_METHOD 17 -# define CRYPTO_LOCK_RAND 18 -# define CRYPTO_LOCK_RAND2 19 -# define CRYPTO_LOCK_MALLOC 20 -# define CRYPTO_LOCK_BIO 21 -# define CRYPTO_LOCK_GETHOSTBYNAME 22 -# define CRYPTO_LOCK_GETSERVBYNAME 23 -# define CRYPTO_LOCK_READDIR 24 -# define CRYPTO_LOCK_RSA_BLINDING 25 -# define CRYPTO_LOCK_DH 26 -# define CRYPTO_LOCK_MALLOC2 27 -# define CRYPTO_LOCK_DSO 28 -# define CRYPTO_LOCK_DYNLOCK 29 -# define CRYPTO_LOCK_ENGINE 30 -# define CRYPTO_LOCK_UI 31 -# define CRYPTO_LOCK_ECDSA 32 -# define CRYPTO_LOCK_EC 33 -# define CRYPTO_LOCK_ECDH 34 -# define CRYPTO_LOCK_BN 35 -# define CRYPTO_LOCK_EC_PRE_COMP 36 -# define CRYPTO_LOCK_STORE 37 -# define CRYPTO_LOCK_COMP 38 -# define CRYPTO_LOCK_FIPS 39 -# define CRYPTO_LOCK_FIPS2 40 -# define CRYPTO_NUM_LOCKS 41 - -# define CRYPTO_LOCK 1 -# define CRYPTO_UNLOCK 2 -# define CRYPTO_READ 4 -# define CRYPTO_WRITE 8 - -# ifndef OPENSSL_NO_LOCKING -# ifndef CRYPTO_w_lock -# define CRYPTO_w_lock(type) \ - CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) -# define CRYPTO_w_unlock(type) \ - CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) -# define CRYPTO_r_lock(type) \ - CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__) -# define CRYPTO_r_unlock(type) \ - CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__) -# define CRYPTO_add(addr,amount,type) \ - CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__) -# endif -# else -# define CRYPTO_w_lock(a) -# define CRYPTO_w_unlock(a) -# define CRYPTO_r_lock(a) -# define CRYPTO_r_unlock(a) -# define CRYPTO_add(a,b,c) ((*(a))+=(b)) -# endif - -/* - * Some applications as well as some parts of OpenSSL need to allocate and - * deallocate locks in a dynamic fashion. The following typedef makes this - * possible in a type-safe manner. - */ -/* struct CRYPTO_dynlock_value has to be defined by the application. */ -typedef struct { - int references; - struct CRYPTO_dynlock_value *data; -} CRYPTO_dynlock; - -/* - * The following can be used to detect memory leaks in the SSLeay library. It - * used, it turns on malloc checking - */ - -# define CRYPTO_MEM_CHECK_OFF 0x0/* an enume */ -# define CRYPTO_MEM_CHECK_ON 0x1/* a bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2/* a bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3/* an enume */ - -/* - * The following are bit values to turn on or off options connected to the - * malloc checking functionality - */ - -/* Adds time to the memory checking information */ -# define V_CRYPTO_MDEBUG_TIME 0x1/* a bit */ -/* Adds thread number to the memory checking information */ -# define V_CRYPTO_MDEBUG_THREAD 0x2/* a bit */ - -# define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) - -/* predec of the BIO type */ -typedef struct bio_st BIO_dummy; - -struct crypto_ex_data_st { - STACK_OF(void) *sk; - /* gcc is screwing up this data structure :-( */ - int dummy; -}; -DECLARE_STACK_OF(void) - -/* - * This stuff is basically class callback functions The current classes are - * SSL_CTX, SSL, SSL_SESSION, and a few more - */ - -typedef struct crypto_ex_data_func_st { - long argl; /* Arbitary long */ - void *argp; /* Arbitary void * */ - CRYPTO_EX_new *new_func; - CRYPTO_EX_free *free_func; - CRYPTO_EX_dup *dup_func; -} CRYPTO_EX_DATA_FUNCS; - -DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) - -/* - * Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA - * entry. - */ - -# define CRYPTO_EX_INDEX_BIO 0 -# define CRYPTO_EX_INDEX_SSL 1 -# define CRYPTO_EX_INDEX_SSL_CTX 2 -# define CRYPTO_EX_INDEX_SSL_SESSION 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_RSA 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_DH 8 -# define CRYPTO_EX_INDEX_ENGINE 9 -# define CRYPTO_EX_INDEX_X509 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_ECDSA 12 -# define CRYPTO_EX_INDEX_ECDH 13 -# define CRYPTO_EX_INDEX_COMP 14 -# define CRYPTO_EX_INDEX_STORE 15 - -/* - * Dynamically assigned indexes start from this value (don't use directly, - * use via CRYPTO_ex_data_new_class). - */ -# define CRYPTO_EX_INDEX_USER 100 - -/* - * This is the default callbacks, but we can have others as well: this is - * needed in Win32 where the application malloc and the library malloc may - * not be the same. - */ -# define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ - malloc, realloc, free) - -# if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD -# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ -# define CRYPTO_MDEBUG -# endif -# endif - -/* - * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG - * is defined) - */ -# define CRYPTO_malloc_debug_init() do {\ - CRYPTO_set_mem_debug_functions(\ - CRYPTO_dbg_malloc,\ - CRYPTO_dbg_realloc,\ - CRYPTO_dbg_free,\ - CRYPTO_dbg_set_options,\ - CRYPTO_dbg_get_options);\ - } while(0) - -int CRYPTO_mem_ctrl(int mode); -int CRYPTO_is_mem_check_on(void); - -/* for applications */ -# define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) -# define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) - -/* for library-internal use */ -# define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) -# define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) -# define is_MemCheck_on() CRYPTO_is_mem_check_on() - -# define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) -# define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__) -# define OPENSSL_realloc(addr,num) \ - CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) -# define OPENSSL_realloc_clean(addr,old_num,num) \ - CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__) -# define OPENSSL_remalloc(addr,num) \ - CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) -# define OPENSSL_freeFunc CRYPTO_free -# define OPENSSL_free(addr) CRYPTO_free(addr) - -# define OPENSSL_malloc_locked(num) \ - CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) -# define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr) - -const char *SSLeay_version(int type); -unsigned long SSLeay(void); - -int OPENSSL_issetugid(void); - -/* An opaque type representing an implementation of "ex_data" support */ -typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; -/* Return an opaque pointer to the current "ex_data" implementation */ -const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); -/* Sets the "ex_data" implementation to be used (if it's not too late) */ -int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); -/* Get a new "ex_data" class, and return the corresponding "class_index" */ -int CRYPTO_ex_data_new_class(void); -/* Within a given class, get/register a new index */ -int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -/* - * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a - * given class (invokes whatever per-class callbacks are applicable) - */ -int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); -int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, - CRYPTO_EX_DATA *from); -void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); -/* - * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular - * index (relative to the class type involved) - */ -int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); -void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); -/* - * This function cleans up all "ex_data" state. It mustn't be called under - * potential race-conditions. - */ -void CRYPTO_cleanup_all_ex_data(void); - -int CRYPTO_get_new_lockid(char *name); - -int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ -void CRYPTO_lock(int mode, int type, const char *file, int line); -void CRYPTO_set_locking_callback(void (*func) (int mode, int type, - const char *file, int line)); -void (*CRYPTO_get_locking_callback(void)) (int mode, int type, - const char *file, int line); -void CRYPTO_set_add_lock_callback(int (*func) - (int *num, int mount, int type, - const char *file, int line)); -int (*CRYPTO_get_add_lock_callback(void)) (int *num, int mount, int type, - const char *file, int line); - -/* Don't use this structure directly. */ -typedef struct crypto_threadid_st { - void *ptr; - unsigned long val; -} CRYPTO_THREADID; -/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ -void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); -void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); -int CRYPTO_THREADID_set_callback(void (*threadid_func) (CRYPTO_THREADID *)); -void (*CRYPTO_THREADID_get_callback(void)) (CRYPTO_THREADID *); -void CRYPTO_THREADID_current(CRYPTO_THREADID *id); -int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b); -void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src); -unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id); -# ifndef OPENSSL_NO_DEPRECATED -void CRYPTO_set_id_callback(unsigned long (*func) (void)); -unsigned long (*CRYPTO_get_id_callback(void)) (void); -unsigned long CRYPTO_thread_id(void); -# endif - -const char *CRYPTO_get_lock_name(int type); -int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, - int line); - -int CRYPTO_get_new_dynlockid(void); -void CRYPTO_destroy_dynlockid(int i); -struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); -void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value - *(*dyn_create_function) (const char - *file, - int line)); -void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function) - (int mode, - struct CRYPTO_dynlock_value *l, - const char *file, int line)); -void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function) - (struct CRYPTO_dynlock_value *l, - const char *file, int line)); -struct CRYPTO_dynlock_value -*(*CRYPTO_get_dynlock_create_callback(void)) (const char *file, int line); -void (*CRYPTO_get_dynlock_lock_callback(void)) (int mode, - struct CRYPTO_dynlock_value - *l, const char *file, - int line); -void (*CRYPTO_get_dynlock_destroy_callback(void)) (struct CRYPTO_dynlock_value - *l, const char *file, - int line); - -/* - * CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- call - * the latter last if you need different functions - */ -int CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t), - void (*f) (void *)); -int CRYPTO_set_locked_mem_functions(void *(*m) (size_t), - void (*free_func) (void *)); -int CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, - int), void (*f) (void *)); -int CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int), - void (*free_func) (void *)); -int CRYPTO_set_mem_debug_functions(void (*m) - (void *, int, const char *, int, int), - void (*r) (void *, void *, int, - const char *, int, int), - void (*f) (void *, int), void (*so) (long), - long (*go) (void)); -void CRYPTO_get_mem_functions(void *(**m) (size_t), - void *(**r) (void *, size_t), - void (**f) (void *)); -void CRYPTO_get_locked_mem_functions(void *(**m) (size_t), - void (**f) (void *)); -void CRYPTO_get_mem_ex_functions(void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, - int), void (**f) (void *)); -void CRYPTO_get_locked_mem_ex_functions(void - *(**m) (size_t, const char *, int), - void (**f) (void *)); -void CRYPTO_get_mem_debug_functions(void (**m) - (void *, int, const char *, int, int), - void (**r) (void *, void *, int, - const char *, int, int), - void (**f) (void *, int), - void (**so) (long), long (**go) (void)); - -void *CRYPTO_malloc_locked(int num, const char *file, int line); -void CRYPTO_free_locked(void *ptr); -void *CRYPTO_malloc(int num, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -void CRYPTO_free(void *ptr); -void *CRYPTO_realloc(void *addr, int num, const char *file, int line); -void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, - int line); -void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); - -void OPENSSL_cleanse(void *ptr, size_t len); - -void CRYPTO_set_mem_debug_options(long bits); -long CRYPTO_get_mem_debug_options(void); - -# define CRYPTO_push_info(info) \ - CRYPTO_push_info_(info, __FILE__, __LINE__); -int CRYPTO_push_info_(const char *info, const char *file, int line); -int CRYPTO_pop_info(void); -int CRYPTO_remove_all_info(void); - -/* - * Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro; - * used as default in CRYPTO_MDEBUG compilations): - */ -/*- - * The last argument has the following significance: - * - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place - */ -void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, - int before_p); -void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, - int line, int before_p); -void CRYPTO_dbg_free(void *addr, int before_p); -/*- - * Tell the debugging code about options. By default, the following values - * apply: - * - * 0: Clear all options. - * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option. - * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option. - * V_CRYPTO_MDEBUG_ALL (3): 1 + 2 - */ -void CRYPTO_dbg_set_options(long bits); -long CRYPTO_dbg_get_options(void); - -# ifndef OPENSSL_NO_FP_API -void CRYPTO_mem_leaks_fp(FILE *); -# endif -void CRYPTO_mem_leaks(struct bio_st *bio); -/* unsigned long order, char *file, int line, int num_bytes, char *addr */ -typedef void *CRYPTO_MEM_LEAK_CB (unsigned long, const char *, int, int, - void *); -void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); - -/* die if we have to */ -void OpenSSLDie(const char *file, int line, const char *assertion); -# define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) - -unsigned long *OPENSSL_ia32cap_loc(void); -# define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc())) -int OPENSSL_isservice(void); - -int FIPS_mode(void); -int FIPS_mode_set(int r); - -void OPENSSL_init(void); - -# define fips_md_init(alg) fips_md_init_ctx(alg, alg) - -# ifdef OPENSSL_FIPS -# define fips_md_init_ctx(alg, cx) \ - int alg##_Init(cx##_CTX *c) \ - { \ - if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ - "Low level API call to digest " #alg " forbidden in FIPS mode!"); \ - return private_##alg##_Init(c); \ - } \ - int private_##alg##_Init(cx##_CTX *c) - -# define fips_cipher_abort(alg) \ - if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ - "Low level API call to cipher " #alg " forbidden in FIPS mode!") - -# else -# define fips_md_init_ctx(alg, cx) \ - int alg##_Init(cx##_CTX *c) -# define fips_cipher_abort(alg) while(0) -# endif - -/* - * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. - * It takes an amount of time dependent on |len|, but independent of the - * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements - * into a defined order as the return value when a != b is undefined, other - * than to be non-zero. - */ -int CRYPTO_memcmp(const volatile void *a, const volatile void *b, size_t len); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_CRYPTO_strings(void); - -/* Error codes for the CRYPTO functions. */ - -/* Function codes. */ -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103 -# define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_DEF_ADD_INDEX 104 -# define CRYPTO_F_DEF_GET_CLASS 105 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_INT_DUP_EX_DATA 106 -# define CRYPTO_F_INT_FREE_EX_DATA 107 -# define CRYPTO_F_INT_NEW_EX_DATA 108 - -/* Reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 -# define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/des.h b/ext/openssl/windows/x86/include/openssl/des.h deleted file mode 100644 index 1b40144e..00000000 --- a/ext/openssl/windows/x86/include/openssl/des.h +++ /dev/null @@ -1,257 +0,0 @@ -/* crypto/des/des.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_NEW_DES_H -# define HEADER_NEW_DES_H - -# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG - * (via openssl/opensslconf.h */ - -# ifdef OPENSSL_NO_DES -# error DES is disabled. -# endif - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef unsigned char DES_cblock[8]; -typedef /* const */ unsigned char const_DES_cblock[8]; -/* - * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and - * const_DES_cblock * are incompatible pointer types. - */ - -typedef struct DES_ks { - union { - DES_cblock cblock; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG deslong[2]; - } ks[16]; -} DES_key_schedule; - -# ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT -# ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT -# define OPENSSL_ENABLE_OLD_DES_SUPPORT -# endif -# endif - -# ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT -# include -# endif - -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) - -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 - -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 - -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ - DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) -OPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */ -# define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) - -const char *DES_options(void); -void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, int enc); -DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, - long length, DES_key_schedule *schedule, - const_DES_cblock *ivec); -/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ -void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); -void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks, int enc); - -/* - * This is the DES encryption function that gets called by just about every - * other DES routine in the library. You should not use this function except - * to implement 'modes' of DES. I say this because the functions that call - * this routine do the conversion from 'char *' to long, and this needs to be - * done to make sure 'non-aligned' memory access do not occur. The - * characters are loaded 'little endian'. Data is a pointer to 2 unsigned - * long's and ks is the DES_key_schedule to use. enc, is non zero specifies - * encryption, zero if decryption. - */ -void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); - -/* - * This functions is the same as DES_encrypt1() except that the DES initial - * permutation (IP) and final permutation (FP) have been left out. As for - * DES_encrypt1(), you should not use this function. It is used by the - * routines in the library that implement triple DES. IP() DES_encrypt2() - * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() - * DES_encrypt1() DES_encrypt1() except faster :-). - */ -void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); -void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, - DES_cblock *ivec1, DES_cblock *ivec2, int enc); -void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num, int enc); -void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, - int numbits, long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int enc); -void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num); -# if 0 -void DES_xwhite_in2out(const_DES_cblock *DES_key, const_DES_cblock *in_white, - DES_cblock *out_white); -# endif - -int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, - DES_cblock *iv); -int DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched, - DES_cblock *iv); -char *DES_fcrypt(const char *buf, const char *salt, char *ret); -char *DES_crypt(const char *buf, const char *salt); -void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); -void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], - long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); -/* - * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. - */ -int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -# ifdef OPENSSL_FIPS -void private_DES_set_key_unchecked(const_DES_cblock *key, - DES_key_schedule *schedule); -# endif -void DES_string_to_key(const char *str, DES_cblock *key); -void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); -void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num, int enc); -void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num); - -int DES_read_password(DES_cblock *key, const char *prompt, int verify); -int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, - const char *prompt, int verify); - -# define DES_fixup_key_parity DES_set_odd_parity - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/des_old.h b/ext/openssl/windows/x86/include/openssl/des_old.h deleted file mode 100644 index ee7607a2..00000000 --- a/ext/openssl/windows/x86/include/openssl/des_old.h +++ /dev/null @@ -1,497 +0,0 @@ -/* crypto/des/des_old.h */ - -/*- - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - * - * The function names in here are deprecated and are only present to - * provide an interface compatible with openssl 0.9.6 and older as - * well as libdes. OpenSSL now provides functions where "des_" has - * been replaced with "DES_" in the names, to make it possible to - * make incompatible changes that are needed for C type security and - * other stuff. - * - * This include files has two compatibility modes: - * - * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API - * that is compatible with libdes and SSLeay. - * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an - * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. - * - * Note that these modes break earlier snapshots of OpenSSL, where - * libdes compatibility was the only available mode or (later on) the - * prefered compatibility mode. However, after much consideration - * (and more or less violent discussions with external parties), it - * was concluded that OpenSSL should be compatible with earlier versions - * of itself before anything else. Also, in all honesty, libdes is - * an old beast that shouldn't really be used any more. - * - * Please consider starting to use the DES_ functions rather than the - * des_ ones. The des_ functions will disappear completely before - * OpenSSL 1.0! - * - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ - -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DES_H -# define HEADER_DES_H - -# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ - -# ifdef OPENSSL_NO_DES -# error DES is disabled. -# endif - -# ifndef HEADER_NEW_DES_H -# error You must include des.h, not des_old.h directly. -# endif - -# ifdef _KERBEROS_DES_H -# error replaces . -# endif - -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef _ -# undef _ -# endif - -typedef unsigned char _ossl_old_des_cblock[8]; -typedef struct _ossl_old_des_ks_struct { - union { - _ossl_old_des_cblock _; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG pad[2]; - } ks; -} _ossl_old_des_key_schedule[16]; - -# ifndef OPENSSL_DES_LIBDES_COMPATIBILITY -# define des_cblock DES_cblock -# define const_des_cblock const_DES_cblock -# define des_key_schedule DES_key_schedule -# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ - DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e)) -# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ - DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e)) -# define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\ - DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e)) -# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e)) -# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ - DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n)) -# define des_options()\ - DES_options() -# define des_cbc_cksum(i,o,l,k,iv)\ - DES_cbc_cksum((i),(o),(l),&(k),(iv)) -# define des_cbc_encrypt(i,o,l,k,iv,e)\ - DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_ncbc_encrypt(i,o,l,k,iv,e)\ - DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ - DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e)) -# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ - DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e)) -# define des_ecb_encrypt(i,o,k,e)\ - DES_ecb_encrypt((i),(o),&(k),(e)) -# define des_encrypt1(d,k,e)\ - DES_encrypt1((d),&(k),(e)) -# define des_encrypt2(d,k,e)\ - DES_encrypt2((d),&(k),(e)) -# define des_encrypt3(d,k1,k2,k3)\ - DES_encrypt3((d),&(k1),&(k2),&(k3)) -# define des_decrypt3(d,k1,k2,k3)\ - DES_decrypt3((d),&(k1),&(k2),&(k3)) -# define des_xwhite_in2out(k,i,o)\ - DES_xwhite_in2out((k),(i),(o)) -# define des_enc_read(f,b,l,k,iv)\ - DES_enc_read((f),(b),(l),&(k),(iv)) -# define des_enc_write(f,b,l,k,iv)\ - DES_enc_write((f),(b),(l),&(k),(iv)) -# define des_fcrypt(b,s,r)\ - DES_fcrypt((b),(s),(r)) -# if 0 -# define des_crypt(b,s)\ - DES_crypt((b),(s)) -# if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__) -# define crypt(b,s)\ - DES_crypt((b),(s)) -# endif -# endif -# define des_ofb_encrypt(i,o,n,l,k,iv)\ - DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv)) -# define des_pcbc_encrypt(i,o,l,k,iv,e)\ - DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_quad_cksum(i,o,l,c,s)\ - DES_quad_cksum((i),(o),(l),(c),(s)) -# define des_random_seed(k)\ - _ossl_096_des_random_seed((k)) -# define des_random_key(r)\ - DES_random_key((r)) -# define des_read_password(k,p,v) \ - DES_read_password((k),(p),(v)) -# define des_read_2passwords(k1,k2,p,v) \ - DES_read_2passwords((k1),(k2),(p),(v)) -# define des_set_odd_parity(k)\ - DES_set_odd_parity((k)) -# define des_check_key_parity(k)\ - DES_check_key_parity((k)) -# define des_is_weak_key(k)\ - DES_is_weak_key((k)) -# define des_set_key(k,ks)\ - DES_set_key((k),&(ks)) -# define des_key_sched(k,ks)\ - DES_key_sched((k),&(ks)) -# define des_set_key_checked(k,ks)\ - DES_set_key_checked((k),&(ks)) -# define des_set_key_unchecked(k,ks)\ - DES_set_key_unchecked((k),&(ks)) -# define des_string_to_key(s,k)\ - DES_string_to_key((s),(k)) -# define des_string_to_2keys(s,k1,k2)\ - DES_string_to_2keys((s),(k1),(k2)) -# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ - DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e)) -# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ - DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n)) - -# define des_ecb2_encrypt(i,o,k1,k2,e) \ - des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# define des_check_key DES_check_key -# define des_rw_mode DES_rw_mode -# else /* libdes compatibility */ -/* - * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with - * libdes - */ -# define des_cblock _ossl_old_des_cblock -# define des_key_schedule _ossl_old_des_key_schedule -# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ - _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) -# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ - _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) -# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) -# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ - _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) -# define des_options()\ - _ossl_old_des_options() -# define des_cbc_cksum(i,o,l,k,iv)\ - _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv)) -# define des_cbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_ncbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ - _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) -# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ - _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) -# define des_ecb_encrypt(i,o,k,e)\ - _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) -# define des_encrypt(d,k,e)\ - _ossl_old_des_encrypt((d),(k),(e)) -# define des_encrypt2(d,k,e)\ - _ossl_old_des_encrypt2((d),(k),(e)) -# define des_encrypt3(d,k1,k2,k3)\ - _ossl_old_des_encrypt3((d),(k1),(k2),(k3)) -# define des_decrypt3(d,k1,k2,k3)\ - _ossl_old_des_decrypt3((d),(k1),(k2),(k3)) -# define des_xwhite_in2out(k,i,o)\ - _ossl_old_des_xwhite_in2out((k),(i),(o)) -# define des_enc_read(f,b,l,k,iv)\ - _ossl_old_des_enc_read((f),(b),(l),(k),(iv)) -# define des_enc_write(f,b,l,k,iv)\ - _ossl_old_des_enc_write((f),(b),(l),(k),(iv)) -# define des_fcrypt(b,s,r)\ - _ossl_old_des_fcrypt((b),(s),(r)) -# define des_crypt(b,s)\ - _ossl_old_des_crypt((b),(s)) -# if 0 -# define crypt(b,s)\ - _ossl_old_crypt((b),(s)) -# endif -# define des_ofb_encrypt(i,o,n,l,k,iv)\ - _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv)) -# define des_pcbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_quad_cksum(i,o,l,c,s)\ - _ossl_old_des_quad_cksum((i),(o),(l),(c),(s)) -# define des_random_seed(k)\ - _ossl_old_des_random_seed((k)) -# define des_random_key(r)\ - _ossl_old_des_random_key((r)) -# define des_read_password(k,p,v) \ - _ossl_old_des_read_password((k),(p),(v)) -# define des_read_2passwords(k1,k2,p,v) \ - _ossl_old_des_read_2passwords((k1),(k2),(p),(v)) -# define des_set_odd_parity(k)\ - _ossl_old_des_set_odd_parity((k)) -# define des_is_weak_key(k)\ - _ossl_old_des_is_weak_key((k)) -# define des_set_key(k,ks)\ - _ossl_old_des_set_key((k),(ks)) -# define des_key_sched(k,ks)\ - _ossl_old_des_key_sched((k),(ks)) -# define des_string_to_key(s,k)\ - _ossl_old_des_string_to_key((s),(k)) -# define des_string_to_2keys(s,k1,k2)\ - _ossl_old_des_string_to_2keys((s),(k1),(k2)) -# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ - _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e)) -# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ - _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n)) - -# define des_ecb2_encrypt(i,o,k1,k2,e) \ - des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# define des_check_key DES_check_key -# define des_rw_mode DES_rw_mode -# endif - -const char *_ossl_old_des_options(void); -void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, int enc); -DES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec); -void _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, - _ossl_old_des_cblock *inw, - _ossl_old_des_cblock *outw, int enc); -void _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out, - int numbits, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, - _ossl_old_des_key_schedule ks, int enc); -void _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks, - int enc); -void _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks, - int enc); -void _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3); -void _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3); -void _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int *num, - int enc); -void _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int *num); -# if 0 -void _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key), - _ossl_old_des_cblock (*in_white), - _ossl_old_des_cblock (*out_white)); -# endif - -int _ossl_old_des_enc_read(int fd, char *buf, int len, - _ossl_old_des_key_schedule sched, - _ossl_old_des_cblock *iv); -int _ossl_old_des_enc_write(int fd, char *buf, int len, - _ossl_old_des_key_schedule sched, - _ossl_old_des_cblock *iv); -char *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret); -char *_ossl_old_des_crypt(const char *buf, const char *salt); -# if !defined(PERL5) && !defined(NeXT) -char *_ossl_old_crypt(const char *buf, const char *salt); -# endif -void _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out, - int numbits, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec); -void _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -DES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - int out_count, _ossl_old_des_cblock *seed); -void _ossl_old_des_random_seed(_ossl_old_des_cblock key); -void _ossl_old_des_random_key(_ossl_old_des_cblock ret); -int _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt, - int verify); -int _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1, - _ossl_old_des_cblock *key2, - const char *prompt, int verify); -void _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key); -int _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key); -int _ossl_old_des_set_key(_ossl_old_des_cblock *key, - _ossl_old_des_key_schedule schedule); -int _ossl_old_des_key_sched(_ossl_old_des_cblock *key, - _ossl_old_des_key_schedule schedule); -void _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key); -void _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1, - _ossl_old_des_cblock *key2); -void _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int *num, - int enc); -void _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int *num); - -void _ossl_096_des_random_seed(des_cblock *key); - -/* - * The following definitions provide compatibility with the MIT Kerberos - * library. The _ossl_old_des_key_schedule structure is not binary - * compatible. - */ - -# define _KERBEROS_DES_H - -# define KRBDES_ENCRYPT DES_ENCRYPT -# define KRBDES_DECRYPT DES_DECRYPT - -# ifdef KERBEROS -# define ENCRYPT DES_ENCRYPT -# define DECRYPT DES_DECRYPT -# endif - -# ifndef NCOMPAT -# define C_Block des_cblock -# define Key_schedule des_key_schedule -# define KEY_SZ DES_KEY_SZ -# define string_to_key des_string_to_key -# define read_pw_string des_read_pw_string -# define random_key des_random_key -# define pcbc_encrypt des_pcbc_encrypt -# define set_key des_set_key -# define key_sched des_key_sched -# define ecb_encrypt des_ecb_encrypt -# define cbc_encrypt des_cbc_encrypt -# define ncbc_encrypt des_ncbc_encrypt -# define xcbc_encrypt des_xcbc_encrypt -# define cbc_cksum des_cbc_cksum -# define quad_cksum des_quad_cksum -# define check_parity des_check_key_parity -# endif - -# define des_fixup_key_parity DES_fixup_key_parity - -#ifdef __cplusplus -} -#endif - -/* for DES_read_pw_string et al */ -# include - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/dh.h b/ext/openssl/windows/x86/include/openssl/dh.h deleted file mode 100644 index a228c7a7..00000000 --- a/ext/openssl/windows/x86/include/openssl/dh.h +++ /dev/null @@ -1,410 +0,0 @@ -/* crypto/dh/dh.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_DH_H -# define HEADER_DH_H - -# include - -# ifdef OPENSSL_NO_DH -# error DH is disabled. -# endif - -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif - -# define DH_FLAG_CACHE_MONT_P 0x01 - -/* - * new with 0.9.7h; the built-in DH - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * faster variable sliding window method to - * be used for all exponents. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x02 - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its reposibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -struct dh_method { - const char *name; - /* Methods here */ - int (*generate_key) (DH *dh); - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh); - /* Can be null */ - int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a, - const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *m_ctx); - int (*init) (DH *dh); - int (*finish) (DH *dh); - int flags; - char *app_data; - /* If this is non-NULL, it will be used to generate parameters */ - int (*generate_params) (DH *dh, int prime_len, int generator, - BN_GENCB *cb); -}; - -struct dh_st { - /* - * This first argument is used to pick up errors when a DH is passed - * instead of a EVP_PKEY - */ - int pad; - int version; - BIGNUM *p; - BIGNUM *g; - long length; /* optional */ - BIGNUM *pub_key; /* g^x % p */ - BIGNUM *priv_key; /* x */ - int flags; - BN_MONT_CTX *method_mont_p; - /* Place holders if we want to do X9.42 DH */ - BIGNUM *q; - BIGNUM *j; - unsigned char *seed; - int seedlen; - BIGNUM *counter; - int references; - CRYPTO_EX_DATA ex_data; - const DH_METHOD *meth; - ENGINE *engine; -}; - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_size(const DH *dh); -int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -# ifndef OPENSSL_NO_DEPRECATED -DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, void *), void *cb_arg); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_FP_API -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -# ifndef OPENSSL_NO_BIO -int DHparams_print(BIO *bp, const DH *x); -# else -int DHparams_print(char *bp, const DH *x); -# endif - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p) - -# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) - -/* KDF types */ -# define EVP_PKEY_DH_KDF_NONE 1 -# define EVP_PKEY_DH_KDF_X9_42 2 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DH_strings(void); - -/* Error codes for the DH functions. */ - -/* Function codes. */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CMS_DECRYPT 117 -# define DH_F_DH_CMS_SET_PEERKEY 118 -# define DH_F_DH_CMS_SET_SHARED_INFO 119 -# define DH_F_DH_COMPUTE_KEY 114 -# define DH_F_DH_GENERATE_KEY 115 -# define DH_F_DH_GENERATE_PARAMETERS_EX 116 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_GENERATE_PARAMETERS 104 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_KEYGEN 113 - -/* Reason codes. */ -# define DH_R_BAD_GENERATOR 101 -# define DH_R_BN_DECODE_ERROR 109 -# define DH_R_BN_ERROR 106 -# define DH_R_DECODE_ERROR 104 -# define DH_R_INVALID_PUBKEY 102 -# define DH_R_KDF_PARAMETER_ERROR 112 -# define DH_R_KEYS_NOT_SET 108 -# define DH_R_KEY_SIZE_TOO_SMALL 110 -# define DH_R_MODULUS_TOO_LARGE 103 -# define DH_R_NON_FIPS_METHOD 111 -# define DH_R_NO_PARAMETERS_SET 107 -# define DH_R_NO_PRIVATE_VALUE 100 -# define DH_R_PARAMETER_ENCODING_ERROR 105 -# define DH_R_PEER_KEY_ERROR 113 -# define DH_R_SHARED_INFO_ERROR 114 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/dsa.h b/ext/openssl/windows/x86/include/openssl/dsa.h deleted file mode 100644 index 545358fd..00000000 --- a/ext/openssl/windows/x86/include/openssl/dsa.h +++ /dev/null @@ -1,332 +0,0 @@ -/* crypto/dsa/dsa.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -/* - * The DSS routines are based on patches supplied by - * Steven Schoch . He basically did the - * work and I have just tweaked them a little to fit into my - * stylistic vision for SSLeay :-) */ - -#ifndef HEADER_DSA_H -# define HEADER_DSA_H - -# include - -# ifdef OPENSSL_NO_DSA -# error DSA is disabled. -# endif - -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include - -# ifndef OPENSSL_NO_DEPRECATED -# include -# ifndef OPENSSL_NO_DH -# include -# endif -# endif - -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif - -# define DSA_FLAG_CACHE_MONT_P 0x01 -/* - * new with 0.9.7h; the built-in DSA implementation now uses constant time - * modular exponentiation for secret exponents by default. This flag causes - * the faster variable sliding window method to be used for all exponents. - */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x02 - -/* - * If this flag is set the DSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its reposibility to ensure the - * result is compliant. - */ - -# define DSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Already defined in ossl_typ.h */ -/* typedef struct dsa_st DSA; */ -/* typedef struct dsa_method DSA_METHOD; */ - -typedef struct DSA_SIG_st { - BIGNUM *r; - BIGNUM *s; -} DSA_SIG; - -struct dsa_method { - const char *name; - DSA_SIG *(*dsa_do_sign) (const unsigned char *dgst, int dlen, DSA *dsa); - int (*dsa_sign_setup) (DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, - BIGNUM **rp); - int (*dsa_do_verify) (const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - int (*dsa_mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, - BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); - /* Can be null */ - int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); - int (*init) (DSA *dsa); - int (*finish) (DSA *dsa); - int flags; - char *app_data; - /* If this is non-NULL, it is used to generate DSA parameters */ - int (*dsa_paramgen) (DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); - /* If this is non-NULL, it is used to generate DSA keys */ - int (*dsa_keygen) (DSA *dsa); -}; - -struct dsa_st { - /* - * This first variable is used to pick up errors where a DSA is passed - * instead of of a EVP_PKEY - */ - int pad; - long version; - int write_params; - BIGNUM *p; - BIGNUM *q; /* == 20 */ - BIGNUM *g; - BIGNUM *pub_key; /* y public key */ - BIGNUM *priv_key; /* x private key */ - BIGNUM *kinv; /* Signing pre-calc */ - BIGNUM *r; /* Signing pre-calc */ - int flags; - /* Normally used to cache montgomery values */ - BN_MONT_CTX *method_mont_p; - int references; - CRYPTO_EX_DATA ex_data; - const DSA_METHOD *meth; - /* functional reference if 'meth' is ENGINE-provided */ - ENGINE *engine; -}; - -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) - -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); - -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); -/* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); - /* next 4 return -1 on error */ -int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); - -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); - -/* Deprecated version */ -# ifndef OPENSSL_NO_DEPRECATED -DSA *DSA_generate_parameters(int bits, - unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, void - (*callback) (int, int, void *), void *cb_arg); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); - -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); - -# ifndef OPENSSL_NO_BIO -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# endif -# ifndef OPENSSL_NO_FP_API -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif - -# define DSS_prime_checks 50 -/* - * Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of - * Rabin-Miller - */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) - -# ifndef OPENSSL_NO_DH -/* - * Convert DSA structure (key or just parameters) into DH structure (be - * careful to avoid small subgroup attacks when using this!) - */ -DH *DSA_dup_DH(const DSA *r); -# endif - -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) - -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DSA_strings(void); - -/* Error codes for the DSA functions. */ - -/* Function codes. */ -# define DSA_F_D2I_DSA_SIG 110 -# define DSA_F_DO_DSA_PRINT 104 -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_GENERATE_KEY 124 -# define DSA_F_DSA_GENERATE_PARAMETERS_EX 123 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 109 -# define DSA_F_DSA_SIG_PRINT 125 -# define DSA_F_DSA_VERIFY 108 -# define DSA_F_I2D_DSA_SIG 111 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_KEYGEN 121 -# define DSA_F_SIG_CB 114 - -/* Reason codes. */ -# define DSA_R_BAD_Q_VALUE 102 -# define DSA_R_BN_DECODE_ERROR 108 -# define DSA_R_BN_ERROR 109 -# define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_MODULUS_TOO_LARGE 103 -# define DSA_R_NEED_NEW_SETUP_VALUES 110 -# define DSA_R_NON_FIPS_DSA_METHOD 111 -# define DSA_R_NO_PARAMETERS_SET 107 -# define DSA_R_PARAMETER_ENCODING_ERROR 105 -# define DSA_R_Q_NOT_PRIME 113 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/dso.h b/ext/openssl/windows/x86/include/openssl/dso.h deleted file mode 100644 index c9013f5c..00000000 --- a/ext/openssl/windows/x86/include/openssl/dso.h +++ /dev/null @@ -1,451 +0,0 @@ -/* dso.h */ -/* - * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DSO_H -# define HEADER_DSO_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* These values are used as commands to DSO_ctrl() */ -# define DSO_CTRL_GET_FLAGS 1 -# define DSO_CTRL_SET_FLAGS 2 -# define DSO_CTRL_OR_FLAGS 3 - -/* - * By default, DSO_load() will translate the provided filename into a form - * typical for the platform (more specifically the DSO_METHOD) using the - * dso_name_converter function of the method. Eg. win32 will transform "blah" - * into "blah.dll", and dlfcn will transform it into "libblah.so". The - * behaviour can be overriden by setting the name_converter callback in the - * DSO object (using DSO_set_name_converter()). This callback could even - * utilise the DSO_METHOD's converter too if it only wants to override - * behaviour for one or two possible DSO methods. However, the following flag - * can be set in a DSO to prevent *any* native name-translation at all - eg. - * if the caller has prompted the user for a path to a driver library so the - * filename should be interpreted as-is. - */ -# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 -/* - * An extra flag to give if only the extension should be added as - * translation. This is obviously only of importance on Unix and other - * operating systems where the translation also may prefix the name with - * something, like 'lib', and ignored everywhere else. This flag is also - * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. - */ -# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 - -/* - * The following flag controls the translation of symbol names to upper case. - * This is currently only being implemented for OpenVMS. - */ -# define DSO_FLAG_UPCASE_SYMBOL 0x10 - -/* - * This flag loads the library with public symbols. Meaning: The exported - * symbols of this library are public to all libraries loaded after this - * library. At the moment only implemented in unix. - */ -# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 - -typedef void (*DSO_FUNC_TYPE) (void); - -typedef struct dso_st DSO; - -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that transform filenames. They are passed a DSO structure - * pointer (or NULL if they are to be used independantly of a DSO object) and - * a filename to transform. They should either return NULL (if there is an - * error condition) or a newly allocated string containing the transformed - * form that the caller will need to free with OPENSSL_free() when done. - */ -typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that merge two file specifications. They are passed a DSO - * structure pointer (or NULL if they are to be used independantly of a DSO - * object) and two file specifications to merge. They should either return - * NULL (if there is an error condition) or a newly allocated string - * containing the result of merging that the caller will need to free with - * OPENSSL_free() when done. Here, merging means that bits and pieces are - * taken from each of the file specifications and added together in whatever - * fashion that is sensible for the DSO method in question. The only rule - * that really applies is that if the two specification contain pieces of the - * same type, the copy from the first string takes priority. One could see - * it as the first specification is the one given by the user and the second - * being a bunch of defaults to add on if they're missing in the first. - */ -typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); - -typedef struct dso_meth_st { - const char *name; - /* - * Loads a shared library, NB: new DSO_METHODs must ensure that a - * successful load populates the loaded_filename field, and likewise a - * successful unload OPENSSL_frees and NULLs it out. - */ - int (*dso_load) (DSO *dso); - /* Unloads a shared library */ - int (*dso_unload) (DSO *dso); - /* Binds a variable */ - void *(*dso_bind_var) (DSO *dso, const char *symname); - /* - * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should - * be cast to the real function prototype by the caller. Platforms that - * don't have compatible representations for different prototypes (this - * is possible within ANSI C) are highly unlikely to have shared - * libraries at all, let alone a DSO_METHOD implemented for them. - */ - DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); -/* I don't think this would actually be used in any circumstances. */ -# if 0 - /* Unbinds a variable */ - int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); - /* Unbinds a function */ - int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); -# endif - /* - * The generic (yuck) "ctrl()" function. NB: Negative return values - * (rather than zero) indicate errors. - */ - long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); - /* - * The default DSO_METHOD-specific function for converting filenames to a - * canonical native form. - */ - DSO_NAME_CONVERTER_FUNC dso_name_converter; - /* - * The default DSO_METHOD-specific function for converting filenames to a - * canonical native form. - */ - DSO_MERGER_FUNC dso_merger; - /* [De]Initialisation handlers. */ - int (*init) (DSO *dso); - int (*finish) (DSO *dso); - /* Return pathname of the module containing location */ - int (*pathbyaddr) (void *addr, char *path, int sz); - /* Perform global symbol lookup, i.e. among *all* modules */ - void *(*globallookup) (const char *symname); -} DSO_METHOD; - -/**********************************************************************/ -/* The low-level handle type used to refer to a loaded shared library */ - -struct dso_st { - DSO_METHOD *meth; - /* - * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use - * anything but will need to cache the filename for use in the dso_bind - * handler. All in all, let each method control its own destiny. - * "Handles" and such go in a STACK. - */ - STACK_OF(void) *meth_data; - int references; - int flags; - /* - * For use by applications etc ... use this for your bits'n'pieces, don't - * touch meth_data! - */ - CRYPTO_EX_DATA ex_data; - /* - * If this callback function pointer is set to non-NULL, then it will be - * used in DSO_load() in place of meth->dso_name_converter. NB: This - * should normally set using DSO_set_name_converter(). - */ - DSO_NAME_CONVERTER_FUNC name_converter; - /* - * If this callback function pointer is set to non-NULL, then it will be - * used in DSO_load() in place of meth->dso_merger. NB: This should - * normally set using DSO_set_merger(). - */ - DSO_MERGER_FUNC merger; - /* - * This is populated with (a copy of) the platform-independant filename - * used for this DSO. - */ - char *filename; - /* - * This is populated with (a copy of) the translated filename by which - * the DSO was actually loaded. It is NULL iff the DSO is not currently - * loaded. NB: This is here because the filename translation process may - * involve a callback being invoked more than once not only to convert to - * a platform-specific form, but also to try different filenames in the - * process of trying to perform a load. As such, this variable can be - * used to indicate (a) whether this DSO structure corresponds to a - * loaded library or not, and (b) the filename with which it was actually - * loaded. - */ - char *loaded_filename; -}; - -DSO *DSO_new(void); -DSO *DSO_new_method(DSO_METHOD *method); -int DSO_free(DSO *dso); -int DSO_flags(DSO *dso); -int DSO_up_ref(DSO *dso); -long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); - -/* - * This function sets the DSO's name_converter callback. If it is non-NULL, - * then it will be used instead of the associated DSO_METHOD's function. If - * oldcb is non-NULL then it is set to the function pointer value being - * replaced. Return value is non-zero for success. - */ -int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, - DSO_NAME_CONVERTER_FUNC *oldcb); -/* - * These functions can be used to get/set the platform-independant filename - * used for a DSO. NB: set will fail if the DSO is already loaded. - */ -const char *DSO_get_filename(DSO *dso); -int DSO_set_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's name_converter callback to translate a - * filename, or if the callback isn't set it will instead use the DSO_METHOD's - * converter. If "filename" is NULL, the "filename" in the DSO itself will be - * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is - * simply duplicated. NB: This function is usually called from within a - * DSO_METHOD during the processing of a DSO_load() call, and is exposed so - * that caller-created DSO_METHODs can do the same thing. A non-NULL return - * value will need to be OPENSSL_free()'d. - */ -char *DSO_convert_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's merger callback to merge two file - * specifications, or if the callback isn't set it will instead use the - * DSO_METHOD's merger. A non-NULL return value will need to be - * OPENSSL_free()'d. - */ -char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); -/* - * If the DSO is currently loaded, this returns the filename that it was - * loaded under, otherwise it returns NULL. So it is also useful as a test as - * to whether the DSO is currently loaded. NB: This will not necessarily - * return the same value as DSO_convert_filename(dso, dso->filename), because - * the DSO_METHOD's load function may have tried a variety of filenames (with - * and/or without the aid of the converters) before settling on the one it - * actually loaded. - */ -const char *DSO_get_loaded_filename(DSO *dso); - -void DSO_set_default_method(DSO_METHOD *meth); -DSO_METHOD *DSO_get_default_method(void); -DSO_METHOD *DSO_get_method(DSO *dso); -DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); - -/* - * The all-singing all-dancing load function, you normally pass NULL for the - * first and third parameters. Use DSO_up and DSO_free for subsequent - * reference count handling. Any flags passed in will be set in the - * constructed DSO after its init() function but before the load operation. - * If 'dso' is non-NULL, 'flags' is ignored. - */ -DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); - -/* This function binds to a variable inside a shared library. */ -void *DSO_bind_var(DSO *dso, const char *symname); - -/* This function binds to a function inside a shared library. */ -DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); - -/* - * This method is the default, but will beg, borrow, or steal whatever method - * should be the default on any particular platform (including - * DSO_METH_null() if necessary). - */ -DSO_METHOD *DSO_METHOD_openssl(void); - -/* - * This method is defined for all platforms - if a platform has no DSO - * support then this will be the only method! - */ -DSO_METHOD *DSO_METHOD_null(void); - -/* - * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, - * dlclose, dlsym, etc) will be used and incorporated into this method. If - * not, this method will return NULL. - */ -DSO_METHOD *DSO_METHOD_dlfcn(void); - -/* - * If DSO_DL is defined, the standard dl.h-style functions (shl_load, - * shl_unload, shl_findsym, etc) will be used and incorporated into this - * method. If not, this method will return NULL. - */ -DSO_METHOD *DSO_METHOD_dl(void); - -/* If WIN32 is defined, use DLLs. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_win32(void); - -/* If VMS is defined, use shared images. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_vms(void); - -/* - * This function writes null-terminated pathname of DSO module containing - * 'addr' into 'sz' large caller-provided 'path' and returns the number of - * characters [including trailing zero] written to it. If 'sz' is 0 or - * negative, 'path' is ignored and required amount of charachers [including - * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then - * pathname of cryptolib itself is returned. Negative or zero return value - * denotes error. - */ -int DSO_pathbyaddr(void *addr, char *path, int sz); - -/* - * This function should be used with caution! It looks up symbols in *all* - * loaded modules and if module gets unloaded by somebody else attempt to - * dereference the pointer is doomed to have fatal consequences. Primary - * usage for this function is to probe *core* system functionality, e.g. - * check if getnameinfo(3) is available at run-time without bothering about - * OS-specific details such as libc.so.versioning or where does it actually - * reside: in libc itself or libsocket. - */ -void *DSO_global_lookup(const char *name); - -/* If BeOS is defined, use shared images. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_beos(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DSO_strings(void); - -/* Error codes for the DSO functions. */ - -/* Function codes. */ -# define DSO_F_BEOS_BIND_FUNC 144 -# define DSO_F_BEOS_BIND_VAR 145 -# define DSO_F_BEOS_LOAD 146 -# define DSO_F_BEOS_NAME_CONVERTER 147 -# define DSO_F_BEOS_UNLOAD 148 -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_BIND_VAR 101 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_BIND_VAR 105 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_BIND_VAR 109 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GET_LOADED_FILENAME 128 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 140 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_SET_NAME_CONVERTER 122 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_GLOBAL_LOOKUP_FUNC 138 -# define DSO_F_PATHBYADDR 137 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 118 -# define DSO_F_WIN32_BIND_VAR 119 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 141 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 - -/* Reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NO_FILE_SPECIFICATION 116 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/dtls1.h b/ext/openssl/windows/x86/include/openssl/dtls1.h deleted file mode 100644 index 30bbcf27..00000000 --- a/ext/openssl/windows/x86/include/openssl/dtls1.h +++ /dev/null @@ -1,272 +0,0 @@ -/* ssl/dtls1.h */ -/* - * DTLS implementation written by Nagendra Modadugu - * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. - */ -/* ==================================================================== - * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H - -# include -# include -# ifdef OPENSSL_SYS_VMS -# include -# include -# endif -# ifdef OPENSSL_SYS_WIN32 -/* Needed for struct timeval */ -# include -# elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) -# include -# else -# if defined(OPENSSL_SYS_VXWORKS) -# include -# else -# include -# endif -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE - -# define DTLS1_BAD_VER 0x0100 - -/* Special value for method supporting multiple versions */ -# define DTLS_ANY_VERSION 0x1FFFF - -# if 0 -/* this alert description is not specified anywhere... */ -# define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110 -# endif - -/* lengths of messages */ -# define DTLS1_COOKIE_LENGTH 256 - -# define DTLS1_RT_HEADER_LENGTH 13 - -# define DTLS1_HM_HEADER_LENGTH 12 - -# define DTLS1_HM_BAD_FRAGMENT -2 -# define DTLS1_HM_FRAGMENT_RETRY -3 - -# define DTLS1_CCS_HEADER_LENGTH 1 - -# ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE -# define DTLS1_AL_HEADER_LENGTH 7 -# else -# define DTLS1_AL_HEADER_LENGTH 2 -# endif - -# ifndef OPENSSL_NO_SSL_INTERN - -# ifndef OPENSSL_NO_SCTP -# define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP" -# endif - -/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */ -# define DTLS1_MAX_MTU_OVERHEAD 48 - -typedef struct dtls1_bitmap_st { - unsigned long map; /* track 32 packets on 32-bit systems and 64 - * - on 64-bit systems */ - unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit - * value in big-endian encoding */ -} DTLS1_BITMAP; - -struct dtls1_retransmit_state { - EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ - EVP_MD_CTX *write_hash; /* used for mac generation */ -# ifndef OPENSSL_NO_COMP - COMP_CTX *compress; /* compression */ -# else - char *compress; -# endif - SSL_SESSION *session; - unsigned short epoch; -}; - -struct hm_header_st { - unsigned char type; - unsigned long msg_len; - unsigned short seq; - unsigned long frag_off; - unsigned long frag_len; - unsigned int is_ccs; - struct dtls1_retransmit_state saved_retransmit_state; -}; - -struct ccs_header_st { - unsigned char type; - unsigned short seq; -}; - -struct dtls1_timeout_st { - /* Number of read timeouts so far */ - unsigned int read_timeouts; - /* Number of write timeouts so far */ - unsigned int write_timeouts; - /* Number of alerts received so far */ - unsigned int num_alerts; -}; - -typedef struct record_pqueue_st { - unsigned short epoch; - pqueue q; -} record_pqueue; - -typedef struct hm_fragment_st { - struct hm_header_st msg_header; - unsigned char *fragment; - unsigned char *reassembly; -} hm_fragment; - -typedef struct dtls1_state_st { - unsigned int send_cookie; - unsigned char cookie[DTLS1_COOKIE_LENGTH]; - unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH]; - unsigned int cookie_len; - /* - * The current data and handshake epoch. This is initially - * undefined, and starts at zero once the initial handshake is - * completed - */ - unsigned short r_epoch; - unsigned short w_epoch; - /* records being received in the current epoch */ - DTLS1_BITMAP bitmap; - /* renegotiation starts a new set of sequence numbers */ - DTLS1_BITMAP next_bitmap; - /* handshake message numbers */ - unsigned short handshake_write_seq; - unsigned short next_handshake_write_seq; - unsigned short handshake_read_seq; - /* save last sequence number for retransmissions */ - unsigned char last_write_sequence[8]; - /* Received handshake records (processed and unprocessed) */ - record_pqueue unprocessed_rcds; - record_pqueue processed_rcds; - /* Buffered handshake messages */ - pqueue buffered_messages; - /* Buffered (sent) handshake records */ - pqueue sent_messages; - /* - * Buffered application records. Only for records between CCS and - * Finished to prevent either protocol violation or unnecessary message - * loss. - */ - record_pqueue buffered_app_data; - /* Is set when listening for new connections with dtls1_listen() */ - unsigned int listen; - unsigned int link_mtu; /* max on-the-wire DTLS packet size */ - unsigned int mtu; /* max DTLS packet size */ - struct hm_header_st w_msg_hdr; - struct hm_header_st r_msg_hdr; - struct dtls1_timeout_st timeout; - /* - * Indicates when the last handshake msg or heartbeat sent will timeout - */ - struct timeval next_timeout; - /* Timeout duration */ - unsigned short timeout_duration; - /* - * storage for Alert/Handshake protocol data received but not yet - * processed by ssl3_read_bytes: - */ - unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH]; - unsigned int alert_fragment_len; - unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH]; - unsigned int handshake_fragment_len; - unsigned int retransmitting; - /* - * Set when the handshake is ready to process peer's ChangeCipherSpec message. - * Cleared after the message has been processed. - */ - unsigned int change_cipher_spec_ok; -# ifndef OPENSSL_NO_SCTP - /* used when SSL_ST_XX_FLUSH is entered */ - int next_state; - int shutdown_received; -# endif -} DTLS1_STATE; - -typedef struct dtls1_record_data_st { - unsigned char *packet; - unsigned int packet_length; - SSL3_BUFFER rbuf; - SSL3_RECORD rrec; -# ifndef OPENSSL_NO_SCTP - struct bio_dgram_sctp_rcvinfo recordinfo; -# endif -} DTLS1_RECORD_DATA; - -# endif - -/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - -# define DTLS1_TMO_ALERT_COUNT 12 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/e_os2.h b/ext/openssl/windows/x86/include/openssl/e_os2.h deleted file mode 100644 index 7be9989a..00000000 --- a/ext/openssl/windows/x86/include/openssl/e_os2.h +++ /dev/null @@ -1,328 +0,0 @@ -/* e_os2.h */ -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#include - -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * Detect operating systems. This probably needs completing. - * The result is that at least one OPENSSL_SYS_os macro should be defined. - * However, if none is defined, Unix is assumed. - **/ - -# define OPENSSL_SYS_UNIX - -/* ---------------------- Macintosh, before MacOS X ----------------------- */ -# if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_MACINTOSH_CLASSIC -# endif - -/* ---------------------- NetWare ----------------------------------------- */ -# if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_NETWARE -# endif - -/* --------------------- Microsoft operating systems ---------------------- */ - -/* - * Note that MSDOS actually denotes 32-bit environments running on top of - * MS-DOS, such as DJGPP one. - */ -# if defined(OPENSSL_SYSNAME_MSDOS) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_MSDOS -# endif - -/* - * For 32 bit environment, there seems to be the CygWin environment and then - * all the others that try to do the same thing Microsoft does... - */ -# if defined(OPENSSL_SYSNAME_UWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_UWIN -# else -# if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_CYGWIN -# else -# if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32 -# endif -# if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN64) -# define OPENSSL_SYS_WIN64 -# endif -# endif -# if defined(OPENSSL_SYSNAME_WINNT) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINNT -# endif -# if defined(OPENSSL_SYSNAME_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINCE -# endif -# endif -# endif - -/* Anything that tries to look like Microsoft is "Windows" */ -# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_SYS_MSDOS -# define OPENSSL_SYS_MSDOS -# endif -# endif - -/* - * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it - * requires some macro to be used. - */ -# ifdef OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_OPT_WINDLL -# if defined(_WINDLL) /* This is used when building OpenSSL to - * indicate that DLL linkage should be used */ -# define OPENSSL_OPT_WINDLL -# endif -# endif -# endif - -/* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_VMS -# if defined(__DECC) -# define OPENSSL_SYS_VMS_DECC -# elif defined(__DECCXX) -# define OPENSSL_SYS_VMS_DECC -# define OPENSSL_SYS_VMS_DECCXX -# else -# define OPENSSL_SYS_VMS_NODECC -# endif -# endif - -/* -------------------------------- OS/2 ---------------------------------- */ -# if defined(__EMX__) || defined(__OS2__) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_OS2 -# endif - -/* -------------------------------- Unix ---------------------------------- */ -# ifdef OPENSSL_SYS_UNIX -# if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) -# define OPENSSL_SYS_LINUX -# endif -# ifdef OPENSSL_SYSNAME_MPE -# define OPENSSL_SYS_MPE -# endif -# ifdef OPENSSL_SYSNAME_SNI -# define OPENSSL_SYS_SNI -# endif -# ifdef OPENSSL_SYSNAME_ULTRASPARC -# define OPENSSL_SYS_ULTRASPARC -# endif -# ifdef OPENSSL_SYSNAME_NEWS4 -# define OPENSSL_SYS_NEWS4 -# endif -# ifdef OPENSSL_SYSNAME_MACOSX -# define OPENSSL_SYS_MACOSX -# endif -# ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY -# define OPENSSL_SYS_MACOSX_RHAPSODY -# define OPENSSL_SYS_MACOSX -# endif -# ifdef OPENSSL_SYSNAME_SUNOS -# define OPENSSL_SYS_SUNOS -# endif -# if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) -# define OPENSSL_SYS_CRAY -# endif -# if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) -# define OPENSSL_SYS_AIX -# endif -# endif - -/* -------------------------------- VOS ----------------------------------- */ -# if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS) -# define OPENSSL_SYS_VOS -# ifdef __HPPA__ -# define OPENSSL_SYS_VOS_HPPA -# endif -# ifdef __IA32__ -# define OPENSSL_SYS_VOS_IA32 -# endif -# endif - -/* ------------------------------ VxWorks --------------------------------- */ -# ifdef OPENSSL_SYSNAME_VXWORKS -# define OPENSSL_SYS_VXWORKS -# endif - -/* -------------------------------- BeOS ---------------------------------- */ -# if defined(__BEOS__) -# define OPENSSL_SYS_BEOS -# include -# if defined(BONE_VERSION) -# define OPENSSL_SYS_BEOS_BONE -# else -# define OPENSSL_SYS_BEOS_R5 -# endif -# endif - -/** - * That's it for OS-specific stuff - *****************************************************************************/ - -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - -/*- - * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare - * certain global symbols that, with some compilers under VMS, have to be - * defined and declared explicitely with globaldef and globalref. - * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare - * DLL exports and imports for compilers under Win32. These are a little - * more complicated to use. Basically, for any library that exports some - * global variables, the following code must be present in the header file - * that declares them, before OPENSSL_EXTERN is used: - * - * #ifdef SOME_BUILD_FLAG_MACRO - * # undef OPENSSL_EXTERN - * # define OPENSSL_EXTERN OPENSSL_EXPORT - * #endif - * - * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL - * have some generally sensible values, and for OPENSSL_EXTERN to have the - * value OPENSSL_IMPORT. - */ - -# if defined(OPENSSL_SYS_VMS_NODECC) -# define OPENSSL_EXPORT globalref -# define OPENSSL_IMPORT globalref -# define OPENSSL_GLOBAL globaldef -# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) -# define OPENSSL_EXPORT extern __declspec(dllexport) -# define OPENSSL_IMPORT extern __declspec(dllimport) -# define OPENSSL_GLOBAL -# else -# define OPENSSL_EXPORT extern -# define OPENSSL_IMPORT extern -# define OPENSSL_GLOBAL -# endif -# define OPENSSL_EXTERN OPENSSL_IMPORT - -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - -# if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE) -# define ossl_ssize_t long -# endif - -# ifdef OPENSSL_SYS_MSDOS -# define ossl_ssize_t long -# endif - -# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS) -# define ssize_t int -# endif - -# if defined(__ultrix) && !defined(ssize_t) -# define ossl_ssize_t int -# endif - -# ifndef ossl_ssize_t -# define ossl_ssize_t ssize_t -# endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ebcdic.h b/ext/openssl/windows/x86/include/openssl/ebcdic.h deleted file mode 100644 index 4cbdfeb7..00000000 --- a/ext/openssl/windows/x86/include/openssl/ebcdic.h +++ /dev/null @@ -1,26 +0,0 @@ -/* crypto/ebcdic.h */ - -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid name clashes with other applications */ -# define os_toascii _openssl_os_toascii -# define os_toebcdic _openssl_os_toebcdic -# define ebcdic2ascii _openssl_ebcdic2ascii -# define ascii2ebcdic _openssl_ascii2ebcdic - -extern const unsigned char os_toascii[256]; -extern const unsigned char os_toebcdic[256]; -void *ebcdic2ascii(void *dest, const void *srce, size_t count); -void *ascii2ebcdic(void *dest, const void *srce, size_t count); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ec.h b/ext/openssl/windows/x86/include/openssl/ec.h deleted file mode 100644 index 81e6faf6..00000000 --- a/ext/openssl/windows/x86/include/openssl/ec.h +++ /dev/null @@ -1,1282 +0,0 @@ -/* crypto/ec/ec.h */ -/* - * Originally written by Bodo Moeller for the OpenSSL project. - */ -/** - * \file crypto/ec/ec.h Include file for the OpenSSL EC functions - * \author Originally written by Bodo Moeller for the OpenSSL project - */ -/* ==================================================================== - * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - -#ifndef HEADER_EC_H -# define HEADER_EC_H - -# include - -# ifdef OPENSSL_NO_EC -# error EC is disabled. -# endif - -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifdef __cplusplus -extern "C" { -# elif defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -# endif - -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 -# endif - -/** Enum for the point conversion form as defined in X9.62 (ECDSA) - * for the encoding of a elliptic curve point (x,y) */ -typedef enum { - /** the point is encoded as z||x, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x04 */ - POINT_CONVERSION_UNCOMPRESSED = 4, - /** the point is encoded as z||x||y, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_HYBRID = 6 -} point_conversion_form_t; - -typedef struct ec_method_st EC_METHOD; - -typedef struct ec_group_st - /*- - EC_METHOD *meth; - -- field definition - -- curve coefficients - -- optional generator with associated information (order, cofactor) - -- optional extra data (precomputed table for fast computation of multiples of generator) - -- ASN1 stuff - */ - EC_GROUP; - -typedef struct ec_point_st EC_POINT; - -/********************************************************************/ -/* EC_METHODs for curves over GF(p) */ -/********************************************************************/ - -/** Returns the basic GFp ec methods which provides the basis for the - * optimized methods. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_simple_method(void); - -/** Returns GFp methods using montgomery multiplication. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_mont_method(void); - -/** Returns GFp methods using optimized methods for NIST recommended curves - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nist_method(void); - -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -/** Returns 64-bit optimized methods for nistp224 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp224_method(void); - -/** Returns 64-bit optimized methods for nistp256 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp256_method(void); - -/** Returns 64-bit optimized methods for nistp521 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif - -# ifndef OPENSSL_NO_EC2M -/********************************************************************/ -/* EC_METHOD for curves over GF(2^m) */ -/********************************************************************/ - -/** Returns the basic GF2m ec method - * \return EC_METHOD object - */ -const EC_METHOD *EC_GF2m_simple_method(void); - -# endif - -/********************************************************************/ -/* EC_GROUP functions */ -/********************************************************************/ - -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); - -/** Frees a EC_GROUP object - * \param group EC_GROUP object to be freed. - */ -void EC_GROUP_free(EC_GROUP *group); - -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - -/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. - * \param dst destination EC_GROUP object - * \param src source EC_GROUP object - * \return 1 on success and 0 if an error occurred. - */ -int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); - -/** Creates a new EC_GROUP object and copies the copies the content - * form src to the newly created EC_KEY object - * \param src source EC_GROUP object - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); - -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - -/** Sets the generator and it's order/cofactor of a EC_GROUP object. - * \param group EC_GROUP object - * \param generator EC_POINT object with the generator. - * \param order the order of the group generated by the generator. - * \param cofactor the index of the sub-group generated by the generator - * in the group of all points on the elliptic curve. - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, - const BIGNUM *order, const BIGNUM *cofactor); - -/** Returns the generator of a EC_GROUP object. - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). - */ -const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); - -/** Returns the montgomery data for order(Generator) - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). -*/ -BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); - -/** Gets the order of a EC_GROUP - * \param group EC_GROUP object - * \param order BIGNUM to which the order is copied - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); - -/** Gets the cofactor of a EC_GROUP - * \param group EC_GROUP object - * \param cofactor BIGNUM to which the cofactor is copied - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, - BN_CTX *ctx); - -/** Sets the name of a EC_GROUP object - * \param group EC_GROUP object - * \param nid NID of the curve name OID - */ -void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); - -/** Returns the curve name of a EC_GROUP object - * \param group EC_GROUP object - * \return NID of the curve name OID or 0 if not set. - */ -int EC_GROUP_get_curve_name(const EC_GROUP *group); - -void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); -int EC_GROUP_get_asn1_flag(const EC_GROUP *group); - -void EC_GROUP_set_point_conversion_form(EC_GROUP *group, - point_conversion_form_t form); -point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); - -unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); -size_t EC_GROUP_get_seed_len(const EC_GROUP *); -size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); - -/** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b - * \param group EC_GROUP object - * \param p BIGNUM with the prime number - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b - * \param group EC_GROUP object - * \param p BIGNUM for the prime number - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M -/** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b - * \param group EC_GROUP object - * \param p BIGNUM with the polynomial defining the underlying field - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b - * \param group EC_GROUP object - * \param p BIGNUM for the polynomial defining the underlying field - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx); -# endif -/** Returns the number of bits needed to represent a field element - * \param group EC_GROUP object - * \return number of bits needed to represent a field element - */ -int EC_GROUP_get_degree(const EC_GROUP *group); - -/** Checks whether the parameter in the EC_GROUP define a valid ec group - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if group is a valid ec group and 0 otherwise - */ -int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); - -/** Checks whether the discriminant of the elliptic curve is zero or not - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if the discriminant is not zero and 0 otherwise - */ -int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); - -/** Compares two EC_GROUP objects - * \param a first EC_GROUP object - * \param b second EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 0 if both groups are equal and 1 otherwise - */ -int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); - -/* - * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after - * choosing an appropriate EC_METHOD - */ - -/** Creates a new EC_GROUP object with the specified parameters defined - * over GFp (defined by the equation y^2 = x^3 + a*x + b) - * \param p BIGNUM with the prime number - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M -/** Creates a new EC_GROUP object with the specified parameters defined - * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) - * \param p BIGNUM with the polynomial defining the underlying field - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# endif -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_by_curve_name(int nid); - -/********************************************************************/ -/* handling of internal curves */ -/********************************************************************/ - -typedef struct { - int nid; - const char *comment; -} EC_builtin_curve; - -/* - * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all - * available curves or zero if a error occurred. In case r ist not zero - * nitems EC_builtin_curve structures are filled with the data of the first - * nitems internal groups - */ -size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); - -const char *EC_curve_nid2nist(int nid); -int EC_curve_nist2nid(const char *name); - -/********************************************************************/ -/* EC_POINT functions */ -/********************************************************************/ - -/** Creates a new EC_POINT object for the specified EC_GROUP - * \param group EC_GROUP the underlying EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_new(const EC_GROUP *group); - -/** Frees a EC_POINT object - * \param point EC_POINT object to be freed - */ -void EC_POINT_free(EC_POINT *point); - -/** Clears and frees a EC_POINT object - * \param point EC_POINT object to be cleared and freed - */ -void EC_POINT_clear_free(EC_POINT *point); - -/** Copies EC_POINT object - * \param dst destination EC_POINT object - * \param src source EC_POINT object - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); - -/** Creates a new EC_POINT object and copies the content of the supplied - * EC_POINT - * \param src source EC_POINT object - * \param group underlying the EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); - -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - -/** Sets a point to infinity (neutral element) - * \param group underlying EC_GROUP object - * \param point EC_POINT to set to infinity - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); - -/** Sets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param z BIGNUM with the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); - -/** Gets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param z BIGNUM for the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); - -/** Sets the affine coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BN_CTX *ctx); - -/** Sets the x9.62 compressed coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - int y_bit, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M -/** Sets the affine coordinates of a EC_POINT over GF2m - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of a EC_POINT over GF2m - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BN_CTX *ctx); - -/** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - int y_bit, BN_CTX *ctx); -# endif -/** Encodes a EC_POINT object to a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param form point conversion form - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, - point_conversion_form_t form, - unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Decodes a EC_POINT from a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, - const unsigned char *buf, size_t len, BN_CTX *ctx); - -/* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); -char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BN_CTX *); -EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, - EC_POINT *, BN_CTX *); - -/********************************************************************/ -/* functions for doing EC_POINT arithmetic */ -/********************************************************************/ - -/** Computes the sum of two EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = a + b) - * \param a EC_POINT object with the first summand - * \param b EC_POINT object with the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx); - -/** Computes the double of a EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = 2 * a) - * \param a EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx); - -/** Computes the inverse of a EC_POINT - * \param group underlying EC_GROUP object - * \param a EC_POINT object to be inverted (it's used for the result as well) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); - -/** Checks whether the point is the neutral element of the group - * \param group the underlying EC_GROUP object - * \param p EC_POINT object - * \return 1 if the point is the neutral element and 0 otherwise - */ -int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); - -/** Checks whether the point is on the curve - * \param group underlying EC_GROUP object - * \param point EC_POINT object to check - * \param ctx BN_CTX object (optional) - * \return 1 if point if on the curve and 0 otherwise - */ -int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx); - -/** Compares two EC_POINTs - * \param group underlying EC_GROUP object - * \param a first EC_POINT object - * \param b second EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 0 if both points are equal and a value != 0 otherwise - */ -int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, - BN_CTX *ctx); - -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); - -/** Computes r = generator * n sum_{i=0}^{num-1} p[i] * m[i] - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param num number futher summands - * \param p array of size num of EC_POINT objects - * \param m array of size num of BIGNUM objects - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); - -/** Computes r = generator * n + q * m - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param q EC_POINT object with the first factor of the second summand - * \param m BIGNUM with the second factor of the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); - -/** Stores multiples of generator for faster point multiplication - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); - -/** Reports whether a precomputation has been done - * \param group EC_GROUP object - * \return 1 if a pre-computation has been done and 0 otherwise - */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); - -/********************************************************************/ -/* ASN1 stuff */ -/********************************************************************/ - -/* - * EC_GROUP_get_basis_type() returns the NID of the basis type used to - * represent the field elements - */ -int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M -int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); -int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, - unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_NAMED_CURVE 0x001 - -typedef struct ecpk_parameters_st ECPKPARAMETERS; - -EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); -int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); - -# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) -# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) -# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ - (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) -# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ - (unsigned char *)(x)) - -# ifndef OPENSSL_NO_BIO -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# endif -# ifndef OPENSSL_NO_FP_API -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif - -/********************************************************************/ -/* EC_KEY functions */ -/********************************************************************/ - -typedef struct ec_key_st EC_KEY; - -/* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 - -/* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 - -/** Creates a new EC_KEY object. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new(void); - -int EC_KEY_get_flags(const EC_KEY *key); - -void EC_KEY_set_flags(EC_KEY *key, int flags); - -void EC_KEY_clear_flags(EC_KEY *key, int flags); - -/** Creates a new EC_KEY object using a named curve as underlying - * EC_GROUP object. - * \param nid NID of the named curve. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); - -/** Frees a EC_KEY object. - * \param key EC_KEY object to be freed. - */ -void EC_KEY_free(EC_KEY *key); - -/** Copies a EC_KEY object. - * \param dst destination EC_KEY object - * \param src src EC_KEY object - * \return dst or NULL if an error occurred. - */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); - -/** Creates a new EC_KEY object and copies the content from src to it. - * \param src the source EC_KEY object - * \return newly created EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); - -/** Increases the internal reference count of a EC_KEY object. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_up_ref(EC_KEY *key); - -/** Returns the EC_GROUP object of a EC_KEY object - * \param key EC_KEY object - * \return the EC_GROUP object (possibly NULL). - */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); - -/** Sets the EC_GROUP of a EC_KEY object. - * \param key EC_KEY object - * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY - * object will use an own copy of the EC_GROUP). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); - -/** Returns the private key of a EC_KEY object. - * \param key EC_KEY object - * \return a BIGNUM with the private key (possibly NULL). - */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); - -/** Sets the private key of a EC_KEY object. - * \param key EC_KEY object - * \param prv BIGNUM with the private key (note: the EC_KEY object - * will use an own copy of the BIGNUM). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); - -/** Returns the public key of a EC_KEY object. - * \param key the EC_KEY object - * \return a EC_POINT object with the public key (possibly NULL) - */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); - -/** Sets the public key of a EC_KEY object. - * \param key EC_KEY object - * \param pub EC_POINT object with the public key (note: the EC_KEY object - * will use an own copy of the EC_POINT object). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); - -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); -/* functions to set/get method specific data */ -void *EC_KEY_get_key_method_data(EC_KEY *key, - void *(*dup_func) (void *), - void (*free_func) (void *), - void (*clear_free_func) (void *)); -/** Sets the key method data of an EC_KEY object, if none has yet been set. - * \param key EC_KEY object - * \param data opaque data to install. - * \param dup_func a function that duplicates |data|. - * \param free_func a function that frees |data|. - * \param clear_free_func a function that wipes and frees |data|. - * \return the previously set data pointer, or NULL if |data| was inserted. - */ -void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data, - void *(*dup_func) (void *), - void (*free_func) (void *), - void (*clear_free_func) (void *)); -/* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); - -/** Creates a table of pre-computed multiples of the generator to - * accelerate further EC_KEY operations. - * \param key EC_KEY object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); - -/** Creates a new ec private (and optional a new public) key. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_generate_key(EC_KEY *key); - -/** Verifies that a private and/or public key is valid. - * \param key the EC_KEY object - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_check_key(const EC_KEY *key); - -/** Sets a public key from affine coordindates performing - * neccessary NIST PKV tests. - * \param key the EC_KEY object - * \param x public key x coordinate - * \param y public key y coordinate - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); - -/********************************************************************/ -/* de- and encoding functions for SEC1 ECPrivateKey */ -/********************************************************************/ - -/** Decodes a private key from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded private key - * \param len length of the DER encoded private key - * \return the decoded private key or NULL if an error occurred. - */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a private key object and stores the result in a buffer. - * \param key the EC_KEY object to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC parameters */ -/********************************************************************/ - -/** Decodes ec parameter from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded ec parameters - * \param len length of the DER encoded ec parameters - * \return a EC_KEY object with the decoded parameters or NULL if an error - * occurred. - */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes ec parameter and stores the result in a buffer. - * \param key the EC_KEY object with ec paramters to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC public key */ -/* (octet string, not DER -- hence 'o2i' and 'i2o') */ -/********************************************************************/ - -/** Decodes a ec public key from a octet string. - * \param key a pointer to a EC_KEY object which should be used - * \param in memory buffer with the encoded public key - * \param len length of the encoded public key - * \return EC_KEY object with decoded public key or NULL if an error - * occurred. - */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a ec public key in an octet string. - * \param key the EC_KEY object with the public key - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred - */ -int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); - -# ifndef OPENSSL_NO_BIO -/** Prints out the ec parameters on human readable form. - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print(BIO *bp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); - -# endif -# ifndef OPENSSL_NO_FP_API -/** Prints out the ec parameters on human readable form. - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); - -# endif - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -# endif -# endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_62 2 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_EC_strings(void); - -/* Error codes for the EC functions. */ - -/* Function codes. */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_COMPUTE_WNAF 143 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_SET_WORDS 245 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECP_NIST_MOD_192 203 -# define EC_F_ECP_NIST_MOD_224 204 -# define EC_F_ECP_NIST_MOD_256 205 -# define EC_F_ECP_NIST_MOD_521 206 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_ASN1_GROUP2PARAMETERS 155 -# define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156 -# define EC_F_EC_ASN1_PARAMETERS2GROUP 157 -# define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158 -# define EC_F_EC_EX_DATA_SET_DATA 211 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP 135 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET0_GENERATOR 139 -# define EC_F_EC_GROUP_GET_COFACTOR 140 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ORDER 141 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_PRECOMPUTE_MULT 142 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_EXTRA_DATA 110 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_MUL 184 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_DUP 207 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 - -/* Reason codes. */ -# define EC_R_ASN1_ERROR 115 -# define EC_R_ASN1_UNKNOWN_FIELD 116 -# define EC_R_BIGNUM_OUT_OF_RANGE 144 -# define EC_R_BUFFER_TOO_SMALL 100 -# define EC_R_COORDINATES_OUT_OF_RANGE 146 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 -# define EC_R_DECODE_ERROR 142 -# define EC_R_DISCRIMINANT_IS_ZERO 118 -# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 -# define EC_R_FIELD_TOO_LARGE 143 -# define EC_R_GF2M_NOT_SUPPORTED 147 -# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 -# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 -# define EC_R_INCOMPATIBLE_OBJECTS 101 -# define EC_R_INVALID_ARGUMENT 112 -# define EC_R_INVALID_COMPRESSED_POINT 110 -# define EC_R_INVALID_COMPRESSION_BIT 109 -# define EC_R_INVALID_CURVE 141 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# define EC_R_INVALID_ENCODING 102 -# define EC_R_INVALID_FIELD 103 -# define EC_R_INVALID_FORM 104 -# define EC_R_INVALID_GROUP_ORDER 122 -# define EC_R_INVALID_PENTANOMIAL_BASIS 132 -# define EC_R_INVALID_PRIVATE_KEY 123 -# define EC_R_INVALID_TRINOMIAL_BASIS 137 -# define EC_R_KDF_PARAMETER_ERROR 148 -# define EC_R_KEYS_NOT_SET 140 -# define EC_R_MISSING_PARAMETERS 124 -# define EC_R_MISSING_PRIVATE_KEY 125 -# define EC_R_NOT_A_NIST_PRIME 135 -# define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 -# define EC_R_NOT_IMPLEMENTED 126 -# define EC_R_NOT_INITIALIZED 111 -# define EC_R_NO_FIELD_MOD 133 -# define EC_R_NO_PARAMETERS_SET 139 -# define EC_R_PASSED_NULL_PARAMETER 134 -# define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 -# define EC_R_POINT_AT_INFINITY 106 -# define EC_R_POINT_IS_NOT_ON_CURVE 107 -# define EC_R_SHARED_INFO_ERROR 150 -# define EC_R_SLOT_FULL 108 -# define EC_R_UNDEFINED_GENERATOR 113 -# define EC_R_UNDEFINED_ORDER 128 -# define EC_R_UNKNOWN_GROUP 129 -# define EC_R_UNKNOWN_ORDER 114 -# define EC_R_UNSUPPORTED_FIELD 131 -# define EC_R_WRONG_CURVE_PARAMETERS 145 -# define EC_R_WRONG_ORDER 130 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ecdh.h b/ext/openssl/windows/x86/include/openssl/ecdh.h deleted file mode 100644 index 25348b30..00000000 --- a/ext/openssl/windows/x86/include/openssl/ecdh.h +++ /dev/null @@ -1,134 +0,0 @@ -/* crypto/ecdh/ecdh.h */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - * - * The ECDH software is originally written by Douglas Stebila of - * Sun Microsystems Laboratories. - * - */ -/* ==================================================================== - * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_ECDH_H -# define HEADER_ECDH_H - -# include - -# ifdef OPENSSL_NO_ECDH -# error ECDH is disabled. -# endif - -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define EC_FLAG_COFACTOR_ECDH 0x1000 - -const ECDH_METHOD *ECDH_OpenSSL(void); - -void ECDH_set_default_method(const ECDH_METHOD *); -const ECDH_METHOD *ECDH_get_default_method(void); -int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); - -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); - -int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new - *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); -void *ECDH_get_ex_data(EC_KEY *d, int idx); - -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ECDH_strings(void); - -/* Error codes for the ECDH functions. */ - -/* Function codes. */ -# define ECDH_F_ECDH_CHECK 102 -# define ECDH_F_ECDH_COMPUTE_KEY 100 -# define ECDH_F_ECDH_DATA_NEW_METHOD 101 - -/* Reason codes. */ -# define ECDH_R_KDF_FAILED 102 -# define ECDH_R_NON_FIPS_METHOD 103 -# define ECDH_R_NO_PRIVATE_VALUE 100 -# define ECDH_R_POINT_ARITHMETIC_FAILURE 101 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ecdsa.h b/ext/openssl/windows/x86/include/openssl/ecdsa.h deleted file mode 100644 index a6f0930f..00000000 --- a/ext/openssl/windows/x86/include/openssl/ecdsa.h +++ /dev/null @@ -1,335 +0,0 @@ -/* crypto/ecdsa/ecdsa.h */ -/** - * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions - * \author Written by Nils Larsch for the OpenSSL project - */ -/* ==================================================================== - * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_ECDSA_H -# define HEADER_ECDSA_H - -# include - -# ifdef OPENSSL_NO_ECDSA -# error ECDSA is disabled. -# endif - -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ECDSA_SIG_st { - BIGNUM *r; - BIGNUM *s; -} ECDSA_SIG; - -/** Allocates and initialize a ECDSA_SIG structure - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_SIG_new(void); - -/** frees a ECDSA_SIG structure - * \param sig pointer to the ECDSA_SIG structure - */ -void ECDSA_SIG_free(ECDSA_SIG *sig); - -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp - * (*pp += length of the DER encoded signature)). - * \param sig pointer to the ECDSA_SIG object - * \param pp pointer to a unsigned char pointer for the output or NULL - * \return the length of the DER encoded ECDSA_SIG object or 0 - */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); - -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp - * (*pp += len)). - * \param sig pointer to ECDSA_SIG pointer (may be NULL) - * \param pp memory buffer with the DER encoded signature - * \param len length of the buffer - * \return pointer to the decoded ECDSA_SIG structure (or NULL) - */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); - -/** Computes the ECDSA signature of the given hash value using - * the supplied private key and returns the created signature. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optioanl), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); - -/** Verifies that the supplied signature is a valid ECDSA - * signature of the supplied hash value using the supplied public key. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param sig ECDSA_SIG structure - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); - -const ECDSA_METHOD *ECDSA_OpenSSL(void); - -/** Sets the default ECDSA method - * \param meth new default ECDSA_METHOD - */ -void ECDSA_set_default_method(const ECDSA_METHOD *meth); - -/** Returns the default ECDSA method - * \return pointer to ECDSA_METHOD structure containing the default method - */ -const ECDSA_METHOD *ECDSA_get_default_method(void); - -/** Sets method to be used for the ECDSA operations - * \param eckey EC_KEY object - * \param meth new method - * \return 1 on success and 0 otherwise - */ -int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); - -/** Returns the maximum length of the DER encoded signature - * \param eckey EC_KEY object - * \return numbers of bytes required for the DER encoded signature - */ -int ECDSA_size(const EC_KEY *eckey); - -/** Precompute parts of the signing operation - * \param eckey EC_KEY object containing a private EC key - * \param ctx BN_CTX object (optional) - * \param kinv BIGNUM pointer for the inverse of k - * \param rp BIGNUM pointer for x coordinate of k * generator - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig memory for the DER encoded created signature - * \param siglen pointer to the length of the returned signature - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig buffer to hold the DER encoded signature - * \param siglen pointer to the length of the returned signature - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optioanl), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); - -/** Verifies that the given signature is valid ECDSA signature - * of the supplied hash value using the specified public key. - * \param type this parameter is ignored - * \param dgst pointer to the hash value - * \param dgstlen length of the hash value - * \param sig pointer to the DER encoded signature - * \param siglen length of the DER encoded signature - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); - -/* the standard ex_data functions */ -int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new - *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); -void *ECDSA_get_ex_data(EC_KEY *d, int idx); - -/** Allocates and initialize a ECDSA_METHOD structure - * \param ecdsa_method pointer to ECDSA_METHOD to copy. (May be NULL) - * \return pointer to a ECDSA_METHOD structure or NULL if an error occurred - */ - -ECDSA_METHOD *ECDSA_METHOD_new(const ECDSA_METHOD *ecdsa_method); - -/** frees a ECDSA_METHOD structure - * \param ecdsa_method pointer to the ECDSA_METHOD structure - */ -void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method); - -/** Sets application specific data in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param app application specific data to set - */ - -void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app); - -/** Returns application specific data from a ECDSA_METHOD structure - * \param ecdsa_method pointer to ECDSA_METHOD structure - * \return pointer to application specific data. - */ - -void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method); - -/** Set the ECDSA_do_sign function in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param ecdsa_do_sign a funtion of type ECDSA_do_sign - */ - -void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method, - ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char - *dgst, int dgst_len, - const BIGNUM *inv, - const BIGNUM *rp, - EC_KEY *eckey)); - -/** Set the ECDSA_sign_setup function in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param ecdsa_sign_setup a funtion of type ECDSA_sign_setup - */ - -void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method, - int (*ecdsa_sign_setup) (EC_KEY *eckey, - BN_CTX *ctx, - BIGNUM **kinv, - BIGNUM **r)); - -/** Set the ECDSA_do_verify function in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param ecdsa_do_verify a funtion of type ECDSA_do_verify - */ - -void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method, - int (*ecdsa_do_verify) (const unsigned char - *dgst, int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags); - -/** Set the flags field in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param flags flags value to set - */ - -void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name); - -/** Set the name field in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param name name to set - */ - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ECDSA_strings(void); - -/* Error codes for the ECDSA functions. */ - -/* Function codes. */ -# define ECDSA_F_ECDSA_CHECK 104 -# define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 -# define ECDSA_F_ECDSA_DO_SIGN 101 -# define ECDSA_F_ECDSA_DO_VERIFY 102 -# define ECDSA_F_ECDSA_METHOD_NEW 105 -# define ECDSA_F_ECDSA_SIGN_SETUP 103 - -/* Reason codes. */ -# define ECDSA_R_BAD_SIGNATURE 100 -# define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 -# define ECDSA_R_ERR_EC_LIB 102 -# define ECDSA_R_MISSING_PARAMETERS 103 -# define ECDSA_R_NEED_NEW_SETUP_VALUES 106 -# define ECDSA_R_NON_FIPS_METHOD 107 -# define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 -# define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/engine.h b/ext/openssl/windows/x86/include/openssl/engine.h deleted file mode 100644 index bd7b5914..00000000 --- a/ext/openssl/windows/x86/include/openssl/engine.h +++ /dev/null @@ -1,960 +0,0 @@ -/* openssl/engine.h */ -/* - * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H - -# include - -# ifdef OPENSSL_NO_ENGINE -# error ENGINE is disabled. -# endif - -# ifndef OPENSSL_NO_DEPRECATED -# include -# ifndef OPENSSL_NO_RSA -# include -# endif -# ifndef OPENSSL_NO_DSA -# include -# endif -# ifndef OPENSSL_NO_DH -# include -# endif -# ifndef OPENSSL_NO_ECDH -# include -# endif -# ifndef OPENSSL_NO_ECDSA -# include -# endif -# include -# include -# include -# endif - -# include -# include - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These flags are used to control combinations of algorithm (methods) by - * bitwise "OR"ing. - */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_ECDH (unsigned int)0x0010 -# define ENGINE_METHOD_ECDSA (unsigned int)0x0020 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_STORE (unsigned int)0x0100 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -/* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 - -/* - * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used - * internally to control registration of ENGINE implementations, and can be - * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to - * initialise registered ENGINEs if they are not already initialised. - */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 - -/* ENGINE flags that can be set by ENGINE_set_flags(). */ -/* Not used */ -/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ - -/* - * This flag is for ENGINEs that wish to handle the various 'CMD'-related - * control commands on their own. Without this flag, ENGINE_ctrl() handles - * these control commands on behalf of the ENGINE using their "cmd_defns" - * data. - */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 - -/* - * This flag is for ENGINEs who return new duplicate structures when found - * via "ENGINE_by_id()". When an ENGINE must store state (eg. if - * ENGINE_ctrl() commands are called in sequence as part of some stateful - * process like key-generation setup and execution), it can set this flag - - * then each attempt to obtain the ENGINE will result in it being copied into - * a new structure. Normally, ENGINEs don't declare this flag so - * ENGINE_by_id() just increments the existing ENGINE's structural reference - * count. - */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 - -/* - * This flag if for an ENGINE that does not want its methods registered as - * part of ENGINE_register_all_complete() for example if the methods are not - * usable as default methods. - */ - -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 - -/* - * ENGINEs can support their own command types, and these flags are used in - * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input - * each command expects. Currently only numeric and string input is - * supported. If a control command supports none of the _NUMERIC, _STRING, or - * _NO_INPUT options, then it is regarded as an "internal" control command - - * and not for use in config setting situations. As such, they're not - * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() - * access. Changes to this list of 'command types' should be reflected - * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). - */ - -/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 -/* - * accepts string input (cast from 'void*' to 'const char *', 4th parameter - * to ENGINE_ctrl) - */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 -/* - * Indicates that the control command takes *no* input. Ie. the control - * command is unparameterised. - */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 -/* - * Indicates that the control command is internal. This control command won't - * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() - * function. - */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 - -/* - * NB: These 3 control commands are deprecated and should not be used. - * ENGINEs relying on these commands should compile conditional support for - * compatibility (eg. if these symbols are defined) but should also migrate - * the same functionality to their own ENGINE-specific control functions that - * can be "discovered" by calling applications. The fact these control - * commands wouldn't be "executable" (ie. usable by text-based config) - * doesn't change the fact that application code can find and use them - * without requiring per-ENGINE hacking. - */ - -/* - * These flags are used to tell the ctrl function what should be done. All - * command numbers are shared between all engines, even if some don't make - * sense to some engines. In such a case, they do nothing but return the - * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. - */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise - * any handles/connections - * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used - * when calling the password - * callback and the user - * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, - * given a string that - * represents a file name - * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given - * section in the already - * loaded configuration */ - -/* - * These control commands allow an application to deal with an arbitrary - * engine in a dynamic way. Warn: Negative return values indicate errors FOR - * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other - * commands, including ENGINE-specific command types, return zero for an - * error. An ENGINE can choose to implement these ctrl functions, and can - * internally manage things however it chooses - it does so by setting the - * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise - * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the - * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's - * ctrl() handler need only implement its own commands - the above "meta" - * commands will be taken care of. - */ - -/* - * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", - * then all the remaining control commands will return failure, so it is - * worth checking this first if the caller is trying to "discover" the - * engine's capabilities and doesn't want errors generated unnecessarily. - */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 -/* - * Returns a positive command number for the first command supported by the - * engine. Returns zero if no ctrl commands are supported. - */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 -/* - * The 'long' argument specifies a command implemented by the engine, and the - * return value is the next command supported, or zero if there are no more. - */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 -/* - * The 'void*' argument is a command name (cast from 'const char *'), and the - * return value is the command that corresponds to it. - */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 -/* - * The next two allow a command to be converted into its corresponding string - * form. In each case, the 'long' argument supplies the command. In the - * NAME_LEN case, the return value is the length of the command name (not - * counting a trailing EOL). In the NAME case, the 'void*' argument must be a - * string buffer large enough, and it will be populated with the name of the - * command (WITH a trailing EOL). - */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 -/* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 -/* - * With this command, the return value is the OR'd combination of - * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given - * engine-specific ctrl command expects. - */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 - -/* - * ENGINE implementations should start the numbering of their own control - * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). - */ -# define ENGINE_CMD_BASE 200 - -/* - * NB: These 2 nCipher "chil" control commands are deprecated, and their - * functionality is now available through ENGINE-specific control commands - * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 - * commands should be migrated to the more general command handling before - * these are removed. - */ - -/* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ - -/* - * If an ENGINE supports its own specific control commands and wishes the - * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on - * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN - * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() - * handler that supports the stated commands (ie. the "cmd_num" entries as - * described by the array). NB: The array must be ordered in increasing order - * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element - * has cmd_num set to zero and/or cmd_name set to NULL. - */ -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ -} ENGINE_CMD_DEFN; - -/* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); -/* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); -/* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); -/* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, - UI_METHOD *ui_method, - void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); -/*- - * These callback types are for an ENGINE's handler for cipher and digest logic. - * These handlers have these prototypes; - * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); - * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); - * Looking at how to implement these handlers in the case of cipher support, if - * the framework wants the EVP_CIPHER for 'nid', it will call; - * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) - * If the framework wants a list of supported 'nid's, it will call; - * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) - */ -/* - * Returns to a pointer to the array of supported cipher 'nid's. If the - * second parameter is non-NULL it is set to the size of the returned array. - */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); -/* - * STRUCTURE functions ... all of these functions deal with pointers to - * ENGINE structures where the pointers have a "structural reference". This - * means that their reference is to allowed access to the structure but it - * does not imply that the structure is functional. To simply increment or - * decrement the structural reference count, use ENGINE_by_id and - * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next - * as it will automatically decrement the structural reference count of the - * "current" ENGINE and increment the structural reference count of the - * ENGINE it returns (unless it is NULL). - */ - -/* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); -/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); -/* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); -/* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); -/* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); -/* Add all the built-in engines. */ -void ENGINE_load_openssl(void); -void ENGINE_load_dynamic(void); -# ifndef OPENSSL_NO_STATIC_ENGINE -void ENGINE_load_4758cca(void); -void ENGINE_load_aep(void); -void ENGINE_load_atalla(void); -void ENGINE_load_chil(void); -void ENGINE_load_cswift(void); -void ENGINE_load_nuron(void); -void ENGINE_load_sureware(void); -void ENGINE_load_ubsec(void); -void ENGINE_load_padlock(void); -void ENGINE_load_capi(void); -# ifndef OPENSSL_NO_GMP -void ENGINE_load_gmp(void); -# endif -# ifndef OPENSSL_NO_GOST -void ENGINE_load_gost(void); -# endif -# endif -void ENGINE_load_cryptodev(void); -void ENGINE_load_rdrand(void); -void ENGINE_load_builtin_engines(void); - -/* - * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation - * "registry" handling. - */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); - -/*- Manage registration of ENGINEs per "table". For each type, there are 3 - * functions; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required, so - * ENGINE_cleanup() will reverse any "register" operations. - */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_ECDH(ENGINE *e); -void ENGINE_unregister_ECDH(ENGINE *e); -void ENGINE_register_all_ECDH(void); - -int ENGINE_register_ECDSA(ENGINE *e); -void ENGINE_unregister_ECDSA(ENGINE *e); -void ENGINE_register_all_ECDSA(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_STORE(ENGINE *e); -void ENGINE_unregister_STORE(ENGINE *e); -void ENGINE_register_all_STORE(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); - -/* - * These functions register all support from the above categories. Note, use - * of these functions can result in static linkage of code your application - * may not need. If you only need a subset of functionality, consider using - * more selective initialisation. - */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); - -/* - * Send parametrised control commands to the engine. The possibilities to - * send down an integer, a pointer to data or a function pointer are - * provided. Any of the parameters may or may not be NULL, depending on the - * command number. In actuality, this function only requires a structural - * (rather than functional) reference to an engine, but many control commands - * may require the engine be functional. The caller should be aware of trying - * commands that require an operational ENGINE, and only use functional - * references in such situations. - */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); - -/* - * This function tests if an ENGINE-specific command is usable as a - * "setting". Eg. in an application's config file that gets processed through - * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to - * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). - */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); - -/* - * This function works like ENGINE_ctrl() with the exception of taking a - * command name instead of a command number, and can handle optional - * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation - * on how to use the cmd_name and cmd_optional. - */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); - -/* - * This function passes a command-name and argument to an ENGINE. The - * cmd_name is converted to a command number and the control command is - * called using 'arg' as an argument (unless the ENGINE doesn't support such - * a command, in which case no control command is called). The command is - * checked for input flags, and if necessary the argument will be converted - * to a numeric value. If cmd_optional is non-zero, then if the ENGINE - * doesn't support the given cmd_name the return value will be success - * anyway. This function is intended for applications to use so that users - * (or config files) can supply engine-specific config data to the ENGINE at - * run-time to control behaviour of specific engines. As such, it shouldn't - * be used for calling ENGINE_ctrl() functions that return data, deal with - * binary data, or that are otherwise supposed to be used directly through - * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() - * operation in this function will be lost - the return value is interpreted - * as failure if the return value is zero, success otherwise, and this - * function returns a boolean value as a result. In other words, vendors of - * 'ENGINE'-enabled devices should write ENGINE implementations with - * parameterisations that work in this scheme, so that compliant ENGINE-based - * applications can work consistently with the same configuration for the - * same ENGINE-enabled devices, across applications. - */ -int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, - int cmd_optional); - -/* - * These functions are useful for manufacturing new ENGINE structures. They - * don't address reference counting at all - one uses them to populate an - * ENGINE structure with personalised implementations of things prior to - * using it directly or adding it to the builtin ENGINE list in OpenSSL. - * These are also here so that the ENGINE structure doesn't have to be - * exposed and break binary compatibility! - */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *ecdh_meth); -int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *store_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); -int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); -int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); -int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); -int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); -int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); -int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); -int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); -int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); -int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); -/* These functions allow control over any per-structure ENGINE data. */ -int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); - -/* - * This function cleans up anything that needs it. Eg. the ENGINE_add() - * function automatically ensures the list cleanup function is registered to - * be called from ENGINE_cleanup(). Similarly, all ENGINE_register_*** - * functions ensure ENGINE_cleanup() will clean up after them. - */ -void ENGINE_cleanup(void); - -/* - * These return values from within the ENGINE structure. These can be useful - * with functional references as well as structural references - it depends - * which you obtained. Using the result for functional purposes if you only - * obtained a structural reference may be problematic! - */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e); -const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); -const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); -ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); -ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); -ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); -ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); -ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); -const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); -const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); -const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, - const char *str, - int len); -const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); - -/* - * FUNCTIONAL functions. These functions deal with ENGINE structures that - * have (or will) be initialised for use. Broadly speaking, the structural - * functions are useful for iterating the list of available engine types, - * creating new engine types, and other "list" operations. These functions - * actually deal with ENGINEs that are to be used. As such these functions - * can fail (if applicable) when particular engines are unavailable - eg. if - * a hardware accelerator is not attached or not functioning correctly. Each - * ENGINE has 2 reference counts; structural and functional. Every time a - * functional reference is obtained or released, a corresponding structural - * reference is automatically obtained or released too. - */ - -/* - * Initialise a engine type for use (or up its reference count if it's - * already in use). This will fail if the engine is not currently operational - * and cannot initialise. - */ -int ENGINE_init(ENGINE *e); -/* - * Free a functional reference to a engine type. This does not require a - * corresponding call to ENGINE_free as it also releases a structural - * reference. - */ -int ENGINE_finish(ENGINE *e); - -/* - * The following functions handle keys that are stored in some secondary - * location, handled by the engine. The storage may be on a card or - * whatever. - */ -EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, - UI_METHOD *ui_method, void *callback_data); - -/* - * This returns a pointer for the current ENGINE structure that is (by - * default) performing any RSA operations. The value returned is an - * incremented reference, so it should be free'd (ENGINE_finish) before it is - * discarded. - */ -ENGINE *ENGINE_get_default_RSA(void); -/* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_ECDH(void); -ENGINE *ENGINE_get_default_ECDSA(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); -/* - * These functions can be used to get a functional reference to perform - * ciphering or digesting corresponding to "nid". - */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); - -/* - * This sets a new default ENGINE structure for performing RSA operations. If - * the result is non-zero (success) then the ENGINE structure will have had - * its reference count up'd so the caller should still free their own - * reference 'e'. - */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); -/* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_ECDH(ENGINE *e); -int ENGINE_set_default_ECDSA(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); - -/* - * The combination "set" - the flags are bitwise "OR"d from the - * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" - * function, this function can result in unnecessary static linkage. If your - * application requires only specific functionality, consider using more - * selective functions. - */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); - -/* Deprecated functions ... */ -/* int ENGINE_clear_defaults(void); */ - -/**************************/ -/* DYNAMIC ENGINE SUPPORT */ -/**************************/ - -/* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00020000 -/* - * Binary versions older than this are too old for us (whether we're a loader - * or a loadee) - */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00020000 - -/* - * When compiling an ENGINE entirely as an external shared library, loadable - * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' - * structure type provides the calling application's (or library's) error - * functionality and memory management function pointers to the loaded - * library. These should be used/set in the loaded library code so that the - * loading application's 'state' will be used/changed in all operations. The - * 'static_state' pointer allows the loaded library to know if it shares the - * same static data as the calling application (or library), and thus whether - * these callbacks need to be set or not. - */ -typedef void *(*dyn_MEM_malloc_cb) (size_t); -typedef void *(*dyn_MEM_realloc_cb) (void *, size_t); -typedef void (*dyn_MEM_free_cb) (void *); -typedef struct st_dynamic_MEM_fns { - dyn_MEM_malloc_cb malloc_cb; - dyn_MEM_realloc_cb realloc_cb; - dyn_MEM_free_cb free_cb; -} dynamic_MEM_fns; -/* - * FIXME: Perhaps the memory and locking code (crypto.h) should declare and - * use these types so we (and any other dependant code) can simplify a bit?? - */ -typedef void (*dyn_lock_locking_cb) (int, int, const char *, int); -typedef int (*dyn_lock_add_lock_cb) (int *, int, int, const char *, int); -typedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb) (const char *, - int); -typedef void (*dyn_dynlock_lock_cb) (int, struct CRYPTO_dynlock_value *, - const char *, int); -typedef void (*dyn_dynlock_destroy_cb) (struct CRYPTO_dynlock_value *, - const char *, int); -typedef struct st_dynamic_LOCK_fns { - dyn_lock_locking_cb lock_locking_cb; - dyn_lock_add_lock_cb lock_add_lock_cb; - dyn_dynlock_create_cb dynlock_create_cb; - dyn_dynlock_lock_cb dynlock_lock_cb; - dyn_dynlock_destroy_cb dynlock_destroy_cb; -} dynamic_LOCK_fns; -/* The top-level structure */ -typedef struct st_dynamic_fns { - void *static_state; - const ERR_FNS *err_fns; - const CRYPTO_EX_DATA_IMPL *ex_data_fns; - dynamic_MEM_fns mem_fns; - dynamic_LOCK_fns lock_fns; -} dynamic_fns; - -/* - * The version checking function should be of this prototype. NB: The - * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading - * code. If this function returns zero, it indicates a (potential) version - * incompatibility and the loaded library doesn't believe it can proceed. - * Otherwise, the returned value is the (latest) version supported by the - * loading library. The loader may still decide that the loaded code's - * version is unsatisfactory and could veto the load. The function is - * expected to be implemented with the symbol name "v_check", and a default - * implementation can be fully instantiated with - * IMPLEMENT_DYNAMIC_CHECK_FN(). - */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ - if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ - return 0; } - -/* - * This function is passed the ENGINE structure to initialise with its own - * function and command settings. It should not adjust the structural or - * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So - * implementations should do their own internal cleanup in failure - * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, - * represents the ENGINE id that the loader is looking for. If this is NULL, - * the shared library can choose to return failure or to initialise a - * 'default' ENGINE. If non-NULL, the shared library must initialise only an - * ENGINE matching the passed 'id'. The function is expected to be - * implemented with the symbol name "bind_engine". A standard implementation - * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter - * 'fn' is a callback function that populates the ENGINE structure and - * returns an int value (zero for failure). 'fn' should have prototype; - * [static] int fn(ENGINE *e, const char *id); - */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \ - fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \ - return 0; \ - CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \ - CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \ - CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \ - CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \ - CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \ - if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \ - return 0; \ - if(!ERR_set_implementation(fns->err_fns)) return 0; \ - skip_cbs: \ - if(!fn(e,id)) return 0; \ - return 1; } - -/* - * If the loading application (or library) and the loaded ENGINE library - * share the same static data (eg. they're both dynamically linked to the - * same libcrypto.so) we need a way to avoid trying to set system callbacks - - * this would fail, and for the same reason that it's unnecessary to try. If - * the loaded ENGINE has (or gets from through the loader) its own copy of - * the libcrypto static data, we will need to set the callbacks. The easiest - * way to detect this is to have a function that returns a pointer to some - * static data and let the loading application and loaded ENGINE compare - * their respective values. - */ -void *ENGINE_get_static_state(void); - -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV) -void ENGINE_setup_bsd_cryptodev(void); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ENGINE_strings(void); - -/* Error codes for the ENGINE functions. */ - -/* Function codes. */ -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_FREE_UTIL 108 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOAD_KEY 152 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_LOG_MESSAGE 141 - -/* Reason codes. */ -# define ENGINE_R_ALREADY_LOADED 100 -# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 -# define ENGINE_R_CMD_NOT_EXECUTABLE 134 -# define ENGINE_R_COMMAND_TAKES_INPUT 135 -# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 -# define ENGINE_R_CONFLICTING_ENGINE_ID 103 -# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 -# define ENGINE_R_DH_NOT_IMPLEMENTED 139 -# define ENGINE_R_DSA_NOT_IMPLEMENTED 140 -# define ENGINE_R_DSO_FAILURE 104 -# define ENGINE_R_DSO_NOT_FOUND 132 -# define ENGINE_R_ENGINES_SECTION_ERROR 148 -# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 -# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 -# define ENGINE_R_ENGINE_SECTION_ERROR 149 -# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 -# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 -# define ENGINE_R_FINISH_FAILED 106 -# define ENGINE_R_GET_HANDLE_FAILED 107 -# define ENGINE_R_ID_OR_NAME_MISSING 108 -# define ENGINE_R_INIT_FAILED 109 -# define ENGINE_R_INTERNAL_LIST_ERROR 110 -# define ENGINE_R_INVALID_ARGUMENT 143 -# define ENGINE_R_INVALID_CMD_NAME 137 -# define ENGINE_R_INVALID_CMD_NUMBER 138 -# define ENGINE_R_INVALID_INIT_VALUE 151 -# define ENGINE_R_INVALID_STRING 150 -# define ENGINE_R_NOT_INITIALISED 117 -# define ENGINE_R_NOT_LOADED 112 -# define ENGINE_R_NO_CONTROL_FUNCTION 120 -# define ENGINE_R_NO_INDEX 144 -# define ENGINE_R_NO_LOAD_FUNCTION 125 -# define ENGINE_R_NO_REFERENCE 130 -# define ENGINE_R_NO_SUCH_ENGINE 116 -# define ENGINE_R_NO_UNLOAD_FUNCTION 126 -# define ENGINE_R_PROVIDE_PARAMETERS 113 -# define ENGINE_R_RSA_NOT_IMPLEMENTED 141 -# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 -# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 -# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 -# define ENGINE_R_VERSION_INCOMPATIBILITY 145 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/err.h b/ext/openssl/windows/x86/include/openssl/err.h deleted file mode 100644 index f4236562..00000000 --- a/ext/openssl/windows/x86/include/openssl/err.h +++ /dev/null @@ -1,390 +0,0 @@ -/* crypto/err/err.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_ERR_H -# define HEADER_ERR_H - -# include - -# ifndef OPENSSL_NO_FP_API -# include -# include -# endif - -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# ifndef OPENSSL_NO_LHASH -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) -# endif - -# include - -# define ERR_TXT_MALLOCED 0x01 -# define ERR_TXT_STRING 0x02 - -# define ERR_FLAG_MARK 0x01 - -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { - CRYPTO_THREADID tid; - int err_flags[ERR_NUM_ERRORS]; - unsigned long err_buffer[ERR_NUM_ERRORS]; - char *err_data[ERR_NUM_ERRORS]; - int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; - int err_line[ERR_NUM_ERRORS]; - int top, bottom; -} ERR_STATE; - -/* library */ -# define ERR_LIB_NONE 1 -# define ERR_LIB_SYS 2 -# define ERR_LIB_BN 3 -# define ERR_LIB_RSA 4 -# define ERR_LIB_DH 5 -# define ERR_LIB_EVP 6 -# define ERR_LIB_BUF 7 -# define ERR_LIB_OBJ 8 -# define ERR_LIB_PEM 9 -# define ERR_LIB_DSA 10 -# define ERR_LIB_X509 11 -/* #define ERR_LIB_METH 12 */ -# define ERR_LIB_ASN1 13 -# define ERR_LIB_CONF 14 -# define ERR_LIB_CRYPTO 15 -# define ERR_LIB_EC 16 -# define ERR_LIB_SSL 20 -/* #define ERR_LIB_SSL23 21 */ -/* #define ERR_LIB_SSL2 22 */ -/* #define ERR_LIB_SSL3 23 */ -/* #define ERR_LIB_RSAREF 30 */ -/* #define ERR_LIB_PROXY 31 */ -# define ERR_LIB_BIO 32 -# define ERR_LIB_PKCS7 33 -# define ERR_LIB_X509V3 34 -# define ERR_LIB_PKCS12 35 -# define ERR_LIB_RAND 36 -# define ERR_LIB_DSO 37 -# define ERR_LIB_ENGINE 38 -# define ERR_LIB_OCSP 39 -# define ERR_LIB_UI 40 -# define ERR_LIB_COMP 41 -# define ERR_LIB_ECDSA 42 -# define ERR_LIB_ECDH 43 -# define ERR_LIB_STORE 44 -# define ERR_LIB_FIPS 45 -# define ERR_LIB_CMS 46 -# define ERR_LIB_TS 47 -# define ERR_LIB_HMAC 48 -# define ERR_LIB_JPAKE 49 - -# define ERR_LIB_USER 128 - -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) -# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) -# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) - -/* - * Borland C seems too stupid to be able to shift and do longs in the - * pre-processor :-( - */ -# define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ - ((((unsigned long)f)&0xfffL)*0x1000)| \ - ((((unsigned long)r)&0xfffL))) -# define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) -# define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) -# define ERR_GET_REASON(l) (int)((l)&0xfffL) -# define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) - -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_FFLUSH 18 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_CONF_LIB ERR_LIB_CONF/* 14 */ -# define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO/* 15 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_SSL_LIB ERR_LIB_SSL/* 20 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_PKCS12_LIB ERR_LIB_PKCS12/* 35 */ -# define ERR_R_RAND_LIB ERR_LIB_RAND/* 36 */ -# define ERR_R_DSO_LIB ERR_LIB_DSO/* 37 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_OCSP_LIB ERR_LIB_OCSP/* 39 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_COMP_LIB ERR_LIB_COMP/* 41 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_ECDH_LIB ERR_LIB_ECDH/* 43 */ -# define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */ -# define ERR_R_TS_LIB ERR_LIB_TS/* 45 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_BAD_ASN1_OBJECT_HEADER 59 -# define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 -# define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 -# define ERR_R_ASN1_LENGTH_MISMATCH 62 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) - -/* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries - */ - -typedef struct ERR_string_data_st { - unsigned long error; - const char *string; -} ERR_STRING_DATA; - -void ERR_put_error(int lib, int func, int reason, const char *file, int line); -void ERR_set_error_data(char *data, int flags); - -unsigned long ERR_get_error(void); -unsigned long ERR_get_error_line(const char **file, int *line); -unsigned long ERR_get_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_error(void); -unsigned long ERR_peek_error_line(const char **file, int *line); -unsigned long ERR_peek_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_last_error(void); -unsigned long ERR_peek_last_error_line(const char **file, int *line); -unsigned long ERR_peek_last_error_line_data(const char **file, int *line, - const char **data, int *flags); -void ERR_clear_error(void); -char *ERR_error_string(unsigned long e, char *buf); -void ERR_error_string_n(unsigned long e, char *buf, size_t len); -const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); -const char *ERR_reason_error_string(unsigned long e); -void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_FP_API -void ERR_print_errors_fp(FILE *fp); -# endif -# ifndef OPENSSL_NO_BIO -void ERR_print_errors(BIO *bp); -# endif -void ERR_add_error_data(int num, ...); -void ERR_add_error_vdata(int num, va_list args); -void ERR_load_strings(int lib, ERR_STRING_DATA str[]); -void ERR_unload_strings(int lib, ERR_STRING_DATA str[]); -void ERR_load_ERR_strings(void); -void ERR_load_crypto_strings(void); -void ERR_free_strings(void); - -void ERR_remove_thread_state(const CRYPTO_THREADID *tid); -# ifndef OPENSSL_NO_DEPRECATED -void ERR_remove_state(unsigned long pid); /* if zero we look it up */ -# endif -ERR_STATE *ERR_get_state(void); - -# ifndef OPENSSL_NO_LHASH -LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); -LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); -void ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash); -# endif - -int ERR_get_next_error_library(void); - -int ERR_set_mark(void); -int ERR_pop_to_mark(void); - -/* Already defined in ossl_typ.h */ -/* typedef struct st_ERR_FNS ERR_FNS; */ -/* - * An application can use this function and provide the return value to - * loaded modules that should use the application's ERR state/functionality - */ -const ERR_FNS *ERR_get_implementation(void); -/* - * A loaded module should call this function prior to any ERR operations - * using the application's "ERR_FNS". - */ -int ERR_set_implementation(const ERR_FNS *fns); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/evp.h b/ext/openssl/windows/x86/include/openssl/evp.h deleted file mode 100644 index d258ef87..00000000 --- a/ext/openssl/windows/x86/include/openssl/evp.h +++ /dev/null @@ -1,1536 +0,0 @@ -/* crypto/evp/evp.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H - -# ifdef OPENSSL_ALGORITHM_DEFINES -# include -# else -# define OPENSSL_ALGORITHM_DEFINES -# include -# undef OPENSSL_ALGORITHM_DEFINES -# endif - -# include - -# include - -# ifndef OPENSSL_NO_BIO -# include -# endif - -/*- -#define EVP_RC2_KEY_SIZE 16 -#define EVP_RC4_KEY_SIZE 16 -#define EVP_BLOWFISH_KEY_SIZE 16 -#define EVP_CAST5_KEY_SIZE 16 -#define EVP_RC5_32_12_16_KEY_SIZE 16 -*/ -# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ -# define EVP_MAX_KEY_LENGTH 64 -# define EVP_MAX_IV_LENGTH 16 -# define EVP_MAX_BLOCK_LENGTH 32 - -# define PKCS5_SALT_LEN 8 -/* Default PKCS#5 iteration count */ -# define PKCS5_DEFAULT_ITER 2048 - -# include - -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 - -# define EVP_PKEY_NONE NID_undef -# define EVP_PKEY_RSA NID_rsaEncryption -# define EVP_PKEY_RSA2 NID_rsa -# define EVP_PKEY_DSA NID_dsa -# define EVP_PKEY_DSA1 NID_dsa_2 -# define EVP_PKEY_DSA2 NID_dsaWithSHA -# define EVP_PKEY_DSA3 NID_dsaWithSHA1 -# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 -# define EVP_PKEY_DH NID_dhKeyAgreement -# define EVP_PKEY_DHX NID_dhpublicnumber -# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey -# define EVP_PKEY_HMAC NID_hmac -# define EVP_PKEY_CMAC NID_cmac - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Type needs to be a bit field Sub-type needs to be for variations on the - * method, as in, can it do arbitrary encryption.... - */ -struct evp_pkey_st { - int type; - int save_type; - int references; - const EVP_PKEY_ASN1_METHOD *ameth; - ENGINE *engine; - union { - char *ptr; -# ifndef OPENSSL_NO_RSA - struct rsa_st *rsa; /* RSA */ -# endif -# ifndef OPENSSL_NO_DSA - struct dsa_st *dsa; /* DSA */ -# endif -# ifndef OPENSSL_NO_DH - struct dh_st *dh; /* DH */ -# endif -# ifndef OPENSSL_NO_EC - struct ec_key_st *ec; /* ECC */ -# endif - } pkey; - int save_parameters; - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ -} /* EVP_PKEY */ ; - -# define EVP_PKEY_MO_SIGN 0x0001 -# define EVP_PKEY_MO_VERIFY 0x0002 -# define EVP_PKEY_MO_ENCRYPT 0x0004 -# define EVP_PKEY_MO_DECRYPT 0x0008 - -# ifndef EVP_MD -struct env_md_st { - int type; - int pkey_type; - int md_size; - unsigned long flags; - int (*init) (EVP_MD_CTX *ctx); - int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); - int (*final) (EVP_MD_CTX *ctx, unsigned char *md); - int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); - int (*cleanup) (EVP_MD_CTX *ctx); - /* FIXME: prototype these some day */ - int (*sign) (int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, void *key); - int (*verify) (int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, - void *key); - int required_pkey_type[5]; /* EVP_PKEY_xxx */ - int block_size; - int ctx_size; /* how big does the ctx->md_data need to be */ - /* control function */ - int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); -} /* EVP_MD */ ; - -typedef int evp_sign_method(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigret, - unsigned int *siglen, void *key); -typedef int evp_verify_method(int type, const unsigned char *m, - unsigned int m_length, - const unsigned char *sigbuf, - unsigned int siglen, void *key); - -/* digest can only handle a single block */ -# define EVP_MD_FLAG_ONESHOT 0x0001 - -/* - * digest is a "clone" digest used - * which is a copy of an existing - * one for a specific public key type. - * EVP_dss1() etc - */ -# define EVP_MD_FLAG_PKEY_DIGEST 0x0002 - -/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ - -# define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE 0x0004 - -/* DigestAlgorithmIdentifier flags... */ - -# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 - -/* NULL or absent parameter accepted. Use NULL */ - -# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 - -/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ - -# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 - -/* Custom handling via ctrl */ - -# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 - -/* Note if suitable for use in FIPS mode */ -# define EVP_MD_FLAG_FIPS 0x0400 - -/* Digest ctrls */ - -# define EVP_MD_CTRL_DIGALGID 0x1 -# define EVP_MD_CTRL_MICALG 0x2 - -/* Minimum Algorithm specific ctrl value */ - -# define EVP_MD_CTRL_ALG_CTRL 0x1000 - -# define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ - (evp_verify_method *)DSA_verify, \ - {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ - EVP_PKEY_DSA4,0} -# else -# define EVP_PKEY_DSA_method EVP_PKEY_NULL_method -# endif - -# ifndef OPENSSL_NO_ECDSA -# define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \ - (evp_verify_method *)ECDSA_verify, \ - {EVP_PKEY_EC,0,0,0} -# else -# define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method -# endif - -# ifndef OPENSSL_NO_RSA -# define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ - (evp_verify_method *)RSA_verify, \ - {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} -# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ - (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ - (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ - {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} -# else -# define EVP_PKEY_RSA_method EVP_PKEY_NULL_method -# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method -# endif - -# endif /* !EVP_MD */ - -struct env_md_ctx_st { - const EVP_MD *digest; - ENGINE *engine; /* functional reference if 'digest' is - * ENGINE-provided */ - unsigned long flags; - void *md_data; - /* Public key context for sign/verify */ - EVP_PKEY_CTX *pctx; - /* Update function: usually copied from EVP_MD */ - int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); -} /* EVP_MD_CTX */ ; - -/* values for EVP_MD_CTX flags */ - -# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be - * called once only */ -# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been - * cleaned */ -# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data - * in EVP_MD_CTX_cleanup */ -/* - * FIPS and pad options are ignored in 1.0.0, definitions are here so we - * don't accidentally reuse the values for other purposes. - */ - -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ - -/* - * The following PAD options are also currently ignored in 1.0.0, digest - * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() - * instead. - */ -# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ -# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ -# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ -# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ - -# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ - -struct evp_cipher_st { - int nid; - int block_size; - /* Default value for variable length ciphers */ - int key_len; - int iv_len; - /* Various flags */ - unsigned long flags; - /* init key */ - int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, - const unsigned char *iv, int enc); - /* encrypt/decrypt data */ - int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, - const unsigned char *in, size_t inl); - /* cleanup ctx */ - int (*cleanup) (EVP_CIPHER_CTX *); - /* how big ctx->cipher_data needs to be */ - int ctx_size; - /* Populate a ASN1_TYPE with parameters */ - int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Get parameters from a ASN1_TYPE */ - int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Miscellaneous operations */ - int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); - /* Application data */ - void *app_data; -} /* EVP_CIPHER */ ; - -/* Values for cipher flags */ - -/* Modes for ciphers */ - -# define EVP_CIPH_STREAM_CIPHER 0x0 -# define EVP_CIPH_ECB_MODE 0x1 -# define EVP_CIPH_CBC_MODE 0x2 -# define EVP_CIPH_CFB_MODE 0x3 -# define EVP_CIPH_OFB_MODE 0x4 -# define EVP_CIPH_CTR_MODE 0x5 -# define EVP_CIPH_GCM_MODE 0x6 -# define EVP_CIPH_CCM_MODE 0x7 -# define EVP_CIPH_XTS_MODE 0x10001 -# define EVP_CIPH_WRAP_MODE 0x10002 -# define EVP_CIPH_MODE 0xF0007 -/* Set if variable length cipher */ -# define EVP_CIPH_VARIABLE_LENGTH 0x8 -/* Set if the iv handling should be done by the cipher itself */ -# define EVP_CIPH_CUSTOM_IV 0x10 -/* Set if the cipher's init() function should be called if key is NULL */ -# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 -/* Call ctrl() to init cipher parameters */ -# define EVP_CIPH_CTRL_INIT 0x40 -/* Don't use standard key length function */ -# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 -/* Don't use standard block padding */ -# define EVP_CIPH_NO_PADDING 0x100 -/* cipher handles random key generation */ -# define EVP_CIPH_RAND_KEY 0x200 -/* cipher has its own additional copying logic */ -# define EVP_CIPH_CUSTOM_COPY 0x400 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 -/* Buffer length in bits not bytes: CFB1 mode only */ -# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 -/* - * Cipher handles any and all padding logic as well as finalisation. - */ -# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 -# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 -# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 - -/* - * Cipher context flag to indicate we can handle wrap mode: if allowed in - * older applications it could overflow buffers. - */ - -# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 - -/* ctrl() values */ - -# define EVP_CTRL_INIT 0x0 -# define EVP_CTRL_SET_KEY_LENGTH 0x1 -# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 -# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 -# define EVP_CTRL_GET_RC5_ROUNDS 0x4 -# define EVP_CTRL_SET_RC5_ROUNDS 0x5 -# define EVP_CTRL_RAND_KEY 0x6 -# define EVP_CTRL_PBE_PRF_NID 0x7 -# define EVP_CTRL_COPY 0x8 -# define EVP_CTRL_GCM_SET_IVLEN 0x9 -# define EVP_CTRL_GCM_GET_TAG 0x10 -# define EVP_CTRL_GCM_SET_TAG 0x11 -# define EVP_CTRL_GCM_SET_IV_FIXED 0x12 -# define EVP_CTRL_GCM_IV_GEN 0x13 -# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_GCM_SET_IVLEN -# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_GCM_GET_TAG -# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_GCM_SET_TAG -# define EVP_CTRL_CCM_SET_L 0x14 -# define EVP_CTRL_CCM_SET_MSGLEN 0x15 -/* - * AEAD cipher deduces payload length and returns number of bytes required to - * store MAC and eventual padding. Subsequent call to EVP_Cipher even - * appends/verifies MAC. - */ -# define EVP_CTRL_AEAD_TLS1_AAD 0x16 -/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ -# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 -/* Set the GCM invocation field, decrypt only */ -# define EVP_CTRL_GCM_SET_IV_INV 0x18 - -# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 -# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a -# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b -# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c - -/* RFC 5246 defines additional data to be 13 bytes in length */ -# define EVP_AEAD_TLS1_AAD_LEN 13 - -typedef struct { - unsigned char *out; - const unsigned char *inp; - size_t len; - unsigned int interleave; -} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; - -/* GCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_GCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 -/* Length of tag for TLS */ -# define EVP_GCM_TLS_TAG_LEN 16 - -typedef struct evp_cipher_info_st { - const EVP_CIPHER *cipher; - unsigned char iv[EVP_MAX_IV_LENGTH]; -} EVP_CIPHER_INFO; - -struct evp_cipher_ctx_st { - const EVP_CIPHER *cipher; - ENGINE *engine; /* functional reference if 'cipher' is - * ENGINE-provided */ - int encrypt; /* encrypt or decrypt */ - int buf_len; /* number we have left */ - unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ - unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ - unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ - int num; /* used by cfb/ofb/ctr mode */ - void *app_data; /* application stuff */ - int key_len; /* May change for variable length cipher */ - unsigned long flags; /* Various flags */ - void *cipher_data; /* per EVP data */ - int final_used; - int block_mask; - unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ -} /* EVP_CIPHER_CTX */ ; - -typedef struct evp_Encode_Ctx_st { - /* number saved in a partial encode/decode */ - int num; - /* - * The length is either the output line length (in input bytes) or the - * shortest input line length that is ok. Once decoding begins, the - * length is adjusted up each time a longer line is decoded - */ - int length; - /* data to encode */ - unsigned char enc_data[80]; - /* number read on current line */ - int line_num; - int expect_nl; -} EVP_ENCODE_CTX; - -/* Password based encryption function */ -typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *cipher, const EVP_MD *md, - int en_de); - -# ifndef OPENSSL_NO_RSA -# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) -# endif - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) -# endif - -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) -# endif - -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) -# endif - -/* Add some extra combinations */ -# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) -# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) -# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) -# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) - -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); - -const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) - -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) - -const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); -void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); -# define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) - -# define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) -# define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) - -# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_SignInit(a,b) EVP_DigestInit(a,b) -# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) -# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) -# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) - -# ifdef CONST_STRICT -void BIO_set_md(BIO *, const EVP_MD *md); -# else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) -# endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) -# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) - -int EVP_Cipher(EVP_CIPHER_CTX *c, - unsigned char *out, const unsigned char *in, unsigned int inl); - -# define EVP_add_cipher_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_add_digest_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_delete_cipher_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); -# define EVP_delete_digest_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); - -void EVP_MD_CTX_init(EVP_MD_CTX *ctx); -int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx); -EVP_MD_CTX *EVP_MD_CTX_create(void); -void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); -int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); -void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); -void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); -int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); -int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); -int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); -int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); -int EVP_Digest(const void *data, size_t count, - unsigned char *md, unsigned int *size, const EVP_MD *type, - ENGINE *impl); - -int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); -int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); -int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); - -int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); -int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, - const char *prompt, int verify); -void EVP_set_pw_prompt(const char *prompt); -char *EVP_get_pw_prompt(void); - -int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, - const unsigned char *salt, const unsigned char *data, - int datal, int count, unsigned char *key, - unsigned char *iv); - -void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); -void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); -int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); - -int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - ENGINE *impl, const unsigned char *key, - const unsigned char *iv); -int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - ENGINE *impl, const unsigned char *key, - const unsigned char *iv); -int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); -int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); - -int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv, - int enc); -int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - ENGINE *impl, const unsigned char *key, - const unsigned char *iv, int enc); -int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); -int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); - -int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, - EVP_PKEY *pkey); - -int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, - unsigned int siglen, EVP_PKEY *pkey); - -int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestSignFinal(EVP_MD_CTX *ctx, - unsigned char *sigret, size_t *siglen); - -int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, - const unsigned char *sig, size_t siglen); - -int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - const unsigned char *ek, int ekl, const unsigned char *iv, - EVP_PKEY *priv); -int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - unsigned char **ek, int *ekl, unsigned char *iv, - EVP_PKEY **pubk, int npubk); -int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); -void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); -int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned - char *out, int *outl); -int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); -int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a); -int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); -int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); -int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); -int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); - -# ifndef OPENSSL_NO_BIO -BIO_METHOD *BIO_f_md(void); -BIO_METHOD *BIO_f_base64(void); -BIO_METHOD *BIO_f_cipher(void); -BIO_METHOD *BIO_f_reliable(void); -void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, - const unsigned char *i, int enc); -# endif - -const EVP_MD *EVP_md_null(void); -# ifndef OPENSSL_NO_MD2 -const EVP_MD *EVP_md2(void); -# endif -# ifndef OPENSSL_NO_MD4 -const EVP_MD *EVP_md4(void); -# endif -# ifndef OPENSSL_NO_MD5 -const EVP_MD *EVP_md5(void); -# endif -# ifndef OPENSSL_NO_SHA -const EVP_MD *EVP_sha(void); -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_dss(void); -const EVP_MD *EVP_dss1(void); -const EVP_MD *EVP_ecdsa(void); -# endif -# ifndef OPENSSL_NO_SHA256 -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -# endif -# ifndef OPENSSL_NO_SHA512 -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); -# endif -# ifndef OPENSSL_NO_MDC2 -const EVP_MD *EVP_mdc2(void); -# endif -# ifndef OPENSSL_NO_RIPEMD -const EVP_MD *EVP_ripemd160(void); -# endif -# ifndef OPENSSL_NO_WHIRLPOOL -const EVP_MD *EVP_whirlpool(void); -# endif -const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ -# ifndef OPENSSL_NO_DES -const EVP_CIPHER *EVP_des_ecb(void); -const EVP_CIPHER *EVP_des_ede(void); -const EVP_CIPHER *EVP_des_ede3(void); -const EVP_CIPHER *EVP_des_ede_ecb(void); -const EVP_CIPHER *EVP_des_ede3_ecb(void); -const EVP_CIPHER *EVP_des_cfb64(void); -# define EVP_des_cfb EVP_des_cfb64 -const EVP_CIPHER *EVP_des_cfb1(void); -const EVP_CIPHER *EVP_des_cfb8(void); -const EVP_CIPHER *EVP_des_ede_cfb64(void); -# define EVP_des_ede_cfb EVP_des_ede_cfb64 -# if 0 -const EVP_CIPHER *EVP_des_ede_cfb1(void); -const EVP_CIPHER *EVP_des_ede_cfb8(void); -# endif -const EVP_CIPHER *EVP_des_ede3_cfb64(void); -# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb1(void); -const EVP_CIPHER *EVP_des_ede3_cfb8(void); -const EVP_CIPHER *EVP_des_ofb(void); -const EVP_CIPHER *EVP_des_ede_ofb(void); -const EVP_CIPHER *EVP_des_ede3_ofb(void); -const EVP_CIPHER *EVP_des_cbc(void); -const EVP_CIPHER *EVP_des_ede_cbc(void); -const EVP_CIPHER *EVP_des_ede3_cbc(void); -const EVP_CIPHER *EVP_desx_cbc(void); -const EVP_CIPHER *EVP_des_ede3_wrap(void); -/* - * This should now be supported through the dev_crypto ENGINE. But also, why - * are rc4 and md5 declarations made here inside a "NO_DES" precompiler - * branch? - */ -# if 0 -# ifdef OPENSSL_OPENBSD_DEV_CRYPTO -const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void); -const EVP_CIPHER *EVP_dev_crypto_rc4(void); -const EVP_MD *EVP_dev_crypto_md5(void); -# endif -# endif -# endif -# ifndef OPENSSL_NO_RC4 -const EVP_CIPHER *EVP_rc4(void); -const EVP_CIPHER *EVP_rc4_40(void); -# ifndef OPENSSL_NO_MD5 -const EVP_CIPHER *EVP_rc4_hmac_md5(void); -# endif -# endif -# ifndef OPENSSL_NO_IDEA -const EVP_CIPHER *EVP_idea_ecb(void); -const EVP_CIPHER *EVP_idea_cfb64(void); -# define EVP_idea_cfb EVP_idea_cfb64 -const EVP_CIPHER *EVP_idea_ofb(void); -const EVP_CIPHER *EVP_idea_cbc(void); -# endif -# ifndef OPENSSL_NO_RC2 -const EVP_CIPHER *EVP_rc2_ecb(void); -const EVP_CIPHER *EVP_rc2_cbc(void); -const EVP_CIPHER *EVP_rc2_40_cbc(void); -const EVP_CIPHER *EVP_rc2_64_cbc(void); -const EVP_CIPHER *EVP_rc2_cfb64(void); -# define EVP_rc2_cfb EVP_rc2_cfb64 -const EVP_CIPHER *EVP_rc2_ofb(void); -# endif -# ifndef OPENSSL_NO_BF -const EVP_CIPHER *EVP_bf_ecb(void); -const EVP_CIPHER *EVP_bf_cbc(void); -const EVP_CIPHER *EVP_bf_cfb64(void); -# define EVP_bf_cfb EVP_bf_cfb64 -const EVP_CIPHER *EVP_bf_ofb(void); -# endif -# ifndef OPENSSL_NO_CAST -const EVP_CIPHER *EVP_cast5_ecb(void); -const EVP_CIPHER *EVP_cast5_cbc(void); -const EVP_CIPHER *EVP_cast5_cfb64(void); -# define EVP_cast5_cfb EVP_cast5_cfb64 -const EVP_CIPHER *EVP_cast5_ofb(void); -# endif -# ifndef OPENSSL_NO_RC5 -const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); -const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); -const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); -# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 -const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); -# endif -# ifndef OPENSSL_NO_AES -const EVP_CIPHER *EVP_aes_128_ecb(void); -const EVP_CIPHER *EVP_aes_128_cbc(void); -const EVP_CIPHER *EVP_aes_128_cfb1(void); -const EVP_CIPHER *EVP_aes_128_cfb8(void); -const EVP_CIPHER *EVP_aes_128_cfb128(void); -# define EVP_aes_128_cfb EVP_aes_128_cfb128 -const EVP_CIPHER *EVP_aes_128_ofb(void); -const EVP_CIPHER *EVP_aes_128_ctr(void); -const EVP_CIPHER *EVP_aes_128_ccm(void); -const EVP_CIPHER *EVP_aes_128_gcm(void); -const EVP_CIPHER *EVP_aes_128_xts(void); -const EVP_CIPHER *EVP_aes_128_wrap(void); -const EVP_CIPHER *EVP_aes_192_ecb(void); -const EVP_CIPHER *EVP_aes_192_cbc(void); -const EVP_CIPHER *EVP_aes_192_cfb1(void); -const EVP_CIPHER *EVP_aes_192_cfb8(void); -const EVP_CIPHER *EVP_aes_192_cfb128(void); -# define EVP_aes_192_cfb EVP_aes_192_cfb128 -const EVP_CIPHER *EVP_aes_192_ofb(void); -const EVP_CIPHER *EVP_aes_192_ctr(void); -const EVP_CIPHER *EVP_aes_192_ccm(void); -const EVP_CIPHER *EVP_aes_192_gcm(void); -const EVP_CIPHER *EVP_aes_192_wrap(void); -const EVP_CIPHER *EVP_aes_256_ecb(void); -const EVP_CIPHER *EVP_aes_256_cbc(void); -const EVP_CIPHER *EVP_aes_256_cfb1(void); -const EVP_CIPHER *EVP_aes_256_cfb8(void); -const EVP_CIPHER *EVP_aes_256_cfb128(void); -# define EVP_aes_256_cfb EVP_aes_256_cfb128 -const EVP_CIPHER *EVP_aes_256_ofb(void); -const EVP_CIPHER *EVP_aes_256_ctr(void); -const EVP_CIPHER *EVP_aes_256_ccm(void); -const EVP_CIPHER *EVP_aes_256_gcm(void); -const EVP_CIPHER *EVP_aes_256_xts(void); -const EVP_CIPHER *EVP_aes_256_wrap(void); -# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); -# endif -# ifndef OPENSSL_NO_SHA256 -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); -# endif -# endif -# ifndef OPENSSL_NO_CAMELLIA -const EVP_CIPHER *EVP_camellia_128_ecb(void); -const EVP_CIPHER *EVP_camellia_128_cbc(void); -const EVP_CIPHER *EVP_camellia_128_cfb1(void); -const EVP_CIPHER *EVP_camellia_128_cfb8(void); -const EVP_CIPHER *EVP_camellia_128_cfb128(void); -# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 -const EVP_CIPHER *EVP_camellia_128_ofb(void); -const EVP_CIPHER *EVP_camellia_192_ecb(void); -const EVP_CIPHER *EVP_camellia_192_cbc(void); -const EVP_CIPHER *EVP_camellia_192_cfb1(void); -const EVP_CIPHER *EVP_camellia_192_cfb8(void); -const EVP_CIPHER *EVP_camellia_192_cfb128(void); -# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 -const EVP_CIPHER *EVP_camellia_192_ofb(void); -const EVP_CIPHER *EVP_camellia_256_ecb(void); -const EVP_CIPHER *EVP_camellia_256_cbc(void); -const EVP_CIPHER *EVP_camellia_256_cfb1(void); -const EVP_CIPHER *EVP_camellia_256_cfb8(void); -const EVP_CIPHER *EVP_camellia_256_cfb128(void); -# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 -const EVP_CIPHER *EVP_camellia_256_ofb(void); -# endif - -# ifndef OPENSSL_NO_SEED -const EVP_CIPHER *EVP_seed_ecb(void); -const EVP_CIPHER *EVP_seed_cbc(void); -const EVP_CIPHER *EVP_seed_cfb128(void); -# define EVP_seed_cfb EVP_seed_cfb128 -const EVP_CIPHER *EVP_seed_ofb(void); -# endif - -void OPENSSL_add_all_algorithms_noconf(void); -void OPENSSL_add_all_algorithms_conf(void); - -# ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() \ - OPENSSL_add_all_algorithms_conf() -# else -# define OpenSSL_add_all_algorithms() \ - OPENSSL_add_all_algorithms_noconf() -# endif - -void OpenSSL_add_all_ciphers(void); -void OpenSSL_add_all_digests(void); -# define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms() -# define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers() -# define SSLeay_add_all_digests() OpenSSL_add_all_digests() - -int EVP_add_cipher(const EVP_CIPHER *cipher); -int EVP_add_digest(const EVP_MD *digest); - -const EVP_CIPHER *EVP_get_cipherbyname(const char *name); -const EVP_MD *EVP_get_digestbyname(const char *name); -void EVP_cleanup(void); - -void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_CIPHER_do_all_sorted(void (*fn) - (const EVP_CIPHER *ciph, const char *from, - const char *to, void *x), void *arg); - -void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_MD_do_all_sorted(void (*fn) - (const EVP_MD *ciph, const char *from, - const char *to, void *x), void *arg); - -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); -int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(EVP_PKEY *pkey); -int EVP_PKEY_size(EVP_PKEY *pkey); -int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); -int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); -void *EVP_PKEY_get0(EVP_PKEY *pkey); - -# ifndef OPENSSL_NO_RSA -struct rsa_st; -int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA -struct dsa_st; -int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH -struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC -struct ec_key_st; -int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif - -EVP_PKEY *EVP_PKEY_new(void); -void EVP_PKEY_free(EVP_PKEY *pkey); - -EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); - -EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); - -int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); -int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); -int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); - -int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); - -int EVP_CIPHER_type(const EVP_CIPHER *ctx); - -/* calls methods */ -int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* These are used by EVP_CIPHER methods */ -int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* PKCS5 password based encryption */ -int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); -int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - int keylen, unsigned char *out); -int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - const EVP_MD *digest, int keylen, unsigned char *out); -int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); - -void PKCS5_PBE_add(void); - -int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, - ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); - -/* PBE type */ - -/* Can appear as the outermost AlgorithmIdentifier */ -# define EVP_PBE_TYPE_OUTER 0x0 -/* Is an PRF type OID */ -# define EVP_PBE_TYPE_PRF 0x1 - -int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, - int md_nid, EVP_PBE_KEYGEN *keygen); -int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, - EVP_PBE_KEYGEN *keygen); -int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, - EVP_PBE_KEYGEN **pkeygen); -void EVP_PBE_cleanup(void); - -# define ASN1_PKEY_ALIAS 0x1 -# define ASN1_PKEY_DYNAMIC 0x2 -# define ASN1_PKEY_SIGPARAM_NULL 0x4 - -# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 -# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 -# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 -# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 -# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 -# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 - -int EVP_PKEY_asn1_get_count(void); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, - const char *str, int len); -int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); -int EVP_PKEY_asn1_add_alias(int to, int from); -int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, - int *ppkey_flags, const char **pinfo, - const char **ppem_str, - const EVP_PKEY_ASN1_METHOD *ameth); - -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(EVP_PKEY *pkey); -EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, - const char *pem_str, - const char *info); -void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, - const EVP_PKEY_ASN1_METHOD *src); -void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); -void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, - int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), - int (*pub_encode) (X509_PUBKEY *pub, - const EVP_PKEY *pk), - int (*pub_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*pub_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx), - int (*pkey_size) (const EVP_PKEY *pk), - int (*pkey_bits) (const EVP_PKEY *pk)); -void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, - int (*priv_decode) (EVP_PKEY *pk, - PKCS8_PRIV_KEY_INFO - *p8inf), - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, - const EVP_PKEY *pk), - int (*priv_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); -void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, - int derlen), - int (*param_encode) (const EVP_PKEY *pkey, - unsigned char **pder), - int (*param_missing) (const EVP_PKEY *pk), - int (*param_copy) (EVP_PKEY *to, - const EVP_PKEY *from), - int (*param_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*param_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); - -void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, - void (*pkey_free) (EVP_PKEY *pkey)); -void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, - long arg1, void *arg2)); -void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, - int (*item_verify) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, - EVP_PKEY *pkey), - int (*item_sign) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *alg1, - X509_ALGOR *alg2, - ASN1_BIT_STRING *sig)); - -# define EVP_PKEY_OP_UNDEFINED 0 -# define EVP_PKEY_OP_PARAMGEN (1<<1) -# define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) - -# define EVP_PKEY_OP_TYPE_SIG \ - (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ - | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) - -# define EVP_PKEY_OP_TYPE_CRYPT \ - (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) - -# define EVP_PKEY_OP_TYPE_NOGEN \ - (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) - -# define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) - -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTRL_MD 1 -# define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - -# define EVP_PKEY_CTRL_SET_MAC_KEY 6 - -# define EVP_PKEY_CTRL_DIGESTINIT 7 - -/* Used by GOST key encryption in TLS */ -# define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - -# define EVP_PKEY_CTRL_CIPHER 12 - -# define EVP_PKEY_CTRL_GET_MD 13 - -# define EVP_PKEY_ALG_CTRL 0x1000 - -# define EVP_PKEY_FLAG_AUTOARGLEN 2 -/* - * Method handles all operations: don't assume any digest related defaults. - */ -# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 - -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); - -EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, int p1, void *p2); -int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, - const char *value); - -int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); - -EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, - const unsigned char *key, int keylen); - -void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); -EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); - -EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); - -void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, - const unsigned char *sig, size_t siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, - unsigned char *rout, size_t *routlen, - const unsigned char *sig, size_t siglen); -int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); -int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); - -int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); -int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); - -typedef int EVP_PKEY_gen_cb (EVP_PKEY_CTX *ctx); - -int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); -int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); - -void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); -EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_add_alg_module(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -void ERR_load_EVP_strings(void); - -/* Error codes for the EVP functions. */ - -/* Function codes. */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_CIPHER 176 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_XTS 172 -# define EVP_F_AES_XTS_CIPHER 175 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CMAC_INIT 173 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_D2I_PKEY 100 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_DSAPKEY2PKCS8 134 -# define EVP_F_DSA_PKEY2PKCS8 135 -# define EVP_F_ECDSA_PKEY2PKCS8 129 -# define EVP_F_ECKEY_PKEY2PKCS8 132 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKCS82PKEY_BROKEN 136 -# define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET1_DH 119 -# define EVP_F_EVP_PKEY_GET1_DSA 120 -# define EVP_F_EVP_PKEY_GET1_ECDSA 130 -# define EVP_F_EVP_PKEY_GET1_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET1_RSA 121 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_RIJNDAEL 126 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_FIPS_CIPHERINIT 166 -# define EVP_F_FIPS_CIPHER_CTX_COPY 170 -# define EVP_F_FIPS_CIPHER_CTX_CTRL 167 -# define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH 171 -# define EVP_F_FIPS_DIGESTINIT 168 -# define EVP_F_FIPS_MD_CTX_COPY 169 -# define EVP_F_HMAC_INIT_EX 174 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS8_SET_BROKEN 112 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 - -/* Reason codes. */ -# define EVP_R_AES_IV_SETUP_FAILED 162 -# define EVP_R_AES_KEY_SETUP_FAILED 143 -# define EVP_R_ASN1_LIB 140 -# define EVP_R_BAD_BLOCK_LENGTH 136 -# define EVP_R_BAD_DECRYPT 100 -# define EVP_R_BAD_KEY_LENGTH 137 -# define EVP_R_BN_DECODE_ERROR 112 -# define EVP_R_BN_PUBKEY_ERROR 113 -# define EVP_R_BUFFER_TOO_SMALL 155 -# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 -# define EVP_R_CIPHER_PARAMETER_ERROR 122 -# define EVP_R_COMMAND_NOT_SUPPORTED 147 -# define EVP_R_CTRL_NOT_IMPLEMENTED 132 -# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 -# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 -# define EVP_R_DECODE_ERROR 114 -# define EVP_R_DIFFERENT_KEY_TYPES 101 -# define EVP_R_DIFFERENT_PARAMETERS 153 -# define EVP_R_DISABLED_FOR_FIPS 163 -# define EVP_R_ENCODE_ERROR 115 -# define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 -# define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 -# define EVP_R_EXPECTING_AN_RSA_KEY 127 -# define EVP_R_EXPECTING_A_DH_KEY 128 -# define EVP_R_EXPECTING_A_DSA_KEY 129 -# define EVP_R_EXPECTING_A_ECDSA_KEY 141 -# define EVP_R_EXPECTING_A_EC_KEY 142 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 -# define EVP_R_INITIALIZATION_ERROR 134 -# define EVP_R_INPUT_NOT_INITIALIZED 111 -# define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 -# define EVP_R_INVALID_KEY 171 -# define EVP_R_INVALID_KEY_LENGTH 130 -# define EVP_R_INVALID_OPERATION 148 -# define EVP_R_IV_TOO_LARGE 102 -# define EVP_R_KEYGEN_FAILURE 120 -# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 -# define EVP_R_METHOD_NOT_SUPPORTED 144 -# define EVP_R_MISSING_PARAMETERS 103 -# define EVP_R_NO_CIPHER_SET 131 -# define EVP_R_NO_DEFAULT_DIGEST 158 -# define EVP_R_NO_DIGEST_SET 139 -# define EVP_R_NO_DSA_PARAMETERS 116 -# define EVP_R_NO_KEY_SET 154 -# define EVP_R_NO_OPERATION_SET 149 -# define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 -# define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 -# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117 -# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 -# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 -# define EVP_R_PUBLIC_KEY_NOT_RSA 106 -# define EVP_R_TOO_LARGE 164 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 -# define EVP_R_UNSUPPORTED_ALGORITHM 156 -# define EVP_R_UNSUPPORTED_CIPHER 107 -# define EVP_R_UNSUPPORTED_KEYLENGTH 123 -# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 -# define EVP_R_UNSUPPORTED_KEY_SIZE 108 -# define EVP_R_UNSUPPORTED_PRF 125 -# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 -# define EVP_R_UNSUPPORTED_SALT_TYPE 126 -# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 -# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 - -# ifdef __cplusplus -} -# endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/hmac.h b/ext/openssl/windows/x86/include/openssl/hmac.h deleted file mode 100644 index b8b55cda..00000000 --- a/ext/openssl/windows/x86/include/openssl/hmac.h +++ /dev/null @@ -1,109 +0,0 @@ -/* crypto/hmac/hmac.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H - -# include - -# ifdef OPENSSL_NO_HMAC -# error HMAC is disabled. -# endif - -# include - -# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct hmac_ctx_st { - const EVP_MD *md; - EVP_MD_CTX md_ctx; - EVP_MD_CTX i_ctx; - EVP_MD_CTX o_ctx; - unsigned int key_length; - unsigned char key[HMAC_MAX_MD_CBLOCK]; -} HMAC_CTX; - -# define HMAC_size(e) (EVP_MD_size((e)->md)) - -void HMAC_CTX_init(HMAC_CTX *ctx); -void HMAC_CTX_cleanup(HMAC_CTX *ctx); - -/* deprecated */ -# define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) - -/* deprecated */ -int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md); -int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); -int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); -unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); - -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/idea.h b/ext/openssl/windows/x86/include/openssl/idea.h deleted file mode 100644 index 60759840..00000000 --- a/ext/openssl/windows/x86/include/openssl/idea.h +++ /dev/null @@ -1,105 +0,0 @@ -/* crypto/idea/idea.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H - -# include /* IDEA_INT, OPENSSL_NO_IDEA */ - -# ifdef OPENSSL_NO_IDEA -# error IDEA is disabled. -# endif - -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct idea_key_st { - IDEA_INT data[9][6]; -} IDEA_KEY_SCHEDULE; - -const char *idea_options(void); -void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -# ifdef OPENSSL_FIPS -void private_idea_set_encrypt_key(const unsigned char *key, - IDEA_KEY_SCHEDULE *ks); -# endif -void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void idea_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void idea_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void idea_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/krb5_asn.h b/ext/openssl/windows/x86/include/openssl/krb5_asn.h deleted file mode 100644 index 9cf5a26d..00000000 --- a/ext/openssl/windows/x86/include/openssl/krb5_asn.h +++ /dev/null @@ -1,240 +0,0 @@ -/* krb5_asn.h */ -/* - * Written by Vern Staats for the OpenSSL project, ** - * using ocsp/{*.h,*asn*.c} as a starting point - */ - -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_KRB5_ASN_H -# define HEADER_KRB5_ASN_H - -/* - * #include - */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * ASN.1 from Kerberos RFC 1510 - */ - -/*- EncryptedData ::= SEQUENCE { - * etype[0] INTEGER, -- EncryptionType - * kvno[1] INTEGER OPTIONAL, - * cipher[2] OCTET STRING -- ciphertext - * } - */ -typedef struct krb5_encdata_st { - ASN1_INTEGER *etype; - ASN1_INTEGER *kvno; - ASN1_OCTET_STRING *cipher; -} KRB5_ENCDATA; - -DECLARE_STACK_OF(KRB5_ENCDATA) - -/*- PrincipalName ::= SEQUENCE { - * name-type[0] INTEGER, - * name-string[1] SEQUENCE OF GeneralString - * } - */ -typedef struct krb5_princname_st { - ASN1_INTEGER *nametype; - STACK_OF(ASN1_GENERALSTRING) *namestring; -} KRB5_PRINCNAME; - -DECLARE_STACK_OF(KRB5_PRINCNAME) - -/*- Ticket ::= [APPLICATION 1] SEQUENCE { - * tkt-vno[0] INTEGER, - * realm[1] Realm, - * sname[2] PrincipalName, - * enc-part[3] EncryptedData - * } - */ -typedef struct krb5_tktbody_st { - ASN1_INTEGER *tktvno; - ASN1_GENERALSTRING *realm; - KRB5_PRINCNAME *sname; - KRB5_ENCDATA *encdata; -} KRB5_TKTBODY; - -typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET; -DECLARE_STACK_OF(KRB5_TKTBODY) - -/*- AP-REQ ::= [APPLICATION 14] SEQUENCE { - * pvno[0] INTEGER, - * msg-type[1] INTEGER, - * ap-options[2] APOptions, - * ticket[3] Ticket, - * authenticator[4] EncryptedData - * } - * - * APOptions ::= BIT STRING { - * reserved(0), use-session-key(1), mutual-required(2) } - */ -typedef struct krb5_ap_req_st { - ASN1_INTEGER *pvno; - ASN1_INTEGER *msgtype; - ASN1_BIT_STRING *apoptions; - KRB5_TICKET *ticket; - KRB5_ENCDATA *authenticator; -} KRB5_APREQBODY; - -typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ; -DECLARE_STACK_OF(KRB5_APREQBODY) - -/* Authenticator Stuff */ - -/*- Checksum ::= SEQUENCE { - * cksumtype[0] INTEGER, - * checksum[1] OCTET STRING - * } - */ -typedef struct krb5_checksum_st { - ASN1_INTEGER *ctype; - ASN1_OCTET_STRING *checksum; -} KRB5_CHECKSUM; - -DECLARE_STACK_OF(KRB5_CHECKSUM) - -/*- EncryptionKey ::= SEQUENCE { - * keytype[0] INTEGER, - * keyvalue[1] OCTET STRING - * } - */ -typedef struct krb5_encryptionkey_st { - ASN1_INTEGER *ktype; - ASN1_OCTET_STRING *keyvalue; -} KRB5_ENCKEY; - -DECLARE_STACK_OF(KRB5_ENCKEY) - -/*- AuthorizationData ::= SEQUENCE OF SEQUENCE { - * ad-type[0] INTEGER, - * ad-data[1] OCTET STRING - * } - */ -typedef struct krb5_authorization_st { - ASN1_INTEGER *adtype; - ASN1_OCTET_STRING *addata; -} KRB5_AUTHDATA; - -DECLARE_STACK_OF(KRB5_AUTHDATA) - -/*- -- Unencrypted authenticator - * Authenticator ::= [APPLICATION 2] SEQUENCE { - * authenticator-vno[0] INTEGER, - * crealm[1] Realm, - * cname[2] PrincipalName, - * cksum[3] Checksum OPTIONAL, - * cusec[4] INTEGER, - * ctime[5] KerberosTime, - * subkey[6] EncryptionKey OPTIONAL, - * seq-number[7] INTEGER OPTIONAL, - * authorization-data[8] AuthorizationData OPTIONAL - * } - */ -typedef struct krb5_authenticator_st { - ASN1_INTEGER *avno; - ASN1_GENERALSTRING *crealm; - KRB5_PRINCNAME *cname; - KRB5_CHECKSUM *cksum; - ASN1_INTEGER *cusec; - ASN1_GENERALIZEDTIME *ctime; - KRB5_ENCKEY *subkey; - ASN1_INTEGER *seqnum; - KRB5_AUTHDATA *authorization; -} KRB5_AUTHENTBODY; - -typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT; -DECLARE_STACK_OF(KRB5_AUTHENTBODY) - -/*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) = - * type *name##_new(void); - * void name##_free(type *a); - * DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) = - * DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) = - * type *d2i_##name(type **a, const unsigned char **in, long len); - * int i2d_##name(type *a, unsigned char **out); - * DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it - */ - -DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA) -DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME) -DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_TICKET) -DECLARE_ASN1_FUNCTIONS(KRB5_APREQ) - -DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM) -DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT) - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/kssl.h b/ext/openssl/windows/x86/include/openssl/kssl.h deleted file mode 100644 index ae8a51f4..00000000 --- a/ext/openssl/windows/x86/include/openssl/kssl.h +++ /dev/null @@ -1,197 +0,0 @@ -/* ssl/kssl.h */ -/* - * Written by Vern Staats for the OpenSSL project - * 2000. project 2000. - */ -/* ==================================================================== - * Copyright (c) 2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - ** 19990701 VRS Started. - */ - -#ifndef KSSL_H -# define KSSL_H - -# include - -# ifndef OPENSSL_NO_KRB5 - -# include -# include -# include -# ifdef OPENSSL_SYS_WIN32 -/* - * These can sometimes get redefined indirectly by krb5 header files after - * they get undefed in ossl_typ.h - */ -# undef X509_NAME -# undef X509_EXTENSIONS -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Depending on which KRB5 implementation used, some types from - * the other may be missing. Resolve that here and now - */ -# ifdef KRB5_HEIMDAL -typedef unsigned char krb5_octet; -# define FAR -# else - -# ifndef FAR -# define FAR -# endif - -# endif - -/*- - * Uncomment this to debug kssl problems or - * to trace usage of the Kerberos session key - * - * #define KSSL_DEBUG - */ - -# ifndef KRB5SVC -# define KRB5SVC "host" -# endif - -# ifndef KRB5KEYTAB -# define KRB5KEYTAB "/etc/krb5.keytab" -# endif - -# ifndef KRB5SENDAUTH -# define KRB5SENDAUTH 1 -# endif - -# ifndef KRB5CHECKAUTH -# define KRB5CHECKAUTH 1 -# endif - -# ifndef KSSL_CLOCKSKEW -# define KSSL_CLOCKSKEW 300; -# endif - -# define KSSL_ERR_MAX 255 -typedef struct kssl_err_st { - int reason; - char text[KSSL_ERR_MAX + 1]; -} KSSL_ERR; - -/*- Context for passing - * (1) Kerberos session key to SSL, and - * (2) Config data between application and SSL lib - */ -typedef struct kssl_ctx_st { - /* used by: disposition: */ - char *service_name; /* C,S default ok (kssl) */ - char *service_host; /* C input, REQUIRED */ - char *client_princ; /* S output from krb5 ticket */ - char *keytab_file; /* S NULL (/etc/krb5.keytab) */ - char *cred_cache; /* C NULL (default) */ - krb5_enctype enctype; - int length; - krb5_octet FAR *key; -} KSSL_CTX; - -# define KSSL_CLIENT 1 -# define KSSL_SERVER 2 -# define KSSL_SERVICE 3 -# define KSSL_KEYTAB 4 - -# define KSSL_CTX_OK 0 -# define KSSL_CTX_ERR 1 -# define KSSL_NOMEM 2 - -/* Public (for use by applications that use OpenSSL with Kerberos 5 support */ -krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); -KSSL_CTX *kssl_ctx_new(void); -KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); -void kssl_ctx_show(KSSL_CTX *kssl_ctx); -krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, - krb5_data *realm, krb5_data *entity, - int nentities); -krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, - krb5_data *authenp, KSSL_ERR *kssl_err); -krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, - krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); -krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); -void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); -void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); -krb5_error_code kssl_build_principal_2(krb5_context context, - krb5_principal *princ, int rlen, - const char *realm, int slen, - const char *svc, int hlen, - const char *host); -krb5_error_code kssl_validate_times(krb5_timestamp atime, - krb5_ticket_times *ttimes); -krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, - krb5_timestamp *atimep, - KSSL_ERR *kssl_err); -unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); - -void SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx); -KSSL_CTX *SSL_get0_kssl_ctx(SSL *s); -char *kssl_ctx_get0_client_princ(KSSL_CTX *kctx); - -#ifdef __cplusplus -} -#endif -# endif /* OPENSSL_NO_KRB5 */ -#endif /* KSSL_H */ diff --git a/ext/openssl/windows/x86/include/openssl/lhash.h b/ext/openssl/windows/x86/include/openssl/lhash.h deleted file mode 100644 index b6c328bf..00000000 --- a/ext/openssl/windows/x86/include/openssl/lhash.h +++ /dev/null @@ -1,240 +0,0 @@ -/* crypto/lhash/lhash.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -/* - * Header for dynamic hash table routines Author - Eric Young - */ - -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H - -# include -# ifndef OPENSSL_NO_FP_API -# include -# endif - -# ifndef OPENSSL_NO_BIO -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct lhash_node_st { - void *data; - struct lhash_node_st *next; -# ifndef OPENSSL_NO_HASH_COMP - unsigned long hash; -# endif -} LHASH_NODE; - -typedef int (*LHASH_COMP_FN_TYPE) (const void *, const void *); -typedef unsigned long (*LHASH_HASH_FN_TYPE) (const void *); -typedef void (*LHASH_DOALL_FN_TYPE) (void *); -typedef void (*LHASH_DOALL_ARG_FN_TYPE) (void *, void *); - -/* - * Macros for declaring and implementing type-safe wrappers for LHASH - * callbacks. This way, callbacks can be provided to LHASH structures without - * function pointer casting and the macro-defined callbacks provide - * per-variable casting before deferring to the underlying type-specific - * callbacks. NB: It is possible to place a "static" in front of both the - * DECLARE and IMPLEMENT macros if the functions are strictly internal. - */ - -/* First: "hash" functions */ -# define DECLARE_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *); -# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *arg) { \ - const o_type *a = arg; \ - return name##_hash(a); } -# define LHASH_HASH_FN(name) name##_LHASH_HASH - -/* Second: "compare" functions */ -# define DECLARE_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *, const void *); -# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ - const o_type *a = arg1; \ - const o_type *b = arg2; \ - return name##_cmp(a,b); } -# define LHASH_COMP_FN(name) name##_LHASH_COMP - -/* Third: "doall" functions */ -# define DECLARE_LHASH_DOALL_FN(name, o_type) \ - void name##_LHASH_DOALL(void *); -# define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \ - void name##_LHASH_DOALL(void *arg) { \ - o_type *a = arg; \ - name##_doall(a); } -# define LHASH_DOALL_FN(name) name##_LHASH_DOALL - -/* Fourth: "doall_arg" functions */ -# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *, void *); -# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ - o_type *a = arg1; \ - a_type *b = arg2; \ - name##_doall_arg(a, b); } -# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG - -typedef struct lhash_st { - LHASH_NODE **b; - LHASH_COMP_FN_TYPE comp; - LHASH_HASH_FN_TYPE hash; - unsigned int num_nodes; - unsigned int num_alloc_nodes; - unsigned int p; - unsigned int pmax; - unsigned long up_load; /* load times 256 */ - unsigned long down_load; /* load times 256 */ - unsigned long num_items; - unsigned long num_expands; - unsigned long num_expand_reallocs; - unsigned long num_contracts; - unsigned long num_contract_reallocs; - unsigned long num_hash_calls; - unsigned long num_comp_calls; - unsigned long num_insert; - unsigned long num_replace; - unsigned long num_delete; - unsigned long num_no_delete; - unsigned long num_retrieve; - unsigned long num_retrieve_miss; - unsigned long num_hash_comps; - int error; -} _LHASH; /* Do not use _LHASH directly, use LHASH_OF - * and friends */ - -# define LH_LOAD_MULT 256 - -/* - * Indicates a malloc() error in the last call, this is only bad in - * lh_insert(). - */ -# define lh_error(lh) ((lh)->error) - -_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); -void lh_free(_LHASH *lh); -void *lh_insert(_LHASH *lh, void *data); -void *lh_delete(_LHASH *lh, const void *data); -void *lh_retrieve(_LHASH *lh, const void *data); -void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func); -void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); -unsigned long lh_strhash(const char *c); -unsigned long lh_num_items(const _LHASH *lh); - -# ifndef OPENSSL_NO_FP_API -void lh_stats(const _LHASH *lh, FILE *out); -void lh_node_stats(const _LHASH *lh, FILE *out); -void lh_node_usage_stats(const _LHASH *lh, FILE *out); -# endif - -# ifndef OPENSSL_NO_BIO -void lh_stats_bio(const _LHASH *lh, BIO *out); -void lh_node_stats_bio(const _LHASH *lh, BIO *out); -void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out); -# endif - -/* Type checking... */ - -# define LHASH_OF(type) struct lhash_st_##type - -# define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; } - -# define CHECKED_LHASH_OF(type,lh) \ - ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh)) - -/* Define wrapper functions. */ -# define LHM_lh_new(type, name) \ - ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name))) -# define LHM_lh_error(type, lh) \ - lh_error(CHECKED_LHASH_OF(type,lh)) -# define LHM_lh_insert(type, lh, inst) \ - ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \ - CHECKED_PTR_OF(type, inst))) -# define LHM_lh_retrieve(type, lh, inst) \ - ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \ - CHECKED_PTR_OF(type, inst))) -# define LHM_lh_delete(type, lh, inst) \ - ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \ - CHECKED_PTR_OF(type, inst))) -# define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn) -# define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \ - lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg)) -# define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh)) -# define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load) -# define LHM_lh_node_stats_bio(type, lh, out) \ - lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out) -# define LHM_lh_node_usage_stats_bio(type, lh, out) \ - lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out) -# define LHM_lh_stats_bio(type, lh, out) \ - lh_stats_bio(CHECKED_LHASH_OF(type, lh), out) -# define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh)) - -DECLARE_LHASH_OF(OPENSSL_STRING); -DECLARE_LHASH_OF(OPENSSL_CSTRING); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/md4.h b/ext/openssl/windows/x86/include/openssl/md4.h deleted file mode 100644 index 11fd7129..00000000 --- a/ext/openssl/windows/x86/include/openssl/md4.h +++ /dev/null @@ -1,119 +0,0 @@ -/* crypto/md4/md4.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_MD4_H -# define HEADER_MD4_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_MD4 -# error MD4 is disabled. -# endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD4_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! MD4_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define MD4_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define MD4_LONG unsigned long -# define MD4_LONG_LOG2 3 -/* - * _CRAY note. I could declare short, but I have no idea what impact - * does it have on performance on none-T3E machines. I could declare - * int, but at least on C90 sizeof(int) can be chosen at compile time. - * So I've chosen long... - * - */ -# else -# define MD4_LONG unsigned int -# endif - -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 - -typedef struct MD4state_st { - MD4_LONG A, B, C, D; - MD4_LONG Nl, Nh; - MD4_LONG data[MD4_LBLOCK]; - unsigned int num; -} MD4_CTX; - -# ifdef OPENSSL_FIPS -int private_MD4_Init(MD4_CTX *c); -# endif -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/md5.h b/ext/openssl/windows/x86/include/openssl/md5.h deleted file mode 100644 index 2659038a..00000000 --- a/ext/openssl/windows/x86/include/openssl/md5.h +++ /dev/null @@ -1,119 +0,0 @@ -/* crypto/md5/md5.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_MD5_H -# define HEADER_MD5_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_MD5 -# error MD5 is disabled. -# endif - -/* - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! MD5_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define MD5_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define MD5_LONG unsigned long -# define MD5_LONG_LOG2 3 -/* - * _CRAY note. I could declare short, but I have no idea what impact - * does it have on performance on none-T3E machines. I could declare - * int, but at least on C90 sizeof(int) can be chosen at compile time. - * So I've chosen long... - * - */ -# else -# define MD5_LONG unsigned int -# endif - -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 - -typedef struct MD5state_st { - MD5_LONG A, B, C, D; - MD5_LONG Nl, Nh; - MD5_LONG data[MD5_LBLOCK]; - unsigned int num; -} MD5_CTX; - -# ifdef OPENSSL_FIPS -int private_MD5_Init(MD5_CTX *c); -# endif -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/mdc2.h b/ext/openssl/windows/x86/include/openssl/mdc2.h deleted file mode 100644 index 7efe53bc..00000000 --- a/ext/openssl/windows/x86/include/openssl/mdc2.h +++ /dev/null @@ -1,94 +0,0 @@ -/* crypto/mdc2/mdc2.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_MDC2 -# error MDC2 is disabled. -# endif - -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 - -typedef struct mdc2_ctx_st { - unsigned int num; - unsigned char data[MDC2_BLOCK]; - DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ -} MDC2_CTX; - -# ifdef OPENSSL_FIPS -int private_MDC2_Init(MDC2_CTX *c); -# endif -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/modes.h b/ext/openssl/windows/x86/include/openssl/modes.h deleted file mode 100644 index fd488499..00000000 --- a/ext/openssl/windows/x86/include/openssl/modes.h +++ /dev/null @@ -1,163 +0,0 @@ -/* ==================================================================== - * Copyright (c) 2008 The OpenSSL Project. All rights reserved. - * - * Rights for redistribution and usage in source and binary - * forms are granted according to the OpenSSL license. - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif -typedef void (*block128_f) (const unsigned char in[16], - unsigned char out[16], const void *key); - -typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int enc); - -typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16]); - -typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16], - unsigned char cmac[16]); - -void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); -void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); - -void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], unsigned int *num, - block128_f block); - -void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], - unsigned int *num, ctr128_f ctr); - -void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - block128_f block); - -void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, - size_t bits, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -typedef struct gcm128_context GCM128_CONTEXT; - -GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); -void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); -void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, - size_t len); -int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); - -typedef struct ccm128_context CCM128_CONTEXT; - -void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, - unsigned int M, unsigned int L, void *key, - block128_f block); -int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, - size_t nlen, size_t mlen); -void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, - size_t alen); -int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); - -typedef struct xts128_context XTS128_CONTEXT; - -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -#ifdef __cplusplus -} -#endif diff --git a/ext/openssl/windows/x86/include/openssl/obj_mac.h b/ext/openssl/windows/x86/include/openssl/obj_mac.h deleted file mode 100644 index 779c309b..00000000 --- a/ext/openssl/windows/x86/include/openssl/obj_mac.h +++ /dev/null @@ -1,4194 +0,0 @@ -/* crypto/objects/obj_mac.h */ - -/* - * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following - * command: perl objects.pl objects.txt obj_mac.num obj_mac.h - */ - -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#define SN_undef "UNDEF" -#define LN_undef "undefined" -#define NID_undef 0 -#define OBJ_undef 0L - -#define SN_itu_t "ITU-T" -#define LN_itu_t "itu-t" -#define NID_itu_t 645 -#define OBJ_itu_t 0L - -#define NID_ccitt 404 -#define OBJ_ccitt OBJ_itu_t - -#define SN_iso "ISO" -#define LN_iso "iso" -#define NID_iso 181 -#define OBJ_iso 1L - -#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" -#define LN_joint_iso_itu_t "joint-iso-itu-t" -#define NID_joint_iso_itu_t 646 -#define OBJ_joint_iso_itu_t 2L - -#define NID_joint_iso_ccitt 393 -#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t - -#define SN_member_body "member-body" -#define LN_member_body "ISO Member Body" -#define NID_member_body 182 -#define OBJ_member_body OBJ_iso,2L - -#define SN_identified_organization "identified-organization" -#define NID_identified_organization 676 -#define OBJ_identified_organization OBJ_iso,3L - -#define SN_hmac_md5 "HMAC-MD5" -#define LN_hmac_md5 "hmac-md5" -#define NID_hmac_md5 780 -#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L - -#define SN_hmac_sha1 "HMAC-SHA1" -#define LN_hmac_sha1 "hmac-sha1" -#define NID_hmac_sha1 781 -#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L - -#define SN_certicom_arc "certicom-arc" -#define NID_certicom_arc 677 -#define OBJ_certicom_arc OBJ_identified_organization,132L - -#define SN_international_organizations "international-organizations" -#define LN_international_organizations "International Organizations" -#define NID_international_organizations 647 -#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L - -#define SN_wap "wap" -#define NID_wap 678 -#define OBJ_wap OBJ_international_organizations,43L - -#define SN_wap_wsg "wap-wsg" -#define NID_wap_wsg 679 -#define OBJ_wap_wsg OBJ_wap,1L - -#define SN_selected_attribute_types "selected-attribute-types" -#define LN_selected_attribute_types "Selected Attribute Types" -#define NID_selected_attribute_types 394 -#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L - -#define SN_clearance "clearance" -#define NID_clearance 395 -#define OBJ_clearance OBJ_selected_attribute_types,55L - -#define SN_ISO_US "ISO-US" -#define LN_ISO_US "ISO US Member Body" -#define NID_ISO_US 183 -#define OBJ_ISO_US OBJ_member_body,840L - -#define SN_X9_57 "X9-57" -#define LN_X9_57 "X9.57" -#define NID_X9_57 184 -#define OBJ_X9_57 OBJ_ISO_US,10040L - -#define SN_X9cm "X9cm" -#define LN_X9cm "X9.57 CM ?" -#define NID_X9cm 185 -#define OBJ_X9cm OBJ_X9_57,4L - -#define SN_dsa "DSA" -#define LN_dsa "dsaEncryption" -#define NID_dsa 116 -#define OBJ_dsa OBJ_X9cm,1L - -#define SN_dsaWithSHA1 "DSA-SHA1" -#define LN_dsaWithSHA1 "dsaWithSHA1" -#define NID_dsaWithSHA1 113 -#define OBJ_dsaWithSHA1 OBJ_X9cm,3L - -#define SN_ansi_X9_62 "ansi-X9-62" -#define LN_ansi_X9_62 "ANSI X9.62" -#define NID_ansi_X9_62 405 -#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L - -#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L - -#define SN_X9_62_prime_field "prime-field" -#define NID_X9_62_prime_field 406 -#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L - -#define SN_X9_62_characteristic_two_field "characteristic-two-field" -#define NID_X9_62_characteristic_two_field 407 -#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L - -#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" -#define NID_X9_62_id_characteristic_two_basis 680 -#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L - -#define SN_X9_62_onBasis "onBasis" -#define NID_X9_62_onBasis 681 -#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L - -#define SN_X9_62_tpBasis "tpBasis" -#define NID_X9_62_tpBasis 682 -#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L - -#define SN_X9_62_ppBasis "ppBasis" -#define NID_X9_62_ppBasis 683 -#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L - -#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L - -#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" -#define NID_X9_62_id_ecPublicKey 408 -#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L - -#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L - -#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L - -#define SN_X9_62_c2pnb163v1 "c2pnb163v1" -#define NID_X9_62_c2pnb163v1 684 -#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L - -#define SN_X9_62_c2pnb163v2 "c2pnb163v2" -#define NID_X9_62_c2pnb163v2 685 -#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L - -#define SN_X9_62_c2pnb163v3 "c2pnb163v3" -#define NID_X9_62_c2pnb163v3 686 -#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L - -#define SN_X9_62_c2pnb176v1 "c2pnb176v1" -#define NID_X9_62_c2pnb176v1 687 -#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L - -#define SN_X9_62_c2tnb191v1 "c2tnb191v1" -#define NID_X9_62_c2tnb191v1 688 -#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L - -#define SN_X9_62_c2tnb191v2 "c2tnb191v2" -#define NID_X9_62_c2tnb191v2 689 -#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L - -#define SN_X9_62_c2tnb191v3 "c2tnb191v3" -#define NID_X9_62_c2tnb191v3 690 -#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L - -#define SN_X9_62_c2onb191v4 "c2onb191v4" -#define NID_X9_62_c2onb191v4 691 -#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L - -#define SN_X9_62_c2onb191v5 "c2onb191v5" -#define NID_X9_62_c2onb191v5 692 -#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L - -#define SN_X9_62_c2pnb208w1 "c2pnb208w1" -#define NID_X9_62_c2pnb208w1 693 -#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L - -#define SN_X9_62_c2tnb239v1 "c2tnb239v1" -#define NID_X9_62_c2tnb239v1 694 -#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L - -#define SN_X9_62_c2tnb239v2 "c2tnb239v2" -#define NID_X9_62_c2tnb239v2 695 -#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L - -#define SN_X9_62_c2tnb239v3 "c2tnb239v3" -#define NID_X9_62_c2tnb239v3 696 -#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L - -#define SN_X9_62_c2onb239v4 "c2onb239v4" -#define NID_X9_62_c2onb239v4 697 -#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L - -#define SN_X9_62_c2onb239v5 "c2onb239v5" -#define NID_X9_62_c2onb239v5 698 -#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L - -#define SN_X9_62_c2pnb272w1 "c2pnb272w1" -#define NID_X9_62_c2pnb272w1 699 -#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L - -#define SN_X9_62_c2pnb304w1 "c2pnb304w1" -#define NID_X9_62_c2pnb304w1 700 -#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L - -#define SN_X9_62_c2tnb359v1 "c2tnb359v1" -#define NID_X9_62_c2tnb359v1 701 -#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L - -#define SN_X9_62_c2pnb368w1 "c2pnb368w1" -#define NID_X9_62_c2pnb368w1 702 -#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L - -#define SN_X9_62_c2tnb431r1 "c2tnb431r1" -#define NID_X9_62_c2tnb431r1 703 -#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L - -#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L - -#define SN_X9_62_prime192v1 "prime192v1" -#define NID_X9_62_prime192v1 409 -#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L - -#define SN_X9_62_prime192v2 "prime192v2" -#define NID_X9_62_prime192v2 410 -#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L - -#define SN_X9_62_prime192v3 "prime192v3" -#define NID_X9_62_prime192v3 411 -#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L - -#define SN_X9_62_prime239v1 "prime239v1" -#define NID_X9_62_prime239v1 412 -#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L - -#define SN_X9_62_prime239v2 "prime239v2" -#define NID_X9_62_prime239v2 413 -#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L - -#define SN_X9_62_prime239v3 "prime239v3" -#define NID_X9_62_prime239v3 414 -#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L - -#define SN_X9_62_prime256v1 "prime256v1" -#define NID_X9_62_prime256v1 415 -#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L - -#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L - -#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" -#define NID_ecdsa_with_SHA1 416 -#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L - -#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" -#define NID_ecdsa_with_Recommended 791 -#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L - -#define SN_ecdsa_with_Specified "ecdsa-with-Specified" -#define NID_ecdsa_with_Specified 792 -#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L - -#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" -#define NID_ecdsa_with_SHA224 793 -#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L - -#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" -#define NID_ecdsa_with_SHA256 794 -#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L - -#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" -#define NID_ecdsa_with_SHA384 795 -#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L - -#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" -#define NID_ecdsa_with_SHA512 796 -#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L - -#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L - -#define SN_secp112r1 "secp112r1" -#define NID_secp112r1 704 -#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L - -#define SN_secp112r2 "secp112r2" -#define NID_secp112r2 705 -#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L - -#define SN_secp128r1 "secp128r1" -#define NID_secp128r1 706 -#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L - -#define SN_secp128r2 "secp128r2" -#define NID_secp128r2 707 -#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L - -#define SN_secp160k1 "secp160k1" -#define NID_secp160k1 708 -#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L - -#define SN_secp160r1 "secp160r1" -#define NID_secp160r1 709 -#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L - -#define SN_secp160r2 "secp160r2" -#define NID_secp160r2 710 -#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L - -#define SN_secp192k1 "secp192k1" -#define NID_secp192k1 711 -#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L - -#define SN_secp224k1 "secp224k1" -#define NID_secp224k1 712 -#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L - -#define SN_secp224r1 "secp224r1" -#define NID_secp224r1 713 -#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L - -#define SN_secp256k1 "secp256k1" -#define NID_secp256k1 714 -#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L - -#define SN_secp384r1 "secp384r1" -#define NID_secp384r1 715 -#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L - -#define SN_secp521r1 "secp521r1" -#define NID_secp521r1 716 -#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L - -#define SN_sect113r1 "sect113r1" -#define NID_sect113r1 717 -#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L - -#define SN_sect113r2 "sect113r2" -#define NID_sect113r2 718 -#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L - -#define SN_sect131r1 "sect131r1" -#define NID_sect131r1 719 -#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L - -#define SN_sect131r2 "sect131r2" -#define NID_sect131r2 720 -#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L - -#define SN_sect163k1 "sect163k1" -#define NID_sect163k1 721 -#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L - -#define SN_sect163r1 "sect163r1" -#define NID_sect163r1 722 -#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L - -#define SN_sect163r2 "sect163r2" -#define NID_sect163r2 723 -#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L - -#define SN_sect193r1 "sect193r1" -#define NID_sect193r1 724 -#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L - -#define SN_sect193r2 "sect193r2" -#define NID_sect193r2 725 -#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L - -#define SN_sect233k1 "sect233k1" -#define NID_sect233k1 726 -#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L - -#define SN_sect233r1 "sect233r1" -#define NID_sect233r1 727 -#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L - -#define SN_sect239k1 "sect239k1" -#define NID_sect239k1 728 -#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L - -#define SN_sect283k1 "sect283k1" -#define NID_sect283k1 729 -#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L - -#define SN_sect283r1 "sect283r1" -#define NID_sect283r1 730 -#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L - -#define SN_sect409k1 "sect409k1" -#define NID_sect409k1 731 -#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L - -#define SN_sect409r1 "sect409r1" -#define NID_sect409r1 732 -#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L - -#define SN_sect571k1 "sect571k1" -#define NID_sect571k1 733 -#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L - -#define SN_sect571r1 "sect571r1" -#define NID_sect571r1 734 -#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L - -#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L - -#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" -#define NID_wap_wsg_idm_ecid_wtls1 735 -#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L - -#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" -#define NID_wap_wsg_idm_ecid_wtls3 736 -#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L - -#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" -#define NID_wap_wsg_idm_ecid_wtls4 737 -#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L - -#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" -#define NID_wap_wsg_idm_ecid_wtls5 738 -#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L - -#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" -#define NID_wap_wsg_idm_ecid_wtls6 739 -#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L - -#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" -#define NID_wap_wsg_idm_ecid_wtls7 740 -#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L - -#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" -#define NID_wap_wsg_idm_ecid_wtls8 741 -#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L - -#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" -#define NID_wap_wsg_idm_ecid_wtls9 742 -#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L - -#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" -#define NID_wap_wsg_idm_ecid_wtls10 743 -#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L - -#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" -#define NID_wap_wsg_idm_ecid_wtls11 744 -#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L - -#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" -#define NID_wap_wsg_idm_ecid_wtls12 745 -#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L - -#define SN_cast5_cbc "CAST5-CBC" -#define LN_cast5_cbc "cast5-cbc" -#define NID_cast5_cbc 108 -#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L - -#define SN_cast5_ecb "CAST5-ECB" -#define LN_cast5_ecb "cast5-ecb" -#define NID_cast5_ecb 109 - -#define SN_cast5_cfb64 "CAST5-CFB" -#define LN_cast5_cfb64 "cast5-cfb" -#define NID_cast5_cfb64 110 - -#define SN_cast5_ofb64 "CAST5-OFB" -#define LN_cast5_ofb64 "cast5-ofb" -#define NID_cast5_ofb64 111 - -#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -#define NID_pbeWithMD5AndCast5_CBC 112 -#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L - -#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" -#define LN_id_PasswordBasedMAC "password based MAC" -#define NID_id_PasswordBasedMAC 782 -#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L - -#define SN_id_DHBasedMac "id-DHBasedMac" -#define LN_id_DHBasedMac "Diffie-Hellman based MAC" -#define NID_id_DHBasedMac 783 -#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L - -#define SN_rsadsi "rsadsi" -#define LN_rsadsi "RSA Data Security, Inc." -#define NID_rsadsi 1 -#define OBJ_rsadsi OBJ_ISO_US,113549L - -#define SN_pkcs "pkcs" -#define LN_pkcs "RSA Data Security, Inc. PKCS" -#define NID_pkcs 2 -#define OBJ_pkcs OBJ_rsadsi,1L - -#define SN_pkcs1 "pkcs1" -#define NID_pkcs1 186 -#define OBJ_pkcs1 OBJ_pkcs,1L - -#define LN_rsaEncryption "rsaEncryption" -#define NID_rsaEncryption 6 -#define OBJ_rsaEncryption OBJ_pkcs1,1L - -#define SN_md2WithRSAEncryption "RSA-MD2" -#define LN_md2WithRSAEncryption "md2WithRSAEncryption" -#define NID_md2WithRSAEncryption 7 -#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L - -#define SN_md4WithRSAEncryption "RSA-MD4" -#define LN_md4WithRSAEncryption "md4WithRSAEncryption" -#define NID_md4WithRSAEncryption 396 -#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L - -#define SN_md5WithRSAEncryption "RSA-MD5" -#define LN_md5WithRSAEncryption "md5WithRSAEncryption" -#define NID_md5WithRSAEncryption 8 -#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L - -#define SN_sha1WithRSAEncryption "RSA-SHA1" -#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -#define NID_sha1WithRSAEncryption 65 -#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L - -#define SN_rsaesOaep "RSAES-OAEP" -#define LN_rsaesOaep "rsaesOaep" -#define NID_rsaesOaep 919 -#define OBJ_rsaesOaep OBJ_pkcs1,7L - -#define SN_mgf1 "MGF1" -#define LN_mgf1 "mgf1" -#define NID_mgf1 911 -#define OBJ_mgf1 OBJ_pkcs1,8L - -#define SN_pSpecified "PSPECIFIED" -#define LN_pSpecified "pSpecified" -#define NID_pSpecified 935 -#define OBJ_pSpecified OBJ_pkcs1,9L - -#define SN_rsassaPss "RSASSA-PSS" -#define LN_rsassaPss "rsassaPss" -#define NID_rsassaPss 912 -#define OBJ_rsassaPss OBJ_pkcs1,10L - -#define SN_sha256WithRSAEncryption "RSA-SHA256" -#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" -#define NID_sha256WithRSAEncryption 668 -#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L - -#define SN_sha384WithRSAEncryption "RSA-SHA384" -#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" -#define NID_sha384WithRSAEncryption 669 -#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L - -#define SN_sha512WithRSAEncryption "RSA-SHA512" -#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" -#define NID_sha512WithRSAEncryption 670 -#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L - -#define SN_sha224WithRSAEncryption "RSA-SHA224" -#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" -#define NID_sha224WithRSAEncryption 671 -#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L - -#define SN_pkcs3 "pkcs3" -#define NID_pkcs3 27 -#define OBJ_pkcs3 OBJ_pkcs,3L - -#define LN_dhKeyAgreement "dhKeyAgreement" -#define NID_dhKeyAgreement 28 -#define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -#define SN_pkcs5 "pkcs5" -#define NID_pkcs5 187 -#define OBJ_pkcs5 OBJ_pkcs,5L - -#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -#define NID_pbeWithMD2AndDES_CBC 9 -#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L - -#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -#define NID_pbeWithMD5AndDES_CBC 10 -#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L - -#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -#define NID_pbeWithMD2AndRC2_CBC 168 -#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L - -#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -#define NID_pbeWithMD5AndRC2_CBC 169 -#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L - -#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -#define NID_pbeWithSHA1AndDES_CBC 170 -#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L - -#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -#define NID_pbeWithSHA1AndRC2_CBC 68 -#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L - -#define LN_id_pbkdf2 "PBKDF2" -#define NID_id_pbkdf2 69 -#define OBJ_id_pbkdf2 OBJ_pkcs5,12L - -#define LN_pbes2 "PBES2" -#define NID_pbes2 161 -#define OBJ_pbes2 OBJ_pkcs5,13L - -#define LN_pbmac1 "PBMAC1" -#define NID_pbmac1 162 -#define OBJ_pbmac1 OBJ_pkcs5,14L - -#define SN_pkcs7 "pkcs7" -#define NID_pkcs7 20 -#define OBJ_pkcs7 OBJ_pkcs,7L - -#define LN_pkcs7_data "pkcs7-data" -#define NID_pkcs7_data 21 -#define OBJ_pkcs7_data OBJ_pkcs7,1L - -#define LN_pkcs7_signed "pkcs7-signedData" -#define NID_pkcs7_signed 22 -#define OBJ_pkcs7_signed OBJ_pkcs7,2L - -#define LN_pkcs7_enveloped "pkcs7-envelopedData" -#define NID_pkcs7_enveloped 23 -#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -#define NID_pkcs7_signedAndEnveloped 24 -#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -#define LN_pkcs7_digest "pkcs7-digestData" -#define NID_pkcs7_digest 25 -#define OBJ_pkcs7_digest OBJ_pkcs7,5L - -#define LN_pkcs7_encrypted "pkcs7-encryptedData" -#define NID_pkcs7_encrypted 26 -#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -#define SN_pkcs9 "pkcs9" -#define NID_pkcs9 47 -#define OBJ_pkcs9 OBJ_pkcs,9L - -#define LN_pkcs9_emailAddress "emailAddress" -#define NID_pkcs9_emailAddress 48 -#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -#define LN_pkcs9_unstructuredName "unstructuredName" -#define NID_pkcs9_unstructuredName 49 -#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -#define LN_pkcs9_contentType "contentType" -#define NID_pkcs9_contentType 50 -#define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -#define LN_pkcs9_messageDigest "messageDigest" -#define NID_pkcs9_messageDigest 51 -#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -#define LN_pkcs9_signingTime "signingTime" -#define NID_pkcs9_signingTime 52 -#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -#define LN_pkcs9_countersignature "countersignature" -#define NID_pkcs9_countersignature 53 -#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -#define LN_pkcs9_challengePassword "challengePassword" -#define NID_pkcs9_challengePassword 54 -#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -#define LN_pkcs9_unstructuredAddress "unstructuredAddress" -#define NID_pkcs9_unstructuredAddress 55 -#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -#define NID_pkcs9_extCertAttributes 56 -#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -#define SN_ext_req "extReq" -#define LN_ext_req "Extension Request" -#define NID_ext_req 172 -#define OBJ_ext_req OBJ_pkcs9,14L - -#define SN_SMIMECapabilities "SMIME-CAPS" -#define LN_SMIMECapabilities "S/MIME Capabilities" -#define NID_SMIMECapabilities 167 -#define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -#define SN_SMIME "SMIME" -#define LN_SMIME "S/MIME" -#define NID_SMIME 188 -#define OBJ_SMIME OBJ_pkcs9,16L - -#define SN_id_smime_mod "id-smime-mod" -#define NID_id_smime_mod 189 -#define OBJ_id_smime_mod OBJ_SMIME,0L - -#define SN_id_smime_ct "id-smime-ct" -#define NID_id_smime_ct 190 -#define OBJ_id_smime_ct OBJ_SMIME,1L - -#define SN_id_smime_aa "id-smime-aa" -#define NID_id_smime_aa 191 -#define OBJ_id_smime_aa OBJ_SMIME,2L - -#define SN_id_smime_alg "id-smime-alg" -#define NID_id_smime_alg 192 -#define OBJ_id_smime_alg OBJ_SMIME,3L - -#define SN_id_smime_cd "id-smime-cd" -#define NID_id_smime_cd 193 -#define OBJ_id_smime_cd OBJ_SMIME,4L - -#define SN_id_smime_spq "id-smime-spq" -#define NID_id_smime_spq 194 -#define OBJ_id_smime_spq OBJ_SMIME,5L - -#define SN_id_smime_cti "id-smime-cti" -#define NID_id_smime_cti 195 -#define OBJ_id_smime_cti OBJ_SMIME,6L - -#define SN_id_smime_mod_cms "id-smime-mod-cms" -#define NID_id_smime_mod_cms 196 -#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L - -#define SN_id_smime_mod_ess "id-smime-mod-ess" -#define NID_id_smime_mod_ess 197 -#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L - -#define SN_id_smime_mod_oid "id-smime-mod-oid" -#define NID_id_smime_mod_oid 198 -#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L - -#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" -#define NID_id_smime_mod_msg_v3 199 -#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L - -#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" -#define NID_id_smime_mod_ets_eSignature_88 200 -#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L - -#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" -#define NID_id_smime_mod_ets_eSignature_97 201 -#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L - -#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" -#define NID_id_smime_mod_ets_eSigPolicy_88 202 -#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L - -#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" -#define NID_id_smime_mod_ets_eSigPolicy_97 203 -#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L - -#define SN_id_smime_ct_receipt "id-smime-ct-receipt" -#define NID_id_smime_ct_receipt 204 -#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L - -#define SN_id_smime_ct_authData "id-smime-ct-authData" -#define NID_id_smime_ct_authData 205 -#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L - -#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" -#define NID_id_smime_ct_publishCert 206 -#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L - -#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" -#define NID_id_smime_ct_TSTInfo 207 -#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L - -#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" -#define NID_id_smime_ct_TDTInfo 208 -#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L - -#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" -#define NID_id_smime_ct_contentInfo 209 -#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L - -#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" -#define NID_id_smime_ct_DVCSRequestData 210 -#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L - -#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" -#define NID_id_smime_ct_DVCSResponseData 211 -#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L - -#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" -#define NID_id_smime_ct_compressedData 786 -#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L - -#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" -#define NID_id_ct_asciiTextWithCRLF 787 -#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L - -#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" -#define NID_id_smime_aa_receiptRequest 212 -#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L - -#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" -#define NID_id_smime_aa_securityLabel 213 -#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L - -#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" -#define NID_id_smime_aa_mlExpandHistory 214 -#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L - -#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" -#define NID_id_smime_aa_contentHint 215 -#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L - -#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" -#define NID_id_smime_aa_msgSigDigest 216 -#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L - -#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" -#define NID_id_smime_aa_encapContentType 217 -#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L - -#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" -#define NID_id_smime_aa_contentIdentifier 218 -#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L - -#define SN_id_smime_aa_macValue "id-smime-aa-macValue" -#define NID_id_smime_aa_macValue 219 -#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L - -#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" -#define NID_id_smime_aa_equivalentLabels 220 -#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L - -#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" -#define NID_id_smime_aa_contentReference 221 -#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L - -#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" -#define NID_id_smime_aa_encrypKeyPref 222 -#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L - -#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" -#define NID_id_smime_aa_signingCertificate 223 -#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L - -#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" -#define NID_id_smime_aa_smimeEncryptCerts 224 -#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L - -#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" -#define NID_id_smime_aa_timeStampToken 225 -#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L - -#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" -#define NID_id_smime_aa_ets_sigPolicyId 226 -#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L - -#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" -#define NID_id_smime_aa_ets_commitmentType 227 -#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L - -#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" -#define NID_id_smime_aa_ets_signerLocation 228 -#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L - -#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" -#define NID_id_smime_aa_ets_signerAttr 229 -#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L - -#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" -#define NID_id_smime_aa_ets_otherSigCert 230 -#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L - -#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" -#define NID_id_smime_aa_ets_contentTimestamp 231 -#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L - -#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" -#define NID_id_smime_aa_ets_CertificateRefs 232 -#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L - -#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" -#define NID_id_smime_aa_ets_RevocationRefs 233 -#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L - -#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" -#define NID_id_smime_aa_ets_certValues 234 -#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L - -#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" -#define NID_id_smime_aa_ets_revocationValues 235 -#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L - -#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" -#define NID_id_smime_aa_ets_escTimeStamp 236 -#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L - -#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" -#define NID_id_smime_aa_ets_certCRLTimestamp 237 -#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L - -#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" -#define NID_id_smime_aa_ets_archiveTimeStamp 238 -#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L - -#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" -#define NID_id_smime_aa_signatureType 239 -#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L - -#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" -#define NID_id_smime_aa_dvcs_dvc 240 -#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L - -#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" -#define NID_id_smime_alg_ESDHwith3DES 241 -#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L - -#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" -#define NID_id_smime_alg_ESDHwithRC2 242 -#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L - -#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" -#define NID_id_smime_alg_3DESwrap 243 -#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L - -#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" -#define NID_id_smime_alg_RC2wrap 244 -#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L - -#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" -#define NID_id_smime_alg_ESDH 245 -#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L - -#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" -#define NID_id_smime_alg_CMS3DESwrap 246 -#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L - -#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" -#define NID_id_smime_alg_CMSRC2wrap 247 -#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L - -#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" -#define NID_id_alg_PWRI_KEK 893 -#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L - -#define SN_id_smime_cd_ldap "id-smime-cd-ldap" -#define NID_id_smime_cd_ldap 248 -#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L - -#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" -#define NID_id_smime_spq_ets_sqt_uri 249 -#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L - -#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" -#define NID_id_smime_spq_ets_sqt_unotice 250 -#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L - -#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" -#define NID_id_smime_cti_ets_proofOfOrigin 251 -#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L - -#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" -#define NID_id_smime_cti_ets_proofOfReceipt 252 -#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L - -#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" -#define NID_id_smime_cti_ets_proofOfDelivery 253 -#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L - -#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" -#define NID_id_smime_cti_ets_proofOfSender 254 -#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L - -#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" -#define NID_id_smime_cti_ets_proofOfApproval 255 -#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L - -#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" -#define NID_id_smime_cti_ets_proofOfCreation 256 -#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L - -#define LN_friendlyName "friendlyName" -#define NID_friendlyName 156 -#define OBJ_friendlyName OBJ_pkcs9,20L - -#define LN_localKeyID "localKeyID" -#define NID_localKeyID 157 -#define OBJ_localKeyID OBJ_pkcs9,21L - -#define SN_ms_csp_name "CSPName" -#define LN_ms_csp_name "Microsoft CSP Name" -#define NID_ms_csp_name 417 -#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L - -#define SN_LocalKeySet "LocalKeySet" -#define LN_LocalKeySet "Microsoft Local Key set" -#define NID_LocalKeySet 856 -#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L - -#define OBJ_certTypes OBJ_pkcs9,22L - -#define LN_x509Certificate "x509Certificate" -#define NID_x509Certificate 158 -#define OBJ_x509Certificate OBJ_certTypes,1L - -#define LN_sdsiCertificate "sdsiCertificate" -#define NID_sdsiCertificate 159 -#define OBJ_sdsiCertificate OBJ_certTypes,2L - -#define OBJ_crlTypes OBJ_pkcs9,23L - -#define LN_x509Crl "x509Crl" -#define NID_x509Crl 160 -#define OBJ_x509Crl OBJ_crlTypes,1L - -#define OBJ_pkcs12 OBJ_pkcs,12L - -#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L - -#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -#define NID_pbe_WithSHA1And128BitRC4 144 -#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L - -#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -#define NID_pbe_WithSHA1And40BitRC4 145 -#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L - -#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L - -#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L - -#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -#define NID_pbe_WithSHA1And128BitRC2_CBC 148 -#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L - -#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -#define NID_pbe_WithSHA1And40BitRC2_CBC 149 -#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L - -#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L - -#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L - -#define LN_keyBag "keyBag" -#define NID_keyBag 150 -#define OBJ_keyBag OBJ_pkcs12_BagIds,1L - -#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -#define NID_pkcs8ShroudedKeyBag 151 -#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L - -#define LN_certBag "certBag" -#define NID_certBag 152 -#define OBJ_certBag OBJ_pkcs12_BagIds,3L - -#define LN_crlBag "crlBag" -#define NID_crlBag 153 -#define OBJ_crlBag OBJ_pkcs12_BagIds,4L - -#define LN_secretBag "secretBag" -#define NID_secretBag 154 -#define OBJ_secretBag OBJ_pkcs12_BagIds,5L - -#define LN_safeContentsBag "safeContentsBag" -#define NID_safeContentsBag 155 -#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L - -#define SN_md2 "MD2" -#define LN_md2 "md2" -#define NID_md2 3 -#define OBJ_md2 OBJ_rsadsi,2L,2L - -#define SN_md4 "MD4" -#define LN_md4 "md4" -#define NID_md4 257 -#define OBJ_md4 OBJ_rsadsi,2L,4L - -#define SN_md5 "MD5" -#define LN_md5 "md5" -#define NID_md5 4 -#define OBJ_md5 OBJ_rsadsi,2L,5L - -#define SN_md5_sha1 "MD5-SHA1" -#define LN_md5_sha1 "md5-sha1" -#define NID_md5_sha1 114 - -#define LN_hmacWithMD5 "hmacWithMD5" -#define NID_hmacWithMD5 797 -#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L - -#define LN_hmacWithSHA1 "hmacWithSHA1" -#define NID_hmacWithSHA1 163 -#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -#define LN_hmacWithSHA224 "hmacWithSHA224" -#define NID_hmacWithSHA224 798 -#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L - -#define LN_hmacWithSHA256 "hmacWithSHA256" -#define NID_hmacWithSHA256 799 -#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L - -#define LN_hmacWithSHA384 "hmacWithSHA384" -#define NID_hmacWithSHA384 800 -#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L - -#define LN_hmacWithSHA512 "hmacWithSHA512" -#define NID_hmacWithSHA512 801 -#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L - -#define SN_rc2_cbc "RC2-CBC" -#define LN_rc2_cbc "rc2-cbc" -#define NID_rc2_cbc 37 -#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -#define SN_rc2_ecb "RC2-ECB" -#define LN_rc2_ecb "rc2-ecb" -#define NID_rc2_ecb 38 - -#define SN_rc2_cfb64 "RC2-CFB" -#define LN_rc2_cfb64 "rc2-cfb" -#define NID_rc2_cfb64 39 - -#define SN_rc2_ofb64 "RC2-OFB" -#define LN_rc2_ofb64 "rc2-ofb" -#define NID_rc2_ofb64 40 - -#define SN_rc2_40_cbc "RC2-40-CBC" -#define LN_rc2_40_cbc "rc2-40-cbc" -#define NID_rc2_40_cbc 98 - -#define SN_rc2_64_cbc "RC2-64-CBC" -#define LN_rc2_64_cbc "rc2-64-cbc" -#define NID_rc2_64_cbc 166 - -#define SN_rc4 "RC4" -#define LN_rc4 "rc4" -#define NID_rc4 5 -#define OBJ_rc4 OBJ_rsadsi,3L,4L - -#define SN_rc4_40 "RC4-40" -#define LN_rc4_40 "rc4-40" -#define NID_rc4_40 97 - -#define SN_des_ede3_cbc "DES-EDE3-CBC" -#define LN_des_ede3_cbc "des-ede3-cbc" -#define NID_des_ede3_cbc 44 -#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -#define SN_rc5_cbc "RC5-CBC" -#define LN_rc5_cbc "rc5-cbc" -#define NID_rc5_cbc 120 -#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -#define SN_rc5_ecb "RC5-ECB" -#define LN_rc5_ecb "rc5-ecb" -#define NID_rc5_ecb 121 - -#define SN_rc5_cfb64 "RC5-CFB" -#define LN_rc5_cfb64 "rc5-cfb" -#define NID_rc5_cfb64 122 - -#define SN_rc5_ofb64 "RC5-OFB" -#define LN_rc5_ofb64 "rc5-ofb" -#define NID_rc5_ofb64 123 - -#define SN_ms_ext_req "msExtReq" -#define LN_ms_ext_req "Microsoft Extension Request" -#define NID_ms_ext_req 171 -#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -#define SN_ms_code_ind "msCodeInd" -#define LN_ms_code_ind "Microsoft Individual Code Signing" -#define NID_ms_code_ind 134 -#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -#define SN_ms_code_com "msCodeCom" -#define LN_ms_code_com "Microsoft Commercial Code Signing" -#define NID_ms_code_com 135 -#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -#define SN_ms_ctl_sign "msCTLSign" -#define LN_ms_ctl_sign "Microsoft Trust List Signing" -#define NID_ms_ctl_sign 136 -#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -#define SN_ms_sgc "msSGC" -#define LN_ms_sgc "Microsoft Server Gated Crypto" -#define NID_ms_sgc 137 -#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -#define SN_ms_efs "msEFS" -#define LN_ms_efs "Microsoft Encrypted File System" -#define NID_ms_efs 138 -#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -#define SN_ms_smartcard_login "msSmartcardLogin" -#define LN_ms_smartcard_login "Microsoft Smartcardlogin" -#define NID_ms_smartcard_login 648 -#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L - -#define SN_ms_upn "msUPN" -#define LN_ms_upn "Microsoft Universal Principal Name" -#define NID_ms_upn 649 -#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L - -#define SN_idea_cbc "IDEA-CBC" -#define LN_idea_cbc "idea-cbc" -#define NID_idea_cbc 34 -#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -#define SN_idea_ecb "IDEA-ECB" -#define LN_idea_ecb "idea-ecb" -#define NID_idea_ecb 36 - -#define SN_idea_cfb64 "IDEA-CFB" -#define LN_idea_cfb64 "idea-cfb" -#define NID_idea_cfb64 35 - -#define SN_idea_ofb64 "IDEA-OFB" -#define LN_idea_ofb64 "idea-ofb" -#define NID_idea_ofb64 46 - -#define SN_bf_cbc "BF-CBC" -#define LN_bf_cbc "bf-cbc" -#define NID_bf_cbc 91 -#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -#define SN_bf_ecb "BF-ECB" -#define LN_bf_ecb "bf-ecb" -#define NID_bf_ecb 92 - -#define SN_bf_cfb64 "BF-CFB" -#define LN_bf_cfb64 "bf-cfb" -#define NID_bf_cfb64 93 - -#define SN_bf_ofb64 "BF-OFB" -#define LN_bf_ofb64 "bf-ofb" -#define NID_bf_ofb64 94 - -#define SN_id_pkix "PKIX" -#define NID_id_pkix 127 -#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -#define SN_id_pkix_mod "id-pkix-mod" -#define NID_id_pkix_mod 258 -#define OBJ_id_pkix_mod OBJ_id_pkix,0L - -#define SN_id_pe "id-pe" -#define NID_id_pe 175 -#define OBJ_id_pe OBJ_id_pkix,1L - -#define SN_id_qt "id-qt" -#define NID_id_qt 259 -#define OBJ_id_qt OBJ_id_pkix,2L - -#define SN_id_kp "id-kp" -#define NID_id_kp 128 -#define OBJ_id_kp OBJ_id_pkix,3L - -#define SN_id_it "id-it" -#define NID_id_it 260 -#define OBJ_id_it OBJ_id_pkix,4L - -#define SN_id_pkip "id-pkip" -#define NID_id_pkip 261 -#define OBJ_id_pkip OBJ_id_pkix,5L - -#define SN_id_alg "id-alg" -#define NID_id_alg 262 -#define OBJ_id_alg OBJ_id_pkix,6L - -#define SN_id_cmc "id-cmc" -#define NID_id_cmc 263 -#define OBJ_id_cmc OBJ_id_pkix,7L - -#define SN_id_on "id-on" -#define NID_id_on 264 -#define OBJ_id_on OBJ_id_pkix,8L - -#define SN_id_pda "id-pda" -#define NID_id_pda 265 -#define OBJ_id_pda OBJ_id_pkix,9L - -#define SN_id_aca "id-aca" -#define NID_id_aca 266 -#define OBJ_id_aca OBJ_id_pkix,10L - -#define SN_id_qcs "id-qcs" -#define NID_id_qcs 267 -#define OBJ_id_qcs OBJ_id_pkix,11L - -#define SN_id_cct "id-cct" -#define NID_id_cct 268 -#define OBJ_id_cct OBJ_id_pkix,12L - -#define SN_id_ppl "id-ppl" -#define NID_id_ppl 662 -#define OBJ_id_ppl OBJ_id_pkix,21L - -#define SN_id_ad "id-ad" -#define NID_id_ad 176 -#define OBJ_id_ad OBJ_id_pkix,48L - -#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" -#define NID_id_pkix1_explicit_88 269 -#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L - -#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" -#define NID_id_pkix1_implicit_88 270 -#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L - -#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" -#define NID_id_pkix1_explicit_93 271 -#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L - -#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" -#define NID_id_pkix1_implicit_93 272 -#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L - -#define SN_id_mod_crmf "id-mod-crmf" -#define NID_id_mod_crmf 273 -#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L - -#define SN_id_mod_cmc "id-mod-cmc" -#define NID_id_mod_cmc 274 -#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L - -#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" -#define NID_id_mod_kea_profile_88 275 -#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L - -#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" -#define NID_id_mod_kea_profile_93 276 -#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L - -#define SN_id_mod_cmp "id-mod-cmp" -#define NID_id_mod_cmp 277 -#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L - -#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" -#define NID_id_mod_qualified_cert_88 278 -#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L - -#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" -#define NID_id_mod_qualified_cert_93 279 -#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L - -#define SN_id_mod_attribute_cert "id-mod-attribute-cert" -#define NID_id_mod_attribute_cert 280 -#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L - -#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" -#define NID_id_mod_timestamp_protocol 281 -#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L - -#define SN_id_mod_ocsp "id-mod-ocsp" -#define NID_id_mod_ocsp 282 -#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L - -#define SN_id_mod_dvcs "id-mod-dvcs" -#define NID_id_mod_dvcs 283 -#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L - -#define SN_id_mod_cmp2000 "id-mod-cmp2000" -#define NID_id_mod_cmp2000 284 -#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L - -#define SN_info_access "authorityInfoAccess" -#define LN_info_access "Authority Information Access" -#define NID_info_access 177 -#define OBJ_info_access OBJ_id_pe,1L - -#define SN_biometricInfo "biometricInfo" -#define LN_biometricInfo "Biometric Info" -#define NID_biometricInfo 285 -#define OBJ_biometricInfo OBJ_id_pe,2L - -#define SN_qcStatements "qcStatements" -#define NID_qcStatements 286 -#define OBJ_qcStatements OBJ_id_pe,3L - -#define SN_ac_auditEntity "ac-auditEntity" -#define NID_ac_auditEntity 287 -#define OBJ_ac_auditEntity OBJ_id_pe,4L - -#define SN_ac_targeting "ac-targeting" -#define NID_ac_targeting 288 -#define OBJ_ac_targeting OBJ_id_pe,5L - -#define SN_aaControls "aaControls" -#define NID_aaControls 289 -#define OBJ_aaControls OBJ_id_pe,6L - -#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" -#define NID_sbgp_ipAddrBlock 290 -#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L - -#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" -#define NID_sbgp_autonomousSysNum 291 -#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L - -#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" -#define NID_sbgp_routerIdentifier 292 -#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L - -#define SN_ac_proxying "ac-proxying" -#define NID_ac_proxying 397 -#define OBJ_ac_proxying OBJ_id_pe,10L - -#define SN_sinfo_access "subjectInfoAccess" -#define LN_sinfo_access "Subject Information Access" -#define NID_sinfo_access 398 -#define OBJ_sinfo_access OBJ_id_pe,11L - -#define SN_proxyCertInfo "proxyCertInfo" -#define LN_proxyCertInfo "Proxy Certificate Information" -#define NID_proxyCertInfo 663 -#define OBJ_proxyCertInfo OBJ_id_pe,14L - -#define SN_id_qt_cps "id-qt-cps" -#define LN_id_qt_cps "Policy Qualifier CPS" -#define NID_id_qt_cps 164 -#define OBJ_id_qt_cps OBJ_id_qt,1L - -#define SN_id_qt_unotice "id-qt-unotice" -#define LN_id_qt_unotice "Policy Qualifier User Notice" -#define NID_id_qt_unotice 165 -#define OBJ_id_qt_unotice OBJ_id_qt,2L - -#define SN_textNotice "textNotice" -#define NID_textNotice 293 -#define OBJ_textNotice OBJ_id_qt,3L - -#define SN_server_auth "serverAuth" -#define LN_server_auth "TLS Web Server Authentication" -#define NID_server_auth 129 -#define OBJ_server_auth OBJ_id_kp,1L - -#define SN_client_auth "clientAuth" -#define LN_client_auth "TLS Web Client Authentication" -#define NID_client_auth 130 -#define OBJ_client_auth OBJ_id_kp,2L - -#define SN_code_sign "codeSigning" -#define LN_code_sign "Code Signing" -#define NID_code_sign 131 -#define OBJ_code_sign OBJ_id_kp,3L - -#define SN_email_protect "emailProtection" -#define LN_email_protect "E-mail Protection" -#define NID_email_protect 132 -#define OBJ_email_protect OBJ_id_kp,4L - -#define SN_ipsecEndSystem "ipsecEndSystem" -#define LN_ipsecEndSystem "IPSec End System" -#define NID_ipsecEndSystem 294 -#define OBJ_ipsecEndSystem OBJ_id_kp,5L - -#define SN_ipsecTunnel "ipsecTunnel" -#define LN_ipsecTunnel "IPSec Tunnel" -#define NID_ipsecTunnel 295 -#define OBJ_ipsecTunnel OBJ_id_kp,6L - -#define SN_ipsecUser "ipsecUser" -#define LN_ipsecUser "IPSec User" -#define NID_ipsecUser 296 -#define OBJ_ipsecUser OBJ_id_kp,7L - -#define SN_time_stamp "timeStamping" -#define LN_time_stamp "Time Stamping" -#define NID_time_stamp 133 -#define OBJ_time_stamp OBJ_id_kp,8L - -#define SN_OCSP_sign "OCSPSigning" -#define LN_OCSP_sign "OCSP Signing" -#define NID_OCSP_sign 180 -#define OBJ_OCSP_sign OBJ_id_kp,9L - -#define SN_dvcs "DVCS" -#define LN_dvcs "dvcs" -#define NID_dvcs 297 -#define OBJ_dvcs OBJ_id_kp,10L - -#define SN_id_it_caProtEncCert "id-it-caProtEncCert" -#define NID_id_it_caProtEncCert 298 -#define OBJ_id_it_caProtEncCert OBJ_id_it,1L - -#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" -#define NID_id_it_signKeyPairTypes 299 -#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L - -#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" -#define NID_id_it_encKeyPairTypes 300 -#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L - -#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" -#define NID_id_it_preferredSymmAlg 301 -#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L - -#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" -#define NID_id_it_caKeyUpdateInfo 302 -#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L - -#define SN_id_it_currentCRL "id-it-currentCRL" -#define NID_id_it_currentCRL 303 -#define OBJ_id_it_currentCRL OBJ_id_it,6L - -#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" -#define NID_id_it_unsupportedOIDs 304 -#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L - -#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" -#define NID_id_it_subscriptionRequest 305 -#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L - -#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" -#define NID_id_it_subscriptionResponse 306 -#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L - -#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" -#define NID_id_it_keyPairParamReq 307 -#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L - -#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" -#define NID_id_it_keyPairParamRep 308 -#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L - -#define SN_id_it_revPassphrase "id-it-revPassphrase" -#define NID_id_it_revPassphrase 309 -#define OBJ_id_it_revPassphrase OBJ_id_it,12L - -#define SN_id_it_implicitConfirm "id-it-implicitConfirm" -#define NID_id_it_implicitConfirm 310 -#define OBJ_id_it_implicitConfirm OBJ_id_it,13L - -#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" -#define NID_id_it_confirmWaitTime 311 -#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L - -#define SN_id_it_origPKIMessage "id-it-origPKIMessage" -#define NID_id_it_origPKIMessage 312 -#define OBJ_id_it_origPKIMessage OBJ_id_it,15L - -#define SN_id_it_suppLangTags "id-it-suppLangTags" -#define NID_id_it_suppLangTags 784 -#define OBJ_id_it_suppLangTags OBJ_id_it,16L - -#define SN_id_regCtrl "id-regCtrl" -#define NID_id_regCtrl 313 -#define OBJ_id_regCtrl OBJ_id_pkip,1L - -#define SN_id_regInfo "id-regInfo" -#define NID_id_regInfo 314 -#define OBJ_id_regInfo OBJ_id_pkip,2L - -#define SN_id_regCtrl_regToken "id-regCtrl-regToken" -#define NID_id_regCtrl_regToken 315 -#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L - -#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" -#define NID_id_regCtrl_authenticator 316 -#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L - -#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" -#define NID_id_regCtrl_pkiPublicationInfo 317 -#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L - -#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" -#define NID_id_regCtrl_pkiArchiveOptions 318 -#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L - -#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" -#define NID_id_regCtrl_oldCertID 319 -#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L - -#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" -#define NID_id_regCtrl_protocolEncrKey 320 -#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L - -#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" -#define NID_id_regInfo_utf8Pairs 321 -#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L - -#define SN_id_regInfo_certReq "id-regInfo-certReq" -#define NID_id_regInfo_certReq 322 -#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L - -#define SN_id_alg_des40 "id-alg-des40" -#define NID_id_alg_des40 323 -#define OBJ_id_alg_des40 OBJ_id_alg,1L - -#define SN_id_alg_noSignature "id-alg-noSignature" -#define NID_id_alg_noSignature 324 -#define OBJ_id_alg_noSignature OBJ_id_alg,2L - -#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" -#define NID_id_alg_dh_sig_hmac_sha1 325 -#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L - -#define SN_id_alg_dh_pop "id-alg-dh-pop" -#define NID_id_alg_dh_pop 326 -#define OBJ_id_alg_dh_pop OBJ_id_alg,4L - -#define SN_id_cmc_statusInfo "id-cmc-statusInfo" -#define NID_id_cmc_statusInfo 327 -#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L - -#define SN_id_cmc_identification "id-cmc-identification" -#define NID_id_cmc_identification 328 -#define OBJ_id_cmc_identification OBJ_id_cmc,2L - -#define SN_id_cmc_identityProof "id-cmc-identityProof" -#define NID_id_cmc_identityProof 329 -#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L - -#define SN_id_cmc_dataReturn "id-cmc-dataReturn" -#define NID_id_cmc_dataReturn 330 -#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L - -#define SN_id_cmc_transactionId "id-cmc-transactionId" -#define NID_id_cmc_transactionId 331 -#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L - -#define SN_id_cmc_senderNonce "id-cmc-senderNonce" -#define NID_id_cmc_senderNonce 332 -#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L - -#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" -#define NID_id_cmc_recipientNonce 333 -#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L - -#define SN_id_cmc_addExtensions "id-cmc-addExtensions" -#define NID_id_cmc_addExtensions 334 -#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L - -#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" -#define NID_id_cmc_encryptedPOP 335 -#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L - -#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" -#define NID_id_cmc_decryptedPOP 336 -#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L - -#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" -#define NID_id_cmc_lraPOPWitness 337 -#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L - -#define SN_id_cmc_getCert "id-cmc-getCert" -#define NID_id_cmc_getCert 338 -#define OBJ_id_cmc_getCert OBJ_id_cmc,15L - -#define SN_id_cmc_getCRL "id-cmc-getCRL" -#define NID_id_cmc_getCRL 339 -#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L - -#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" -#define NID_id_cmc_revokeRequest 340 -#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L - -#define SN_id_cmc_regInfo "id-cmc-regInfo" -#define NID_id_cmc_regInfo 341 -#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L - -#define SN_id_cmc_responseInfo "id-cmc-responseInfo" -#define NID_id_cmc_responseInfo 342 -#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L - -#define SN_id_cmc_queryPending "id-cmc-queryPending" -#define NID_id_cmc_queryPending 343 -#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L - -#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" -#define NID_id_cmc_popLinkRandom 344 -#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L - -#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" -#define NID_id_cmc_popLinkWitness 345 -#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L - -#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" -#define NID_id_cmc_confirmCertAcceptance 346 -#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L - -#define SN_id_on_personalData "id-on-personalData" -#define NID_id_on_personalData 347 -#define OBJ_id_on_personalData OBJ_id_on,1L - -#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" -#define LN_id_on_permanentIdentifier "Permanent Identifier" -#define NID_id_on_permanentIdentifier 858 -#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L - -#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" -#define NID_id_pda_dateOfBirth 348 -#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L - -#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" -#define NID_id_pda_placeOfBirth 349 -#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L - -#define SN_id_pda_gender "id-pda-gender" -#define NID_id_pda_gender 351 -#define OBJ_id_pda_gender OBJ_id_pda,3L - -#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" -#define NID_id_pda_countryOfCitizenship 352 -#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L - -#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" -#define NID_id_pda_countryOfResidence 353 -#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L - -#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" -#define NID_id_aca_authenticationInfo 354 -#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L - -#define SN_id_aca_accessIdentity "id-aca-accessIdentity" -#define NID_id_aca_accessIdentity 355 -#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L - -#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" -#define NID_id_aca_chargingIdentity 356 -#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L - -#define SN_id_aca_group "id-aca-group" -#define NID_id_aca_group 357 -#define OBJ_id_aca_group OBJ_id_aca,4L - -#define SN_id_aca_role "id-aca-role" -#define NID_id_aca_role 358 -#define OBJ_id_aca_role OBJ_id_aca,5L - -#define SN_id_aca_encAttrs "id-aca-encAttrs" -#define NID_id_aca_encAttrs 399 -#define OBJ_id_aca_encAttrs OBJ_id_aca,6L - -#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" -#define NID_id_qcs_pkixQCSyntax_v1 359 -#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L - -#define SN_id_cct_crs "id-cct-crs" -#define NID_id_cct_crs 360 -#define OBJ_id_cct_crs OBJ_id_cct,1L - -#define SN_id_cct_PKIData "id-cct-PKIData" -#define NID_id_cct_PKIData 361 -#define OBJ_id_cct_PKIData OBJ_id_cct,2L - -#define SN_id_cct_PKIResponse "id-cct-PKIResponse" -#define NID_id_cct_PKIResponse 362 -#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L - -#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" -#define LN_id_ppl_anyLanguage "Any language" -#define NID_id_ppl_anyLanguage 664 -#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L - -#define SN_id_ppl_inheritAll "id-ppl-inheritAll" -#define LN_id_ppl_inheritAll "Inherit all" -#define NID_id_ppl_inheritAll 665 -#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L - -#define SN_Independent "id-ppl-independent" -#define LN_Independent "Independent" -#define NID_Independent 667 -#define OBJ_Independent OBJ_id_ppl,2L - -#define SN_ad_OCSP "OCSP" -#define LN_ad_OCSP "OCSP" -#define NID_ad_OCSP 178 -#define OBJ_ad_OCSP OBJ_id_ad,1L - -#define SN_ad_ca_issuers "caIssuers" -#define LN_ad_ca_issuers "CA Issuers" -#define NID_ad_ca_issuers 179 -#define OBJ_ad_ca_issuers OBJ_id_ad,2L - -#define SN_ad_timeStamping "ad_timestamping" -#define LN_ad_timeStamping "AD Time Stamping" -#define NID_ad_timeStamping 363 -#define OBJ_ad_timeStamping OBJ_id_ad,3L - -#define SN_ad_dvcs "AD_DVCS" -#define LN_ad_dvcs "ad dvcs" -#define NID_ad_dvcs 364 -#define OBJ_ad_dvcs OBJ_id_ad,4L - -#define SN_caRepository "caRepository" -#define LN_caRepository "CA Repository" -#define NID_caRepository 785 -#define OBJ_caRepository OBJ_id_ad,5L - -#define OBJ_id_pkix_OCSP OBJ_ad_OCSP - -#define SN_id_pkix_OCSP_basic "basicOCSPResponse" -#define LN_id_pkix_OCSP_basic "Basic OCSP Response" -#define NID_id_pkix_OCSP_basic 365 -#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L - -#define SN_id_pkix_OCSP_Nonce "Nonce" -#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" -#define NID_id_pkix_OCSP_Nonce 366 -#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L - -#define SN_id_pkix_OCSP_CrlID "CrlID" -#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" -#define NID_id_pkix_OCSP_CrlID 367 -#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L - -#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" -#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" -#define NID_id_pkix_OCSP_acceptableResponses 368 -#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L - -#define SN_id_pkix_OCSP_noCheck "noCheck" -#define LN_id_pkix_OCSP_noCheck "OCSP No Check" -#define NID_id_pkix_OCSP_noCheck 369 -#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L - -#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" -#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" -#define NID_id_pkix_OCSP_archiveCutoff 370 -#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L - -#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" -#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" -#define NID_id_pkix_OCSP_serviceLocator 371 -#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L - -#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" -#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" -#define NID_id_pkix_OCSP_extendedStatus 372 -#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L - -#define SN_id_pkix_OCSP_valid "valid" -#define NID_id_pkix_OCSP_valid 373 -#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L - -#define SN_id_pkix_OCSP_path "path" -#define NID_id_pkix_OCSP_path 374 -#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L - -#define SN_id_pkix_OCSP_trustRoot "trustRoot" -#define LN_id_pkix_OCSP_trustRoot "Trust Root" -#define NID_id_pkix_OCSP_trustRoot 375 -#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L - -#define SN_algorithm "algorithm" -#define LN_algorithm "algorithm" -#define NID_algorithm 376 -#define OBJ_algorithm 1L,3L,14L,3L,2L - -#define SN_md5WithRSA "RSA-NP-MD5" -#define LN_md5WithRSA "md5WithRSA" -#define NID_md5WithRSA 104 -#define OBJ_md5WithRSA OBJ_algorithm,3L - -#define SN_des_ecb "DES-ECB" -#define LN_des_ecb "des-ecb" -#define NID_des_ecb 29 -#define OBJ_des_ecb OBJ_algorithm,6L - -#define SN_des_cbc "DES-CBC" -#define LN_des_cbc "des-cbc" -#define NID_des_cbc 31 -#define OBJ_des_cbc OBJ_algorithm,7L - -#define SN_des_ofb64 "DES-OFB" -#define LN_des_ofb64 "des-ofb" -#define NID_des_ofb64 45 -#define OBJ_des_ofb64 OBJ_algorithm,8L - -#define SN_des_cfb64 "DES-CFB" -#define LN_des_cfb64 "des-cfb" -#define NID_des_cfb64 30 -#define OBJ_des_cfb64 OBJ_algorithm,9L - -#define SN_rsaSignature "rsaSignature" -#define NID_rsaSignature 377 -#define OBJ_rsaSignature OBJ_algorithm,11L - -#define SN_dsa_2 "DSA-old" -#define LN_dsa_2 "dsaEncryption-old" -#define NID_dsa_2 67 -#define OBJ_dsa_2 OBJ_algorithm,12L - -#define SN_dsaWithSHA "DSA-SHA" -#define LN_dsaWithSHA "dsaWithSHA" -#define NID_dsaWithSHA 66 -#define OBJ_dsaWithSHA OBJ_algorithm,13L - -#define SN_shaWithRSAEncryption "RSA-SHA" -#define LN_shaWithRSAEncryption "shaWithRSAEncryption" -#define NID_shaWithRSAEncryption 42 -#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -#define SN_des_ede_ecb "DES-EDE" -#define LN_des_ede_ecb "des-ede" -#define NID_des_ede_ecb 32 -#define OBJ_des_ede_ecb OBJ_algorithm,17L - -#define SN_des_ede3_ecb "DES-EDE3" -#define LN_des_ede3_ecb "des-ede3" -#define NID_des_ede3_ecb 33 - -#define SN_des_ede_cbc "DES-EDE-CBC" -#define LN_des_ede_cbc "des-ede-cbc" -#define NID_des_ede_cbc 43 - -#define SN_des_ede_cfb64 "DES-EDE-CFB" -#define LN_des_ede_cfb64 "des-ede-cfb" -#define NID_des_ede_cfb64 60 - -#define SN_des_ede3_cfb64 "DES-EDE3-CFB" -#define LN_des_ede3_cfb64 "des-ede3-cfb" -#define NID_des_ede3_cfb64 61 - -#define SN_des_ede_ofb64 "DES-EDE-OFB" -#define LN_des_ede_ofb64 "des-ede-ofb" -#define NID_des_ede_ofb64 62 - -#define SN_des_ede3_ofb64 "DES-EDE3-OFB" -#define LN_des_ede3_ofb64 "des-ede3-ofb" -#define NID_des_ede3_ofb64 63 - -#define SN_desx_cbc "DESX-CBC" -#define LN_desx_cbc "desx-cbc" -#define NID_desx_cbc 80 - -#define SN_sha "SHA" -#define LN_sha "sha" -#define NID_sha 41 -#define OBJ_sha OBJ_algorithm,18L - -#define SN_sha1 "SHA1" -#define LN_sha1 "sha1" -#define NID_sha1 64 -#define OBJ_sha1 OBJ_algorithm,26L - -#define SN_dsaWithSHA1_2 "DSA-SHA1-old" -#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -#define NID_dsaWithSHA1_2 70 -#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -#define SN_sha1WithRSA "RSA-SHA1-2" -#define LN_sha1WithRSA "sha1WithRSA" -#define NID_sha1WithRSA 115 -#define OBJ_sha1WithRSA OBJ_algorithm,29L - -#define SN_ripemd160 "RIPEMD160" -#define LN_ripemd160 "ripemd160" -#define NID_ripemd160 117 -#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -#define SN_ripemd160WithRSA "RSA-RIPEMD160" -#define LN_ripemd160WithRSA "ripemd160WithRSA" -#define NID_ripemd160WithRSA 119 -#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -#define SN_sxnet "SXNetID" -#define LN_sxnet "Strong Extranet ID" -#define NID_sxnet 143 -#define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -#define SN_X500 "X500" -#define LN_X500 "directory services (X.500)" -#define NID_X500 11 -#define OBJ_X500 2L,5L - -#define SN_X509 "X509" -#define NID_X509 12 -#define OBJ_X509 OBJ_X500,4L - -#define SN_commonName "CN" -#define LN_commonName "commonName" -#define NID_commonName 13 -#define OBJ_commonName OBJ_X509,3L - -#define SN_surname "SN" -#define LN_surname "surname" -#define NID_surname 100 -#define OBJ_surname OBJ_X509,4L - -#define LN_serialNumber "serialNumber" -#define NID_serialNumber 105 -#define OBJ_serialNumber OBJ_X509,5L - -#define SN_countryName "C" -#define LN_countryName "countryName" -#define NID_countryName 14 -#define OBJ_countryName OBJ_X509,6L - -#define SN_localityName "L" -#define LN_localityName "localityName" -#define NID_localityName 15 -#define OBJ_localityName OBJ_X509,7L - -#define SN_stateOrProvinceName "ST" -#define LN_stateOrProvinceName "stateOrProvinceName" -#define NID_stateOrProvinceName 16 -#define OBJ_stateOrProvinceName OBJ_X509,8L - -#define SN_streetAddress "street" -#define LN_streetAddress "streetAddress" -#define NID_streetAddress 660 -#define OBJ_streetAddress OBJ_X509,9L - -#define SN_organizationName "O" -#define LN_organizationName "organizationName" -#define NID_organizationName 17 -#define OBJ_organizationName OBJ_X509,10L - -#define SN_organizationalUnitName "OU" -#define LN_organizationalUnitName "organizationalUnitName" -#define NID_organizationalUnitName 18 -#define OBJ_organizationalUnitName OBJ_X509,11L - -#define SN_title "title" -#define LN_title "title" -#define NID_title 106 -#define OBJ_title OBJ_X509,12L - -#define LN_description "description" -#define NID_description 107 -#define OBJ_description OBJ_X509,13L - -#define LN_searchGuide "searchGuide" -#define NID_searchGuide 859 -#define OBJ_searchGuide OBJ_X509,14L - -#define LN_businessCategory "businessCategory" -#define NID_businessCategory 860 -#define OBJ_businessCategory OBJ_X509,15L - -#define LN_postalAddress "postalAddress" -#define NID_postalAddress 861 -#define OBJ_postalAddress OBJ_X509,16L - -#define LN_postalCode "postalCode" -#define NID_postalCode 661 -#define OBJ_postalCode OBJ_X509,17L - -#define LN_postOfficeBox "postOfficeBox" -#define NID_postOfficeBox 862 -#define OBJ_postOfficeBox OBJ_X509,18L - -#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" -#define NID_physicalDeliveryOfficeName 863 -#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L - -#define LN_telephoneNumber "telephoneNumber" -#define NID_telephoneNumber 864 -#define OBJ_telephoneNumber OBJ_X509,20L - -#define LN_telexNumber "telexNumber" -#define NID_telexNumber 865 -#define OBJ_telexNumber OBJ_X509,21L - -#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" -#define NID_teletexTerminalIdentifier 866 -#define OBJ_teletexTerminalIdentifier OBJ_X509,22L - -#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" -#define NID_facsimileTelephoneNumber 867 -#define OBJ_facsimileTelephoneNumber OBJ_X509,23L - -#define LN_x121Address "x121Address" -#define NID_x121Address 868 -#define OBJ_x121Address OBJ_X509,24L - -#define LN_internationaliSDNNumber "internationaliSDNNumber" -#define NID_internationaliSDNNumber 869 -#define OBJ_internationaliSDNNumber OBJ_X509,25L - -#define LN_registeredAddress "registeredAddress" -#define NID_registeredAddress 870 -#define OBJ_registeredAddress OBJ_X509,26L - -#define LN_destinationIndicator "destinationIndicator" -#define NID_destinationIndicator 871 -#define OBJ_destinationIndicator OBJ_X509,27L - -#define LN_preferredDeliveryMethod "preferredDeliveryMethod" -#define NID_preferredDeliveryMethod 872 -#define OBJ_preferredDeliveryMethod OBJ_X509,28L - -#define LN_presentationAddress "presentationAddress" -#define NID_presentationAddress 873 -#define OBJ_presentationAddress OBJ_X509,29L - -#define LN_supportedApplicationContext "supportedApplicationContext" -#define NID_supportedApplicationContext 874 -#define OBJ_supportedApplicationContext OBJ_X509,30L - -#define SN_member "member" -#define NID_member 875 -#define OBJ_member OBJ_X509,31L - -#define SN_owner "owner" -#define NID_owner 876 -#define OBJ_owner OBJ_X509,32L - -#define LN_roleOccupant "roleOccupant" -#define NID_roleOccupant 877 -#define OBJ_roleOccupant OBJ_X509,33L - -#define SN_seeAlso "seeAlso" -#define NID_seeAlso 878 -#define OBJ_seeAlso OBJ_X509,34L - -#define LN_userPassword "userPassword" -#define NID_userPassword 879 -#define OBJ_userPassword OBJ_X509,35L - -#define LN_userCertificate "userCertificate" -#define NID_userCertificate 880 -#define OBJ_userCertificate OBJ_X509,36L - -#define LN_cACertificate "cACertificate" -#define NID_cACertificate 881 -#define OBJ_cACertificate OBJ_X509,37L - -#define LN_authorityRevocationList "authorityRevocationList" -#define NID_authorityRevocationList 882 -#define OBJ_authorityRevocationList OBJ_X509,38L - -#define LN_certificateRevocationList "certificateRevocationList" -#define NID_certificateRevocationList 883 -#define OBJ_certificateRevocationList OBJ_X509,39L - -#define LN_crossCertificatePair "crossCertificatePair" -#define NID_crossCertificatePair 884 -#define OBJ_crossCertificatePair OBJ_X509,40L - -#define SN_name "name" -#define LN_name "name" -#define NID_name 173 -#define OBJ_name OBJ_X509,41L - -#define SN_givenName "GN" -#define LN_givenName "givenName" -#define NID_givenName 99 -#define OBJ_givenName OBJ_X509,42L - -#define SN_initials "initials" -#define LN_initials "initials" -#define NID_initials 101 -#define OBJ_initials OBJ_X509,43L - -#define LN_generationQualifier "generationQualifier" -#define NID_generationQualifier 509 -#define OBJ_generationQualifier OBJ_X509,44L - -#define LN_x500UniqueIdentifier "x500UniqueIdentifier" -#define NID_x500UniqueIdentifier 503 -#define OBJ_x500UniqueIdentifier OBJ_X509,45L - -#define SN_dnQualifier "dnQualifier" -#define LN_dnQualifier "dnQualifier" -#define NID_dnQualifier 174 -#define OBJ_dnQualifier OBJ_X509,46L - -#define LN_enhancedSearchGuide "enhancedSearchGuide" -#define NID_enhancedSearchGuide 885 -#define OBJ_enhancedSearchGuide OBJ_X509,47L - -#define LN_protocolInformation "protocolInformation" -#define NID_protocolInformation 886 -#define OBJ_protocolInformation OBJ_X509,48L - -#define LN_distinguishedName "distinguishedName" -#define NID_distinguishedName 887 -#define OBJ_distinguishedName OBJ_X509,49L - -#define LN_uniqueMember "uniqueMember" -#define NID_uniqueMember 888 -#define OBJ_uniqueMember OBJ_X509,50L - -#define LN_houseIdentifier "houseIdentifier" -#define NID_houseIdentifier 889 -#define OBJ_houseIdentifier OBJ_X509,51L - -#define LN_supportedAlgorithms "supportedAlgorithms" -#define NID_supportedAlgorithms 890 -#define OBJ_supportedAlgorithms OBJ_X509,52L - -#define LN_deltaRevocationList "deltaRevocationList" -#define NID_deltaRevocationList 891 -#define OBJ_deltaRevocationList OBJ_X509,53L - -#define SN_dmdName "dmdName" -#define NID_dmdName 892 -#define OBJ_dmdName OBJ_X509,54L - -#define LN_pseudonym "pseudonym" -#define NID_pseudonym 510 -#define OBJ_pseudonym OBJ_X509,65L - -#define SN_role "role" -#define LN_role "role" -#define NID_role 400 -#define OBJ_role OBJ_X509,72L - -#define SN_X500algorithms "X500algorithms" -#define LN_X500algorithms "directory services - algorithms" -#define NID_X500algorithms 378 -#define OBJ_X500algorithms OBJ_X500,8L - -#define SN_rsa "RSA" -#define LN_rsa "rsa" -#define NID_rsa 19 -#define OBJ_rsa OBJ_X500algorithms,1L,1L - -#define SN_mdc2WithRSA "RSA-MDC2" -#define LN_mdc2WithRSA "mdc2WithRSA" -#define NID_mdc2WithRSA 96 -#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L - -#define SN_mdc2 "MDC2" -#define LN_mdc2 "mdc2" -#define NID_mdc2 95 -#define OBJ_mdc2 OBJ_X500algorithms,3L,101L - -#define SN_id_ce "id-ce" -#define NID_id_ce 81 -#define OBJ_id_ce OBJ_X500,29L - -#define SN_subject_directory_attributes "subjectDirectoryAttributes" -#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" -#define NID_subject_directory_attributes 769 -#define OBJ_subject_directory_attributes OBJ_id_ce,9L - -#define SN_subject_key_identifier "subjectKeyIdentifier" -#define LN_subject_key_identifier "X509v3 Subject Key Identifier" -#define NID_subject_key_identifier 82 -#define OBJ_subject_key_identifier OBJ_id_ce,14L - -#define SN_key_usage "keyUsage" -#define LN_key_usage "X509v3 Key Usage" -#define NID_key_usage 83 -#define OBJ_key_usage OBJ_id_ce,15L - -#define SN_private_key_usage_period "privateKeyUsagePeriod" -#define LN_private_key_usage_period "X509v3 Private Key Usage Period" -#define NID_private_key_usage_period 84 -#define OBJ_private_key_usage_period OBJ_id_ce,16L - -#define SN_subject_alt_name "subjectAltName" -#define LN_subject_alt_name "X509v3 Subject Alternative Name" -#define NID_subject_alt_name 85 -#define OBJ_subject_alt_name OBJ_id_ce,17L - -#define SN_issuer_alt_name "issuerAltName" -#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -#define NID_issuer_alt_name 86 -#define OBJ_issuer_alt_name OBJ_id_ce,18L - -#define SN_basic_constraints "basicConstraints" -#define LN_basic_constraints "X509v3 Basic Constraints" -#define NID_basic_constraints 87 -#define OBJ_basic_constraints OBJ_id_ce,19L - -#define SN_crl_number "crlNumber" -#define LN_crl_number "X509v3 CRL Number" -#define NID_crl_number 88 -#define OBJ_crl_number OBJ_id_ce,20L - -#define SN_crl_reason "CRLReason" -#define LN_crl_reason "X509v3 CRL Reason Code" -#define NID_crl_reason 141 -#define OBJ_crl_reason OBJ_id_ce,21L - -#define SN_invalidity_date "invalidityDate" -#define LN_invalidity_date "Invalidity Date" -#define NID_invalidity_date 142 -#define OBJ_invalidity_date OBJ_id_ce,24L - -#define SN_delta_crl "deltaCRL" -#define LN_delta_crl "X509v3 Delta CRL Indicator" -#define NID_delta_crl 140 -#define OBJ_delta_crl OBJ_id_ce,27L - -#define SN_issuing_distribution_point "issuingDistributionPoint" -#define LN_issuing_distribution_point "X509v3 Issuing Distrubution Point" -#define NID_issuing_distribution_point 770 -#define OBJ_issuing_distribution_point OBJ_id_ce,28L - -#define SN_certificate_issuer "certificateIssuer" -#define LN_certificate_issuer "X509v3 Certificate Issuer" -#define NID_certificate_issuer 771 -#define OBJ_certificate_issuer OBJ_id_ce,29L - -#define SN_name_constraints "nameConstraints" -#define LN_name_constraints "X509v3 Name Constraints" -#define NID_name_constraints 666 -#define OBJ_name_constraints OBJ_id_ce,30L - -#define SN_crl_distribution_points "crlDistributionPoints" -#define LN_crl_distribution_points "X509v3 CRL Distribution Points" -#define NID_crl_distribution_points 103 -#define OBJ_crl_distribution_points OBJ_id_ce,31L - -#define SN_certificate_policies "certificatePolicies" -#define LN_certificate_policies "X509v3 Certificate Policies" -#define NID_certificate_policies 89 -#define OBJ_certificate_policies OBJ_id_ce,32L - -#define SN_any_policy "anyPolicy" -#define LN_any_policy "X509v3 Any Policy" -#define NID_any_policy 746 -#define OBJ_any_policy OBJ_certificate_policies,0L - -#define SN_policy_mappings "policyMappings" -#define LN_policy_mappings "X509v3 Policy Mappings" -#define NID_policy_mappings 747 -#define OBJ_policy_mappings OBJ_id_ce,33L - -#define SN_authority_key_identifier "authorityKeyIdentifier" -#define LN_authority_key_identifier "X509v3 Authority Key Identifier" -#define NID_authority_key_identifier 90 -#define OBJ_authority_key_identifier OBJ_id_ce,35L - -#define SN_policy_constraints "policyConstraints" -#define LN_policy_constraints "X509v3 Policy Constraints" -#define NID_policy_constraints 401 -#define OBJ_policy_constraints OBJ_id_ce,36L - -#define SN_ext_key_usage "extendedKeyUsage" -#define LN_ext_key_usage "X509v3 Extended Key Usage" -#define NID_ext_key_usage 126 -#define OBJ_ext_key_usage OBJ_id_ce,37L - -#define SN_freshest_crl "freshestCRL" -#define LN_freshest_crl "X509v3 Freshest CRL" -#define NID_freshest_crl 857 -#define OBJ_freshest_crl OBJ_id_ce,46L - -#define SN_inhibit_any_policy "inhibitAnyPolicy" -#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" -#define NID_inhibit_any_policy 748 -#define OBJ_inhibit_any_policy OBJ_id_ce,54L - -#define SN_target_information "targetInformation" -#define LN_target_information "X509v3 AC Targeting" -#define NID_target_information 402 -#define OBJ_target_information OBJ_id_ce,55L - -#define SN_no_rev_avail "noRevAvail" -#define LN_no_rev_avail "X509v3 No Revocation Available" -#define NID_no_rev_avail 403 -#define OBJ_no_rev_avail OBJ_id_ce,56L - -#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" -#define LN_anyExtendedKeyUsage "Any Extended Key Usage" -#define NID_anyExtendedKeyUsage 910 -#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L - -#define SN_netscape "Netscape" -#define LN_netscape "Netscape Communications Corp." -#define NID_netscape 57 -#define OBJ_netscape 2L,16L,840L,1L,113730L - -#define SN_netscape_cert_extension "nsCertExt" -#define LN_netscape_cert_extension "Netscape Certificate Extension" -#define NID_netscape_cert_extension 58 -#define OBJ_netscape_cert_extension OBJ_netscape,1L - -#define SN_netscape_data_type "nsDataType" -#define LN_netscape_data_type "Netscape Data Type" -#define NID_netscape_data_type 59 -#define OBJ_netscape_data_type OBJ_netscape,2L - -#define SN_netscape_cert_type "nsCertType" -#define LN_netscape_cert_type "Netscape Cert Type" -#define NID_netscape_cert_type 71 -#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -#define SN_netscape_base_url "nsBaseUrl" -#define LN_netscape_base_url "Netscape Base Url" -#define NID_netscape_base_url 72 -#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -#define SN_netscape_revocation_url "nsRevocationUrl" -#define LN_netscape_revocation_url "Netscape Revocation Url" -#define NID_netscape_revocation_url 73 -#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -#define NID_netscape_ca_revocation_url 74 -#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -#define SN_netscape_renewal_url "nsRenewalUrl" -#define LN_netscape_renewal_url "Netscape Renewal Url" -#define NID_netscape_renewal_url 75 -#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -#define SN_netscape_ca_policy_url "nsCaPolicyUrl" -#define LN_netscape_ca_policy_url "Netscape CA Policy Url" -#define NID_netscape_ca_policy_url 76 -#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -#define SN_netscape_ssl_server_name "nsSslServerName" -#define LN_netscape_ssl_server_name "Netscape SSL Server Name" -#define NID_netscape_ssl_server_name 77 -#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -#define SN_netscape_comment "nsComment" -#define LN_netscape_comment "Netscape Comment" -#define NID_netscape_comment 78 -#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -#define SN_netscape_cert_sequence "nsCertSequence" -#define LN_netscape_cert_sequence "Netscape Certificate Sequence" -#define NID_netscape_cert_sequence 79 -#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -#define SN_ns_sgc "nsSGC" -#define LN_ns_sgc "Netscape Server Gated Crypto" -#define NID_ns_sgc 139 -#define OBJ_ns_sgc OBJ_netscape,4L,1L - -#define SN_org "ORG" -#define LN_org "org" -#define NID_org 379 -#define OBJ_org OBJ_iso,3L - -#define SN_dod "DOD" -#define LN_dod "dod" -#define NID_dod 380 -#define OBJ_dod OBJ_org,6L - -#define SN_iana "IANA" -#define LN_iana "iana" -#define NID_iana 381 -#define OBJ_iana OBJ_dod,1L - -#define OBJ_internet OBJ_iana - -#define SN_Directory "directory" -#define LN_Directory "Directory" -#define NID_Directory 382 -#define OBJ_Directory OBJ_internet,1L - -#define SN_Management "mgmt" -#define LN_Management "Management" -#define NID_Management 383 -#define OBJ_Management OBJ_internet,2L - -#define SN_Experimental "experimental" -#define LN_Experimental "Experimental" -#define NID_Experimental 384 -#define OBJ_Experimental OBJ_internet,3L - -#define SN_Private "private" -#define LN_Private "Private" -#define NID_Private 385 -#define OBJ_Private OBJ_internet,4L - -#define SN_Security "security" -#define LN_Security "Security" -#define NID_Security 386 -#define OBJ_Security OBJ_internet,5L - -#define SN_SNMPv2 "snmpv2" -#define LN_SNMPv2 "SNMPv2" -#define NID_SNMPv2 387 -#define OBJ_SNMPv2 OBJ_internet,6L - -#define LN_Mail "Mail" -#define NID_Mail 388 -#define OBJ_Mail OBJ_internet,7L - -#define SN_Enterprises "enterprises" -#define LN_Enterprises "Enterprises" -#define NID_Enterprises 389 -#define OBJ_Enterprises OBJ_Private,1L - -#define SN_dcObject "dcobject" -#define LN_dcObject "dcObject" -#define NID_dcObject 390 -#define OBJ_dcObject OBJ_Enterprises,1466L,344L - -#define SN_mime_mhs "mime-mhs" -#define LN_mime_mhs "MIME MHS" -#define NID_mime_mhs 504 -#define OBJ_mime_mhs OBJ_Mail,1L - -#define SN_mime_mhs_headings "mime-mhs-headings" -#define LN_mime_mhs_headings "mime-mhs-headings" -#define NID_mime_mhs_headings 505 -#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L - -#define SN_mime_mhs_bodies "mime-mhs-bodies" -#define LN_mime_mhs_bodies "mime-mhs-bodies" -#define NID_mime_mhs_bodies 506 -#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L - -#define SN_id_hex_partial_message "id-hex-partial-message" -#define LN_id_hex_partial_message "id-hex-partial-message" -#define NID_id_hex_partial_message 507 -#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L - -#define SN_id_hex_multipart_message "id-hex-multipart-message" -#define LN_id_hex_multipart_message "id-hex-multipart-message" -#define NID_id_hex_multipart_message 508 -#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L - -#define SN_rle_compression "RLE" -#define LN_rle_compression "run length compression" -#define NID_rle_compression 124 -#define OBJ_rle_compression 1L,1L,1L,1L,666L,1L - -#define SN_zlib_compression "ZLIB" -#define LN_zlib_compression "zlib compression" -#define NID_zlib_compression 125 -#define OBJ_zlib_compression OBJ_id_smime_alg,8L - -#define OBJ_csor 2L,16L,840L,1L,101L,3L - -#define OBJ_nistAlgorithms OBJ_csor,4L - -#define OBJ_aes OBJ_nistAlgorithms,1L - -#define SN_aes_128_ecb "AES-128-ECB" -#define LN_aes_128_ecb "aes-128-ecb" -#define NID_aes_128_ecb 418 -#define OBJ_aes_128_ecb OBJ_aes,1L - -#define SN_aes_128_cbc "AES-128-CBC" -#define LN_aes_128_cbc "aes-128-cbc" -#define NID_aes_128_cbc 419 -#define OBJ_aes_128_cbc OBJ_aes,2L - -#define SN_aes_128_ofb128 "AES-128-OFB" -#define LN_aes_128_ofb128 "aes-128-ofb" -#define NID_aes_128_ofb128 420 -#define OBJ_aes_128_ofb128 OBJ_aes,3L - -#define SN_aes_128_cfb128 "AES-128-CFB" -#define LN_aes_128_cfb128 "aes-128-cfb" -#define NID_aes_128_cfb128 421 -#define OBJ_aes_128_cfb128 OBJ_aes,4L - -#define SN_id_aes128_wrap "id-aes128-wrap" -#define NID_id_aes128_wrap 788 -#define OBJ_id_aes128_wrap OBJ_aes,5L - -#define SN_aes_128_gcm "id-aes128-GCM" -#define LN_aes_128_gcm "aes-128-gcm" -#define NID_aes_128_gcm 895 -#define OBJ_aes_128_gcm OBJ_aes,6L - -#define SN_aes_128_ccm "id-aes128-CCM" -#define LN_aes_128_ccm "aes-128-ccm" -#define NID_aes_128_ccm 896 -#define OBJ_aes_128_ccm OBJ_aes,7L - -#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" -#define NID_id_aes128_wrap_pad 897 -#define OBJ_id_aes128_wrap_pad OBJ_aes,8L - -#define SN_aes_192_ecb "AES-192-ECB" -#define LN_aes_192_ecb "aes-192-ecb" -#define NID_aes_192_ecb 422 -#define OBJ_aes_192_ecb OBJ_aes,21L - -#define SN_aes_192_cbc "AES-192-CBC" -#define LN_aes_192_cbc "aes-192-cbc" -#define NID_aes_192_cbc 423 -#define OBJ_aes_192_cbc OBJ_aes,22L - -#define SN_aes_192_ofb128 "AES-192-OFB" -#define LN_aes_192_ofb128 "aes-192-ofb" -#define NID_aes_192_ofb128 424 -#define OBJ_aes_192_ofb128 OBJ_aes,23L - -#define SN_aes_192_cfb128 "AES-192-CFB" -#define LN_aes_192_cfb128 "aes-192-cfb" -#define NID_aes_192_cfb128 425 -#define OBJ_aes_192_cfb128 OBJ_aes,24L - -#define SN_id_aes192_wrap "id-aes192-wrap" -#define NID_id_aes192_wrap 789 -#define OBJ_id_aes192_wrap OBJ_aes,25L - -#define SN_aes_192_gcm "id-aes192-GCM" -#define LN_aes_192_gcm "aes-192-gcm" -#define NID_aes_192_gcm 898 -#define OBJ_aes_192_gcm OBJ_aes,26L - -#define SN_aes_192_ccm "id-aes192-CCM" -#define LN_aes_192_ccm "aes-192-ccm" -#define NID_aes_192_ccm 899 -#define OBJ_aes_192_ccm OBJ_aes,27L - -#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" -#define NID_id_aes192_wrap_pad 900 -#define OBJ_id_aes192_wrap_pad OBJ_aes,28L - -#define SN_aes_256_ecb "AES-256-ECB" -#define LN_aes_256_ecb "aes-256-ecb" -#define NID_aes_256_ecb 426 -#define OBJ_aes_256_ecb OBJ_aes,41L - -#define SN_aes_256_cbc "AES-256-CBC" -#define LN_aes_256_cbc "aes-256-cbc" -#define NID_aes_256_cbc 427 -#define OBJ_aes_256_cbc OBJ_aes,42L - -#define SN_aes_256_ofb128 "AES-256-OFB" -#define LN_aes_256_ofb128 "aes-256-ofb" -#define NID_aes_256_ofb128 428 -#define OBJ_aes_256_ofb128 OBJ_aes,43L - -#define SN_aes_256_cfb128 "AES-256-CFB" -#define LN_aes_256_cfb128 "aes-256-cfb" -#define NID_aes_256_cfb128 429 -#define OBJ_aes_256_cfb128 OBJ_aes,44L - -#define SN_id_aes256_wrap "id-aes256-wrap" -#define NID_id_aes256_wrap 790 -#define OBJ_id_aes256_wrap OBJ_aes,45L - -#define SN_aes_256_gcm "id-aes256-GCM" -#define LN_aes_256_gcm "aes-256-gcm" -#define NID_aes_256_gcm 901 -#define OBJ_aes_256_gcm OBJ_aes,46L - -#define SN_aes_256_ccm "id-aes256-CCM" -#define LN_aes_256_ccm "aes-256-ccm" -#define NID_aes_256_ccm 902 -#define OBJ_aes_256_ccm OBJ_aes,47L - -#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" -#define NID_id_aes256_wrap_pad 903 -#define OBJ_id_aes256_wrap_pad OBJ_aes,48L - -#define SN_aes_128_cfb1 "AES-128-CFB1" -#define LN_aes_128_cfb1 "aes-128-cfb1" -#define NID_aes_128_cfb1 650 - -#define SN_aes_192_cfb1 "AES-192-CFB1" -#define LN_aes_192_cfb1 "aes-192-cfb1" -#define NID_aes_192_cfb1 651 - -#define SN_aes_256_cfb1 "AES-256-CFB1" -#define LN_aes_256_cfb1 "aes-256-cfb1" -#define NID_aes_256_cfb1 652 - -#define SN_aes_128_cfb8 "AES-128-CFB8" -#define LN_aes_128_cfb8 "aes-128-cfb8" -#define NID_aes_128_cfb8 653 - -#define SN_aes_192_cfb8 "AES-192-CFB8" -#define LN_aes_192_cfb8 "aes-192-cfb8" -#define NID_aes_192_cfb8 654 - -#define SN_aes_256_cfb8 "AES-256-CFB8" -#define LN_aes_256_cfb8 "aes-256-cfb8" -#define NID_aes_256_cfb8 655 - -#define SN_aes_128_ctr "AES-128-CTR" -#define LN_aes_128_ctr "aes-128-ctr" -#define NID_aes_128_ctr 904 - -#define SN_aes_192_ctr "AES-192-CTR" -#define LN_aes_192_ctr "aes-192-ctr" -#define NID_aes_192_ctr 905 - -#define SN_aes_256_ctr "AES-256-CTR" -#define LN_aes_256_ctr "aes-256-ctr" -#define NID_aes_256_ctr 906 - -#define SN_aes_128_xts "AES-128-XTS" -#define LN_aes_128_xts "aes-128-xts" -#define NID_aes_128_xts 913 - -#define SN_aes_256_xts "AES-256-XTS" -#define LN_aes_256_xts "aes-256-xts" -#define NID_aes_256_xts 914 - -#define SN_des_cfb1 "DES-CFB1" -#define LN_des_cfb1 "des-cfb1" -#define NID_des_cfb1 656 - -#define SN_des_cfb8 "DES-CFB8" -#define LN_des_cfb8 "des-cfb8" -#define NID_des_cfb8 657 - -#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" -#define LN_des_ede3_cfb1 "des-ede3-cfb1" -#define NID_des_ede3_cfb1 658 - -#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" -#define LN_des_ede3_cfb8 "des-ede3-cfb8" -#define NID_des_ede3_cfb8 659 - -#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L - -#define SN_sha256 "SHA256" -#define LN_sha256 "sha256" -#define NID_sha256 672 -#define OBJ_sha256 OBJ_nist_hashalgs,1L - -#define SN_sha384 "SHA384" -#define LN_sha384 "sha384" -#define NID_sha384 673 -#define OBJ_sha384 OBJ_nist_hashalgs,2L - -#define SN_sha512 "SHA512" -#define LN_sha512 "sha512" -#define NID_sha512 674 -#define OBJ_sha512 OBJ_nist_hashalgs,3L - -#define SN_sha224 "SHA224" -#define LN_sha224 "sha224" -#define NID_sha224 675 -#define OBJ_sha224 OBJ_nist_hashalgs,4L - -#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L - -#define SN_dsa_with_SHA224 "dsa_with_SHA224" -#define NID_dsa_with_SHA224 802 -#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L - -#define SN_dsa_with_SHA256 "dsa_with_SHA256" -#define NID_dsa_with_SHA256 803 -#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L - -#define SN_hold_instruction_code "holdInstructionCode" -#define LN_hold_instruction_code "Hold Instruction Code" -#define NID_hold_instruction_code 430 -#define OBJ_hold_instruction_code OBJ_id_ce,23L - -#define OBJ_holdInstruction OBJ_X9_57,2L - -#define SN_hold_instruction_none "holdInstructionNone" -#define LN_hold_instruction_none "Hold Instruction None" -#define NID_hold_instruction_none 431 -#define OBJ_hold_instruction_none OBJ_holdInstruction,1L - -#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" -#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" -#define NID_hold_instruction_call_issuer 432 -#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L - -#define SN_hold_instruction_reject "holdInstructionReject" -#define LN_hold_instruction_reject "Hold Instruction Reject" -#define NID_hold_instruction_reject 433 -#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L - -#define SN_data "data" -#define NID_data 434 -#define OBJ_data OBJ_itu_t,9L - -#define SN_pss "pss" -#define NID_pss 435 -#define OBJ_pss OBJ_data,2342L - -#define SN_ucl "ucl" -#define NID_ucl 436 -#define OBJ_ucl OBJ_pss,19200300L - -#define SN_pilot "pilot" -#define NID_pilot 437 -#define OBJ_pilot OBJ_ucl,100L - -#define LN_pilotAttributeType "pilotAttributeType" -#define NID_pilotAttributeType 438 -#define OBJ_pilotAttributeType OBJ_pilot,1L - -#define LN_pilotAttributeSyntax "pilotAttributeSyntax" -#define NID_pilotAttributeSyntax 439 -#define OBJ_pilotAttributeSyntax OBJ_pilot,3L - -#define LN_pilotObjectClass "pilotObjectClass" -#define NID_pilotObjectClass 440 -#define OBJ_pilotObjectClass OBJ_pilot,4L - -#define LN_pilotGroups "pilotGroups" -#define NID_pilotGroups 441 -#define OBJ_pilotGroups OBJ_pilot,10L - -#define LN_iA5StringSyntax "iA5StringSyntax" -#define NID_iA5StringSyntax 442 -#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L - -#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" -#define NID_caseIgnoreIA5StringSyntax 443 -#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L - -#define LN_pilotObject "pilotObject" -#define NID_pilotObject 444 -#define OBJ_pilotObject OBJ_pilotObjectClass,3L - -#define LN_pilotPerson "pilotPerson" -#define NID_pilotPerson 445 -#define OBJ_pilotPerson OBJ_pilotObjectClass,4L - -#define SN_account "account" -#define NID_account 446 -#define OBJ_account OBJ_pilotObjectClass,5L - -#define SN_document "document" -#define NID_document 447 -#define OBJ_document OBJ_pilotObjectClass,6L - -#define SN_room "room" -#define NID_room 448 -#define OBJ_room OBJ_pilotObjectClass,7L - -#define LN_documentSeries "documentSeries" -#define NID_documentSeries 449 -#define OBJ_documentSeries OBJ_pilotObjectClass,9L - -#define SN_Domain "domain" -#define LN_Domain "Domain" -#define NID_Domain 392 -#define OBJ_Domain OBJ_pilotObjectClass,13L - -#define LN_rFC822localPart "rFC822localPart" -#define NID_rFC822localPart 450 -#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L - -#define LN_dNSDomain "dNSDomain" -#define NID_dNSDomain 451 -#define OBJ_dNSDomain OBJ_pilotObjectClass,15L - -#define LN_domainRelatedObject "domainRelatedObject" -#define NID_domainRelatedObject 452 -#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L - -#define LN_friendlyCountry "friendlyCountry" -#define NID_friendlyCountry 453 -#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L - -#define LN_simpleSecurityObject "simpleSecurityObject" -#define NID_simpleSecurityObject 454 -#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L - -#define LN_pilotOrganization "pilotOrganization" -#define NID_pilotOrganization 455 -#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L - -#define LN_pilotDSA "pilotDSA" -#define NID_pilotDSA 456 -#define OBJ_pilotDSA OBJ_pilotObjectClass,21L - -#define LN_qualityLabelledData "qualityLabelledData" -#define NID_qualityLabelledData 457 -#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L - -#define SN_userId "UID" -#define LN_userId "userId" -#define NID_userId 458 -#define OBJ_userId OBJ_pilotAttributeType,1L - -#define LN_textEncodedORAddress "textEncodedORAddress" -#define NID_textEncodedORAddress 459 -#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L - -#define SN_rfc822Mailbox "mail" -#define LN_rfc822Mailbox "rfc822Mailbox" -#define NID_rfc822Mailbox 460 -#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L - -#define SN_info "info" -#define NID_info 461 -#define OBJ_info OBJ_pilotAttributeType,4L - -#define LN_favouriteDrink "favouriteDrink" -#define NID_favouriteDrink 462 -#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L - -#define LN_roomNumber "roomNumber" -#define NID_roomNumber 463 -#define OBJ_roomNumber OBJ_pilotAttributeType,6L - -#define SN_photo "photo" -#define NID_photo 464 -#define OBJ_photo OBJ_pilotAttributeType,7L - -#define LN_userClass "userClass" -#define NID_userClass 465 -#define OBJ_userClass OBJ_pilotAttributeType,8L - -#define SN_host "host" -#define NID_host 466 -#define OBJ_host OBJ_pilotAttributeType,9L - -#define SN_manager "manager" -#define NID_manager 467 -#define OBJ_manager OBJ_pilotAttributeType,10L - -#define LN_documentIdentifier "documentIdentifier" -#define NID_documentIdentifier 468 -#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L - -#define LN_documentTitle "documentTitle" -#define NID_documentTitle 469 -#define OBJ_documentTitle OBJ_pilotAttributeType,12L - -#define LN_documentVersion "documentVersion" -#define NID_documentVersion 470 -#define OBJ_documentVersion OBJ_pilotAttributeType,13L - -#define LN_documentAuthor "documentAuthor" -#define NID_documentAuthor 471 -#define OBJ_documentAuthor OBJ_pilotAttributeType,14L - -#define LN_documentLocation "documentLocation" -#define NID_documentLocation 472 -#define OBJ_documentLocation OBJ_pilotAttributeType,15L - -#define LN_homeTelephoneNumber "homeTelephoneNumber" -#define NID_homeTelephoneNumber 473 -#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L - -#define SN_secretary "secretary" -#define NID_secretary 474 -#define OBJ_secretary OBJ_pilotAttributeType,21L - -#define LN_otherMailbox "otherMailbox" -#define NID_otherMailbox 475 -#define OBJ_otherMailbox OBJ_pilotAttributeType,22L - -#define LN_lastModifiedTime "lastModifiedTime" -#define NID_lastModifiedTime 476 -#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L - -#define LN_lastModifiedBy "lastModifiedBy" -#define NID_lastModifiedBy 477 -#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L - -#define SN_domainComponent "DC" -#define LN_domainComponent "domainComponent" -#define NID_domainComponent 391 -#define OBJ_domainComponent OBJ_pilotAttributeType,25L - -#define LN_aRecord "aRecord" -#define NID_aRecord 478 -#define OBJ_aRecord OBJ_pilotAttributeType,26L - -#define LN_pilotAttributeType27 "pilotAttributeType27" -#define NID_pilotAttributeType27 479 -#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L - -#define LN_mXRecord "mXRecord" -#define NID_mXRecord 480 -#define OBJ_mXRecord OBJ_pilotAttributeType,28L - -#define LN_nSRecord "nSRecord" -#define NID_nSRecord 481 -#define OBJ_nSRecord OBJ_pilotAttributeType,29L - -#define LN_sOARecord "sOARecord" -#define NID_sOARecord 482 -#define OBJ_sOARecord OBJ_pilotAttributeType,30L - -#define LN_cNAMERecord "cNAMERecord" -#define NID_cNAMERecord 483 -#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L - -#define LN_associatedDomain "associatedDomain" -#define NID_associatedDomain 484 -#define OBJ_associatedDomain OBJ_pilotAttributeType,37L - -#define LN_associatedName "associatedName" -#define NID_associatedName 485 -#define OBJ_associatedName OBJ_pilotAttributeType,38L - -#define LN_homePostalAddress "homePostalAddress" -#define NID_homePostalAddress 486 -#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L - -#define LN_personalTitle "personalTitle" -#define NID_personalTitle 487 -#define OBJ_personalTitle OBJ_pilotAttributeType,40L - -#define LN_mobileTelephoneNumber "mobileTelephoneNumber" -#define NID_mobileTelephoneNumber 488 -#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L - -#define LN_pagerTelephoneNumber "pagerTelephoneNumber" -#define NID_pagerTelephoneNumber 489 -#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L - -#define LN_friendlyCountryName "friendlyCountryName" -#define NID_friendlyCountryName 490 -#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L - -#define LN_organizationalStatus "organizationalStatus" -#define NID_organizationalStatus 491 -#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L - -#define LN_janetMailbox "janetMailbox" -#define NID_janetMailbox 492 -#define OBJ_janetMailbox OBJ_pilotAttributeType,46L - -#define LN_mailPreferenceOption "mailPreferenceOption" -#define NID_mailPreferenceOption 493 -#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L - -#define LN_buildingName "buildingName" -#define NID_buildingName 494 -#define OBJ_buildingName OBJ_pilotAttributeType,48L - -#define LN_dSAQuality "dSAQuality" -#define NID_dSAQuality 495 -#define OBJ_dSAQuality OBJ_pilotAttributeType,49L - -#define LN_singleLevelQuality "singleLevelQuality" -#define NID_singleLevelQuality 496 -#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L - -#define LN_subtreeMinimumQuality "subtreeMinimumQuality" -#define NID_subtreeMinimumQuality 497 -#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L - -#define LN_subtreeMaximumQuality "subtreeMaximumQuality" -#define NID_subtreeMaximumQuality 498 -#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L - -#define LN_personalSignature "personalSignature" -#define NID_personalSignature 499 -#define OBJ_personalSignature OBJ_pilotAttributeType,53L - -#define LN_dITRedirect "dITRedirect" -#define NID_dITRedirect 500 -#define OBJ_dITRedirect OBJ_pilotAttributeType,54L - -#define SN_audio "audio" -#define NID_audio 501 -#define OBJ_audio OBJ_pilotAttributeType,55L - -#define LN_documentPublisher "documentPublisher" -#define NID_documentPublisher 502 -#define OBJ_documentPublisher OBJ_pilotAttributeType,56L - -#define SN_id_set "id-set" -#define LN_id_set "Secure Electronic Transactions" -#define NID_id_set 512 -#define OBJ_id_set OBJ_international_organizations,42L - -#define SN_set_ctype "set-ctype" -#define LN_set_ctype "content types" -#define NID_set_ctype 513 -#define OBJ_set_ctype OBJ_id_set,0L - -#define SN_set_msgExt "set-msgExt" -#define LN_set_msgExt "message extensions" -#define NID_set_msgExt 514 -#define OBJ_set_msgExt OBJ_id_set,1L - -#define SN_set_attr "set-attr" -#define NID_set_attr 515 -#define OBJ_set_attr OBJ_id_set,3L - -#define SN_set_policy "set-policy" -#define NID_set_policy 516 -#define OBJ_set_policy OBJ_id_set,5L - -#define SN_set_certExt "set-certExt" -#define LN_set_certExt "certificate extensions" -#define NID_set_certExt 517 -#define OBJ_set_certExt OBJ_id_set,7L - -#define SN_set_brand "set-brand" -#define NID_set_brand 518 -#define OBJ_set_brand OBJ_id_set,8L - -#define SN_setct_PANData "setct-PANData" -#define NID_setct_PANData 519 -#define OBJ_setct_PANData OBJ_set_ctype,0L - -#define SN_setct_PANToken "setct-PANToken" -#define NID_setct_PANToken 520 -#define OBJ_setct_PANToken OBJ_set_ctype,1L - -#define SN_setct_PANOnly "setct-PANOnly" -#define NID_setct_PANOnly 521 -#define OBJ_setct_PANOnly OBJ_set_ctype,2L - -#define SN_setct_OIData "setct-OIData" -#define NID_setct_OIData 522 -#define OBJ_setct_OIData OBJ_set_ctype,3L - -#define SN_setct_PI "setct-PI" -#define NID_setct_PI 523 -#define OBJ_setct_PI OBJ_set_ctype,4L - -#define SN_setct_PIData "setct-PIData" -#define NID_setct_PIData 524 -#define OBJ_setct_PIData OBJ_set_ctype,5L - -#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" -#define NID_setct_PIDataUnsigned 525 -#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L - -#define SN_setct_HODInput "setct-HODInput" -#define NID_setct_HODInput 526 -#define OBJ_setct_HODInput OBJ_set_ctype,7L - -#define SN_setct_AuthResBaggage "setct-AuthResBaggage" -#define NID_setct_AuthResBaggage 527 -#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L - -#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" -#define NID_setct_AuthRevReqBaggage 528 -#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L - -#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" -#define NID_setct_AuthRevResBaggage 529 -#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L - -#define SN_setct_CapTokenSeq "setct-CapTokenSeq" -#define NID_setct_CapTokenSeq 530 -#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L - -#define SN_setct_PInitResData "setct-PInitResData" -#define NID_setct_PInitResData 531 -#define OBJ_setct_PInitResData OBJ_set_ctype,12L - -#define SN_setct_PI_TBS "setct-PI-TBS" -#define NID_setct_PI_TBS 532 -#define OBJ_setct_PI_TBS OBJ_set_ctype,13L - -#define SN_setct_PResData "setct-PResData" -#define NID_setct_PResData 533 -#define OBJ_setct_PResData OBJ_set_ctype,14L - -#define SN_setct_AuthReqTBS "setct-AuthReqTBS" -#define NID_setct_AuthReqTBS 534 -#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L - -#define SN_setct_AuthResTBS "setct-AuthResTBS" -#define NID_setct_AuthResTBS 535 -#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L - -#define SN_setct_AuthResTBSX "setct-AuthResTBSX" -#define NID_setct_AuthResTBSX 536 -#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L - -#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" -#define NID_setct_AuthTokenTBS 537 -#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L - -#define SN_setct_CapTokenData "setct-CapTokenData" -#define NID_setct_CapTokenData 538 -#define OBJ_setct_CapTokenData OBJ_set_ctype,20L - -#define SN_setct_CapTokenTBS "setct-CapTokenTBS" -#define NID_setct_CapTokenTBS 539 -#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L - -#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" -#define NID_setct_AcqCardCodeMsg 540 -#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L - -#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" -#define NID_setct_AuthRevReqTBS 541 -#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L - -#define SN_setct_AuthRevResData "setct-AuthRevResData" -#define NID_setct_AuthRevResData 542 -#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L - -#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" -#define NID_setct_AuthRevResTBS 543 -#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L - -#define SN_setct_CapReqTBS "setct-CapReqTBS" -#define NID_setct_CapReqTBS 544 -#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L - -#define SN_setct_CapReqTBSX "setct-CapReqTBSX" -#define NID_setct_CapReqTBSX 545 -#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L - -#define SN_setct_CapResData "setct-CapResData" -#define NID_setct_CapResData 546 -#define OBJ_setct_CapResData OBJ_set_ctype,28L - -#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" -#define NID_setct_CapRevReqTBS 547 -#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L - -#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" -#define NID_setct_CapRevReqTBSX 548 -#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L - -#define SN_setct_CapRevResData "setct-CapRevResData" -#define NID_setct_CapRevResData 549 -#define OBJ_setct_CapRevResData OBJ_set_ctype,31L - -#define SN_setct_CredReqTBS "setct-CredReqTBS" -#define NID_setct_CredReqTBS 550 -#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L - -#define SN_setct_CredReqTBSX "setct-CredReqTBSX" -#define NID_setct_CredReqTBSX 551 -#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L - -#define SN_setct_CredResData "setct-CredResData" -#define NID_setct_CredResData 552 -#define OBJ_setct_CredResData OBJ_set_ctype,34L - -#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" -#define NID_setct_CredRevReqTBS 553 -#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L - -#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" -#define NID_setct_CredRevReqTBSX 554 -#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L - -#define SN_setct_CredRevResData "setct-CredRevResData" -#define NID_setct_CredRevResData 555 -#define OBJ_setct_CredRevResData OBJ_set_ctype,37L - -#define SN_setct_PCertReqData "setct-PCertReqData" -#define NID_setct_PCertReqData 556 -#define OBJ_setct_PCertReqData OBJ_set_ctype,38L - -#define SN_setct_PCertResTBS "setct-PCertResTBS" -#define NID_setct_PCertResTBS 557 -#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L - -#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" -#define NID_setct_BatchAdminReqData 558 -#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L - -#define SN_setct_BatchAdminResData "setct-BatchAdminResData" -#define NID_setct_BatchAdminResData 559 -#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L - -#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" -#define NID_setct_CardCInitResTBS 560 -#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L - -#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" -#define NID_setct_MeAqCInitResTBS 561 -#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L - -#define SN_setct_RegFormResTBS "setct-RegFormResTBS" -#define NID_setct_RegFormResTBS 562 -#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L - -#define SN_setct_CertReqData "setct-CertReqData" -#define NID_setct_CertReqData 563 -#define OBJ_setct_CertReqData OBJ_set_ctype,45L - -#define SN_setct_CertReqTBS "setct-CertReqTBS" -#define NID_setct_CertReqTBS 564 -#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L - -#define SN_setct_CertResData "setct-CertResData" -#define NID_setct_CertResData 565 -#define OBJ_setct_CertResData OBJ_set_ctype,47L - -#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" -#define NID_setct_CertInqReqTBS 566 -#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L - -#define SN_setct_ErrorTBS "setct-ErrorTBS" -#define NID_setct_ErrorTBS 567 -#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L - -#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" -#define NID_setct_PIDualSignedTBE 568 -#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L - -#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" -#define NID_setct_PIUnsignedTBE 569 -#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L - -#define SN_setct_AuthReqTBE "setct-AuthReqTBE" -#define NID_setct_AuthReqTBE 570 -#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L - -#define SN_setct_AuthResTBE "setct-AuthResTBE" -#define NID_setct_AuthResTBE 571 -#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L - -#define SN_setct_AuthResTBEX "setct-AuthResTBEX" -#define NID_setct_AuthResTBEX 572 -#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L - -#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" -#define NID_setct_AuthTokenTBE 573 -#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L - -#define SN_setct_CapTokenTBE "setct-CapTokenTBE" -#define NID_setct_CapTokenTBE 574 -#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L - -#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" -#define NID_setct_CapTokenTBEX 575 -#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L - -#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" -#define NID_setct_AcqCardCodeMsgTBE 576 -#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L - -#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" -#define NID_setct_AuthRevReqTBE 577 -#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L - -#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" -#define NID_setct_AuthRevResTBE 578 -#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L - -#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" -#define NID_setct_AuthRevResTBEB 579 -#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L - -#define SN_setct_CapReqTBE "setct-CapReqTBE" -#define NID_setct_CapReqTBE 580 -#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L - -#define SN_setct_CapReqTBEX "setct-CapReqTBEX" -#define NID_setct_CapReqTBEX 581 -#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L - -#define SN_setct_CapResTBE "setct-CapResTBE" -#define NID_setct_CapResTBE 582 -#define OBJ_setct_CapResTBE OBJ_set_ctype,64L - -#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" -#define NID_setct_CapRevReqTBE 583 -#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L - -#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" -#define NID_setct_CapRevReqTBEX 584 -#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L - -#define SN_setct_CapRevResTBE "setct-CapRevResTBE" -#define NID_setct_CapRevResTBE 585 -#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L - -#define SN_setct_CredReqTBE "setct-CredReqTBE" -#define NID_setct_CredReqTBE 586 -#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L - -#define SN_setct_CredReqTBEX "setct-CredReqTBEX" -#define NID_setct_CredReqTBEX 587 -#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L - -#define SN_setct_CredResTBE "setct-CredResTBE" -#define NID_setct_CredResTBE 588 -#define OBJ_setct_CredResTBE OBJ_set_ctype,70L - -#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" -#define NID_setct_CredRevReqTBE 589 -#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L - -#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" -#define NID_setct_CredRevReqTBEX 590 -#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L - -#define SN_setct_CredRevResTBE "setct-CredRevResTBE" -#define NID_setct_CredRevResTBE 591 -#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L - -#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" -#define NID_setct_BatchAdminReqTBE 592 -#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L - -#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" -#define NID_setct_BatchAdminResTBE 593 -#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L - -#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" -#define NID_setct_RegFormReqTBE 594 -#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L - -#define SN_setct_CertReqTBE "setct-CertReqTBE" -#define NID_setct_CertReqTBE 595 -#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L - -#define SN_setct_CertReqTBEX "setct-CertReqTBEX" -#define NID_setct_CertReqTBEX 596 -#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L - -#define SN_setct_CertResTBE "setct-CertResTBE" -#define NID_setct_CertResTBE 597 -#define OBJ_setct_CertResTBE OBJ_set_ctype,79L - -#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" -#define NID_setct_CRLNotificationTBS 598 -#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L - -#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" -#define NID_setct_CRLNotificationResTBS 599 -#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L - -#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" -#define NID_setct_BCIDistributionTBS 600 -#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L - -#define SN_setext_genCrypt "setext-genCrypt" -#define LN_setext_genCrypt "generic cryptogram" -#define NID_setext_genCrypt 601 -#define OBJ_setext_genCrypt OBJ_set_msgExt,1L - -#define SN_setext_miAuth "setext-miAuth" -#define LN_setext_miAuth "merchant initiated auth" -#define NID_setext_miAuth 602 -#define OBJ_setext_miAuth OBJ_set_msgExt,3L - -#define SN_setext_pinSecure "setext-pinSecure" -#define NID_setext_pinSecure 603 -#define OBJ_setext_pinSecure OBJ_set_msgExt,4L - -#define SN_setext_pinAny "setext-pinAny" -#define NID_setext_pinAny 604 -#define OBJ_setext_pinAny OBJ_set_msgExt,5L - -#define SN_setext_track2 "setext-track2" -#define NID_setext_track2 605 -#define OBJ_setext_track2 OBJ_set_msgExt,7L - -#define SN_setext_cv "setext-cv" -#define LN_setext_cv "additional verification" -#define NID_setext_cv 606 -#define OBJ_setext_cv OBJ_set_msgExt,8L - -#define SN_set_policy_root "set-policy-root" -#define NID_set_policy_root 607 -#define OBJ_set_policy_root OBJ_set_policy,0L - -#define SN_setCext_hashedRoot "setCext-hashedRoot" -#define NID_setCext_hashedRoot 608 -#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L - -#define SN_setCext_certType "setCext-certType" -#define NID_setCext_certType 609 -#define OBJ_setCext_certType OBJ_set_certExt,1L - -#define SN_setCext_merchData "setCext-merchData" -#define NID_setCext_merchData 610 -#define OBJ_setCext_merchData OBJ_set_certExt,2L - -#define SN_setCext_cCertRequired "setCext-cCertRequired" -#define NID_setCext_cCertRequired 611 -#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L - -#define SN_setCext_tunneling "setCext-tunneling" -#define NID_setCext_tunneling 612 -#define OBJ_setCext_tunneling OBJ_set_certExt,4L - -#define SN_setCext_setExt "setCext-setExt" -#define NID_setCext_setExt 613 -#define OBJ_setCext_setExt OBJ_set_certExt,5L - -#define SN_setCext_setQualf "setCext-setQualf" -#define NID_setCext_setQualf 614 -#define OBJ_setCext_setQualf OBJ_set_certExt,6L - -#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" -#define NID_setCext_PGWYcapabilities 615 -#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L - -#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" -#define NID_setCext_TokenIdentifier 616 -#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L - -#define SN_setCext_Track2Data "setCext-Track2Data" -#define NID_setCext_Track2Data 617 -#define OBJ_setCext_Track2Data OBJ_set_certExt,9L - -#define SN_setCext_TokenType "setCext-TokenType" -#define NID_setCext_TokenType 618 -#define OBJ_setCext_TokenType OBJ_set_certExt,10L - -#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" -#define NID_setCext_IssuerCapabilities 619 -#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L - -#define SN_setAttr_Cert "setAttr-Cert" -#define NID_setAttr_Cert 620 -#define OBJ_setAttr_Cert OBJ_set_attr,0L - -#define SN_setAttr_PGWYcap "setAttr-PGWYcap" -#define LN_setAttr_PGWYcap "payment gateway capabilities" -#define NID_setAttr_PGWYcap 621 -#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L - -#define SN_setAttr_TokenType "setAttr-TokenType" -#define NID_setAttr_TokenType 622 -#define OBJ_setAttr_TokenType OBJ_set_attr,2L - -#define SN_setAttr_IssCap "setAttr-IssCap" -#define LN_setAttr_IssCap "issuer capabilities" -#define NID_setAttr_IssCap 623 -#define OBJ_setAttr_IssCap OBJ_set_attr,3L - -#define SN_set_rootKeyThumb "set-rootKeyThumb" -#define NID_set_rootKeyThumb 624 -#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L - -#define SN_set_addPolicy "set-addPolicy" -#define NID_set_addPolicy 625 -#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L - -#define SN_setAttr_Token_EMV "setAttr-Token-EMV" -#define NID_setAttr_Token_EMV 626 -#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L - -#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" -#define NID_setAttr_Token_B0Prime 627 -#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L - -#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" -#define NID_setAttr_IssCap_CVM 628 -#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L - -#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" -#define NID_setAttr_IssCap_T2 629 -#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L - -#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" -#define NID_setAttr_IssCap_Sig 630 -#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L - -#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" -#define LN_setAttr_GenCryptgrm "generate cryptogram" -#define NID_setAttr_GenCryptgrm 631 -#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L - -#define SN_setAttr_T2Enc "setAttr-T2Enc" -#define LN_setAttr_T2Enc "encrypted track 2" -#define NID_setAttr_T2Enc 632 -#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L - -#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" -#define LN_setAttr_T2cleartxt "cleartext track 2" -#define NID_setAttr_T2cleartxt 633 -#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L - -#define SN_setAttr_TokICCsig "setAttr-TokICCsig" -#define LN_setAttr_TokICCsig "ICC or token signature" -#define NID_setAttr_TokICCsig 634 -#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L - -#define SN_setAttr_SecDevSig "setAttr-SecDevSig" -#define LN_setAttr_SecDevSig "secure device signature" -#define NID_setAttr_SecDevSig 635 -#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L - -#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" -#define NID_set_brand_IATA_ATA 636 -#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L - -#define SN_set_brand_Diners "set-brand-Diners" -#define NID_set_brand_Diners 637 -#define OBJ_set_brand_Diners OBJ_set_brand,30L - -#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" -#define NID_set_brand_AmericanExpress 638 -#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L - -#define SN_set_brand_JCB "set-brand-JCB" -#define NID_set_brand_JCB 639 -#define OBJ_set_brand_JCB OBJ_set_brand,35L - -#define SN_set_brand_Visa "set-brand-Visa" -#define NID_set_brand_Visa 640 -#define OBJ_set_brand_Visa OBJ_set_brand,4L - -#define SN_set_brand_MasterCard "set-brand-MasterCard" -#define NID_set_brand_MasterCard 641 -#define OBJ_set_brand_MasterCard OBJ_set_brand,5L - -#define SN_set_brand_Novus "set-brand-Novus" -#define NID_set_brand_Novus 642 -#define OBJ_set_brand_Novus OBJ_set_brand,6011L - -#define SN_des_cdmf "DES-CDMF" -#define LN_des_cdmf "des-cdmf" -#define NID_des_cdmf 643 -#define OBJ_des_cdmf OBJ_rsadsi,3L,10L - -#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" -#define NID_rsaOAEPEncryptionSET 644 -#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L - -#define SN_ipsec3 "Oakley-EC2N-3" -#define LN_ipsec3 "ipsec3" -#define NID_ipsec3 749 - -#define SN_ipsec4 "Oakley-EC2N-4" -#define LN_ipsec4 "ipsec4" -#define NID_ipsec4 750 - -#define SN_whirlpool "whirlpool" -#define NID_whirlpool 804 -#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L - -#define SN_cryptopro "cryptopro" -#define NID_cryptopro 805 -#define OBJ_cryptopro OBJ_member_body,643L,2L,2L - -#define SN_cryptocom "cryptocom" -#define NID_cryptocom 806 -#define OBJ_cryptocom OBJ_member_body,643L,2L,9L - -#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" -#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" -#define NID_id_GostR3411_94_with_GostR3410_2001 807 -#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L - -#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" -#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" -#define NID_id_GostR3411_94_with_GostR3410_94 808 -#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L - -#define SN_id_GostR3411_94 "md_gost94" -#define LN_id_GostR3411_94 "GOST R 34.11-94" -#define NID_id_GostR3411_94 809 -#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L - -#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" -#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" -#define NID_id_HMACGostR3411_94 810 -#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L - -#define SN_id_GostR3410_2001 "gost2001" -#define LN_id_GostR3410_2001 "GOST R 34.10-2001" -#define NID_id_GostR3410_2001 811 -#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L - -#define SN_id_GostR3410_94 "gost94" -#define LN_id_GostR3410_94 "GOST R 34.10-94" -#define NID_id_GostR3410_94 812 -#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L - -#define SN_id_Gost28147_89 "gost89" -#define LN_id_Gost28147_89 "GOST 28147-89" -#define NID_id_Gost28147_89 813 -#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L - -#define SN_gost89_cnt "gost89-cnt" -#define NID_gost89_cnt 814 - -#define SN_id_Gost28147_89_MAC "gost-mac" -#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" -#define NID_id_Gost28147_89_MAC 815 -#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L - -#define SN_id_GostR3411_94_prf "prf-gostr3411-94" -#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" -#define NID_id_GostR3411_94_prf 816 -#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L - -#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" -#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" -#define NID_id_GostR3410_2001DH 817 -#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L - -#define SN_id_GostR3410_94DH "id-GostR3410-94DH" -#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" -#define NID_id_GostR3410_94DH 818 -#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L - -#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" -#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 -#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L - -#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" -#define NID_id_Gost28147_89_None_KeyMeshing 820 -#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L - -#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" -#define NID_id_GostR3411_94_TestParamSet 821 -#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L - -#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" -#define NID_id_GostR3411_94_CryptoProParamSet 822 -#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L - -#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" -#define NID_id_Gost28147_89_TestParamSet 823 -#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L - -#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 -#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L - -#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 -#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L - -#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 -#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L - -#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 -#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L - -#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 -#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L - -#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" -#define NID_id_GostR3410_94_TestParamSet 831 -#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L - -#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 -#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L - -#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 -#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L - -#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 -#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L - -#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 -#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L - -#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 -#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L - -#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 -#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L - -#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 -#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L - -#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" -#define NID_id_GostR3410_2001_TestParamSet 839 -#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L - -#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 -#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L - -#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 -#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L - -#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 -#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L - -#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 -#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L - -#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 -#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L - -#define SN_id_GostR3410_94_a "id-GostR3410-94-a" -#define NID_id_GostR3410_94_a 845 -#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L - -#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" -#define NID_id_GostR3410_94_aBis 846 -#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L - -#define SN_id_GostR3410_94_b "id-GostR3410-94-b" -#define NID_id_GostR3410_94_b 847 -#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L - -#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" -#define NID_id_GostR3410_94_bBis 848 -#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L - -#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" -#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" -#define NID_id_Gost28147_89_cc 849 -#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L - -#define SN_id_GostR3410_94_cc "gost94cc" -#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" -#define NID_id_GostR3410_94_cc 850 -#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L - -#define SN_id_GostR3410_2001_cc "gost2001cc" -#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" -#define NID_id_GostR3410_2001_cc 851 -#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L - -#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" -#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 -#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L - -#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" -#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 -#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L - -#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" -#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" -#define NID_id_GostR3410_2001_ParamSet_cc 854 -#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L - -#define SN_camellia_128_cbc "CAMELLIA-128-CBC" -#define LN_camellia_128_cbc "camellia-128-cbc" -#define NID_camellia_128_cbc 751 -#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L - -#define SN_camellia_192_cbc "CAMELLIA-192-CBC" -#define LN_camellia_192_cbc "camellia-192-cbc" -#define NID_camellia_192_cbc 752 -#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L - -#define SN_camellia_256_cbc "CAMELLIA-256-CBC" -#define LN_camellia_256_cbc "camellia-256-cbc" -#define NID_camellia_256_cbc 753 -#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L - -#define SN_id_camellia128_wrap "id-camellia128-wrap" -#define NID_id_camellia128_wrap 907 -#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L - -#define SN_id_camellia192_wrap "id-camellia192-wrap" -#define NID_id_camellia192_wrap 908 -#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L - -#define SN_id_camellia256_wrap "id-camellia256-wrap" -#define NID_id_camellia256_wrap 909 -#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L - -#define OBJ_ntt_ds 0L,3L,4401L,5L - -#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L - -#define SN_camellia_128_ecb "CAMELLIA-128-ECB" -#define LN_camellia_128_ecb "camellia-128-ecb" -#define NID_camellia_128_ecb 754 -#define OBJ_camellia_128_ecb OBJ_camellia,1L - -#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" -#define LN_camellia_128_ofb128 "camellia-128-ofb" -#define NID_camellia_128_ofb128 766 -#define OBJ_camellia_128_ofb128 OBJ_camellia,3L - -#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" -#define LN_camellia_128_cfb128 "camellia-128-cfb" -#define NID_camellia_128_cfb128 757 -#define OBJ_camellia_128_cfb128 OBJ_camellia,4L - -#define SN_camellia_192_ecb "CAMELLIA-192-ECB" -#define LN_camellia_192_ecb "camellia-192-ecb" -#define NID_camellia_192_ecb 755 -#define OBJ_camellia_192_ecb OBJ_camellia,21L - -#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" -#define LN_camellia_192_ofb128 "camellia-192-ofb" -#define NID_camellia_192_ofb128 767 -#define OBJ_camellia_192_ofb128 OBJ_camellia,23L - -#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" -#define LN_camellia_192_cfb128 "camellia-192-cfb" -#define NID_camellia_192_cfb128 758 -#define OBJ_camellia_192_cfb128 OBJ_camellia,24L - -#define SN_camellia_256_ecb "CAMELLIA-256-ECB" -#define LN_camellia_256_ecb "camellia-256-ecb" -#define NID_camellia_256_ecb 756 -#define OBJ_camellia_256_ecb OBJ_camellia,41L - -#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" -#define LN_camellia_256_ofb128 "camellia-256-ofb" -#define NID_camellia_256_ofb128 768 -#define OBJ_camellia_256_ofb128 OBJ_camellia,43L - -#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" -#define LN_camellia_256_cfb128 "camellia-256-cfb" -#define NID_camellia_256_cfb128 759 -#define OBJ_camellia_256_cfb128 OBJ_camellia,44L - -#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" -#define LN_camellia_128_cfb1 "camellia-128-cfb1" -#define NID_camellia_128_cfb1 760 - -#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" -#define LN_camellia_192_cfb1 "camellia-192-cfb1" -#define NID_camellia_192_cfb1 761 - -#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" -#define LN_camellia_256_cfb1 "camellia-256-cfb1" -#define NID_camellia_256_cfb1 762 - -#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" -#define LN_camellia_128_cfb8 "camellia-128-cfb8" -#define NID_camellia_128_cfb8 763 - -#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" -#define LN_camellia_192_cfb8 "camellia-192-cfb8" -#define NID_camellia_192_cfb8 764 - -#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" -#define LN_camellia_256_cfb8 "camellia-256-cfb8" -#define NID_camellia_256_cfb8 765 - -#define SN_kisa "KISA" -#define LN_kisa "kisa" -#define NID_kisa 773 -#define OBJ_kisa OBJ_member_body,410L,200004L - -#define SN_seed_ecb "SEED-ECB" -#define LN_seed_ecb "seed-ecb" -#define NID_seed_ecb 776 -#define OBJ_seed_ecb OBJ_kisa,1L,3L - -#define SN_seed_cbc "SEED-CBC" -#define LN_seed_cbc "seed-cbc" -#define NID_seed_cbc 777 -#define OBJ_seed_cbc OBJ_kisa,1L,4L - -#define SN_seed_cfb128 "SEED-CFB" -#define LN_seed_cfb128 "seed-cfb" -#define NID_seed_cfb128 779 -#define OBJ_seed_cfb128 OBJ_kisa,1L,5L - -#define SN_seed_ofb128 "SEED-OFB" -#define LN_seed_ofb128 "seed-ofb" -#define NID_seed_ofb128 778 -#define OBJ_seed_ofb128 OBJ_kisa,1L,6L - -#define SN_hmac "HMAC" -#define LN_hmac "hmac" -#define NID_hmac 855 - -#define SN_cmac "CMAC" -#define LN_cmac "cmac" -#define NID_cmac 894 - -#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" -#define LN_rc4_hmac_md5 "rc4-hmac-md5" -#define NID_rc4_hmac_md5 915 - -#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" -#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" -#define NID_aes_128_cbc_hmac_sha1 916 - -#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" -#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" -#define NID_aes_192_cbc_hmac_sha1 917 - -#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" -#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" -#define NID_aes_256_cbc_hmac_sha1 918 - -#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" -#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" -#define NID_aes_128_cbc_hmac_sha256 948 - -#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" -#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" -#define NID_aes_192_cbc_hmac_sha256 949 - -#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" -#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" -#define NID_aes_256_cbc_hmac_sha256 950 - -#define SN_dhpublicnumber "dhpublicnumber" -#define LN_dhpublicnumber "X9.42 DH" -#define NID_dhpublicnumber 920 -#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L - -#define SN_brainpoolP160r1 "brainpoolP160r1" -#define NID_brainpoolP160r1 921 -#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L - -#define SN_brainpoolP160t1 "brainpoolP160t1" -#define NID_brainpoolP160t1 922 -#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L - -#define SN_brainpoolP192r1 "brainpoolP192r1" -#define NID_brainpoolP192r1 923 -#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L - -#define SN_brainpoolP192t1 "brainpoolP192t1" -#define NID_brainpoolP192t1 924 -#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L - -#define SN_brainpoolP224r1 "brainpoolP224r1" -#define NID_brainpoolP224r1 925 -#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L - -#define SN_brainpoolP224t1 "brainpoolP224t1" -#define NID_brainpoolP224t1 926 -#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L - -#define SN_brainpoolP256r1 "brainpoolP256r1" -#define NID_brainpoolP256r1 927 -#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L - -#define SN_brainpoolP256t1 "brainpoolP256t1" -#define NID_brainpoolP256t1 928 -#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L - -#define SN_brainpoolP320r1 "brainpoolP320r1" -#define NID_brainpoolP320r1 929 -#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L - -#define SN_brainpoolP320t1 "brainpoolP320t1" -#define NID_brainpoolP320t1 930 -#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L - -#define SN_brainpoolP384r1 "brainpoolP384r1" -#define NID_brainpoolP384r1 931 -#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L - -#define SN_brainpoolP384t1 "brainpoolP384t1" -#define NID_brainpoolP384t1 932 -#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L - -#define SN_brainpoolP512r1 "brainpoolP512r1" -#define NID_brainpoolP512r1 933 -#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L - -#define SN_brainpoolP512t1 "brainpoolP512t1" -#define NID_brainpoolP512t1 934 -#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L - -#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L - -#define OBJ_secg_scheme OBJ_certicom_arc,1L - -#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" -#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 -#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L - -#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" -#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 -#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L - -#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" -#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 -#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L - -#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" -#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 -#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L - -#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" -#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 -#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L - -#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 -#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L - -#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 -#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L - -#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 -#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L - -#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 -#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L - -#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 -#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L - -#define SN_dh_std_kdf "dh-std-kdf" -#define NID_dh_std_kdf 946 - -#define SN_dh_cofactor_kdf "dh-cofactor-kdf" -#define NID_dh_cofactor_kdf 947 - -#define SN_ct_precert_scts "ct_precert_scts" -#define LN_ct_precert_scts "CT Precertificate SCTs" -#define NID_ct_precert_scts 951 -#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L - -#define SN_ct_precert_poison "ct_precert_poison" -#define LN_ct_precert_poison "CT Precertificate Poison" -#define NID_ct_precert_poison 952 -#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L - -#define SN_ct_precert_signer "ct_precert_signer" -#define LN_ct_precert_signer "CT Precertificate Signer" -#define NID_ct_precert_signer 953 -#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L - -#define SN_ct_cert_scts "ct_cert_scts" -#define LN_ct_cert_scts "CT Certificate SCTs" -#define NID_ct_cert_scts 954 -#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L - -#define SN_jurisdictionLocalityName "jurisdictionL" -#define LN_jurisdictionLocalityName "jurisdictionLocalityName" -#define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L - -#define SN_jurisdictionStateOrProvinceName "jurisdictionST" -#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" -#define NID_jurisdictionStateOrProvinceName 956 -#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L - -#define SN_jurisdictionCountryName "jurisdictionC" -#define LN_jurisdictionCountryName "jurisdictionCountryName" -#define NID_jurisdictionCountryName 957 -#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L diff --git a/ext/openssl/windows/x86/include/openssl/objects.h b/ext/openssl/windows/x86/include/openssl/objects.h deleted file mode 100644 index b8dafa89..00000000 --- a/ext/openssl/windows/x86/include/openssl/objects.h +++ /dev/null @@ -1,1143 +0,0 @@ -/* crypto/objects/objects.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H - -# define USE_OBJ_MAC - -# ifdef USE_OBJ_MAC -# include -# else -# define SN_undef "UNDEF" -# define LN_undef "undefined" -# define NID_undef 0 -# define OBJ_undef 0L - -# define SN_Algorithm "Algorithm" -# define LN_algorithm "algorithm" -# define NID_algorithm 38 -# define OBJ_algorithm 1L,3L,14L,3L,2L - -# define LN_rsadsi "rsadsi" -# define NID_rsadsi 1 -# define OBJ_rsadsi 1L,2L,840L,113549L - -# define LN_pkcs "pkcs" -# define NID_pkcs 2 -# define OBJ_pkcs OBJ_rsadsi,1L - -# define SN_md2 "MD2" -# define LN_md2 "md2" -# define NID_md2 3 -# define OBJ_md2 OBJ_rsadsi,2L,2L - -# define SN_md5 "MD5" -# define LN_md5 "md5" -# define NID_md5 4 -# define OBJ_md5 OBJ_rsadsi,2L,5L - -# define SN_rc4 "RC4" -# define LN_rc4 "rc4" -# define NID_rc4 5 -# define OBJ_rc4 OBJ_rsadsi,3L,4L - -# define LN_rsaEncryption "rsaEncryption" -# define NID_rsaEncryption 6 -# define OBJ_rsaEncryption OBJ_pkcs,1L,1L - -# define SN_md2WithRSAEncryption "RSA-MD2" -# define LN_md2WithRSAEncryption "md2WithRSAEncryption" -# define NID_md2WithRSAEncryption 7 -# define OBJ_md2WithRSAEncryption OBJ_pkcs,1L,2L - -# define SN_md5WithRSAEncryption "RSA-MD5" -# define LN_md5WithRSAEncryption "md5WithRSAEncryption" -# define NID_md5WithRSAEncryption 8 -# define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L - -# define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -# define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -# define NID_pbeWithMD2AndDES_CBC 9 -# define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L - -# define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -# define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -# define NID_pbeWithMD5AndDES_CBC 10 -# define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L - -# define LN_X500 "X500" -# define NID_X500 11 -# define OBJ_X500 2L,5L - -# define LN_X509 "X509" -# define NID_X509 12 -# define OBJ_X509 OBJ_X500,4L - -# define SN_commonName "CN" -# define LN_commonName "commonName" -# define NID_commonName 13 -# define OBJ_commonName OBJ_X509,3L - -# define SN_countryName "C" -# define LN_countryName "countryName" -# define NID_countryName 14 -# define OBJ_countryName OBJ_X509,6L - -# define SN_localityName "L" -# define LN_localityName "localityName" -# define NID_localityName 15 -# define OBJ_localityName OBJ_X509,7L - -/* Postal Address? PA */ - -/* should be "ST" (rfc1327) but MS uses 'S' */ -# define SN_stateOrProvinceName "ST" -# define LN_stateOrProvinceName "stateOrProvinceName" -# define NID_stateOrProvinceName 16 -# define OBJ_stateOrProvinceName OBJ_X509,8L - -# define SN_organizationName "O" -# define LN_organizationName "organizationName" -# define NID_organizationName 17 -# define OBJ_organizationName OBJ_X509,10L - -# define SN_organizationalUnitName "OU" -# define LN_organizationalUnitName "organizationalUnitName" -# define NID_organizationalUnitName 18 -# define OBJ_organizationalUnitName OBJ_X509,11L - -# define SN_rsa "RSA" -# define LN_rsa "rsa" -# define NID_rsa 19 -# define OBJ_rsa OBJ_X500,8L,1L,1L - -# define LN_pkcs7 "pkcs7" -# define NID_pkcs7 20 -# define OBJ_pkcs7 OBJ_pkcs,7L - -# define LN_pkcs7_data "pkcs7-data" -# define NID_pkcs7_data 21 -# define OBJ_pkcs7_data OBJ_pkcs7,1L - -# define LN_pkcs7_signed "pkcs7-signedData" -# define NID_pkcs7_signed 22 -# define OBJ_pkcs7_signed OBJ_pkcs7,2L - -# define LN_pkcs7_enveloped "pkcs7-envelopedData" -# define NID_pkcs7_enveloped 23 -# define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -# define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -# define NID_pkcs7_signedAndEnveloped 24 -# define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -# define LN_pkcs7_digest "pkcs7-digestData" -# define NID_pkcs7_digest 25 -# define OBJ_pkcs7_digest OBJ_pkcs7,5L - -# define LN_pkcs7_encrypted "pkcs7-encryptedData" -# define NID_pkcs7_encrypted 26 -# define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -# define LN_pkcs3 "pkcs3" -# define NID_pkcs3 27 -# define OBJ_pkcs3 OBJ_pkcs,3L - -# define LN_dhKeyAgreement "dhKeyAgreement" -# define NID_dhKeyAgreement 28 -# define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -# define SN_des_ecb "DES-ECB" -# define LN_des_ecb "des-ecb" -# define NID_des_ecb 29 -# define OBJ_des_ecb OBJ_algorithm,6L - -# define SN_des_cfb64 "DES-CFB" -# define LN_des_cfb64 "des-cfb" -# define NID_des_cfb64 30 -/* IV + num */ -# define OBJ_des_cfb64 OBJ_algorithm,9L - -# define SN_des_cbc "DES-CBC" -# define LN_des_cbc "des-cbc" -# define NID_des_cbc 31 -/* IV */ -# define OBJ_des_cbc OBJ_algorithm,7L - -# define SN_des_ede "DES-EDE" -# define LN_des_ede "des-ede" -# define NID_des_ede 32 -/* ?? */ -# define OBJ_des_ede OBJ_algorithm,17L - -# define SN_des_ede3 "DES-EDE3" -# define LN_des_ede3 "des-ede3" -# define NID_des_ede3 33 - -# define SN_idea_cbc "IDEA-CBC" -# define LN_idea_cbc "idea-cbc" -# define NID_idea_cbc 34 -# define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -# define SN_idea_cfb64 "IDEA-CFB" -# define LN_idea_cfb64 "idea-cfb" -# define NID_idea_cfb64 35 - -# define SN_idea_ecb "IDEA-ECB" -# define LN_idea_ecb "idea-ecb" -# define NID_idea_ecb 36 - -# define SN_rc2_cbc "RC2-CBC" -# define LN_rc2_cbc "rc2-cbc" -# define NID_rc2_cbc 37 -# define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -# define SN_rc2_ecb "RC2-ECB" -# define LN_rc2_ecb "rc2-ecb" -# define NID_rc2_ecb 38 - -# define SN_rc2_cfb64 "RC2-CFB" -# define LN_rc2_cfb64 "rc2-cfb" -# define NID_rc2_cfb64 39 - -# define SN_rc2_ofb64 "RC2-OFB" -# define LN_rc2_ofb64 "rc2-ofb" -# define NID_rc2_ofb64 40 - -# define SN_sha "SHA" -# define LN_sha "sha" -# define NID_sha 41 -# define OBJ_sha OBJ_algorithm,18L - -# define SN_shaWithRSAEncryption "RSA-SHA" -# define LN_shaWithRSAEncryption "shaWithRSAEncryption" -# define NID_shaWithRSAEncryption 42 -# define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -# define SN_des_ede_cbc "DES-EDE-CBC" -# define LN_des_ede_cbc "des-ede-cbc" -# define NID_des_ede_cbc 43 - -# define SN_des_ede3_cbc "DES-EDE3-CBC" -# define LN_des_ede3_cbc "des-ede3-cbc" -# define NID_des_ede3_cbc 44 -# define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -# define SN_des_ofb64 "DES-OFB" -# define LN_des_ofb64 "des-ofb" -# define NID_des_ofb64 45 -# define OBJ_des_ofb64 OBJ_algorithm,8L - -# define SN_idea_ofb64 "IDEA-OFB" -# define LN_idea_ofb64 "idea-ofb" -# define NID_idea_ofb64 46 - -# define LN_pkcs9 "pkcs9" -# define NID_pkcs9 47 -# define OBJ_pkcs9 OBJ_pkcs,9L - -# define SN_pkcs9_emailAddress "Email" -# define LN_pkcs9_emailAddress "emailAddress" -# define NID_pkcs9_emailAddress 48 -# define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -# define LN_pkcs9_unstructuredName "unstructuredName" -# define NID_pkcs9_unstructuredName 49 -# define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -# define LN_pkcs9_contentType "contentType" -# define NID_pkcs9_contentType 50 -# define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -# define LN_pkcs9_messageDigest "messageDigest" -# define NID_pkcs9_messageDigest 51 -# define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -# define LN_pkcs9_signingTime "signingTime" -# define NID_pkcs9_signingTime 52 -# define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -# define LN_pkcs9_countersignature "countersignature" -# define NID_pkcs9_countersignature 53 -# define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -# define LN_pkcs9_challengePassword "challengePassword" -# define NID_pkcs9_challengePassword 54 -# define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -# define LN_pkcs9_unstructuredAddress "unstructuredAddress" -# define NID_pkcs9_unstructuredAddress 55 -# define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -# define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -# define NID_pkcs9_extCertAttributes 56 -# define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -# define SN_netscape "Netscape" -# define LN_netscape "Netscape Communications Corp." -# define NID_netscape 57 -# define OBJ_netscape 2L,16L,840L,1L,113730L - -# define SN_netscape_cert_extension "nsCertExt" -# define LN_netscape_cert_extension "Netscape Certificate Extension" -# define NID_netscape_cert_extension 58 -# define OBJ_netscape_cert_extension OBJ_netscape,1L - -# define SN_netscape_data_type "nsDataType" -# define LN_netscape_data_type "Netscape Data Type" -# define NID_netscape_data_type 59 -# define OBJ_netscape_data_type OBJ_netscape,2L - -# define SN_des_ede_cfb64 "DES-EDE-CFB" -# define LN_des_ede_cfb64 "des-ede-cfb" -# define NID_des_ede_cfb64 60 - -# define SN_des_ede3_cfb64 "DES-EDE3-CFB" -# define LN_des_ede3_cfb64 "des-ede3-cfb" -# define NID_des_ede3_cfb64 61 - -# define SN_des_ede_ofb64 "DES-EDE-OFB" -# define LN_des_ede_ofb64 "des-ede-ofb" -# define NID_des_ede_ofb64 62 - -# define SN_des_ede3_ofb64 "DES-EDE3-OFB" -# define LN_des_ede3_ofb64 "des-ede3-ofb" -# define NID_des_ede3_ofb64 63 - -/* I'm not sure about the object ID */ -# define SN_sha1 "SHA1" -# define LN_sha1 "sha1" -# define NID_sha1 64 -# define OBJ_sha1 OBJ_algorithm,26L -/* 28 Jun 1996 - eay */ -/* #define OBJ_sha1 1L,3L,14L,2L,26L,05L <- wrong */ - -# define SN_sha1WithRSAEncryption "RSA-SHA1" -# define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -# define NID_sha1WithRSAEncryption 65 -# define OBJ_sha1WithRSAEncryption OBJ_pkcs,1L,5L - -# define SN_dsaWithSHA "DSA-SHA" -# define LN_dsaWithSHA "dsaWithSHA" -# define NID_dsaWithSHA 66 -# define OBJ_dsaWithSHA OBJ_algorithm,13L - -# define SN_dsa_2 "DSA-old" -# define LN_dsa_2 "dsaEncryption-old" -# define NID_dsa_2 67 -# define OBJ_dsa_2 OBJ_algorithm,12L - -/* proposed by microsoft to RSA */ -# define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -# define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -# define NID_pbeWithSHA1AndRC2_CBC 68 -# define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L - -/* - * proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now defined - * explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something completely - * different. - */ -# define LN_id_pbkdf2 "PBKDF2" -# define NID_id_pbkdf2 69 -# define OBJ_id_pbkdf2 OBJ_pkcs,5L,12L - -# define SN_dsaWithSHA1_2 "DSA-SHA1-old" -# define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -# define NID_dsaWithSHA1_2 70 -/* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */ -# define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -# define SN_netscape_cert_type "nsCertType" -# define LN_netscape_cert_type "Netscape Cert Type" -# define NID_netscape_cert_type 71 -# define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -# define SN_netscape_base_url "nsBaseUrl" -# define LN_netscape_base_url "Netscape Base Url" -# define NID_netscape_base_url 72 -# define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -# define SN_netscape_revocation_url "nsRevocationUrl" -# define LN_netscape_revocation_url "Netscape Revocation Url" -# define NID_netscape_revocation_url 73 -# define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -# define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -# define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -# define NID_netscape_ca_revocation_url 74 -# define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -# define SN_netscape_renewal_url "nsRenewalUrl" -# define LN_netscape_renewal_url "Netscape Renewal Url" -# define NID_netscape_renewal_url 75 -# define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -# define SN_netscape_ca_policy_url "nsCaPolicyUrl" -# define LN_netscape_ca_policy_url "Netscape CA Policy Url" -# define NID_netscape_ca_policy_url 76 -# define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -# define SN_netscape_ssl_server_name "nsSslServerName" -# define LN_netscape_ssl_server_name "Netscape SSL Server Name" -# define NID_netscape_ssl_server_name 77 -# define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -# define SN_netscape_comment "nsComment" -# define LN_netscape_comment "Netscape Comment" -# define NID_netscape_comment 78 -# define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -# define SN_netscape_cert_sequence "nsCertSequence" -# define LN_netscape_cert_sequence "Netscape Certificate Sequence" -# define NID_netscape_cert_sequence 79 -# define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -# define SN_desx_cbc "DESX-CBC" -# define LN_desx_cbc "desx-cbc" -# define NID_desx_cbc 80 - -# define SN_id_ce "id-ce" -# define NID_id_ce 81 -# define OBJ_id_ce 2L,5L,29L - -# define SN_subject_key_identifier "subjectKeyIdentifier" -# define LN_subject_key_identifier "X509v3 Subject Key Identifier" -# define NID_subject_key_identifier 82 -# define OBJ_subject_key_identifier OBJ_id_ce,14L - -# define SN_key_usage "keyUsage" -# define LN_key_usage "X509v3 Key Usage" -# define NID_key_usage 83 -# define OBJ_key_usage OBJ_id_ce,15L - -# define SN_private_key_usage_period "privateKeyUsagePeriod" -# define LN_private_key_usage_period "X509v3 Private Key Usage Period" -# define NID_private_key_usage_period 84 -# define OBJ_private_key_usage_period OBJ_id_ce,16L - -# define SN_subject_alt_name "subjectAltName" -# define LN_subject_alt_name "X509v3 Subject Alternative Name" -# define NID_subject_alt_name 85 -# define OBJ_subject_alt_name OBJ_id_ce,17L - -# define SN_issuer_alt_name "issuerAltName" -# define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -# define NID_issuer_alt_name 86 -# define OBJ_issuer_alt_name OBJ_id_ce,18L - -# define SN_basic_constraints "basicConstraints" -# define LN_basic_constraints "X509v3 Basic Constraints" -# define NID_basic_constraints 87 -# define OBJ_basic_constraints OBJ_id_ce,19L - -# define SN_crl_number "crlNumber" -# define LN_crl_number "X509v3 CRL Number" -# define NID_crl_number 88 -# define OBJ_crl_number OBJ_id_ce,20L - -# define SN_certificate_policies "certificatePolicies" -# define LN_certificate_policies "X509v3 Certificate Policies" -# define NID_certificate_policies 89 -# define OBJ_certificate_policies OBJ_id_ce,32L - -# define SN_authority_key_identifier "authorityKeyIdentifier" -# define LN_authority_key_identifier "X509v3 Authority Key Identifier" -# define NID_authority_key_identifier 90 -# define OBJ_authority_key_identifier OBJ_id_ce,35L - -# define SN_bf_cbc "BF-CBC" -# define LN_bf_cbc "bf-cbc" -# define NID_bf_cbc 91 -# define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -# define SN_bf_ecb "BF-ECB" -# define LN_bf_ecb "bf-ecb" -# define NID_bf_ecb 92 - -# define SN_bf_cfb64 "BF-CFB" -# define LN_bf_cfb64 "bf-cfb" -# define NID_bf_cfb64 93 - -# define SN_bf_ofb64 "BF-OFB" -# define LN_bf_ofb64 "bf-ofb" -# define NID_bf_ofb64 94 - -# define SN_mdc2 "MDC2" -# define LN_mdc2 "mdc2" -# define NID_mdc2 95 -# define OBJ_mdc2 2L,5L,8L,3L,101L -/* An alternative? 1L,3L,14L,3L,2L,19L */ - -# define SN_mdc2WithRSA "RSA-MDC2" -# define LN_mdc2WithRSA "mdc2withRSA" -# define NID_mdc2WithRSA 96 -# define OBJ_mdc2WithRSA 2L,5L,8L,3L,100L - -# define SN_rc4_40 "RC4-40" -# define LN_rc4_40 "rc4-40" -# define NID_rc4_40 97 - -# define SN_rc2_40_cbc "RC2-40-CBC" -# define LN_rc2_40_cbc "rc2-40-cbc" -# define NID_rc2_40_cbc 98 - -# define SN_givenName "G" -# define LN_givenName "givenName" -# define NID_givenName 99 -# define OBJ_givenName OBJ_X509,42L - -# define SN_surname "S" -# define LN_surname "surname" -# define NID_surname 100 -# define OBJ_surname OBJ_X509,4L - -# define SN_initials "I" -# define LN_initials "initials" -# define NID_initials 101 -# define OBJ_initials OBJ_X509,43L - -# define SN_uniqueIdentifier "UID" -# define LN_uniqueIdentifier "uniqueIdentifier" -# define NID_uniqueIdentifier 102 -# define OBJ_uniqueIdentifier OBJ_X509,45L - -# define SN_crl_distribution_points "crlDistributionPoints" -# define LN_crl_distribution_points "X509v3 CRL Distribution Points" -# define NID_crl_distribution_points 103 -# define OBJ_crl_distribution_points OBJ_id_ce,31L - -# define SN_md5WithRSA "RSA-NP-MD5" -# define LN_md5WithRSA "md5WithRSA" -# define NID_md5WithRSA 104 -# define OBJ_md5WithRSA OBJ_algorithm,3L - -# define SN_serialNumber "SN" -# define LN_serialNumber "serialNumber" -# define NID_serialNumber 105 -# define OBJ_serialNumber OBJ_X509,5L - -# define SN_title "T" -# define LN_title "title" -# define NID_title 106 -# define OBJ_title OBJ_X509,12L - -# define SN_description "D" -# define LN_description "description" -# define NID_description 107 -# define OBJ_description OBJ_X509,13L - -/* CAST5 is CAST-128, I'm just sticking with the documentation */ -# define SN_cast5_cbc "CAST5-CBC" -# define LN_cast5_cbc "cast5-cbc" -# define NID_cast5_cbc 108 -# define OBJ_cast5_cbc 1L,2L,840L,113533L,7L,66L,10L - -# define SN_cast5_ecb "CAST5-ECB" -# define LN_cast5_ecb "cast5-ecb" -# define NID_cast5_ecb 109 - -# define SN_cast5_cfb64 "CAST5-CFB" -# define LN_cast5_cfb64 "cast5-cfb" -# define NID_cast5_cfb64 110 - -# define SN_cast5_ofb64 "CAST5-OFB" -# define LN_cast5_ofb64 "cast5-ofb" -# define NID_cast5_ofb64 111 - -# define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -# define NID_pbeWithMD5AndCast5_CBC 112 -# define OBJ_pbeWithMD5AndCast5_CBC 1L,2L,840L,113533L,7L,66L,12L - -/*- - * This is one sun will soon be using :-( - * id-dsa-with-sha1 ID ::= { - * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 } - */ -# define SN_dsaWithSHA1 "DSA-SHA1" -# define LN_dsaWithSHA1 "dsaWithSHA1" -# define NID_dsaWithSHA1 113 -# define OBJ_dsaWithSHA1 1L,2L,840L,10040L,4L,3L - -# define NID_md5_sha1 114 -# define SN_md5_sha1 "MD5-SHA1" -# define LN_md5_sha1 "md5-sha1" - -# define SN_sha1WithRSA "RSA-SHA1-2" -# define LN_sha1WithRSA "sha1WithRSA" -# define NID_sha1WithRSA 115 -# define OBJ_sha1WithRSA OBJ_algorithm,29L - -# define SN_dsa "DSA" -# define LN_dsa "dsaEncryption" -# define NID_dsa 116 -# define OBJ_dsa 1L,2L,840L,10040L,4L,1L - -# define SN_ripemd160 "RIPEMD160" -# define LN_ripemd160 "ripemd160" -# define NID_ripemd160 117 -# define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -/* - * The name should actually be rsaSignatureWithripemd160, but I'm going to - * continue using the convention I'm using with the other ciphers - */ -# define SN_ripemd160WithRSA "RSA-RIPEMD160" -# define LN_ripemd160WithRSA "ripemd160WithRSA" -# define NID_ripemd160WithRSA 119 -# define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -/*- - * Taken from rfc2040 - * RC5_CBC_Parameters ::= SEQUENCE { - * version INTEGER (v1_0(16)), - * rounds INTEGER (8..127), - * blockSizeInBits INTEGER (64, 128), - * iv OCTET STRING OPTIONAL - * } - */ -# define SN_rc5_cbc "RC5-CBC" -# define LN_rc5_cbc "rc5-cbc" -# define NID_rc5_cbc 120 -# define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -# define SN_rc5_ecb "RC5-ECB" -# define LN_rc5_ecb "rc5-ecb" -# define NID_rc5_ecb 121 - -# define SN_rc5_cfb64 "RC5-CFB" -# define LN_rc5_cfb64 "rc5-cfb" -# define NID_rc5_cfb64 122 - -# define SN_rc5_ofb64 "RC5-OFB" -# define LN_rc5_ofb64 "rc5-ofb" -# define NID_rc5_ofb64 123 - -# define SN_rle_compression "RLE" -# define LN_rle_compression "run length compression" -# define NID_rle_compression 124 -# define OBJ_rle_compression 1L,1L,1L,1L,666L,1L - -# define SN_zlib_compression "ZLIB" -# define LN_zlib_compression "zlib compression" -# define NID_zlib_compression 125 -# define OBJ_zlib_compression 1L,1L,1L,1L,666L,2L - -# define SN_ext_key_usage "extendedKeyUsage" -# define LN_ext_key_usage "X509v3 Extended Key Usage" -# define NID_ext_key_usage 126 -# define OBJ_ext_key_usage OBJ_id_ce,37 - -# define SN_id_pkix "PKIX" -# define NID_id_pkix 127 -# define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -# define SN_id_kp "id-kp" -# define NID_id_kp 128 -# define OBJ_id_kp OBJ_id_pkix,3L - -/* PKIX extended key usage OIDs */ - -# define SN_server_auth "serverAuth" -# define LN_server_auth "TLS Web Server Authentication" -# define NID_server_auth 129 -# define OBJ_server_auth OBJ_id_kp,1L - -# define SN_client_auth "clientAuth" -# define LN_client_auth "TLS Web Client Authentication" -# define NID_client_auth 130 -# define OBJ_client_auth OBJ_id_kp,2L - -# define SN_code_sign "codeSigning" -# define LN_code_sign "Code Signing" -# define NID_code_sign 131 -# define OBJ_code_sign OBJ_id_kp,3L - -# define SN_email_protect "emailProtection" -# define LN_email_protect "E-mail Protection" -# define NID_email_protect 132 -# define OBJ_email_protect OBJ_id_kp,4L - -# define SN_time_stamp "timeStamping" -# define LN_time_stamp "Time Stamping" -# define NID_time_stamp 133 -# define OBJ_time_stamp OBJ_id_kp,8L - -/* Additional extended key usage OIDs: Microsoft */ - -# define SN_ms_code_ind "msCodeInd" -# define LN_ms_code_ind "Microsoft Individual Code Signing" -# define NID_ms_code_ind 134 -# define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -# define SN_ms_code_com "msCodeCom" -# define LN_ms_code_com "Microsoft Commercial Code Signing" -# define NID_ms_code_com 135 -# define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -# define SN_ms_ctl_sign "msCTLSign" -# define LN_ms_ctl_sign "Microsoft Trust List Signing" -# define NID_ms_ctl_sign 136 -# define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -# define SN_ms_sgc "msSGC" -# define LN_ms_sgc "Microsoft Server Gated Crypto" -# define NID_ms_sgc 137 -# define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -# define SN_ms_efs "msEFS" -# define LN_ms_efs "Microsoft Encrypted File System" -# define NID_ms_efs 138 -# define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -/* Additional usage: Netscape */ - -# define SN_ns_sgc "nsSGC" -# define LN_ns_sgc "Netscape Server Gated Crypto" -# define NID_ns_sgc 139 -# define OBJ_ns_sgc OBJ_netscape,4L,1L - -# define SN_delta_crl "deltaCRL" -# define LN_delta_crl "X509v3 Delta CRL Indicator" -# define NID_delta_crl 140 -# define OBJ_delta_crl OBJ_id_ce,27L - -# define SN_crl_reason "CRLReason" -# define LN_crl_reason "CRL Reason Code" -# define NID_crl_reason 141 -# define OBJ_crl_reason OBJ_id_ce,21L - -# define SN_invalidity_date "invalidityDate" -# define LN_invalidity_date "Invalidity Date" -# define NID_invalidity_date 142 -# define OBJ_invalidity_date OBJ_id_ce,24L - -# define SN_sxnet "SXNetID" -# define LN_sxnet "Strong Extranet ID" -# define NID_sxnet 143 -# define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -/* PKCS12 and related OBJECT IDENTIFIERS */ - -# define OBJ_pkcs12 OBJ_pkcs,12L -# define OBJ_pkcs12_pbeids OBJ_pkcs12, 1 - -# define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -# define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -# define NID_pbe_WithSHA1And128BitRC4 144 -# define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L - -# define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -# define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -# define NID_pbe_WithSHA1And40BitRC4 145 -# define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L - -# define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -# define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -# define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -# define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L - -# define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -# define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -# define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -# define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L - -# define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -# define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -# define NID_pbe_WithSHA1And128BitRC2_CBC 148 -# define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L - -# define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -# define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -# define NID_pbe_WithSHA1And40BitRC2_CBC 149 -# define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L - -# define OBJ_pkcs12_Version1 OBJ_pkcs12, 10L - -# define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1, 1L - -# define LN_keyBag "keyBag" -# define NID_keyBag 150 -# define OBJ_keyBag OBJ_pkcs12_BagIds, 1L - -# define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -# define NID_pkcs8ShroudedKeyBag 151 -# define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L - -# define LN_certBag "certBag" -# define NID_certBag 152 -# define OBJ_certBag OBJ_pkcs12_BagIds, 3L - -# define LN_crlBag "crlBag" -# define NID_crlBag 153 -# define OBJ_crlBag OBJ_pkcs12_BagIds, 4L - -# define LN_secretBag "secretBag" -# define NID_secretBag 154 -# define OBJ_secretBag OBJ_pkcs12_BagIds, 5L - -# define LN_safeContentsBag "safeContentsBag" -# define NID_safeContentsBag 155 -# define OBJ_safeContentsBag OBJ_pkcs12_BagIds, 6L - -# define LN_friendlyName "friendlyName" -# define NID_friendlyName 156 -# define OBJ_friendlyName OBJ_pkcs9, 20L - -# define LN_localKeyID "localKeyID" -# define NID_localKeyID 157 -# define OBJ_localKeyID OBJ_pkcs9, 21L - -# define OBJ_certTypes OBJ_pkcs9, 22L - -# define LN_x509Certificate "x509Certificate" -# define NID_x509Certificate 158 -# define OBJ_x509Certificate OBJ_certTypes, 1L - -# define LN_sdsiCertificate "sdsiCertificate" -# define NID_sdsiCertificate 159 -# define OBJ_sdsiCertificate OBJ_certTypes, 2L - -# define OBJ_crlTypes OBJ_pkcs9, 23L - -# define LN_x509Crl "x509Crl" -# define NID_x509Crl 160 -# define OBJ_x509Crl OBJ_crlTypes, 1L - -/* PKCS#5 v2 OIDs */ - -# define LN_pbes2 "PBES2" -# define NID_pbes2 161 -# define OBJ_pbes2 OBJ_pkcs,5L,13L - -# define LN_pbmac1 "PBMAC1" -# define NID_pbmac1 162 -# define OBJ_pbmac1 OBJ_pkcs,5L,14L - -# define LN_hmacWithSHA1 "hmacWithSHA1" -# define NID_hmacWithSHA1 163 -# define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -/* Policy Qualifier Ids */ - -# define LN_id_qt_cps "Policy Qualifier CPS" -# define SN_id_qt_cps "id-qt-cps" -# define NID_id_qt_cps 164 -# define OBJ_id_qt_cps OBJ_id_pkix,2L,1L - -# define LN_id_qt_unotice "Policy Qualifier User Notice" -# define SN_id_qt_unotice "id-qt-unotice" -# define NID_id_qt_unotice 165 -# define OBJ_id_qt_unotice OBJ_id_pkix,2L,2L - -# define SN_rc2_64_cbc "RC2-64-CBC" -# define LN_rc2_64_cbc "rc2-64-cbc" -# define NID_rc2_64_cbc 166 - -# define SN_SMIMECapabilities "SMIME-CAPS" -# define LN_SMIMECapabilities "S/MIME Capabilities" -# define NID_SMIMECapabilities 167 -# define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -# define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -# define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -# define NID_pbeWithMD2AndRC2_CBC 168 -# define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L - -# define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -# define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -# define NID_pbeWithMD5AndRC2_CBC 169 -# define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L - -# define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -# define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -# define NID_pbeWithSHA1AndDES_CBC 170 -# define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L - -/* Extension request OIDs */ - -# define LN_ms_ext_req "Microsoft Extension Request" -# define SN_ms_ext_req "msExtReq" -# define NID_ms_ext_req 171 -# define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -# define LN_ext_req "Extension Request" -# define SN_ext_req "extReq" -# define NID_ext_req 172 -# define OBJ_ext_req OBJ_pkcs9,14L - -# define SN_name "name" -# define LN_name "name" -# define NID_name 173 -# define OBJ_name OBJ_X509,41L - -# define SN_dnQualifier "dnQualifier" -# define LN_dnQualifier "dnQualifier" -# define NID_dnQualifier 174 -# define OBJ_dnQualifier OBJ_X509,46L - -# define SN_id_pe "id-pe" -# define NID_id_pe 175 -# define OBJ_id_pe OBJ_id_pkix,1L - -# define SN_id_ad "id-ad" -# define NID_id_ad 176 -# define OBJ_id_ad OBJ_id_pkix,48L - -# define SN_info_access "authorityInfoAccess" -# define LN_info_access "Authority Information Access" -# define NID_info_access 177 -# define OBJ_info_access OBJ_id_pe,1L - -# define SN_ad_OCSP "OCSP" -# define LN_ad_OCSP "OCSP" -# define NID_ad_OCSP 178 -# define OBJ_ad_OCSP OBJ_id_ad,1L - -# define SN_ad_ca_issuers "caIssuers" -# define LN_ad_ca_issuers "CA Issuers" -# define NID_ad_ca_issuers 179 -# define OBJ_ad_ca_issuers OBJ_id_ad,2L - -# define SN_OCSP_sign "OCSPSigning" -# define LN_OCSP_sign "OCSP Signing" -# define NID_OCSP_sign 180 -# define OBJ_OCSP_sign OBJ_id_kp,9L -# endif /* USE_OBJ_MAC */ - -# include -# include - -# define OBJ_NAME_TYPE_UNDEF 0x00 -# define OBJ_NAME_TYPE_MD_METH 0x01 -# define OBJ_NAME_TYPE_CIPHER_METH 0x02 -# define OBJ_NAME_TYPE_PKEY_METH 0x03 -# define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 - -# define OBJ_NAME_ALIAS 0x8000 - -# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 -# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct obj_name_st { - int type; - int alias; - const char *name; - const char *data; -} OBJ_NAME; - -# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) - -int OBJ_NAME_init(void); -int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), - int (*cmp_func) (const char *, const char *), - void (*free_func) (const char *, int, const char *)); -const char *OBJ_NAME_get(const char *name, int type); -int OBJ_NAME_add(const char *name, int type, const char *data); -int OBJ_NAME_remove(const char *name, int type); -void OBJ_NAME_cleanup(int type); /* -1 for everything */ -void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), - void *arg); -void OBJ_NAME_do_all_sorted(int type, - void (*fn) (const OBJ_NAME *, void *arg), - void *arg); - -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_nid2obj(int n); -const char *OBJ_nid2ln(int n); -const char *OBJ_nid2sn(int n); -int OBJ_obj2nid(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); -int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); -int OBJ_txt2nid(const char *s); -int OBJ_ln2nid(const char *s); -int OBJ_sn2nid(const char *s); -int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); -const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, - int (*cmp) (const void *, const void *)); -const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, - int size, - int (*cmp) (const void *, const void *), - int flags); - -# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ - static int nm##_cmp(type1 const *, type2 const *); \ - scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ - _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) -# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -/*- - * Unsolved problem: if a type is actually a pointer type, like - * nid_triple is, then its impossible to get a const where you need - * it. Consider: - * - * typedef int nid_triple[3]; - * const void *a_; - * const nid_triple const *a = a_; - * - * The assignement discards a const because what you really want is: - * - * const int const * const *a = a_; - * - * But if you do that, you lose the fact that a is an array of 3 ints, - * which breaks comparison functions. - * - * Thus we end up having to cast, sadly, or unpack the - * declarations. Or, as I finally did in this case, delcare nid_triple - * to be a struct, which it should have been in the first place. - * - * Ben, August 2008. - * - * Also, strictly speaking not all types need be const, but handling - * the non-constness means a lot of complication, and in practice - * comparison routines do always not touch their arguments. - */ - -# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ - ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN))) - -# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ - ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN)),flags) - -int OBJ_new_nid(int num); -int OBJ_add_object(const ASN1_OBJECT *obj); -int OBJ_create(const char *oid, const char *sn, const char *ln); -void OBJ_cleanup(void); -int OBJ_create_objects(BIO *in); - -int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); -int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); -int OBJ_add_sigid(int signid, int dig_id, int pkey_id); -void OBJ_sigid_free(void); - -extern int obj_cleanup_defer; -void check_defer(int nid); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_OBJ_strings(void); - -/* Error codes for the OBJ functions. */ - -/* Function codes. */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 - -/* Reason codes. */ -# define OBJ_R_MALLOC_FAILURE 100 -# define OBJ_R_UNKNOWN_NID 101 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ocsp.h b/ext/openssl/windows/x86/include/openssl/ocsp.h deleted file mode 100644 index ca2ee76d..00000000 --- a/ext/openssl/windows/x86/include/openssl/ocsp.h +++ /dev/null @@ -1,637 +0,0 @@ -/* ocsp.h */ -/* - * Written by Tom Titchener for the OpenSSL - * project. - */ - -/* - * History: This file was transfered to Richard Levitte from CertCo by Kathy - * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a - * patch kit. - */ - -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Various flags and values */ - -# define OCSP_DEFAULT_NONCE_LENGTH 16 - -# define OCSP_NOCERTS 0x1 -# define OCSP_NOINTERN 0x2 -# define OCSP_NOSIGS 0x4 -# define OCSP_NOCHAIN 0x8 -# define OCSP_NOVERIFY 0x10 -# define OCSP_NOEXPLICIT 0x20 -# define OCSP_NOCASIGN 0x40 -# define OCSP_NODELEGATED 0x80 -# define OCSP_NOCHECKS 0x100 -# define OCSP_TRUSTOTHER 0x200 -# define OCSP_RESPID_KEY 0x400 -# define OCSP_NOTIME 0x800 - -/*- CertID ::= SEQUENCE { - * hashAlgorithm AlgorithmIdentifier, - * issuerNameHash OCTET STRING, -- Hash of Issuer's DN - * issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields) - * serialNumber CertificateSerialNumber } - */ -typedef struct ocsp_cert_id_st { - X509_ALGOR *hashAlgorithm; - ASN1_OCTET_STRING *issuerNameHash; - ASN1_OCTET_STRING *issuerKeyHash; - ASN1_INTEGER *serialNumber; -} OCSP_CERTID; - -DECLARE_STACK_OF(OCSP_CERTID) - -/*- Request ::= SEQUENCE { - * reqCert CertID, - * singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_one_request_st { - OCSP_CERTID *reqCert; - STACK_OF(X509_EXTENSION) *singleRequestExtensions; -} OCSP_ONEREQ; - -DECLARE_STACK_OF(OCSP_ONEREQ) -DECLARE_ASN1_SET_OF(OCSP_ONEREQ) - -/*- TBSRequest ::= SEQUENCE { - * version [0] EXPLICIT Version DEFAULT v1, - * requestorName [1] EXPLICIT GeneralName OPTIONAL, - * requestList SEQUENCE OF Request, - * requestExtensions [2] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_req_info_st { - ASN1_INTEGER *version; - GENERAL_NAME *requestorName; - STACK_OF(OCSP_ONEREQ) *requestList; - STACK_OF(X509_EXTENSION) *requestExtensions; -} OCSP_REQINFO; - -/*- Signature ::= SEQUENCE { - * signatureAlgorithm AlgorithmIdentifier, - * signature BIT STRING, - * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } - */ -typedef struct ocsp_signature_st { - X509_ALGOR *signatureAlgorithm; - ASN1_BIT_STRING *signature; - STACK_OF(X509) *certs; -} OCSP_SIGNATURE; - -/*- OCSPRequest ::= SEQUENCE { - * tbsRequest TBSRequest, - * optionalSignature [0] EXPLICIT Signature OPTIONAL } - */ -typedef struct ocsp_request_st { - OCSP_REQINFO *tbsRequest; - OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */ -} OCSP_REQUEST; - -/*- OCSPResponseStatus ::= ENUMERATED { - * successful (0), --Response has valid confirmations - * malformedRequest (1), --Illegal confirmation request - * internalError (2), --Internal error in issuer - * tryLater (3), --Try again later - * --(4) is not used - * sigRequired (5), --Must sign the request - * unauthorized (6) --Request unauthorized - * } - */ -# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 -# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 -# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 -# define OCSP_RESPONSE_STATUS_TRYLATER 3 -# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 -# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 - -/*- ResponseBytes ::= SEQUENCE { - * responseType OBJECT IDENTIFIER, - * response OCTET STRING } - */ -typedef struct ocsp_resp_bytes_st { - ASN1_OBJECT *responseType; - ASN1_OCTET_STRING *response; -} OCSP_RESPBYTES; - -/*- OCSPResponse ::= SEQUENCE { - * responseStatus OCSPResponseStatus, - * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } - */ -struct ocsp_response_st { - ASN1_ENUMERATED *responseStatus; - OCSP_RESPBYTES *responseBytes; -}; - -/*- ResponderID ::= CHOICE { - * byName [1] Name, - * byKey [2] KeyHash } - */ -# define V_OCSP_RESPID_NAME 0 -# define V_OCSP_RESPID_KEY 1 -struct ocsp_responder_id_st { - int type; - union { - X509_NAME *byName; - ASN1_OCTET_STRING *byKey; - } value; -}; - -DECLARE_STACK_OF(OCSP_RESPID) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) - -/*- KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key - * --(excluding the tag and length fields) - */ - -/*- RevokedInfo ::= SEQUENCE { - * revocationTime GeneralizedTime, - * revocationReason [0] EXPLICIT CRLReason OPTIONAL } - */ -typedef struct ocsp_revoked_info_st { - ASN1_GENERALIZEDTIME *revocationTime; - ASN1_ENUMERATED *revocationReason; -} OCSP_REVOKEDINFO; - -/*- CertStatus ::= CHOICE { - * good [0] IMPLICIT NULL, - * revoked [1] IMPLICIT RevokedInfo, - * unknown [2] IMPLICIT UnknownInfo } - */ -# define V_OCSP_CERTSTATUS_GOOD 0 -# define V_OCSP_CERTSTATUS_REVOKED 1 -# define V_OCSP_CERTSTATUS_UNKNOWN 2 -typedef struct ocsp_cert_status_st { - int type; - union { - ASN1_NULL *good; - OCSP_REVOKEDINFO *revoked; - ASN1_NULL *unknown; - } value; -} OCSP_CERTSTATUS; - -/*- SingleResponse ::= SEQUENCE { - * certID CertID, - * certStatus CertStatus, - * thisUpdate GeneralizedTime, - * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, - * singleExtensions [1] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_single_response_st { - OCSP_CERTID *certId; - OCSP_CERTSTATUS *certStatus; - ASN1_GENERALIZEDTIME *thisUpdate; - ASN1_GENERALIZEDTIME *nextUpdate; - STACK_OF(X509_EXTENSION) *singleExtensions; -} OCSP_SINGLERESP; - -DECLARE_STACK_OF(OCSP_SINGLERESP) -DECLARE_ASN1_SET_OF(OCSP_SINGLERESP) - -/*- ResponseData ::= SEQUENCE { - * version [0] EXPLICIT Version DEFAULT v1, - * responderID ResponderID, - * producedAt GeneralizedTime, - * responses SEQUENCE OF SingleResponse, - * responseExtensions [1] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_response_data_st { - ASN1_INTEGER *version; - OCSP_RESPID *responderId; - ASN1_GENERALIZEDTIME *producedAt; - STACK_OF(OCSP_SINGLERESP) *responses; - STACK_OF(X509_EXTENSION) *responseExtensions; -} OCSP_RESPDATA; - -/*- BasicOCSPResponse ::= SEQUENCE { - * tbsResponseData ResponseData, - * signatureAlgorithm AlgorithmIdentifier, - * signature BIT STRING, - * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } - */ - /* - * Note 1: The value for "signature" is specified in the OCSP rfc2560 as - * follows: "The value for the signature SHALL be computed on the hash of - * the DER encoding ResponseData." This means that you must hash the - * DER-encoded tbsResponseData, and then run it through a crypto-signing - * function, which will (at least w/RSA) do a hash-'n'-private-encrypt - * operation. This seems a bit odd, but that's the spec. Also note that - * the data structures do not leave anywhere to independently specify the - * algorithm used for the initial hash. So, we look at the - * signature-specification algorithm, and try to do something intelligent. - * -- Kathy Weinhold, CertCo - */ - /* - * Note 2: It seems that the mentioned passage from RFC 2560 (section - * 4.2.1) is open for interpretation. I've done tests against another - * responder, and found that it doesn't do the double hashing that the RFC - * seems to say one should. Therefore, all relevant functions take a flag - * saying which variant should be used. -- Richard Levitte, OpenSSL team - * and CeloCom - */ -typedef struct ocsp_basic_response_st { - OCSP_RESPDATA *tbsResponseData; - X509_ALGOR *signatureAlgorithm; - ASN1_BIT_STRING *signature; - STACK_OF(X509) *certs; -} OCSP_BASICRESP; - -/*- - * CRLReason ::= ENUMERATED { - * unspecified (0), - * keyCompromise (1), - * cACompromise (2), - * affiliationChanged (3), - * superseded (4), - * cessationOfOperation (5), - * certificateHold (6), - * removeFromCRL (8) } - */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 - -/*- - * CrlID ::= SEQUENCE { - * crlUrl [0] EXPLICIT IA5String OPTIONAL, - * crlNum [1] EXPLICIT INTEGER OPTIONAL, - * crlTime [2] EXPLICIT GeneralizedTime OPTIONAL } - */ -typedef struct ocsp_crl_id_st { - ASN1_IA5STRING *crlUrl; - ASN1_INTEGER *crlNum; - ASN1_GENERALIZEDTIME *crlTime; -} OCSP_CRLID; - -/*- - * ServiceLocator ::= SEQUENCE { - * issuer Name, - * locator AuthorityInfoAccessSyntax OPTIONAL } - */ -typedef struct ocsp_service_locator_st { - X509_NAME *issuer; - STACK_OF(ACCESS_DESCRIPTION) *locator; -} OCSP_SERVICELOC; - -# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" -# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" - -# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) - -# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) - -# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ - (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL) - -# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ - (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL) - -# define PEM_write_bio_OCSP_REQUEST(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ - bp,(char *)o, NULL,NULL,0,NULL,NULL) - -# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ - bp,(char *)o, NULL,NULL,0,NULL,NULL) - -# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) - -# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) - -# define OCSP_REQUEST_sign(o,pkey,md) \ - ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\ - o->optionalSignature->signatureAlgorithm,NULL,\ - o->optionalSignature->signature,o->tbsRequest,pkey,md) - -# define OCSP_BASICRESP_sign(o,pkey,md,d) \ - ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\ - o->signature,o->tbsResponseData,pkey,md) - -# define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\ - a->optionalSignature->signatureAlgorithm,\ - a->optionalSignature->signature,a->tbsRequest,r) - -# define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\ - a->signatureAlgorithm,a->signature,a->tbsResponseData,r) - -# define ASN1_BIT_STRING_digest(data,type,md,len) \ - ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) - -# define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) - -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); - -OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); - -OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); - -OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, - X509_NAME *issuerName, - ASN1_BIT_STRING *issuerKey, - ASN1_INTEGER *serialNumber); - -OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); - -int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); -int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); -int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); -int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); - -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); -int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); - -int OCSP_request_sign(OCSP_REQUEST *req, - X509 *signer, - EVP_PKEY *key, - const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); - -int OCSP_response_status(OCSP_RESPONSE *resp); -OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); - -int OCSP_resp_count(OCSP_BASICRESP *bs); -OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); -int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); -int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, - ASN1_GENERALIZEDTIME **revtime, - ASN1_GENERALIZEDTIME **thisupd, - ASN1_GENERALIZEDTIME **nextupd); -int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, - int *reason, - ASN1_GENERALIZEDTIME **revtime, - ASN1_GENERALIZEDTIME **thisupd, - ASN1_GENERALIZEDTIME **nextupd); -int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, - ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); - -int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, - X509_STORE *store, unsigned long flags); - -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); - -int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b); -int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); - -int OCSP_request_onereq_count(OCSP_REQUEST *req); -OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); -OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); -int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, - ASN1_OCTET_STRING **pikeyHash, - ASN1_INTEGER **pserial, OCSP_CERTID *cid); -int OCSP_request_is_signed(OCSP_REQUEST *req); -OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); -OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, - OCSP_CERTID *cid, - int status, int reason, - ASN1_TIME *revtime, - ASN1_TIME *thisupd, - ASN1_TIME *nextupd); -int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); -int OCSP_basic_sign(OCSP_BASICRESP *brsp, - X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); - -X509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim); - -X509_EXTENSION *OCSP_accept_responses_new(char **oids); - -X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); - -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls); - -int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); -int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); -int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj, - int lastpos); -int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); -X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); -X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); -void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, - int *idx); -int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); - -int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); -int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); -int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos); -int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); -X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); -X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); -void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); -int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); - -int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); -int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); -int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj, - int lastpos); -int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); -X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); -void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, - int *idx); -int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); - -int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); -int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); -int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj, - int lastpos); -int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); -X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); -void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, - int *idx); -int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); - -DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) -DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) -DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) -DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) -DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) -DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) -DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) - -const char *OCSP_response_status_str(long s); -const char *OCSP_cert_status_str(long s); -const char *OCSP_crl_reason_str(long s); - -int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); -int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); - -int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, - X509_STORE *st, unsigned long flags); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_OCSP_strings(void); - -/* Error codes for the OCSP functions. */ - -/* Function codes. */ -# define OCSP_F_ASN1_STRING_ENCODE 100 -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_OCSP_SENDREQ_BIO 112 -# define OCSP_F_OCSP_SENDREQ_NBIO 117 -# define OCSP_F_PARSE_HTTP_LINE1 118 -# define OCSP_F_REQUEST_VERIFY 113 - -/* Reason codes. */ -# define OCSP_R_BAD_DATA 100 -# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 -# define OCSP_R_DIGEST_ERR 102 -# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 -# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 -# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_CONTENT 106 -# define OCSP_R_NO_PUBLIC_KEY 107 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# define OCSP_R_REQUEST_NOT_SIGNED 128 -# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 -# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_READ_ERROR 113 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 -# define OCSP_R_SERVER_WRITE_ERROR 116 -# define OCSP_R_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/opensslconf.h b/ext/openssl/windows/x86/include/openssl/opensslconf.h deleted file mode 100644 index c2648e63..00000000 --- a/ext/openssl/windows/x86/include/openssl/opensslconf.h +++ /dev/null @@ -1,271 +0,0 @@ -/* opensslconf.h */ -/* WARNING: Generated automatically from opensslconf.h.in by Configure. */ - -#ifdef __cplusplus -extern "C" { -#endif -/* OpenSSL was configured with the following options: */ -#ifndef OPENSSL_SYSNAME_WIN32 -# define OPENSSL_SYSNAME_WIN32 -#endif -#ifndef OPENSSL_DOING_MAKEDEPEND - - -#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -# define OPENSSL_NO_EC_NISTP_64_GCC_128 -#endif -#ifndef OPENSSL_NO_GMP -# define OPENSSL_NO_GMP -#endif -#ifndef OPENSSL_NO_JPAKE -# define OPENSSL_NO_JPAKE -#endif -#ifndef OPENSSL_NO_KRB5 -# define OPENSSL_NO_KRB5 -#endif -#ifndef OPENSSL_NO_LIBUNBOUND -# define OPENSSL_NO_LIBUNBOUND -#endif -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_NO_RFC3779 -# define OPENSSL_NO_RFC3779 -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL2 -# define OPENSSL_NO_SSL2 -#endif -#ifndef OPENSSL_NO_STORE -# define OPENSSL_NO_STORE -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif - -#endif /* OPENSSL_DOING_MAKEDEPEND */ - -#ifndef OPENSSL_THREADS -# define OPENSSL_THREADS -#endif - -/* The OPENSSL_NO_* macros are also defined as NO_* if the application - asks for it. This is a transient feature that is provided for those - who haven't had the time to do the appropriate changes in their - applications. */ -#ifdef OPENSSL_ALGORITHM_DEFINES -# if defined(OPENSSL_NO_EC_NISTP_64_GCC_128) && !defined(NO_EC_NISTP_64_GCC_128) -# define NO_EC_NISTP_64_GCC_128 -# endif -# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP) -# define NO_GMP -# endif -# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE) -# define NO_JPAKE -# endif -# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5) -# define NO_KRB5 -# endif -# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND) -# define NO_LIBUNBOUND -# endif -# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2) -# define NO_MD2 -# endif -# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5) -# define NO_RC5 -# endif -# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779) -# define NO_RFC3779 -# endif -# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP) -# define NO_SCTP -# endif -# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE) -# define NO_SSL_TRACE -# endif -# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2) -# define NO_SSL2 -# endif -# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE) -# define NO_STORE -# endif -# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST) -# define NO_UNIT_TEST -# endif -# if defined(OPENSSL_NO_WEAK_SSL_CIPHERS) && !defined(NO_WEAK_SSL_CIPHERS) -# define NO_WEAK_SSL_CIPHERS -# endif -#endif - -#define OPENSSL_CPUID_OBJ - -/* crypto/opensslconf.h.in */ - -/* Generate 80386 code? */ -#undef I386_ONLY - -#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ -#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) -#define ENGINESDIR "C:\\OpenSSL/lib/engines" -#define OPENSSLDIR "C:\\OpenSSL/ssl" -#endif -#endif - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION -#define OPENSSL_EXPORT_VAR_AS_FUNCTION - -#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) -#define IDEA_INT unsigned int -#endif - -#if defined(HEADER_MD2_H) && !defined(MD2_INT) -#define MD2_INT unsigned int -#endif - -#if defined(HEADER_RC2_H) && !defined(RC2_INT) -/* I need to put in a mod for the alpha - eay */ -#define RC2_INT unsigned int -#endif - -#if defined(HEADER_RC4_H) -#if !defined(RC4_INT) -/* using int types make the structure larger but make the code faster - * on most boxes I have tested - up to %20 faster. */ -/* - * I don't know what does "most" mean, but declaring "int" is a must on: - * - Intel P6 because partial register stalls are very expensive; - * - elder Alpha because it lacks byte load/store instructions; - */ -#define RC4_INT unsigned int -#endif -#if !defined(RC4_CHUNK) -/* - * This enables code handling data aligned at natural CPU word - * boundary. See crypto/rc4/rc4_enc.c for further details. - */ -#undef RC4_CHUNK -#endif -#endif - -#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) -/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a - * %20 speed up (longs are 8 bytes, int's are 4). */ -#ifndef DES_LONG -#define DES_LONG unsigned long -#endif -#endif - -#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) -#define CONFIG_HEADER_BN_H -#define BN_LLONG - -/* Should we define BN_DIV2W here? */ - -/* Only one for the following should be defined */ -#undef SIXTY_FOUR_BIT_LONG -#undef SIXTY_FOUR_BIT -#define THIRTY_TWO_BIT -#endif - -#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) -#define CONFIG_HEADER_RC4_LOCL_H -/* if this is defined data[i] is used instead of *data, this is a %20 - * speedup on x86 */ -#define RC4_INDEX -#endif - -#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) -#define CONFIG_HEADER_BF_LOCL_H -#undef BF_PTR -#endif /* HEADER_BF_LOCL_H */ - -#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) -#define CONFIG_HEADER_DES_LOCL_H -#ifndef DES_DEFAULT_OPTIONS -/* the following is tweaked from a config script, that is why it is a - * protected undef/define */ -#ifndef DES_PTR -#undef DES_PTR -#endif - -/* This helps C compiler generate the correct code for multiple functional - * units. It reduces register dependancies at the expense of 2 more - * registers */ -#ifndef DES_RISC1 -#undef DES_RISC1 -#endif - -#ifndef DES_RISC2 -#undef DES_RISC2 -#endif - -#if defined(DES_RISC1) && defined(DES_RISC2) -#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! -#endif - -/* Unroll the inner loop, this sometimes helps, sometimes hinders. - * Very mucy CPU dependant */ -#ifndef DES_UNROLL -#undef DES_UNROLL -#endif - -/* These default values were supplied by - * Peter Gutman - * They are only used if nothing else has been defined */ -#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) -/* Special defines which change the way the code is built depending on the - CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find - even newer MIPS CPU's, but at the moment one size fits all for - optimization options. Older Sparc's work better with only UNROLL, but - there's no way to tell at compile time what it is you're running on */ - -#if defined( __sun ) || defined ( sun ) /* Newer Sparc's */ -# define DES_PTR -# define DES_RISC1 -# define DES_UNROLL -#elif defined( __ultrix ) /* Older MIPS */ -# define DES_PTR -# define DES_RISC2 -# define DES_UNROLL -#elif defined( __osf1__ ) /* Alpha */ -# define DES_PTR -# define DES_RISC2 -#elif defined ( _AIX ) /* RS6000 */ - /* Unknown */ -#elif defined( __hpux ) /* HP-PA */ - /* Unknown */ -#elif defined( __aux ) /* 68K */ - /* Unknown */ -#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ -# define DES_UNROLL -#elif defined( __sgi ) /* Newer MIPS */ -# define DES_PTR -# define DES_RISC2 -# define DES_UNROLL -#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ -# define DES_PTR -# define DES_RISC1 -# define DES_UNROLL -#endif /* Systems-specific speed defines */ -#endif - -#endif /* DES_DEFAULT_OPTIONS */ -#endif /* HEADER_DES_LOCL_H */ -#ifdef __cplusplus -} -#endif diff --git a/ext/openssl/windows/x86/include/openssl/opensslv.h b/ext/openssl/windows/x86/include/openssl/opensslv.h deleted file mode 100644 index 825a330a..00000000 --- a/ext/openssl/windows/x86/include/openssl/opensslv.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) - */ -# define OPENSSL_VERSION_NUMBER 0x100020cfL -# ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2l-fips 25 May 2017" -# else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2l 25 May 2017" -# endif -# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT - -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: - * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major verson number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. - */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.0.0" - - -#ifdef __cplusplus -} -#endif -#endif /* HEADER_OPENSSLV_H */ diff --git a/ext/openssl/windows/x86/include/openssl/ossl_typ.h b/ext/openssl/windows/x86/include/openssl/ossl_typ.h deleted file mode 100644 index 364d2623..00000000 --- a/ext/openssl/windows/x86/include/openssl/ossl_typ.h +++ /dev/null @@ -1,213 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; - -# ifdef OPENSSL_SYS_WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef X509_CERT_PAIR -# undef PKCS7_ISSUER_AND_SERIAL -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct env_md_st EVP_MD; -typedef struct env_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; - -typedef struct rand_meth_st RAND_METHOD; - -typedef struct ecdh_method ECDH_METHOD; -typedef struct ecdsa_method ECDSA_METHOD; - -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; - -typedef struct store_st STORE; -typedef struct store_method_st STORE_METHOD; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct st_ERR_FNS ERR_FNS; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - - /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ -# define DECLARE_PKCS12_STACK_OF(type)/* Nothing */ -# define IMPLEMENT_PKCS12_STACK_OF(type)/* Nothing */ - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; -/* Callback types for crypto.h */ -typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/ext/openssl/windows/x86/include/openssl/pem.h b/ext/openssl/windows/x86/include/openssl/pem.h deleted file mode 100644 index aac72fb2..00000000 --- a/ext/openssl/windows/x86/include/openssl/pem.h +++ /dev/null @@ -1,617 +0,0 @@ -/* crypto/pem/pem.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_PEM_H -# define HEADER_PEM_H - -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# ifndef OPENSSL_NO_STACK -# include -# endif -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PEM_BUFSIZE 1024 - -# define PEM_OBJ_UNDEF 0 -# define PEM_OBJ_X509 1 -# define PEM_OBJ_X509_REQ 2 -# define PEM_OBJ_CRL 3 -# define PEM_OBJ_SSL_SESSION 4 -# define PEM_OBJ_PRIV_KEY 10 -# define PEM_OBJ_PRIV_RSA 11 -# define PEM_OBJ_PRIV_DSA 12 -# define PEM_OBJ_PRIV_DH 13 -# define PEM_OBJ_PUB_RSA 14 -# define PEM_OBJ_PUB_DSA 15 -# define PEM_OBJ_PUB_DH 16 -# define PEM_OBJ_DHPARAMS 17 -# define PEM_OBJ_DSAPARAMS 18 -# define PEM_OBJ_PRIV_RSA_PUBLIC 19 -# define PEM_OBJ_PRIV_ECDSA 20 -# define PEM_OBJ_PUB_ECDSA 21 -# define PEM_OBJ_ECPARAMETERS 22 - -# define PEM_ERROR 30 -# define PEM_DEK_DES_CBC 40 -# define PEM_DEK_IDEA_CBC 45 -# define PEM_DEK_DES_EDE 50 -# define PEM_DEK_DES_ECB 60 -# define PEM_DEK_RSA 70 -# define PEM_DEK_RSA_MD2 80 -# define PEM_DEK_RSA_MD5 90 - -# define PEM_MD_MD2 NID_md2 -# define PEM_MD_MD5 NID_md5 -# define PEM_MD_SHA NID_sha -# define PEM_MD_MD2_RSA NID_md2WithRSAEncryption -# define PEM_MD_MD5_RSA NID_md5WithRSAEncryption -# define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption - -# define PEM_STRING_X509_OLD "X509 CERTIFICATE" -# define PEM_STRING_X509 "CERTIFICATE" -# define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" -# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" -# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" -# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" -# define PEM_STRING_X509_CRL "X509 CRL" -# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" -# define PEM_STRING_PUBLIC "PUBLIC KEY" -# define PEM_STRING_RSA "RSA PRIVATE KEY" -# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" -# define PEM_STRING_DSA "DSA PRIVATE KEY" -# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" -# define PEM_STRING_PKCS7 "PKCS7" -# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" -# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" -# define PEM_STRING_PKCS8INF "PRIVATE KEY" -# define PEM_STRING_DHPARAMS "DH PARAMETERS" -# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" -# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" -# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" -# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" -# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" -# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" -# define PEM_STRING_PARAMETERS "PARAMETERS" -# define PEM_STRING_CMS "CMS" - - /* - * Note that this structure is initialised by PEM_SealInit and cleaned up - * by PEM_SealFinal (at least for now) - */ -typedef struct PEM_Encode_Seal_st { - EVP_ENCODE_CTX encode; - EVP_MD_CTX md; - EVP_CIPHER_CTX cipher; -} PEM_ENCODE_SEAL_CTX; - -/* enc_type is one off */ -# define PEM_TYPE_ENCRYPTED 10 -# define PEM_TYPE_MIC_ONLY 20 -# define PEM_TYPE_MIC_CLEAR 30 -# define PEM_TYPE_CLEAR 40 - -typedef struct pem_recip_st { - char *name; - X509_NAME *dn; - int cipher; - int key_enc; - /* char iv[8]; unused and wrong size */ -} PEM_USER; - -typedef struct pem_ctx_st { - int type; /* what type of object */ - struct { - int version; - int mode; - } proc_type; - - char *domain; - - struct { - int cipher; - /*- - unused, and wrong size - unsigned char iv[8]; */ - } DEK_info; - - PEM_USER *originator; - - int num_recipient; - PEM_USER **recipient; -/*- - XXX(ben): don#t think this is used! - STACK *x509_chain; / * certificate chain */ - EVP_MD *md; /* signature type */ - - int md_enc; /* is the md encrypted or not? */ - int md_len; /* length of md_data */ - char *md_data; /* message digest, could be pkey encrypted */ - - EVP_CIPHER *dec; /* date encryption cipher */ - int key_len; /* key length */ - unsigned char *key; /* key */ - /*- - unused, and wrong size - unsigned char iv[8]; */ - - int data_enc; /* is the data encrypted */ - int data_len; - unsigned char *data; -} PEM_CTX; - -/* - * These macros make the PEM_read/PEM_write functions easier to maintain and - * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or - * IMPLEMENT_PEM_rw_cb(...) - */ - -# ifdef OPENSSL_NO_FP_API - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ -# else - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# endif - -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_read_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb(name, type, str, asn1) - -/* These are the same except they are for the declarations */ - -# if defined(OPENSSL_NO_FP_API) - -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ -# else - -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# endif - -# ifndef OPENSSL_NO_BIO -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); - -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); - -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# else - -# define DECLARE_PEM_read_bio(name, type) /**/ -# define DECLARE_PEM_write_bio(name, type) /**/ -# define DECLARE_PEM_write_bio_const(name, type) /**/ -# define DECLARE_PEM_write_cb_bio(name, type) /**/ -# endif -# define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) -# define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) -# define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -# if 1 -/* "userdata": new with OpenSSL 0.9.4 */ -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); -# else -/* OpenSSL 0.9.3, 0.9.3a */ -typedef int pem_password_cb (char *buf, int size, int rwflag); -# endif - -int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); -int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, - pem_password_cb *callback, void *u); - -# ifndef OPENSSL_NO_BIO -int PEM_read_bio(BIO *bp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write_bio(BIO *bp, const char *name, const char *hdr, - const unsigned char *data, long len); -int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u); -void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cd, void *u); -# endif - -int PEM_read(FILE *fp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write(FILE *fp, const char *name, const char *hdr, - const unsigned char *data, long len); -void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); -STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); - -int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, - EVP_MD *md_type, unsigned char **ek, int *ekl, - unsigned char *iv, EVP_PKEY **pubk, int npubk); -void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, - unsigned char *in, int inl); -int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl, - unsigned char *out, int *outl, EVP_PKEY *priv); - -void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); -int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, - unsigned int *siglen, EVP_PKEY *pkey); - -int PEM_def_callback(char *buf, int num, int w, void *key); -void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); - -# include - -DECLARE_PEM_rw(X509, X509) -DECLARE_PEM_rw(X509_AUX, X509) -DECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR) -DECLARE_PEM_rw(X509_REQ, X509_REQ) -DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) -DECLARE_PEM_rw(X509_CRL, X509_CRL) -DECLARE_PEM_rw(PKCS7, PKCS7) -DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) -DECLARE_PEM_rw(PKCS8, X509_SIG) -DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) -# endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) -# endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) - -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); - -EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); - -EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); - -EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PrivateKey_bio(BIO *in); -EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 -EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, - pem_password_cb *cb, void *u); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -void ERR_load_PEM_strings(void); - -/* Error codes for the PEM functions. */ - -/* Function codes. */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_PK8PKEY 119 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SEALFINAL 110 -# define PEM_F_PEM_SEALINIT 111 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 - -/* Reason codes. */ -# define PEM_R_BAD_BASE64_DECODE 100 -# define PEM_R_BAD_DECRYPT 101 -# define PEM_R_BAD_END_LINE 102 -# define PEM_R_BAD_IV_CHARS 103 -# define PEM_R_BAD_MAGIC_NUMBER 116 -# define PEM_R_BAD_PASSWORD_READ 104 -# define PEM_R_BAD_VERSION_NUMBER 117 -# define PEM_R_BIO_WRITE_FAILURE 118 -# define PEM_R_CIPHER_IS_NULL 127 -# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 -# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 -# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 -# define PEM_R_HEADER_TOO_LONG 128 -# define PEM_R_INCONSISTENT_HEADER 121 -# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PUBLIC_KEY_NO_RSA 110 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 - -# ifdef __cplusplus -} -# endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/pem2.h b/ext/openssl/windows/x86/include/openssl/pem2.h deleted file mode 100644 index 84897d5e..00000000 --- a/ext/openssl/windows/x86/include/openssl/pem2.h +++ /dev/null @@ -1,70 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - * This header only exists to break a circular dependency between pem and err - * Ben 30 Jan 1999. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef HEADER_PEM_H -void ERR_load_PEM_strings(void); -#endif - -#ifdef __cplusplus -} -#endif diff --git a/ext/openssl/windows/x86/include/openssl/pkcs12.h b/ext/openssl/windows/x86/include/openssl/pkcs12.h deleted file mode 100644 index 21f1f62b..00000000 --- a/ext/openssl/windows/x86/include/openssl/pkcs12.h +++ /dev/null @@ -1,342 +0,0 @@ -/* pkcs12.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project - * 1999. - */ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PKCS12_KEY_ID 1 -# define PKCS12_IV_ID 2 -# define PKCS12_MAC_ID 3 - -/* Default iteration count */ -# ifndef PKCS12_DEFAULT_ITER -# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER -# endif - -# define PKCS12_MAC_KEY_LENGTH 20 - -# define PKCS12_SALT_LEN 8 - -/* Uncomment out next line for unicode password and names, otherwise ASCII */ - -/* - * #define PBE_UNICODE - */ - -# ifdef PBE_UNICODE -# define PKCS12_key_gen PKCS12_key_gen_uni -# define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni -# else -# define PKCS12_key_gen PKCS12_key_gen_asc -# define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc -# endif - -/* MS key usage constants */ - -# define KEY_EX 0x10 -# define KEY_SIG 0x80 - -typedef struct { - X509_SIG *dinfo; - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *iter; /* defaults to 1 */ -} PKCS12_MAC_DATA; - -typedef struct { - ASN1_INTEGER *version; - PKCS12_MAC_DATA *mac; - PKCS7 *authsafes; -} PKCS12; - -typedef struct { - ASN1_OBJECT *type; - union { - struct pkcs12_bag_st *bag; /* secret, crl and certbag */ - struct pkcs8_priv_key_info_st *keybag; /* keybag */ - X509_SIG *shkeybag; /* shrouded key bag */ - STACK_OF(PKCS12_SAFEBAG) *safes; - ASN1_TYPE *other; - } value; - STACK_OF(X509_ATTRIBUTE) *attrib; -} PKCS12_SAFEBAG; - -DECLARE_STACK_OF(PKCS12_SAFEBAG) -DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG) -DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) - -typedef struct pkcs12_bag_st { - ASN1_OBJECT *type; - union { - ASN1_OCTET_STRING *x509cert; - ASN1_OCTET_STRING *x509crl; - ASN1_OCTET_STRING *octet; - ASN1_IA5STRING *sdsicert; - ASN1_TYPE *other; /* Secret or other bag */ - } value; -} PKCS12_BAGS; - -# define PKCS12_ERROR 0 -# define PKCS12_OK 1 - -/* Compatibility macros */ - -# define M_PKCS12_x5092certbag PKCS12_x5092certbag -# define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag - -# define M_PKCS12_certbag2x509 PKCS12_certbag2x509 -# define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl - -# define M_PKCS12_unpack_p7data PKCS12_unpack_p7data -# define M_PKCS12_pack_authsafes PKCS12_pack_authsafes -# define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes -# define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata - -# define M_PKCS12_decrypt_skey PKCS12_decrypt_skey -# define M_PKCS8_decrypt PKCS8_decrypt - -# define M_PKCS12_bag_type(bg) OBJ_obj2nid((bg)->type) -# define M_PKCS12_cert_bag_type(bg) OBJ_obj2nid((bg)->value.bag->type) -# define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type - -# define PKCS12_get_attr(bag, attr_nid) \ - PKCS12_get_attr_gen(bag->attrib, attr_nid) - -# define PKCS8_get_attr(p8, attr_nid) \ - PKCS12_get_attr_gen(p8->attributes, attr_nid) - -# define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0) - -PKCS12_SAFEBAG *PKCS12_x5092certbag(X509 *x509); -PKCS12_SAFEBAG *PKCS12_x509crl2certbag(X509_CRL *crl); -X509 *PKCS12_certbag2x509(PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag); - -PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, - int nid1, int nid2); -PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *p8, const char *pass, - int passlen); -PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag, - const char *pass, int passlen); -X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, - const char *pass, int passlen, unsigned char *salt, - int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); -PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, - int passlen, unsigned char *salt, - int saltlen, int iter, - PKCS8_PRIV_KEY_INFO *p8); -PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); -PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - STACK_OF(PKCS12_SAFEBAG) *bags); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, - int passlen); - -int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); -STACK_OF(PKCS7) *PKCS12_unpack_authsafes(PKCS12 *p12); - -int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, - int namelen); -int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, - const unsigned char *name, int namelen); -int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); -ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); -char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); -unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, - int passlen, unsigned char *in, int inlen, - unsigned char **data, int *datalen, - int en_de); -void *PKCS12_item_decrypt_d2i(X509_ALGOR *algor, const ASN1_ITEM *it, - const char *pass, int passlen, - ASN1_OCTET_STRING *oct, int zbuf); -ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, - const ASN1_ITEM *it, - const char *pass, int passlen, - void *obj, int zbuf); -PKCS12 *PKCS12_init(int mode); -int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md_type, int en_de); -int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *mac, unsigned int *maclen); -int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); -int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - const EVP_MD *md_type); -int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, - int saltlen, const EVP_MD *md_type); -unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, - unsigned char **uni, int *unilen); -char *OPENSSL_uni2asc(unsigned char *uni, int unilen); - -DECLARE_ASN1_FUNCTIONS(PKCS12) -DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) -DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) -DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) - -DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) -DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) - -void PKCS12_PBE_add(void); -int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, - STACK_OF(X509) **ca); -PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, - STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, - int mac_iter, int keytype); - -PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); -PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, - EVP_PKEY *key, int key_usage, int iter, - int key_nid, char *pass); -int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, - int safe_nid, int iter, char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); - -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); -PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); -PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); -int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_PKCS12_strings(void); - -/* Error codes for the PKCS12 functions. */ - -/* Function codes. */ -# define PKCS12_F_PARSE_BAG 129 -# define PKCS12_F_PARSE_BAGS 103 -# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 -# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 -# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 -# define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_MAKE_KEYBAG 112 -# define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ADD_KEYUSAGE 124 -# define PKCS12_F_PKCS8_ENCRYPT 125 - -/* Reason codes. */ -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 -# define PKCS12_R_INVALID_NULL_ARGUMENT 104 -# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 -# define PKCS12_R_IV_GEN_ERROR 106 -# define PKCS12_R_KEY_GEN_ERROR 107 -# define PKCS12_R_MAC_ABSENT 108 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# define PKCS12_R_MAC_STRING_SET_ERROR 111 -# define PKCS12_R_MAC_VERIFY_ERROR 112 -# define PKCS12_R_MAC_VERIFY_FAILURE 113 -# define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 -# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/pkcs7.h b/ext/openssl/windows/x86/include/openssl/pkcs7.h deleted file mode 100644 index b51b3863..00000000 --- a/ext/openssl/windows/x86/include/openssl/pkcs7.h +++ /dev/null @@ -1,481 +0,0 @@ -/* crypto/pkcs7/pkcs7.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H - -# include -# include -# include - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_SYS_WIN32 -/* Under Win32 thes are defined in wincrypt.h */ -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# endif - -/*- -Encryption_ID DES-CBC -Digest_ID MD5 -Digest_Encryption_ID rsaEncryption -Key_Encryption_ID rsaEncryption -*/ - -typedef struct pkcs7_issuer_and_serial_st { - X509_NAME *issuer; - ASN1_INTEGER *serial; -} PKCS7_ISSUER_AND_SERIAL; - -typedef struct pkcs7_signer_info_st { - ASN1_INTEGER *version; /* version 1 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *digest_alg; - STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ - X509_ALGOR *digest_enc_alg; - ASN1_OCTET_STRING *enc_digest; - STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ - /* The private key to sign with */ - EVP_PKEY *pkey; -} PKCS7_SIGNER_INFO; - -DECLARE_STACK_OF(PKCS7_SIGNER_INFO) -DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) - -typedef struct pkcs7_recip_info_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *key_enc_algor; - ASN1_OCTET_STRING *enc_key; - X509 *cert; /* get the pub-key from this */ -} PKCS7_RECIP_INFO; - -DECLARE_STACK_OF(PKCS7_RECIP_INFO) -DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) - -typedef struct pkcs7_signed_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - struct pkcs7_st *contents; -} PKCS7_SIGNED; -/* - * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about - * merging the two - */ - -typedef struct pkcs7_enc_content_st { - ASN1_OBJECT *content_type; - X509_ALGOR *algorithm; - ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ - const EVP_CIPHER *cipher; -} PKCS7_ENC_CONTENT; - -typedef struct pkcs7_enveloped_st { - ASN1_INTEGER *version; /* version 0 */ - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENVELOPE; - -typedef struct pkcs7_signedandenveloped_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - PKCS7_ENC_CONTENT *enc_data; - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; -} PKCS7_SIGN_ENVELOPE; - -typedef struct pkcs7_digest_st { - ASN1_INTEGER *version; /* version 0 */ - X509_ALGOR *md; /* md used */ - struct pkcs7_st *contents; - ASN1_OCTET_STRING *digest; -} PKCS7_DIGEST; - -typedef struct pkcs7_encrypted_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENCRYPT; - -typedef struct pkcs7_st { - /* - * The following is non NULL if it contains ASN1 encoding of this - * structure - */ - unsigned char *asn1; - long length; -# define PKCS7_S_HEADER 0 -# define PKCS7_S_BODY 1 -# define PKCS7_S_TAIL 2 - int state; /* used during processing */ - int detached; - ASN1_OBJECT *type; - /* content as defined by the type */ - /* - * all encryption/message digests are applied to the 'contents', leaving - * out the 'type' field. - */ - union { - char *ptr; - /* NID_pkcs7_data */ - ASN1_OCTET_STRING *data; - /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; - /* NID_pkcs7_enveloped */ - PKCS7_ENVELOPE *enveloped; - /* NID_pkcs7_signedAndEnveloped */ - PKCS7_SIGN_ENVELOPE *signed_and_enveloped; - /* NID_pkcs7_digest */ - PKCS7_DIGEST *digest; - /* NID_pkcs7_encrypted */ - PKCS7_ENCRYPT *encrypted; - /* Anything else */ - ASN1_TYPE *other; - } d; -} PKCS7; - -DECLARE_STACK_OF(PKCS7) -DECLARE_ASN1_SET_OF(PKCS7) -DECLARE_PKCS12_STACK_OF(PKCS7) - -# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 -# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 - -# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) -# define PKCS7_get_attributes(si) ((si)->unauth_attr) - -# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) -# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) -# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) -# define PKCS7_type_is_signedAndEnveloped(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) -# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) -# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) - -# define PKCS7_set_detached(p,v) \ - PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) -# define PKCS7_get_detached(p) \ - PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) - -# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) - -/* S/MIME related flags */ - -# define PKCS7_TEXT 0x1 -# define PKCS7_NOCERTS 0x2 -# define PKCS7_NOSIGS 0x4 -# define PKCS7_NOCHAIN 0x8 -# define PKCS7_NOINTERN 0x10 -# define PKCS7_NOVERIFY 0x20 -# define PKCS7_DETACHED 0x40 -# define PKCS7_BINARY 0x80 -# define PKCS7_NOATTR 0x100 -# define PKCS7_NOSMIMECAP 0x200 -# define PKCS7_NOOLDMIMETYPE 0x400 -# define PKCS7_CRLFEOL 0x800 -# define PKCS7_STREAM 0x1000 -# define PKCS7_NOCRL 0x2000 -# define PKCS7_PARTIAL 0x4000 -# define PKCS7_REUSE_DIGEST 0x8000 - -/* Flags: for compatibility with older code */ - -# define SMIME_TEXT PKCS7_TEXT -# define SMIME_NOCERTS PKCS7_NOCERTS -# define SMIME_NOSIGS PKCS7_NOSIGS -# define SMIME_NOCHAIN PKCS7_NOCHAIN -# define SMIME_NOINTERN PKCS7_NOINTERN -# define SMIME_NOVERIFY PKCS7_NOVERIFY -# define SMIME_DETACHED PKCS7_DETACHED -# define SMIME_BINARY PKCS7_BINARY -# define SMIME_NOATTR PKCS7_NOATTR - -DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) - -int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, - const EVP_MD *type, unsigned char *md, - unsigned int *len); -# ifndef OPENSSL_NO_FP_API -PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); -# endif -PKCS7 *PKCS7_dup(PKCS7 *p7); -PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); -int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); -int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); - -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) -DECLARE_ASN1_FUNCTIONS(PKCS7) - -DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) -DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) - -DECLARE_ASN1_NDEF_FUNCTION(PKCS7) -DECLARE_ASN1_PRINT_FUNCTION(PKCS7) - -long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); - -int PKCS7_set_type(PKCS7 *p7, int type); -int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); -int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); -int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, - const EVP_MD *dgst); -int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); -int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); -int PKCS7_content_new(PKCS7 *p7, int nid); -int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, - BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, - X509 *x509); - -BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); -int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); -BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); - -PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, - EVP_PKEY *pkey, const EVP_MD *dgst); -X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); -STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); - -PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); -void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, - X509_ALGOR **pdig, X509_ALGOR **psig); -void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); -int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); -int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); -int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); -int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); - -PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); -ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, - void *data); -int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, - void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); -int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); - -PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, - BIO *data, int flags); - -PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, - X509 *signcert, EVP_PKEY *pkey, - const EVP_MD *md, int flags); - -int PKCS7_final(PKCS7 *p7, BIO *data, int flags); -int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, - BIO *indata, BIO *out, int flags); -STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, - int flags); -PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, - int flags); -int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, - int flags); - -int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, - STACK_OF(X509_ALGOR) *cap); -STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); -int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); - -int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); -int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); -int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, - const unsigned char *md, int mdlen); - -int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); -PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); - -BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_PKCS7_strings(void); - -/* Error codes for the PKCS7 functions. */ - -/* Function codes. */ -# define PKCS7_F_B64_READ_PKCS7 120 -# define PKCS7_F_B64_WRITE_PKCS7 121 -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_I2D_PKCS7_BIO_STREAM 140 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATASIGN 106 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 -# define PKCS7_F_SMIME_READ_PKCS7 122 -# define PKCS7_F_SMIME_TEXT 123 - -/* Reason codes. */ -# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 -# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 -# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 -# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 -# define PKCS7_R_CTRL_ERROR 152 -# define PKCS7_R_DECODE_ERROR 130 -# define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH 100 -# define PKCS7_R_DECRYPT_ERROR 119 -# define PKCS7_R_DIGEST_FAILURE 101 -# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 -# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 -# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 -# define PKCS7_R_ERROR_SETTING_CIPHER 121 -# define PKCS7_R_INVALID_MIME_TYPE 131 -# define PKCS7_R_INVALID_NULL_POINTER 143 -# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 -# define PKCS7_R_MIME_NO_CONTENT_TYPE 132 -# define PKCS7_R_MIME_PARSE_ERROR 133 -# define PKCS7_R_MIME_SIG_PARSE_ERROR 134 -# define PKCS7_R_MISSING_CERIPEND_INFO 103 -# define PKCS7_R_NO_CONTENT 122 -# define PKCS7_R_NO_CONTENT_TYPE 135 -# define PKCS7_R_NO_DEFAULT_DIGEST 151 -# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 -# define PKCS7_R_NO_MULTIPART_BODY_FAILURE 136 -# define PKCS7_R_NO_MULTIPART_BOUNDARY 137 -# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 -# define PKCS7_R_NO_RECIPIENT_MATCHES_KEY 146 -# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 -# define PKCS7_R_NO_SIGNERS 142 -# define PKCS7_R_NO_SIG_CONTENT_TYPE 138 -# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 -# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 -# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 -# define PKCS7_R_PKCS7_DATAFINAL 126 -# define PKCS7_R_PKCS7_DATAFINAL_ERROR 125 -# define PKCS7_R_PKCS7_DATASIGN 145 -# define PKCS7_R_PKCS7_PARSE_ERROR 139 -# define PKCS7_R_PKCS7_SIG_PARSE_ERROR 140 -# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 -# define PKCS7_R_SIGNATURE_FAILURE 105 -# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 -# define PKCS7_R_SIGNING_CTRL_FAILURE 147 -# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 -# define PKCS7_R_SIG_INVALID_MIME_TYPE 141 -# define PKCS7_R_SMIME_TEXT_ERROR 129 -# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 -# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 -# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 -# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 -# define PKCS7_R_UNKNOWN_OPERATION 110 -# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 -# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 -# define PKCS7_R_WRONG_CONTENT_TYPE 113 -# define PKCS7_R_WRONG_PKCS7_TYPE 114 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/pqueue.h b/ext/openssl/windows/x86/include/openssl/pqueue.h deleted file mode 100644 index d40d9c7d..00000000 --- a/ext/openssl/windows/x86/include/openssl/pqueue.h +++ /dev/null @@ -1,99 +0,0 @@ -/* crypto/pqueue/pqueue.h */ -/* - * DTLS implementation written by Nagendra Modadugu - * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. - */ -/* ==================================================================== - * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_PQUEUE_H -# define HEADER_PQUEUE_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif -typedef struct _pqueue *pqueue; - -typedef struct _pitem { - unsigned char priority[8]; /* 64-bit value in big-endian encoding */ - void *data; - struct _pitem *next; -} pitem; - -typedef struct _pitem *piterator; - -pitem *pitem_new(unsigned char *prio64be, void *data); -void pitem_free(pitem *item); - -pqueue pqueue_new(void); -void pqueue_free(pqueue pq); - -pitem *pqueue_insert(pqueue pq, pitem *item); -pitem *pqueue_peek(pqueue pq); -pitem *pqueue_pop(pqueue pq); -pitem *pqueue_find(pqueue pq, unsigned char *prio64be); -pitem *pqueue_iterator(pqueue pq); -pitem *pqueue_next(piterator *iter); - -void pqueue_print(pqueue pq); -int pqueue_size(pqueue pq); - -#ifdef __cplusplus -} -#endif -#endif /* ! HEADER_PQUEUE_H */ diff --git a/ext/openssl/windows/x86/include/openssl/rand.h b/ext/openssl/windows/x86/include/openssl/rand.h deleted file mode 100644 index 2553afda..00000000 --- a/ext/openssl/windows/x86/include/openssl/rand.h +++ /dev/null @@ -1,150 +0,0 @@ -/* crypto/rand/rand.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RAND_H -# define HEADER_RAND_H - -# include -# include -# include - -# if defined(OPENSSL_SYS_WINDOWS) -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if defined(OPENSSL_FIPS) -# define FIPS_RAND_SIZE_T size_t -# endif - -/* Already defined in ossl_typ.h */ -/* typedef struct rand_meth_st RAND_METHOD; */ - -struct rand_meth_st { - void (*seed) (const void *buf, int num); - int (*bytes) (unsigned char *buf, int num); - void (*cleanup) (void); - void (*add) (const void *buf, int num, double entropy); - int (*pseudorand) (unsigned char *buf, int num); - int (*status) (void); -}; - -# ifdef BN_DEBUG -extern int rand_predictable; -# endif - -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif -RAND_METHOD *RAND_SSLeay(void); -void RAND_cleanup(void); -int RAND_bytes(unsigned char *buf, int num); -int RAND_pseudo_bytes(unsigned char *buf, int num); -void RAND_seed(const void *buf, int num); -void RAND_add(const void *buf, int num, double entropy); -int RAND_load_file(const char *file, long max_bytes); -int RAND_write_file(const char *file); -const char *RAND_file_name(char *file, size_t num); -int RAND_status(void); -int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); -int RAND_egd(const char *path); -int RAND_egd_bytes(const char *path, int bytes); -int RAND_poll(void); - -# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) - -void RAND_screen(void); -int RAND_event(UINT, WPARAM, LPARAM); - -# endif - -# ifdef OPENSSL_FIPS -void RAND_set_fips_drbg_type(int type, int flags); -int RAND_init_fips(void); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_RAND_strings(void); - -/* Error codes for the RAND functions. */ - -/* Function codes. */ -# define RAND_F_RAND_GET_RAND_METHOD 101 -# define RAND_F_RAND_INIT_FIPS 102 -# define RAND_F_SSLEAY_RAND_BYTES 100 - -/* Reason codes. */ -# define RAND_R_DUAL_EC_DRBG_DISABLED 104 -# define RAND_R_ERROR_INITIALISING_DRBG 102 -# define RAND_R_ERROR_INSTANTIATING_DRBG 103 -# define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 -# define RAND_R_PRNG_NOT_SEEDED 100 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/rc2.h b/ext/openssl/windows/x86/include/openssl/rc2.h deleted file mode 100644 index 29d02d73..00000000 --- a/ext/openssl/windows/x86/include/openssl/rc2.h +++ /dev/null @@ -1,103 +0,0 @@ -/* crypto/rc2/rc2.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RC2_H -# define HEADER_RC2_H - -# include /* OPENSSL_NO_RC2, RC2_INT */ -# ifdef OPENSSL_NO_RC2 -# error RC2 is disabled. -# endif - -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc2_key_st { - RC2_INT data[64]; -} RC2_KEY; - -# ifdef OPENSSL_FIPS -void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, - int bits); -# endif -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/rc4.h b/ext/openssl/windows/x86/include/openssl/rc4.h deleted file mode 100644 index 39162b16..00000000 --- a/ext/openssl/windows/x86/include/openssl/rc4.h +++ /dev/null @@ -1,88 +0,0 @@ -/* crypto/rc4/rc4.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RC4_H -# define HEADER_RC4_H - -# include /* OPENSSL_NO_RC4, RC4_INT */ -# ifdef OPENSSL_NO_RC4 -# error RC4 is disabled. -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc4_key_st { - RC4_INT x, y; - RC4_INT data[256]; -} RC4_KEY; - -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ripemd.h b/ext/openssl/windows/x86/include/openssl/ripemd.h deleted file mode 100644 index b88ef25e..00000000 --- a/ext/openssl/windows/x86/include/openssl/ripemd.h +++ /dev/null @@ -1,105 +0,0 @@ -/* crypto/ripemd/ripemd.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_RIPEMD -# error RIPEMD is disabled. -# endif - -# if defined(__LP32__) -# define RIPEMD160_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define RIPEMD160_LONG unsigned long -# define RIPEMD160_LONG_LOG2 3 -# else -# define RIPEMD160_LONG unsigned int -# endif - -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 - -typedef struct RIPEMD160state_st { - RIPEMD160_LONG A, B, C, D, E; - RIPEMD160_LONG Nl, Nh; - RIPEMD160_LONG data[RIPEMD160_LBLOCK]; - unsigned int num; -} RIPEMD160_CTX; - -# ifdef OPENSSL_FIPS -int private_RIPEMD160_Init(RIPEMD160_CTX *c); -# endif -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/rsa.h b/ext/openssl/windows/x86/include/openssl/rsa.h deleted file mode 100644 index d2ee3740..00000000 --- a/ext/openssl/windows/x86/include/openssl/rsa.h +++ /dev/null @@ -1,664 +0,0 @@ -/* crypto/rsa/rsa.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RSA_H -# define HEADER_RSA_H - -# include - -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifdef OPENSSL_NO_RSA -# error RSA is disabled. -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Declared already in ossl_typ.h */ -/* typedef struct rsa_st RSA; */ -/* typedef struct rsa_meth_st RSA_METHOD; */ - -struct rsa_meth_st { - const char *name; - int (*rsa_pub_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - int (*rsa_pub_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - int (*rsa_priv_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - int (*rsa_priv_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - /* Can be null */ - int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); - /* Can be null */ - int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); - /* called at new */ - int (*init) (RSA *rsa); - /* called at free */ - int (*finish) (RSA *rsa); - /* RSA_METHOD_FLAG_* things */ - int flags; - /* may be needed! */ - char *app_data; - /* - * New sign and verify functions: some libraries don't allow arbitrary - * data to be signed/verified: this allows them to be used. Note: for - * this to work the RSA_public_decrypt() and RSA_private_encrypt() should - * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note: - * for backwards compatibility this functionality is only enabled if the - * RSA_FLAG_SIGN_VER option is set in 'flags'. - */ - int (*rsa_sign) (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); - int (*rsa_verify) (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); - /* - * If this callback is NULL, the builtin software RSA key-gen will be - * used. This is for behavioural compatibility whilst the code gets - * rewired, but one day it would be nice to assume there are no such - * things as "builtin software" implementations. - */ - int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); -}; - -struct rsa_st { - /* - * The first parameter is used to pickup errors where this is passed - * instead of aEVP_PKEY, it is set to 0 - */ - int pad; - long version; - const RSA_METHOD *meth; - /* functional reference if 'meth' is ENGINE-provided */ - ENGINE *engine; - BIGNUM *n; - BIGNUM *e; - BIGNUM *d; - BIGNUM *p; - BIGNUM *q; - BIGNUM *dmp1; - BIGNUM *dmq1; - BIGNUM *iqmp; - /* be careful using this if the RSA structure is shared */ - CRYPTO_EX_DATA ex_data; - int references; - int flags; - /* Used to cache montgomery values */ - BN_MONT_CTX *_method_mod_n; - BN_MONT_CTX *_method_mod_p; - BN_MONT_CTX *_method_mod_q; - /* - * all BIGNUM values are actually in the following data, if it is not - * NULL - */ - char *bignum_data; - BN_BLINDING *blinding; - BN_BLINDING *mt_blinding; -}; - -# ifndef OPENSSL_RSA_MAX_MODULUS_BITS -# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 -# endif - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - -# define RSA_3 0x3L -# define RSA_F4 0x10001L - -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 -/* - * This flag means the private key operations will be handled by rsa_mod_exp - * and that they do not depend on the private key components being present: - * for example a key stored in external hardware. Without this flag - * bn_mod_exp gets called when private key components are absent. - */ -# define RSA_FLAG_EXT_PKEY 0x0020 - -/* - * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify - * functions. - */ -# define RSA_FLAG_SIGN_VER 0x0040 - -/* - * new with 0.9.6j and 0.9.7b; the built-in - * RSA implementation now uses blinding by - * default (ignoring RSA_FLAG_BLINDING), - * but other engines might not need it - */ -# define RSA_FLAG_NO_BLINDING 0x0080 -/* - * new with 0.9.8f; the built-in RSA - * implementation now uses constant time - * operations by default in private key operations, - * e.g., constant time modular exponentiation, - * modular inverse without leaking branches, - * division without leaking branches. This - * flag disables these constant time - * operations and results in faster RSA - * private key operations. - */ -# define RSA_FLAG_NO_CONSTTIME 0x0100 -# ifdef OPENSSL_USE_DEPRECATED -/* deprecated name for the flag*/ -/* - * new with 0.9.7h; the built-in RSA - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * faster variable sliding window method to - * be used for all exponents. - */ -# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME -# endif - -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ - pad, NULL) - -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \ - EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) - -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ - len, NULL) - -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \ - 0, plen) - -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l) - -# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) - -# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) - -# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) - -# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) - -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 - -# define RSA_PKCS1_PADDING_SIZE 11 - -# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) -# define RSA_get_app_data(s) RSA_get_ex_data(s,0) - -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_size(const RSA *rsa); - -/* Deprecated version */ -# ifndef OPENSSL_NO_DEPRECATED -RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), void *cb_arg); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); - -int RSA_check_key(const RSA *); - /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); -/* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); - -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); - -/* This function needs the memory locking malloc callbacks to be installed */ -int RSA_memory_lock(RSA *r); - -/* these are the actual SSLeay RSA functions */ -const RSA_METHOD *RSA_PKCS1_SSLeay(void); - -const RSA_METHOD *RSA_null_method(void); - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - -typedef struct rsa_pss_params_st { - X509_ALGOR *hashAlgorithm; - X509_ALGOR *maskGenAlgorithm; - ASN1_INTEGER *saltLength; - ASN1_INTEGER *trailerField; -} RSA_PSS_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) - -typedef struct rsa_oaep_params_st { - X509_ALGOR *hashFunc; - X509_ALGOR *maskGenFunc; - X509_ALGOR *pSourceFunc; -} RSA_OAEP_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) - -# ifndef OPENSSL_NO_FP_API -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif - -# ifndef OPENSSL_NO_BIO -int RSA_print(BIO *bp, const RSA *r, int offset); -# endif - -# ifndef OPENSSL_NO_RC4 -int i2d_RSA_NET(const RSA *a, unsigned char **pp, - int (*cb) (char *buf, int len, const char *prompt, - int verify), int sgckey); -RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, - int (*cb) (char *buf, int len, const char *prompt, - int verify), int sgckey); - -int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, - int (*cb) (char *buf, int len, const char *prompt, - int verify)); -RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, - int (*cb) (char *buf, int len, const char *prompt, - int verify)); -# endif - -/* - * The following 2 functions sign and verify a X509_SIG ASN1 object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); - -/* - * The following 2 function sign and verify a ASN1_OCTET_STRING object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign_ASN1_OCTET_STRING(int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); - -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); - -int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); -int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, - const unsigned char *p, int pl); -int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len, - const unsigned char *p, int pl); -int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - const unsigned char *param, int plen, - const EVP_MD *md, const EVP_MD *mgf1md); -int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); - -int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const unsigned char *EM, - int sLen); -int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, const EVP_MD *Hash, - int sLen); - -int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - const unsigned char *EM, int sLen); - -int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - int sLen); - -int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); - -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); - -/* - * If this flag is set the RSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define RSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 -/* - * Application has decided PRNG is good enough to generate a key: don't - * check. - */ -# define RSA_FLAG_CHECKED 0x0800 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_RSA_strings(void); - -/* Error codes for the RSA functions. */ - -/* Function codes. */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_DO_RSA_PRINT 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_MEMORY_LOCK 100 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 154 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 157 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CMS_DECRYPT 158 -# define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_GENERATE_KEY 105 -# define RSA_F_RSA_GENERATE_KEY_EX 155 -# define RSA_F_RSA_ITEM_VERIFY 156 -# define RSA_F_RSA_MEMORY_LOCK 130 -# define RSA_F_RSA_MGF1_TO_MD 159 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_MOD_EXP 131 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 160 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 161 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIVATE_DECRYPT 150 -# define RSA_F_RSA_PRIVATE_ENCRYPT 151 -# define RSA_F_RSA_PRIV_DECODE 137 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_TO_CTX 162 -# define RSA_F_RSA_PUBLIC_DECRYPT 152 -# define RSA_F_RSA_PUBLIC_ENCRYPT 153 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS 126 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 149 - -/* Reason codes. */ -# define RSA_R_ALGORITHM_MISMATCH 100 -# define RSA_R_BAD_E_VALUE 101 -# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 -# define RSA_R_BAD_PAD_BYTE_COUNT 103 -# define RSA_R_BAD_SIGNATURE 104 -# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 -# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 -# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 -# define RSA_R_DATA_TOO_LARGE 109 -# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 -# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 -# define RSA_R_DATA_TOO_SMALL 111 -# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 -# define RSA_R_DIGEST_DOES_NOT_MATCH 166 -# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 -# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 -# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 -# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 -# define RSA_R_FIRST_OCTET_INVALID 133 -# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 -# define RSA_R_INVALID_DIGEST 160 -# define RSA_R_INVALID_DIGEST_LENGTH 143 -# define RSA_R_INVALID_HEADER 137 -# define RSA_R_INVALID_KEYBITS 145 -# define RSA_R_INVALID_LABEL 161 -# define RSA_R_INVALID_MESSAGE_LENGTH 131 -# define RSA_R_INVALID_MGF1_MD 156 -# define RSA_R_INVALID_OAEP_PARAMETERS 162 -# define RSA_R_INVALID_PADDING 138 -# define RSA_R_INVALID_PADDING_MODE 141 -# define RSA_R_INVALID_PSS_PARAMETERS 149 -# define RSA_R_INVALID_PSS_SALTLEN 146 -# define RSA_R_INVALID_SALT_LENGTH 150 -# define RSA_R_INVALID_TRAILER 139 -# define RSA_R_INVALID_X931_DIGEST 142 -# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 -# define RSA_R_KEY_SIZE_TOO_SMALL 120 -# define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MODULUS_TOO_LARGE 105 -# define RSA_R_NON_FIPS_RSA_METHOD 157 -# define RSA_R_NO_PUBLIC_EXPONENT 140 -# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 -# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 -# define RSA_R_OAEP_DECODING_ERROR 121 -# define RSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE 158 -# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 -# define RSA_R_PADDING_CHECK_FAILED 114 -# define RSA_R_PKCS_DECODING_ERROR 159 -# define RSA_R_P_NOT_PRIME 128 -# define RSA_R_Q_NOT_PRIME 129 -# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 -# define RSA_R_SLEN_CHECK_FAILED 136 -# define RSA_R_SLEN_RECOVERY_FAILED 135 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 163 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNKNOWN_PSS_DIGEST 152 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 164 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 165 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/safestack.h b/ext/openssl/windows/x86/include/openssl/safestack.h deleted file mode 100644 index 1d4f87ea..00000000 --- a/ext/openssl/windows/x86/include/openssl/safestack.h +++ /dev/null @@ -1,2672 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef CHECKED_PTR_OF -# define CHECKED_PTR_OF(type, p) \ - ((void*) (1 ? p : (type*)0)) -# endif - -/* - * In C++ we get problems because an explicit cast is needed from (void *) we - * use CHECKED_STACK_OF to ensure the correct type is passed in the macros - * below. - */ - -# define CHECKED_STACK_OF(type, p) \ - ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) - -# define CHECKED_SK_COPY_FUNC(type, p) \ - ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0))) - -# define CHECKED_SK_FREE_FUNC(type, p) \ - ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) - -# define CHECKED_SK_CMP_FUNC(type, p) \ - ((int (*)(const void *, const void *)) \ - ((1 ? p : (int (*)(const type * const *, const type * const *))0))) - -# define STACK_OF(type) struct stack_st_##type -# define PREDECLARE_STACK_OF(type) STACK_OF(type); - -# define DECLARE_STACK_OF(type) \ -STACK_OF(type) \ - { \ - _STACK stack; \ - }; -# define DECLARE_SPECIAL_STACK_OF(type, type2) \ -STACK_OF(type) \ - { \ - _STACK stack; \ - }; - -/* nada (obsolete in new safestack approach)*/ -# define IMPLEMENT_STACK_OF(type) - -/*- - * Strings are special: normally an lhash entry will point to a single - * (somewhat) mutable object. In the case of strings: - * - * a) Instead of a single char, there is an array of chars, NUL-terminated. - * b) The string may have be immutable. - * - * So, they need their own declarations. Especially important for - * type-checking tools, such as Deputy. - * - * In practice, however, it appears to be hard to have a const - * string. For now, I'm settling for dealing with the fact it is a - * string at all. - */ -typedef char *OPENSSL_STRING; - -typedef const char *OPENSSL_CSTRING; - -/* - * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but - * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned - * above, instead of a single char each entry is a NUL-terminated array of - * chars. So, we have to implement STRING specially for STACK_OF. This is - * dealt with in the autogenerated macros below. - */ - -DECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char) - -/* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. - * These should also be distinguished from "normal" stacks. - */ -typedef void *OPENSSL_BLOCK; -DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) - -/* - * SKM_sk_... stack macros are internal to safestack.h: never use them - * directly, use sk__... instead - */ -# define SKM_sk_new(type, cmp) \ - ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp))) -# define SKM_sk_new_null(type) \ - ((STACK_OF(type) *)sk_new_null()) -# define SKM_sk_free(type, st) \ - sk_free(CHECKED_STACK_OF(type, st)) -# define SKM_sk_num(type, st) \ - sk_num(CHECKED_STACK_OF(type, st)) -# define SKM_sk_value(type, st,i) \ - ((type *)sk_value(CHECKED_STACK_OF(type, st), i)) -# define SKM_sk_set(type, st,i,val) \ - sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val)) -# define SKM_sk_zero(type, st) \ - sk_zero(CHECKED_STACK_OF(type, st)) -# define SKM_sk_push(type, st, val) \ - sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) -# define SKM_sk_unshift(type, st, val) \ - sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) -# define SKM_sk_find(type, st, val) \ - sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) -# define SKM_sk_find_ex(type, st, val) \ - sk_find_ex(CHECKED_STACK_OF(type, st), \ - CHECKED_PTR_OF(type, val)) -# define SKM_sk_delete(type, st, i) \ - (type *)sk_delete(CHECKED_STACK_OF(type, st), i) -# define SKM_sk_delete_ptr(type, st, ptr) \ - (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr)) -# define SKM_sk_insert(type, st,val, i) \ - sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i) -# define SKM_sk_set_cmp_func(type, st, cmp) \ - ((int (*)(const type * const *,const type * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp))) -# define SKM_sk_dup(type, st) \ - (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st)) -# define SKM_sk_pop_free(type, st, free_func) \ - sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func)) -# define SKM_sk_deep_copy(type, st, copy_func, free_func) \ - (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func)) -# define SKM_sk_shift(type, st) \ - (type *)sk_shift(CHECKED_STACK_OF(type, st)) -# define SKM_sk_pop(type, st) \ - (type *)sk_pop(CHECKED_STACK_OF(type, st)) -# define SKM_sk_sort(type, st) \ - sk_sort(CHECKED_STACK_OF(type, st)) -# define SKM_sk_is_sorted(type, st) \ - sk_is_sorted(CHECKED_STACK_OF(type, st)) -# define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - (STACK_OF(type) *)d2i_ASN1_SET( \ - (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \ - pp, length, \ - CHECKED_D2I_OF(type, d2i_func), \ - CHECKED_SK_FREE_FUNC(type, free_func), \ - ex_tag, ex_class) -# define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ - i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \ - CHECKED_I2D_OF(type, i2d_func), \ - ex_tag, ex_class, is_set) -# define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \ - ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \ - CHECKED_I2D_OF(type, i2d_func), buf, len) -# define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \ - (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func)) -# define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \ - (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \ - CHECKED_D2I_OF(type, d2i_func), \ - CHECKED_SK_FREE_FUNC(type, free_func), \ - pass, passlen, oct, seq) -/* - * This block of defines is updated by util/mkstack.pl, please do not touch! - */ -# define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp)) -# define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION) -# define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i)) -# define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val)) -# define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i)) -# define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr)) -# define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i)) -# define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp)) -# define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st) -# define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func)) -# define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func)) -# define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) -# define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp)) -# define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange) -# define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st)) -# define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st)) -# define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i)) -# define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val)) -# define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st)) -# define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i)) -# define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr)) -# define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i)) -# define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp)) -# define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st) -# define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func)) -# define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func)) -# define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st)) -# define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st)) -# define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st)) -# define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st)) -# define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp)) -# define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) -# define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i)) -# define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val)) -# define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i)) -# define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr)) -# define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i)) -# define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp)) -# define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st) -# define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func)) -# define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func)) -# define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp)) -# define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) -# define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i)) -# define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val)) -# define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i)) -# define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr)) -# define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i)) -# define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp)) -# define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st) -# define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func)) -# define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func)) -# define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) -# define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp)) -# define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) -# define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i)) -# define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val)) -# define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i)) -# define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr)) -# define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i)) -# define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp)) -# define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st) -# define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func)) -# define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func)) -# define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) -# define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp)) -# define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) -# define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i)) -# define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val)) -# define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i)) -# define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr)) -# define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i)) -# define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp)) -# define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st) -# define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func)) -# define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func)) -# define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp)) -# define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) -# define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i)) -# define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val)) -# define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i)) -# define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr)) -# define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i)) -# define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp)) -# define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st) -# define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func)) -# define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func)) -# define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) -# define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp)) -# define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING) -# define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i)) -# define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val)) -# define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i)) -# define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr)) -# define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i)) -# define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp)) -# define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st) -# define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func)) -# define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func)) -# define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st)) -# define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp)) -# define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) -# define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i)) -# define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val)) -# define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i)) -# define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr)) -# define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i)) -# define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp)) -# define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st) -# define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func)) -# define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func)) -# define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) -# define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) -# define sk_BIO_new_null() SKM_sk_new_null(BIO) -# define sk_BIO_free(st) SKM_sk_free(BIO, (st)) -# define sk_BIO_num(st) SKM_sk_num(BIO, (st)) -# define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i)) -# define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val)) -# define sk_BIO_zero(st) SKM_sk_zero(BIO, (st)) -# define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val)) -# define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val)) -# define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val)) -# define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val)) -# define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i)) -# define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr)) -# define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i)) -# define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp)) -# define sk_BIO_dup(st) SKM_sk_dup(BIO, st) -# define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func)) -# define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func)) -# define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) -# define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) -# define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) -# define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) -# define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp)) -# define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY) -# define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i)) -# define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val)) -# define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i)) -# define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr)) -# define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i)) -# define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp)) -# define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st) -# define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func)) -# define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func)) -# define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp)) -# define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH) -# define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i)) -# define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val)) -# define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i)) -# define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr)) -# define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i)) -# define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp)) -# define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st) -# define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func)) -# define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func)) -# define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st)) -# define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp)) -# define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices) -# define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i)) -# define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val)) -# define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i)) -# define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr)) -# define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i)) -# define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp)) -# define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st) -# define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func)) -# define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func)) -# define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st)) -# define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp)) -# define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey) -# define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i)) -# define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val)) -# define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i)) -# define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr)) -# define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i)) -# define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp)) -# define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st) -# define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func)) -# define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func)) -# define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp)) -# define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo) -# define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i)) -# define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val)) -# define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i)) -# define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr)) -# define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i)) -# define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp)) -# define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st) -# define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func)) -# define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func)) -# define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st)) -# define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp)) -# define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice) -# define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i)) -# define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val)) -# define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i)) -# define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr)) -# define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i)) -# define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp)) -# define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st) -# define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func)) -# define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func)) -# define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp)) -# define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo) -# define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i)) -# define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val)) -# define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i)) -# define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr)) -# define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i)) -# define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp)) -# define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st) -# define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func)) -# define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func)) -# define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st)) -# define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp)) -# define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) -# define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i)) -# define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val)) -# define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i)) -# define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr)) -# define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i)) -# define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp)) -# define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st) -# define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func)) -# define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func)) -# define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) -# define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp)) -# define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) -# define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st)) -# define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st)) -# define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i)) -# define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val)) -# define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st)) -# define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i)) -# define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr)) -# define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i)) -# define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp)) -# define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st) -# define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func)) -# define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func)) -# define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) -# define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) -# define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) -# define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) -# define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp)) -# define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) -# define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st)) -# define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st)) -# define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i)) -# define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val)) -# define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st)) -# define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i)) -# define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr)) -# define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i)) -# define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp)) -# define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st) -# define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func)) -# define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func)) -# define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) -# define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) -# define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) -# define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) -# define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) -# define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) -# define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) -# define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) -# define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) -# define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) -# define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) -# define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) -# define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func)) -# define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) -# define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) -# define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i)) -# define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val)) -# define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i)) -# define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr)) -# define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i)) -# define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp)) -# define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st) -# define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func)) -# define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func)) -# define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) -# define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp)) -# define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) -# define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st)) -# define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st)) -# define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i)) -# define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val)) -# define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st)) -# define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i)) -# define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr)) -# define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i)) -# define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp)) -# define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st) -# define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func)) -# define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func)) -# define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) -# define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) -# define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) -# define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) -# define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp)) -# define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) -# define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st)) -# define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st)) -# define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i)) -# define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val)) -# define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st)) -# define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val)) -# define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val)) -# define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val)) -# define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val)) -# define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i)) -# define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr)) -# define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i)) -# define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp)) -# define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st) -# define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func)) -# define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func)) -# define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) -# define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) -# define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) -# define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) -# define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp)) -# define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) -# define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i)) -# define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val)) -# define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i)) -# define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr)) -# define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i)) -# define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp)) -# define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st) -# define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func)) -# define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func)) -# define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp)) -# define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID) -# define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i)) -# define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val)) -# define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i)) -# define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr)) -# define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i)) -# define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp)) -# define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st) -# define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func)) -# define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func)) -# define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st)) -# define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp)) -# define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD) -# define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st)) -# define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st)) -# define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i)) -# define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val)) -# define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st)) -# define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val)) -# define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val)) -# define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val)) -# define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val)) -# define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i)) -# define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr)) -# define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i)) -# define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp)) -# define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st) -# define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func)) -# define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func)) -# define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st)) -# define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st)) -# define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st)) -# define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st)) -# define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp)) -# define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL) -# define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i)) -# define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val)) -# define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i)) -# define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr)) -# define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i)) -# define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp)) -# define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st) -# define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func)) -# define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func)) -# define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp)) -# define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD) -# define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i)) -# define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i)) -# define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr)) -# define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i)) -# define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp)) -# define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st) -# define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func)) -# define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func)) -# define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp)) -# define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD) -# define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i)) -# define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val)) -# define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i)) -# define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr)) -# define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i)) -# define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp)) -# define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st) -# define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func)) -# define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func)) -# define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st)) -# define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp)) -# define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) -# define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i)) -# define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val)) -# define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i)) -# define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr)) -# define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i)) -# define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp)) -# define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st) -# define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func)) -# define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func)) -# define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) -# define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp)) -# define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES) -# define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i)) -# define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val)) -# define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i)) -# define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr)) -# define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i)) -# define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp)) -# define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st) -# define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func)) -# define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func)) -# define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st)) -# define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp)) -# define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE) -# define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i)) -# define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val)) -# define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i)) -# define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr)) -# define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i)) -# define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp)) -# define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st) -# define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func)) -# define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func)) -# define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st)) -# define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp)) -# define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily) -# define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st)) -# define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st)) -# define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i)) -# define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val)) -# define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st)) -# define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i)) -# define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr)) -# define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i)) -# define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp)) -# define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st) -# define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func)) -# define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func)) -# define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st)) -# define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st)) -# define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st)) -# define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st)) -# define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp)) -# define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange) -# define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i)) -# define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val)) -# define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i)) -# define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr)) -# define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i)) -# define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp)) -# define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st) -# define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func)) -# define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func)) -# define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st)) -# define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp)) -# define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) -# define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i)) -# define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val)) -# define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i)) -# define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr)) -# define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i)) -# define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp)) -# define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st) -# define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func)) -# define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func)) -# define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) -# define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp)) -# define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) -# define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i)) -# define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val)) -# define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i)) -# define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr)) -# define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i)) -# define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp)) -# define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st) -# define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func)) -# define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func)) -# define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp)) -# define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) -# define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i)) -# define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val)) -# define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i)) -# define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr)) -# define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i)) -# define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp)) -# define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st) -# define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func)) -# define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func)) -# define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp)) -# define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) -# define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i)) -# define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val)) -# define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i)) -# define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr)) -# define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i)) -# define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp)) -# define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st) -# define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func)) -# define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func)) -# define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) -# define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp)) -# define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) -# define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i)) -# define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val)) -# define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i)) -# define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr)) -# define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i)) -# define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp)) -# define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st) -# define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func)) -# define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func)) -# define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp)) -# define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) -# define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i)) -# define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val)) -# define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i)) -# define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr)) -# define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i)) -# define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp)) -# define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st) -# define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func)) -# define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func)) -# define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) -# define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp)) -# define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) -# define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i)) -# define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val)) -# define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i)) -# define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr)) -# define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i)) -# define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp)) -# define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st) -# define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func)) -# define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func)) -# define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) -# define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp)) -# define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) -# define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i)) -# define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val)) -# define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i)) -# define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr)) -# define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i)) -# define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp)) -# define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st) -# define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func)) -# define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func)) -# define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) -# define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp)) -# define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA) -# define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i)) -# define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val)) -# define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i)) -# define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr)) -# define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i)) -# define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp)) -# define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st) -# define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func)) -# define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func)) -# define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st)) -# define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp)) -# define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) -# define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st)) -# define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st)) -# define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i)) -# define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val)) -# define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st)) -# define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i)) -# define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr)) -# define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i)) -# define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp)) -# define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st) -# define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func)) -# define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func)) -# define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) -# define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) -# define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) -# define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) -# define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp)) -# define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) -# define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st)) -# define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st)) -# define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i)) -# define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val)) -# define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st)) -# define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i)) -# define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr)) -# define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i)) -# define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp)) -# define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st) -# define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func)) -# define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func)) -# define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) -# define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) -# define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) -# define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) -# define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp)) -# define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) -# define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i)) -# define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val)) -# define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i)) -# define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr)) -# define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i)) -# define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp)) -# define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st) -# define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func)) -# define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func)) -# define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) -# define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp)) -# define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) -# define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i)) -# define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val)) -# define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i)) -# define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr)) -# define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i)) -# define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp)) -# define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st) -# define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func)) -# define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func)) -# define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) -# define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp)) -# define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) -# define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i)) -# define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val)) -# define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i)) -# define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr)) -# define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i)) -# define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp)) -# define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st) -# define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func)) -# define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func)) -# define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) -# define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp)) -# define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID) -# define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i)) -# define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val)) -# define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i)) -# define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr)) -# define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i)) -# define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp)) -# define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st) -# define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func)) -# define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func)) -# define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st)) -# define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp)) -# define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) -# define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i)) -# define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val)) -# define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i)) -# define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr)) -# define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i)) -# define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp)) -# define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st) -# define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func)) -# define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func)) -# define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) -# define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp)) -# define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) -# define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i)) -# define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val)) -# define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i)) -# define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr)) -# define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i)) -# define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp)) -# define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st) -# define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func)) -# define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func)) -# define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) -# define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp)) -# define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) -# define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st)) -# define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st)) -# define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i)) -# define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val)) -# define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st)) -# define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val)) -# define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val)) -# define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val)) -# define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val)) -# define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i)) -# define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr)) -# define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i)) -# define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp)) -# define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st) -# define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func)) -# define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func)) -# define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) -# define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) -# define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) -# define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) -# define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp)) -# define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) -# define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i)) -# define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val)) -# define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i)) -# define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr)) -# define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i)) -# define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp)) -# define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st) -# define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func)) -# define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func)) -# define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp)) -# define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) -# define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i)) -# define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val)) -# define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i)) -# define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr)) -# define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i)) -# define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp)) -# define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st) -# define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func)) -# define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func)) -# define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) -# define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp)) -# define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) -# define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st)) -# define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st)) -# define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i)) -# define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val)) -# define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st)) -# define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i)) -# define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr)) -# define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i)) -# define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp)) -# define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st) -# define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func)) -# define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func)) -# define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) -# define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) -# define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) -# define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) -# define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp)) -# define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) -# define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i)) -# define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val)) -# define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i)) -# define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr)) -# define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i)) -# define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp)) -# define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st) -# define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func)) -# define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func)) -# define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) -# define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp)) -# define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING) -# define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i)) -# define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val)) -# define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i)) -# define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr)) -# define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i)) -# define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp)) -# define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st) -# define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func)) -# define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func)) -# define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st)) -# define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp)) -# define sk_SCT_new_null() SKM_sk_new_null(SCT) -# define sk_SCT_free(st) SKM_sk_free(SCT, (st)) -# define sk_SCT_num(st) SKM_sk_num(SCT, (st)) -# define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i)) -# define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val)) -# define sk_SCT_zero(st) SKM_sk_zero(SCT, (st)) -# define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val)) -# define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val)) -# define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val)) -# define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val)) -# define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i)) -# define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr)) -# define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i)) -# define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp)) -# define sk_SCT_dup(st) SKM_sk_dup(SCT, st) -# define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func)) -# define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func)) -# define sk_SCT_shift(st) SKM_sk_shift(SCT, (st)) -# define sk_SCT_pop(st) SKM_sk_pop(SCT, (st)) -# define sk_SCT_sort(st) SKM_sk_sort(SCT, (st)) -# define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st)) -# define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp)) -# define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN) -# define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st)) -# define sk_SRP_gN_num(st) SKM_sk_num(SRP_gN, (st)) -# define sk_SRP_gN_value(st, i) SKM_sk_value(SRP_gN, (st), (i)) -# define sk_SRP_gN_set(st, i, val) SKM_sk_set(SRP_gN, (st), (i), (val)) -# define sk_SRP_gN_zero(st) SKM_sk_zero(SRP_gN, (st)) -# define sk_SRP_gN_push(st, val) SKM_sk_push(SRP_gN, (st), (val)) -# define sk_SRP_gN_unshift(st, val) SKM_sk_unshift(SRP_gN, (st), (val)) -# define sk_SRP_gN_find(st, val) SKM_sk_find(SRP_gN, (st), (val)) -# define sk_SRP_gN_find_ex(st, val) SKM_sk_find_ex(SRP_gN, (st), (val)) -# define sk_SRP_gN_delete(st, i) SKM_sk_delete(SRP_gN, (st), (i)) -# define sk_SRP_gN_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN, (st), (ptr)) -# define sk_SRP_gN_insert(st, val, i) SKM_sk_insert(SRP_gN, (st), (val), (i)) -# define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp)) -# define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st) -# define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func)) -# define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func)) -# define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st)) -# define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st)) -# define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st)) -# define sk_SRP_gN_is_sorted(st) SKM_sk_is_sorted(SRP_gN, (st)) -# define sk_SRP_gN_cache_new(cmp) SKM_sk_new(SRP_gN_cache, (cmp)) -# define sk_SRP_gN_cache_new_null() SKM_sk_new_null(SRP_gN_cache) -# define sk_SRP_gN_cache_free(st) SKM_sk_free(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_num(st) SKM_sk_num(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_value(st, i) SKM_sk_value(SRP_gN_cache, (st), (i)) -# define sk_SRP_gN_cache_set(st, i, val) SKM_sk_set(SRP_gN_cache, (st), (i), (val)) -# define sk_SRP_gN_cache_zero(st) SKM_sk_zero(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_push(st, val) SKM_sk_push(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_unshift(st, val) SKM_sk_unshift(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_find(st, val) SKM_sk_find(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_find_ex(st, val) SKM_sk_find_ex(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_delete(st, i) SKM_sk_delete(SRP_gN_cache, (st), (i)) -# define sk_SRP_gN_cache_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN_cache, (st), (ptr)) -# define sk_SRP_gN_cache_insert(st, val, i) SKM_sk_insert(SRP_gN_cache, (st), (val), (i)) -# define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp)) -# define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st) -# define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func)) -# define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func)) -# define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_is_sorted(st) SKM_sk_is_sorted(SRP_gN_cache, (st)) -# define sk_SRP_user_pwd_new(cmp) SKM_sk_new(SRP_user_pwd, (cmp)) -# define sk_SRP_user_pwd_new_null() SKM_sk_new_null(SRP_user_pwd) -# define sk_SRP_user_pwd_free(st) SKM_sk_free(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_num(st) SKM_sk_num(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_value(st, i) SKM_sk_value(SRP_user_pwd, (st), (i)) -# define sk_SRP_user_pwd_set(st, i, val) SKM_sk_set(SRP_user_pwd, (st), (i), (val)) -# define sk_SRP_user_pwd_zero(st) SKM_sk_zero(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_push(st, val) SKM_sk_push(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_unshift(st, val) SKM_sk_unshift(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_find(st, val) SKM_sk_find(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_find_ex(st, val) SKM_sk_find_ex(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_delete(st, i) SKM_sk_delete(SRP_user_pwd, (st), (i)) -# define sk_SRP_user_pwd_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_user_pwd, (st), (ptr)) -# define sk_SRP_user_pwd_insert(st, val, i) SKM_sk_insert(SRP_user_pwd, (st), (val), (i)) -# define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp)) -# define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st) -# define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func)) -# define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func)) -# define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_is_sorted(st) SKM_sk_is_sorted(SRP_user_pwd, (st)) -# define sk_SRTP_PROTECTION_PROFILE_new(cmp) SKM_sk_new(SRTP_PROTECTION_PROFILE, (cmp)) -# define sk_SRTP_PROTECTION_PROFILE_new_null() SKM_sk_new_null(SRTP_PROTECTION_PROFILE) -# define sk_SRTP_PROTECTION_PROFILE_free(st) SKM_sk_free(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_num(st) SKM_sk_num(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_value(st, i) SKM_sk_value(SRTP_PROTECTION_PROFILE, (st), (i)) -# define sk_SRTP_PROTECTION_PROFILE_set(st, i, val) SKM_sk_set(SRTP_PROTECTION_PROFILE, (st), (i), (val)) -# define sk_SRTP_PROTECTION_PROFILE_zero(st) SKM_sk_zero(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_push(st, val) SKM_sk_push(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_unshift(st, val) SKM_sk_unshift(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_find(st, val) SKM_sk_find(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_find_ex(st, val) SKM_sk_find_ex(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_delete(st, i) SKM_sk_delete(SRTP_PROTECTION_PROFILE, (st), (i)) -# define sk_SRTP_PROTECTION_PROFILE_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRTP_PROTECTION_PROFILE, (st), (ptr)) -# define sk_SRTP_PROTECTION_PROFILE_insert(st, val, i) SKM_sk_insert(SRTP_PROTECTION_PROFILE, (st), (val), (i)) -# define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp)) -# define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st) -# define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func)) -# define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func)) -# define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_is_sorted(st) SKM_sk_is_sorted(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp)) -# define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) -# define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i)) -# define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val)) -# define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i)) -# define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr)) -# define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i)) -# define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp)) -# define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st) -# define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func)) -# define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func)) -# define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) -# define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp)) -# define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) -# define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st)) -# define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st)) -# define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i)) -# define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val)) -# define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st)) -# define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i)) -# define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr)) -# define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i)) -# define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp)) -# define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st) -# define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func)) -# define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func)) -# define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) -# define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) -# define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) -# define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp)) -# define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY) -# define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i)) -# define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i)) -# define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr)) -# define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i)) -# define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp)) -# define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st) -# define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func)) -# define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func)) -# define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp)) -# define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO) -# define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i)) -# define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val)) -# define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i)) -# define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr)) -# define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i)) -# define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp)) -# define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st) -# define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func)) -# define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func)) -# define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st)) -# define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp)) -# define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT) -# define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i)) -# define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val)) -# define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i)) -# define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr)) -# define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i)) -# define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp)) -# define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st) -# define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func)) -# define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func)) -# define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st)) -# define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp)) -# define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) -# define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st)) -# define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st)) -# define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i)) -# define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val)) -# define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st)) -# define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val)) -# define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val)) -# define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val)) -# define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val)) -# define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i)) -# define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr)) -# define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i)) -# define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp)) -# define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st) -# define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func)) -# define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func)) -# define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) -# define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) -# define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) -# define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) -# define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp)) -# define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) -# define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st)) -# define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st)) -# define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i)) -# define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val)) -# define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st)) -# define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val)) -# define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val)) -# define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val)) -# define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val)) -# define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i)) -# define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr)) -# define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i)) -# define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp)) -# define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st) -# define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func)) -# define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func)) -# define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) -# define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) -# define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) -# define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) -# define sk_X509_new(cmp) SKM_sk_new(X509, (cmp)) -# define sk_X509_new_null() SKM_sk_new_null(X509) -# define sk_X509_free(st) SKM_sk_free(X509, (st)) -# define sk_X509_num(st) SKM_sk_num(X509, (st)) -# define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i)) -# define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val)) -# define sk_X509_zero(st) SKM_sk_zero(X509, (st)) -# define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val)) -# define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val)) -# define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val)) -# define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val)) -# define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i)) -# define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr)) -# define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i)) -# define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) -# define sk_X509_dup(st) SKM_sk_dup(X509, st) -# define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func)) -# define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func)) -# define sk_X509_shift(st) SKM_sk_shift(X509, (st)) -# define sk_X509_pop(st) SKM_sk_pop(X509, (st)) -# define sk_X509_sort(st) SKM_sk_sort(X509, (st)) -# define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) -# define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp)) -# define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) -# define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i)) -# define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val)) -# define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i)) -# define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr)) -# define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i)) -# define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp)) -# define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st) -# define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func)) -# define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func)) -# define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) -# define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp)) -# define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) -# define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st)) -# define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st)) -# define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i)) -# define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val)) -# define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st)) -# define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i)) -# define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr)) -# define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i)) -# define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp)) -# define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st) -# define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func)) -# define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func)) -# define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) -# define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) -# define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) -# define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) -# define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp)) -# define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) -# define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i)) -# define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val)) -# define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i)) -# define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr)) -# define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i)) -# define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp)) -# define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st) -# define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func)) -# define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func)) -# define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) -# define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp)) -# define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) -# define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st)) -# define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st)) -# define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i)) -# define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val)) -# define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st)) -# define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)) -# define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val)) -# define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val)) -# define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val)) -# define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i)) -# define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr)) -# define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i)) -# define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp)) -# define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st) -# define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func)) -# define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func)) -# define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) -# define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) -# define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) -# define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) -# define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp)) -# define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) -# define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i)) -# define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val)) -# define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i)) -# define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr)) -# define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i)) -# define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp)) -# define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st) -# define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func)) -# define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func)) -# define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) -# define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp)) -# define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) -# define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st)) -# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st)) -# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i)) -# define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val)) -# define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st)) -# define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val)) -# define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val)) -# define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val)) -# define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val)) -# define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i)) -# define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr)) -# define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i)) -# define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp)) -# define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st) -# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func)) -# define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func)) -# define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) -# define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) -# define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) -# define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) -# define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp)) -# define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) -# define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i)) -# define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val)) -# define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i)) -# define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr)) -# define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i)) -# define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp)) -# define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st) -# define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func)) -# define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func)) -# define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) -# define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp)) -# define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) -# define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st)) -# define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st)) -# define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i)) -# define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val)) -# define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st)) -# define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val)) -# define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val)) -# define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val)) -# define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val)) -# define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i)) -# define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr)) -# define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i)) -# define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp)) -# define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st) -# define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func)) -# define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func)) -# define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) -# define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) -# define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) -# define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) -# define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp)) -# define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) -# define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i)) -# define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val)) -# define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i)) -# define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr)) -# define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i)) -# define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp)) -# define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st) -# define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func)) -# define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func)) -# define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) -# define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp)) -# define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) -# define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st)) -# define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st)) -# define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i)) -# define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val)) -# define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st)) -# define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i)) -# define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr)) -# define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i)) -# define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp)) -# define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st) -# define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func)) -# define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func)) -# define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) -# define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) -# define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) -# define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) -# define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp)) -# define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA) -# define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i)) -# define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val)) -# define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i)) -# define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr)) -# define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i)) -# define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp)) -# define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st) -# define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func)) -# define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func)) -# define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp)) -# define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE) -# define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i)) -# define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val)) -# define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i)) -# define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr)) -# define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i)) -# define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp)) -# define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st) -# define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func)) -# define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func)) -# define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st)) -# define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp)) -# define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) -# define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i)) -# define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val)) -# define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i)) -# define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr)) -# define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i)) -# define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp)) -# define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st) -# define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func)) -# define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func)) -# define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) -# define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp)) -# define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) -# define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st)) -# define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st)) -# define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i)) -# define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val)) -# define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st)) -# define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i)) -# define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr)) -# define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i)) -# define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp)) -# define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st) -# define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func)) -# define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func)) -# define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) -# define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) -# define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) -# define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) -# define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp)) -# define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) -# define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st)) -# define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st)) -# define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i)) -# define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val)) -# define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st)) -# define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i)) -# define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr)) -# define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i)) -# define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp)) -# define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st) -# define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func)) -# define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func)) -# define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) -# define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) -# define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) -# define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) -# define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp)) -# define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM) -# define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i)) -# define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val)) -# define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i)) -# define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr)) -# define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i)) -# define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp)) -# define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st) -# define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func)) -# define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func)) -# define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st)) -# define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp)) -# define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple) -# define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st)) -# define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st)) -# define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i)) -# define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val)) -# define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st)) -# define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val)) -# define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val)) -# define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val)) -# define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val)) -# define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i)) -# define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr)) -# define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i)) -# define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp)) -# define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st) -# define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func)) -# define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func)) -# define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st)) -# define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st)) -# define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st)) -# define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st)) -# define sk_void_new(cmp) SKM_sk_new(void, (cmp)) -# define sk_void_new_null() SKM_sk_new_null(void) -# define sk_void_free(st) SKM_sk_free(void, (st)) -# define sk_void_num(st) SKM_sk_num(void, (st)) -# define sk_void_value(st, i) SKM_sk_value(void, (st), (i)) -# define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val)) -# define sk_void_zero(st) SKM_sk_zero(void, (st)) -# define sk_void_push(st, val) SKM_sk_push(void, (st), (val)) -# define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val)) -# define sk_void_find(st, val) SKM_sk_find(void, (st), (val)) -# define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val)) -# define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i)) -# define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr)) -# define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i)) -# define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp)) -# define sk_void_dup(st) SKM_sk_dup(void, st) -# define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func)) -# define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func)) -# define sk_void_shift(st) SKM_sk_shift(void, (st)) -# define sk_void_pop(st) SKM_sk_pop(void, (st)) -# define sk_void_sort(st) SKM_sk_sort(void, (st)) -# define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st)) -# define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp))) -# define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null()) -# define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i)) -# define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st) -# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func)) -# define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func))) -# define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i) -# define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st) -# define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st)) -# define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i)) -# define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr)) -# define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \ - ((int (*)(const char * const *,const char * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp))) -# define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st) -# define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st)) -# define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st)) -# define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st)) -# define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st)) -# define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp))) -# define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null()) -# define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i)) -# define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st) -# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func)) -# define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func))) -# define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i) -# define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st) -# define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i)) -# define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr)) -# define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp) \ - ((int (*)(const void * const *,const void * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp))) -# define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st) -# define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st)) -# define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) -# define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null()) -# define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i)) -# define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st) -# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)) -# define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))) -# define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i) -# define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st) -# define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st)) -# define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i)) -# define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr)) -# define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp) \ - ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) -# define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st) -# define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st)) -# define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st)) -# define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st)) -# define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st)) -# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func)) -# define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \ - SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) -# define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \ - SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) -# define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj) -# define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst) -# define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst) -# define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst) -# define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn) -# define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg) -# define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh) -# define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh) -# define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh) -# define lh_ADDED_OBJ_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ADDED_OBJ,lh,out) -# define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out) -# define lh_ADDED_OBJ_stats_bio(lh,out) \ - LHM_lh_stats_bio(ADDED_OBJ,lh,out) -# define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh) -# define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info) -# define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst) -# define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst) -# define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst) -# define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn) -# define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg) -# define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh) -# define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh) -# define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh) -# define lh_APP_INFO_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(APP_INFO,lh,out) -# define lh_APP_INFO_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(APP_INFO,lh,out) -# define lh_APP_INFO_stats_bio(lh,out) \ - LHM_lh_stats_bio(APP_INFO,lh,out) -# define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh) -# define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value) -# define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst) -# define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst) -# define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst) -# define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn) -# define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg) -# define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh) -# define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh) -# define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh) -# define lh_CONF_VALUE_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(CONF_VALUE,lh,out) -# define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out) -# define lh_CONF_VALUE_stats_bio(lh,out) \ - LHM_lh_stats_bio(CONF_VALUE,lh,out) -# define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh) -# define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile) -# define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst) -# define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst) -# define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst) -# define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn) -# define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg) -# define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh) -# define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh) -# define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh) -# define lh_ENGINE_PILE_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ENGINE_PILE,lh,out) -# define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out) -# define lh_ENGINE_PILE_stats_bio(lh,out) \ - LHM_lh_stats_bio(ENGINE_PILE,lh,out) -# define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh) -# define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state) -# define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst) -# define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst) -# define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst) -# define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn) -# define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg) -# define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh) -# define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh) -# define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh) -# define lh_ERR_STATE_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ERR_STATE,lh,out) -# define lh_ERR_STATE_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out) -# define lh_ERR_STATE_stats_bio(lh,out) \ - LHM_lh_stats_bio(ERR_STATE,lh,out) -# define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh) -# define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data) -# define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst) -# define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst) -# define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst) -# define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn) -# define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg) -# define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh) -# define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh) -# define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh) -# define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out) -# define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out) -# define lh_ERR_STRING_DATA_stats_bio(lh,out) \ - LHM_lh_stats_bio(ERR_STRING_DATA,lh,out) -# define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh) -# define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item) -# define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst) -# define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst) -# define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst) -# define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn) -# define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg) -# define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh) -# define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh) -# define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh) -# define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out) -# define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out) -# define lh_EX_CLASS_ITEM_stats_bio(lh,out) \ - LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out) -# define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh) -# define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function) -# define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst) -# define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst) -# define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst) -# define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn) -# define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg) -# define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh) -# define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh) -# define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh) -# define lh_FUNCTION_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(FUNCTION,lh,out) -# define lh_FUNCTION_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(FUNCTION,lh,out) -# define lh_FUNCTION_stats_bio(lh,out) \ - LHM_lh_stats_bio(FUNCTION,lh,out) -# define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh) -# define lh_MEM_new() LHM_lh_new(MEM,mem) -# define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst) -# define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst) -# define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst) -# define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn) -# define lh_MEM_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg) -# define lh_MEM_error(lh) LHM_lh_error(MEM,lh) -# define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh) -# define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh) -# define lh_MEM_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(MEM,lh,out) -# define lh_MEM_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(MEM,lh,out) -# define lh_MEM_stats_bio(lh,out) \ - LHM_lh_stats_bio(MEM,lh,out) -# define lh_MEM_free(lh) LHM_lh_free(MEM,lh) -# define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name) -# define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst) -# define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst) -# define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst) -# define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn) -# define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg) -# define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh) -# define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh) -# define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh) -# define lh_OBJ_NAME_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(OBJ_NAME,lh,out) -# define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out) -# define lh_OBJ_NAME_stats_bio(lh,out) \ - LHM_lh_stats_bio(OBJ_NAME,lh,out) -# define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh) -# define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring) -# define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst) -# define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst) -# define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst) -# define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn) -# define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg) -# define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out) -# define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out) -# define lh_OPENSSL_CSTRING_stats_bio(lh,out) \ - LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out) -# define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string) -# define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst) -# define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst) -# define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst) -# define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn) -# define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg) -# define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh) -# define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh) -# define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh) -# define lh_OPENSSL_STRING_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out) -# define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out) -# define lh_OPENSSL_STRING_stats_bio(lh,out) \ - LHM_lh_stats_bio(OPENSSL_STRING,lh,out) -# define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh) -# define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session) -# define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst) -# define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst) -# define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst) -# define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn) -# define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg) -# define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh) -# define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh) -# define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh) -# define lh_SSL_SESSION_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(SSL_SESSION,lh,out) -# define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out) -# define lh_SSL_SESSION_stats_bio(lh,out) \ - LHM_lh_stats_bio(SSL_SESSION,lh,out) -# define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh) -#ifdef __cplusplus -} -#endif -#endif /* !defined HEADER_SAFESTACK_H */ diff --git a/ext/openssl/windows/x86/include/openssl/seed.h b/ext/openssl/windows/x86/include/openssl/seed.h deleted file mode 100644 index 8cbf0d92..00000000 --- a/ext/openssl/windows/x86/include/openssl/seed.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Neither the name of author nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -/* ==================================================================== - * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_SEED_H -# define HEADER_SEED_H - -# include -# include -# include - -# ifdef OPENSSL_NO_SEED -# error SEED is disabled. -# endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 -# endif -# endif - -# if !defined(NO_SYS_TYPES_H) -# include -# endif - -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct seed_key_st { -# ifdef SEED_LONG - unsigned long data[32]; -# else - unsigned int data[32]; -# endif -} SEED_KEY_SCHEDULE; - -# ifdef OPENSSL_FIPS -void private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], - SEED_KEY_SCHEDULE *ks); -# endif -void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], - SEED_KEY_SCHEDULE *ks); - -void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); -void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, - const SEED_KEY_SCHEDULE *ks, int enc); -void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, - const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); -void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); -void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); - -#ifdef __cplusplus -} -#endif - -#endif /* HEADER_SEED_H */ diff --git a/ext/openssl/windows/x86/include/openssl/sha.h b/ext/openssl/windows/x86/include/openssl/sha.h deleted file mode 100644 index e5169e4f..00000000 --- a/ext/openssl/windows/x86/include/openssl/sha.h +++ /dev/null @@ -1,214 +0,0 @@ -/* crypto/sha/sha.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SHA_H -# define HEADER_SHA_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) -# error SHA is disabled. -# endif - -# if defined(OPENSSL_FIPS) -# define FIPS_SHA_SIZE_T size_t -# endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! SHA_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define SHA_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define SHA_LONG unsigned long -# define SHA_LONG_LOG2 3 -# else -# define SHA_LONG unsigned int -# endif - -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 - -typedef struct SHAstate_st { - SHA_LONG h0, h1, h2, h3, h4; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num; -} SHA_CTX; - -# ifndef OPENSSL_NO_SHA0 -# ifdef OPENSSL_FIPS -int private_SHA_Init(SHA_CTX *c); -# endif -int SHA_Init(SHA_CTX *c); -int SHA_Update(SHA_CTX *c, const void *data, size_t len); -int SHA_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md); -void SHA_Transform(SHA_CTX *c, const unsigned char *data); -# endif -# ifndef OPENSSL_NO_SHA1 -# ifdef OPENSSL_FIPS -int private_SHA1_Init(SHA_CTX *c); -# endif -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); -# endif - -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA224_DIGEST_LENGTH 28 -# define SHA256_DIGEST_LENGTH 32 - -typedef struct SHA256state_st { - SHA_LONG h[8]; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num, md_len; -} SHA256_CTX; - -# ifndef OPENSSL_NO_SHA256 -# ifdef OPENSSL_FIPS -int private_SHA224_Init(SHA256_CTX *c); -int private_SHA256_Init(SHA256_CTX *c); -# endif -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); -# endif - -# define SHA384_DIGEST_LENGTH 48 -# define SHA512_DIGEST_LENGTH 64 - -# ifndef OPENSSL_NO_SHA512 -/* - * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 - * being exactly 64-bit wide. See Implementation Notes in sha512.c - * for further details. - */ -/* - * SHA-512 treats input data as a - * contiguous array of 64 bit - * wide big-endian values. - */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif - -typedef struct SHA512state_st { - SHA_LONG64 h[8]; - SHA_LONG64 Nl, Nh; - union { - SHA_LONG64 d[SHA_LBLOCK]; - unsigned char p[SHA512_CBLOCK]; - } u; - unsigned int num, md_len; -} SHA512_CTX; -# endif - -# ifndef OPENSSL_NO_SHA512 -# ifdef OPENSSL_FIPS -int private_SHA384_Init(SHA512_CTX *c); -int private_SHA512_Init(SHA512_CTX *c); -# endif -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/srp.h b/ext/openssl/windows/x86/include/openssl/srp.h deleted file mode 100644 index 028892a1..00000000 --- a/ext/openssl/windows/x86/include/openssl/srp.h +++ /dev/null @@ -1,179 +0,0 @@ -/* crypto/srp/srp.h */ -/* - * Written by Christophe Renou (christophe.renou@edelweb.fr) with the - * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the - * EdelKey project and contributed to the OpenSSL project 2004. - */ -/* ==================================================================== - * Copyright (c) 2004 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef __SRP_H__ -# define __SRP_H__ - -# ifndef OPENSSL_NO_SRP - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include -# include - -typedef struct SRP_gN_cache_st { - char *b64_bn; - BIGNUM *bn; -} SRP_gN_cache; - - -DECLARE_STACK_OF(SRP_gN_cache) - -typedef struct SRP_user_pwd_st { - /* Owned by us. */ - char *id; - BIGNUM *s; - BIGNUM *v; - /* Not owned by us. */ - const BIGNUM *g; - const BIGNUM *N; - /* Owned by us. */ - char *info; -} SRP_user_pwd; - -DECLARE_STACK_OF(SRP_user_pwd) - -void SRP_user_pwd_free(SRP_user_pwd *user_pwd); - -typedef struct SRP_VBASE_st { - STACK_OF(SRP_user_pwd) *users_pwd; - STACK_OF(SRP_gN_cache) *gN_cache; -/* to simulate a user */ - char *seed_key; - BIGNUM *default_g; - BIGNUM *default_N; -} SRP_VBASE; - -/* - * Structure interne pour retenir les couples N et g - */ -typedef struct SRP_gN_st { - char *id; - BIGNUM *g; - BIGNUM *N; -} SRP_gN; - -DECLARE_STACK_OF(SRP_gN) - -SRP_VBASE *SRP_VBASE_new(char *seed_key); -int SRP_VBASE_free(SRP_VBASE *vb); -int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); - -/* This method ignores the configured seed and fails for an unknown user. */ -SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); -/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ -SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); - -char *SRP_create_verifier(const char *user, const char *pass, char **salt, - char **verifier, const char *N, const char *g); -int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, - BIGNUM **verifier, BIGNUM *N, BIGNUM *g); - -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 - -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 - -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' - -/* see srp.c */ -char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N); -SRP_gN *SRP_get_default_gN(const char *id); - -/* server side .... */ -BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, - BIGNUM *N); -BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v); -int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N); -BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N); - -/* client side .... */ -BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass); -BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g); -BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, - BIGNUM *a, BIGNUM *u); -int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N); - -# define SRP_MINIMAL_N 1024 - -#ifdef __cplusplus -} -#endif - -# endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/srtp.h b/ext/openssl/windows/x86/include/openssl/srtp.h deleted file mode 100644 index 2279c32b..00000000 --- a/ext/openssl/windows/x86/include/openssl/srtp.h +++ /dev/null @@ -1,147 +0,0 @@ -/* ssl/srtp.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* - * DTLS code by Eric Rescorla - * - * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. - */ - -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define SRTP_AES128_CM_SHA1_80 0x0001 -# define SRTP_AES128_CM_SHA1_32 0x0002 -# define SRTP_AES128_F8_SHA1_80 0x0003 -# define SRTP_AES128_F8_SHA1_32 0x0004 -# define SRTP_NULL_SHA1_80 0x0005 -# define SRTP_NULL_SHA1_32 0x0006 - -# ifndef OPENSSL_NO_SRTP - -int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); -int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); - -STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); -SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); - -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ssl.h b/ext/openssl/windows/x86/include/openssl/ssl.h deleted file mode 100644 index 90aeb0ce..00000000 --- a/ext/openssl/windows/x86/include/openssl/ssl.h +++ /dev/null @@ -1,3163 +0,0 @@ -/* ssl/ssl.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - -#ifndef HEADER_SSL_H -# define HEADER_SSL_H - -# include - -# ifndef OPENSSL_NO_COMP -# include -# endif -# ifndef OPENSSL_NO_BIO -# include -# endif -# ifndef OPENSSL_NO_DEPRECATED -# ifndef OPENSSL_NO_X509 -# include -# endif -# include -# include -# include -# endif -# include -# include - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* SSLeay version number for ASN.1 encoding of the session information */ -/*- - * Version 0 - initial version - * Version 1 - added the optional peer certificate - */ -# define SSL_SESSION_ASN1_VERSION 0x0001 - -/* text strings for the ciphers */ -# define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5 -# define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5 -# define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 -# define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5 -# define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 -# define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5 -# define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5 -# define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA -# define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 -# define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA - -/* - * VRS Additional Kerberos5 entries - */ -# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA -# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA -# define SSL_TXT_KRB5_RC4_128_SHA SSL3_TXT_KRB5_RC4_128_SHA -# define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA -# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 -# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 -# define SSL_TXT_KRB5_RC4_128_MD5 SSL3_TXT_KRB5_RC4_128_MD5 -# define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 - -# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA -# define SSL_TXT_KRB5_RC2_40_CBC_SHA SSL3_TXT_KRB5_RC2_40_CBC_SHA -# define SSL_TXT_KRB5_RC4_40_SHA SSL3_TXT_KRB5_RC4_40_SHA -# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 -# define SSL_TXT_KRB5_RC2_40_CBC_MD5 SSL3_TXT_KRB5_RC2_40_CBC_MD5 -# define SSL_TXT_KRB5_RC4_40_MD5 SSL3_TXT_KRB5_RC4_40_MD5 - -# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA -# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 -# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA -# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 -# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA -# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 -# define SSL_MAX_KRB5_PRINCIPAL_LENGTH 256 - -# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 -# define SSL_MAX_SID_CTX_LENGTH 32 - -# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) -# define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 - -/* These are used to specify which ciphers to use and not to use */ - -# define SSL_TXT_EXP40 "EXPORT40" -# define SSL_TXT_EXP56 "EXPORT56" -# define SSL_TXT_LOW "LOW" -# define SSL_TXT_MEDIUM "MEDIUM" -# define SSL_TXT_HIGH "HIGH" -# define SSL_TXT_FIPS "FIPS" - -# define SSL_TXT_kFZA "kFZA"/* unused! */ -# define SSL_TXT_aFZA "aFZA"/* unused! */ -# define SSL_TXT_eFZA "eFZA"/* unused! */ -# define SSL_TXT_FZA "FZA"/* unused! */ - -# define SSL_TXT_aNULL "aNULL" -# define SSL_TXT_eNULL "eNULL" -# define SSL_TXT_NULL "NULL" - -# define SSL_TXT_kRSA "kRSA" -# define SSL_TXT_kDHr "kDHr" -# define SSL_TXT_kDHd "kDHd" -# define SSL_TXT_kDH "kDH" -# define SSL_TXT_kEDH "kEDH" -# define SSL_TXT_kDHE "kDHE"/* alias for kEDH */ -# define SSL_TXT_kKRB5 "kKRB5" -# define SSL_TXT_kECDHr "kECDHr" -# define SSL_TXT_kECDHe "kECDHe" -# define SSL_TXT_kECDH "kECDH" -# define SSL_TXT_kEECDH "kEECDH" -# define SSL_TXT_kECDHE "kECDHE"/* alias for kEECDH */ -# define SSL_TXT_kPSK "kPSK" -# define SSL_TXT_kGOST "kGOST" -# define SSL_TXT_kSRP "kSRP" - -# define SSL_TXT_aRSA "aRSA" -# define SSL_TXT_aDSS "aDSS" -# define SSL_TXT_aDH "aDH" -# define SSL_TXT_aECDH "aECDH" -# define SSL_TXT_aKRB5 "aKRB5" -# define SSL_TXT_aECDSA "aECDSA" -# define SSL_TXT_aPSK "aPSK" -# define SSL_TXT_aGOST94 "aGOST94" -# define SSL_TXT_aGOST01 "aGOST01" -# define SSL_TXT_aGOST "aGOST" -# define SSL_TXT_aSRP "aSRP" - -# define SSL_TXT_DSS "DSS" -# define SSL_TXT_DH "DH" -# define SSL_TXT_EDH "EDH"/* same as "kEDH:-ADH" */ -# define SSL_TXT_DHE "DHE"/* alias for EDH */ -# define SSL_TXT_ADH "ADH" -# define SSL_TXT_RSA "RSA" -# define SSL_TXT_ECDH "ECDH" -# define SSL_TXT_EECDH "EECDH"/* same as "kEECDH:-AECDH" */ -# define SSL_TXT_ECDHE "ECDHE"/* alias for ECDHE" */ -# define SSL_TXT_AECDH "AECDH" -# define SSL_TXT_ECDSA "ECDSA" -# define SSL_TXT_KRB5 "KRB5" -# define SSL_TXT_PSK "PSK" -# define SSL_TXT_SRP "SRP" - -# define SSL_TXT_DES "DES" -# define SSL_TXT_3DES "3DES" -# define SSL_TXT_RC4 "RC4" -# define SSL_TXT_RC2 "RC2" -# define SSL_TXT_IDEA "IDEA" -# define SSL_TXT_SEED "SEED" -# define SSL_TXT_AES128 "AES128" -# define SSL_TXT_AES256 "AES256" -# define SSL_TXT_AES "AES" -# define SSL_TXT_AES_GCM "AESGCM" -# define SSL_TXT_CAMELLIA128 "CAMELLIA128" -# define SSL_TXT_CAMELLIA256 "CAMELLIA256" -# define SSL_TXT_CAMELLIA "CAMELLIA" - -# define SSL_TXT_MD5 "MD5" -# define SSL_TXT_SHA1 "SHA1" -# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ -# define SSL_TXT_GOST94 "GOST94" -# define SSL_TXT_GOST89MAC "GOST89MAC" -# define SSL_TXT_SHA256 "SHA256" -# define SSL_TXT_SHA384 "SHA384" - -# define SSL_TXT_SSLV2 "SSLv2" -# define SSL_TXT_SSLV3 "SSLv3" -# define SSL_TXT_TLSV1 "TLSv1" -# define SSL_TXT_TLSV1_1 "TLSv1.1" -# define SSL_TXT_TLSV1_2 "TLSv1.2" - -# define SSL_TXT_EXP "EXP" -# define SSL_TXT_EXPORT "EXPORT" - -# define SSL_TXT_ALL "ALL" - -/*- - * COMPLEMENTOF* definitions. These identifiers are used to (de-select) - * ciphers normally not being used. - * Example: "RC4" will activate all ciphers using RC4 including ciphers - * without authentication, which would normally disabled by DEFAULT (due - * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" - * will make sure that it is also disabled in the specific selection. - * COMPLEMENTOF* identifiers are portable between version, as adjustments - * to the default cipher setup will also be included here. - * - * COMPLEMENTOFDEFAULT does not experience the same special treatment that - * DEFAULT gets, as only selection is being done and no sorting as needed - * for DEFAULT. - */ -# define SSL_TXT_CMPALL "COMPLEMENTOFALL" -# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" - -/* - * The following cipher list is used by default. It also is substituted when - * an application-defined cipher list string starts with 'DEFAULT'. - */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2" -/* - * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always - * starts with a reasonable order, and all we have to do for DEFAULT is - * throwing out anonymous and unencrypted ciphersuites! (The latter are not - * actually enabled by ALL, but "ALL:RSA" would enable some of them.) - */ - -/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ -# define SSL_SENT_SHUTDOWN 1 -# define SSL_RECEIVED_SHUTDOWN 2 - -#ifdef __cplusplus -} -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2) -# define OPENSSL_NO_SSL2 -# endif - -# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 -# define SSL_FILETYPE_PEM X509_FILETYPE_PEM - -/* - * This is needed to stop compilers complaining about the 'struct ssl_st *' - * function parameters used to prototype callbacks in SSL_CTX. - */ -typedef struct ssl_st *ssl_crock_st; -typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; -typedef struct ssl_method_st SSL_METHOD; -typedef struct ssl_cipher_st SSL_CIPHER; -typedef struct ssl_session_st SSL_SESSION; -typedef struct tls_sigalgs_st TLS_SIGALGS; -typedef struct ssl_conf_ctx_st SSL_CONF_CTX; - -DECLARE_STACK_OF(SSL_CIPHER) - -/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ -typedef struct srtp_protection_profile_st { - const char *name; - unsigned long id; -} SRTP_PROTECTION_PROFILE; - -DECLARE_STACK_OF(SRTP_PROTECTION_PROFILE) - -typedef int (*tls_session_ticket_ext_cb_fn) (SSL *s, - const unsigned char *data, - int len, void *arg); -typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret, - int *secret_len, - STACK_OF(SSL_CIPHER) *peer_ciphers, - SSL_CIPHER **cipher, void *arg); - -# ifndef OPENSSL_NO_TLSEXT - -/* Typedefs for handling custom extensions */ - -typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type, - const unsigned char **out, - size_t *outlen, int *al, void *add_arg); - -typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type, - const unsigned char *out, void *add_arg); - -typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type, - const unsigned char *in, - size_t inlen, int *al, void *parse_arg); - -# endif - -# ifndef OPENSSL_NO_SSL_INTERN - -/* used to hold info on the particular ciphers used */ -struct ssl_cipher_st { - int valid; - const char *name; /* text name */ - unsigned long id; /* id, 4 bytes, first is version */ - /* - * changed in 0.9.9: these four used to be portions of a single value - * 'algorithms' - */ - unsigned long algorithm_mkey; /* key exchange algorithm */ - unsigned long algorithm_auth; /* server authentication */ - unsigned long algorithm_enc; /* symmetric encryption */ - unsigned long algorithm_mac; /* symmetric authentication */ - unsigned long algorithm_ssl; /* (major) protocol version */ - unsigned long algo_strength; /* strength and export flags */ - unsigned long algorithm2; /* Extra flags */ - int strength_bits; /* Number of bits really used */ - int alg_bits; /* Number of bits for algorithm */ -}; - -/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ -struct ssl_method_st { - int version; - int (*ssl_new) (SSL *s); - void (*ssl_clear) (SSL *s); - void (*ssl_free) (SSL *s); - int (*ssl_accept) (SSL *s); - int (*ssl_connect) (SSL *s); - int (*ssl_read) (SSL *s, void *buf, int len); - int (*ssl_peek) (SSL *s, void *buf, int len); - int (*ssl_write) (SSL *s, const void *buf, int len); - int (*ssl_shutdown) (SSL *s); - int (*ssl_renegotiate) (SSL *s); - int (*ssl_renegotiate_check) (SSL *s); - long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long - max, int *ok); - int (*ssl_read_bytes) (SSL *s, int type, unsigned char *buf, int len, - int peek); - int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len); - int (*ssl_dispatch_alert) (SSL *s); - long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg); - long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg); - const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr); - int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr); - int (*ssl_pending) (const SSL *s); - int (*num_ciphers) (void); - const SSL_CIPHER *(*get_cipher) (unsigned ncipher); - const struct ssl_method_st *(*get_ssl_method) (int version); - long (*get_timeout) (void); - struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */ - int (*ssl_version) (void); - long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void)); - long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void)); -}; - -/*- - * Lets make this into an ASN.1 type structure as follows - * SSL_SESSION_ID ::= SEQUENCE { - * version INTEGER, -- structure version number - * SSLversion INTEGER, -- SSL version number - * Cipher OCTET STRING, -- the 3 byte cipher ID - * Session_ID OCTET STRING, -- the Session ID - * Master_key OCTET STRING, -- the master key - * KRB5_principal OCTET STRING -- optional Kerberos principal - * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument - * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time - * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds - * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate - * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context - * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer' - * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension - * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint - * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity - * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket - * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only) - * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method - * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username - * } - * Look in ssl/ssl_asn1.c for more details - * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). - */ -struct ssl_session_st { - int ssl_version; /* what ssl version session info is being - * kept in here? */ - /* only really used in SSLv2 */ - unsigned int key_arg_length; - unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; - int master_key_length; - unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH]; - /* session_id - valid? */ - unsigned int session_id_length; - unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; - /* - * this is used to determine whether the session is being reused in the - * appropriate context. It is up to the application to set this, via - * SSL_new - */ - unsigned int sid_ctx_length; - unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; -# ifndef OPENSSL_NO_KRB5 - unsigned int krb5_client_princ_len; - unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH]; -# endif /* OPENSSL_NO_KRB5 */ -# ifndef OPENSSL_NO_PSK - char *psk_identity_hint; - char *psk_identity; -# endif - /* - * Used to indicate that session resumption is not allowed. Applications - * can also set this bit for a new session via not_resumable_session_cb - * to disable session caching and tickets. - */ - int not_resumable; - /* The cert is the certificate used to establish this connection */ - struct sess_cert_st /* SESS_CERT */ *sess_cert; - /* - * This is the cert for the other end. On clients, it will be the same as - * sess_cert->peer_key->x509 (the latter is not enough as sess_cert is - * not retained in the external representation of sessions, see - * ssl_asn1.c). - */ - X509 *peer; - /* - * when app_verify_callback accepts a session where the peer's - * certificate is not ok, we must remember the error for session reuse: - */ - long verify_result; /* only for servers */ - int references; - long timeout; - long time; - unsigned int compress_meth; /* Need to lookup the method */ - const SSL_CIPHER *cipher; - unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used - * to load the 'cipher' structure */ - STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ - CRYPTO_EX_DATA ex_data; /* application specific data */ - /* - * These are used to make removal of session-ids more efficient and to - * implement a maximum cache size. - */ - struct ssl_session_st *prev, *next; -# ifndef OPENSSL_NO_TLSEXT - char *tlsext_hostname; -# ifndef OPENSSL_NO_EC - size_t tlsext_ecpointformatlist_length; - unsigned char *tlsext_ecpointformatlist; /* peer's list */ - size_t tlsext_ellipticcurvelist_length; - unsigned char *tlsext_ellipticcurvelist; /* peer's list */ -# endif /* OPENSSL_NO_EC */ - /* RFC4507 info */ - unsigned char *tlsext_tick; /* Session ticket */ - size_t tlsext_ticklen; /* Session ticket length */ - long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ -# endif -# ifndef OPENSSL_NO_SRP - char *srp_username; -# endif -}; - -# endif - -# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L -# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L -# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L -# define SSL_OP_TLSEXT_PADDING 0x00000010L -# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L -# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L -# define SSL_OP_TLS_D5_BUG 0x00000100L -# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L - -/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ -# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Refers to ancient SSLREF and SSLv2, retained for compatibility */ -# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 - -/* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. - */ -/* added in 0.9.6e */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. This - * used to be 0x000FFFFFL before 0.9.7. - */ -# define SSL_OP_ALL 0x80000BFFL - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000L -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000L -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000L -/* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000L - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000L -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L -/* If set, always create a new key when using tmp_ecdh parameters */ -# define SSL_OP_SINGLE_ECDH_USE 0x00080000L -/* Does nothing: retained for compatibility */ -# define SSL_OP_SINGLE_DH_USE 0x00100000L -/* Does nothing: retained for compatibiity */ -# define SSL_OP_EPHEMERAL_RSA 0x0 -/* - * Set on servers to choose the cipher according to the server's preferences - */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L - -# define SSL_OP_NO_SSLv2 0x01000000L -# define SSL_OP_NO_SSLv3 0x02000000L -# define SSL_OP_NO_TLSv1 0x04000000L -# define SSL_OP_NO_TLSv1_2 0x08000000L -# define SSL_OP_NO_TLSv1_1 0x10000000L - -# define SSL_OP_NO_DTLSv1 0x04000000L -# define SSL_OP_NO_DTLSv1_2 0x08000000L - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) - -/* - * These next two were never actually used for anything since SSLeay zap so - * we have some more flags. - */ -/* - * The next flag deliberately changes the ciphertest, this is a check for the - * PKCS#1 attack - */ -# define SSL_OP_PKCS1_CHECK_1 0x0 -# define SSL_OP_PKCS1_CHECK_2 0x0 - -# define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L -# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L - -/* - * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success - * when just a single record has been written): - */ -# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L -/* - * Make it possible to retry SSL_write() with changed buffer location (buffer - * contents must stay the same!); this is not the default to avoid the - * misconception that non-blocking SSL_write() behaves like non-blocking - * write(): - */ -# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L -/* - * Never bother the application with retries if the transport is blocking: - */ -# define SSL_MODE_AUTO_RETRY 0x00000004L -/* Don't attempt to automatically build certificate chain */ -# define SSL_MODE_NO_AUTO_CHAIN 0x00000008L -/* - * Save RAM by releasing read and write buffers when they're empty. (SSL3 and - * TLS only.) "Released" buffers are put onto a free-list in the context or - * just freed (depending on the context's setting for freelist_max_len). - */ -# define SSL_MODE_RELEASE_BUFFERS 0x00000010L -/* - * Send the current time in the Random fields of the ClientHello and - * ServerHello records for compatibility with hypothetical implementations - * that require it. - */ -# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L -# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L -/* - * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications - * that reconnect with a downgraded protocol version; see - * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your - * application attempts a normal handshake. Only use this in explicit - * fallback retries, following the guidance in - * draft-ietf-tls-downgrade-scsv-00. - */ -# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L - -/* Cert related flags */ -/* - * Many implementations ignore some aspects of the TLS standards such as - * enforcing certifcate chain algorithms. When this is set we enforce them. - */ -# define SSL_CERT_FLAG_TLS_STRICT 0x00000001L - -/* Suite B modes, takes same values as certificate verify flags */ -# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 - -/* Perform all sorts of protocol violations for testing purposes */ -# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 - -/* Flags for building certificate chains */ -/* Treat any existing certificates as untrusted CAs */ -# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 -/* Don't include root CA in chain */ -# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 -/* Just check certificates already there */ -# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 -/* Ignore verification errors */ -# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 -/* Clear verification errors from queue */ -# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 - -/* Flags returned by SSL_check_chain */ -/* Certificate can be used with this session */ -# define CERT_PKEY_VALID 0x1 -/* Certificate can also be used for signing */ -# define CERT_PKEY_SIGN 0x2 -/* EE certificate signing algorithm OK */ -# define CERT_PKEY_EE_SIGNATURE 0x10 -/* CA signature algorithms OK */ -# define CERT_PKEY_CA_SIGNATURE 0x20 -/* EE certificate parameters OK */ -# define CERT_PKEY_EE_PARAM 0x40 -/* CA certificate parameters OK */ -# define CERT_PKEY_CA_PARAM 0x80 -/* Signing explicitly allowed as opposed to SHA1 fallback */ -# define CERT_PKEY_EXPLICIT_SIGN 0x100 -/* Client CA issuer names match (always set for server cert) */ -# define CERT_PKEY_ISSUER_NAME 0x200 -/* Cert type matches client types (always set for server cert) */ -# define CERT_PKEY_CERT_TYPE 0x400 -/* Cert chain suitable to Suite B */ -# define CERT_PKEY_SUITEB 0x800 - -# define SSL_CONF_FLAG_CMDLINE 0x1 -# define SSL_CONF_FLAG_FILE 0x2 -# define SSL_CONF_FLAG_CLIENT 0x4 -# define SSL_CONF_FLAG_SERVER 0x8 -# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 -# define SSL_CONF_FLAG_CERTIFICATE 0x20 -/* Configuration value types */ -# define SSL_CONF_TYPE_UNKNOWN 0x0 -# define SSL_CONF_TYPE_STRING 0x1 -# define SSL_CONF_TYPE_FILE 0x2 -# define SSL_CONF_TYPE_DIR 0x3 - -/* - * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they - * cannot be used to clear bits. - */ - -# define SSL_CTX_set_options(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) -# define SSL_CTX_clear_options(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) -# define SSL_CTX_get_options(ctx) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL) -# define SSL_set_options(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL) -# define SSL_clear_options(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) -# define SSL_get_options(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL) - -# define SSL_CTX_set_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) -# define SSL_CTX_clear_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_CTX_get_mode(ctx) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) -# define SSL_clear_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_set_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) -# define SSL_get_mode(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) -# define SSL_set_mtu(ssl, mtu) \ - SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) -# define DTLS_set_link_mtu(ssl, mtu) \ - SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) -# define DTLS_get_link_min_mtu(ssl) \ - SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) - -# define SSL_get_secure_renegotiation_support(ssl) \ - SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - -# define SSL_CTX_set_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_set_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_CTX_clear_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) -# define SSL_clear_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) - -void SSL_CTX_set_msg_callback(SSL_CTX *ctx, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -void SSL_set_msg_callback(SSL *ssl, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) -# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) - -# ifndef OPENSSL_NO_SRP - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct srp_ctx_st { - /* param for all the callbacks */ - void *SRP_cb_arg; - /* set client Hello login callback */ - int (*TLS_ext_srp_username_callback) (SSL *, int *, void *); - /* set SRP N/g param callback for verification */ - int (*SRP_verify_param_callback) (SSL *, void *); - /* set SRP client passwd callback */ - char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *); - char *login; - BIGNUM *N, *g, *s, *B, *A; - BIGNUM *a, *b, *v; - char *info; - int strength; - unsigned long srp_Mask; -} SRP_CTX; - -# endif - -/* see tls_srp.c */ -int SSL_SRP_CTX_init(SSL *s); -int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -int SSL_srp_server_param_with_username(SSL *s, int *ad); -int SRP_generate_server_master_secret(SSL *s, unsigned char *master_key); -int SRP_Calc_A_param(SSL *s); -int SRP_generate_client_master_secret(SSL *s, unsigned char *master_key); - -# endif - -# if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) -# define SSL_MAX_CERT_LIST_DEFAULT 1024*30 - /* 30k max cert list :-) */ -# else -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 - /* 100k max cert list :-) */ -# endif - -# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) - -/* - * This callback type is used inside SSL_CTX, SSL, and in the functions that - * set them. It is used to override the generation of SSL/TLS session IDs in - * a server. Return value should be zero on an error, non-zero to proceed. - * Also, callbacks should themselves check if the id they generate is unique - * otherwise the SSL handshake will fail with an error - callbacks can do - * this using the 'ssl' value they're passed by; - * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in - * is set at the maximum size the session ID can be. In SSLv2 this is 16 - * bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback can alter this - * length to be less if desired, but under SSLv2 session IDs are supposed to - * be fixed at 16 bytes so the id will be padded after the callback returns - * in this case. It is also an error for the callback to set the size to - * zero. - */ -typedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id, - unsigned int *id_len); - -typedef struct ssl_comp_st SSL_COMP; - -# ifndef OPENSSL_NO_SSL_INTERN - -struct ssl_comp_st { - int id; - const char *name; -# ifndef OPENSSL_NO_COMP - COMP_METHOD *method; -# else - char *method; -# endif -}; - -DECLARE_STACK_OF(SSL_COMP) -DECLARE_LHASH_OF(SSL_SESSION); - -struct ssl_ctx_st { - const SSL_METHOD *method; - STACK_OF(SSL_CIPHER) *cipher_list; - /* same as above but sorted for lookup */ - STACK_OF(SSL_CIPHER) *cipher_list_by_id; - struct x509_store_st /* X509_STORE */ *cert_store; - LHASH_OF(SSL_SESSION) *sessions; - /* - * Most session-ids that will be cached, default is - * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. - */ - unsigned long session_cache_size; - struct ssl_session_st *session_cache_head; - struct ssl_session_st *session_cache_tail; - /* - * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT, - * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which - * means only SSL_accept which cache SSL_SESSIONS. - */ - int session_cache_mode; - /* - * If timeout is not 0, it is the default timeout value set when - * SSL_new() is called. This has been put in to make life easier to set - * things up - */ - long session_timeout; - /* - * If this callback is not null, it will be called each time a session id - * is added to the cache. If this function returns 1, it means that the - * callback will do a SSL_SESSION_free() when it has finished using it. - * Otherwise, on 0, it means the callback has finished with it. If - * remove_session_cb is not null, it will be called when a session-id is - * removed from the cache. After the call, OpenSSL will - * SSL_SESSION_free() it. - */ - int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess); - void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); - SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl, - unsigned char *data, int len, int *copy); - struct { - int sess_connect; /* SSL new conn - started */ - int sess_connect_renegotiate; /* SSL reneg - requested */ - int sess_connect_good; /* SSL new conne/reneg - finished */ - int sess_accept; /* SSL new accept - started */ - int sess_accept_renegotiate; /* SSL reneg - requested */ - int sess_accept_good; /* SSL accept/reneg - finished */ - int sess_miss; /* session lookup misses */ - int sess_timeout; /* reuse attempt on timeouted session */ - int sess_cache_full; /* session removed due to full cache */ - int sess_hit; /* session reuse actually done */ - int sess_cb_hit; /* session-id that was not in the cache was - * passed back via the callback. This - * indicates that the application is - * supplying session-id's from other - * processes - spooky :-) */ - } stats; - - int references; - - /* if defined, these override the X509_verify_cert() calls */ - int (*app_verify_callback) (X509_STORE_CTX *, void *); - void *app_verify_arg; - /* - * before OpenSSL 0.9.7, 'app_verify_arg' was ignored - * ('app_verify_callback' was called with just one argument) - */ - - /* Default password callback. */ - pem_password_cb *default_passwd_callback; - - /* Default password callback user data. */ - void *default_passwd_callback_userdata; - - /* get client cert callback */ - int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey); - - /* cookie generate callback */ - int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie, - unsigned int *cookie_len); - - /* verify cookie callback */ - int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie, - unsigned int cookie_len); - - CRYPTO_EX_DATA ex_data; - - const EVP_MD *rsa_md5; /* For SSLv2 - name is 'ssl2-md5' */ - const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ - const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */ - - STACK_OF(X509) *extra_certs; - STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */ - - /* Default values used when no per-SSL value is defined follow */ - - /* used if SSL's info_callback is NULL */ - void (*info_callback) (const SSL *ssl, int type, int val); - - /* what we put in client cert requests */ - STACK_OF(X509_NAME) *client_CA; - - /* - * Default values to use in SSL structures follow (these are copied by - * SSL_new) - */ - - unsigned long options; - unsigned long mode; - long max_cert_list; - - struct cert_st /* CERT */ *cert; - int read_ahead; - - /* callback that allows applications to peek at protocol messages */ - void (*msg_callback) (int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); - void *msg_callback_arg; - - int verify_mode; - unsigned int sid_ctx_length; - unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; - /* called 'verify_callback' in the SSL */ - int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx); - - /* Default generate session ID callback. */ - GEN_SESSION_CB generate_session_id; - - X509_VERIFY_PARAM *param; - -# if 0 - int purpose; /* Purpose setting */ - int trust; /* Trust setting */ -# endif - - int quiet_shutdown; - - /* - * Maximum amount of data to send in one fragment. actual record size can - * be more than this due to padding and MAC overheads. - */ - unsigned int max_send_fragment; - -# ifndef OPENSSL_NO_ENGINE - /* - * Engine to pass requests for client certs to - */ - ENGINE *client_cert_engine; -# endif - -# ifndef OPENSSL_NO_TLSEXT - /* TLS extensions servername callback */ - int (*tlsext_servername_callback) (SSL *, int *, void *); - void *tlsext_servername_arg; - /* RFC 4507 session ticket keys */ - unsigned char tlsext_tick_key_name[16]; - unsigned char tlsext_tick_hmac_key[16]; - unsigned char tlsext_tick_aes_key[16]; - /* Callback to support customisation of ticket key setting */ - int (*tlsext_ticket_key_cb) (SSL *ssl, - unsigned char *name, unsigned char *iv, - EVP_CIPHER_CTX *ectx, - HMAC_CTX *hctx, int enc); - - /* certificate status request info */ - /* Callback for status request */ - int (*tlsext_status_cb) (SSL *ssl, void *arg); - void *tlsext_status_arg; - - /* draft-rescorla-tls-opaque-prf-input-00.txt information */ - int (*tlsext_opaque_prf_input_callback) (SSL *, void *peerinput, - size_t len, void *arg); - void *tlsext_opaque_prf_input_callback_arg; -# endif - -# ifndef OPENSSL_NO_PSK - char *psk_identity_hint; - unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, - char *identity, - unsigned int max_identity_len, - unsigned char *psk, - unsigned int max_psk_len); - unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, - unsigned char *psk, - unsigned int max_psk_len); -# endif - -# ifndef OPENSSL_NO_BUF_FREELISTS -# define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 - unsigned int freelist_max_len; - struct ssl3_buf_freelist_st *wbuf_freelist; - struct ssl3_buf_freelist_st *rbuf_freelist; -# endif -# ifndef OPENSSL_NO_SRP - SRP_CTX srp_ctx; /* ctx for SRP authentication */ -# endif - -# ifndef OPENSSL_NO_TLSEXT - -# ifndef OPENSSL_NO_NEXTPROTONEG - /* Next protocol negotiation information */ - /* (for experimental NPN extension). */ - - /* - * For a server, this contains a callback function by which the set of - * advertised protocols can be provided. - */ - int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf, - unsigned int *len, void *arg); - void *next_protos_advertised_cb_arg; - /* - * For a client, this contains a callback function that selects the next - * protocol from the list provided by the server. - */ - int (*next_proto_select_cb) (SSL *s, unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, void *arg); - void *next_proto_select_cb_arg; -# endif - /* SRTP profiles we are willing to do from RFC 5764 */ - STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; - - /* - * ALPN information (we are in the process of transitioning from NPN to - * ALPN.) - */ - - /*- - * For a server, this contains a callback function that allows the - * server to select the protocol for the connection. - * out: on successful return, this must point to the raw protocol - * name (without the length prefix). - * outlen: on successful return, this contains the length of |*out|. - * in: points to the client's list of supported protocols in - * wire-format. - * inlen: the length of |in|. - */ - int (*alpn_select_cb) (SSL *s, - const unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, void *arg); - void *alpn_select_cb_arg; - - /* - * For a client, this contains the list of supported protocols in wire - * format. - */ - unsigned char *alpn_client_proto_list; - unsigned alpn_client_proto_list_len; - -# ifndef OPENSSL_NO_EC - /* EC extension values inherited by SSL structure */ - size_t tlsext_ecpointformatlist_length; - unsigned char *tlsext_ecpointformatlist; - size_t tlsext_ellipticcurvelist_length; - unsigned char *tlsext_ellipticcurvelist; -# endif /* OPENSSL_NO_EC */ -# endif -}; - -# endif - -# define SSL_SESS_CACHE_OFF 0x0000 -# define SSL_SESS_CACHE_CLIENT 0x0001 -# define SSL_SESS_CACHE_SERVER 0x0002 -# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) -# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 -/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ -# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 -# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 -# define SSL_SESS_CACHE_NO_INTERNAL \ - (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) - -LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); -# define SSL_CTX_sess_number(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) -# define SSL_CTX_sess_connect(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) -# define SSL_CTX_sess_connect_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) -# define SSL_CTX_sess_connect_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) -# define SSL_CTX_sess_accept_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) -# define SSL_CTX_sess_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) -# define SSL_CTX_sess_cb_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) -# define SSL_CTX_sess_misses(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) -# define SSL_CTX_sess_timeouts(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) -# define SSL_CTX_sess_cache_full(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) - -void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, - int (*new_session_cb) (struct ssl_st *ssl, - SSL_SESSION *sess)); -int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - SSL_SESSION *sess); -void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, - void (*remove_session_cb) (struct ssl_ctx_st - *ctx, - SSL_SESSION - *sess)); -void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, - SSL_SESSION *sess); -void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, - SSL_SESSION *(*get_session_cb) (struct ssl_st - *ssl, - unsigned char - *data, int len, - int *copy)); -SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - unsigned char *Data, - int len, int *copy); -void SSL_CTX_set_info_callback(SSL_CTX *ctx, - void (*cb) (const SSL *ssl, int type, - int val)); -void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, - int val); -void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, - int (*client_cert_cb) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey)); -int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey); -# ifndef OPENSSL_NO_ENGINE -int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); -# endif -void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, - int (*app_gen_cookie_cb) (SSL *ssl, - unsigned char - *cookie, - unsigned int - *cookie_len)); -void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, - int (*app_verify_cookie_cb) (SSL *ssl, - unsigned char - *cookie, - unsigned int - cookie_len)); -# ifndef OPENSSL_NO_NEXTPROTONEG -void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, - int (*cb) (SSL *ssl, - const unsigned char - **out, - unsigned int *outlen, - void *arg), void *arg); -void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, - int (*cb) (SSL *ssl, - unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg), void *arg); -void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, - unsigned *len); -# endif - -# ifndef OPENSSL_NO_TLSEXT -int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, - const unsigned char *in, unsigned int inlen, - const unsigned char *client, - unsigned int client_len); -# endif - -# define OPENSSL_NPN_UNSUPPORTED 0 -# define OPENSSL_NPN_NEGOTIATED 1 -# define OPENSSL_NPN_NO_OVERLAP 2 - -int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, - unsigned protos_len); -int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, - unsigned protos_len); -void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, - int (*cb) (SSL *ssl, - const unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg), void *arg); -void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, - unsigned *len); - -# ifndef OPENSSL_NO_PSK -/* - * the maximum length of the buffer given to callbacks containing the - * resulting identity/psk - */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 -void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, - unsigned int (*psk_client_callback) (SSL - *ssl, - const - char - *hint, - char - *identity, - unsigned - int - max_identity_len, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_set_psk_client_callback(SSL *ssl, - unsigned int (*psk_client_callback) (SSL - *ssl, - const - char - *hint, - char - *identity, - unsigned - int - max_identity_len, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, - unsigned int (*psk_server_callback) (SSL - *ssl, - const - char - *identity, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_set_psk_server_callback(SSL *ssl, - unsigned int (*psk_server_callback) (SSL - *ssl, - const - char - *identity, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); -int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); -const char *SSL_get_psk_identity_hint(const SSL *s); -const char *SSL_get_psk_identity(const SSL *s); -# endif - -# ifndef OPENSSL_NO_TLSEXT -/* Register callbacks to handle custom TLS Extensions for client or server. */ - -int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); - -int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); - -int SSL_extension_supported(unsigned int ext_type); - -# endif - -# define SSL_NOTHING 1 -# define SSL_WRITING 2 -# define SSL_READING 3 -# define SSL_X509_LOOKUP 4 - -/* These will only be used when doing non-blocking IO */ -# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) -# define SSL_want_read(s) (SSL_want(s) == SSL_READING) -# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) -# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) - -# define SSL_MAC_FLAG_READ_MAC_STREAM 1 -# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 - -# ifndef OPENSSL_NO_SSL_INTERN - -struct ssl_st { - /* - * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, - * DTLS1_VERSION) - */ - int version; - /* SSL_ST_CONNECT or SSL_ST_ACCEPT */ - int type; - /* SSLv3 */ - const SSL_METHOD *method; - /* - * There are 2 BIO's even though they are normally both the same. This - * is so data can be read and written to different handlers - */ -# ifndef OPENSSL_NO_BIO - /* used by SSL_read */ - BIO *rbio; - /* used by SSL_write */ - BIO *wbio; - /* used during session-id reuse to concatenate messages */ - BIO *bbio; -# else - /* used by SSL_read */ - char *rbio; - /* used by SSL_write */ - char *wbio; - char *bbio; -# endif - /* - * This holds a variable that indicates what we were doing when a 0 or -1 - * is returned. This is needed for non-blocking IO so we know what - * request needs re-doing when in SSL_accept or SSL_connect - */ - int rwstate; - /* true when we are actually in SSL_accept() or SSL_connect() */ - int in_handshake; - int (*handshake_func) (SSL *); - /* - * Imagine that here's a boolean member "init" that is switched as soon - * as SSL_set_{accept/connect}_state is called for the first time, so - * that "state" and "handshake_func" are properly initialized. But as - * handshake_func is == 0 until then, we use this test instead of an - * "init" member. - */ - /* are we the server side? - mostly used by SSL_clear */ - int server; - /* - * Generate a new session or reuse an old one. - * NB: For servers, the 'new' session may actually be a previously - * cached session or even the previous session unless - * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set - */ - int new_session; - /* don't send shutdown packets */ - int quiet_shutdown; - /* we have shut things down, 0x01 sent, 0x02 for received */ - int shutdown; - /* where we are */ - int state; - /* where we are when reading */ - int rstate; - BUF_MEM *init_buf; /* buffer used during init */ - void *init_msg; /* pointer to handshake message body, set by - * ssl3_get_message() */ - int init_num; /* amount read/written */ - int init_off; /* amount read/written */ - /* used internally to point at a raw packet */ - unsigned char *packet; - unsigned int packet_length; - struct ssl2_state_st *s2; /* SSLv2 variables */ - struct ssl3_state_st *s3; /* SSLv3 variables */ - struct dtls1_state_st *d1; /* DTLSv1 variables */ - int read_ahead; /* Read as many input bytes as possible (for - * non-blocking reads) */ - /* callback that allows applications to peek at protocol messages */ - void (*msg_callback) (int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); - void *msg_callback_arg; - int hit; /* reusing a previous session */ - X509_VERIFY_PARAM *param; -# if 0 - int purpose; /* Purpose setting */ - int trust; /* Trust setting */ -# endif - /* crypto */ - STACK_OF(SSL_CIPHER) *cipher_list; - STACK_OF(SSL_CIPHER) *cipher_list_by_id; - /* - * These are the ones being used, the ones in SSL_SESSION are the ones to - * be 'copied' into these ones - */ - int mac_flags; - EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ - EVP_MD_CTX *read_hash; /* used for mac generation */ -# ifndef OPENSSL_NO_COMP - COMP_CTX *expand; /* uncompress */ -# else - char *expand; -# endif - EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ - EVP_MD_CTX *write_hash; /* used for mac generation */ -# ifndef OPENSSL_NO_COMP - COMP_CTX *compress; /* compression */ -# else - char *compress; -# endif - /* session info */ - /* client cert? */ - /* This is used to hold the server certificate used */ - struct cert_st /* CERT */ *cert; - /* - * the session_id_context is used to ensure sessions are only reused in - * the appropriate context - */ - unsigned int sid_ctx_length; - unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; - /* This can also be in the session once a session is established */ - SSL_SESSION *session; - /* Default generate session ID callback. */ - GEN_SESSION_CB generate_session_id; - /* Used in SSL2 and SSL3 */ - /* - * 0 don't care about verify failure. - * 1 fail if verify fails - */ - int verify_mode; - /* fail if callback returns 0 */ - int (*verify_callback) (int ok, X509_STORE_CTX *ctx); - /* optional informational callback */ - void (*info_callback) (const SSL *ssl, int type, int val); - /* error bytes to be written */ - int error; - /* actual code */ - int error_code; -# ifndef OPENSSL_NO_KRB5 - /* Kerberos 5 context */ - KSSL_CTX *kssl_ctx; -# endif /* OPENSSL_NO_KRB5 */ -# ifndef OPENSSL_NO_PSK - unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, - char *identity, - unsigned int max_identity_len, - unsigned char *psk, - unsigned int max_psk_len); - unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, - unsigned char *psk, - unsigned int max_psk_len); -# endif - SSL_CTX *ctx; - /* - * set this flag to 1 and a sleep(1) is put into all SSL_read() and - * SSL_write() calls, good for nbio debuging :-) - */ - int debug; - /* extra application data */ - long verify_result; - CRYPTO_EX_DATA ex_data; - /* for server side, keep the list of CA_dn we can use */ - STACK_OF(X509_NAME) *client_CA; - int references; - /* protocol behaviour */ - unsigned long options; - /* API behaviour */ - unsigned long mode; - long max_cert_list; - int first_packet; - /* what was passed, used for SSLv3/TLS rollback check */ - int client_version; - unsigned int max_send_fragment; -# ifndef OPENSSL_NO_TLSEXT - /* TLS extension debug callback */ - void (*tlsext_debug_cb) (SSL *s, int client_server, int type, - unsigned char *data, int len, void *arg); - void *tlsext_debug_arg; - char *tlsext_hostname; - /*- - * no further mod of servername - * 0 : call the servername extension callback. - * 1 : prepare 2, allow last ack just after in server callback. - * 2 : don't call servername callback, no ack in server hello - */ - int servername_done; - /* certificate status request info */ - /* Status type or -1 if no status type */ - int tlsext_status_type; - /* Expect OCSP CertificateStatus message */ - int tlsext_status_expected; - /* OCSP status request only */ - STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids; - X509_EXTENSIONS *tlsext_ocsp_exts; - /* OCSP response received or to be sent */ - unsigned char *tlsext_ocsp_resp; - int tlsext_ocsp_resplen; - /* RFC4507 session ticket expected to be received or sent */ - int tlsext_ticket_expected; -# ifndef OPENSSL_NO_EC - size_t tlsext_ecpointformatlist_length; - /* our list */ - unsigned char *tlsext_ecpointformatlist; - size_t tlsext_ellipticcurvelist_length; - /* our list */ - unsigned char *tlsext_ellipticcurvelist; -# endif /* OPENSSL_NO_EC */ - /* - * draft-rescorla-tls-opaque-prf-input-00.txt information to be used for - * handshakes - */ - void *tlsext_opaque_prf_input; - size_t tlsext_opaque_prf_input_len; - /* TLS Session Ticket extension override */ - TLS_SESSION_TICKET_EXT *tlsext_session_ticket; - /* TLS Session Ticket extension callback */ - tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb; - void *tls_session_ticket_ext_cb_arg; - /* TLS pre-shared secret session resumption */ - tls_session_secret_cb_fn tls_session_secret_cb; - void *tls_session_secret_cb_arg; - SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */ -# ifndef OPENSSL_NO_NEXTPROTONEG - /* - * Next protocol negotiation. For the client, this is the protocol that - * we sent in NextProtocol and is set when handling ServerHello - * extensions. For a server, this is the client's selected_protocol from - * NextProtocol and is set when handling the NextProtocol message, before - * the Finished message. - */ - unsigned char *next_proto_negotiated; - unsigned char next_proto_negotiated_len; -# endif -# define session_ctx initial_ctx - /* What we'll do */ - STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; - /* What's been chosen */ - SRTP_PROTECTION_PROFILE *srtp_profile; - /*- - * Is use of the Heartbeat extension negotiated? - * 0: disabled - * 1: enabled - * 2: enabled, but not allowed to send Requests - */ - unsigned int tlsext_heartbeat; - /* Indicates if a HeartbeatRequest is in flight */ - unsigned int tlsext_hb_pending; - /* HeartbeatRequest sequence number */ - unsigned int tlsext_hb_seq; -# else -# define session_ctx ctx -# endif /* OPENSSL_NO_TLSEXT */ - /*- - * 1 if we are renegotiating. - * 2 if we are a server and are inside a handshake - * (i.e. not just sending a HelloRequest) - */ - int renegotiate; -# ifndef OPENSSL_NO_SRP - /* ctx for SRP authentication */ - SRP_CTX srp_ctx; -# endif -# ifndef OPENSSL_NO_TLSEXT - /* - * For a client, this contains the list of supported protocols in wire - * format. - */ - unsigned char *alpn_client_proto_list; - unsigned alpn_client_proto_list_len; -# endif /* OPENSSL_NO_TLSEXT */ -}; - -# endif - -#ifdef __cplusplus -} -#endif - -# include -# include -# include /* This is mostly sslv3 with a few tweaks */ -# include /* Datagram TLS */ -# include -# include /* Support for the use_srtp extension */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* compatibility */ -# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg)) -# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) -# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a)) -# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) -# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) -# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg)) - -/* - * The following are the possible values for ssl->state are are used to - * indicate where we are up to in the SSL connection establishment. The - * macros that follow are about the only things you should need to use and - * even then, only when using non-blocking IO. It can also be useful to work - * out where you were when the connection failed - */ - -# define SSL_ST_CONNECT 0x1000 -# define SSL_ST_ACCEPT 0x2000 -# define SSL_ST_MASK 0x0FFF -# define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT) -# define SSL_ST_BEFORE 0x4000 -# define SSL_ST_OK 0x03 -# define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) -# define SSL_ST_ERR 0x05 - -# define SSL_CB_LOOP 0x01 -# define SSL_CB_EXIT 0x02 -# define SSL_CB_READ 0x04 -# define SSL_CB_WRITE 0x08 -# define SSL_CB_ALERT 0x4000/* used in callback */ -# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) -# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) -# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) -# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) -# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) -# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) -# define SSL_CB_HANDSHAKE_START 0x10 -# define SSL_CB_HANDSHAKE_DONE 0x20 - -/* Is the SSL_connection established? */ -# define SSL_get_state(a) SSL_state(a) -# define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK) -# define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT) -# define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE) -# define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT) -# define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) - -/* - * The following 2 states are kept in ssl->rstate when reads fail, you should - * not need these - */ -# define SSL_ST_READ_HEADER 0xF0 -# define SSL_ST_READ_BODY 0xF1 -# define SSL_ST_READ_DONE 0xF2 - -/*- - * Obtain latest Finished message - * -- that we sent (SSL_get_finished) - * -- that we expected from peer (SSL_get_peer_finished). - * Returns length (0 == no Finished so far), copies up to 'count' bytes. - */ -size_t SSL_get_finished(const SSL *s, void *buf, size_t count); -size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); - -/* - * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are - * 'ored' with SSL_VERIFY_PEER if they are desired - */ -# define SSL_VERIFY_NONE 0x00 -# define SSL_VERIFY_PEER 0x01 -# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 -# define SSL_VERIFY_CLIENT_ONCE 0x04 - -# define OpenSSL_add_ssl_algorithms() SSL_library_init() -# define SSLeay_add_ssl_algorithms() SSL_library_init() - -/* this is for backward compatibility */ -# if 0 /* NEW_SSLEAY */ -# define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c) -# define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n) -# define SSL_add_session(a,b) SSL_CTX_add_session((a),(b)) -# define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b)) -# define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b)) -# endif -/* More backward compatibility */ -# define SSL_get_cipher(s) \ - SSL_CIPHER_get_name(SSL_get_current_cipher(s)) -# define SSL_get_cipher_bits(s,np) \ - SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) -# define SSL_get_cipher_version(s) \ - SSL_CIPHER_get_version(SSL_get_current_cipher(s)) -# define SSL_get_cipher_name(s) \ - SSL_CIPHER_get_name(SSL_get_current_cipher(s)) -# define SSL_get_time(a) SSL_SESSION_get_time(a) -# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) -# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) -# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) - -# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) -# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) - -DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) -# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value - * from SSL_AD_... */ -/* These alert types are for SSLv3 and TLSv1 */ -# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY -/* fatal */ -# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE -/* fatal */ -# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC -# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED -# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW -/* fatal */ -# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE -/* fatal */ -# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE -/* Not for TLS */ -# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE -# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE -# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE -# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED -# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED -# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN -/* fatal */ -# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER -/* fatal */ -# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA -/* fatal */ -# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED -/* fatal */ -# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR -# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR -/* fatal */ -# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION -/* fatal */ -# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION -/* fatal */ -# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY -/* fatal */ -# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR -# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED -# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION -# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION -# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE -# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME -# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE -# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE -/* fatal */ -# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY -/* fatal */ -# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK -# define SSL_ERROR_NONE 0 -# define SSL_ERROR_SSL 1 -# define SSL_ERROR_WANT_READ 2 -# define SSL_ERROR_WANT_WRITE 3 -# define SSL_ERROR_WANT_X509_LOOKUP 4 -# define SSL_ERROR_SYSCALL 5/* look at error stack/return - * value/errno */ -# define SSL_ERROR_ZERO_RETURN 6 -# define SSL_ERROR_WANT_CONNECT 7 -# define SSL_ERROR_WANT_ACCEPT 8 -# define SSL_CTRL_NEED_TMP_RSA 1 -# define SSL_CTRL_SET_TMP_RSA 2 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_RSA_CB 5 -# define SSL_CTRL_SET_TMP_DH_CB 6 -# define SSL_CTRL_SET_TMP_ECDH_CB 7 -# define SSL_CTRL_GET_SESSION_REUSED 8 -# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 -# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 -# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 -# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 -# define SSL_CTRL_GET_FLAGS 13 -# define SSL_CTRL_EXTRA_CHAIN_CERT 14 -# define SSL_CTRL_SET_MSG_CALLBACK 15 -# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 -/* only applies to datagram connections */ -# define SSL_CTRL_SET_MTU 17 -/* Stats */ -# define SSL_CTRL_SESS_NUMBER 20 -# define SSL_CTRL_SESS_CONNECT 21 -# define SSL_CTRL_SESS_CONNECT_GOOD 22 -# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 -# define SSL_CTRL_SESS_ACCEPT 24 -# define SSL_CTRL_SESS_ACCEPT_GOOD 25 -# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 -# define SSL_CTRL_SESS_HIT 27 -# define SSL_CTRL_SESS_CB_HIT 28 -# define SSL_CTRL_SESS_MISSES 29 -# define SSL_CTRL_SESS_TIMEOUTS 30 -# define SSL_CTRL_SESS_CACHE_FULL 31 -# define SSL_CTRL_OPTIONS 32 -# define SSL_CTRL_MODE 33 -# define SSL_CTRL_GET_READ_AHEAD 40 -# define SSL_CTRL_SET_READ_AHEAD 41 -# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 -# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 -# define SSL_CTRL_SET_SESS_CACHE_MODE 44 -# define SSL_CTRL_GET_SESS_CACHE_MODE 45 -# define SSL_CTRL_GET_MAX_CERT_LIST 50 -# define SSL_CTRL_SET_MAX_CERT_LIST 51 -# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 -/* see tls1.h for macros based on these */ -# ifndef OPENSSL_NO_TLSEXT -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 -# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 -# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 -# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 -# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 -# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 -# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 -# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 -# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 -# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 -# define SSL_CTRL_SET_SRP_ARG 78 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 -# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 -# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif -# endif /* OPENSSL_NO_TLSEXT */ -# define DTLS_CTRL_GET_TIMEOUT 73 -# define DTLS_CTRL_HANDLE_TIMEOUT 74 -# define DTLS_CTRL_LISTEN 75 -# define SSL_CTRL_GET_RI_SUPPORT 76 -# define SSL_CTRL_CLEAR_OPTIONS 77 -# define SSL_CTRL_CLEAR_MODE 78 -# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 -# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 -# define SSL_CTRL_CHAIN 88 -# define SSL_CTRL_CHAIN_CERT 89 -# define SSL_CTRL_GET_CURVES 90 -# define SSL_CTRL_SET_CURVES 91 -# define SSL_CTRL_SET_CURVES_LIST 92 -# define SSL_CTRL_GET_SHARED_CURVE 93 -# define SSL_CTRL_SET_ECDH_AUTO 94 -# define SSL_CTRL_SET_SIGALGS 97 -# define SSL_CTRL_SET_SIGALGS_LIST 98 -# define SSL_CTRL_CERT_FLAGS 99 -# define SSL_CTRL_CLEAR_CERT_FLAGS 100 -# define SSL_CTRL_SET_CLIENT_SIGALGS 101 -# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 -# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 -# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 -# define SSL_CTRL_BUILD_CERT_CHAIN 105 -# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 -# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 -# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 -# define SSL_CTRL_GET_SERVER_TMP_KEY 109 -# define SSL_CTRL_GET_RAW_CIPHERLIST 110 -# define SSL_CTRL_GET_EC_POINT_FORMATS 111 -# define SSL_CTRL_GET_CHAIN_CERTS 115 -# define SSL_CTRL_SELECT_CURRENT_CERT 116 -# define SSL_CTRL_SET_CURRENT_CERT 117 -# define SSL_CTRL_CHECK_PROTO_VERSION 119 -# define DTLS_CTRL_SET_LINK_MTU 120 -# define DTLS_CTRL_GET_LINK_MIN_MTU 121 -# define SSL_CERT_SET_FIRST 1 -# define SSL_CERT_SET_NEXT 2 -# define SSL_CERT_SET_SERVER 3 -# define DTLSv1_get_timeout(ssl, arg) \ - SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) -# define DTLSv1_handle_timeout(ssl) \ - SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) -# define DTLSv1_listen(ssl, peer) \ - SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer) -# define SSL_session_reused(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL) -# define SSL_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_clear_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_total_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_need_tmp_RSA(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL) -# define SSL_CTX_set_tmp_rsa(ctx,rsa) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) -# define SSL_need_tmp_RSA(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL) -# define SSL_set_tmp_rsa(ssl,rsa) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) -# define SSL_set_tmp_dh(ssl,dh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) -# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) -# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) -# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) -# define SSL_CTX_clear_extra_chain_certs(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) -# define SSL_CTX_set0_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) -# define SSL_CTX_set1_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) -# define SSL_CTX_add0_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) -# define SSL_CTX_add1_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) -# define SSL_CTX_get0_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_CTX_clear_chain_certs(ctx) \ - SSL_CTX_set0_chain(ctx,NULL) -# define SSL_CTX_build_cert_chain(ctx, flags) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_CTX_select_current_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) -# define SSL_CTX_set_current_cert(ctx, op) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_CTX_set0_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) -# define SSL_CTX_set1_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) -# define SSL_CTX_set0_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) -# define SSL_CTX_set1_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) -# define SSL_set0_chain(ctx,sk) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) -# define SSL_set1_chain(ctx,sk) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) -# define SSL_add0_chain_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) -# define SSL_add1_chain_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) -# define SSL_get0_chain_certs(ctx,px509) \ - SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_clear_chain_certs(ctx) \ - SSL_set0_chain(ctx,NULL) -# define SSL_build_cert_chain(s, flags) \ - SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_select_current_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) -# define SSL_set_current_cert(ctx,op) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_set0_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) -# define SSL_set1_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) -# define SSL_set0_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) -# define SSL_set1_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) -# define SSL_get1_curves(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s) -# define SSL_CTX_set1_curves(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) -# define SSL_CTX_set1_curves_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) -# define SSL_set1_curves(ctx, clist, clistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) -# define SSL_set1_curves_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) -# define SSL_get_shared_curve(s, n) \ - SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL) -# define SSL_CTX_set_ecdh_auto(ctx, onoff) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) -# define SSL_set_ecdh_auto(s, onoff) \ - SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) -# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) -# define SSL_CTX_set1_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) -# define SSL_set1_sigalgs(ctx, slist, slistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) -# define SSL_set1_sigalgs_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) -# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist) -# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) -# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist) -# define SSL_set1_client_sigalgs_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) -# define SSL_get0_certificate_types(s, clist) \ - SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist) -# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) -# define SSL_set1_client_certificate_types(s, clist, clistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) -# define SSL_get_peer_signature_nid(s, pn) \ - SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) -# define SSL_get_server_tmp_key(s, pk) \ - SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk) -# define SSL_get0_raw_cipherlist(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst) -# define SSL_get0_ec_point_formats(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst) -# ifndef OPENSSL_NO_BIO -BIO_METHOD *BIO_f_ssl(void); -BIO *BIO_new_ssl(SSL_CTX *ctx, int client); -BIO *BIO_new_ssl_connect(SSL_CTX *ctx); -BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); -int BIO_ssl_copy_session_id(BIO *to, BIO *from); -void BIO_ssl_shutdown(BIO *ssl_bio); - -# endif - -int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); -SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); -void SSL_CTX_free(SSL_CTX *); -long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); -long SSL_CTX_get_timeout(const SSL_CTX *ctx); -X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); -void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); -int SSL_want(const SSL *s); -int SSL_clear(SSL *s); - -void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); - -const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); -int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); -char *SSL_CIPHER_get_version(const SSL_CIPHER *c); -const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); -unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c); - -int SSL_get_fd(const SSL *s); -int SSL_get_rfd(const SSL *s); -int SSL_get_wfd(const SSL *s); -const char *SSL_get_cipher_list(const SSL *s, int n); -char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); -int SSL_get_read_ahead(const SSL *s); -int SSL_pending(const SSL *s); -# ifndef OPENSSL_NO_SOCK -int SSL_set_fd(SSL *s, int fd); -int SSL_set_rfd(SSL *s, int fd); -int SSL_set_wfd(SSL *s, int fd); -# endif -# ifndef OPENSSL_NO_BIO -void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); -BIO *SSL_get_rbio(const SSL *s); -BIO *SSL_get_wbio(const SSL *s); -# endif -int SSL_set_cipher_list(SSL *s, const char *str); -void SSL_set_read_ahead(SSL *s, int yes); -int SSL_get_verify_mode(const SSL *s); -int SSL_get_verify_depth(const SSL *s); -int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *); -void SSL_set_verify(SSL *s, int mode, - int (*callback) (int ok, X509_STORE_CTX *ctx)); -void SSL_set_verify_depth(SSL *s, int depth); -void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -# endif -int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); -int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); -int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, - long len); -int SSL_use_certificate(SSL *ssl, X509 *x); -int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); - -# ifndef OPENSSL_NO_TLSEXT -/* Set serverinfo data for the current active cert. */ -int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, - size_t serverinfo_length); -# ifndef OPENSSL_NO_STDIO -int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); -# endif /* NO_STDIO */ - -# endif - -# ifndef OPENSSL_NO_STDIO -int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); -int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); -int SSL_use_certificate_file(SSL *ssl, const char *file, int type); -int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); -int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); -int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); -/* PEM type */ -int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); -STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); -int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *file); -# ifndef OPENSSL_SYS_VMS -/* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */ -# ifndef OPENSSL_SYS_MACINTOSH_CLASSIC -int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *dir); -# endif -# endif - -# endif - -void SSL_load_error_strings(void); -const char *SSL_state_string(const SSL *s); -const char *SSL_rstate_string(const SSL *s); -const char *SSL_state_string_long(const SSL *s); -const char *SSL_rstate_string_long(const SSL *s); -long SSL_SESSION_get_time(const SSL_SESSION *s); -long SSL_SESSION_set_time(SSL_SESSION *s, long t); -long SSL_SESSION_get_timeout(const SSL_SESSION *s); -long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); -void SSL_copy_session_id(SSL *to, const SSL *from); -X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); -int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -SSL_SESSION *SSL_SESSION_new(void); -const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, - unsigned int *len); -unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); -# ifndef OPENSSL_NO_FP_API -int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); -# endif -# ifndef OPENSSL_NO_BIO -int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); -# endif -void SSL_SESSION_free(SSL_SESSION *ses); -int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); -int SSL_set_session(SSL *to, SSL_SESSION *session); -int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); -int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); -int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); -int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); -int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, - unsigned int id_len); -SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, - long length); - -# ifdef HEADER_X509_H -X509 *SSL_get_peer_certificate(const SSL *s); -# endif - -STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); - -int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); -int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); -int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, - X509_STORE_CTX *); -void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, - int (*callback) (int, X509_STORE_CTX *)); -void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); -void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, - int (*cb) (X509_STORE_CTX *, void *), - void *arg); -void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), - void *arg); -# ifndef OPENSSL_NO_RSA -int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); -# endif -int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, - long len); -int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); -int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, - const unsigned char *d, long len); -int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); -int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, - const unsigned char *d); - -void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); -void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); - -int SSL_CTX_check_private_key(const SSL_CTX *ctx); -int SSL_check_private_key(const SSL *ctx); - -int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -SSL *SSL_new(SSL_CTX *ctx); -int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); -int SSL_set_purpose(SSL *s, int purpose); -int SSL_CTX_set_trust(SSL_CTX *s, int trust); -int SSL_set_trust(SSL *s, int trust); - -int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); -int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); - -X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); -X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); - -# ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); -int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, - char *(*cb) (SSL *, void *)); -int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, - int (*cb) (SSL *, void *)); -int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, - int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); - -int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, - BIGNUM *sa, BIGNUM *v, char *info); -int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, - const char *grp); - -BIGNUM *SSL_get_srp_g(SSL *s); -BIGNUM *SSL_get_srp_N(SSL *s); - -char *SSL_get_srp_username(SSL *s); -char *SSL_get_srp_userinfo(SSL *s); -# endif - -void SSL_certs_clear(SSL *s); -void SSL_free(SSL *ssl); -int SSL_accept(SSL *ssl); -int SSL_connect(SSL *ssl); -int SSL_read(SSL *ssl, void *buf, int num); -int SSL_peek(SSL *ssl, void *buf, int num); -int SSL_write(SSL *ssl, const void *buf, int num); -long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); -long SSL_callback_ctrl(SSL *, int, void (*)(void)); -long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); -long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); - -int SSL_get_error(const SSL *s, int ret_code); -const char *SSL_get_version(const SSL *s); - -/* This sets the 'default' SSL version that SSL_new() will create */ -int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); - -# ifndef OPENSSL_NO_SSL2_METHOD -const SSL_METHOD *SSLv2_method(void); /* SSLv2 */ -const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ -const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ -# endif - -# ifndef OPENSSL_NO_SSL3_METHOD -const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ -const SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ -const SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ -# endif - -const SSL_METHOD *SSLv23_method(void); /* Negotiate highest available SSL/TLS - * version */ -const SSL_METHOD *SSLv23_server_method(void); /* Negotiate highest available - * SSL/TLS version */ -const SSL_METHOD *SSLv23_client_method(void); /* Negotiate highest available - * SSL/TLS version */ - -const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ -const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ -const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ - -const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ -const SSL_METHOD *TLSv1_1_server_method(void); /* TLSv1.1 */ -const SSL_METHOD *TLSv1_1_client_method(void); /* TLSv1.1 */ - -const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ -const SSL_METHOD *TLSv1_2_server_method(void); /* TLSv1.2 */ -const SSL_METHOD *TLSv1_2_client_method(void); /* TLSv1.2 */ - -const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ -const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ -const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */ - -const SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */ -const SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */ -const SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */ - -const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ -const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ -const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ - -STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); - -int SSL_do_handshake(SSL *s); -int SSL_renegotiate(SSL *s); -int SSL_renegotiate_abbreviated(SSL *s); -int SSL_renegotiate_pending(SSL *s); -int SSL_shutdown(SSL *s); - -const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); -const SSL_METHOD *SSL_get_ssl_method(SSL *s); -int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); -const char *SSL_alert_type_string_long(int value); -const char *SSL_alert_type_string(int value); -const char *SSL_alert_desc_string_long(int value); -const char *SSL_alert_desc_string(int value); - -void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); -void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); -STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); -STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); -int SSL_add_client_CA(SSL *ssl, X509 *x); -int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); - -void SSL_set_connect_state(SSL *s); -void SSL_set_accept_state(SSL *s); - -long SSL_get_default_timeout(const SSL *s); - -int SSL_library_init(void); - -char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); -STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); - -SSL *SSL_dup(SSL *ssl); - -X509 *SSL_get_certificate(const SSL *ssl); -/* - * EVP_PKEY - */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); - -X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); -EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); - -void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); -int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); -void SSL_set_quiet_shutdown(SSL *ssl, int mode); -int SSL_get_quiet_shutdown(const SSL *ssl); -void SSL_set_shutdown(SSL *ssl, int mode); -int SSL_get_shutdown(const SSL *ssl); -int SSL_version(const SSL *ssl); -int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); -int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); -# define SSL_get0_session SSL_get_session/* just peek at pointer */ -SSL_SESSION *SSL_get_session(const SSL *ssl); -SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ -SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); -SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); -void SSL_set_info_callback(SSL *ssl, - void (*cb) (const SSL *ssl, int type, int val)); -void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, - int val); -int SSL_state(const SSL *ssl); -void SSL_set_state(SSL *ssl, int state); - -void SSL_set_verify_result(SSL *ssl, long v); -long SSL_get_verify_result(const SSL *ssl); - -int SSL_set_ex_data(SSL *ssl, int idx, void *data); -void *SSL_get_ex_data(const SSL *ssl, int idx); -int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); - -int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); -void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); -int SSL_SESSION_get_ex_new_index(long argl, void *argp, - CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); - -int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); -void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); -int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); - -int SSL_get_ex_data_X509_STORE_CTX_idx(void); - -# define SSL_CTX_sess_set_cache_size(ctx,t) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) -# define SSL_CTX_sess_get_cache_size(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) -# define SSL_CTX_set_session_cache_mode(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) -# define SSL_CTX_get_session_cache_mode(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) - -# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) -# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) -# define SSL_CTX_get_read_ahead(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) -# define SSL_CTX_set_read_ahead(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) -# define SSL_CTX_get_max_cert_list(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) -# define SSL_CTX_set_max_cert_list(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) -# define SSL_get_max_cert_list(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) -# define SSL_set_max_cert_list(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) - -# define SSL_CTX_set_max_send_fragment(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) -# define SSL_set_max_send_fragment(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) - - /* NB: the keylength is only applicable when is_export is true */ -# ifndef OPENSSL_NO_RSA -void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, - RSA *(*cb) (SSL *ssl, int is_export, - int keylength)); - -void SSL_set_tmp_rsa_callback(SSL *ssl, - RSA *(*cb) (SSL *ssl, int is_export, - int keylength)); -# endif -# ifndef OPENSSL_NO_DH -void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -void SSL_set_tmp_dh_callback(SSL *ssl, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -# endif -# ifndef OPENSSL_NO_ECDH -void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, - EC_KEY *(*ecdh) (SSL *ssl, int is_export, - int keylength)); -void SSL_set_tmp_ecdh_callback(SSL *ssl, - EC_KEY *(*ecdh) (SSL *ssl, int is_export, - int keylength)); -# endif - -const COMP_METHOD *SSL_get_current_compression(SSL *s); -const COMP_METHOD *SSL_get_current_expansion(SSL *s); -const char *SSL_COMP_get_name(const COMP_METHOD *comp); -STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); -STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) - *meths); -void SSL_COMP_free_compression_methods(void); -int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); - -const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); - -/* TLS extensions functions */ -int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); - -int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, - void *arg); - -/* Pre-shared secret session resumption functions */ -int SSL_set_session_secret_cb(SSL *s, - tls_session_secret_cb_fn tls_session_secret_cb, - void *arg); - -void SSL_set_debug(SSL *s, int debug); -int SSL_cache_hit(SSL *s); -int SSL_is_server(SSL *s); - -SSL_CONF_CTX *SSL_CONF_CTX_new(void); -int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); -void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); -unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); -unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); -int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); - -void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); -void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); - -int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); -int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); -int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); - -# ifndef OPENSSL_NO_SSL_TRACE -void SSL_trace(int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); -const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); -# endif - -# ifndef OPENSSL_NO_UNIT_TEST -const struct openssl_ssl_test_functions *SSL_test_functions(void); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_SSL_strings(void); - -/* Error codes for the SSL functions. */ - -/* Function codes. */ -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CLIENT_CERTIFICATE 100 -# define SSL_F_CLIENT_FINISHED 167 -# define SSL_F_CLIENT_HELLO 101 -# define SSL_F_CLIENT_MASTER_KEY 102 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_ACCEPT 246 -# define SSL_F_DTLS1_ADD_CERT_TO_BUF 295 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 316 -# define SSL_F_DTLS1_CLIENT_HELLO 248 -# define SSL_F_DTLS1_CONNECT 249 -# define SSL_F_DTLS1_ENC 250 -# define SSL_F_DTLS1_GET_HELLO_VERIFY 251 -# define SSL_F_DTLS1_GET_MESSAGE 252 -# define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT 253 -# define SSL_F_DTLS1_GET_RECORD 254 -# define SSL_F_DTLS1_HANDLE_TIMEOUT 297 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 259 -# define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST 260 -# define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE 261 -# define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE 262 -# define SSL_F_DTLS1_SEND_CLIENT_VERIFY 263 -# define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST 264 -# define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE 265 -# define SSL_F_DTLS1_SEND_SERVER_HELLO 266 -# define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE 267 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_GET_CLIENT_FINISHED 105 -# define SSL_F_GET_CLIENT_HELLO 106 -# define SSL_F_GET_CLIENT_MASTER_KEY 107 -# define SSL_F_GET_SERVER_FINISHED 108 -# define SSL_F_GET_SERVER_HELLO 109 -# define SSL_F_GET_SERVER_STATIC_DH_KEY 340 -# define SSL_F_GET_SERVER_VERIFY 110 -# define SSL_F_I2D_SSL_SESSION 111 -# define SSL_F_READ_N 112 -# define SSL_F_REQUEST_CERTIFICATE 113 -# define SSL_F_SERVER_FINISH 239 -# define SSL_F_SERVER_HELLO 114 -# define SSL_F_SERVER_VERIFY 240 -# define SSL_F_SSL23_ACCEPT 115 -# define SSL_F_SSL23_CLIENT_HELLO 116 -# define SSL_F_SSL23_CONNECT 117 -# define SSL_F_SSL23_GET_CLIENT_HELLO 118 -# define SSL_F_SSL23_GET_SERVER_HELLO 119 -# define SSL_F_SSL23_PEEK 237 -# define SSL_F_SSL23_READ 120 -# define SSL_F_SSL23_WRITE 121 -# define SSL_F_SSL2_ACCEPT 122 -# define SSL_F_SSL2_CONNECT 123 -# define SSL_F_SSL2_ENC_INIT 124 -# define SSL_F_SSL2_GENERATE_KEY_MATERIAL 241 -# define SSL_F_SSL2_PEEK 234 -# define SSL_F_SSL2_READ 125 -# define SSL_F_SSL2_READ_INTERNAL 236 -# define SSL_F_SSL2_SET_CERTIFICATE 126 -# define SSL_F_SSL2_WRITE 127 -# define SSL_F_SSL3_ACCEPT 128 -# define SSL_F_SSL3_ADD_CERT_TO_BUF 296 -# define SSL_F_SSL3_CALLBACK_CTRL 233 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CHECK_CLIENT_HELLO 304 -# define SSL_F_SSL3_CHECK_FINISHED 339 -# define SSL_F_SSL3_CLIENT_HELLO 131 -# define SSL_F_SSL3_CONNECT 132 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 134 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 -# define SSL_F_SSL3_GET_CERT_STATUS 289 -# define SSL_F_SSL3_GET_CERT_VERIFY 136 -# define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137 -# define SSL_F_SSL3_GET_CLIENT_HELLO 138 -# define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139 -# define SSL_F_SSL3_GET_FINISHED 140 -# define SSL_F_SSL3_GET_KEY_EXCHANGE 141 -# define SSL_F_SSL3_GET_MESSAGE 142 -# define SSL_F_SSL3_GET_NEW_SESSION_TICKET 283 -# define SSL_F_SSL3_GET_NEXT_PROTO 306 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144 -# define SSL_F_SSL3_GET_SERVER_DONE 145 -# define SSL_F_SSL3_GET_SERVER_HELLO 146 -# define SSL_F_SSL3_HANDSHAKE_MAC 285 -# define SSL_F_SSL3_NEW_SESSION_TICKET 287 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_PEEK 235 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150 -# define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151 -# define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152 -# define SSL_F_SSL3_SEND_CLIENT_VERIFY 153 -# define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154 -# define SSL_F_SSL3_SEND_SERVER_HELLO 242 -# define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 318 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_INST 222 -# define SSL_F_SSL_CERT_INSTANTIATE 214 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_PURPOSE 226 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TRUST 229 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SERVER_SEND_CERT 182 -# define SSL_F_SSL_GET_SERVER_SEND_PKEY 317 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT 281 -# define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT 282 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187 -# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SESS_CERT_NEW 225 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_PURPOSE 227 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TRUST 228 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_UNDEFINED_CONST_FUNCTION 243 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS1_CERT_VERIFY_MAC 286 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274 -# define SSL_F_TLS1_ENC 210 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_HEARTBEAT 315 -# define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275 -# define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_WRITE_PENDING 212 - -/* Reason codes. */ -# define SSL_R_APP_DATA_IN_HANDSHAKE 100 -# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_BAD_ALERT_RECORD 101 -# define SSL_R_BAD_AUTHENTICATION_TYPE 102 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_CHECKSUM 104 -# define SSL_R_BAD_DATA 390 -# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 -# define SSL_R_BAD_DECOMPRESSION 107 -# define SSL_R_BAD_DH_G_LENGTH 108 -# define SSL_R_BAD_DH_G_VALUE 375 -# define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 -# define SSL_R_BAD_DH_PUB_KEY_VALUE 393 -# define SSL_R_BAD_DH_P_LENGTH 110 -# define SSL_R_BAD_DH_P_VALUE 395 -# define SSL_R_BAD_DIGEST_LENGTH 111 -# define SSL_R_BAD_DSA_SIGNATURE 112 -# define SSL_R_BAD_ECC_CERT 304 -# define SSL_R_BAD_ECDSA_SIGNATURE 305 -# define SSL_R_BAD_ECPOINT 306 -# define SSL_R_BAD_HANDSHAKE_LENGTH 332 -# define SSL_R_BAD_HELLO_REQUEST 105 -# define SSL_R_BAD_LENGTH 271 -# define SSL_R_BAD_MAC_DECODE 113 -# define SSL_R_BAD_MAC_LENGTH 333 -# define SSL_R_BAD_MESSAGE_TYPE 114 -# define SSL_R_BAD_PACKET_LENGTH 115 -# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 -# define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 316 -# define SSL_R_BAD_RESPONSE_ARGUMENT 117 -# define SSL_R_BAD_RSA_DECRYPT 118 -# define SSL_R_BAD_RSA_ENCRYPT 119 -# define SSL_R_BAD_RSA_E_LENGTH 120 -# define SSL_R_BAD_RSA_MODULUS_LENGTH 121 -# define SSL_R_BAD_RSA_SIGNATURE 122 -# define SSL_R_BAD_SIGNATURE 123 -# define SSL_R_BAD_SRP_A_LENGTH 347 -# define SSL_R_BAD_SRP_B_LENGTH 348 -# define SSL_R_BAD_SRP_G_LENGTH 349 -# define SSL_R_BAD_SRP_N_LENGTH 350 -# define SSL_R_BAD_SRP_PARAMETERS 371 -# define SSL_R_BAD_SRP_S_LENGTH 351 -# define SSL_R_BAD_SRTP_MKI_VALUE 352 -# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 -# define SSL_R_BAD_SSL_FILETYPE 124 -# define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125 -# define SSL_R_BAD_STATE 126 -# define SSL_R_BAD_VALUE 384 -# define SSL_R_BAD_WRITE_RETRY 127 -# define SSL_R_BIO_NOT_SET 128 -# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 -# define SSL_R_BN_LIB 130 -# define SSL_R_CA_DN_LENGTH_MISMATCH 131 -# define SSL_R_CA_DN_TOO_LONG 132 -# define SSL_R_CCS_RECEIVED_EARLY 133 -# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 -# define SSL_R_CERT_CB_ERROR 377 -# define SSL_R_CERT_LENGTH_MISMATCH 135 -# define SSL_R_CHALLENGE_IS_DIFFERENT 136 -# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 -# define SSL_R_CIPHER_TABLE_SRC_ERROR 139 -# define SSL_R_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_ID_IS_DIFFERENT 143 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_COOKIE_MISMATCH 308 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 372 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT 317 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322 -# define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 -# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS 355 -# define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION 356 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_PADDING 283 -# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 -# define SSL_R_INAPPROPRIATE_FALLBACK 373 -# define SSL_R_INCONSISTENT_COMPRESSION 340 -# define SSL_R_INVALID_CHALLENGE_LENGTH 158 -# define SSL_R_INVALID_COMMAND 280 -# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 -# define SSL_R_INVALID_NULL_CMD_NAME 385 -# define SSL_R_INVALID_PURPOSE 278 -# define SSL_R_INVALID_SERVERINFO_DATA 388 -# define SSL_R_INVALID_SRP_USERNAME 357 -# define SSL_R_INVALID_STATUS_RESPONSE 328 -# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 -# define SSL_R_INVALID_TRUST 279 -# define SSL_R_KEY_ARG_TOO_LONG 284 -# define SSL_R_KRB5 285 -# define SSL_R_KRB5_C_CC_PRINC 286 -# define SSL_R_KRB5_C_GET_CRED 287 -# define SSL_R_KRB5_C_INIT 288 -# define SSL_R_KRB5_C_MK_REQ 289 -# define SSL_R_KRB5_S_BAD_TICKET 290 -# define SSL_R_KRB5_S_INIT 291 -# define SSL_R_KRB5_S_RD_REQ 292 -# define SSL_R_KRB5_S_TKT_EXPIRED 293 -# define SSL_R_KRB5_S_TKT_NYV 294 -# define SSL_R_KRB5_S_TKT_SKEW 295 -# define SSL_R_LENGTH_MISMATCH 159 -# define SSL_R_LENGTH_TOO_SHORT 160 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MESSAGE_TOO_LONG 296 -# define SSL_R_MISSING_DH_DSA_CERT 162 -# define SSL_R_MISSING_DH_KEY 163 -# define SSL_R_MISSING_DH_RSA_CERT 164 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDH_CERT 382 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166 -# define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167 -# define SSL_R_MISSING_RSA_CERTIFICATE 168 -# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 -# define SSL_R_MISSING_RSA_SIGNING_CERT 170 -# define SSL_R_MISSING_SRP_PARAM 358 -# define SSL_R_MISSING_TMP_DH_KEY 171 -# define SSL_R_MISSING_TMP_ECDH_KEY 311 -# define SSL_R_MISSING_TMP_RSA_KEY 172 -# define SSL_R_MISSING_TMP_RSA_PKEY 173 -# define SSL_R_MISSING_VERIFY_MESSAGE 174 -# define SSL_R_MULTIPLE_SGC_RESTARTS 346 -# define SSL_R_NON_SSLV2_INITIAL_PACKET 175 -# define SSL_R_NO_CERTIFICATES_RETURNED 176 -# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 -# define SSL_R_NO_CERTIFICATE_RETURNED 178 -# define SSL_R_NO_CERTIFICATE_SET 179 -# define SSL_R_NO_CERTIFICATE_SPECIFIED 180 -# define SSL_R_NO_CIPHERS_AVAILABLE 181 -# define SSL_R_NO_CIPHERS_PASSED 182 -# define SSL_R_NO_CIPHERS_SPECIFIED 183 -# define SSL_R_NO_CIPHER_LIST 184 -# define SSL_R_NO_CIPHER_MATCH 185 -# define SSL_R_NO_CLIENT_CERT_METHOD 331 -# define SSL_R_NO_CLIENT_CERT_RECEIVED 186 -# define SSL_R_NO_COMPRESSION_SPECIFIED 187 -# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 -# define SSL_R_NO_METHOD_SPECIFIED 188 -# define SSL_R_NO_PEM_EXTENSIONS 389 -# define SSL_R_NO_PRIVATEKEY 189 -# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 -# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 -# define SSL_R_NO_PUBLICKEY 192 -# define SSL_R_NO_RENEGOTIATION 339 -# define SSL_R_NO_REQUIRED_DIGEST 324 -# define SSL_R_NO_SHARED_CIPHER 193 -# define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS 376 -# define SSL_R_NO_SRTP_PROFILES 359 -# define SSL_R_NO_VERIFY_CALLBACK 194 -# define SSL_R_NULL_SSL_CTX 195 -# define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 -# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 -# define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 387 -# define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 379 -# define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 -# define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 -# define SSL_R_PACKET_LENGTH_TOO_LONG 198 -# define SSL_R_PARSE_TLSEXT 227 -# define SSL_R_PATH_TOO_LONG 270 -# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 -# define SSL_R_PEER_ERROR 200 -# define SSL_R_PEER_ERROR_CERTIFICATE 201 -# define SSL_R_PEER_ERROR_NO_CERTIFICATE 202 -# define SSL_R_PEER_ERROR_NO_CIPHER 203 -# define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204 -# define SSL_R_PEM_NAME_BAD_PREFIX 391 -# define SSL_R_PEM_NAME_TOO_SHORT 392 -# define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205 -# define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206 -# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 -# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 -# define SSL_R_PSK_NO_CLIENT_CB 224 -# define SSL_R_PSK_NO_SERVER_CB 225 -# define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 208 -# define SSL_R_PUBLIC_KEY_IS_NOT_RSA 209 -# define SSL_R_PUBLIC_KEY_NOT_RSA 210 -# define SSL_R_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_READ_WRONG_PACKET_TYPE 212 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_LARGE 214 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_REQUIRED_CIPHER_MISSING 215 -# define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING 342 -# define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 216 -# define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 217 -# define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 218 -# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 -# define SSL_R_SERVERHELLO_TLSEXT 275 -# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 -# define SSL_R_SHORT_READ 219 -# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 -# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 -# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 -# define SSL_R_SRP_A_CALC 361 -# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 -# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 -# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 -# define SSL_R_SSL23_DOING_SESSION_ID_REUSE 221 -# define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 299 -# define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 321 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 -# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 -# define SSL_R_SSL3_SESSION_ID_TOO_SHORT 222 -# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 -# define SSL_R_SSL_HANDSHAKE_FAILURE 229 -# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 -# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 -# define SSL_R_SSL_SESSION_ID_CONFLICT 302 -# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 -# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 -# define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 231 -# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 -# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 -# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 232 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 -# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 -# define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 -# define SSL_R_TOO_MANY_WARN_ALERTS 409 -# define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 -# define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 -# define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 -# define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 237 -# define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 238 -# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 -# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 -# define SSL_R_UNABLE_TO_FIND_SSL_METHOD 240 -# define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 241 -# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 -# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 -# define SSL_R_UNEXPECTED_MESSAGE 244 -# define SSL_R_UNEXPECTED_RECORD 245 -# define SSL_R_UNINITIALIZED 276 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 253 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSUPPORTED_CIPHER 256 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_DIGEST_TYPE 326 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_WRITE_BIO_NOT_SET 260 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_MESSAGE_TYPE 262 -# define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ssl2.h b/ext/openssl/windows/x86/include/openssl/ssl2.h deleted file mode 100644 index 03c7dd8c..00000000 --- a/ext/openssl/windows/x86/include/openssl/ssl2.h +++ /dev/null @@ -1,265 +0,0 @@ -/* ssl/ssl2.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Protocol Version Codes */ -# define SSL2_VERSION 0x0002 -# define SSL2_VERSION_MAJOR 0x00 -# define SSL2_VERSION_MINOR 0x02 -/* #define SSL2_CLIENT_VERSION 0x0002 */ -/* #define SSL2_SERVER_VERSION 0x0002 */ - -/* Protocol Message Codes */ -# define SSL2_MT_ERROR 0 -# define SSL2_MT_CLIENT_HELLO 1 -# define SSL2_MT_CLIENT_MASTER_KEY 2 -# define SSL2_MT_CLIENT_FINISHED 3 -# define SSL2_MT_SERVER_HELLO 4 -# define SSL2_MT_SERVER_VERIFY 5 -# define SSL2_MT_SERVER_FINISHED 6 -# define SSL2_MT_REQUEST_CERTIFICATE 7 -# define SSL2_MT_CLIENT_CERTIFICATE 8 - -/* Error Message Codes */ -# define SSL2_PE_UNDEFINED_ERROR 0x0000 -# define SSL2_PE_NO_CIPHER 0x0001 -# define SSL2_PE_NO_CERTIFICATE 0x0002 -# define SSL2_PE_BAD_CERTIFICATE 0x0004 -# define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 - -/* Cipher Kind Values */ -# define SSL2_CK_NULL_WITH_MD5 0x02000000/* v3 */ -# define SSL2_CK_RC4_128_WITH_MD5 0x02010080 -# define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080 -# define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080 -# define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080 -# define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080 -# define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040 -# define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140/* v3 */ -# define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0 -# define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0/* v3 */ -# define SSL2_CK_RC4_64_WITH_MD5 0x02080080/* MS hack */ - -# define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800/* SSLeay */ -# define SSL2_CK_NULL 0x02ff0810/* SSLeay */ - -# define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1" -# define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5" -# define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5" -# define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5" -# define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5" -# define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5" -# define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5" -# define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5" -# define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA" -# define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5" -# define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA" -# define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5" - -# define SSL2_TXT_NULL "NULL" - -/* Flags for the SSL_CIPHER.algorithm2 field */ -# define SSL2_CF_5_BYTE_ENC 0x01 -# define SSL2_CF_8_BYTE_ENC 0x02 - -/* Certificate Type Codes */ -# define SSL2_CT_X509_CERTIFICATE 0x01 - -/* Authentication Type Code */ -# define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01 - -# define SSL2_MAX_SSL_SESSION_ID_LENGTH 32 - -/* Upper/Lower Bounds */ -# define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256 -# ifdef OPENSSL_SYS_MPE -# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u -# else -# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u - /* 2^15-1 */ -# endif -# define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383/* 2^14-1 */ - -# define SSL2_CHALLENGE_LENGTH 16 -/* - * #define SSL2_CHALLENGE_LENGTH 32 - */ -# define SSL2_MIN_CHALLENGE_LENGTH 16 -# define SSL2_MAX_CHALLENGE_LENGTH 32 -# define SSL2_CONNECTION_ID_LENGTH 16 -# define SSL2_MAX_CONNECTION_ID_LENGTH 16 -# define SSL2_SSL_SESSION_ID_LENGTH 16 -# define SSL2_MAX_CERT_CHALLENGE_LENGTH 32 -# define SSL2_MIN_CERT_CHALLENGE_LENGTH 16 -# define SSL2_MAX_KEY_MATERIAL_LENGTH 24 - -# ifndef HEADER_SSL_LOCL_H -# define CERT char -# endif - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct ssl2_state_st { - int three_byte_header; - int clear_text; /* clear text */ - int escape; /* not used in SSLv2 */ - int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */ - /* - * non-blocking io info, used to make sure the same args were passwd - */ - unsigned int wnum; /* number of bytes sent so far */ - int wpend_tot; - const unsigned char *wpend_buf; - int wpend_off; /* offset to data to write */ - int wpend_len; /* number of bytes passwd to write */ - int wpend_ret; /* number of bytes to return to caller */ - /* buffer raw data */ - int rbuf_left; - int rbuf_offs; - unsigned char *rbuf; - unsigned char *wbuf; - unsigned char *write_ptr; /* used to point to the start due to 2/3 byte - * header. */ - unsigned int padding; - unsigned int rlength; /* passed to ssl2_enc */ - int ract_data_length; /* Set when things are encrypted. */ - unsigned int wlength; /* passed to ssl2_enc */ - int wact_data_length; /* Set when things are decrypted. */ - unsigned char *ract_data; - unsigned char *wact_data; - unsigned char *mac_data; - unsigned char *read_key; - unsigned char *write_key; - /* Stuff specifically to do with this SSL session */ - unsigned int challenge_length; - unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH]; - unsigned int conn_id_length; - unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH]; - unsigned int key_material_length; - unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2]; - unsigned long read_sequence; - unsigned long write_sequence; - struct { - unsigned int conn_id_length; - unsigned int cert_type; - unsigned int cert_length; - unsigned int csl; - unsigned int clear; - unsigned int enc; - unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH]; - unsigned int cipher_spec_length; - unsigned int session_id_length; - unsigned int clen; - unsigned int rlen; - } tmp; -} SSL2_STATE; - -# endif - -/* SSLv2 */ -/* client */ -# define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT) -# define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT) -# define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT) -/* server */ -# define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT) -# define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT) -# define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ssl23.h b/ext/openssl/windows/x86/include/openssl/ssl23.h deleted file mode 100644 index 9de4685a..00000000 --- a/ext/openssl/windows/x86/include/openssl/ssl23.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ssl/ssl23.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SSL23_H -# define HEADER_SSL23_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * client - */ -/* write to server */ -# define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) -# define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) -/* read from server */ -# define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) -# define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) - -/* server */ -/* read from client */ -# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) -# define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ssl3.h b/ext/openssl/windows/x86/include/openssl/ssl3.h deleted file mode 100644 index e681d50a..00000000 --- a/ext/openssl/windows/x86/include/openssl/ssl3.h +++ /dev/null @@ -1,774 +0,0 @@ -/* ssl/ssl3.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H - -# ifndef OPENSSL_NO_COMP -# include -# endif -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Signalling cipher suite value from RFC 5746 - * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - */ -# define SSL3_CK_SCSV 0x030000FF - -/* - * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 - * (TLS_FALLBACK_SCSV) - */ -# define SSL3_CK_FALLBACK_SCSV 0x03005600 - -# define SSL3_CK_RSA_NULL_MD5 0x03000001 -# define SSL3_CK_RSA_NULL_SHA 0x03000002 -# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 -# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 -# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 -# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 -# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 -# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 -# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 -# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A - -# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B -# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C -# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D -# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E -# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F -# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 - -# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011 -# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA -# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012 -# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA -# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013 -# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA -# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014 -# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA -# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015 -# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA -# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016 -# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA - -# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 -# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 -# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 -# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A -# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B - -# if 0 -# define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C -# define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D -# if 0 /* Because it clashes with KRB5, is never - * used any more, and is safe to remove - * according to David Hopwood - * of the - * ietf-tls list */ -# define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E -# endif -# endif - -/* - * VRS Additional Kerberos5 entries - */ -# define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E -# define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F -# define SSL3_CK_KRB5_RC4_128_SHA 0x03000020 -# define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021 -# define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022 -# define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023 -# define SSL3_CK_KRB5_RC4_128_MD5 0x03000024 -# define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025 - -# define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026 -# define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027 -# define SSL3_CK_KRB5_RC4_40_SHA 0x03000028 -# define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029 -# define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A -# define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B - -# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" -# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" -# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" -# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" -# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" -# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" - -# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" - -/* - * This next block of six "EDH" labels is for backward compatibility with - * older versions of OpenSSL. New code should use the six "DHE" labels above - * instead: - */ -# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" -# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" -# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" - -# if 0 -# define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA" -# define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA" -# define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA" -# endif - -# define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA" -# define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA" -# define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA" -# define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA" -# define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5" -# define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5" -# define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5" -# define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5" - -# define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA" -# define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA" -# define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA" -# define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5" -# define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5" -# define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5" - -# define SSL3_SSL_SESSION_ID_LENGTH 32 -# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 - -# define SSL3_MASTER_SECRET_SIZE 48 -# define SSL3_RANDOM_SIZE 32 -# define SSL3_SESSION_ID_SIZE 32 -# define SSL3_RT_HEADER_LENGTH 5 - -# define SSL3_HM_HEADER_LENGTH 4 - -# ifndef SSL3_ALIGN_PAYLOAD - /* - * Some will argue that this increases memory footprint, but it's not - * actually true. Point is that malloc has to return at least 64-bit aligned - * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. - * Suggested pre-gaping simply moves these wasted bytes from the end of - * allocated region to its front, but makes data payload aligned, which - * improves performance:-) - */ -# define SSL3_ALIGN_PAYLOAD 8 -# else -# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 -# error "insane SSL3_ALIGN_PAYLOAD" -# undef SSL3_ALIGN_PAYLOAD -# endif -# endif - -/* - * This is the maximum MAC (digest) size used by the SSL library. Currently - * maximum of 20 is used by SHA1, but we reserve for future extension for - * 512-bit hashes. - */ - -# define SSL3_RT_MAX_MD_SIZE 64 - -/* - * Maximum block size used in all ciphersuites. Currently 16 for AES. - */ - -# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 - -# define SSL3_RT_MAX_EXTRA (16384) - -/* Maximum plaintext length: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_PLAIN_LENGTH 16384 -/* Maximum compression overhead: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 - -/* - * The standards give a maximum encryption overhead of 1024 bytes. In - * practice the value is lower than this. The overhead is the maximum number - * of padding bytes (256) plus the mac size. - */ -# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) - -/* - * OpenSSL currently only uses a padding length of at most one block so the - * send overhead is smaller. - */ - -# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ - (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) - -/* If compression isn't used don't include the compression overhead */ - -# ifdef OPENSSL_NO_COMP -# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH -# else -# define SSL3_RT_MAX_COMPRESSED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) -# endif -# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) -# define SSL3_RT_MAX_PACKET_SIZE \ - (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) - -# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" -# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" - -# define SSL3_VERSION 0x0300 -# define SSL3_VERSION_MAJOR 0x03 -# define SSL3_VERSION_MINOR 0x00 - -# define SSL3_RT_CHANGE_CIPHER_SPEC 20 -# define SSL3_RT_ALERT 21 -# define SSL3_RT_HANDSHAKE 22 -# define SSL3_RT_APPLICATION_DATA 23 -# define TLS1_RT_HEARTBEAT 24 - -/* Pseudo content types to indicate additional parameters */ -# define TLS1_RT_CRYPTO 0x1000 -# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) -# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) -# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) -# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) - -# define TLS1_RT_CRYPTO_READ 0x0000 -# define TLS1_RT_CRYPTO_WRITE 0x0100 -# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) -# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) -# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) -# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) - -/* Pseudo content type for SSL/TLS header info */ -# define SSL3_RT_HEADER 0x100 - -# define SSL3_AL_WARNING 1 -# define SSL3_AL_FATAL 2 - -# define SSL3_AD_CLOSE_NOTIFY 0 -# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ -# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ -# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ -# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ -# define SSL3_AD_NO_CERTIFICATE 41 -# define SSL3_AD_BAD_CERTIFICATE 42 -# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 -# define SSL3_AD_CERTIFICATE_REVOKED 44 -# define SSL3_AD_CERTIFICATE_EXPIRED 45 -# define SSL3_AD_CERTIFICATE_UNKNOWN 46 -# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ - -# define TLS1_HB_REQUEST 1 -# define TLS1_HB_RESPONSE 2 - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct ssl3_record_st { - /* type of record */ - /* - * r - */ int type; - /* How many bytes available */ - /* - * rw - */ unsigned int length; - /* read/write offset into 'buf' */ - /* - * r - */ unsigned int off; - /* pointer to the record data */ - /* - * rw - */ unsigned char *data; - /* where the decode bytes are */ - /* - * rw - */ unsigned char *input; - /* only used with decompression - malloc()ed */ - /* - * r - */ unsigned char *comp; - /* epoch number, needed by DTLS1 */ - /* - * r - */ unsigned long epoch; - /* sequence number, needed by DTLS1 */ - /* - * r - */ unsigned char seq_num[8]; -} SSL3_RECORD; - -typedef struct ssl3_buffer_st { - /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */ - unsigned char *buf; - /* buffer size */ - size_t len; - /* where to 'copy from' */ - int offset; - /* how many bytes left */ - int left; -} SSL3_BUFFER; - -# endif - -# define SSL3_CT_RSA_SIGN 1 -# define SSL3_CT_DSS_SIGN 2 -# define SSL3_CT_RSA_FIXED_DH 3 -# define SSL3_CT_DSS_FIXED_DH 4 -# define SSL3_CT_RSA_EPHEMERAL_DH 5 -# define SSL3_CT_DSS_EPHEMERAL_DH 6 -# define SSL3_CT_FORTEZZA_DMS 20 -/* - * SSL3_CT_NUMBER is used to size arrays and it must be large enough to - * contain all of the cert types defined either for SSLv3 and TLSv1. - */ -# define SSL3_CT_NUMBER 9 - -# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 -# define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 -# define SSL3_FLAGS_POP_BUFFER 0x0004 -# define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 -# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 -# define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 -/* - * Set when the handshake is ready to process peer's ChangeCipherSpec message. - * Cleared after the message has been processed. - */ -# define SSL3_FLAGS_CCS_OK 0x0080 - -/* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */ -# define SSL3_FLAGS_SGC_RESTART_DONE 0x0040 - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct ssl3_state_st { - long flags; - int delay_buf_pop_ret; - unsigned char read_sequence[8]; - int read_mac_secret_size; - unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; - unsigned char write_sequence[8]; - int write_mac_secret_size; - unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; - unsigned char server_random[SSL3_RANDOM_SIZE]; - unsigned char client_random[SSL3_RANDOM_SIZE]; - /* flags for countermeasure against known-IV weakness */ - int need_empty_fragments; - int empty_fragment_done; - /* The value of 'extra' when the buffers were initialized */ - int init_extra; - SSL3_BUFFER rbuf; /* read IO goes into here */ - SSL3_BUFFER wbuf; /* write IO goes into here */ - SSL3_RECORD rrec; /* each decoded record goes in here */ - SSL3_RECORD wrec; /* goes out from here */ - /* - * storage for Alert/Handshake protocol data received but not yet - * processed by ssl3_read_bytes: - */ - unsigned char alert_fragment[2]; - unsigned int alert_fragment_len; - unsigned char handshake_fragment[4]; - unsigned int handshake_fragment_len; - /* partial write - check the numbers match */ - unsigned int wnum; /* number of bytes sent so far */ - int wpend_tot; /* number bytes written */ - int wpend_type; - int wpend_ret; /* number of bytes submitted */ - const unsigned char *wpend_buf; - /* used during startup, digest all incoming/outgoing packets */ - BIO *handshake_buffer; - /* - * When set of handshake digests is determined, buffer is hashed and - * freed and MD_CTX-es for all required digests are stored in this array - */ - EVP_MD_CTX **handshake_dgst; - /* - * Set whenever an expected ChangeCipherSpec message is processed. - * Unset when the peer's Finished message is received. - * Unexpected ChangeCipherSpec messages trigger a fatal alert. - */ - int change_cipher_spec; - int warn_alert; - int fatal_alert; - /* - * we allow one fatal and one warning alert to be outstanding, send close - * alert via the warning alert - */ - int alert_dispatch; - unsigned char send_alert[2]; - /* - * This flag is set when we should renegotiate ASAP, basically when there - * is no more data in the read or write buffers - */ - int renegotiate; - int total_renegotiations; - int num_renegotiations; - int in_read_app_data; - /* - * Opaque PRF input as used for the current handshake. These fields are - * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they - * are merely present to improve binary compatibility) - */ - void *client_opaque_prf_input; - size_t client_opaque_prf_input_len; - void *server_opaque_prf_input; - size_t server_opaque_prf_input_len; - struct { - /* actually only needs to be 16+20 */ - unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2]; - /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ - unsigned char finish_md[EVP_MAX_MD_SIZE * 2]; - int finish_md_len; - unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2]; - int peer_finish_md_len; - unsigned long message_size; - int message_type; - /* used to hold the new cipher we are going to use */ - const SSL_CIPHER *new_cipher; -# ifndef OPENSSL_NO_DH - DH *dh; -# endif -# ifndef OPENSSL_NO_ECDH - EC_KEY *ecdh; /* holds short lived ECDH key */ -# endif - /* used when SSL_ST_FLUSH_DATA is entered */ - int next_state; - int reuse_message; - /* used for certificate requests */ - int cert_req; - int ctype_num; - char ctype[SSL3_CT_NUMBER]; - STACK_OF(X509_NAME) *ca_names; - int use_rsa_tmp; - int key_block_length; - unsigned char *key_block; - const EVP_CIPHER *new_sym_enc; - const EVP_MD *new_hash; - int new_mac_pkey_type; - int new_mac_secret_size; -# ifndef OPENSSL_NO_COMP - const SSL_COMP *new_compression; -# else - char *new_compression; -# endif - int cert_request; - } tmp; - - /* Connection binding to prevent renegotiation attacks */ - unsigned char previous_client_finished[EVP_MAX_MD_SIZE]; - unsigned char previous_client_finished_len; - unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; - unsigned char previous_server_finished_len; - int send_connection_binding; /* TODOEKR */ - -# ifndef OPENSSL_NO_NEXTPROTONEG - /* - * Set if we saw the Next Protocol Negotiation extension from our peer. - */ - int next_proto_neg_seen; -# endif - -# ifndef OPENSSL_NO_TLSEXT -# ifndef OPENSSL_NO_EC - /* - * This is set to true if we believe that this is a version of Safari - * running on OS X 10.6 or newer. We wish to know this because Safari on - * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. - */ - char is_probably_safari; -# endif /* !OPENSSL_NO_EC */ - - /* - * ALPN information (we are in the process of transitioning from NPN to - * ALPN.) - */ - - /* - * In a server these point to the selected ALPN protocol after the - * ClientHello has been processed. In a client these contain the protocol - * that the server selected once the ServerHello has been processed. - */ - unsigned char *alpn_selected; - unsigned alpn_selected_len; -# endif /* OPENSSL_NO_TLSEXT */ -} SSL3_STATE; - -# endif - -/* SSLv3 */ -/* - * client - */ -/* extra state */ -# define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT) -# ifndef OPENSSL_NO_SCTP -# define DTLS1_SCTP_ST_CW_WRITE_SOCK (0x310|SSL_ST_CONNECT) -# define DTLS1_SCTP_ST_CR_READ_SOCK (0x320|SSL_ST_CONNECT) -# endif -/* write to server */ -# define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT) -# define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT) -/* read from server */ -# define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT) -# define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT) -# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT) -# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT) -# define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT) -# define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT) -# define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT) -# define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT) -/* write to server */ -# define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT) -# define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT) -# define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) -# define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) -# define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) -# define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) -# endif -# define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) -# define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) -/* read from server */ -# define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT) -# define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT) -# define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT) -# define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT) -# define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT) -# define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT) - -/* server */ -/* extra state */ -# define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT) -# ifndef OPENSSL_NO_SCTP -# define DTLS1_SCTP_ST_SW_WRITE_SOCK (0x310|SSL_ST_ACCEPT) -# define DTLS1_SCTP_ST_SR_READ_SOCK (0x320|SSL_ST_ACCEPT) -# endif -/* read from client */ -/* Do not change the number values, they do matter */ -# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT) -/* write to client */ -# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT) -# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT) -# define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT) -# define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT) -# define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT) -# define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT) -# define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT) -/* read from client */ -# define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT) -# define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT) -# define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) -# define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) -# endif -# define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) -# define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) -/* write to client */ -# define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT) -# define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT) -# define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT) - -# define SSL3_MT_HELLO_REQUEST 0 -# define SSL3_MT_CLIENT_HELLO 1 -# define SSL3_MT_SERVER_HELLO 2 -# define SSL3_MT_NEWSESSION_TICKET 4 -# define SSL3_MT_CERTIFICATE 11 -# define SSL3_MT_SERVER_KEY_EXCHANGE 12 -# define SSL3_MT_CERTIFICATE_REQUEST 13 -# define SSL3_MT_SERVER_DONE 14 -# define SSL3_MT_CERTIFICATE_VERIFY 15 -# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 -# define SSL3_MT_FINISHED 20 -# define SSL3_MT_CERTIFICATE_STATUS 22 -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_MT_NEXT_PROTO 67 -# endif -# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 - -# define SSL3_MT_CCS 1 - -/* These are used when changing over to a new cipher */ -# define SSL3_CC_READ 0x01 -# define SSL3_CC_WRITE 0x02 -# define SSL3_CC_CLIENT 0x10 -# define SSL3_CC_SERVER 0x20 -# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) -# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/stack.h b/ext/openssl/windows/x86/include/openssl/stack.h deleted file mode 100644 index eb072166..00000000 --- a/ext/openssl/windows/x86/include/openssl/stack.h +++ /dev/null @@ -1,107 +0,0 @@ -/* crypto/stack/stack.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_STACK_H -# define HEADER_STACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stack_st { - int num; - char **data; - int sorted; - int num_alloc; - int (*comp) (const void *, const void *); -} _STACK; /* Use STACK_OF(...) instead */ - -# define M_sk_num(sk) ((sk) ? (sk)->num:-1) -# define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) - -int sk_num(const _STACK *); -void *sk_value(const _STACK *, int); - -void *sk_set(_STACK *, int, void *); - -_STACK *sk_new(int (*cmp) (const void *, const void *)); -_STACK *sk_new_null(void); -void sk_free(_STACK *); -void sk_pop_free(_STACK *st, void (*func) (void *)); -_STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *)); -int sk_insert(_STACK *sk, void *data, int where); -void *sk_delete(_STACK *st, int loc); -void *sk_delete_ptr(_STACK *st, void *p); -int sk_find(_STACK *st, void *data); -int sk_find_ex(_STACK *st, void *data); -int sk_push(_STACK *st, void *data); -int sk_unshift(_STACK *st, void *data); -void *sk_shift(_STACK *st); -void *sk_pop(_STACK *st); -void sk_zero(_STACK *st); -int (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *))) - (const void *, const void *); -_STACK *sk_dup(_STACK *st); -void sk_sort(_STACK *st); -int sk_is_sorted(const _STACK *st); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/symhacks.h b/ext/openssl/windows/x86/include/openssl/symhacks.h deleted file mode 100644 index 239fa4fb..00000000 --- a/ext/openssl/windows/x86/include/openssl/symhacks.h +++ /dev/null @@ -1,516 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H - -# include - -/* - * Hacks to solve the problem with linkers incapable of handling very long - * symbol names. In the case of VMS, the limit is 31 characters on VMS for - * VAX. - */ -/* - * Note that this affects util/libeay.num and util/ssleay.num... you may - * change those manually, but that's not recommended, as those files are - * controlled centrally and updated on Unix, and the central definition may - * disagree with yours, which in turn may come with shareable library - * incompatibilities. - */ -# ifdef OPENSSL_SYS_VMS - -/* Hack a long name in crypto/ex_data.c */ -# undef CRYPTO_get_ex_data_implementation -# define CRYPTO_get_ex_data_implementation CRYPTO_get_ex_data_impl -# undef CRYPTO_set_ex_data_implementation -# define CRYPTO_set_ex_data_implementation CRYPTO_set_ex_data_impl - -/* Hack a long name in crypto/asn1/a_mbstr.c */ -# undef ASN1_STRING_set_default_mask_asc -# define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc - -# if 0 /* No longer needed, since safestack macro - * magic does the job */ -/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */ -# undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO -# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF -# undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO -# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF -# endif - -# if 0 /* No longer needed, since safestack macro - * magic does the job */ -/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */ -# undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO -# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECINF -# undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO -# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECINF -# endif - -# if 0 /* No longer needed, since safestack macro - * magic does the job */ -/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */ -# undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION -# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION i2d_ASN1_SET_OF_ACC_DESC -# undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION -# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION d2i_ASN1_SET_OF_ACC_DESC -# endif - -/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */ -# undef PEM_read_NETSCAPE_CERT_SEQUENCE -# define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ -# undef PEM_write_NETSCAPE_CERT_SEQUENCE -# define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ -# undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE -# define PEM_read_bio_NETSCAPE_CERT_SEQUENCE PEM_read_bio_NS_CERT_SEQ -# undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE -# define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ -# undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE -# define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ - -/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */ -# undef PEM_read_PKCS8_PRIV_KEY_INFO -# define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO -# undef PEM_write_PKCS8_PRIV_KEY_INFO -# define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO -# undef PEM_read_bio_PKCS8_PRIV_KEY_INFO -# define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO -# undef PEM_write_bio_PKCS8_PRIV_KEY_INFO -# define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO -# undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO -# define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO PEM_wrt_cb_bio_P8_PRIV_KEY_INFO - -/* Hack other PEM names */ -# undef PEM_write_bio_PKCS8PrivateKey_nid -# define PEM_write_bio_PKCS8PrivateKey_nid PEM_write_bio_PKCS8PrivKey_nid - -/* Hack some long X509 names */ -# undef X509_REVOKED_get_ext_by_critical -# define X509_REVOKED_get_ext_by_critical X509_REVOKED_get_ext_by_critic -# undef X509_policy_tree_get0_user_policies -# define X509_policy_tree_get0_user_policies X509_pcy_tree_get0_usr_policies -# undef X509_policy_node_get0_qualifiers -# define X509_policy_node_get0_qualifiers X509_pcy_node_get0_qualifiers -# undef X509_STORE_CTX_get_explicit_policy -# define X509_STORE_CTX_get_explicit_policy X509_STORE_CTX_get_expl_policy -# undef X509_STORE_CTX_get0_current_issuer -# define X509_STORE_CTX_get0_current_issuer X509_STORE_CTX_get0_cur_issuer - -/* Hack some long CRYPTO names */ -# undef CRYPTO_set_dynlock_destroy_callback -# define CRYPTO_set_dynlock_destroy_callback CRYPTO_set_dynlock_destroy_cb -# undef CRYPTO_set_dynlock_create_callback -# define CRYPTO_set_dynlock_create_callback CRYPTO_set_dynlock_create_cb -# undef CRYPTO_set_dynlock_lock_callback -# define CRYPTO_set_dynlock_lock_callback CRYPTO_set_dynlock_lock_cb -# undef CRYPTO_get_dynlock_lock_callback -# define CRYPTO_get_dynlock_lock_callback CRYPTO_get_dynlock_lock_cb -# undef CRYPTO_get_dynlock_destroy_callback -# define CRYPTO_get_dynlock_destroy_callback CRYPTO_get_dynlock_destroy_cb -# undef CRYPTO_get_dynlock_create_callback -# define CRYPTO_get_dynlock_create_callback CRYPTO_get_dynlock_create_cb -# undef CRYPTO_set_locked_mem_ex_functions -# define CRYPTO_set_locked_mem_ex_functions CRYPTO_set_locked_mem_ex_funcs -# undef CRYPTO_get_locked_mem_ex_functions -# define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs - -/* Hack some long SSL/TLS names */ -# undef SSL_CTX_set_default_verify_paths -# define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths -# undef SSL_get_ex_data_X509_STORE_CTX_idx -# define SSL_get_ex_data_X509_STORE_CTX_idx SSL_get_ex_d_X509_STORE_CTX_idx -# undef SSL_add_file_cert_subjects_to_stack -# define SSL_add_file_cert_subjects_to_stack SSL_add_file_cert_subjs_to_stk -# undef SSL_add_dir_cert_subjects_to_stack -# define SSL_add_dir_cert_subjects_to_stack SSL_add_dir_cert_subjs_to_stk -# undef SSL_CTX_use_certificate_chain_file -# define SSL_CTX_use_certificate_chain_file SSL_CTX_use_cert_chain_file -# undef SSL_CTX_set_cert_verify_callback -# define SSL_CTX_set_cert_verify_callback SSL_CTX_set_cert_verify_cb -# undef SSL_CTX_set_default_passwd_cb_userdata -# define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud -# undef SSL_COMP_get_compression_methods -# define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods -# undef SSL_COMP_set0_compression_methods -# define SSL_COMP_set0_compression_methods SSL_COMP_set0_compress_methods -# undef SSL_COMP_free_compression_methods -# define SSL_COMP_free_compression_methods SSL_COMP_free_compress_methods -# undef ssl_add_clienthello_renegotiate_ext -# define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext -# undef ssl_add_serverhello_renegotiate_ext -# define ssl_add_serverhello_renegotiate_ext ssl_add_serverhello_reneg_ext -# undef ssl_parse_clienthello_renegotiate_ext -# define ssl_parse_clienthello_renegotiate_ext ssl_parse_clienthello_reneg_ext -# undef ssl_parse_serverhello_renegotiate_ext -# define ssl_parse_serverhello_renegotiate_ext ssl_parse_serverhello_reneg_ext -# undef SSL_srp_server_param_with_username -# define SSL_srp_server_param_with_username SSL_srp_server_param_with_un -# undef SSL_CTX_set_srp_client_pwd_callback -# define SSL_CTX_set_srp_client_pwd_callback SSL_CTX_set_srp_client_pwd_cb -# undef SSL_CTX_set_srp_verify_param_callback -# define SSL_CTX_set_srp_verify_param_callback SSL_CTX_set_srp_vfy_param_cb -# undef SSL_CTX_set_srp_username_callback -# define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb -# undef ssl_add_clienthello_use_srtp_ext -# define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext -# undef ssl_add_serverhello_use_srtp_ext -# define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext -# undef ssl_parse_clienthello_use_srtp_ext -# define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext -# undef ssl_parse_serverhello_use_srtp_ext -# define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext -# undef SSL_CTX_set_next_protos_advertised_cb -# define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb -# undef SSL_CTX_set_next_proto_select_cb -# define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb - -# undef tls1_send_server_supplemental_data -# define tls1_send_server_supplemental_data tls1_send_server_suppl_data -# undef tls1_send_client_supplemental_data -# define tls1_send_client_supplemental_data tls1_send_client_suppl_data -# undef tls1_get_server_supplemental_data -# define tls1_get_server_supplemental_data tls1_get_server_suppl_data -# undef tls1_get_client_supplemental_data -# define tls1_get_client_supplemental_data tls1_get_client_suppl_data - -# undef ssl3_cbc_record_digest_supported -# define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support -# undef ssl_check_clienthello_tlsext_late -# define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late -# undef ssl_check_clienthello_tlsext_early -# define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early - -/* Hack some RSA long names */ -# undef RSA_padding_check_PKCS1_OAEP_mgf1 -# define RSA_padding_check_PKCS1_OAEP_mgf1 RSA_pad_check_PKCS1_OAEP_mgf1 - -/* Hack some ENGINE long names */ -# undef ENGINE_get_default_BN_mod_exp_crt -# define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt -# undef ENGINE_set_default_BN_mod_exp_crt -# define ENGINE_set_default_BN_mod_exp_crt ENGINE_set_def_BN_mod_exp_crt -# undef ENGINE_set_load_privkey_function -# define ENGINE_set_load_privkey_function ENGINE_set_load_privkey_fn -# undef ENGINE_get_load_privkey_function -# define ENGINE_get_load_privkey_function ENGINE_get_load_privkey_fn -# undef ENGINE_unregister_pkey_asn1_meths -# define ENGINE_unregister_pkey_asn1_meths ENGINE_unreg_pkey_asn1_meths -# undef ENGINE_register_all_pkey_asn1_meths -# define ENGINE_register_all_pkey_asn1_meths ENGINE_reg_all_pkey_asn1_meths -# undef ENGINE_set_default_pkey_asn1_meths -# define ENGINE_set_default_pkey_asn1_meths ENGINE_set_def_pkey_asn1_meths -# undef ENGINE_get_pkey_asn1_meth_engine -# define ENGINE_get_pkey_asn1_meth_engine ENGINE_get_pkey_asn1_meth_eng -# undef ENGINE_set_load_ssl_client_cert_function -# define ENGINE_set_load_ssl_client_cert_function \ - ENGINE_set_ld_ssl_clnt_cert_fn -# undef ENGINE_get_ssl_client_cert_function -# define ENGINE_get_ssl_client_cert_function ENGINE_get_ssl_client_cert_fn - -/* Hack some long OCSP names */ -# undef OCSP_REQUEST_get_ext_by_critical -# define OCSP_REQUEST_get_ext_by_critical OCSP_REQUEST_get_ext_by_crit -# undef OCSP_BASICRESP_get_ext_by_critical -# define OCSP_BASICRESP_get_ext_by_critical OCSP_BASICRESP_get_ext_by_crit -# undef OCSP_SINGLERESP_get_ext_by_critical -# define OCSP_SINGLERESP_get_ext_by_critical OCSP_SINGLERESP_get_ext_by_crit - -/* Hack some long DES names */ -# undef _ossl_old_des_ede3_cfb64_encrypt -# define _ossl_old_des_ede3_cfb64_encrypt _ossl_odes_ede3_cfb64_encrypt -# undef _ossl_old_des_ede3_ofb64_encrypt -# define _ossl_old_des_ede3_ofb64_encrypt _ossl_odes_ede3_ofb64_encrypt - -/* Hack some long EVP names */ -# undef OPENSSL_add_all_algorithms_noconf -# define OPENSSL_add_all_algorithms_noconf OPENSSL_add_all_algo_noconf -# undef OPENSSL_add_all_algorithms_conf -# define OPENSSL_add_all_algorithms_conf OPENSSL_add_all_algo_conf -# undef EVP_PKEY_meth_set_verify_recover -# define EVP_PKEY_meth_set_verify_recover EVP_PKEY_meth_set_vrfy_recover - -/* Hack some long EC names */ -# undef EC_GROUP_set_point_conversion_form -# define EC_GROUP_set_point_conversion_form EC_GROUP_set_point_conv_form -# undef EC_GROUP_get_point_conversion_form -# define EC_GROUP_get_point_conversion_form EC_GROUP_get_point_conv_form -# undef EC_GROUP_clear_free_all_extra_data -# define EC_GROUP_clear_free_all_extra_data EC_GROUP_clr_free_all_xtra_data -# undef EC_KEY_set_public_key_affine_coordinates -# define EC_KEY_set_public_key_affine_coordinates \ - EC_KEY_set_pub_key_aff_coords -# undef EC_POINT_set_Jprojective_coordinates_GFp -# define EC_POINT_set_Jprojective_coordinates_GFp \ - EC_POINT_set_Jproj_coords_GFp -# undef EC_POINT_get_Jprojective_coordinates_GFp -# define EC_POINT_get_Jprojective_coordinates_GFp \ - EC_POINT_get_Jproj_coords_GFp -# undef EC_POINT_set_affine_coordinates_GFp -# define EC_POINT_set_affine_coordinates_GFp EC_POINT_set_affine_coords_GFp -# undef EC_POINT_get_affine_coordinates_GFp -# define EC_POINT_get_affine_coordinates_GFp EC_POINT_get_affine_coords_GFp -# undef EC_POINT_set_compressed_coordinates_GFp -# define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp -# undef EC_POINT_set_affine_coordinates_GF2m -# define EC_POINT_set_affine_coordinates_GF2m EC_POINT_set_affine_coords_GF2m -# undef EC_POINT_get_affine_coordinates_GF2m -# define EC_POINT_get_affine_coordinates_GF2m EC_POINT_get_affine_coords_GF2m -# undef EC_POINT_set_compressed_coordinates_GF2m -# define EC_POINT_set_compressed_coordinates_GF2m \ - EC_POINT_set_compr_coords_GF2m -# undef ec_GF2m_simple_group_clear_finish -# define ec_GF2m_simple_group_clear_finish ec_GF2m_simple_grp_clr_finish -# undef ec_GF2m_simple_group_check_discriminant -# define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim -# undef ec_GF2m_simple_point_clear_finish -# define ec_GF2m_simple_point_clear_finish ec_GF2m_simple_pt_clr_finish -# undef ec_GF2m_simple_point_set_to_infinity -# define ec_GF2m_simple_point_set_to_infinity ec_GF2m_simple_pt_set_to_inf -# undef ec_GF2m_simple_points_make_affine -# define ec_GF2m_simple_points_make_affine ec_GF2m_simple_pts_make_affine -# undef ec_GF2m_simple_point_set_affine_coordinates -# define ec_GF2m_simple_point_set_affine_coordinates \ - ec_GF2m_smp_pt_set_af_coords -# undef ec_GF2m_simple_point_get_affine_coordinates -# define ec_GF2m_simple_point_get_affine_coordinates \ - ec_GF2m_smp_pt_get_af_coords -# undef ec_GF2m_simple_set_compressed_coordinates -# define ec_GF2m_simple_set_compressed_coordinates \ - ec_GF2m_smp_set_compr_coords -# undef ec_GFp_simple_group_set_curve_GFp -# define ec_GFp_simple_group_set_curve_GFp ec_GFp_simple_grp_set_curve_GFp -# undef ec_GFp_simple_group_get_curve_GFp -# define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp -# undef ec_GFp_simple_group_clear_finish -# define ec_GFp_simple_group_clear_finish ec_GFp_simple_grp_clear_finish -# undef ec_GFp_simple_group_set_generator -# define ec_GFp_simple_group_set_generator ec_GFp_simple_grp_set_generator -# undef ec_GFp_simple_group_get0_generator -# define ec_GFp_simple_group_get0_generator ec_GFp_simple_grp_gt0_generator -# undef ec_GFp_simple_group_get_cofactor -# define ec_GFp_simple_group_get_cofactor ec_GFp_simple_grp_get_cofactor -# undef ec_GFp_simple_point_clear_finish -# define ec_GFp_simple_point_clear_finish ec_GFp_simple_pt_clear_finish -# undef ec_GFp_simple_point_set_to_infinity -# define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf -# undef ec_GFp_simple_points_make_affine -# define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine -# undef ec_GFp_simple_set_Jprojective_coordinates_GFp -# define ec_GFp_simple_set_Jprojective_coordinates_GFp \ - ec_GFp_smp_set_Jproj_coords_GFp -# undef ec_GFp_simple_get_Jprojective_coordinates_GFp -# define ec_GFp_simple_get_Jprojective_coordinates_GFp \ - ec_GFp_smp_get_Jproj_coords_GFp -# undef ec_GFp_simple_point_set_affine_coordinates_GFp -# define ec_GFp_simple_point_set_affine_coordinates_GFp \ - ec_GFp_smp_pt_set_af_coords_GFp -# undef ec_GFp_simple_point_get_affine_coordinates_GFp -# define ec_GFp_simple_point_get_affine_coordinates_GFp \ - ec_GFp_smp_pt_get_af_coords_GFp -# undef ec_GFp_simple_set_compressed_coordinates_GFp -# define ec_GFp_simple_set_compressed_coordinates_GFp \ - ec_GFp_smp_set_compr_coords_GFp -# undef ec_GFp_simple_point_set_affine_coordinates -# define ec_GFp_simple_point_set_affine_coordinates \ - ec_GFp_smp_pt_set_af_coords -# undef ec_GFp_simple_point_get_affine_coordinates -# define ec_GFp_simple_point_get_affine_coordinates \ - ec_GFp_smp_pt_get_af_coords -# undef ec_GFp_simple_set_compressed_coordinates -# define ec_GFp_simple_set_compressed_coordinates \ - ec_GFp_smp_set_compr_coords -# undef ec_GFp_simple_group_check_discriminant -# define ec_GFp_simple_group_check_discriminant ec_GFp_simple_grp_chk_discrim - -/* Hack som long STORE names */ -# undef STORE_method_set_initialise_function -# define STORE_method_set_initialise_function STORE_meth_set_initialise_fn -# undef STORE_method_set_cleanup_function -# define STORE_method_set_cleanup_function STORE_meth_set_cleanup_fn -# undef STORE_method_set_generate_function -# define STORE_method_set_generate_function STORE_meth_set_generate_fn -# undef STORE_method_set_modify_function -# define STORE_method_set_modify_function STORE_meth_set_modify_fn -# undef STORE_method_set_revoke_function -# define STORE_method_set_revoke_function STORE_meth_set_revoke_fn -# undef STORE_method_set_delete_function -# define STORE_method_set_delete_function STORE_meth_set_delete_fn -# undef STORE_method_set_list_start_function -# define STORE_method_set_list_start_function STORE_meth_set_list_start_fn -# undef STORE_method_set_list_next_function -# define STORE_method_set_list_next_function STORE_meth_set_list_next_fn -# undef STORE_method_set_list_end_function -# define STORE_method_set_list_end_function STORE_meth_set_list_end_fn -# undef STORE_method_set_update_store_function -# define STORE_method_set_update_store_function STORE_meth_set_update_store_fn -# undef STORE_method_set_lock_store_function -# define STORE_method_set_lock_store_function STORE_meth_set_lock_store_fn -# undef STORE_method_set_unlock_store_function -# define STORE_method_set_unlock_store_function STORE_meth_set_unlock_store_fn -# undef STORE_method_get_initialise_function -# define STORE_method_get_initialise_function STORE_meth_get_initialise_fn -# undef STORE_method_get_cleanup_function -# define STORE_method_get_cleanup_function STORE_meth_get_cleanup_fn -# undef STORE_method_get_generate_function -# define STORE_method_get_generate_function STORE_meth_get_generate_fn -# undef STORE_method_get_modify_function -# define STORE_method_get_modify_function STORE_meth_get_modify_fn -# undef STORE_method_get_revoke_function -# define STORE_method_get_revoke_function STORE_meth_get_revoke_fn -# undef STORE_method_get_delete_function -# define STORE_method_get_delete_function STORE_meth_get_delete_fn -# undef STORE_method_get_list_start_function -# define STORE_method_get_list_start_function STORE_meth_get_list_start_fn -# undef STORE_method_get_list_next_function -# define STORE_method_get_list_next_function STORE_meth_get_list_next_fn -# undef STORE_method_get_list_end_function -# define STORE_method_get_list_end_function STORE_meth_get_list_end_fn -# undef STORE_method_get_update_store_function -# define STORE_method_get_update_store_function STORE_meth_get_update_store_fn -# undef STORE_method_get_lock_store_function -# define STORE_method_get_lock_store_function STORE_meth_get_lock_store_fn -# undef STORE_method_get_unlock_store_function -# define STORE_method_get_unlock_store_function STORE_meth_get_unlock_store_fn - -/* Hack some long TS names */ -# undef TS_RESP_CTX_set_status_info_cond -# define TS_RESP_CTX_set_status_info_cond TS_RESP_CTX_set_stat_info_cond -# undef TS_RESP_CTX_set_clock_precision_digits -# define TS_RESP_CTX_set_clock_precision_digits TS_RESP_CTX_set_clk_prec_digits -# undef TS_CONF_set_clock_precision_digits -# define TS_CONF_set_clock_precision_digits TS_CONF_set_clk_prec_digits - -/* Hack some long CMS names */ -# undef CMS_RecipientInfo_ktri_get0_algs -# define CMS_RecipientInfo_ktri_get0_algs CMS_RecipInfo_ktri_get0_algs -# undef CMS_RecipientInfo_ktri_get0_signer_id -# define CMS_RecipientInfo_ktri_get0_signer_id CMS_RecipInfo_ktri_get0_sigr_id -# undef CMS_OtherRevocationInfoFormat_it -# define CMS_OtherRevocationInfoFormat_it CMS_OtherRevocInfoFormat_it -# undef CMS_KeyAgreeRecipientIdentifier_it -# define CMS_KeyAgreeRecipientIdentifier_it CMS_KeyAgreeRecipIdentifier_it -# undef CMS_OriginatorIdentifierOrKey_it -# define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it -# undef cms_SignerIdentifier_get0_signer_id -# define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id -# undef CMS_RecipientInfo_kari_get0_orig_id -# define CMS_RecipientInfo_kari_get0_orig_id CMS_RecipInfo_kari_get0_orig_id -# undef CMS_RecipientInfo_kari_get0_reks -# define CMS_RecipientInfo_kari_get0_reks CMS_RecipInfo_kari_get0_reks -# undef CMS_RecipientEncryptedKey_cert_cmp -# define CMS_RecipientEncryptedKey_cert_cmp CMS_RecipEncryptedKey_cert_cmp -# undef CMS_RecipientInfo_kari_set0_pkey -# define CMS_RecipientInfo_kari_set0_pkey CMS_RecipInfo_kari_set0_pkey -# undef CMS_RecipientEncryptedKey_get0_id -# define CMS_RecipientEncryptedKey_get0_id CMS_RecipEncryptedKey_get0_id -# undef CMS_RecipientInfo_kari_orig_id_cmp -# define CMS_RecipientInfo_kari_orig_id_cmp CMS_RecipInfo_kari_orig_id_cmp - -/* Hack some long DTLS1 names */ -# undef dtls1_retransmit_buffered_messages -# define dtls1_retransmit_buffered_messages dtls1_retransmit_buffered_msgs - -/* Hack some long SRP names */ -# undef SRP_generate_server_master_secret -# define SRP_generate_server_master_secret SRP_gen_server_master_secret -# undef SRP_generate_client_master_secret -# define SRP_generate_client_master_secret SRP_gen_client_master_secret - -/* Hack some long UI names */ -# undef UI_method_get_prompt_constructor -# define UI_method_get_prompt_constructor UI_method_get_prompt_constructr -# undef UI_method_set_prompt_constructor -# define UI_method_set_prompt_constructor UI_method_set_prompt_constructr - -# endif /* defined OPENSSL_SYS_VMS */ - -/* Case insensitive linking causes problems.... */ -# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) -# undef ERR_load_CRYPTO_strings -# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings -# undef OCSP_crlID_new -# define OCSP_crlID_new OCSP_crlID2_new - -# undef d2i_ECPARAMETERS -# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS -# undef i2d_ECPARAMETERS -# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS -# undef d2i_ECPKPARAMETERS -# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS -# undef i2d_ECPKPARAMETERS -# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS - -/* - * These functions do not seem to exist! However, I'm paranoid... Original - * command in x509v3.h: These functions are being redefined in another - * directory, and clash when the linker is case-insensitive, so let's hide - * them a little, by giving them an extra 'o' at the beginning of the name... - */ -# undef X509v3_cleanup_extensions -# define X509v3_cleanup_extensions oX509v3_cleanup_extensions -# undef X509v3_add_extension -# define X509v3_add_extension oX509v3_add_extension -# undef X509v3_add_netscape_extensions -# define X509v3_add_netscape_extensions oX509v3_add_netscape_extensions -# undef X509v3_add_standard_extensions -# define X509v3_add_standard_extensions oX509v3_add_standard_extensions - -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - -# endif - -#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/ext/openssl/windows/x86/include/openssl/tls1.h b/ext/openssl/windows/x86/include/openssl/tls1.h deleted file mode 100644 index 7e237d06..00000000 --- a/ext/openssl/windows/x86/include/openssl/tls1.h +++ /dev/null @@ -1,810 +0,0 @@ -/* ssl/tls1.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * ECC cipher suite support in OpenSSL originally written by - * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. - * - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 0 - -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS_MAX_VERSION TLS1_2_VERSION - -# define TLS1_VERSION_MAJOR 0x03 -# define TLS1_VERSION_MINOR 0x01 - -# define TLS1_1_VERSION_MAJOR 0x03 -# define TLS1_1_VERSION_MINOR 0x02 - -# define TLS1_2_VERSION_MAJOR 0x03 -# define TLS1_2_VERSION_MINOR 0x03 - -# define TLS1_get_version(s) \ - ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0) - -# define TLS1_get_client_version(s) \ - ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) - -# define TLS1_AD_DECRYPTION_FAILED 21 -# define TLS1_AD_RECORD_OVERFLOW 22 -# define TLS1_AD_UNKNOWN_CA 48/* fatal */ -# define TLS1_AD_ACCESS_DENIED 49/* fatal */ -# define TLS1_AD_DECODE_ERROR 50/* fatal */ -# define TLS1_AD_DECRYPT_ERROR 51 -# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ -# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ -# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ -# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ -# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ -# define TLS1_AD_USER_CANCELLED 90 -# define TLS1_AD_NO_RENEGOTIATION 100 -/* codes 110-114 are from RFC3546 */ -# define TLS1_AD_UNSUPPORTED_EXTENSION 110 -# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 -# define TLS1_AD_UNRECOGNIZED_NAME 112 -# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 -# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 -# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ - -/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ -# define TLSEXT_TYPE_server_name 0 -# define TLSEXT_TYPE_max_fragment_length 1 -# define TLSEXT_TYPE_client_certificate_url 2 -# define TLSEXT_TYPE_trusted_ca_keys 3 -# define TLSEXT_TYPE_truncated_hmac 4 -# define TLSEXT_TYPE_status_request 5 -/* ExtensionType values from RFC4681 */ -# define TLSEXT_TYPE_user_mapping 6 -/* ExtensionType values from RFC5878 */ -# define TLSEXT_TYPE_client_authz 7 -# define TLSEXT_TYPE_server_authz 8 -/* ExtensionType values from RFC6091 */ -# define TLSEXT_TYPE_cert_type 9 - -/* ExtensionType values from RFC4492 */ -# define TLSEXT_TYPE_elliptic_curves 10 -# define TLSEXT_TYPE_ec_point_formats 11 - -/* ExtensionType value from RFC5054 */ -# define TLSEXT_TYPE_srp 12 - -/* ExtensionType values from RFC5246 */ -# define TLSEXT_TYPE_signature_algorithms 13 - -/* ExtensionType value from RFC5764 */ -# define TLSEXT_TYPE_use_srtp 14 - -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - -/* ExtensionType value from RFC7301 */ -# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 - -/* - * ExtensionType value for TLS padding extension. - * http://tools.ietf.org/html/draft-agl-tls-padding - */ -# define TLSEXT_TYPE_padding 21 - -/* ExtensionType value from RFC4507 */ -# define TLSEXT_TYPE_session_ticket 35 - -/* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */ -# if 0 -/* - * will have to be provided externally for now , - * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183 - * using whatever extension number you'd like to try - */ -# define TLSEXT_TYPE_opaque_prf_input ?? -# endif - -/* Temporary extension type */ -# define TLSEXT_TYPE_renegotiate 0xff01 - -# ifndef OPENSSL_NO_NEXTPROTONEG -/* This is not an IANA defined extension number */ -# define TLSEXT_TYPE_next_proto_neg 13172 -# endif - -/* NameType value from RFC3546 */ -# define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC3546 */ -# define TLSEXT_STATUSTYPE_ocsp 1 - -/* ECPointFormat values from RFC4492 */ -# define TLSEXT_ECPOINTFORMAT_first 0 -# define TLSEXT_ECPOINTFORMAT_uncompressed 0 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 -# define TLSEXT_ECPOINTFORMAT_last 2 - -/* Signature and hash algorithms from RFC5246 */ -# define TLSEXT_signature_anonymous 0 -# define TLSEXT_signature_rsa 1 -# define TLSEXT_signature_dsa 2 -# define TLSEXT_signature_ecdsa 3 - -/* Total number of different signature algorithms */ -# define TLSEXT_signature_num 4 - -# define TLSEXT_hash_none 0 -# define TLSEXT_hash_md5 1 -# define TLSEXT_hash_sha1 2 -# define TLSEXT_hash_sha224 3 -# define TLSEXT_hash_sha256 4 -# define TLSEXT_hash_sha384 5 -# define TLSEXT_hash_sha512 6 - -/* Total number of different digest algorithms */ - -# define TLSEXT_hash_num 7 - -/* Flag set for unrecognised algorithms */ -# define TLSEXT_nid_unknown 0x1000000 - -/* ECC curves */ - -# define TLSEXT_curve_P_256 23 -# define TLSEXT_curve_P_384 24 - -# ifndef OPENSSL_NO_TLSEXT - -# define TLSEXT_MAXLEN_host_name 255 - -const char *SSL_get_servername(const SSL *s, const int type); -int SSL_get_servername_type(const SSL *s); -/* - * SSL_export_keying_material exports a value derived from the master secret, - * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and - * optional context. (Since a zero length context is allowed, the |use_context| - * flag controls whether a context is included.) It returns 1 on success and - * zero otherwise. - */ -int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, - const char *label, size_t llen, - const unsigned char *p, size_t plen, - int use_context); - -int SSL_get_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_get_shared_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); - -# define SSL_set_tlsext_host_name(s,name) \ -SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name) - -# define SSL_set_tlsext_debug_callback(ssl, cb) \ -SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb) - -# define SSL_set_tlsext_debug_arg(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg) - -# define SSL_set_tlsext_status_type(ssl, type) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL) - -# define SSL_get_tlsext_status_exts(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) - -# define SSL_set_tlsext_status_exts(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) - -# define SSL_get_tlsext_status_ids(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) - -# define SSL_set_tlsext_status_ids(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) - -# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg) - -# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg) - -# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ -SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) - -# define SSL_TLSEXT_ERR_OK 0 -# define SSL_TLSEXT_ERR_ALERT_WARNING 1 -# define SSL_TLSEXT_ERR_ALERT_FATAL 2 -# define SSL_TLSEXT_ERR_NOACK 3 - -# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ -SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg) - -# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys)) -# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys)) - -# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ -SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) - -# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ -SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) - -# define SSL_set_tlsext_opaque_prf_input(s, src, len) \ -SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) -# define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ -SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) -# define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ -SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) - -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ -SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_TLSEXT_HB_ENABLED 0x01 -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS 0x04 - -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) -# endif -# endif - -/* PSK ciphersuites from 4279 */ -# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A -# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D - -/* - * Additional TLS ciphersuites from expired Internet Draft - * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if - * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c). We - * actually treat them like SSL 3.0 ciphers, which we probably shouldn't. - * Note that the first two are actually not in the IDs. - */ -# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060/* not in - * ID */ -# define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061/* not in - * ID */ -# define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062 -# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063 -# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064 -# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065 -# define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 - -/* AES ciphersuites from RFC3268 */ -# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 -# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 - -# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 -# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B -# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C -# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B -# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C -# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 -# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 -# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 -# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 -# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A -# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C -# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D -# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E -# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F -# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 -# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 -# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 -# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 -# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 -# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 -# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 -# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 - -/* - * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in - * draft 13 - */ -# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 -# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 -# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 - -# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 -# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 -# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A - -# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B -# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C -# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D -# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E -# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F - -# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 -# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 -# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 - -# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 -# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 -# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 -# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 -# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 - -/* SRP ciphersuites from RFC 5054 */ -# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A -# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B -# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C -# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F -# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 - -/* ECDH HMAC based ciphersuites from RFC5289 */ - -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 - -/* - * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave - * some DHE ciphers names with "EDH" + * instead of "DHE". Going forward, we - * should be using DHE + * everywhere, though we may indefinitely maintain - * aliases for users + * or configurations that used "EDH" + - */ -# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" -# define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" -# define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" -# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" -# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" -# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" -# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" - -/* AES ciphersuites from RFC3268 */ -# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" -# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" - -# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" -# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" - -# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" -# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" -# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" - -/* PSK ciphersuites from RFC 4279 */ -# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" -# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" - -/* SRP ciphersuite from RFC 5054 */ -# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" -# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" -# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" -# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" -# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" -# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" - -/* TLS v1.2 ciphersuites */ -# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" -# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" -# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" - -/* ECDH HMAC based ciphersuites from RFC5289 */ - -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" - -# define TLS_CT_RSA_SIGN 1 -# define TLS_CT_DSS_SIGN 2 -# define TLS_CT_RSA_FIXED_DH 3 -# define TLS_CT_DSS_FIXED_DH 4 -# define TLS_CT_ECDSA_SIGN 64 -# define TLS_CT_RSA_FIXED_ECDH 65 -# define TLS_CT_ECDSA_FIXED_ECDH 66 -# define TLS_CT_GOST94_SIGN 21 -# define TLS_CT_GOST01_SIGN 22 -/* - * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see - * comment there) - */ -# define TLS_CT_NUMBER 9 - -# define TLS1_FINISH_MAC_LENGTH 12 - -# define TLS_MD_MAX_CONST_SIZE 20 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 - -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif - -/* TLS Session Ticket extension struct */ -struct tls_session_ticket_ext_st { - unsigned short length; - void *data; -}; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ts.h b/ext/openssl/windows/x86/include/openssl/ts.h deleted file mode 100644 index 2daa1b2f..00000000 --- a/ext/openssl/windows/x86/include/openssl/ts.h +++ /dev/null @@ -1,865 +0,0 @@ -/* crypto/ts/ts.h */ -/* - * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project - * 2002, 2003, 2004. - */ -/* ==================================================================== - * Copyright (c) 2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_TS_H -# define HEADER_TS_H - -# include -# include -# ifndef OPENSSL_NO_BUFFER -# include -# endif -# ifndef OPENSSL_NO_EVP -# include -# endif -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include -# include - -# ifndef OPENSSL_NO_RSA -# include -# endif - -# ifndef OPENSSL_NO_DSA -# include -# endif - -# ifndef OPENSSL_NO_DH -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef WIN32 -/* Under Win32 this is defined in wincrypt.h */ -# undef X509_NAME -# endif - -# include -# include - -/*- -MessageImprint ::= SEQUENCE { - hashAlgorithm AlgorithmIdentifier, - hashedMessage OCTET STRING } -*/ - -typedef struct TS_msg_imprint_st { - X509_ALGOR *hash_algo; - ASN1_OCTET_STRING *hashed_msg; -} TS_MSG_IMPRINT; - -/*- -TimeStampReq ::= SEQUENCE { - version INTEGER { v1(1) }, - messageImprint MessageImprint, - --a hash algorithm OID and the hash value of the data to be - --time-stamped - reqPolicy TSAPolicyId OPTIONAL, - nonce INTEGER OPTIONAL, - certReq BOOLEAN DEFAULT FALSE, - extensions [0] IMPLICIT Extensions OPTIONAL } -*/ - -typedef struct TS_req_st { - ASN1_INTEGER *version; - TS_MSG_IMPRINT *msg_imprint; - ASN1_OBJECT *policy_id; /* OPTIONAL */ - ASN1_INTEGER *nonce; /* OPTIONAL */ - ASN1_BOOLEAN cert_req; /* DEFAULT FALSE */ - STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */ -} TS_REQ; - -/*- -Accuracy ::= SEQUENCE { - seconds INTEGER OPTIONAL, - millis [0] INTEGER (1..999) OPTIONAL, - micros [1] INTEGER (1..999) OPTIONAL } -*/ - -typedef struct TS_accuracy_st { - ASN1_INTEGER *seconds; - ASN1_INTEGER *millis; - ASN1_INTEGER *micros; -} TS_ACCURACY; - -/*- -TSTInfo ::= SEQUENCE { - version INTEGER { v1(1) }, - policy TSAPolicyId, - messageImprint MessageImprint, - -- MUST have the same value as the similar field in - -- TimeStampReq - serialNumber INTEGER, - -- Time-Stamping users MUST be ready to accommodate integers - -- up to 160 bits. - genTime GeneralizedTime, - accuracy Accuracy OPTIONAL, - ordering BOOLEAN DEFAULT FALSE, - nonce INTEGER OPTIONAL, - -- MUST be present if the similar field was present - -- in TimeStampReq. In that case it MUST have the same value. - tsa [0] GeneralName OPTIONAL, - extensions [1] IMPLICIT Extensions OPTIONAL } -*/ - -typedef struct TS_tst_info_st { - ASN1_INTEGER *version; - ASN1_OBJECT *policy_id; - TS_MSG_IMPRINT *msg_imprint; - ASN1_INTEGER *serial; - ASN1_GENERALIZEDTIME *time; - TS_ACCURACY *accuracy; - ASN1_BOOLEAN ordering; - ASN1_INTEGER *nonce; - GENERAL_NAME *tsa; - STACK_OF(X509_EXTENSION) *extensions; -} TS_TST_INFO; - -/*- -PKIStatusInfo ::= SEQUENCE { - status PKIStatus, - statusString PKIFreeText OPTIONAL, - failInfo PKIFailureInfo OPTIONAL } - -From RFC 1510 - section 3.1.1: -PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String - -- text encoded as UTF-8 String (note: each UTF8String SHOULD - -- include an RFC 1766 language tag to indicate the language - -- of the contained text) -*/ - -/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */ - -# define TS_STATUS_GRANTED 0 -# define TS_STATUS_GRANTED_WITH_MODS 1 -# define TS_STATUS_REJECTION 2 -# define TS_STATUS_WAITING 3 -# define TS_STATUS_REVOCATION_WARNING 4 -# define TS_STATUS_REVOCATION_NOTIFICATION 5 - -/* - * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c - */ - -# define TS_INFO_BAD_ALG 0 -# define TS_INFO_BAD_REQUEST 2 -# define TS_INFO_BAD_DATA_FORMAT 5 -# define TS_INFO_TIME_NOT_AVAILABLE 14 -# define TS_INFO_UNACCEPTED_POLICY 15 -# define TS_INFO_UNACCEPTED_EXTENSION 16 -# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 -# define TS_INFO_SYSTEM_FAILURE 25 - -typedef struct TS_status_info_st { - ASN1_INTEGER *status; - STACK_OF(ASN1_UTF8STRING) *text; - ASN1_BIT_STRING *failure_info; -} TS_STATUS_INFO; - -DECLARE_STACK_OF(ASN1_UTF8STRING) -DECLARE_ASN1_SET_OF(ASN1_UTF8STRING) - -/*- -TimeStampResp ::= SEQUENCE { - status PKIStatusInfo, - timeStampToken TimeStampToken OPTIONAL } -*/ - -typedef struct TS_resp_st { - TS_STATUS_INFO *status_info; - PKCS7 *token; - TS_TST_INFO *tst_info; -} TS_RESP; - -/* The structure below would belong to the ESS component. */ - -/*- -IssuerSerial ::= SEQUENCE { - issuer GeneralNames, - serialNumber CertificateSerialNumber - } -*/ - -typedef struct ESS_issuer_serial { - STACK_OF(GENERAL_NAME) *issuer; - ASN1_INTEGER *serial; -} ESS_ISSUER_SERIAL; - -/*- -ESSCertID ::= SEQUENCE { - certHash Hash, - issuerSerial IssuerSerial OPTIONAL -} -*/ - -typedef struct ESS_cert_id { - ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ - ESS_ISSUER_SERIAL *issuer_serial; -} ESS_CERT_ID; - -DECLARE_STACK_OF(ESS_CERT_ID) -DECLARE_ASN1_SET_OF(ESS_CERT_ID) - -/*- -SigningCertificate ::= SEQUENCE { - certs SEQUENCE OF ESSCertID, - policies SEQUENCE OF PolicyInformation OPTIONAL -} -*/ - -typedef struct ESS_signing_cert { - STACK_OF(ESS_CERT_ID) *cert_ids; - STACK_OF(POLICYINFO) *policy_info; -} ESS_SIGNING_CERT; - -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); - -TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); -TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); - -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a); - -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); - -TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); -TS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *fp, TS_RESP *a); - -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); - -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); - -TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); -TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a); - -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -void ERR_load_TS_strings(void); - -int TS_REQ_set_version(TS_REQ *a, long version); -long TS_REQ_get_version(const TS_REQ *a); - -int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); - -int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); -X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); - -int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); -ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); - -int TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy); -ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); - -int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); - -int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); -int TS_REQ_get_cert_req(const TS_REQ *a); - -STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); -void TS_REQ_ext_free(TS_REQ *a); -int TS_REQ_get_ext_count(TS_REQ *a); -int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); -int TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos); -int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); -X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); -X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); -int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); -void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); - -/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ - -int TS_REQ_print_bio(BIO *bio, TS_REQ *a); - -/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ - -int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); -TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); - -/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ -void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); -PKCS7 *TS_RESP_get_token(TS_RESP *a); -TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); - -int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); -long TS_TST_INFO_get_version(const TS_TST_INFO *a); - -int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); -ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); - -int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); - -int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); -const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); - -int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); -const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); - -int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); -TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); - -int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); -const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); - -int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); -const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); - -int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); -const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); - -int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); -int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); - -int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); - -int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); -GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); - -STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); -void TS_TST_INFO_ext_free(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); -int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos); -int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); -X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); -X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); -int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); -void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); - -/* - * Declarations related to response generation, defined in ts/ts_resp_sign.c. - */ - -/* Optional flags for response generation. */ - -/* Don't include the TSA name in response. */ -# define TS_TSA_NAME 0x01 - -/* Set ordering to true in response. */ -# define TS_ORDERING 0x02 - -/* - * Include the signer certificate and the other specified certificates in - * the ESS signing certificate attribute beside the PKCS7 signed data. - * Only the signer certificates is included by default. - */ -# define TS_ESS_CERT_ID_CHAIN 0x04 - -/* Forward declaration. */ -struct TS_resp_ctx; - -/* This must return a unique number less than 160 bits long. */ -typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); - -/* - * This must return the seconds and microseconds since Jan 1, 1970 in the sec - * and usec variables allocated by the caller. Return non-zero for success - * and zero for failure. - */ -typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, - long *usec); - -/* - * This must process the given extension. It can modify the TS_TST_INFO - * object of the context. Return values: !0 (processed), 0 (error, it must - * set the status info/failure info of the response). - */ -typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, - void *); - -typedef struct TS_resp_ctx { - X509 *signer_cert; - EVP_PKEY *signer_key; - STACK_OF(X509) *certs; /* Certs to include in signed data. */ - STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ - ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ - STACK_OF(EVP_MD) *mds; /* Acceptable message digests. */ - ASN1_INTEGER *seconds; /* accuracy, 0 means not specified. */ - ASN1_INTEGER *millis; /* accuracy, 0 means not specified. */ - ASN1_INTEGER *micros; /* accuracy, 0 means not specified. */ - unsigned clock_precision_digits; /* fraction of seconds in time stamp - * token. */ - unsigned flags; /* Optional info, see values above. */ - /* Callback functions. */ - TS_serial_cb serial_cb; - void *serial_cb_data; /* User data for serial_cb. */ - TS_time_cb time_cb; - void *time_cb_data; /* User data for time_cb. */ - TS_extension_cb extension_cb; - void *extension_cb_data; /* User data for extension_cb. */ - /* These members are used only while creating the response. */ - TS_REQ *request; - TS_RESP *response; - TS_TST_INFO *tst_info; -} TS_RESP_CTX; - -DECLARE_STACK_OF(EVP_MD) -DECLARE_ASN1_SET_OF(EVP_MD) - -/* Creates a response context that can be used for generating responses. */ -TS_RESP_CTX *TS_RESP_CTX_new(void); -void TS_RESP_CTX_free(TS_RESP_CTX *ctx); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy); - -/* No additional certs are included in the response by default. */ -int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); - -/* - * Adds a new acceptable policy, only the default policy is accepted by - * default. - */ -int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy); - -/* - * Adds a new acceptable message digest. Note that no message digests are - * accepted by default. The md argument is shared with the caller. - */ -int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* Accuracy is not included by default. */ -int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, - int secs, int millis, int micros); - -/* - * Clock precision digits, i.e. the number of decimal digits: '0' means sec, - * '3' msec, '6' usec, and so on. Default is 0. - */ -int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, - unsigned clock_precision_digits); -/* At most we accept usec precision. */ -# define TS_MAX_CLOCK_PRECISION_DIGITS 6 - -/* Maximum status message length */ -# define TS_MAX_STATUS_LENGTH (1024 * 1024) - -/* No flags are set by default. */ -void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); - -/* Default callback always returns a constant. */ -void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); - -/* Default callback uses the gettimeofday() and gmtime() system calls. */ -void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); - -/* - * Default callback rejects all extensions. The extension callback is called - * when the TS_TST_INFO object is already set up and not signed yet. - */ -/* FIXME: extension handling is not tested yet. */ -void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, - TS_extension_cb cb, void *data); - -/* The following methods can be used in the callbacks. */ -int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, - int status, const char *text); - -/* Sets the status info only if it is still TS_STATUS_GRANTED. */ -int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, - int status, const char *text); - -int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); - -/* The get methods below can be used in the extension callback. */ -TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); - -TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); - -/* - * Creates the signed TS_TST_INFO and puts it in TS_RESP. - * In case of errors it sets the status info properly. - * Returns NULL only in case of memory allocation/fatal error. - */ -TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); - -/* - * Declarations related to response verification, - * they are defined in ts/ts_resp_verify.c. - */ - -int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, - X509_STORE *store, X509 **signer_out); - -/* Context structure for the generic verify method. */ - -/* Verify the signer's certificate and the signature of the response. */ -# define TS_VFY_SIGNATURE (1u << 0) -/* Verify the version number of the response. */ -# define TS_VFY_VERSION (1u << 1) -/* Verify if the policy supplied by the user matches the policy of the TSA. */ -# define TS_VFY_POLICY (1u << 2) -/* - * Verify the message imprint provided by the user. This flag should not be - * specified with TS_VFY_DATA. - */ -# define TS_VFY_IMPRINT (1u << 3) -/* - * Verify the message imprint computed by the verify method from the user - * provided data and the MD algorithm of the response. This flag should not - * be specified with TS_VFY_IMPRINT. - */ -# define TS_VFY_DATA (1u << 4) -/* Verify the nonce value. */ -# define TS_VFY_NONCE (1u << 5) -/* Verify if the TSA name field matches the signer certificate. */ -# define TS_VFY_SIGNER (1u << 6) -/* Verify if the TSA name field equals to the user provided name. */ -# define TS_VFY_TSA_NAME (1u << 7) - -/* You can use the following convenience constants. */ -# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_IMPRINT \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) -# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_DATA \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) - -typedef struct TS_verify_ctx { - /* Set this to the union of TS_VFY_... flags you want to carry out. */ - unsigned flags; - /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */ - X509_STORE *store; - STACK_OF(X509) *certs; - /* Must be set only with TS_VFY_POLICY. */ - ASN1_OBJECT *policy; - /* - * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the - * algorithm from the response is used. - */ - X509_ALGOR *md_alg; - unsigned char *imprint; - unsigned imprint_len; - /* Must be set only with TS_VFY_DATA. */ - BIO *data; - /* Must be set only with TS_VFY_TSA_NAME. */ - ASN1_INTEGER *nonce; - /* Must be set only with TS_VFY_TSA_NAME. */ - GENERAL_NAME *tsa_name; -} TS_VERIFY_CTX; - -int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); -int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); - -/* - * Declarations related to response verification context, - * they are defined in ts/ts_verify_ctx.c. - */ - -/* Set all fields to zero. */ -TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); -void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); - -/*- - * If ctx is NULL, it allocates and returns a new object, otherwise - * it returns ctx. It initialises all the members as follows: - * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) - * certs = NULL - * store = NULL - * policy = policy from the request or NULL if absent (in this case - * TS_VFY_POLICY is cleared from flags as well) - * md_alg = MD algorithm from request - * imprint, imprint_len = imprint from request - * data = NULL - * nonce, nonce_len = nonce from the request or NULL if absent (in this case - * TS_VFY_NONCE is cleared from flags as well) - * tsa_name = NULL - * Important: after calling this method TS_VFY_SIGNATURE should be added! - */ -TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); - -/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ - -int TS_RESP_print_bio(BIO *bio, TS_RESP *a); -int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); -int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); - -/* Common utility functions defined in ts/ts_lib.c */ - -int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); -int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); -int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); -int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); -int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); - -/* - * Function declarations for handling configuration options, defined in - * ts/ts_conf.c - */ - -X509 *TS_CONF_load_cert(const char *file); -STACK_OF(X509) *TS_CONF_load_certs(const char *file); -EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); -const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); -int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, - TS_RESP_CTX *ctx); -int TS_CONF_set_crypto_device(CONF *conf, const char *section, - const char *device); -int TS_CONF_set_default_engine(const char *name); -int TS_CONF_set_signer_cert(CONF *conf, const char *section, - const char *cert, TS_RESP_CTX *ctx); -int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_key(CONF *conf, const char *section, - const char *key, const char *pass, - TS_RESP_CTX *ctx); -int TS_CONF_set_def_policy(CONF *conf, const char *section, - const char *policy, TS_RESP_CTX *ctx); -int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, - TS_RESP_CTX *ctx); - -/* -------------------------------------------------- */ -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_TS_strings(void); - -/* Error codes for the TS functions. */ - -/* Function codes. */ -# define TS_F_D2I_TS_RESP 147 -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_RESP_VERIFY_TOKEN 107 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 - -/* Reason codes. */ -# define TS_R_BAD_PKCS7_TYPE 132 -# define TS_R_BAD_TYPE 133 -# define TS_R_CERTIFICATE_VERIFY_ERROR 100 -# define TS_R_COULD_NOT_SET_ENGINE 127 -# define TS_R_COULD_NOT_SET_TIME 115 -# define TS_R_D2I_TS_RESP_INT_FAILED 128 -# define TS_R_DETACHED_CONTENT 134 -# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 -# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 -# define TS_R_INVALID_NULL_POINTER 102 -# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 -# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 -# define TS_R_NONCE_MISMATCH 104 -# define TS_R_NONCE_NOT_RETURNED 105 -# define TS_R_NO_CONTENT 106 -# define TS_R_NO_TIME_STAMP_TOKEN 107 -# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 -# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 -# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 -# define TS_R_POLICY_MISMATCH 108 -# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 -# define TS_R_RESPONSE_SETUP_ERROR 121 -# define TS_R_SIGNATURE_FAILURE 109 -# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 -# define TS_R_TIME_SYSCALL_ERROR 122 -# define TS_R_TOKEN_NOT_PRESENT 130 -# define TS_R_TOKEN_PRESENT 131 -# define TS_R_TSA_NAME_MISMATCH 111 -# define TS_R_TSA_UNTRUSTED 112 -# define TS_R_TST_INFO_SETUP_ERROR 123 -# define TS_R_TS_DATASIGN 124 -# define TS_R_UNACCEPTABLE_POLICY 125 -# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 -# define TS_R_UNSUPPORTED_VERSION 113 -# define TS_R_WRONG_CONTENT_TYPE 114 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/txt_db.h b/ext/openssl/windows/x86/include/openssl/txt_db.h deleted file mode 100644 index 98e23a20..00000000 --- a/ext/openssl/windows/x86/include/openssl/txt_db.h +++ /dev/null @@ -1,112 +0,0 @@ -/* crypto/txt_db/txt_db.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H - -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include - -# define DB_ERROR_OK 0 -# define DB_ERROR_MALLOC 1 -# define DB_ERROR_INDEX_CLASH 2 -# define DB_ERROR_INDEX_OUT_OF_RANGE 3 -# define DB_ERROR_NO_INDEX 4 -# define DB_ERROR_INSERT_INDEX_CLASH 5 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef OPENSSL_STRING *OPENSSL_PSTRING; -DECLARE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) - -typedef struct txt_db_st { - int num_fields; - STACK_OF(OPENSSL_PSTRING) *data; - LHASH_OF(OPENSSL_STRING) **index; - int (**qual) (OPENSSL_STRING *); - long error; - long arg1; - long arg2; - OPENSSL_STRING *arg_row; -} TXT_DB; - -# ifndef OPENSSL_NO_BIO -TXT_DB *TXT_DB_read(BIO *in, int num); -long TXT_DB_write(BIO *out, TXT_DB *db); -# else -TXT_DB *TXT_DB_read(char *in, int num); -long TXT_DB_write(char *out, TXT_DB *db); -# endif -int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), - LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp); -void TXT_DB_free(TXT_DB *db); -OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, - OPENSSL_STRING *value); -int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ui.h b/ext/openssl/windows/x86/include/openssl/ui.h deleted file mode 100644 index 0dc16330..00000000 --- a/ext/openssl/windows/x86/include/openssl/ui.h +++ /dev/null @@ -1,415 +0,0 @@ -/* crypto/ui/ui.h */ -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_UI_H -# define HEADER_UI_H - -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Declared already in ossl_typ.h */ -/* typedef struct ui_st UI; */ -/* typedef struct ui_method_st UI_METHOD; */ - -/* - * All the following functions return -1 or NULL on error and in some cases - * (UI_process()) -2 if interrupted or in some other way cancelled. When - * everything is fine, they return 0, a positive value or a non-NULL pointer, - * all depending on their purpose. - */ - -/* Creators and destructor. */ -UI *UI_new(void); -UI *UI_new_method(const UI_METHOD *method); -void UI_free(UI *ui); - -/*- - The following functions are used to add strings to be printed and prompt - strings to prompt for data. The names are UI_{add,dup}__string - and UI_{add,dup}_input_boolean. - - UI_{add,dup}__string have the following meanings: - add add a text or prompt string. The pointers given to these - functions are used verbatim, no copying is done. - dup make a copy of the text or prompt string, then add the copy - to the collection of strings in the user interface. - - The function is a name for the functionality that the given - string shall be used for. It can be one of: - input use the string as data prompt. - verify use the string as verification prompt. This - is used to verify a previous input. - info use the string for informational output. - error use the string for error output. - Honestly, there's currently no difference between info and error for the - moment. - - UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", - and are typically used when one wants to prompt for a yes/no response. - - All of the functions in this group take a UI and a prompt string. - The string input and verify addition functions also take a flag argument, - a buffer for the result to end up with, a minimum input size and a maximum - input size (the result buffer MUST be large enough to be able to contain - the maximum number of characters). Additionally, the verify addition - functions takes another buffer to compare the result against. - The boolean input functions take an action description string (which should - be safe to ignore if the expected user action is obvious, for example with - a dialog box with an OK button and a Cancel button), a string of acceptable - characters to mean OK and to mean Cancel. The two last strings are checked - to make sure they don't have common characters. Additionally, the same - flag argument as for the string input is taken, as well as a result buffer. - The result buffer is required to be at least one byte long. Depending on - the answer, the first character from the OK or the Cancel character strings - will be stored in the first byte of the result buffer. No NUL will be - added, so the result is *not* a string. - - On success, the all return an index of the added information. That index - is usefull when retrieving results with UI_get0_result(). */ -int UI_add_input_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize); -int UI_dup_input_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize); -int UI_add_verify_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize, - const char *test_buf); -int UI_dup_verify_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize, - const char *test_buf); -int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, - const char *ok_chars, const char *cancel_chars, - int flags, char *result_buf); -int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, - const char *ok_chars, const char *cancel_chars, - int flags, char *result_buf); -int UI_add_info_string(UI *ui, const char *text); -int UI_dup_info_string(UI *ui, const char *text); -int UI_add_error_string(UI *ui, const char *text); -int UI_dup_error_string(UI *ui, const char *text); - -/* These are the possible flags. They can be or'ed together. */ -/* Use to have echoing of input */ -# define UI_INPUT_FLAG_ECHO 0x01 -/* - * Use a default password. Where that password is found is completely up to - * the application, it might for example be in the user data set with - * UI_add_user_data(). It is not recommended to have more than one input in - * each UI being marked with this flag, or the application might get - * confused. - */ -# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 - -/*- - * The user of these routines may want to define flags of their own. The core - * UI won't look at those, but will pass them on to the method routines. They - * must use higher bits so they don't get confused with the UI bits above. - * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good - * example of use is this: - * - * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) - * -*/ -# define UI_INPUT_FLAG_USER_BASE 16 - -/*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. - * The returned string shall always be allocated on the heap with - * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). - * - * If the ui_method doesn't contain a pointer to a user-defined prompt - * constructor, a default string is built, looking like this: - * - * "Enter {object_desc} for {object_name}:" - * - * So, if object_desc has the value "pass phrase" and object_name has - * the value "foo.key", the resulting string is: - * - * "Enter pass phrase for foo.key:" -*/ -char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); - -/* - * The following function is used to store a pointer to user-specific data. - * Any previous such pointer will be returned and replaced. - * - * For callback purposes, this function makes a lot more sense than using - * ex_data, since the latter requires that different parts of OpenSSL or - * applications share the same ex_data index. - * - * Note that the UI_OpenSSL() method completely ignores the user data. Other - * methods may not, however. - */ -void *UI_add_user_data(UI *ui, void *user_data); -/* We need a user data retrieving function as well. */ -void *UI_get0_user_data(UI *ui); - -/* Return the result associated with a prompt given with the index i. */ -const char *UI_get0_result(UI *ui, int i); - -/* When all strings have been added, process the whole thing. */ -int UI_process(UI *ui); - -/* - * Give a user interface parametrised control commands. This can be used to - * send down an integer, a data pointer or a function pointer, as well as be - * used to get information from a UI. - */ -int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); - -/* The commands */ -/* - * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the - * OpenSSL error stack before printing any info or added error messages and - * before any prompting. - */ -# define UI_CTRL_PRINT_ERRORS 1 -/* - * Check if a UI_process() is possible to do again with the same instance of - * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 - * if not. - */ -# define UI_CTRL_IS_REDOABLE 2 - -/* Some methods may use extra data */ -# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) -# define UI_get_app_data(s) UI_get_ex_data(s,0) -int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); - -/* Use specific methods instead of the built-in one */ -void UI_set_default_method(const UI_METHOD *meth); -const UI_METHOD *UI_get_default_method(void); -const UI_METHOD *UI_get_method(UI *ui); -const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); - -/* The method with all the built-in thingies */ -UI_METHOD *UI_OpenSSL(void); - -/* ---------- For method writers ---------- */ -/*- - A method contains a number of functions that implement the low level - of the User Interface. The functions are: - - an opener This function starts a session, maybe by opening - a channel to a tty, or by opening a window. - a writer This function is called to write a given string, - maybe to the tty, maybe as a field label in a - window. - a flusher This function is called to flush everything that - has been output so far. It can be used to actually - display a dialog box after it has been built. - a reader This function is called to read a given prompt, - maybe from the tty, maybe from a field in a - window. Note that it's called wth all string - structures, not only the prompt ones, so it must - check such things itself. - a closer This function closes the session, maybe by closing - the channel to the tty, or closing the window. - - All these functions are expected to return: - - 0 on error. - 1 on success. - -1 on out-of-band events, for example if some prompting has - been canceled (by pressing Ctrl-C, for example). This is - only checked when returned by the flusher or the reader. - - The way this is used, the opener is first called, then the writer for all - strings, then the flusher, then the reader for all strings and finally the - closer. Note that if you want to prompt from a terminal or other command - line interface, the best is to have the reader also write the prompts - instead of having the writer do it. If you want to prompt from a dialog - box, the writer can be used to build up the contents of the box, and the - flusher to actually display the box and run the event loop until all data - has been given, after which the reader only grabs the given data and puts - them back into the UI strings. - - All method functions take a UI as argument. Additionally, the writer and - the reader take a UI_STRING. -*/ - -/* - * The UI_STRING type is the data structure that contains all the needed info - * about a string or a prompt, including test data for a verification prompt. - */ -typedef struct ui_string_st UI_STRING; -DECLARE_STACK_OF(UI_STRING) - -/* - * The different types of strings that are currently supported. This is only - * needed by method authors. - */ -enum UI_string_types { - UIT_NONE = 0, - UIT_PROMPT, /* Prompt for a string */ - UIT_VERIFY, /* Prompt for a string and verify */ - UIT_BOOLEAN, /* Prompt for a yes/no response */ - UIT_INFO, /* Send info to the user */ - UIT_ERROR /* Send an error message to the user */ -}; - -/* Create and manipulate methods */ -UI_METHOD *UI_create_method(char *name); -void UI_destroy_method(UI_METHOD *ui_method); -int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); -int UI_method_set_writer(UI_METHOD *method, - int (*writer) (UI *ui, UI_STRING *uis)); -int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); -int UI_method_set_reader(UI_METHOD *method, - int (*reader) (UI *ui, UI_STRING *uis)); -int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); -int UI_method_set_prompt_constructor(UI_METHOD *method, - char *(*prompt_constructor) (UI *ui, - const char - *object_desc, - const char - *object_name)); -int (*UI_method_get_opener(UI_METHOD *method)) (UI *); -int (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_flusher(UI_METHOD *method)) (UI *); -int (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_closer(UI_METHOD *method)) (UI *); -char *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *, - const char *, - const char *); - -/* - * The following functions are helpers for method writers to access relevant - * data from a UI_STRING. - */ - -/* Return type of the UI_STRING */ -enum UI_string_types UI_get_string_type(UI_STRING *uis); -/* Return input flags of the UI_STRING */ -int UI_get_input_flags(UI_STRING *uis); -/* Return the actual string to output (the prompt, info or error) */ -const char *UI_get0_output_string(UI_STRING *uis); -/* - * Return the optional action string to output (the boolean promtp - * instruction) - */ -const char *UI_get0_action_string(UI_STRING *uis); -/* Return the result of a prompt */ -const char *UI_get0_result_string(UI_STRING *uis); -/* - * Return the string to test the result against. Only useful with verifies. - */ -const char *UI_get0_test_string(UI_STRING *uis); -/* Return the required minimum size of the result */ -int UI_get_result_minsize(UI_STRING *uis); -/* Return the required maximum size of the result */ -int UI_get_result_maxsize(UI_STRING *uis); -/* Set the result of a UI_STRING. */ -int UI_set_result(UI *ui, UI_STRING *uis, const char *result); - -/* A couple of popular utility functions */ -int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, - int verify); -int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, - int verify); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_UI_strings(void); - -/* Error codes for the UI functions. */ - -/* Function codes. */ -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_GENERAL_ALLOCATE_STRING 100 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_SET_RESULT 105 - -/* Reason codes. */ -# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 -# define UI_R_INDEX_TOO_LARGE 102 -# define UI_R_INDEX_TOO_SMALL 103 -# define UI_R_NO_RESULT_BUFFER 105 -# define UI_R_RESULT_TOO_LARGE 100 -# define UI_R_RESULT_TOO_SMALL 101 -# define UI_R_UNKNOWN_CONTROL_COMMAND 106 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/ui_compat.h b/ext/openssl/windows/x86/include/openssl/ui_compat.h deleted file mode 100644 index bf541542..00000000 --- a/ext/openssl/windows/x86/include/openssl/ui_compat.h +++ /dev/null @@ -1,88 +0,0 @@ -/* crypto/ui/ui.h */ -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_UI_COMPAT_H -# define HEADER_UI_COMPAT_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * The following functions were previously part of the DES section, and are - * provided here for backward compatibility reasons. - */ - -# define des_read_pw_string(b,l,p,v) \ - _ossl_old_des_read_pw_string((b),(l),(p),(v)) -# define des_read_pw(b,bf,s,p,v) \ - _ossl_old_des_read_pw((b),(bf),(s),(p),(v)) - -int _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt, - int verify); -int _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt, - int verify); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/whrlpool.h b/ext/openssl/windows/x86/include/openssl/whrlpool.h deleted file mode 100644 index 73c749da..00000000 --- a/ext/openssl/windows/x86/include/openssl/whrlpool.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) - -typedef struct { - union { - unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; - /* double q is here to ensure 64-bit alignment */ - double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; - } H; - unsigned char data[WHIRLPOOL_BBLOCK / 8]; - unsigned int bitoff; - size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; -} WHIRLPOOL_CTX; - -# ifndef OPENSSL_NO_WHIRLPOOL -# ifdef OPENSSL_FIPS -int private_WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -# endif -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x86/include/openssl/x509.h b/ext/openssl/windows/x86/include/openssl/x509.h deleted file mode 100644 index 6fa28eba..00000000 --- a/ext/openssl/windows/x86/include/openssl/x509.h +++ /dev/null @@ -1,1330 +0,0 @@ -/* crypto/x509/x509.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_X509_H -# define HEADER_X509_H - -# include -# include -# ifndef OPENSSL_NO_BUFFER -# include -# endif -# ifndef OPENSSL_NO_EVP -# include -# endif -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include -# include - -# ifndef OPENSSL_NO_EC -# include -# endif - -# ifndef OPENSSL_NO_ECDSA -# include -# endif - -# ifndef OPENSSL_NO_ECDH -# include -# endif - -# ifndef OPENSSL_NO_DEPRECATED -# ifndef OPENSSL_NO_RSA -# include -# endif -# ifndef OPENSSL_NO_DSA -# include -# endif -# ifndef OPENSSL_NO_DH -# include -# endif -# endif - -# ifndef OPENSSL_NO_SHA -# include -# endif -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_SYS_WIN32 -/* Under Win32 these are defined in wincrypt.h */ -# undef X509_NAME -# undef X509_CERT_PAIR -# undef X509_EXTENSIONS -# endif - -# define X509_FILETYPE_PEM 1 -# define X509_FILETYPE_ASN1 2 -# define X509_FILETYPE_DEFAULT 3 - -# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 -# define X509v3_KU_NON_REPUDIATION 0x0040 -# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 -# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 -# define X509v3_KU_KEY_AGREEMENT 0x0008 -# define X509v3_KU_KEY_CERT_SIGN 0x0004 -# define X509v3_KU_CRL_SIGN 0x0002 -# define X509v3_KU_ENCIPHER_ONLY 0x0001 -# define X509v3_KU_DECIPHER_ONLY 0x8000 -# define X509v3_KU_UNDEF 0xffff - -typedef struct X509_objects_st { - int nid; - int (*a2i) (void); - int (*i2a) (void); -} X509_OBJECTS; - -struct X509_algor_st { - ASN1_OBJECT *algorithm; - ASN1_TYPE *parameter; -} /* X509_ALGOR */ ; - -DECLARE_ASN1_SET_OF(X509_ALGOR) - -typedef STACK_OF(X509_ALGOR) X509_ALGORS; - -typedef struct X509_val_st { - ASN1_TIME *notBefore; - ASN1_TIME *notAfter; -} X509_VAL; - -struct X509_pubkey_st { - X509_ALGOR *algor; - ASN1_BIT_STRING *public_key; - EVP_PKEY *pkey; -}; - -typedef struct X509_sig_st { - X509_ALGOR *algor; - ASN1_OCTET_STRING *digest; -} X509_SIG; - -typedef struct X509_name_entry_st { - ASN1_OBJECT *object; - ASN1_STRING *value; - int set; - int size; /* temp variable */ -} X509_NAME_ENTRY; - -DECLARE_STACK_OF(X509_NAME_ENTRY) -DECLARE_ASN1_SET_OF(X509_NAME_ENTRY) - -/* we always keep X509_NAMEs in 2 forms. */ -struct X509_name_st { - STACK_OF(X509_NAME_ENTRY) *entries; - int modified; /* true if 'bytes' needs to be built */ -# ifndef OPENSSL_NO_BUFFER - BUF_MEM *bytes; -# else - char *bytes; -# endif -/* unsigned long hash; Keep the hash around for lookups */ - unsigned char *canon_enc; - int canon_enclen; -} /* X509_NAME */ ; - -DECLARE_STACK_OF(X509_NAME) - -# define X509_EX_V_NETSCAPE_HACK 0x8000 -# define X509_EX_V_INIT 0x0001 -typedef struct X509_extension_st { - ASN1_OBJECT *object; - ASN1_BOOLEAN critical; - ASN1_OCTET_STRING *value; -} X509_EXTENSION; - -typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DECLARE_STACK_OF(X509_EXTENSION) -DECLARE_ASN1_SET_OF(X509_EXTENSION) - -/* a sequence of these are used */ -typedef struct x509_attributes_st { - ASN1_OBJECT *object; - int single; /* 0 for a set, 1 for a single item (which is - * wrong) */ - union { - char *ptr; - /* - * 0 - */ STACK_OF(ASN1_TYPE) *set; - /* - * 1 - */ ASN1_TYPE *single; - } value; -} X509_ATTRIBUTE; - -DECLARE_STACK_OF(X509_ATTRIBUTE) -DECLARE_ASN1_SET_OF(X509_ATTRIBUTE) - -typedef struct X509_req_info_st { - ASN1_ENCODING enc; - ASN1_INTEGER *version; - X509_NAME *subject; - X509_PUBKEY *pubkey; - /* d=2 hl=2 l= 0 cons: cont: 00 */ - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ -} X509_REQ_INFO; - -typedef struct X509_req_st { - X509_REQ_INFO *req_info; - X509_ALGOR *sig_alg; - ASN1_BIT_STRING *signature; - int references; -} X509_REQ; - -typedef struct x509_cinf_st { - ASN1_INTEGER *version; /* [ 0 ] default of v1 */ - ASN1_INTEGER *serialNumber; - X509_ALGOR *signature; - X509_NAME *issuer; - X509_VAL *validity; - X509_NAME *subject; - X509_PUBKEY *key; - ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ - ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ - STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ - ASN1_ENCODING enc; -} X509_CINF; - -/* - * This stuff is certificate "auxiliary info" it contains details which are - * useful in certificate stores and databases. When used this is tagged onto - * the end of the certificate itself - */ - -typedef struct x509_cert_aux_st { - STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ - STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ - ASN1_UTF8STRING *alias; /* "friendly name" */ - ASN1_OCTET_STRING *keyid; /* key id of private key */ - STACK_OF(X509_ALGOR) *other; /* other unspecified info */ -} X509_CERT_AUX; - -struct x509_st { - X509_CINF *cert_info; - X509_ALGOR *sig_alg; - ASN1_BIT_STRING *signature; - int valid; - int references; - char *name; - CRYPTO_EX_DATA ex_data; - /* These contain copies of various extension values */ - long ex_pathlen; - long ex_pcpathlen; - unsigned long ex_flags; - unsigned long ex_kusage; - unsigned long ex_xkusage; - unsigned long ex_nscert; - ASN1_OCTET_STRING *skid; - AUTHORITY_KEYID *akid; - X509_POLICY_CACHE *policy_cache; - STACK_OF(DIST_POINT) *crldp; - STACK_OF(GENERAL_NAME) *altname; - NAME_CONSTRAINTS *nc; -# ifndef OPENSSL_NO_RFC3779 - STACK_OF(IPAddressFamily) *rfc3779_addr; - struct ASIdentifiers_st *rfc3779_asid; -# endif -# ifndef OPENSSL_NO_SHA - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; -# endif - X509_CERT_AUX *aux; -} /* X509 */ ; - -DECLARE_STACK_OF(X509) -DECLARE_ASN1_SET_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DECLARE_STACK_OF(X509_TRUST) - -typedef struct x509_cert_pair_st { - X509 *forward; - X509 *reverse; -} X509_CERT_PAIR; - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT -1/* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC 1 -# define X509_TRUST_DYNAMIC_NAME 2 - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - -/* Flags for X509_print_ex() */ - -# define X509_FLAG_COMPAT 0 -# define X509_FLAG_NO_HEADER 1L -# define X509_FLAG_NO_VERSION (1L << 1) -# define X509_FLAG_NO_SERIAL (1L << 2) -# define X509_FLAG_NO_SIGNAME (1L << 3) -# define X509_FLAG_NO_ISSUER (1L << 4) -# define X509_FLAG_NO_VALIDITY (1L << 5) -# define X509_FLAG_NO_SUBJECT (1L << 6) -# define X509_FLAG_NO_PUBKEY (1L << 7) -# define X509_FLAG_NO_EXTENSIONS (1L << 8) -# define X509_FLAG_NO_SIGDUMP (1L << 9) -# define X509_FLAG_NO_AUX (1L << 10) -# define X509_FLAG_NO_ATTRIBUTES (1L << 11) -# define X509_FLAG_NO_IDS (1L << 12) - -/* Flags specific to X509_NAME_print_ex() */ - -/* The field separator information */ - -# define XN_FLAG_SEP_MASK (0xf << 16) - -# define XN_FLAG_COMPAT 0/* Traditional SSLeay: use old - * X509_NAME_print */ -# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ -# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ -# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ -# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ - -# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ - -/* How the field name is shown */ - -# define XN_FLAG_FN_MASK (0x3 << 21) - -# define XN_FLAG_FN_SN 0/* Object short name */ -# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ -# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ -# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ - -# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ - -/* - * This determines if we dump fields we don't recognise: RFC2253 requires - * this. - */ - -# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) - -# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 - * characters */ - -/* Complete set of RFC2253 flags */ - -# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ - XN_FLAG_SEP_COMMA_PLUS | \ - XN_FLAG_DN_REV | \ - XN_FLAG_FN_SN | \ - XN_FLAG_DUMP_UNKNOWN_FIELDS) - -/* readable oneline form */ - -# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ - ASN1_STRFLGS_ESC_QUOTE | \ - XN_FLAG_SEP_CPLUS_SPC | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_SN) - -/* readable multiline form */ - -# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - XN_FLAG_SEP_MULTILINE | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_LN | \ - XN_FLAG_FN_ALIGN) - -struct x509_revoked_st { - ASN1_INTEGER *serialNumber; - ASN1_TIME *revocationDate; - STACK_OF(X509_EXTENSION) /* optional */ *extensions; - /* Set up if indirect CRL */ - STACK_OF(GENERAL_NAME) *issuer; - /* Revocation reason */ - int reason; - int sequence; /* load sequence */ -}; - -DECLARE_STACK_OF(X509_REVOKED) -DECLARE_ASN1_SET_OF(X509_REVOKED) - -typedef struct X509_crl_info_st { - ASN1_INTEGER *version; - X509_ALGOR *sig_alg; - X509_NAME *issuer; - ASN1_TIME *lastUpdate; - ASN1_TIME *nextUpdate; - STACK_OF(X509_REVOKED) *revoked; - STACK_OF(X509_EXTENSION) /* [0] */ *extensions; - ASN1_ENCODING enc; -} X509_CRL_INFO; - -struct X509_crl_st { - /* actual signature */ - X509_CRL_INFO *crl; - X509_ALGOR *sig_alg; - ASN1_BIT_STRING *signature; - int references; - int flags; - /* Copies of various extensions */ - AUTHORITY_KEYID *akid; - ISSUING_DIST_POINT *idp; - /* Convenient breakdown of IDP */ - int idp_flags; - int idp_reasons; - /* CRL and base CRL numbers for delta processing */ - ASN1_INTEGER *crl_number; - ASN1_INTEGER *base_crl_number; -# ifndef OPENSSL_NO_SHA - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; -# endif - STACK_OF(GENERAL_NAMES) *issuers; - const X509_CRL_METHOD *meth; - void *meth_data; -} /* X509_CRL */ ; - -DECLARE_STACK_OF(X509_CRL) -DECLARE_ASN1_SET_OF(X509_CRL) - -typedef struct private_key_st { - int version; - /* The PKCS#8 data types */ - X509_ALGOR *enc_algor; - ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ - /* When decrypted, the following will not be NULL */ - EVP_PKEY *dec_pkey; - /* used to encrypt and decrypt */ - int key_length; - char *key_data; - int key_free; /* true if we should auto free key_data */ - /* expanded version of 'enc_algor' */ - EVP_CIPHER_INFO cipher; - int references; -} X509_PKEY; - -# ifndef OPENSSL_NO_EVP -typedef struct X509_info_st { - X509 *x509; - X509_CRL *crl; - X509_PKEY *x_pkey; - EVP_CIPHER_INFO enc_cipher; - int enc_len; - char *enc_data; - int references; -} X509_INFO; - -DECLARE_STACK_OF(X509_INFO) -# endif - -/* - * The next 2 structures and their 8 routines were sent to me by Pat Richard - * and are used to manipulate Netscapes spki structures - - * useful if you are writing a CA web page - */ -typedef struct Netscape_spkac_st { - X509_PUBKEY *pubkey; - ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ -} NETSCAPE_SPKAC; - -typedef struct Netscape_spki_st { - NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ - X509_ALGOR *sig_algor; - ASN1_BIT_STRING *signature; -} NETSCAPE_SPKI; - -/* Netscape certificate sequence structure */ -typedef struct Netscape_certificate_sequence { - ASN1_OBJECT *type; - STACK_OF(X509) *certs; -} NETSCAPE_CERT_SEQUENCE; - -/*- Unused (and iv length is wrong) -typedef struct CBCParameter_st - { - unsigned char iv[8]; - } CBC_PARAM; -*/ - -/* Password based encryption structure */ - -typedef struct PBEPARAM_st { - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *iter; -} PBEPARAM; - -/* Password based encryption V2 structures */ - -typedef struct PBE2PARAM_st { - X509_ALGOR *keyfunc; - X509_ALGOR *encryption; -} PBE2PARAM; - -typedef struct PBKDF2PARAM_st { -/* Usually OCTET STRING but could be anything */ - ASN1_TYPE *salt; - ASN1_INTEGER *iter; - ASN1_INTEGER *keylength; - X509_ALGOR *prf; -} PBKDF2PARAM; - -/* PKCS#8 private key info structure */ - -struct pkcs8_priv_key_info_st { - /* Flag for various broken formats */ - int broken; -# define PKCS8_OK 0 -# define PKCS8_NO_OCTET 1 -# define PKCS8_EMBEDDED_PARAM 2 -# define PKCS8_NS_DB 3 -# define PKCS8_NEG_PRIVKEY 4 - ASN1_INTEGER *version; - X509_ALGOR *pkeyalg; - /* Should be OCTET STRING but some are broken */ - ASN1_TYPE *pkey; - STACK_OF(X509_ATTRIBUTE) *attributes; -}; - -#ifdef __cplusplus -} -#endif - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define X509_EXT_PACK_UNKNOWN 1 -# define X509_EXT_PACK_STRING 2 - -# define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version) -/* #define X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */ -# define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore) -# define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter) -# define X509_extract_key(x) X509_get_pubkey(x)/*****/ -# define X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version) -# define X509_REQ_get_subject_name(x) ((x)->req_info->subject) -# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) -# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) -# define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) - -# define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version) -# define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate) -# define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate) -# define X509_CRL_get_issuer(x) ((x)->crl->issuer) -# define X509_CRL_get_REVOKED(x) ((x)->crl->revoked) - -void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); -X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), - int (*crl_free) (X509_CRL *crl), - int (*crl_lookup) (X509_CRL *crl, - X509_REVOKED **ret, - ASN1_INTEGER *ser, - X509_NAME *issuer), - int (*crl_verify) (X509_CRL *crl, - EVP_PKEY *pk)); -void X509_CRL_METHOD_free(X509_CRL_METHOD *m); - -void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); -void *X509_CRL_get_meth_data(X509_CRL *crl); - -/* - * This one is only used so that a binary form can output, as in - * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) - */ -# define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) - -const char *X509_verify_cert_error_string(long n); - -# ifndef OPENSSL_NO_EVP -int X509_verify(X509 *a, EVP_PKEY *r); - -int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); -int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); -int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); - -NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); -char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); -EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); -int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); - -int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); - -int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); -int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig); - -int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); -int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); - -int X509_pubkey_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -# endif - -# ifndef OPENSSL_NO_FP_API -X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); -X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); -# endif - -# ifndef OPENSSL_NO_BIO -X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); -X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); -# endif - -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); -int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, - void *pval); -void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, - X509_ALGOR *algor); -void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); -int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); - -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); - -int X509_cmp_time(const ASN1_TIME *s, time_t *t); -int X509_cmp_current_time(const ASN1_TIME *s); -ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); -ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, - int offset_day, long offset_sec, time_t *t); -ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); - -const char *X509_get_default_cert_area(void); -const char *X509_get_default_cert_dir(void); -const char *X509_get_default_cert_file(void); -const char *X509_get_default_cert_dir_env(void); -const char *X509_get_default_cert_file_env(void); -const char *X509_get_default_private_dir(void); - -X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); - -DECLARE_ASN1_FUNCTIONS(X509_ALGOR) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) -DECLARE_ASN1_FUNCTIONS(X509_VAL) - -DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) - -int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); -int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); -# endif - -DECLARE_ASN1_FUNCTIONS(X509_SIG) -DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) -DECLARE_ASN1_FUNCTIONS(X509_REQ) - -DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) -X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); - -DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) - -DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) - -DECLARE_ASN1_FUNCTIONS(X509_NAME) - -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(X509_CINF) - -DECLARE_ASN1_FUNCTIONS(X509) -DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) - -DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR) - -int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); - -int i2d_re_X509_tbs(X509 *x, unsigned char **pp); - -void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, - const X509 *x); -int X509_get_signature_nid(const X509 *x); - -int X509_alias_set1(X509 *x, unsigned char *name, int len); -int X509_keyid_set1(X509 *x, unsigned char *id, int len); -unsigned char *X509_alias_get0(X509 *x, int *len); -unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -DECLARE_ASN1_FUNCTIONS(X509_REVOKED) -DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) -DECLARE_ASN1_FUNCTIONS(X509_CRL) - -int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); -int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); -int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); - -X509_PKEY *X509_PKEY_new(void); -void X509_PKEY_free(X509_PKEY *a); -int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp); -X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, - long length); - -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) - -# ifndef OPENSSL_NO_EVP -X509_INFO *X509_INFO_new(void); -void X509_INFO_free(X509_INFO *a); -char *X509_NAME_oneline(X509_NAME *a, char *buf, int size); - -int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - -int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, - unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - -int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, - unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); -int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); -# endif - -int X509_set_version(X509 *x, long version); -int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); -ASN1_INTEGER *X509_get_serialNumber(X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_issuer_name(X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_subject_name(X509 *a); -int X509_set_notBefore(X509 *x, const ASN1_TIME *tm); -int X509_set_notAfter(X509 *x, const ASN1_TIME *tm); -int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); -EVP_PKEY *X509_get_pubkey(X509 *x); -ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ ); - -int X509_REQ_set_version(X509_REQ *x, long version); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); -int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); -EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -int X509_REQ_extension_nid(int nid); -int *X509_REQ_get_extension_nids(void); -void X509_REQ_set_extension_nids(int *nids); -STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); -int X509_REQ_get_attr_count(const X509_REQ *req); -int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); -int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); -X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); -int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); -int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_NID(X509_REQ *req, - int nid, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_txt(X509_REQ *req, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); -int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_sort(X509_CRL *crl); - -int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); -int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); - -X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, - EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); - -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); - -int X509_check_private_key(X509 *x509, EVP_PKEY *pkey); -int X509_chain_check_suiteb(int *perror_depth, - X509 *x, STACK_OF(X509) *chain, - unsigned long flags); -int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); -STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); - -int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_and_serial_hash(X509 *a); - -int X509_issuer_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_name_hash(X509 *a); - -int X509_subject_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_subject_name_hash(X509 *x); - -# ifndef OPENSSL_NO_MD5 -unsigned long X509_issuer_name_hash_old(X509 *a); -unsigned long X509_subject_name_hash_old(X509 *x); -# endif - -int X509_cmp(const X509 *a, const X509 *b); -int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); - -int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); -int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); -# ifndef OPENSSL_NO_FP_API -int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print_fp(FILE *bp, X509 *x); -int X509_CRL_print_fp(FILE *bp, X509_CRL *x); -int X509_REQ_print_fp(FILE *bp, X509_REQ *req); -int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, - unsigned long flags); -# endif - -# ifndef OPENSSL_NO_BIO -int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); -int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, - unsigned long flags); -int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print(BIO *bp, X509 *x); -int X509_ocspid_print(BIO *bp, X509 *x); -int X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent); -int X509_CRL_print(BIO *bp, X509_CRL *x); -int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, - unsigned long cflag); -int X509_REQ_print(BIO *bp, X509_REQ *req); -# endif - -int X509_NAME_entry_count(X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, - char *buf, int len); - -/* - * NOTE: you should be passsing -1, not 0 as lastpos. The functions that use - * lastpos, search after that position on. - */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, - int lastpos); -X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc); -X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); -int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, - int loc, int set); -int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, - unsigned char *bytes, int len, int loc, - int set); -int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, - unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, - const char *field, int type, - const unsigned char *bytes, - int len); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, - int type, unsigned char *bytes, - int len); -int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, - const unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, - ASN1_OBJECT *obj, int type, - const unsigned char *bytes, - int len); -int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj); -int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, - const unsigned char *bytes, int len); -ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); -ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); - -int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); -int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, - int nid, int lastpos); -int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, - ASN1_OBJECT *obj, int lastpos); -int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, - int crit, int lastpos); -X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); -X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); -STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, - X509_EXTENSION *ex, int loc); - -int X509_get_ext_count(X509 *x); -int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); -int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos); -int X509_get_ext_by_critical(X509 *x, int crit, int lastpos); -X509_EXTENSION *X509_get_ext(X509 *x, int loc); -X509_EXTENSION *X509_delete_ext(X509 *x, int loc); -int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); -void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx); -int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_CRL_get_ext_count(X509_CRL *x); -int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); -int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos); -int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos); -X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); -X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); -int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); -void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx); -int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_REVOKED_get_ext_count(X509_REVOKED *x); -int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); -int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj, - int lastpos); -int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos); -X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); -X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); -int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); -void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx); -int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, - unsigned long flags); - -X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, - int nid, int crit, - ASN1_OCTET_STRING *data); -X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, - ASN1_OBJECT *obj, int crit, - ASN1_OCTET_STRING *data); -int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj); -int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); -int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); -ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); -ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); -int X509_EXTENSION_get_critical(X509_EXTENSION *ex); - -int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); -int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, - int lastpos); -int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, - ASN1_OBJECT *obj, int lastpos); -X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); -X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, - X509_ATTRIBUTE *attr); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) - **x, const ASN1_OBJECT *obj, - int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) - **x, int nid, int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) - **x, const char *attrname, - int type, - const unsigned char *bytes, - int len); -void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj, - int lastpos, int type); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, - const ASN1_OBJECT *obj, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, - const char *atrname, int type, - const unsigned char *bytes, - int len); -int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); -int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, - const void *data, int len); -void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, - void *data); -int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr); -ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); -ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); - -int EVP_PKEY_get_attr_count(const EVP_PKEY *key); -int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); -int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); -X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); -int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); -int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, - int nid, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_verify_cert(X509_STORE_CTX *ctx); - -/* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(PBEPARAM) -DECLARE_ASN1_FUNCTIONS(PBE2PARAM) -DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) - -int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, - const unsigned char *salt, int saltlen); - -X509_ALGOR *PKCS5_pbe_set(int alg, int iter, - const unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen, - unsigned char *aiv, int prf_nid); - -X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, - int prf_nid, int keylen); - -/* PKCS#8 utilities */ - -DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) - -EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken); -PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken); - -int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, - int version, int ptype, void *pval, - unsigned char *penc, int penclen); -int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8); - -int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, - int ptype, void *pval, - unsigned char *penc, int penclen); -int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(X509_TRUST *xp); -char *X509_TRUST_get0_name(X509_TRUST *xp); -int X509_TRUST_get_trust(X509_TRUST *xp); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -void ERR_load_X509_strings(void); - -/* Error codes for the X509 functions. */ - -/* Function codes. */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 106 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_GET 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 - -/* Reason codes. */ -# define X509_R_AKID_MISMATCH 110 -# define X509_R_BAD_X509_FILETYPE 100 -# define X509_R_BASE64_DECODE_ERROR 118 -# define X509_R_CANT_CHECK_DH_KEY 114 -# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 -# define X509_R_CRL_ALREADY_DELTA 127 -# define X509_R_CRL_VERIFY_FAILURE 131 -# define X509_R_ERR_ASN1_LIB 102 -# define X509_R_IDP_MISMATCH 128 -# define X509_R_INVALID_DIRECTORY 113 -# define X509_R_INVALID_FIELD_NAME 119 -# define X509_R_INVALID_TRUST 123 -# define X509_R_ISSUER_MISMATCH 129 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 -# define X509_R_NO_CRL_NUMBER 130 -# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 -# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 -# define X509_R_SHOULD_RETRY 106 -# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 -# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 -# define X509_R_UNKNOWN_KEY_TYPE 117 -# define X509_R_UNKNOWN_NID 109 -# define X509_R_UNKNOWN_PURPOSE_ID 121 -# define X509_R_UNKNOWN_TRUST_ID 120 -# define X509_R_UNSUPPORTED_ALGORITHM 111 -# define X509_R_WRONG_LOOKUP_TYPE 112 -# define X509_R_WRONG_TYPE 122 - -# ifdef __cplusplus -} -# endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/x509_vfy.h b/ext/openssl/windows/x86/include/openssl/x509_vfy.h deleted file mode 100644 index 50626826..00000000 --- a/ext/openssl/windows/x86/include/openssl/x509_vfy.h +++ /dev/null @@ -1,652 +0,0 @@ -/* crypto/x509/x509_vfy.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_X509_H -# include -/* - * openssl/x509.h ends up #include-ing this file at about the only - * appropriate moment. - */ -#endif - -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H - -# include -# ifndef OPENSSL_NO_LHASH -# include -# endif -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# if 0 -/* Outer object */ -typedef struct x509_hash_dir_st { - int num_dirs; - char **dirs; - int *dirs_type; - int num_dirs_alloced; -} X509_HASH_DIR_CTX; -# endif - -typedef struct x509_file_st { - int num_paths; /* number of paths to files or directories */ - int num_alloced; - char **paths; /* the list of paths or directories */ - int *path_type; -} X509_CERT_FILE_CTX; - -/*******************************/ -/*- -SSL_CTX -> X509_STORE - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -SSL -> X509_STORE_CTX - ->X509_STORE - -The X509_STORE holds the tables etc for verification stuff. -A X509_STORE_CTX is used while validating a single certificate. -The X509_STORE has X509_LOOKUPs for looking up certs. -The X509_STORE then calls a function to actually verify the -certificate chain. -*/ - -# define X509_LU_RETRY -1 -# define X509_LU_FAIL 0 -# define X509_LU_X509 1 -# define X509_LU_CRL 2 -# define X509_LU_PKEY 3 - -typedef struct x509_object_st { - /* one of the above types */ - int type; - union { - char *ptr; - X509 *x509; - X509_CRL *crl; - EVP_PKEY *pkey; - } data; -} X509_OBJECT; - -typedef struct x509_lookup_st X509_LOOKUP; - -DECLARE_STACK_OF(X509_LOOKUP) -DECLARE_STACK_OF(X509_OBJECT) - -/* This is a static that defines the function interface */ -typedef struct x509_lookup_method_st { - const char *name; - int (*new_item) (X509_LOOKUP *ctx); - void (*free) (X509_LOOKUP *ctx); - int (*init) (X509_LOOKUP *ctx); - int (*shutdown) (X509_LOOKUP *ctx); - int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl, - char **ret); - int (*get_by_subject) (X509_LOOKUP *ctx, int type, X509_NAME *name, - X509_OBJECT *ret); - int (*get_by_issuer_serial) (X509_LOOKUP *ctx, int type, X509_NAME *name, - ASN1_INTEGER *serial, X509_OBJECT *ret); - int (*get_by_fingerprint) (X509_LOOKUP *ctx, int type, - unsigned char *bytes, int len, - X509_OBJECT *ret); - int (*get_by_alias) (X509_LOOKUP *ctx, int type, char *str, int len, - X509_OBJECT *ret); -} X509_LOOKUP_METHOD; - -typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; - -/* - * This structure hold all parameters associated with a verify operation by - * including an X509_VERIFY_PARAM structure in related structures the - * parameters used can be customized - */ - -typedef struct X509_VERIFY_PARAM_st { - char *name; - time_t check_time; /* Time to use */ - unsigned long inh_flags; /* Inheritance flags */ - unsigned long flags; /* Various verify flags */ - int purpose; /* purpose to check untrusted certificates */ - int trust; /* trust setting to check */ - int depth; /* Verify depth */ - STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ - X509_VERIFY_PARAM_ID *id; /* opaque ID data */ -} X509_VERIFY_PARAM; - -DECLARE_STACK_OF(X509_VERIFY_PARAM) - -/* - * This is used to hold everything. It is used for all certificate - * validation. Once we have a certificate chain, the 'verify' function is - * then called to actually check the cert chain. - */ -struct x509_store_st { - /* The following is a cache of trusted certs */ - int cache; /* if true, stash any hits */ - STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */ - /* These are external lookup methods */ - STACK_OF(X509_LOOKUP) *get_cert_methods; - X509_VERIFY_PARAM *param; - /* Callbacks for various operations */ - /* called to verify a certificate */ - int (*verify) (X509_STORE_CTX *ctx); - /* error callback */ - int (*verify_cb) (int ok, X509_STORE_CTX *ctx); - /* get issuers cert from ctx */ - int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - /* check issued */ - int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); - /* Check revocation status of chain */ - int (*check_revocation) (X509_STORE_CTX *ctx); - /* retrieve CRL */ - int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); - /* Check CRL validity */ - int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); - /* Check certificate against CRL */ - int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); - int (*cleanup) (X509_STORE_CTX *ctx); - CRYPTO_EX_DATA ex_data; - int references; -} /* X509_STORE */ ; - -int X509_STORE_set_depth(X509_STORE *store, int depth); - -# define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) -# define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) - -/* This is the functions plus an instance of the local variables. */ -struct x509_lookup_st { - int init; /* have we been started */ - int skip; /* don't use us. */ - X509_LOOKUP_METHOD *method; /* the functions */ - char *method_data; /* method data */ - X509_STORE *store_ctx; /* who owns us */ -} /* X509_LOOKUP */ ; - -/* - * This is a used when verifying cert chains. Since the gathering of the - * cert chain can take some time (and have to be 'retried', this needs to be - * kept and passed around. - */ -struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *ctx; - /* used when looking up certs */ - int current_method; - /* The following are set by the caller */ - /* The cert to check */ - X509 *cert; - /* chain of X509s - untrusted - passed in */ - STACK_OF(X509) *untrusted; - /* set of CRLs passed in */ - STACK_OF(X509_CRL) *crls; - X509_VERIFY_PARAM *param; - /* Other info for use with get_issuer() */ - void *other_ctx; - /* Callbacks for various operations */ - /* called to verify a certificate */ - int (*verify) (X509_STORE_CTX *ctx); - /* error callback */ - int (*verify_cb) (int ok, X509_STORE_CTX *ctx); - /* get issuers cert from ctx */ - int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - /* check issued */ - int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); - /* Check revocation status of chain */ - int (*check_revocation) (X509_STORE_CTX *ctx); - /* retrieve CRL */ - int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); - /* Check CRL validity */ - int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); - /* Check certificate against CRL */ - int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); - int (*check_policy) (X509_STORE_CTX *ctx); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); - int (*cleanup) (X509_STORE_CTX *ctx); - /* The following is built up */ - /* if 0, rebuild chain */ - int valid; - /* index of last untrusted cert */ - int last_untrusted; - /* chain of X509s - built up and trusted */ - STACK_OF(X509) *chain; - /* Valid policy tree */ - X509_POLICY_TREE *tree; - /* Require explicit policy value */ - int explicit_policy; - /* When something goes wrong, this is why */ - int error_depth; - int error; - X509 *current_cert; - /* cert currently being tested as valid issuer */ - X509 *current_issuer; - /* current CRL */ - X509_CRL *current_crl; - /* score of current CRL */ - int current_crl_score; - /* Reason mask */ - unsigned int current_reasons; - /* For CRL path validation: parent context */ - X509_STORE_CTX *parent; - CRYPTO_EX_DATA ex_data; -} /* X509_STORE_CTX */ ; - -void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); - -# define X509_STORE_CTX_set_app_data(ctx,data) \ - X509_STORE_CTX_set_ex_data(ctx,0,data) -# define X509_STORE_CTX_get_app_data(ctx) \ - X509_STORE_CTX_get_ex_data(ctx,0) - -# define X509_L_FILE_LOAD 1 -# define X509_L_ADD_DIR 2 - -# define X509_LOOKUP_load_file(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) - -# define X509_LOOKUP_add_dir(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) - -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 - -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 - -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 - -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 - -# define X509_V_ERR_UNNESTED_RESOURCE 46 - -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 - -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 - -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 - -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 65 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 66 - -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 67 - -/* Certificate verify flags */ - -/* Send issuer+subject checks to verify_cb */ -# define X509_V_FLAG_CB_ISSUER_CHECK 0x1 -/* Use check time instead of current time */ -# define X509_V_FLAG_USE_CHECK_TIME 0x2 -/* Lookup CRLs */ -# define X509_V_FLAG_CRL_CHECK 0x4 -/* Lookup CRLs for whole chain */ -# define X509_V_FLAG_CRL_CHECK_ALL 0x8 -/* Ignore unhandled critical extensions */ -# define X509_V_FLAG_IGNORE_CRITICAL 0x10 -/* Disable workarounds for broken certificates */ -# define X509_V_FLAG_X509_STRICT 0x20 -/* Enable proxy certificate validation */ -# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 -/* Enable policy checking */ -# define X509_V_FLAG_POLICY_CHECK 0x80 -/* Policy variable require-explicit-policy */ -# define X509_V_FLAG_EXPLICIT_POLICY 0x100 -/* Policy variable inhibit-any-policy */ -# define X509_V_FLAG_INHIBIT_ANY 0x200 -/* Policy variable inhibit-policy-mapping */ -# define X509_V_FLAG_INHIBIT_MAP 0x400 -/* Notify callback that policy is OK */ -# define X509_V_FLAG_NOTIFY_POLICY 0x800 -/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ -# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 -/* Delta CRL support */ -# define X509_V_FLAG_USE_DELTAS 0x2000 -/* Check selfsigned CA signature */ -# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 -/* Use trusted store first */ -# define X509_V_FLAG_TRUSTED_FIRST 0x8000 -/* Suite B 128 bit only mode: not normally used */ -# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define X509_V_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define X509_V_FLAG_SUITEB_128_LOS 0x30000 - -/* Allow partial chains if at least one certificate is in trusted store */ -# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 -/* - * If the initial chain is not trusted, do not attempt to build an alternative - * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag - * will force the behaviour to match that of previous versions. - */ -# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 - -# define X509_VP_FLAG_DEFAULT 0x1 -# define X509_VP_FLAG_OVERWRITE 0x2 -# define X509_VP_FLAG_RESET_FLAGS 0x4 -# define X509_VP_FLAG_LOCKED 0x8 -# define X509_VP_FLAG_ONCE 0x10 - -/* Internal use: mask of policy related options */ -# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ - | X509_V_FLAG_EXPLICIT_POLICY \ - | X509_V_FLAG_INHIBIT_ANY \ - | X509_V_FLAG_INHIBIT_MAP) - -int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, - X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, - int type, X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, - X509_OBJECT *x); -void X509_OBJECT_up_ref_count(X509_OBJECT *a); -void X509_OBJECT_free_contents(X509_OBJECT *a); -X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); -int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); - -void X509_STORE_set_verify_cb(X509_STORE *ctx, - int (*verify_cb) (int, X509_STORE_CTX *)); - -void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, - STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX - *ctx, - X509_NAME *nm)); - -X509_STORE_CTX *X509_STORE_CTX_new(void); - -int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - -void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); -void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); -void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); - -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); - -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); - -X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); -X509_LOOKUP_METHOD *X509_LOOKUP_file(void); - -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); - -int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, - X509_OBJECT *ret); - -int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, - long argl, char **ret); - -# ifndef OPENSSL_NO_STDIO -int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); -# endif - -X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); -void X509_LOOKUP_free(X509_LOOKUP *ctx); -int X509_LOOKUP_init(X509_LOOKUP *ctx); -int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name, - X509_OBJECT *ret); -int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name, - ASN1_INTEGER *serial, X509_OBJECT *ret); -int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type, - unsigned char *bytes, int len, - X509_OBJECT *ret); -int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len, - X509_OBJECT *ret); -int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); - -# ifndef OPENSSL_NO_STDIO -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); -# endif - -int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, - CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); -void X509_STORE_CTX_set_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); -int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); -int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); -int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, - int purpose, int trust); -void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); -void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, - time_t t); -void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, - int (*verify_cb) (int, X509_STORE_CTX *)); - -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); - -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); -int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); - -/* X509_VERIFY_PARAM functions */ - -X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); -void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); -int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); -int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); -void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); -void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); -int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, - ASN1_OBJECT *policy); -int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, - STACK_OF(ASN1_OBJECT) *policies); - -int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, - const char *name, size_t namelen); -int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, - const char *name, size_t namelen); -void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, - unsigned int flags); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); -int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, - const char *email, size_t emaillen); -int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, - const unsigned char *ip, size_t iplen); -int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, - const char *ipasc); - -int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); -const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); - -int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_get_count(void); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); -void X509_VERIFY_PARAM_table_cleanup(void); - -int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, - STACK_OF(X509) *certs, - STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); - -void X509_policy_tree_free(X509_POLICY_TREE *tree); - -int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); -X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, - int i); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); - -int X509_policy_level_node_count(X509_POLICY_LEVEL *level); - -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, - int i); - -const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); - -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/include/openssl/x509v3.h b/ext/openssl/windows/x86/include/openssl/x509v3.h deleted file mode 100644 index f5c61560..00000000 --- a/ext/openssl/windows/x86/include/openssl/x509v3.h +++ /dev/null @@ -1,1055 +0,0 @@ -/* x509v3.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project - * 1999. - */ -/* ==================================================================== - * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_SYS_WIN32 -/* Under Win32 these are defined in wincrypt.h */ -# undef X509_NAME -# undef X509_CERT_PAIR -# undef X509_EXTENSIONS -# endif - -/* Forward reference */ -struct v3_ext_method; -struct v3_ext_ctx; - -/* Useful typedefs */ - -typedef void *(*X509V3_EXT_NEW)(void); -typedef void (*X509V3_EXT_FREE) (void *); -typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); -typedef STACK_OF(CONF_VALUE) * - (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, - STACK_OF(CONF_VALUE) *extlist); -typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, - STACK_OF(CONF_VALUE) *values); -typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, - void *ext); -typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); -typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, - BIO *out, int indent); -typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); - -/* V3 extension structure */ - -struct v3_ext_method { - int ext_nid; - int ext_flags; -/* If this is set the following four fields are ignored */ - ASN1_ITEM_EXP *it; -/* Old style ASN1 calls */ - X509V3_EXT_NEW ext_new; - X509V3_EXT_FREE ext_free; - X509V3_EXT_D2I d2i; - X509V3_EXT_I2D i2d; -/* The following pair is used for string extensions */ - X509V3_EXT_I2S i2s; - X509V3_EXT_S2I s2i; -/* The following pair is used for multi-valued extensions */ - X509V3_EXT_I2V i2v; - X509V3_EXT_V2I v2i; -/* The following are used for raw extensions */ - X509V3_EXT_I2R i2r; - X509V3_EXT_R2I r2i; - void *usr_data; /* Any extension specific data */ -}; - -typedef struct X509V3_CONF_METHOD_st { - char *(*get_string) (void *db, char *section, char *value); - STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section); - void (*free_string) (void *db, char *string); - void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); -} X509V3_CONF_METHOD; - -/* Context specific info */ -struct v3_ext_ctx { -# define CTX_TEST 0x1 - int flags; - X509 *issuer_cert; - X509 *subject_cert; - X509_REQ *subject_req; - X509_CRL *crl; - X509V3_CONF_METHOD *db_meth; - void *db; -/* Maybe more here */ -}; - -typedef struct v3_ext_method X509V3_EXT_METHOD; - -DECLARE_STACK_OF(X509V3_EXT_METHOD) - -/* ext_flags values */ -# define X509V3_EXT_DYNAMIC 0x1 -# define X509V3_EXT_CTX_DEP 0x2 -# define X509V3_EXT_MULTILINE 0x4 - -typedef BIT_STRING_BITNAME ENUMERATED_NAMES; - -typedef struct BASIC_CONSTRAINTS_st { - int ca; - ASN1_INTEGER *pathlen; -} BASIC_CONSTRAINTS; - -typedef struct PKEY_USAGE_PERIOD_st { - ASN1_GENERALIZEDTIME *notBefore; - ASN1_GENERALIZEDTIME *notAfter; -} PKEY_USAGE_PERIOD; - -typedef struct otherName_st { - ASN1_OBJECT *type_id; - ASN1_TYPE *value; -} OTHERNAME; - -typedef struct EDIPartyName_st { - ASN1_STRING *nameAssigner; - ASN1_STRING *partyName; -} EDIPARTYNAME; - -typedef struct GENERAL_NAME_st { -# define GEN_OTHERNAME 0 -# define GEN_EMAIL 1 -# define GEN_DNS 2 -# define GEN_X400 3 -# define GEN_DIRNAME 4 -# define GEN_EDIPARTY 5 -# define GEN_URI 6 -# define GEN_IPADD 7 -# define GEN_RID 8 - int type; - union { - char *ptr; - OTHERNAME *otherName; /* otherName */ - ASN1_IA5STRING *rfc822Name; - ASN1_IA5STRING *dNSName; - ASN1_TYPE *x400Address; - X509_NAME *directoryName; - EDIPARTYNAME *ediPartyName; - ASN1_IA5STRING *uniformResourceIdentifier; - ASN1_OCTET_STRING *iPAddress; - ASN1_OBJECT *registeredID; - /* Old names */ - ASN1_OCTET_STRING *ip; /* iPAddress */ - X509_NAME *dirn; /* dirn */ - ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, - * uniformResourceIdentifier */ - ASN1_OBJECT *rid; /* registeredID */ - ASN1_TYPE *other; /* x400Address */ - } d; -} GENERAL_NAME; - -typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; - -typedef struct ACCESS_DESCRIPTION_st { - ASN1_OBJECT *method; - GENERAL_NAME *location; -} ACCESS_DESCRIPTION; - -typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - -typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - -DECLARE_STACK_OF(GENERAL_NAME) -DECLARE_ASN1_SET_OF(GENERAL_NAME) - -DECLARE_STACK_OF(ACCESS_DESCRIPTION) -DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) - -typedef struct DIST_POINT_NAME_st { - int type; - union { - GENERAL_NAMES *fullname; - STACK_OF(X509_NAME_ENTRY) *relativename; - } name; -/* If relativename then this contains the full distribution point name */ - X509_NAME *dpname; -} DIST_POINT_NAME; -/* All existing reasons */ -# define CRLDP_ALL_REASONS 0x807f - -# define CRL_REASON_NONE -1 -# define CRL_REASON_UNSPECIFIED 0 -# define CRL_REASON_KEY_COMPROMISE 1 -# define CRL_REASON_CA_COMPROMISE 2 -# define CRL_REASON_AFFILIATION_CHANGED 3 -# define CRL_REASON_SUPERSEDED 4 -# define CRL_REASON_CESSATION_OF_OPERATION 5 -# define CRL_REASON_CERTIFICATE_HOLD 6 -# define CRL_REASON_REMOVE_FROM_CRL 8 -# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 -# define CRL_REASON_AA_COMPROMISE 10 - -struct DIST_POINT_st { - DIST_POINT_NAME *distpoint; - ASN1_BIT_STRING *reasons; - GENERAL_NAMES *CRLissuer; - int dp_reasons; -}; - -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; - -DECLARE_STACK_OF(DIST_POINT) -DECLARE_ASN1_SET_OF(DIST_POINT) - -struct AUTHORITY_KEYID_st { - ASN1_OCTET_STRING *keyid; - GENERAL_NAMES *issuer; - ASN1_INTEGER *serial; -}; - -/* Strong extranet structures */ - -typedef struct SXNET_ID_st { - ASN1_INTEGER *zone; - ASN1_OCTET_STRING *user; -} SXNETID; - -DECLARE_STACK_OF(SXNETID) -DECLARE_ASN1_SET_OF(SXNETID) - -typedef struct SXNET_st { - ASN1_INTEGER *version; - STACK_OF(SXNETID) *ids; -} SXNET; - -typedef struct NOTICEREF_st { - ASN1_STRING *organization; - STACK_OF(ASN1_INTEGER) *noticenos; -} NOTICEREF; - -typedef struct USERNOTICE_st { - NOTICEREF *noticeref; - ASN1_STRING *exptext; -} USERNOTICE; - -typedef struct POLICYQUALINFO_st { - ASN1_OBJECT *pqualid; - union { - ASN1_IA5STRING *cpsuri; - USERNOTICE *usernotice; - ASN1_TYPE *other; - } d; -} POLICYQUALINFO; - -DECLARE_STACK_OF(POLICYQUALINFO) -DECLARE_ASN1_SET_OF(POLICYQUALINFO) - -typedef struct POLICYINFO_st { - ASN1_OBJECT *policyid; - STACK_OF(POLICYQUALINFO) *qualifiers; -} POLICYINFO; - -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; - -DECLARE_STACK_OF(POLICYINFO) -DECLARE_ASN1_SET_OF(POLICYINFO) - -typedef struct POLICY_MAPPING_st { - ASN1_OBJECT *issuerDomainPolicy; - ASN1_OBJECT *subjectDomainPolicy; -} POLICY_MAPPING; - -DECLARE_STACK_OF(POLICY_MAPPING) - -typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; - -typedef struct GENERAL_SUBTREE_st { - GENERAL_NAME *base; - ASN1_INTEGER *minimum; - ASN1_INTEGER *maximum; -} GENERAL_SUBTREE; - -DECLARE_STACK_OF(GENERAL_SUBTREE) - -struct NAME_CONSTRAINTS_st { - STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; - STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; -}; - -typedef struct POLICY_CONSTRAINTS_st { - ASN1_INTEGER *requireExplicitPolicy; - ASN1_INTEGER *inhibitPolicyMapping; -} POLICY_CONSTRAINTS; - -/* Proxy certificate structures, see RFC 3820 */ -typedef struct PROXY_POLICY_st { - ASN1_OBJECT *policyLanguage; - ASN1_OCTET_STRING *policy; -} PROXY_POLICY; - -typedef struct PROXY_CERT_INFO_EXTENSION_st { - ASN1_INTEGER *pcPathLengthConstraint; - PROXY_POLICY *proxyPolicy; -} PROXY_CERT_INFO_EXTENSION; - -DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) -DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) - -struct ISSUING_DIST_POINT_st { - DIST_POINT_NAME *distpoint; - int onlyuser; - int onlyCA; - ASN1_BIT_STRING *onlysomereasons; - int indirectCRL; - int onlyattr; -}; - -/* Values in idp_flags field */ -/* IDP present */ -# define IDP_PRESENT 0x1 -/* IDP values inconsistent */ -# define IDP_INVALID 0x2 -/* onlyuser true */ -# define IDP_ONLYUSER 0x4 -/* onlyCA true */ -# define IDP_ONLYCA 0x8 -/* onlyattr true */ -# define IDP_ONLYATTR 0x10 -/* indirectCRL true */ -# define IDP_INDIRECT 0x20 -/* onlysomereasons present */ -# define IDP_REASONS 0x40 - -# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ -",name:", val->name, ",value:", val->value); - -# define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) -# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; - -# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ - 0,0,0,0, \ - 0,0, \ - (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ - (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ - NULL, NULL, \ - table} - -# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ - 0,0,0,0, \ - (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ - (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ - 0,0,0,0, \ - NULL} - -# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - -/* X509_PURPOSE stuff */ - -# define EXFLAG_BCONS 0x1 -# define EXFLAG_KUSAGE 0x2 -# define EXFLAG_XKUSAGE 0x4 -# define EXFLAG_NSCERT 0x8 - -# define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 -# define EXFLAG_V1 0x40 -# define EXFLAG_INVALID 0x80 -# define EXFLAG_SET 0x100 -# define EXFLAG_CRITICAL 0x200 -# define EXFLAG_PROXY 0x400 - -# define EXFLAG_INVALID_POLICY 0x800 -# define EXFLAG_FRESHEST 0x1000 -/* Self signed */ -# define EXFLAG_SS 0x2000 - -# define KU_DIGITAL_SIGNATURE 0x0080 -# define KU_NON_REPUDIATION 0x0040 -# define KU_KEY_ENCIPHERMENT 0x0020 -# define KU_DATA_ENCIPHERMENT 0x0010 -# define KU_KEY_AGREEMENT 0x0008 -# define KU_KEY_CERT_SIGN 0x0004 -# define KU_CRL_SIGN 0x0002 -# define KU_ENCIPHER_ONLY 0x0001 -# define KU_DECIPHER_ONLY 0x8000 - -# define NS_SSL_CLIENT 0x80 -# define NS_SSL_SERVER 0x40 -# define NS_SMIME 0x20 -# define NS_OBJSIGN 0x10 -# define NS_SSL_CA 0x04 -# define NS_SMIME_CA 0x02 -# define NS_OBJSIGN_CA 0x01 -# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) - -# define XKU_SSL_SERVER 0x1 -# define XKU_SSL_CLIENT 0x2 -# define XKU_SMIME 0x4 -# define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 -# define XKU_OCSP_SIGN 0x20 -# define XKU_TIMESTAMP 0x40 -# define XKU_DVCS 0x80 -# define XKU_ANYEKU 0x100 - -# define X509_PURPOSE_DYNAMIC 0x1 -# define X509_PURPOSE_DYNAMIC_NAME 0x2 - -typedef struct x509_purpose_st { - int purpose; - int trust; /* Default trust ID */ - int flags; - int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); - char *name; - char *sname; - void *usr_data; -} X509_PURPOSE; - -# define X509_PURPOSE_SSL_CLIENT 1 -# define X509_PURPOSE_SSL_SERVER 2 -# define X509_PURPOSE_NS_SSL_SERVER 3 -# define X509_PURPOSE_SMIME_SIGN 4 -# define X509_PURPOSE_SMIME_ENCRYPT 5 -# define X509_PURPOSE_CRL_SIGN 6 -# define X509_PURPOSE_ANY 7 -# define X509_PURPOSE_OCSP_HELPER 8 -# define X509_PURPOSE_TIMESTAMP_SIGN 9 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 9 - -/* Flags for X509V3_EXT_print() */ - -# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) -/* Return error for unknown extensions */ -# define X509V3_EXT_DEFAULT 0 -/* Print error for unknown extensions */ -# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) -/* ASN1 parse unknown extensions */ -# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) -/* BIO_dump unknown extensions */ -# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) - -/* Flags for X509V3_add1_i2d */ - -# define X509V3_ADD_OP_MASK 0xfL -# define X509V3_ADD_DEFAULT 0L -# define X509V3_ADD_APPEND 1L -# define X509V3_ADD_REPLACE 2L -# define X509V3_ADD_REPLACE_EXISTING 3L -# define X509V3_ADD_KEEP_EXISTING 4L -# define X509V3_ADD_DELETE 5L -# define X509V3_ADD_SILENT 0x10 - -DECLARE_STACK_OF(X509_PURPOSE) - -DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) - -DECLARE_ASN1_FUNCTIONS(SXNET) -DECLARE_ASN1_FUNCTIONS(SXNETID) - -int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen); -int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, - int userlen); -int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user, - int userlen); - -ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone); -ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); -ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); - -DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) - -DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); -int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); - -ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, - STACK_OF(CONF_VALUE) *nval); -STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - ASN1_BIT_STRING *bits, - STACK_OF(CONF_VALUE) *extlist); - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, - GENERAL_NAME *gen, - STACK_OF(CONF_VALUE) *ret); -int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, - GENERAL_NAMES *gen, - STACK_OF(CONF_VALUE) *extlist); -GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); - -DECLARE_ASN1_FUNCTIONS(OTHERNAME) -DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) -int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); -void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); -void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype); -int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, - ASN1_OBJECT *oid, ASN1_TYPE *value); -int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, - ASN1_OBJECT **poid, ASN1_TYPE **pvalue); - -char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, - ASN1_OCTET_STRING *ia5); -ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, char *str); - -DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) -int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a); - -DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) -DECLARE_ASN1_FUNCTIONS(POLICYINFO) -DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) -DECLARE_ASN1_FUNCTIONS(USERNOTICE) -DECLARE_ASN1_FUNCTIONS(NOTICEREF) - -DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) -DECLARE_ASN1_FUNCTIONS(DIST_POINT) -DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) -DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) - -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); - -int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); - -DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) -DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) - -DECLARE_ASN1_ITEM(POLICY_MAPPING) -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) -DECLARE_ASN1_ITEM(POLICY_MAPPINGS) - -DECLARE_ASN1_ITEM(GENERAL_SUBTREE) -DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) - -DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) -DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) - -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) -DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) - -GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, int gen_type, char *value, - int is_nc); - -# ifdef HEADER_CONF_H -GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf); -GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf, - int is_nc); -void X509V3_conf_free(CONF_VALUE *val); - -X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, - char *value); -X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, - char *value); -int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, - STACK_OF(X509_EXTENSION) **sk); -int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, - X509 *cert); -int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, - X509_REQ *req); -int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, - X509_CRL *crl); - -X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, - X509V3_CTX *ctx, int ext_nid, - char *value); -X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *name, char *value); -int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *section, X509 *cert); -int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *section, X509_REQ *req); -int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *section, X509_CRL *crl); - -int X509V3_add_value_bool_nf(char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool); -int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint); -void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); -void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); -# endif - -char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section); -STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section); -void X509V3_string_free(X509V3_CTX *ctx, char *str); -void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); -void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, - X509_REQ *req, X509_CRL *crl, int flags); - -int X509V3_add_value(const char *name, const char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_uchar(const char *name, const unsigned char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_bool(const char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, - STACK_OF(CONF_VALUE) **extlist); -char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint); -ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value); -char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); -char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, - ASN1_ENUMERATED *aint); -int X509V3_EXT_add(X509V3_EXT_METHOD *ext); -int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); -int X509V3_EXT_add_alias(int nid_to, int nid_from); -void X509V3_EXT_cleanup(void); - -const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); -const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); -int X509V3_add_standard_extensions(void); -STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); -void *X509V3_EXT_d2i(X509_EXTENSION *ext); -void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, - int *idx); -int X509V3_EXT_free(int nid, void *ext_data); - -X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); -int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, - int crit, unsigned long flags); - -char *hex_to_string(const unsigned char *buffer, long len); -unsigned char *string_to_hex(const char *str, long *len); -int name_cmp(const char *name, const char *cmp); - -void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, - int ml); -int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, - int indent); -int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); - -int X509V3_extensions_print(BIO *out, char *title, - STACK_OF(X509_EXTENSION) *exts, - unsigned long flag, int indent); - -int X509_check_ca(X509 *x); -int X509_check_purpose(X509 *x, int id, int ca); -int X509_supported_extension(X509_EXTENSION *ex); -int X509_PURPOSE_set(int *p, int purpose); -int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); -int X509_PURPOSE_get_count(void); -X509_PURPOSE *X509_PURPOSE_get0(int idx); -int X509_PURPOSE_get_by_sname(char *sname); -int X509_PURPOSE_get_by_id(int id); -int X509_PURPOSE_add(int id, int trust, int flags, - int (*ck) (const X509_PURPOSE *, const X509 *, int), - char *name, char *sname, void *arg); -char *X509_PURPOSE_get0_name(X509_PURPOSE *xp); -char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp); -int X509_PURPOSE_get_trust(X509_PURPOSE *xp); -void X509_PURPOSE_cleanup(void); -int X509_PURPOSE_get_id(X509_PURPOSE *); - -STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); -STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); -void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); -STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); -/* Flags for X509_check_* functions */ - -/* - * Always check subject name for host match even if subject alt names present - */ -# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 -/* Disable wildcard matching for dnsName fields and common name. */ -# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 -/* Wildcards must not match a partial label. */ -# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 -/* Allow (non-partial) wildcards to match multiple labels. */ -# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 -/* Constraint verifier subdomain patterns to match a single labels. */ -# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 -/* - * Match reference identifiers starting with "." to any sub-domain. - * This is a non-public flag, turned on implicitly when the subject - * reference identity is a DNS name. - */ -# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 - -int X509_check_host(X509 *x, const char *chk, size_t chklen, - unsigned int flags, char **peername); -int X509_check_email(X509 *x, const char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); - -ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); -ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); -int a2i_ipadd(unsigned char *ipout, const char *ipasc); -int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, - unsigned long chtype); - -void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DECLARE_STACK_OF(X509_POLICY_NODE) - -# ifndef OPENSSL_NO_RFC3779 - -typedef struct ASRange_st { - ASN1_INTEGER *min, *max; -} ASRange; - -# define ASIdOrRange_id 0 -# define ASIdOrRange_range 1 - -typedef struct ASIdOrRange_st { - int type; - union { - ASN1_INTEGER *id; - ASRange *range; - } u; -} ASIdOrRange; - -typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DECLARE_STACK_OF(ASIdOrRange) - -# define ASIdentifierChoice_inherit 0 -# define ASIdentifierChoice_asIdsOrRanges 1 - -typedef struct ASIdentifierChoice_st { - int type; - union { - ASN1_NULL *inherit; - ASIdOrRanges *asIdsOrRanges; - } u; -} ASIdentifierChoice; - -typedef struct ASIdentifiers_st { - ASIdentifierChoice *asnum, *rdi; -} ASIdentifiers; - -DECLARE_ASN1_FUNCTIONS(ASRange) -DECLARE_ASN1_FUNCTIONS(ASIdOrRange) -DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) -DECLARE_ASN1_FUNCTIONS(ASIdentifiers) - -typedef struct IPAddressRange_st { - ASN1_BIT_STRING *min, *max; -} IPAddressRange; - -# define IPAddressOrRange_addressPrefix 0 -# define IPAddressOrRange_addressRange 1 - -typedef struct IPAddressOrRange_st { - int type; - union { - ASN1_BIT_STRING *addressPrefix; - IPAddressRange *addressRange; - } u; -} IPAddressOrRange; - -typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DECLARE_STACK_OF(IPAddressOrRange) - -# define IPAddressChoice_inherit 0 -# define IPAddressChoice_addressesOrRanges 1 - -typedef struct IPAddressChoice_st { - int type; - union { - ASN1_NULL *inherit; - IPAddressOrRanges *addressesOrRanges; - } u; -} IPAddressChoice; - -typedef struct IPAddressFamily_st { - ASN1_OCTET_STRING *addressFamily; - IPAddressChoice *ipAddressChoice; -} IPAddressFamily; - -typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DECLARE_STACK_OF(IPAddressFamily) - -DECLARE_ASN1_FUNCTIONS(IPAddressRange) -DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) -DECLARE_ASN1_FUNCTIONS(IPAddressChoice) -DECLARE_ASN1_FUNCTIONS(IPAddressFamily) - -/* - * API tag for elements of the ASIdentifer SEQUENCE. - */ -# define V3_ASID_ASNUM 0 -# define V3_ASID_RDI 1 - -/* - * AFI values, assigned by IANA. It'd be nice to make the AFI - * handling code totally generic, but there are too many little things - * that would need to be defined for other address families for it to - * be worth the trouble. - */ -# define IANA_AFI_IPV4 1 -# define IANA_AFI_IPV6 2 - -/* - * Utilities to construct and extract values from RFC3779 extensions, - * since some of the encodings (particularly for IP address prefixes - * and ranges) are a bit tedious to work with directly. - */ -int v3_asid_add_inherit(ASIdentifiers *asid, int which); -int v3_asid_add_id_or_range(ASIdentifiers *asid, int which, - ASN1_INTEGER *min, ASN1_INTEGER *max); -int v3_addr_add_inherit(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi); -int v3_addr_add_prefix(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *a, const int prefixlen); -int v3_addr_add_range(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *min, unsigned char *max); -unsigned v3_addr_get_afi(const IPAddressFamily *f); -int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, - unsigned char *min, unsigned char *max, - const int length); - -/* - * Canonical forms. - */ -int v3_asid_is_canonical(ASIdentifiers *asid); -int v3_addr_is_canonical(IPAddrBlocks *addr); -int v3_asid_canonize(ASIdentifiers *asid); -int v3_addr_canonize(IPAddrBlocks *addr); - -/* - * Tests for inheritance and containment. - */ -int v3_asid_inherits(ASIdentifiers *asid); -int v3_addr_inherits(IPAddrBlocks *addr); -int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); -int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); - -/* - * Check whether RFC 3779 extensions nest properly in chains. - */ -int v3_asid_validate_path(X509_STORE_CTX *); -int v3_addr_validate_path(X509_STORE_CTX *); -int v3_asid_validate_resource_set(STACK_OF(X509) *chain, - ASIdentifiers *ext, int allow_inheritance); -int v3_addr_validate_resource_set(STACK_OF(X509) *chain, - IPAddrBlocks *ext, int allow_inheritance); - -# endif /* OPENSSL_NO_RFC3779 */ - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_X509V3_strings(void); - -/* Error codes for the X509V3 functions. */ - -/* Function codes. */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_CONF 124 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_HEX_TO_STRING 111 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_ASN1_SKEY_ID 114 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_STRING_TO_HEX 113 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL 160 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_CONF 107 -# define X509V3_F_X509V3_EXT_FREE 165 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 - -/* Reason codes. */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# define X509V3_R_CANNOT_FIND_FREE_FUNCTION 168 -# define X509V3_R_DIRNAME_ERROR 149 -# define X509V3_R_DISTPOINT_ALREADY_SET 160 -# define X509V3_R_DUPLICATE_ZONE_ID 133 -# define X509V3_R_ERROR_CONVERTING_ZONE 131 -# define X509V3_R_ERROR_CREATING_EXTENSION 144 -# define X509V3_R_ERROR_IN_EXTENSION 128 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_ILLEGAL_HEX_DIGIT 113 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# define X509V3_R_INVALID_ASNUMBER 162 -# define X509V3_R_INVALID_ASRANGE 163 -# define X509V3_R_INVALID_BOOLEAN_STRING 104 -# define X509V3_R_INVALID_EXTENSION_STRING 105 -# define X509V3_R_INVALID_INHERITANCE 165 -# define X509V3_R_INVALID_IPADDRESS 166 -# define X509V3_R_INVALID_MULTIPLE_RDNS 161 -# define X509V3_R_INVALID_NAME 106 -# define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 -# define X509V3_R_INVALID_NULL_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# define X509V3_R_ISSUER_DECODE_ERROR 126 -# define X509V3_R_MISSING_VALUE 124 -# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 -# define X509V3_R_NO_CONFIG_DATABASE 136 -# define X509V3_R_NO_ISSUER_CERTIFICATE 121 -# define X509V3_R_NO_ISSUER_DETAILS 127 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_ODD_NUMBER_OF_DIGITS 112 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 158 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x86/lib/engines/4758cca.dll b/ext/openssl/windows/x86/lib/engines/4758cca.dll deleted file mode 100644 index 1540ccdf39e9348c037257231452b9bd8df79ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHu4|r2mw(o99OMpTH7OhYX$LnPJ|b0}q|2bD0^uGE7m_V2~C?#qrPZ6z{`ta6DMvor;X$T!!4=+9yp? z)OYW@-+bS_-@P8)Ywx}G+H0-7_F8+da~hW3y_HR3j44oJF~){a(_`iEUjb>1&A8#& z8EoH_*KQn2t9k9ldatir-4*CuA82k@w={QjbPDQq9(5qtq4ssCZFkkF+dJK!g6Y$z zYT~S?PyhY*s@o2HFkY-Vw|{Ua`T^b0Nvbu4avjh;%liS{!IPDI{P~lMQNIPcZ=~RCiq{9?^>e(g^|g3O#+55_*cq!y%V41&=Qoazonq-XPD`7?*e$@!k+JXG zj#`Cc<$V=zr!$txyUCjM0YS#ZGl^MYAxxrqi8|h`Vyp?+Ce&^k{<^1&u`XI68Td{&i1*;OP-Cc((?C^rN*ZP*NT>V`~cn?q;Exv5qVZSW#dWMz%(O^UOR&gxNc=B zL}-F;@kGowz5ibe43SNxA6>)PF3obL(jN}nG{vG#W33aLG*wPf(9{Eyv+HyvQ#FXa zytiPNgr0NQrXlBHsMX|YpfjMIOE_uI)i_Uzh8#>q)1A_<&<`EX5|yEdq9I(P$r-HC zsFphhZJIm+HUjyMIzR(8YY12gxD(x#)LQ9?&8~-{P*Ee+X!2caRt-dgR}UNw&Jq=b zDb^p8p5emEqK8hYrX7-T7fwiz#<9mzpZNMQ^fzAr>?_uf{@-f-E92{*29sfRwhJd* zYvx8)>5o~Z16)j5G_k}XiXCY`(8=|+iT#>BpzFjPnk}eTIK_RMel)OE8jNj4vq9cG z@t|h2JYd~5hD`@W*RJzu)M2Ns7@^%Si|>99+Ib8eDT448_h`0ZJakwIw2C~1Z$9>3 z3oZ*nF@-QC6tiXzJc}XhtfK+wJZTlCh7K#xc3@*IyNa<`G^R?AU|=`(ykFqV@a}~Y z{&v65A-VXB9M_uF`p7ESqYWPLG{<#CLp@n6cw>@@J;5ZFVB#4)0P$7OvMK|rKyp3$ zO{5L#Tt9PQs2(FMENI%oZ5p@q$E*0lK%%OX4xt0FIpT?GC~kiB0ZmfgI~bFdo`pkP zR(ivkC9zlx>(B1r0j98lup|@otiBwJfs=+JH_svc8bt7in4rlAqDjU&Nt6RPD;iaf!G7*> zG*(ZY?N}Fe))MHFL2Pyv{D2IX0W$`#!jc_M>8~>xb4s5AV#%RixF>d{30LDP$!SBtWy z$w=wLFa{QkM~e4rBc)4v3~C}mDE$7-5mG}Dk}H+)6;g!MOpFjO2IM{1oN(@TzuzI1 z^BKtqabv;X=Q!_|BIM=-lkX*%$Pr?Lui4@e!ncRC!KUQM5ki+fMTi>_(j*;L@r8i| z5%M#1zAi$Z!I-S{u7tdQLxen)B=-9yCwi$7LJRyA*T8#4guDpKWQ4qsos5t?9wCPk zd>4W5Wq8Pye4TN=Sa}{Il$?;%C^Ryff zLTWs8aYek*p?pY@Hlmk|2hC^M4`f`z`MXnLLmq&5&{Aqp+?xF^!eTRSrBF=STa|r- zjUVi}q#8d0c#AKUU;0?s>?TsTSEFRXRzz8D=ugUUCK`F+C5q4yCHUO`{6I`FfJ2;( zpZV#w_zDK|8aUo5< zoR2C+{4u9=3P_k(WzG~_v5h&gjjGtjEa@`xacm|I0EIrXCK}tAE4>C(Y-67EDzDYj zQC@4LVP5A;FY{U{{S0;JaPB}vcsaIFAr*6>3Uv2lRasOdq(dN4UN|u~a^b|9RDG~F zN|1WQ*;&w79I1Qc+R{0}IsNYovmR+oE4@1{I3si@J@is~|NFty`lF*6bB~6OrmY${ zD(J-NIhgW@s&ppke+PO;TIq74kECNt|L;H_0evJik_HKr^pPlZQAks{E(%$fs54f? z1w%`x6yhs^KH2@Rfhty{f&ix!NTT-x?L7z!JEe6=>`ua-=h)gL_7TFe>xg#oI9BNK zI<6;-F@b6IuH`hhCouJ1YaY>DpTI2kI@E-jmB47dYi}k@W&(4)_xxhQ{AC)qHI|$u zy?{uRy*5g_3V({*d$L2y1zls5(sE^=`TAf_-+gH;80foCsR*|9-8TgRl)eAX8QJ?Q zvne9;4t=PcHbP;U6VAqf3Ij7ajz^ags98W=6^iC?Y5;I+inQb)FnwUAvcZ$@DYio;ZJDfrJ z6b%e#(ETB|9EldaaLG7&^^jY1a8oO>QnDu5la|MXl#B08<@lQDgM{n@?lUXV=Egbj zIBt@Gh@WNKNBnHLpGj6sz^%KRIAM|3CEe-a1go1c{mgWLSkVqTRi&AHl5#h#i4KJS z4c%fz`}pBXjHI#2#8tVQ6ej}u(iJP(nIw24PC&LGf**5&$CCuViW88Du=)4Kik?gk z{vbX`R>R=xSka#3pb#GqcAB4sBSRY=@sG?6ASV-XSgGt4849OM$qB>w>HQ2f#jfm~@T$>Al0| zS39K7k@Zu;}iis(;)mPP-1oZi2PL?6KbKjS8d zzB(y-@BszoEIE`Q;mrqc(uq`we*n=^muGzokSftuAyvv^!qVirg@o_}3E^H6UM&kp z{-EI7euV*OEpY=3_G|i(k&>)@hnz#9X_fnEA=!+7mEk&Sp$a*(9!suc^hOcBQ5VjX8o*n;2=5(; z1xvhdB}iarsqu4~jGOdxym^A;ik1ExQ{yW|@<3tKAk6{J&v3mhAQj+i$l)-Vqsqc} z#Azak1oftE#2 z9;ZhXKy(D%FN;~je6)q1SKAXQ% z@XVxO(Wc2F7Z*U7bnzP!>|jJ`<7aUfzv?TwMS+bkBjMsE;J81lv5u|W#s31xQCiu> zchGvJ)4-0q_$O$`U7YSuxcDA8M~aI#CMC%(o|50(LyQh9C}~foH_~^2)gRqWi4lcw zB>RVl#6!uX0ZAhyq_eq^d5m3-;Z#aTN)em)wiRzh^Nw*i!r@^KBOD&&aEQZw9PZ_C z4~I{3_&A3nb-gu{dk3VRPQ(p>P`Z2!YEX`5Gn9P(UZq4NHE%Ks+&Crjs$1q^3UAKaMa0BJv7 z9i=}bRr78y1lN6;!1oiGLUWB4h~0$vv5Z)-2;X}10i+;Rl$Vool=3k6yd5^Fw36~JBUW{ zb?Mj8E%t6KV=Z<9Mw8B=AAMx?$Fblaq=#un)SuXk0;jtDvC7Hqf`V#zy_oemO>@dq}kO3rvXxPfJtA zg%6SN*%%Y=&%$k(T~bbBze79nHh6Klu{2?7D3&f{h^tkjg#dL8B;i?%i(}#7>4DF) z`yWF`M!!tof5y?@O`u}lY&(; z*UltYp-4uRf=V14)rd>aifPMZTJLMOBFf1LvxuD!yN4_wDtaXS=g=~4BJqgShK-BD zyPaZ@5}%x)3-{<*m@B>>pZ#YTIQH%ua#~P^?$1gKW=LN6TvEUba0z@giIc$Uv-2tV zg38$J1!#DuC|D#mTZ1Mp8a1lbB=o_v8tj4p8tD}n9jSDNKfUp_+je_v@#m1~Zi2Jd z61=X7V9`o~<@JEATW0t1YP!Iy>m0nwsNvPTDqbzLq1y5Nj2={?o$YSpwPJS{>Os45 zcQ5q^PF{+|hBJn+(P>D6chTT(0lnc2FCghXoYBTdDdc+MEx%&rh6o$(>qVa;L+*?G zmG+=)Pk0@1^^vwtTYOjf#6*3 zEZmuv=5QB(iri*JPAr%g3+76fK-So}Ix0QK>4hxs7A!%U1V)WfX(lRqU1X?9pUXsj z<{}_>Lwwnsd?e#>Is~N;z*hQ4j6g?)E&`5k%AKj0cZBARp4pqmEgw3YT$goXF+KsEsF_gTeC+p;I@!NE-Xq zjq^uBBeAze^ci&1gze|U_KRWrr6-+W7-WZScy=kL2i1xE05{3th!8Ve;jgkeN2XO*jL~4d`zIk+hgF|-T z{V?$qedGZ7)pup<^_7#snUL9cKmPuQomEQfK~A*`bz@`P%G^XE%t7V}eTWND`PNA2 zVk|gWnh(0sX|koSqB*cDzlH5ezCpz6SzIbI`b1TH*K$Ih^DxduIo)?QytwR-*5_V; z=$Ls}m_Besm~!FxZi=_j)g*U@IuH`K}c5M7ioE0jk zBNQgX3SzUB;Ea2YjzsU1FhXp$0+=XoOQW!LV{~XQ@X?_mg3_O`WU)#SQYyk#3hCqV zUOIZwp<_gnI5F#-I5U3)7TBc>ajEjP+w`9g@{`Pa4DRG~go`4WAbp4234f#h6CBGv)u$7NK>BRd#w88}FGHibme=)ZX+xJlB61MM)&1Nu*b8uzs z!ux~vClNOCO6I(eUAr8WFOos~MeG&bBsf&2XYY^FH|rZSXp#8#fIzBqzTiawJx9R& zS$A%OSbh?jm^tL8Wexy^v>5Yl{;1h zA|~P`5r2$R4Wi6HRp)Hr?hfzLzw8Kmq*(BxXulMXELxF$%)OiDor}WP++h;L8eR0p z_|fX+=V)VNL7a*4>)N~JR$Q5Mjz~vgC0yKc2+TW-^|H{}{5t*nl~bd5)np(ivEWRxd<1%g-bf4c#%N|7asS21q8(aDkdOTi+t2pu{F7Je zkIGU9SDy$^3U@2QcPhhmQ2FFjc!`16jKRG4jl&!1GCS9rrx+bd?efa;l0>TpB?F!* zg%wn(gk}1p*=fh=C|-g6IWI1~7&?`yKN`B28PwxD`L}kF*+L^qc{*Z;eQqC9?R~(@i?&<$I)*h;ChI0l#&bs$mpu1cdR^kYHXgw;Ykipad?`;F%Hjjc#*?P95Ogt zY@UKcC5KrYsyNI6#O;dj)KK7?=Rds#{_<_cPNR&V{0e0|%0nn#lp2&`6b(uy$|u$G za{Otm4=;#)b5TA<`4lBn!TJ;^87LbjvA#=;^<6+&G>!EgL4PCK$EUEqqbP?^-ay%l zv1d@ffbt$n%T(5P48;umqUo&f7ntJ%{-l!iy@T@0EY|lM;0~f3L21KS7fL4z+^z3r z6gB2vi$a>-awlV26bDKk3O&83H>3OrN}PZ>3H91udQB!UzAoaUg|QKii%w{P+4C~tS8`>R4=QptD1-dihggDpsTrS zkuc|7^R#<#sJfZEyHnlT>}v}KJdA3Oo3rwDtjBM9eH)tvk9vb= z6LPvM#)9kGd@b@2Bc9{(yM6b1)Iw*cx~(~|-lK+a>U6g^x3#fghfhcd!h)1Vsrt%hT$+dYD})6L=&CXQpS`yR|!dpg$RdQ*1?ySh390_nqj1`?=US+`!2c`j78Vx3f)oq9T}bWPMayh=EmfTe5^?(`FBCe zIZh#mMJmB4^_jqgkSPz+Ay!*wtIPQLv%_zGv90Rhq6PCGI~1@HS!HR{if&J!yQywd zhbORpQgYU=FrbaZ#O!DiY5U0YLUP|)k#ZEa2QO)ThguNxO}H5ydtLCPpU z(1?Cl&3|L9Y46}jtNeTH0w4WQTEp`*=*|=vEYNCOTGum%uUT@xvbJ8cvJyR<@ejzZ(9&v*=%!3J0wC9k~Xqpw9NM%j5S z_VgB*7i}Dkc+$qtv;u?%Tj%R=yX2#ZZFIGGJuMs9c}_>PvMmi(+0GmRFoW)0;C96G z3c~w=LoUkprr>IDX^sK+RnIs1%h%^GHPwsliyHMhzCrANWUT0rF9f%}r^VAH_&Ph5 z_}Tbsphshi9eV;Snl>fdJA3N1(IC16SXaQSS+~`#O*mjHB3nld8MpozB1# zPqTnT!V&OvV;ZYaEDw4Dn;f11k`QDcEuPBGAhM1CyXwo_tKICH6l}eh@){u7hlH)$ z)Gc`0>wWE>Mcr6{hgxh-n$6eUybe81TqEDdl}I(Z*~&@P$Tob)8+Pb z3xUo}t~M}ctcbZh+`2B=)&YZy(yh)8=B%t;v8=v&slCvkm3O3=frC$g5!zWvvhDKV z70cD_@w!_1_P8j%u4UlU(dt_do4Puh1A)$aT*#_6a*4!6Uf%eSr(>fp(AhzW9b-nB zcbuZL!_(svTml)3u?pr2c-BL8Prwx)X$^L?kaI8%t;N$46g=ZY@}wJ}OF(d8>%oX! zgC1|N<}TmD_U?uE_&OG1d?EhTmw>HV*jBi(aAADOUlqdN;Qk{mur-t6URSZ5nG6|% zidi$+TB;qHOrUygCfiJPS0>v*bzdgiM|J!`P_kp_!ujfy{X5A8&M56TeAVU*)2Cs8C6Tx&50@^}7Ud=8tL zoIj4T#v7+Frkb4`SLaS_tFDEv;Maw+o%qI|r>}j{whW(HNgkm{FDn049!hGEMlrnJ zGs@woqI~oGH?jaco$}df+I+21yGFZDJFPIk&{(*pa9`nQ;auH(ok6!t_iNn&-5+)5 zb(eKcy<6X*|Ed06{b%}H4Hm;vLxbVBhPg%dq7_AJilRkt7QJ7jG+u2~8+(io8@C#t zH(oT(HdULNO`WDqrZ-LVi%W_tiu;NW72jC$t&-&>t`bj4dx=o;P|4d``K#yrA4v zeph*Od3X7y@`uZ}l|NPmI{l_vfQ%D(roFl^jIFSh?Z@ZM=eiT zertKz@`mL@%Xtg@LybI`4g&2|ZI1SOSWl-d)2`CKsC`ZQd+kkyrG-_6wS|9Q_}jvl z3*RU->K5x9x*zMF)s5*k=wH^qrT;*mZ?GDc8CDveHau^5)$oqNSY#_&R`h7mTSbeE zD~(>`cH?8l$Bn-*?ltZ=9yGpW95KFbeB1b*@s#n8#p$ zHx-x+rc#sDw8T_nsx_@NtueVxep8oeqp8>QkZH5&d#0OzYo zVtGYNMSI1o6(=fU6_YJ$%iWfs+w2?d{s7 z+6T0^aa*<&b`=H-e_FT`7Jakup9;-7tFBJhtn1Z%SC_5N)vNXE^&9o~>z~md)F0Kq z4GWLyFX___O2Z68j$w{LZMem-z@Re}8!8Mo!?z6%1HF4_ATF=)qVAF|%b+ssGYlCb zhOMT(remh#rn9Co6TR=@f2M#=Iodqvv_Nan+O##=dTo=|t!>i^+FotHc8hk0cBl4n o?UUL)+P#RPgW8Dpm{!uB)n3#p3YCRfg{s0F{?!G{{u4d_0?7l(%K!iX diff --git a/ext/openssl/windows/x86/lib/engines/aep.dll b/ext/openssl/windows/x86/lib/engines/aep.dll deleted file mode 100644 index 85b31c7695f8886a54e3083b01ca637ab246ceb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14336 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 diff --git a/ext/openssl/windows/x86/lib/engines/atalla.dll b/ext/openssl/windows/x86/lib/engines/atalla.dll deleted file mode 100644 index 6511cffcbb7b5d181e3293e967a2950222f3d91b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 zcmeHNdw5gFl^@%(EkKS1HH`y=D5+>^6I@wWvSrK023v_qOc3}1PK;$^Un2?mQR#}9 z1RAHZHz*gkbd$7cm$soMZPM40hNe!Mhlm|)x+G!SH05h(mo~H+Vt4Bh7HF47`#W z9h&pfwIgY@FI`*j^@U8m!Je(bwk}h9TX%PlV%j2`g5hqHuiI3;uFlle(;*k+Yu`!2=0Xhzt#^uc(7N+vmEi9>xf=MVkh>XpO`z|W zxuU)6WR1W(68J8GH~8AU)W`eH$n9dRHZ7A4d~tbGQsxv(zjj{Q6^tzcC10a1y9U^Z zVi9elsHZcQrLku)>ji#6{0=PfFtxl3u_)eZi5dMqzt_!c!HA6I zNwHD2+H6p3@&}J9OVvtfDObi7v(ddCFpmniXA05LS*zF1SY0$@)k{{-&rMoAh9_wu z74tW-=;(M9{1FNmUIb%x4UIz>hID?To9~1Tb*H&TZ8le{0kdUe9rP=yH1KZ;<$MgX zNRX?cwFIncH~*Yw7p%n_>p;$TH#G3o+IXI#O*0tFb-fLS(aj45S*ITHv~0dTF&J&U z`7m}_;l;D#oppc-283H7ZcHt1{?444`OV5tgDB)9<;!V_lq&DTmCWcK&lF8^!(oVc zkAoPu(|Ym8(awD`lj?_0<$Lpi{cM;J|AOcue^iQ)_$wM!_D17U#xwt**JJKHDGR>QTox0QWYsJo>78}Q+ioAqwxHULI)|lrBBAf zdVV&W>N;BVlxP1Y3?A0zxcPb^tV_6OJd-$>4hxqEM6; z+eq^@Ax)a&V&!OxVw~fdwTT&zXS!!<^@&Gh^sDlYzQ$!&7BQ1%oj^%XLlo*?K?Yr*P~=#*D+{5=`gnSyR>-Q+GrC z3|%YY_6I0_`QuPhrz2zf!SlHT_X@^CB8JHdzn{1li5pkC;`V*BoE@SwJr=)Vm}ZH6 zsdxKX)J|@QmXizOuaRO*$@e}mGl6aXPQLw8JdSZr-slmYYf<+ICrHQm2^hU+jGUB` ztHK~^eu&PP@%cO5{AMwPJP`s~5S|c;P6vZ}*pOnL7U|gRI{oz};d>!M|ru3_n zDQ$K0JG4xFrU+TNVPhk|3he|`IiF80^kL@NiJFD~8QG0iC~q(xP6?h$2xvX;M*r!#>)rg7S?(PgcS#EO@mX$D z!tzaIc^sBE^807GPH_FT2oZ~)xq0V&oEO|p>{#}fBEQMbc;WEH3^z>--7ojExP`BV z4ASxqXoMNJX{}1W7)olbxhz%j`Uz-Nsx0HM8yYoy4rJ>1+qg%oYcK2J`iYEMbItlX z{wDFN&GnJ7N}N$kR9d$h5RAaJs*B;!GB%)I77dsyF#?G{fpBU-t(ZTC8oF`ty<}wG z_;zD_yMcciCNKgd5uFrk8I5nx=W9WVZ(qW15!l4n2yEsz z3A~)U1lIFwfFomcz`q#ZuH(;%rVh;~F&J1>9BR%Uq>)#3)?1fTSgmnQ1k~?PMDh zGBk=2iUgE9upG{c+xLRi$Q@!tBH-tf51F7YpQZjgy6`##HGh`+TcUaeRXJU+<=acM2lB(S0tt=$UGcyz)zZrG4Mi@ zy!{l$3CCj*bhF1TZv$02I!uSXwki)ERu9jpAH$^vn=zd&jxA&C-8gbmIu7*svR5rQ z9hMyva6-T_0b>F_BjAXDhXgz*;CBRkRKNoQJ}lrq0lfm+1at^kCSaw2)dJQCSSz4g zz9v3hmV6T9RfPDh)6tG{w0ReXlxJSUf0zM$%Lx9d4I`Yqk)6b5c zJwpisPF_D$Yt~&qu{d_&_(vwxv1M#J9(PWh4bD>!H$8x~q%)r#T|pOwK{okjgF2ye8reoEaR?A?_&4!Y7hoq&mF9#Ml%fK zCbN<$OB;EiHWlSV@vy<44nL?x>dX8f#uk4qp4p0(fYbO{v`6pT{AN7-29J`)sNdi{ zMIQNkaQ2hfVC-(>z{zzr!_?vijBvN>^sF<|g)@FfGkX@i$TH!fS=d2i=ECf&8Wx$D^TT)Kl-c2j=Dr|{<<7vv=NIYH1 zR5u$Z3jyjjQV&mquTDq9r|Bm5RWvm6i+_&CXUO-?kpBri3UVZ#7QSxqe0XV{o2)zm zdR-&c_CQgqwL%LQz|2TIBV40d?U}Wz*fmlqq}1t2v$}RlOy}%7ly5BRqhG8%12c{n)!S_=g&BqO^FY2i%1 z4KX*{!E*=+99jtxczxk=+I(SseBlkKcyTX?#TS}U#c^x`+DwTG*6x`yV;THc@^Sbb zCsd|Cz3HWo4|`YRBAe4eaA7OKtD6bhHxVqa2khLluwS4YMWCzQ0%g_;w5&#;71cod zK9|`CguBIXKw#Z)FYu5{KfIILgC}t(9?u-XTBorzwx5{83R>ftUO*c9cxFIwY1j27 zYJT0OZ80|9zY}fR99mlynI>ABc@gcyr=XPvJpSE*|a&YKOvx$0_t#%hCeB4~)bu-y4t_$?d~n@80b zCjTh*H}-CZH8$F@pK?v(bGwlfRJU$Y=RB@po2fsZ&VBp}$V^*tv>Z%p8Rc%QI2@hL zA49ZF=JPVN-8=}0JfM&*z736oX`{$WbjA+EnvlFk`3_K#poB!1R?p@gs7(GI!u&SW zcmn_$m>uVc8g!g5;zh*M+B^~E-=xTC$cu-U#KZag9f&nGZ64(#LS8X=_h1VAPedN& zdf21;#sxHKJpV@IGk*XSk*H_k>?4^6C=c>qz%2h6I2fbO8iU0NtuYsR&ywEcnS*J< z^N}e-qZ-Cr7q->AY2lr`3~WsP6A1s0YW;VU0!XklxzYO&4T;`SE}Upu6ni%|SuNg4 zhQjAIMowMxJdN0IYPxbe+pU3%n^N1i8rjQ|zU4yJ+XX`w*y zXYyqTpJRT#*F^c}K}uvu_akd>W300TYs8G<&HKxM?xA-_BYmF@*FH55nZL7SH&)#k zUWrhmdynz@!|wHbKhgu`bme1_J~P{SZDO+@Oq;w$bxoxgFe>pjvDOvry3@nV5)$M7EyBxuTIz)Ff6dFCw3Vb1rIc zgpC`Yzx8*OKY9*b$DQL!&fpPc&V}Q{wBIH>hg|27X$;6Ts_UXeYjG*Q(1>OsRr0jT zkZTG;`6RS^(pL{#kW3;!Gy z`&wH<5sFBP3nJx|L*X!tKfX{8yEy15Cwd=+3*rlPpp1$-KMhYejgA}yeRO1mApZj< zj7w%juZz~`_?yXAI$EP6$4CSnY5B6Q5gC&r1#6V4uGPQvaq0Y!$Yb7P2&P7N)Es9es+E`g?&#oN!F{yR&HsQ=K>=eKcRjigU$e(u-=V8Z z)O9GnkijjDL!06kULSHjicO=j*9BMR!!@@$f~}bt$o}XhN>( zj$zU}JBmQ-h*CeS$%DaQ=7FcdvY<3OiChr6i&h$ofiMg#xPwLnOa^a zyPiUs=km`&gi>S|iOSRX@)F4*R=RYwabxsq(iz%yqAvIA>N~ebv!i$DqU-e0 zjRw_qLS1_rgS+Q#U$?wQb)B+zD{^4ogz7r!PqW`7cZcUqZ1S_F|D+kNg6^{Eig<2$ zEGvyEA1QCmN@vQF@?Js<%iUQSOt}I?pllE`Sa`l#K7nyWUP+6J%4Al8ucS{E z`p0rdT~j-){_IWCQLWdZ%_pK6(U2~Bi#}S1A)kBtHBm zb!;7W-ZgC+CaSU^GGWr_NLNhIq?m|2Y;o}|xf)`0PSQKp5(H{|*=Ye!3V2GuDFLSi zJSX5q0WS&25Nq*eIsx?p8U!=~;!wqRPjvmk^S|VQBHW=(C_0q4N*H?;-=t&x+kyK~K96z_%Hed@|3(_?-;&MxH=|qv?E=cGdEn_;zX|yG z9M*pn1^>F}$2(yEV<-nfe**Y9lwY7Y(O#9q`bVMj0*Vi`lfXYi`4;T`0Obfu0Q6pz z9ux#g|BFP=VEtD?pT@ZbbNUR*CKP(U2mCb31j;W^&Y^tRi5EPSTTwbu6cl=DmSb!E z7oG{ov?5ZyD75w7`_!%TxL4KJu)1Ek-Ph@pLng&5n|j+6uSw|<^^f8Isv+OUOd)Su zQ0_1Vd|QHT!5w60mC_anw3#;4tul4Vinpg@mR9|jXf?B93`U_lV*|E3?tp!h+`Scv z&lC#x_VxtvkKa{wYdkl}N=<@a)zjVS+e-a_j*i_y-}W{|zD3@#uJ^|71Re5jIoR0~ z>}u<7m+O=^#TQb1?f7pl^y*jD)~@nY)o-Xx)^A*M>zcZnSst48N#5FZ)gIR-_lzF8 z^vuxO0ztX0V}~iw)7Bwl@>{x1?Mk1iGaLv|UGD2`>+Udhw)ybQyj=+fOzk~g7*dCc zesJ7+UGO|0ljdl4#Az$}a(>8eriS_n$gM|^3XwrUA{!~~FDZ(OYg}Z%PBOH{; zhUU|R3$=F02VBssc{S85do-DXc9N%u-lgarOKWK``5Oa@mwFVN4duGadGzn~Je1ww z?S2oB4$?d*?*ngNf=9n0_@6#>=2~ppR~0(>FSCR5HTA)DfNiL&uKTmS^VbXX->7`{ z(M3*C{V-y{mk=AitP5d^cK-LCBzfr+f zP5RwRGE<=C&C>Ae6Fj(lrmPQUfHuyK-82tv&Cna3O61uz&=PaS|Nq!-TtEu8ghVc( z&V+68TM@I!i9#<0&__9H9#7z8JAAbk$I14q@8M7X75ThE!=q&pw%yb2mD{%= zC%})%hx})=pp`*)vi@dlC^+V zhkZG-q1%g-B_MaW`r74Q#n;n)qc5PyLB?*+tdo`ZWiLp_X;~Ex265cDgFWpsLVHJM zy&UZFb>m=7lGt4tYeI=ePw+;$O~IMt4$2{@v6Z^@VL7-X<;<<>3FBZ3vJd@d>uWmL zl_}JEFP)(vvR@OmZbwLwyXt*i@~RLfAXAMkN~`vT+P0u2gln}MNEI#+A+{-F4NgH{ zTfldxTvv;8z6R!)g3(sXTf$qn%E9C)Z*gt7)m5AHSPkovyF#+U*fQqvgp>}CvZGh_ z__{lLJRLY>gFQPu0hnXV&OEa4sYmm0(B`3Yyr-KrR&8jwwSLW7SE0?Kt%HNXf=|KJ zyI9F=-6OMA%oCEmo=&kS9$K`k80^q(2A=eEw*`YecX--@TepiI$%;0qBunnz?hE#G z(~W_#BF%O}0(XTzpW;!-MU1Uvo}j!HLzjb|1gA6H-A*CF%rqCdJ*>z{mZo$K#u8L; zIUqyqO0-0Uwe|W|bcI&j;p<)j{tEm~Qo(|(2o$a;T#=aaU);5SJL10gp7&(h$c%eY z{#q{w-=lXB@|E-7UuP^u{{7@mK;{(5S(z~(#e%{rvzVK(JBu|FZp~r=!o69nk8pn$ z+f6v}Akf)9wCTe39pFyj5nwtqCxE@c9GLEH44TegHgW2HPdq_ioo)ARUM z&sX1yZ)7+Q#JNNCBu@zZ9|Lp{--L2A3f(#9qI~fDKk@(~elG$z-7?pbZ@JFWYU#H0 zS=tJF3O`@?wZcaVzgu{y@P)#O!dDAV7QRt2W{epc} z(Ym6hqSuS3it`;Gbyys4I;u)qN|ciON**qGvgBCFZ%Qtf%q?A3T2NYCT2Z>Tw6V0M zG*GIPe!le4(vebL`md$uO8->KoLNqTbAdD8xzuTPe!^*S7CFnDtDQB@Tb=dJ+nlY= zPG`UwboMzv?Hq94=iKZ3f^(nq>&{1=-*X;vKJAP-k2sGxf8sph{FO6Q_Vu#wmmMwp zMcHK8blIHpE6Nv_d&>vQKUe;h@_#HJD^FjUxANtcX%*`#HdVA&_$!7g?yvY##n&nx zsrYuq_bZ;Nh*gYNyj=0Kijx(mE2b*WRWK7{&rtYT=2)(<?*yLz&bU6HuUdMLFPRC~)yB(i(JmC1U zgYKec3_ZWFy0E6ORqDW6>upBciK2@|dByp~wqi#y-TCo{`Q;(rXlAt*uSK!!vFx=x sV0p;0&vL->9m^rhGnO&StCo|N)0QdAIm;!BuFz0O?{ptLe_Idy2eL|E1ONa4 diff --git a/ext/openssl/windows/x86/lib/engines/capi.dll b/ext/openssl/windows/x86/lib/engines/capi.dll deleted file mode 100644 index d60138b1756b5e4eeb21ef22d1837506b362e606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27136 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�FCi(CGyMA;e$`%A3$RH{N0}Ktf8-Zm4*+Iru91 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 O#)xkI@%g`01OEwW-lt0d diff --git a/ext/openssl/windows/x86/lib/engines/cswift.dll b/ext/openssl/windows/x86/lib/engines/cswift.dll deleted file mode 100644 index 030e0bd527b10345889412bfba938106cfefa81f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 Myv~eU+5hnO-vtG2SpWb4 diff --git a/ext/openssl/windows/x86/lib/engines/gmp.dll b/ext/openssl/windows/x86/lib/engines/gmp.dll deleted file mode 100644 index 9992b7b16af1d51a9481e3373766ba9f1b9b7069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 YZOcy1EzGUTt<4p4yZBrDyHp+j1-;9gp8x;= diff --git a/ext/openssl/windows/x86/lib/engines/gost.dll b/ext/openssl/windows/x86/lib/engines/gost.dll deleted file mode 100644 index 0e6ffaa6fef4ba01c6602973e6eed806b9f530d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61952 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 diff --git a/ext/openssl/windows/x86/lib/engines/nuron.dll b/ext/openssl/windows/x86/lib/engines/nuron.dll deleted file mode 100644 index e63d35be03e8a81f2f55ac5fc6752735bc46119b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 zcmeHNe|%KcmA{kBBm*R5u!%-M9PChIHF0L%Ofn&a1jt~b2@WI#qJbe~UYLpb)tNUK zENp|5w2Y4^-Hp|4(ZU9{Xl)mN)S|UG7$l*KnpJCQrJqe#s?R3dO_4&jn=<=7_st{& zmG0-$fA;ffeV@-g=iYP9J?GqW&;9Y{P1QYnSTbWwixQ18b_AH7QV#zQpkZwGjW5q; zFU)vj;So*c8w+c^zJRgA-@e7)&}wXKXlrYijGINHKiFpUwHeFqt~R!|d&Io-^qHoZ z>h#`q4_Ay8{xV)l`=0*gU15xwk-Uv%tI7>5|v1>ueR;dT)0UJ=v zylvq1B*s!y_7r9vAW$&zB(qXP2%V_k6jq!2@)@fKbrRS^?5jPS80&_eVJl-bSCauf zN4R3n;OFF@kQR76AE2V~zQZ8h?z8ZOZd|8l(os&dvl0I$0XZT$F^T6sGf3 zF?N`AfWY80`vOYBQ_5H*Z%dQU6JRWp=q?nJ%b~{fQ%d^$VoQ6YI(D`RJkt9`l!T|0 zvE>QP&#Hex1VY72mSO(oGE73ND>i-*+|j zK2<#_a4BVKclpFdSRAO9>rJM0@^;gbby3M=qf#BsBHN+ka9V1OnYnG+OzzdpB&lXb z3rW=ySj!~rN>sN1lu~dE>s-~<%JW$5aN;GbYSt6UaQ@DHuj=DI&d|nuJeBao;+q)N zCm{T(QT40p5mi_vU#3fZgaeUfi;^=CR{!7Cs}?UWVDAlex(>ZpEfB-?u)oMzTfNO=aV(DCenTIB+2GHe&6Nbcy? z%;;7_bZeTjl=IV&W?CV#aUi-iTS*5gx^=!Xi({iQgJYAD%5jdO<5;i!JGKI-#$>-9 z-Kte;Kn@+(qWL0aF|b2U-whu!ZY*Q$A;aQ1!MWXUOV>Q)(kx!B3C<2hl0wIly5A0- z6(Xa$d6CeN26Nf7HHt?v=@r`CxW0_;%^)42$=)~+pVHc>opfVBX|*v=^yuE51F@)m z4_LLzo7_Q8o&&NM`yr@Dr>Xw~m0ky@et(+!YodBN^~q`KTSP6*A`K5uQ(q$LrfZ4% zchl5Uq}ZDI zM@S{Ep)j@8m80z78nV?DM|sDS?=p)C_B5)!{S>}wYgkbUBeOt8jo;p>k@=cMmy*Ie zQ~X@YahT#6pV;#vh-%M$Q$3rg=P52tJqP*BfvfsCsH1I|nh74q_N&BbKQX1b8?x%D z;%RPjDgG(Ve3UO8z{K@Lnv*h|L(Ob;GgB6F0Yg8H`0{a9OzD)Tbb3kWf+?L*yB^(K z%6~v0bX?z0&R(uWJEi37Q%bgwlArS~G~_>-kc9d85|`3q6VXmjhtdG5aI&A0LETjz zJtiNU4iJ(aD=>-8i!5U7QWSex62cc-5hptxSm5BhYk*xa9GM=8HeQ@R&wa#u!h4IIIQPz6NerSy&Sf1*ukO1VJC;% z0plxO#jATOP1;+B=0z?Je||_lzKD%SqeVmK{Ild^b$v1mYfa|{aw&^?*yu-V@k62!366B$z5hJ|00gWdiGBm-B z$E4KeROJnvkb^pELmN|aVYWLWiOMkU5#ALGq4n#SKgCUATGMMcg3v_-I@du+v*047 z2T($@V6_g(cZ>34*n<+IS4&(*TsP;chQMXk_u@&Q2aiCFQ>HoaA#w?@8CoRcS?cruk>e z%k|02(~5@tX`$D0irx$U2FLM+0r|Dj|5jwo5VA7a8X55Hr&UyYv>bCGyR@U)qG1UM zB>!YQ z(ct`OFk8t*kGi@I1Ike@FQs`aDT{4H9#ED8(RIxNO#a+XVCo5-2OTuZ z2-GSW;J`<%H3E%EYGWq)UBn>kMn68R*+9O9#?or#puXn<66TU7xLsMU+WsOY_6w^0 zL(~EBfTq!P-u2|tqaa;8T{ky!DKc8NKL@1V;Q4i-ksDtnkDHBkw+@AdqVEg|I^u<$ z=flp4uygX@!Go_-f0ckPpdHqL>fR{-dc#1oPFaK{cB)zL?V^?SEo2O>p(9oIFxFIv zIl@cWhW$%`cG8bM2KoggSozW{Bx_UQF3dXK(U3}X-!j~K%(YtCkHn|lO1e4JX=2+K z#?tt(X7oncIVR(D+v$MXNJbx>Y)JN)fHk6cV4P2$1p?5J(X|61o*_hDqP+T=8ojP! z3OJKex^|?oAZAvtJdXGg-UD1$7mG3vk&JLqctXFzZm)l5C^QibrYiN28=a*_x{UfD zuKb8`>iGnbu9vZ6s^rtW=06O;j7SF#b{x`87dpbs4BB&hrs28`=`NUsf-Yn6}Utt7MtjyzKa5g6JzX2Kj* z*EV0LyoH3v9O>jL{TsIk7kYcnOh%*LQ%I&-SJ>VKoyrl2V8aRb&`ufd-9_-xZh}vA z5&Xe+f(M&9#9}y_}B#^yM zUW)TzhWwV|fSKseLMOCEpZI^{-gqyG&L>dfg36qI8BJcYPnZXmaLy~@k zF@#%8hF+9gN2+Vr@w7yO39q}tq7n^G$j-^w;-XTnu$otgial@c&Q!di6eLP!T1&g{tVxh5|YT^AAGj1@V)jU&q4I;Erw$d3U zjx!+=N+(v5aI$t?_y+3JyW@0q#y`oQ+#5~}->(hdtq-qDlbxsKsUd8S!oze8*b&Kg?Z%L>s+PmR& zI5`~9hVRmctKssQr*P>;>Wm}2(u~ksNvb;c#;33aGO1M^IWF}yYDhBBnO<5;$RMo} zPG)F^X*XVr`8h9FO@u~Lgp;9(l%Rn3(%bh_*g`{kwL2CYyWku*_7hdQCNyMJ=~%vu z(}W1mKP>bCdN;leVsu!DGXTrla}z`2ieAdTt8J&R{E-ySHLy)(2d63t?$BE4?| z;&ZGnaxC#N^rI!-oK*M5E&Y3z;}l8XO)zU0!5g{>+PerAZwGAJopp$#^t~M2(8-Zb z;%HF^N4YIPdmqv51CpJrzmH>W|Kq^DPJRCYYV)N$s2jm>XhH8MX8&Ha26cM?$?rj3 zALr5~dta>9tX+R!gbj8bK${}3wq+iRaHVbn?PDWM=9?$Ay+hbAm0#grM2i^jQCh?x zx@d^Q2#3cx9Om#{4o`D+*qiM$fu_it;pQKR`Kw(gJ!1N;?XI-t{`l zNz|`LfAZxO_;dngZ_KxIz?V?ca5rCo;y}3vWh=_xqdbjr1cjbM*bvp))#0k3zrD@4 zrh1vNRg}E#9+FgPWuHbXkBhZYzbRR7gWq$1gI_d?ZCkJ}8Uw+Oj&?tNe_6G5&E2cq zD{9tM#_KC9R#jA&b32@eW=)(|b$6NDx!wh4LyKQ*@N6@-v^RJ}c-1KRTa1nEt*s4h z9wU8r^R;%gh^-=aU+%Lf&~9vM@U;Z}BIEU7TchN|&`7qaJ=g{*q9-&N)#Lj4cw+98 zZ@lfs*F3k_*@5;DiWh6I1BDjql~48EZr8G!a#r0THu{=;V!$YQMPo;UZ$Wz_|TcVM^Jw?p!5GSHFRr9cyJwHYpTnt zE6h71*^e~c`Mn0q!R4?2<}ngmvABM1K=cRdtGBg@{w>?;%f!HaQhP^zdxzMD_~csh z%z4(9`u3nCSUoK*^=g1RJeySm*8)+Yhd%r92j0*(K>j_@)JiGKzw=>TvpgSt)HCtB z3H)YSqM6N&O_`M^6R>9@)Lr5Zx%NZ`Cxwu^B z#^sElbzlzT-!Bn=)h7R*X$o}4zE@IiY@d=dJ@CK-p3O8oLw;Od zYBW_WQ~kM&c8}^$BCST1!$mM=3w>);IsE9vx}Z0Y8#Z;K%JzXqd6g%s&d|4D7q!*6 zTS=y}K+V$_4c_9TENBVyVtANSMWRLUY+lphbu1%>5cb4ozQ>j0%ll^LVSAS z>-h{uh2hX;jh7*`hfz+WY`O+xyAEd;>gP~MQcZs>1h(1NhK-8vy=<$y(JMCI2Z=t! zG5%2eY-TmKaoWRlrhsMyFaC^xhI<4vC(vG73_n2owC8X6e66fl?p#(USo3HK*i!B4 zpy=P`68%l>ejHPc;tCu)lIUljOS(gpRs{WioK`M>d!rZ#RCw5R3Dg=dopvCyUlFx> zTR;+9YkaNZvcO7Ti%2y#S5xK-G;BtT3sZ(QQs_ZXATg>}* z|4Okz!ciO7dQHMuVlr%-u155?`q~;Ki19%)c9(O_DraRpVvCsD9gsY3X9|v?f1JI{9Cqii=;&jX`Cgt zZS~>WL$?mb@>Sh2iS{fiupO`? zXd|K65O5Q)0!-)kd0;Pa8t$V$;Q7EnQ%_Dpo6ZzRtc_!cpLcOV;yru)t7WV3>mAkq z+8#P8??AZ|h3>>NQ9gVAh9ZDfu^Wk?iH-+0WX4Yd7RC$j`}NnqQT_Ilno-GylQ-$MW~){~-Tp z{;B-;^2hT3ke^&Ir(j;evV!#m-h#&qo-8;}@N~i9f)@*3DR`}5sNl_lcME<|FjDYg z!C1k$f{B7l1zN{Uhrw~JW4_}iM~)-UVRI~YlsZ;ADjjPa>m3^%pEzzRv=&wr-cxvA zVMk%O@ZrL56)J_g#TkolSbY29vc(TB?pwU7XlIde$p=d^iyMo#7Ke);Ek0QMV)2>c z-xW_3Un({%ox8MiY0uJUmcFp`jisq2H-LW{6X=oWf~eZqHzW5Q2_p9*J$Ng>Imx6QU?+UD98+Hw&8e9St=-mX+hGgYdTo!{zGM5LZO}Gs8?k+88?&9WP1r8kwDy^HgZ*0jeEUuI9D5$U z1)3R7XS{ouE3GcrKV|g@UZF#96r- iKW^SdTZ!udS_ diff --git a/ext/openssl/windows/x86/lib/engines/padlock.dll b/ext/openssl/windows/x86/lib/engines/padlock.dll deleted file mode 100644 index 54aacd2460d06ddc30e06a35270cab6182b99c78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 R3Yn>y_ygq2=l`4s{tMb-x*-4n diff --git a/ext/openssl/windows/x86/lib/engines/sureware.dll b/ext/openssl/windows/x86/lib/engines/sureware.dll deleted file mode 100644 index f55625a2536e31ab769293e210b82f32a676f17f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18432 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 diff --git a/ext/openssl/windows/x86/lib/engines/ubsec.dll b/ext/openssl/windows/x86/lib/engines/ubsec.dll deleted file mode 100644 index 18e5957364810e1f22c7dd8a797ff3920ff95624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15872 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 diff --git a/ext/openssl/windows/x86/lib/libeay32.lib b/ext/openssl/windows/x86/lib/libeay32.lib deleted file mode 100644 index adb0edd5df28e15886c5b6dd569d7748aafacecd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821042 zcma%^51dbVz5ma3HO81WcXK7lm9|ZithJIP|Ce2hn3a{x&X^g-j+xn+VXY)d+9XMv zByEzrZIUEOl3YoWS=-FI10CoF!rGEn%>5G6mBmu7NNo=$7^QJ6_SY&?lVpN__IRJiVVLw!)BoJXNA)yMapRu?i_3EMPWc6gFX#_yC_GYjJt#v90OZ|BIPm)Z=zh~EDD3l z4B9#f-h7X70ENK=jIAiVrJJz|6>d6)Fb>K&6y7?)*pI@{KE_5A-d1WXL50hXVbg*l zIK>-G&C9K zP-q-$>_p+=uEr`j9bD?m-@n~64q#QtDQD0*t3hyp47Nf#t$Kn}5k;2$7hWF5JWd{mNdKfEF;kx6! z^jCQrg{8Dx*^R>cdKzm`fjnVZm2m=v_fwz3*uEc@lc%gj;RDRKQjZE39V;FTij*@b zd~m$6ABD&I8LZRC;6u!tvKkd`I9ApLMapRuKFs=4wxh7ByYUz*TyuP6dQhYsLSgkl z<0%wAN_`4*{ZWDXgf)zt!kDdrk5Qkp4~4aZ49ZvwA7?xi#^U4fcw1vJDm>%(#Dt(o z*@MD5jx)-76h2vEEI@_xj`fV2Le6^l)NKZB{*>^7V?$L?q?|y9th1VzGD=3n^YamUt8Y{Qpm zmqL5KBrJ7oV}Dg>(>C}r_be5<>$28De^#u8Mx;`lb}K{<=U{_(~E6u#5fU~PN{4$yyPH46U|7;{m9 zJ_rZtzw#6c-@VnK?(Yhh9EZw+BIOVY-=jW-zJ3o5ml%stfjr^+GmN7s92sJ4Md1hC z4A$lk;Ap9_2o)|nen>eAbM`|xHq6+8!jF0wYf#~)<9JU{2g3meiZt95q^J7BZV=!Dp0oYrZBkIA>_*{*9>xk(c){`ax}Zp* zp1;G5K?ZHV0spVWSbz!_95>5?B4s}c|LA4V_J0UBly*T);5dQ8zYR9FpwOn1u>uvY zIsUyeXr~-Uq3tkZ8wxM#Y^+A1sI9RG6)rj2O%2*92T>@de&tCN+IKV-qQV77$@rk1 zasY)6{SDgO0ZO|WkE8J7QiDFcSh(r9g))^ZD7>W3IFCX{+NYdB;XkGsjMaa@tz(VD zD7_?%?Py=5Vc=-@xFA7};7+XUb@47%`i@&(1Y<-=wlCf)d*ud3O&0TYfyM~iLn$F zE<0{x{FLJ;yoUZLJ5jj3r?CNr*VY?nQGxyly~Y^3PoB9>{+*`Qfc>T!f(}Q-(Q55bR zYV1K_K!0N!3U@Ic%0?6h-eNq4!kgL{i%{Vi$DqkUJB2Qh#r!gG#MbAxuuc@##M8OKls zRO18+Q|>Y7;}j_CV{Ag<{*K0SRJiGw+7z@?XzNsX2lJ;;<~v{-?NxT8@Brm1l=%Qm z?`o_@;hl_w!rZ=7c-}FCc~YK1;a!uBBPh%qWNbyDyobRYl>_&r9m`OGwh9%rSD~#H zP)U20T`0`zYivfLs++L}h3Ym2<4`R;>!_I)v{PtX4a^>897bWzSOec2sHI+ICkk`> z8&9F|P%=4^`#s_;o*M978IIpH5jud z;W6h2OB$4SU|bTCKMi_{R(A1B3yGUd@yLIoI>Hz5yl=A77Z|1 zON-#$gA9D{hQ+;&tth;whp`z2?hiROpzz)<#^Wd~y~S983badjU!`#xg=O~`2T*uF z?NXSl_rr4LOJPkfhYz$dno!}QW5u+fox<3!fDiUJXzK^zv5v-aRA9{tA0kgVg2Kvy z27O)$AEthVK7ANg6&p)X;gaJcQ-gNOK@?WA-WA4XHGH(KL7P7+oO7(15VTYFqwujl z#yS+%vi_77RJh>ycv;X+p|2l@$Ei=*gu*8}8I1iWgzJuVbAoot85BM_%Gi#=`pyP9 z>xJhWpCV5=j>3i^#!eJI-P>4?!p0(lHg6OzIzGcVDMwIvqOZXiJprG+#aN6A=MWmzCOn| zi^A@)24k`tzHyte28BIsjXG2~<@hG+M`7)J6ZSHm%6b&O#rjd`+qZ;sj(uZ-cFHys zzTMS$3>9uV_SXmPl&4Yn4&$QiL*YPgV;u_rLw(9(RJiOo_+ZdZIgP@1sbATJ!Xf&r zY((LErN(kpV9bQWv`4vs0{4R)Cs8=U_$&132>hUnK^Z>~o^u>!eJPCnQTX9K#sL(L z4KkiW;YXCCEJKAWj^i_fcFGYHemuY+=f`lOyTKfufd6f4EJTG%j+695If24Y=!dcg zg;R{P!Wf@|pSCd=kDm(kK{!3hIEcc}1{vE?IMdTukHXJyF&LYl3(q^w)&=d9b13|R z_9^l=Jk2^#j-&8P#!uOY!nt0?W)yza#aNBPdDe-t7!|HLemy5>r%=bQ;X;|gnz;bK zVcjUZQFw-Wl(ndE!|~gipq+9Cg=fba`%(BE^Q1h5!o_aJDinTC`;=vfxjD0BlWvGGgFYtVKgEF6ozZM&dQQ?Z?`t+ckau|ibQLe(+{S98| zYA|*$z~4I=>ruFYU)hYp|6`n#O(@(XUSW)G3RfNfcra+EoI+0p#la|JCkp@8(^!Q< zn>I#0Dm?A@_p+c^*^ffoKE`GgUUZAG5EY(r6ip6_l>;cW>t{THLUF0F7!@u%+E)d| z%4rlz?lBIc&|#pl4TaL4#s(B#+|gKp!YzT(hzb`SFPR<`E5}giIKtS6!hiHJHllEA zv9S~tt~g%GSSgoL=tQ~75fuJ&m~jAw&O?mdD7>t6x>uxs~ zv)4iI?#4<~c;4}P>Qzpn&}W1}8GYal>HQy&y7tfet<_XLBrayN_}XlzAc zTsLD43iq@%7NWvs$Gw$7v2qH9@yxSApU1;}{fsA3n9#*ojl#q>#sXAe4uwhdTVd@? zg11wyvLA)X{SC^T3{xmqS&2efV6>nDWeWE*Ps$M#rVciCqVSH}4Cdq=FpYAR6{zsM za^mz`{Qm(?jR10$%Ph}Gd4|O%xqEJ_2uvY7YD~@?JL9ucgh5GTv0Tdbr7>r2+ zG*Ygz28D;2ABEh9p=qqK8-?cE9gR1Mhvs#T7Uo51LWT2=`OJ$#-Sc5Ve`6C0kKAfp zMq%M};}{B$4mP%;u!!}btVRXeAiSG81?~+g?|znTSX^ctMBzRC4C;OlEa_;Fw?w$= zcyDD;teiw)=_q3_3h(P>Y(QZd^Pwz8g-ee2PYsHdqbMvNYHUa016>XJ@&Vxm$BMZ@ zv2qH950a;BMd7i|#$%}PyyHXUDXg&%!Ajb#>_p+iJ&eauSjD_43sK>s<0I38V&w!1 ztH&7oQTS*-V+#svC|6-D*1*R~494PP!ga^m#-LcafWpTaALR%Nj}J5UpzsOmQ8uHn zu8Xk}6>c~_*%TBj&!DiLauwFldic}`gE9CNZ0Kb?fx@Rd8I<{H*x1HcgbIv{@R@1G zArzjVeae$4e73v6Tz(cdQI4_z6)rhGM>z^@`y6Z@W$Z%X^R!Rdh{Bd)qXiXM+rod- zPvtNQPYyP=qVR>T##$7fDlwL#!cE5)=LE&dX%x2JW9&oWOMQ(^C~UjccnlS;JHE{P zDzxp(uziMc3WcwXHyFFGzz*80Fef|Ut9=aS`m4ZmJr3Hw6TWtC2C>$K%;5nXR;oxS+cbBs*Jm)x6 z85AogQ25?ZgSx*5hr1aoQGvRJ@6%_6c6=X>j5YS4@Ppfp$5A-i#$X*B70x?;I3Xxj z4x_;HJj##QUxZ`Z9X!iZEF5PX6~^$m@U-K{jK4zNKZX;Gzp@U6|0PeULj~F|oTNVC zC&UXUcR7CY1lw?mu~Sx{!V8X{UI>a6+Q5CB;?vWNV<`NLG8M}E8JyW@P{$egIpr#p z`E!ACg|n2UoJHXmV-3pq1w7ruU@o2(o^$;2!Jt^7?q9;WL5^RQ2F1!kRJiCkPkWW4 zDExY`u@!|2T^-y5Di$uRG_IrYn>hw!_#1d;l(8L!-!3&M=eGj&3eQe5_Mz~*e#RCQ zE_O1=zbIUB{C;{+tQ_y>^y$$B=k8t%?V+ksdC;W+VR1TqVjs6IKE;5+UKMQ9Z&y5I*m2D_o+vNBQ?NXMZ z0%I&ZUuRrE;ji}?yHU8_%UF-X--?ZesKA&DFHAESlNaFcV-3pqJKVV4po|;v|LCvs z7%DKn!cF?3oJZjwqYT#OKXwJ}gC52zRJiH*w>d$3H7K+#G8Ur3 zMaPS#2kn(3C=?AaHlxt4ld&8Xo^upazj79Z_7jZ#D3tUuHlons7Gnu2Tyd1n4B9Kl zP9@EJKCMj+ade+AFl-WzeOku?mHkw=rnL%Y}=Mt}}x6%3%~< z(cjpFLbp3cla;*qtKWC5-vD;P@i%Ng;z~54xrGppRpN* zS9dkmqHtSVV=*ewf8jNhs~kt+_A$mD6kglMcmjo9v`<-r3X~zdZklljh2FGBp-;Wx z_2enbQQ@ki5A`e5-3Q(<#Mp{L-_FJ|R3J}y<8*_*zY%!O$FUKGJK7j6sBp>Azbt64 z>__2F)}6u_-6`B~45$g(D<@F6YpC%Q3IlI77Nf%RjyKf>?UiRx7{q)llrae2%=jt? zQ5a0Q3Vj$1Zy922Lt#jFV-+gUKH;r%jWZ|=9dFR5q42hT#uF$ED=`+L!d1uc%AmbM z8N*@3ScA5VfRX(T+A+wjJ+sK=xuC9VdAaEGE|@pVG{GL(AG)t_Ir$d zC`|5SJb}WLj>b|{xaugQJql~N4DKIdY)4^gcVjgQ?+6Um=sSdG9n)Cf%5fAP7-sB5 zVft;x<0!nd$e>T}6c{UEMw3CgGvHm7#u*f5PBl)UP|mh;5`_mx8M{%a=xZ?d6;Rp5 zScSr@Hbx^VoOe`B3fe1&P^j*2Y(}A`ld%jH7*An#rEv^}IgF>W9fjH+#%dJiwlNl> z!WG9uRY7~@X%yS?S+ zq4^eLIVwEwXrX-ybI=0wCmSbGSit-%+fjI=o3R=dXrHjK-eBAp!lRU<>_=fyU*icB z-c3Ih`uJ|)x?}O2puKV$h4+j#_M-6K5@P`>JmXl(JS+Q9c;D^DMiiFaYAi*C%Z~R? z3)(A(P*_eol?^C-fcg~X^aBEGSy(~;l!GXIu%EFRg~x6&7NNpL$A_4It5D&lV^w|7UO9`xN5&ZR^&_ylm$3#FZa6+#7qnL{ps2S~g|$5m z+OiftPCt~zsK7i4kJlJyP~f*hzI{0KqV+ATa?^sVc3TtgWa9_x=8-)%1 zj3-g}bT?xi3L9ykvK)oa6d4Oq;gaKtxj}p7X%s%o{3%CJ*hIa`UKBn@y$Wsr9Bl4n ztVZGUZHxt|aL%#io}j(54~75kYivQ`$u7o96uv+?3T^#@aLMu1+@QVi#WBWy6rMWc z*g809uk1$QOSc;vP}s(JD=Sdp1;>}?1nrfxC~RjOltUjvjSrw{DO6@Fvq`ur$-n&QTXL;#^WfQYile* zg)5FVXprOSEn0CQTP+%qHICo+O5V?RJiK+^NgUqat4Lxh8f#X;2w{I zoWBUy9M4w;?Ui#V{B@df42A1MjVDp~+bzaoRG@z013I2^phP)|Lf65@Qz*Qm zv+)=zTz7Pv6O<@tPb%jdmGf%9k{pSSb_?y6QRe026gv1do@8j5j z!s{7-WjQKbcl2oqN|fhNcms7R^!W|Ym+@21q435sV;>6rdKuKw5AG;6mY@P<2>ok} zQz+cY_$j+k7|_jN3ylJqp6@@{RqdbNR^iz0qm2nz{!CM?} zDGo{$`u!H+tYgU7phVe;!dtr-jNMy>D~_SlgA(Nc3UBLU(1*9dup)!9hY4pK!$$=r z%61e+bTyWu!ez(EsX>Wy7=^)%n=q=su>pnAZH#(UpdMk&7=tk$19$f{)}q1<$Jn}{ zL^+GXxO)t8#=$+^jWsCTOMMD?_X>=uFrI!Xdr`Qrudxw@35>V02o>n3FtN&@jEOL5 zys;mJw?FQfOuY(yoGj2sVaf<&HwtC98|zWHpFCv&Dm?3$IxQ$sn7gU)j$Xz(6s8p! zi&5d4gJ*$Cl+!3or@hKS6y7<=*nz?f+M`hB40spgpe#fM#z2@k!#IZm_j(-1P1R-84b1LtFb}g~4&^FM zsBpniJ3c5;_M*VEKo0sm7ak%{q0bKq^jWB@G0vhek8%{sm?zdKB8eQh3hs;kuwiVV!*#R!uc%`zrXzP=mIA1XeTN3S+$* zKFWA2jO|B-n~pWiv2q!OkI^6HBnoTkkFpPikM}h;q40P|gEAi%o_Bm=PEevy#wTFi zC}Rf-pQPUkIo#(d`Q%l{`k6tAateh{jWPD1u%VCf1PY(N#aM<4jF+&n$~cO`X9gRL z&1c|=?#5aaKHJt(?5zt*6#Bjw zzIBhWABBB=4c7QR`1Y*^bMtNCx?}%>phS5Vh3`x^=;L?bz!-xuJpljH$JmU*!H&i< zRJi8&ZcR|4(6;ZwA=;-<#v%A#KjR4$4&P!dMTIMl@6QNIl%psd8Du<(!Vl<|Le38a z@`R%^4f=2ten>x*gD4yuYV1YfNAydfEkA z`%yUA*Vu%@PiU{gSp7s`eF>*1M>&qdPX`;@P&nPqScSsR0;35Po^_m=9+W7I)fxEt zP-80!XDLT{3>BVt{DS%w>iz|A|HrWhgwnSX}oC|9AaysxL^FO;inL4n_KIo6=?SK6yEM}HNb zb6l?pN|f^`{B62%3WXPj8M{&V`|ZYB6mAq5EvWFU_CC%dK{ZjxRvo!)}Zjx5@QJ}Ty}Jt7IaXKqwt@Djcq7&rhN*1 z?F=s~H5j{>2{#;Fnt~3>Gbp@#g0UBcuCz~CkHRa84a#_h@SLMtUC==}kHRa*8~ae` z-pAO0!hhXrtUv|YBlMsg&)AMaZ~CKbLE-h?jCCmVxy4w8!W-HejM*Cm`YQBY zWXRv}#(IM>d?WOmX`DvkjtRyg6#5S_cB61-U*ky>2J|r2qi`4Fp*)7dz`$6H3fCQP znj3UboUc8@?ry9@;Vtx6S%?a(6Jf|4gEEJ}Tc;VvQ5ZVH*o(s3 zdKnu~7*=d7Mun@6;Z;Eg_aNM^b=%CQQ`(Q%7aS?@y zl?H2MB21cL(8fvd_DKd~`gWK+)Yyf>6xyY%L!qp#!B~_D&pPg>T;&)FQwJMQqVSH+ z#&T4kt->_MO*w(W17nOmC`|8VtU=+O)UPz6!a2u`u|WrA2MX`%ZZL=Mf|(tSg{Z(h z3gy(V(D!n9aEP%Rg^Iq$Run34Gnk`Fm_-?=h1op} z%9ssvijBpnaLrL$6Le5cp)hxZu@8lZ1{$>WA*iE$$~siI;g~l!=%AcIp?-pK0ELGB z#s(A`ON>RR@SNje=0LfOLem`MA_~njjMFHzlo|3j@O+Mgw$FzJy^QrJJi>e{3sB)% z$HJ*W2jwUV{Eo}PSUw7ix*CinzvJrgZstX4LWQ%A#jH1F4+`(;V{AfUNoQjX3hym8 zT2SE`$5Q&G975rJeT^qjSVnu4l_YFR#2|88HEqB zu9c;zaK-UhWza!6jlzc}8MN&~u#$c%TTuA$t;S<0tfGC&B2>8M_()aIL1Fwp0;}n_ zatwu!-eWK)AB8n+D+f^c*jC5d9zh4;V*?#)*Rc&BFEN&(!ga^v%$dR%Jr19s9m*LL z)=f63a~*tggs~Te_0*&6K;cuj8Jkep(8*YX!lz4(6)0>Bj22X29SWbJ|H@$$o}eCu zF?|9)OS#HYRJiKcG%e_$97N%B{SDf}^En+hcQh8E0(A+Wr=QAx6t=J)lnp5ScUz+# z703~uq(0>Y3SSs(JcYtjU5yo}@Vw)Tl|cvPI0{?IQ|Q}P_!9k7=-ZbB=0?~?eF}52 z4ZcjCLS0{m?YA0_p~4G}uhaz{l&4YHF~K;D!dHhF+fmrr-B^hV*BxIw7j#f4?`yDY zszFiNb+l#!eLer>C(Fg@Yx=B2>8O`0n(egTh#R z7Y+?DHlgsnQez1!TyY$p8FWyn`!IZel(7SaBRz~YDEuHW>QUi><0$v23=lEaRqMS$Jq=<@Uw2lDpYvEab|ANK{D-;dHD5h#(ESk6dROr zLAd7l&CH;KaukJUh8eq2_$}k8Jc+`yJq*U;S>d|lcXdGr3WYy(GuEJRB`{i0fpHc7ILSDO!d2!&q3)~jr%uLY zR9Nn~HZ|y=Fs9ew&jXEZC_G31m6fPK|AoI)8OKq0eu%LZg}>5ng`B?%HyqdNgAU5m zDEw`wF$#qjs83mo3O5~pCr>$#!j1999u#;tk7GRwHy0X3sBp>g5BjSxNB=kylm-Kg z%_#iaEyfa5xZ>bho>Ju)3jaRH*n&daj>aNXxaxRORZyy&MWJYtaTtYmLyVm$6!$V7 zN1=U*u^1IDJ4&Vpr3!uEd7e_uvIcf7bRC{@m(a0~5G4xsQ7%2BqW z(6NWH7KQ(4W7MO<(~esY2Biw+-3l)qY-~rNQ&(dpD%^1V=bWHaIfX*!@y0$BUe?#3 zPcMTmosH$FKsmz8X^V0Jg|5?#qbR&$n6VXwZrzO4sPKa0l{G=Bat4L&V~kxW{MYTq zIuv@87_5~Z!WGA>W(1|maTIzEHJ(D@)t!u`sBq13TV+tHoJ8R@)UWJ8;r82%$5D7~ zTcZUP=)2HsszKj-!RvMyjKk}ocMr$w$rpOl7vc2_9DT?aUjMA44`m2%U|yB2DD>@O ztVD(DjyE!|3T=5K^eZzCp>W3lV-pJfI~vPS;i}`#%Aiy^fx-aBQQ3~dUEPf}C~)7$ zQI87e9B-N&lq%HyCKxo(U@iv1n>!gxQGxwT7(Cq|XE3~_zp({{A)SrosBqQ6{hw0h z2ns_78QV~J8|_xsqcE(plqoebt;6pRiG${Z~` z=NL0LC{><8;cn_tj-tSOd>mU*7}v#EiNZa!S6P4x=N

    2uhW`D2(rAY(U|@5`&!k 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 v&$Z6}G>Z)O0f_-Fr@Lxi9bG@1N<<=j7(q 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 aduXX%dqK9ds^Ke|7$)>(VdrA>F8>SPx?c|f diff --git a/ext/openssl/windows/x86/ssl/openssl.cnf b/ext/openssl/windows/x86/ssl/openssl.cnf deleted file mode 100644 index 1eb86c40..00000000 --- a/ext/openssl/windows/x86/ssl/openssl.cnf +++ /dev/null @@ -1,350 +0,0 @@ -# -# OpenSSL example configuration file. -# This is mostly being used for generation of certificate requests. -# - -# This definition stops the following lines choking if HOME isn't -# defined. -HOME = . -RANDFILE = $ENV::HOME/.rnd - -# Extra OBJECT IDENTIFIER info: -#oid_file = $ENV::HOME/.oid -oid_section = new_oids - -# To use this configuration file with the "-extfile" option of the -# "openssl x509" utility, name here the section containing the -# X.509v3 extensions to use: -# extensions = -# (Alternatively, use a configuration file that has only -# X.509v3 extensions in its main [= default] section.) - -[ new_oids ] - -# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. -# Add a simple OID like this: -# testoid1=1.2.3.4 -# Or use config file substitution like this: -# testoid2=${testoid1}.5.6 - -# Policies used by the TSA examples. -tsa_policy1 = 1.2.3.4.1 -tsa_policy2 = 1.2.3.4.5.6 -tsa_policy3 = 1.2.3.4.5.7 - -#################################################################### -[ ca ] -default_ca = CA_default # The default ca section - -#################################################################### -[ CA_default ] - -dir = ./demoCA # Where everything is kept -certs = $dir/certs # Where the issued certs are kept -crl_dir = $dir/crl # Where the issued crl are kept -database = $dir/index.txt # database index file. -#unique_subject = no # Set to 'no' to allow creation of - # several ctificates with same subject. -new_certs_dir = $dir/newcerts # default place for new certs. - -certificate = $dir/cacert.pem # The CA certificate -serial = $dir/serial # The current serial number -crlnumber = $dir/crlnumber # the current crl number - # must be commented out to leave a V1 CRL -crl = $dir/crl.pem # The current CRL -private_key = $dir/private/cakey.pem# The private key -RANDFILE = $dir/private/.rand # private random number file - -x509_extensions = usr_cert # The extentions to add to the cert - -# Comment out the following two lines for the "traditional" -# (and highly broken) format. -name_opt = ca_default # Subject Name options -cert_opt = ca_default # Certificate field options - -# Extension copying option: use with caution. -# copy_extensions = copy - -# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs -# so this is commented out by default to leave a V1 CRL. -# crlnumber must also be commented out to leave a V1 CRL. -# crl_extensions = crl_ext - -default_days = 365 # how long to certify for -default_crl_days= 30 # how long before next CRL -default_md = default # use public key default MD -preserve = no # keep passed DN ordering - -# A few difference way of specifying how similar the request should look -# For type CA, the listed attributes must be the same, and the optional -# and supplied fields are just that :-) -policy = policy_match - -# For the CA policy -[ policy_match ] -countryName = match -stateOrProvinceName = match -organizationName = match -organizationalUnitName = optional -commonName = supplied -emailAddress = optional - -# For the 'anything' policy -# At this point in time, you must list all acceptable 'object' -# types. -[ policy_anything ] -countryName = optional -stateOrProvinceName = optional -localityName = optional -organizationName = optional -organizationalUnitName = optional -commonName = supplied -emailAddress = optional - -#################################################################### -[ req ] -default_bits = 2048 -default_keyfile = privkey.pem -distinguished_name = req_distinguished_name -attributes = req_attributes -x509_extensions = v3_ca # The extentions to add to the self signed cert - -# Passwords for private keys if not present they will be prompted for -# input_password = secret -# output_password = secret - -# This sets a mask for permitted string types. There are several options. -# default: PrintableString, T61String, BMPString. -# pkix : PrintableString, BMPString (PKIX recommendation before 2004) -# utf8only: only UTF8Strings (PKIX recommendation after 2004). -# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). -# MASK:XXXX a literal mask value. -# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. -string_mask = utf8only - -# req_extensions = v3_req # The extensions to add to a certificate request - -[ req_distinguished_name ] -countryName = Country Name (2 letter code) -countryName_default = AU -countryName_min = 2 -countryName_max = 2 - -stateOrProvinceName = State or Province Name (full name) -stateOrProvinceName_default = Some-State - -localityName = Locality Name (eg, city) - -0.organizationName = Organization Name (eg, company) -0.organizationName_default = Internet Widgits Pty Ltd - -# we can do this but it is not needed normally :-) -#1.organizationName = Second Organization Name (eg, company) -#1.organizationName_default = World Wide Web Pty Ltd - -organizationalUnitName = Organizational Unit Name (eg, section) -#organizationalUnitName_default = - -commonName = Common Name (e.g. server FQDN or YOUR name) -commonName_max = 64 - -emailAddress = Email Address -emailAddress_max = 64 - -# SET-ex3 = SET extension number 3 - -[ req_attributes ] -challengePassword = A challenge password -challengePassword_min = 4 -challengePassword_max = 20 - -unstructuredName = An optional company name - -[ usr_cert ] - -# These extensions are added when 'ca' signs a request. - -# This goes against PKIX guidelines but some CAs do it and some software -# requires this to avoid interpreting an end user certificate as a CA. - -basicConstraints=CA:FALSE - -# Here are some examples of the usage of nsCertType. If it is omitted -# the certificate can be used for anything *except* object signing. - -# This is OK for an SSL server. -# nsCertType = server - -# For an object signing certificate this would be used. -# nsCertType = objsign - -# For normal client use this is typical -# nsCertType = client, email - -# and for everything including object signing: -# nsCertType = client, email, objsign - -# This is typical in keyUsage for a client certificate. -# keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -# This will be displayed in Netscape's comment listbox. -nsComment = "OpenSSL Generated Certificate" - -# PKIX recommendations harmless if included in all certificates. -subjectKeyIdentifier=hash -authorityKeyIdentifier=keyid,issuer - -# This stuff is for subjectAltName and issuerAltname. -# Import the email address. -# subjectAltName=email:copy -# An alternative to produce certificates that aren't -# deprecated according to PKIX. -# subjectAltName=email:move - -# Copy subject details -# issuerAltName=issuer:copy - -#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem -#nsBaseUrl -#nsRevocationUrl -#nsRenewalUrl -#nsCaPolicyUrl -#nsSslServerName - -# This is required for TSA certificates. -# extendedKeyUsage = critical,timeStamping - -[ v3_req ] - -# Extensions to add to a certificate request - -basicConstraints = CA:FALSE -keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -[ v3_ca ] - - -# Extensions for a typical CA - - -# PKIX recommendation. - -subjectKeyIdentifier=hash - -authorityKeyIdentifier=keyid:always,issuer - -# This is what PKIX recommends but some broken software chokes on critical -# extensions. -#basicConstraints = critical,CA:true -# So we do this instead. -basicConstraints = CA:true - -# Key usage: this is typical for a CA certificate. However since it will -# prevent it being used as an test self-signed certificate it is best -# left out by default. -# keyUsage = cRLSign, keyCertSign - -# Some might want this also -# nsCertType = sslCA, emailCA - -# Include email address in subject alt name: another PKIX recommendation -# subjectAltName=email:copy -# Copy issuer details -# issuerAltName=issuer:copy - -# DER hex encoding of an extension: beware experts only! -# obj=DER:02:03 -# Where 'obj' is a standard or added object -# You can even override a supported extension: -# basicConstraints= critical, DER:30:03:01:01:FF - -[ crl_ext ] - -# CRL extensions. -# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. - -# issuerAltName=issuer:copy -authorityKeyIdentifier=keyid:always - -[ proxy_cert_ext ] -# These extensions should be added when creating a proxy certificate - -# This goes against PKIX guidelines but some CAs do it and some software -# requires this to avoid interpreting an end user certificate as a CA. - -basicConstraints=CA:FALSE - -# Here are some examples of the usage of nsCertType. If it is omitted -# the certificate can be used for anything *except* object signing. - -# This is OK for an SSL server. -# nsCertType = server - -# For an object signing certificate this would be used. -# nsCertType = objsign - -# For normal client use this is typical -# nsCertType = client, email - -# and for everything including object signing: -# nsCertType = client, email, objsign - -# This is typical in keyUsage for a client certificate. -# keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -# This will be displayed in Netscape's comment listbox. -nsComment = "OpenSSL Generated Certificate" - -# PKIX recommendations harmless if included in all certificates. -subjectKeyIdentifier=hash -authorityKeyIdentifier=keyid,issuer - -# This stuff is for subjectAltName and issuerAltname. -# Import the email address. -# subjectAltName=email:copy -# An alternative to produce certificates that aren't -# deprecated according to PKIX. -# subjectAltName=email:move - -# Copy subject details -# issuerAltName=issuer:copy - -#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem -#nsBaseUrl -#nsRevocationUrl -#nsRenewalUrl -#nsCaPolicyUrl -#nsSslServerName - -# This really needs to be in place for it to be a proxy certificate. -proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo - -#################################################################### -[ tsa ] - -default_tsa = tsa_config1 # the default TSA section - -[ tsa_config1 ] - -# These are used by the TSA reply generation only. -dir = ./demoCA # TSA root directory -serial = $dir/tsaserial # The current serial number (mandatory) -crypto_device = builtin # OpenSSL engine to use for signing -signer_cert = $dir/tsacert.pem # The TSA signing certificate - # (optional) -certs = $dir/cacert.pem # Certificate chain to include in reply - # (optional) -signer_key = $dir/private/tsakey.pem # The TSA private key (optional) - -default_policy = tsa_policy1 # Policy if request did not specify it - # (optional) -other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) -digests = md5, sha1 # Acceptable message digests (mandatory) -accuracy = secs:1, millisecs:500, microsecs:100 # (optional) -clock_precision_digits = 0 # number of digits after dot. (optional) -ordering = yes # Is ordering defined for timestamps? - # (optional, default: no) -tsa_name = yes # Must the TSA name be included in the reply? - # (optional, default: no) -ess_cert_id_chain = no # Must the ESS cert id chain be included? - # (optional, default: no) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 929f8a13..60f71548 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,3 +19,4 @@ include_directories (${CMAKE_CURRENT_BINARY_DIR}/lib) add_subdirectory(lib) add_subdirectory(cmd) +add_subdirectory(test) diff --git a/src/lib/base/EventTypes.cpp b/src/lib/base/EventTypes.cpp index 6f1370fe..f9eff21b 100644 --- a/src/lib/base/EventTypes.cpp +++ b/src/lib/base/EventTypes.cpp @@ -82,7 +82,6 @@ REGISTER_EVENT(IpcServerProxy, messageReceived) // REGISTER_EVENT(IDataSocket, connected) -REGISTER_EVENT(IDataSocket, secureConnected) REGISTER_EVENT(IDataSocket, connectionFailed) // diff --git a/src/lib/base/EventTypes.h b/src/lib/base/EventTypes.h index 1d0b61e8..18b0939f 100644 --- a/src/lib/base/EventTypes.h +++ b/src/lib/base/EventTypes.h @@ -230,7 +230,6 @@ class IDataSocketEvents : public EventTypes { public: IDataSocketEvents() : m_connected(Event::kUnknown), - m_secureConnected(Event::kUnknown), m_connectionFailed(Event::kUnknown) { } //! @name accessors @@ -243,13 +242,6 @@ public: */ Event::Type connected(); - //! Get secure connected event type - /*! - Returns the secure socket connected event type. A secure socket sends - this event when a remote connection has been established. - */ - Event::Type secureConnected(); - //! Get connection failed event type /*! Returns the socket connection failed event type. A socket sends @@ -262,7 +254,6 @@ public: private: Event::Type m_connected; - Event::Type m_secureConnected; Event::Type m_connectionFailed; }; diff --git a/src/lib/client/Client.cpp b/src/lib/client/Client.cpp index 2f0a4803..4321074e 100644 --- a/src/lib/client/Client.cpp +++ b/src/lib/client/Client.cpp @@ -32,7 +32,6 @@ #include "net/TCPSocket.h" #include "net/IDataSocket.h" #include "net/ISocketFactory.h" -#include "net/SecureSocket.h" #include "arch/Arch.h" #include "base/Log.h" #include "base/IEventQueue.h" @@ -71,7 +70,6 @@ Client::Client( m_sendFileThread(NULL), m_writeToDropDirThread(NULL), m_socket(NULL), - m_useSecureNetwork(args.m_enableCrypto), m_args(args), m_enableClipboard(true) { @@ -147,7 +145,7 @@ Client::connect() } // create the socket - IDataSocket* socket = m_socketFactory->create(m_useSecureNetwork); + IDataSocket* socket = m_socketFactory->create(); m_socket = dynamic_cast(socket); // filter socket messages, including a packetizing filter @@ -443,18 +441,10 @@ Client::setupConnecting() { assert(m_stream != NULL); - if (m_args.m_enableCrypto) { - m_events->adoptHandler(m_events->forIDataSocket().secureConnected(), - m_stream->getEventTarget(), - new TMethodEventJob(this, - &Client::handleConnected)); - } - else { - m_events->adoptHandler(m_events->forIDataSocket().connected(), - m_stream->getEventTarget(), - new TMethodEventJob(this, - &Client::handleConnected)); - } + m_events->adoptHandler(m_events->forIDataSocket().connected(), + m_stream->getEventTarget(), + new TMethodEventJob(this, + &Client::handleConnected)); m_events->adoptHandler(m_events->forIDataSocket().connectionFailed(), m_stream->getEventTarget(), diff --git a/src/lib/client/Client.h b/src/lib/client/Client.h index fc852208..9aae4f3c 100644 --- a/src/lib/client/Client.h +++ b/src/lib/client/Client.h @@ -221,7 +221,6 @@ private: Thread* m_sendFileThread; Thread* m_writeToDropDirThread; TCPSocket* m_socket; - bool m_useSecureNetwork; ClientArgs m_args; bool m_enableClipboard; }; diff --git a/src/lib/core/App.h b/src/lib/core/App.h index fb8bf545..595e1cd0 100644 --- a/src/lib/core/App.h +++ b/src/lib/core/App.h @@ -155,8 +155,7 @@ private: " -1, --no-restart do not try to restart on failure.\n" \ "* --restart restart the server automatically if it fails.\n" \ " -l --log write log messages to file.\n" \ - " --enable-drag-drop enable file drag & drop.\n" \ - " --enable-crypto enable the crypto (ssl) plugin.\n" + " --enable-drag-drop enable file drag & drop.\n" #define HELP_COMMON_INFO_2 \ " -h, --help display this help and exit.\n" \ diff --git a/src/lib/core/ArgParser.cpp b/src/lib/core/ArgParser.cpp index d68b4a1b..a2e0475f 100644 --- a/src/lib/core/ArgParser.cpp +++ b/src/lib/core/ArgParser.cpp @@ -291,7 +291,8 @@ ArgParser::parseGenericArgs(int argc, const char* const* argv, int& i) } } else if (isArg(i, argc, argv, NULL, "--enable-crypto")) { - argsBase().m_enableCrypto = true; + LOG((CLOG_INFO "--enable-crypto ignored, TLS is no longer supported in Synergy Core")); + return false; } else if (isArg(i, argc, argv, NULL, "--profile-dir", 1)) { argsBase().m_profileDirectory = argv[++i]; diff --git a/src/lib/core/ArgsBase.cpp b/src/lib/core/ArgsBase.cpp index b78a2e06..ee5bf35c 100644 --- a/src/lib/core/ArgsBase.cpp +++ b/src/lib/core/ArgsBase.cpp @@ -42,7 +42,6 @@ m_enableIpc(false), m_enableDragDrop(false), m_shouldExit(false), m_synergyAddress(), -m_enableCrypto(false), m_profileDirectory(""), m_pluginDirectory("") { diff --git a/src/lib/core/ArgsBase.h b/src/lib/core/ArgsBase.h index 41e94157..f8ece829 100644 --- a/src/lib/core/ArgsBase.h +++ b/src/lib/core/ArgsBase.h @@ -48,7 +48,6 @@ public: #endif bool m_shouldExit; String m_synergyAddress; - bool m_enableCrypto; String m_profileDirectory; String m_pluginDirectory; }; diff --git a/src/lib/core/ServerApp.cpp b/src/lib/core/ServerApp.cpp index d080c502..d487ca3f 100644 --- a/src/lib/core/ServerApp.cpp +++ b/src/lib/core/ServerApp.cpp @@ -629,8 +629,7 @@ ServerApp::openClientListener(const NetworkAddress& address) ClientListener* listen = new ClientListener( address, new TCPSocketFactory(m_events, getSocketMultiplexer()), - m_events, - args().m_enableCrypto); + m_events); m_events->adoptHandler( m_events->forClientListener().connected(), listen, diff --git a/src/lib/net/ISocketFactory.h b/src/lib/net/ISocketFactory.h index 628535db..8f1b3838 100644 --- a/src/lib/net/ISocketFactory.h +++ b/src/lib/net/ISocketFactory.h @@ -34,10 +34,10 @@ public: //@{ //! Create data socket - virtual IDataSocket* create(bool secure) const = 0; + virtual IDataSocket* create() const = 0; //! Create listen socket - virtual IListenSocket* createListen(bool secure) const = 0; + virtual IListenSocket* createListen() const = 0; //@} }; diff --git a/src/lib/net/SecureListenSocket.cpp b/src/lib/net/SecureListenSocket.cpp deleted file mode 100644 index b0b50506..00000000 --- a/src/lib/net/SecureListenSocket.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2015-2016 Symless Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file LICENSE that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "SecureListenSocket.h" - -#include "SecureSocket.h" -#include "net/NetworkAddress.h" -#include "net/SocketMultiplexer.h" -#include "net/TSocketMultiplexerMethodJob.h" -#include "arch/XArch.h" - -static const char s_certificateDir[] = { "SSL" }; -static const char s_certificateFilename[] = { "Synergy.pem" }; - -// -// SecureListenSocket -// - -SecureListenSocket::SecureListenSocket( - IEventQueue* events, - SocketMultiplexer* socketMultiplexer) : - TCPListenSocket(events, socketMultiplexer) -{ -} - -SecureListenSocket::~SecureListenSocket() -{ - SecureSocketSet::iterator it; - for (it = m_secureSocketSet.begin(); it != m_secureSocketSet.end(); it++) { - delete *it; - } - m_secureSocketSet.clear(); -} - -IDataSocket* -SecureListenSocket::accept() -{ - SecureSocket* socket = NULL; - try { - socket = new SecureSocket( - m_events, - m_socketMultiplexer, - ARCH->acceptSocket(m_socket, NULL)); - socket->initSsl(true); - - if (socket != NULL) { - setListeningJob(); - } - - String certificateFilename = synergy::string::sprintf("%s/%s/%s", - ARCH->getProfileDirectory().c_str(), - s_certificateDir, - s_certificateFilename); - - bool loaded = socket->loadCertificates(certificateFilename); - if (!loaded) { - delete socket; - return NULL; - } - - socket->secureAccept(); - - m_secureSocketSet.insert(socket); - - return dynamic_cast(socket); - } - catch (XArchNetwork&) { - if (socket != NULL) { - delete socket; - setListeningJob(); - } - return NULL; - } - catch (std::exception &ex) { - if (socket != NULL) { - delete socket; - setListeningJob(); - } - throw ex; - } -} diff --git a/src/lib/net/SecureListenSocket.h b/src/lib/net/SecureListenSocket.h deleted file mode 100644 index 340dba5d..00000000 --- a/src/lib/net/SecureListenSocket.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2015-2016 Symless Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file LICENSE that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "net/TCPListenSocket.h" -#include "common/stdset.h" - -class IEventQueue; -class SocketMultiplexer; -class IDataSocket; - -class SecureListenSocket : public TCPListenSocket{ -public: - SecureListenSocket(IEventQueue* events, - SocketMultiplexer* socketMultiplexer); - ~SecureListenSocket(); - - // IListenSocket overrides - virtual IDataSocket* - accept(); - -private: - typedef std::set SecureSocketSet; - - SecureSocketSet m_secureSocketSet; -}; diff --git a/src/lib/net/SecureSocket.cpp b/src/lib/net/SecureSocket.cpp deleted file mode 100644 index 9dd3a816..00000000 --- a/src/lib/net/SecureSocket.cpp +++ /dev/null @@ -1,856 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2015-2016 Symless Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file LICENSE that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "SecureSocket.h" - -#include "net/TSocketMultiplexerMethodJob.h" -#include "base/TMethodEventJob.h" -#include "net/TCPSocket.h" -#include "mt/Lock.h" -#include "arch/XArch.h" -#include "base/Log.h" - -#include -#include -#include -#include -#include -#include - -// -// SecureSocket -// - -#define MAX_ERROR_SIZE 65535 - -static const float s_retryDelay = 0.01f; - -enum { - kMsgSize = 128 -}; - -static const char kFingerprintDirName[] = "SSL/Fingerprints"; -//static const char kFingerprintLocalFilename[] = "Local.txt"; -static const char kFingerprintTrustedServersFilename[] = "TrustedServers.txt"; -//static const char kFingerprintTrustedClientsFilename[] = "TrustedClients.txt"; - -struct Ssl { - SSL_CTX* m_context; - SSL* m_ssl; -}; - -SecureSocket::SecureSocket( - IEventQueue* events, - SocketMultiplexer* socketMultiplexer) : - TCPSocket(events, socketMultiplexer), - m_ssl(nullptr), - m_secureReady(false), - m_fatal(false) -{ -} - -SecureSocket::SecureSocket( - IEventQueue* events, - SocketMultiplexer* socketMultiplexer, - ArchSocket socket) : - TCPSocket(events, socketMultiplexer, socket), - m_ssl(nullptr), - m_secureReady(false), - m_fatal(false) -{ -} - -SecureSocket::~SecureSocket() -{ - isFatal(true); - if (m_ssl->m_ssl != NULL) { - SSL_shutdown(m_ssl->m_ssl); - - SSL_free(m_ssl->m_ssl); - m_ssl->m_ssl = NULL; - } - if (m_ssl->m_context != NULL) { - SSL_CTX_free(m_ssl->m_context); - m_ssl->m_context = NULL; - } - ARCH->sleep(1); - delete m_ssl; -} - -void -SecureSocket::close() -{ - isFatal(true); - - SSL_shutdown(m_ssl->m_ssl); - - TCPSocket::close(); -} - -void -SecureSocket::connect(const NetworkAddress& addr) -{ - m_events->adoptHandler(m_events->forIDataSocket().connected(), - getEventTarget(), - new TMethodEventJob(this, - &SecureSocket::handleTCPConnected)); - - TCPSocket::connect(addr); -} - -ISocketMultiplexerJob* -SecureSocket::newJob() -{ - // after TCP connection is established, SecureSocket will pick up - // connected event and do secureConnect - if (m_connected && !m_secureReady) { - return NULL; - } - - return TCPSocket::newJob(); -} - -void -SecureSocket::secureConnect() -{ - setJob(new TSocketMultiplexerMethodJob( - this, &SecureSocket::serviceConnect, - getSocket(), isReadable(), isWritable())); -} - -void -SecureSocket::secureAccept() -{ - setJob(new TSocketMultiplexerMethodJob( - this, &SecureSocket::serviceAccept, - getSocket(), isReadable(), isWritable())); -} - -TCPSocket::EJobResult -SecureSocket::doRead() -{ - static UInt8 buffer[4096]; - memset(buffer, 0, sizeof(buffer)); - int bytesRead = 0; - int status = 0; - - if (isSecureReady()) { - status = secureRead(buffer, sizeof(buffer), bytesRead); - if (status < 0) { - return kBreak; - } - else if (status == 0) { - return kNew; - } - } - else { - return kRetry; - } - - if (bytesRead > 0) { - bool wasEmpty = (m_inputBuffer.getSize() == 0); - - // slurp up as much as possible - do { - m_inputBuffer.write(buffer, bytesRead); - - status = secureRead(buffer, sizeof(buffer), bytesRead); - if (status < 0) { - return kBreak; - } - } while (bytesRead > 0 || status > 0); - - // send input ready if input buffer was empty - if (wasEmpty) { - sendEvent(m_events->forIStream().inputReady()); - } - } - else { - // remote write end of stream hungup. our input side - // has therefore shutdown but don't flush our buffer - // since there's still data to be read. - sendEvent(m_events->forIStream().inputShutdown()); - if (!m_writable && m_inputBuffer.getSize() == 0) { - sendEvent(m_events->forISocket().disconnected()); - m_connected = false; - } - m_readable = false; - return kNew; - } - - return kRetry; -} - -TCPSocket::EJobResult -SecureSocket::doWrite() -{ - static bool s_retry = false; - static int s_retrySize = 0; - static void* s_staticBuffer = NULL; - - // write data - int bufferSize = 0; - int bytesWrote = 0; - int status = 0; - - if (s_retry) { - bufferSize = s_retrySize; - } - else { - bufferSize = m_outputBuffer.getSize(); - s_staticBuffer = malloc(bufferSize); - memcpy(s_staticBuffer, m_outputBuffer.peek(bufferSize), bufferSize); - } - - if (bufferSize == 0) { - return kRetry; - } - - if (isSecureReady()) { - status = secureWrite(s_staticBuffer, bufferSize, bytesWrote); - if (status > 0) { - s_retry = false; - bufferSize = 0; - free(s_staticBuffer); - s_staticBuffer = NULL; - } - else if (status < 0) { - return kBreak; - } - else if (status == 0) { - s_retry = true; - s_retrySize = bufferSize; - return kNew; - } - } - else { - return kRetry; - } - - if (bytesWrote > 0) { - discardWrittenData(bytesWrote); - return kNew; - } - - return kRetry; -} - -int -SecureSocket::secureRead(void* buffer, int size, int& read) -{ - if (m_ssl->m_ssl != NULL) { - LOG((CLOG_DEBUG2 "reading secure socket")); - read = SSL_read(m_ssl->m_ssl, buffer, size); - - static int retry; - - // Check result will cleanup the connection in the case of a fatal - checkResult(read, retry); - - if (retry) { - return 0; - } - - if (isFatal()) { - return -1; - } - } - // According to SSL spec, the number of bytes read must not be negative and - // not have an error code from SSL_get_error(). If this happens, it is - // itself an error. Let the parent handle the case - return read; -} - -int -SecureSocket::secureWrite(const void* buffer, int size, int& wrote) -{ - if (m_ssl->m_ssl != NULL) { - LOG((CLOG_DEBUG2 "writing secure socket:%p", this)); - - wrote = SSL_write(m_ssl->m_ssl, buffer, size); - - static int retry; - - // Check result will cleanup the connection in the case of a fatal - checkResult(wrote, retry); - - if (retry) { - return 0; - } - - if (isFatal()) { - return -1; - } - } - // According to SSL spec, r must not be negative and not have an error code - // from SSL_get_error(). If this happens, it is itself an error. Let the - // parent handle the case - return wrote; -} - -bool -SecureSocket::isSecureReady() -{ - return m_secureReady; -} - -void -SecureSocket::initSsl(bool server) -{ - m_ssl = new Ssl(); - m_ssl->m_context = NULL; - m_ssl->m_ssl = NULL; - - initContext(server); -} - -bool -SecureSocket::loadCertificates(String& filename) -{ - if (filename.empty()) { - showError("ssl certificate is not specified"); - return false; - } - else { - std::ifstream file(filename.c_str()); - bool exist = file.good(); - file.close(); - - if (!exist) { - String errorMsg("ssl certificate doesn't exist: "); - errorMsg.append(filename); - showError(errorMsg.c_str()); - return false; - } - } - - int r = 0; - r = SSL_CTX_use_certificate_file(m_ssl->m_context, filename.c_str(), SSL_FILETYPE_PEM); - if (r <= 0) { - showError("could not use ssl certificate"); - return false; - } - - r = SSL_CTX_use_PrivateKey_file(m_ssl->m_context, filename.c_str(), SSL_FILETYPE_PEM); - if (r <= 0) { - showError("could not use ssl private key"); - return false; - } - - r = SSL_CTX_check_private_key(m_ssl->m_context); - if (!r) { - showError("could not verify ssl private key"); - return false; - } - - return true; -} - -void -SecureSocket::initContext(bool server) -{ - SSL_library_init(); - - const SSL_METHOD* method; - - // load & register all cryptos, etc. - OpenSSL_add_all_algorithms(); - - // load all error messages - SSL_load_error_strings(); - - if (CLOG->getFilter() >= kINFO) { - showSecureLibInfo(); - } - - // SSLv23_method uses TLSv1, with the ability to fall back to SSLv3 - if (server) { - method = SSLv23_server_method(); - } - else { - method = SSLv23_client_method(); - } - - // create new context from method - SSL_METHOD* m = const_cast(method); - m_ssl->m_context = SSL_CTX_new(m); - - // drop SSLv3 support - SSL_CTX_set_options(m_ssl->m_context, SSL_OP_NO_SSLv3); - - if (m_ssl->m_context == NULL) { - showError(); - } -} - -void -SecureSocket::createSSL() -{ - // I assume just one instance is needed - // get new SSL state with context - if (m_ssl->m_ssl == NULL) { - m_ssl->m_ssl = SSL_new(m_ssl->m_context); - } -} - -int -SecureSocket::secureAccept(int socket) -{ - createSSL(); - - // set connection socket to SSL state - SSL_set_fd(m_ssl->m_ssl, socket); - - LOG((CLOG_DEBUG2 "accepting secure socket")); - int r = SSL_accept(m_ssl->m_ssl); - - static int retry; - - checkResult(r, retry); - - if (isFatal()) { - // tell user and sleep so the socket isn't hammered. - LOG((CLOG_ERR "failed to accept secure socket")); - LOG((CLOG_INFO "client connection may not be secure")); - m_secureReady = false; - ARCH->sleep(1); - retry = 0; - return -1; // Failed, error out - } - - // If not fatal and no retry, state is good - if (retry == 0) { - m_secureReady = true; - LOG((CLOG_INFO "accepted secure socket")); - if (CLOG->getFilter() >= kDEBUG1) { - showSecureCipherInfo(); - } - showSecureConnectInfo(); - return 1; - } - - // If not fatal and retry is set, not ready, and return retry - if (retry > 0) { - LOG((CLOG_DEBUG2 "retry accepting secure socket")); - m_secureReady = false; - ARCH->sleep(s_retryDelay); - return 0; - } - - // no good state exists here - LOG((CLOG_ERR "unexpected state attempting to accept connection")); - return -1; -} - -int -SecureSocket::secureConnect(int socket) -{ - createSSL(); - - // attach the socket descriptor - SSL_set_fd(m_ssl->m_ssl, socket); - - LOG((CLOG_DEBUG2 "connecting secure socket")); - int r = SSL_connect(m_ssl->m_ssl); - - static int retry; - - checkResult(r, retry); - - if (isFatal()) { - LOG((CLOG_ERR "failed to connect secure socket")); - retry = 0; - return -1; - } - - // If we should retry, not ready and return 0 - if (retry > 0) { - LOG((CLOG_DEBUG2 "retry connect secure socket")); - m_secureReady = false; - ARCH->sleep(s_retryDelay); - return 0; - } - - retry = 0; - // No error, set ready, process and return ok - m_secureReady = true; - if (verifyCertFingerprint()) { - LOG((CLOG_INFO "connected to secure socket")); - if (!showCertificate()) { - disconnect(); - return -1;// Cert fail, error - } - } - else { - LOG((CLOG_ERR "failed to verify server certificate fingerprint")); - disconnect(); - return -1; // Fingerprint failed, error - } - LOG((CLOG_DEBUG2 "connected secure socket")); - if (CLOG->getFilter() >= kDEBUG1) { - showSecureCipherInfo(); - } - showSecureConnectInfo(); - return 1; -} - -bool -SecureSocket::showCertificate() -{ - X509* cert; - char* line; - - // get the server's certificate - cert = SSL_get_peer_certificate(m_ssl->m_ssl); - if (cert != NULL) { - line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0); - LOG((CLOG_INFO "server ssl certificate info: %s", line)); - OPENSSL_free(line); - X509_free(cert); - } - else { - showError("server has no ssl certificate"); - return false; - } - - return true; -} - -void -SecureSocket::checkResult(int status, int& retry) -{ - // ssl errors are a little quirky. the "want" errors are normal and - // should result in a retry. - - int errorCode = SSL_get_error(m_ssl->m_ssl, status); - - switch (errorCode) { - case SSL_ERROR_NONE: - retry = 0; - // operation completed - break; - - case SSL_ERROR_ZERO_RETURN: - // connection closed - isFatal(true); - LOG((CLOG_DEBUG "ssl connection closed")); - break; - - case SSL_ERROR_WANT_READ: - retry++; - LOG((CLOG_DEBUG2 "want to read, error=%d, attempt=%d", errorCode, retry)); - break; - - case SSL_ERROR_WANT_WRITE: - // Need to make sure the socket is known to be writable so the impending - // select action actually triggers on a write. This isn't necessary for - // m_readable because the socket logic is always readable - m_writable = true; - retry++; - LOG((CLOG_DEBUG2 "want to write, error=%d, attempt=%d", errorCode, retry)); - break; - - case SSL_ERROR_WANT_CONNECT: - retry++; - LOG((CLOG_DEBUG2 "want to connect, error=%d, attempt=%d", errorCode, retry)); - break; - - case SSL_ERROR_WANT_ACCEPT: - retry++; - LOG((CLOG_DEBUG2 "want to accept, error=%d, attempt=%d", errorCode, retry)); - break; - - case SSL_ERROR_SYSCALL: - LOG((CLOG_ERR "ssl error occurred (system call failure)")); - if (ERR_peek_error() == 0) { - if (status == 0) { - LOG((CLOG_ERR "eof violates ssl protocol")); - } - else if (status == -1) { - // underlying socket I/O reproted an error - try { - ARCH->throwErrorOnSocket(getSocket()); - } - catch (XArchNetwork& e) { - LOG((CLOG_ERR "%s", e.what())); - } - } - } - - isFatal(true); - break; - - case SSL_ERROR_SSL: - LOG((CLOG_ERR "ssl error occurred (generic failure)")); - isFatal(true); - break; - - default: - LOG((CLOG_ERR "ssl error occurred (unknown failure)")); - isFatal(true); - break; - } - - if (isFatal()) { - retry = 0; - showError(); - disconnect(); - } -} - -void -SecureSocket::showError(const char* reason) -{ - if (reason != NULL) { - LOG((CLOG_ERR "%s", reason)); - } - - String error = getError(); - if (!error.empty()) { - LOG((CLOG_ERR "%s", error.c_str())); - } -} - -String -SecureSocket::getError() -{ - unsigned long e = ERR_get_error(); - - if (e != 0) { - char error[MAX_ERROR_SIZE]; - ERR_error_string_n(e, error, MAX_ERROR_SIZE); - return error; - } - else { - return ""; - } -} - -void -SecureSocket::disconnect() -{ - sendEvent(getEvents()->forISocket().stopRetry()); - sendEvent(getEvents()->forISocket().disconnected()); - sendEvent(getEvents()->forIStream().inputShutdown()); -} - -void -SecureSocket::formatFingerprint(String& fingerprint, bool hex, bool separator) -{ - if (hex) { - // to hexidecimal - synergy::string::toHex(fingerprint, 2); - } - - // all uppercase - synergy::string::uppercase(fingerprint); - - if (separator) { - // add colon to separate each 2 charactors - size_t separators = fingerprint.size() / 2; - for (size_t i = 1; i < separators; i++) { - fingerprint.insert(i * 3 - 1, ":"); - } - } -} - -bool -SecureSocket::verifyCertFingerprint() -{ - // calculate received certificate fingerprint - X509 *cert = cert = SSL_get_peer_certificate(m_ssl->m_ssl); - EVP_MD* tempDigest; - unsigned char tempFingerprint[EVP_MAX_MD_SIZE]; - unsigned int tempFingerprintLen; - tempDigest = (EVP_MD*)EVP_sha1(); - int digestResult = X509_digest(cert, tempDigest, tempFingerprint, &tempFingerprintLen); - - if (digestResult <= 0) { - LOG((CLOG_ERR "failed to calculate fingerprint, digest result: %d", digestResult)); - return false; - } - - // format fingerprint into hexdecimal format with colon separator - String fingerprint(reinterpret_cast(tempFingerprint), tempFingerprintLen); - formatFingerprint(fingerprint); - LOG((CLOG_NOTE "server fingerprint: %s", fingerprint.c_str())); - - String trustedServersFilename; - trustedServersFilename = synergy::string::sprintf( - "%s/%s/%s", - ARCH->getProfileDirectory().c_str(), - kFingerprintDirName, - kFingerprintTrustedServersFilename); - - // check if this fingerprint exist - String fileLine; - std::ifstream file; - file.open(trustedServersFilename.c_str()); - - bool isValid = false; - while (!file.eof() && file.is_open()) { - getline(file,fileLine); - if (!fileLine.empty()) { - if (fileLine.compare(fingerprint) == 0) { - isValid = true; - break; - } - } - } - - file.close(); - return isValid; -} - -ISocketMultiplexerJob* -SecureSocket::serviceConnect(ISocketMultiplexerJob* job, - bool, bool write, bool error) -{ - Lock lock(&getMutex()); - - int status = 0; -#ifdef SYSAPI_WIN32 - status = secureConnect(static_cast(getSocket()->m_socket)); -#elif SYSAPI_UNIX - status = secureConnect(getSocket()->m_fd); -#endif - - // If status < 0, error happened - if (status < 0) { - return NULL; - } - - // If status > 0, success - if (status > 0) { - sendEvent(m_events->forIDataSocket().secureConnected()); - return newJob(); - } - - // Retry case - return new TSocketMultiplexerMethodJob( - this, &SecureSocket::serviceConnect, - getSocket(), isReadable(), isWritable()); -} - -ISocketMultiplexerJob* -SecureSocket::serviceAccept(ISocketMultiplexerJob* job, - bool, bool write, bool error) -{ - Lock lock(&getMutex()); - - int status = 0; -#ifdef SYSAPI_WIN32 - status = secureAccept(static_cast(getSocket()->m_socket)); -#elif SYSAPI_UNIX - status = secureAccept(getSocket()->m_fd); -#endif - // If status < 0, error happened - if (status < 0) { - return NULL; - } - - // If status > 0, success - if (status > 0) { - sendEvent(m_events->forClientListener().accepted()); - return newJob(); - } - - // Retry case - return new TSocketMultiplexerMethodJob( - this, &SecureSocket::serviceAccept, - getSocket(), isReadable(), isWritable()); -} - -void -showCipherStackDesc(STACK_OF(SSL_CIPHER) * stack) { - char msg[kMsgSize]; - int i = 0; - for ( ; i < sk_SSL_CIPHER_num(stack) ; i++) { - const SSL_CIPHER * cipher = sk_SSL_CIPHER_value(stack,i); - - SSL_CIPHER_description(cipher, msg, kMsgSize); - - // Why does SSL put a newline in the description? - int pos = (int)strlen(msg) - 1; - if (msg[pos] == '\n') { - msg[pos] = '\0'; - } - - LOG((CLOG_DEBUG1 "%s",msg)); - } -} - -void -SecureSocket::showSecureCipherInfo() -{ - STACK_OF(SSL_CIPHER) * sStack = SSL_get_ciphers(m_ssl->m_ssl); - - if (sStack == NULL) { - LOG((CLOG_DEBUG1 "local cipher list not available")); - } - else { - LOG((CLOG_DEBUG1 "available local ciphers:")); - showCipherStackDesc(sStack); - } - -#if OPENSSL_VERSION_NUMBER < 0x10100000L - // m_ssl->m_ssl->session->ciphers is not forward compatable, - // In future release of OpenSSL, it's not visible, - STACK_OF(SSL_CIPHER) * cStack = m_ssl->m_ssl->session->ciphers; -#else - // Use SSL_get_client_ciphers() for newer versions - STACK_OF(SSL_CIPHER) * cStack = SSL_get_client_ciphers(m_ssl->m_ssl); -#endif - if (cStack == NULL) { - LOG((CLOG_DEBUG1 "remote cipher list not available")); - } - else { - LOG((CLOG_DEBUG1 "available remote ciphers:")); - showCipherStackDesc(cStack); - } - return; -} - -void -SecureSocket::showSecureLibInfo() -{ - LOG((CLOG_INFO "%s",SSLeay_version(SSLEAY_VERSION))); - LOG((CLOG_DEBUG1 "openSSL : %s",SSLeay_version(SSLEAY_CFLAGS))); - LOG((CLOG_DEBUG1 "openSSL : %s",SSLeay_version(SSLEAY_BUILT_ON))); - LOG((CLOG_DEBUG1 "openSSL : %s",SSLeay_version(SSLEAY_PLATFORM))); - LOG((CLOG_DEBUG1 "%s",SSLeay_version(SSLEAY_DIR))); - return; -} - -void -SecureSocket::showSecureConnectInfo() -{ - const SSL_CIPHER* cipher = SSL_get_current_cipher(m_ssl->m_ssl); - - if (cipher != NULL) { - char msg[kMsgSize]; - SSL_CIPHER_description(cipher, msg, kMsgSize); - LOG((CLOG_INFO "%s", msg)); - } - return; -} - -void -SecureSocket::handleTCPConnected(const Event& event, void*) -{ - secureConnect(); -} diff --git a/src/lib/net/SecureSocket.h b/src/lib/net/SecureSocket.h deleted file mode 100644 index 2292cd29..00000000 --- a/src/lib/net/SecureSocket.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2015-2016 Symless Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file LICENSE that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "net/TCPSocket.h" -#include "net/XSocket.h" - -class IEventQueue; -class SocketMultiplexer; -class ISocketMultiplexerJob; - -struct Ssl; - -//! Secure socket -/*! -A secure socket using SSL. -*/ -class SecureSocket : public TCPSocket { -public: - SecureSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer); - SecureSocket(IEventQueue* events, - SocketMultiplexer* socketMultiplexer, - ArchSocket socket); - ~SecureSocket(); - - // ISocket overrides - void close(); - - // IDataSocket overrides - virtual void connect(const NetworkAddress&); - - ISocketMultiplexerJob* - newJob(); - bool isFatal() const { return m_fatal; } - void isFatal(bool b) { m_fatal = b; } - bool isSecureReady(); - void secureConnect(); - void secureAccept(); - int secureRead(void* buffer, int size, int& read); - int secureWrite(const void* buffer, int size, int& wrote); - EJobResult doRead(); - EJobResult doWrite(); - void initSsl(bool server); - bool loadCertificates(String& CertFile); - -private: - // SSL - void initContext(bool server); - void createSSL(); - int secureAccept(int s); - int secureConnect(int s); - bool showCertificate(); - void checkResult(int n, int& retry); - void showError(const char* reason = NULL); - String getError(); - void disconnect(); - void formatFingerprint(String& fingerprint, - bool hex = true, - bool separator = true); - bool verifyCertFingerprint(); - - ISocketMultiplexerJob* - serviceConnect(ISocketMultiplexerJob*, - bool, bool, bool); - - ISocketMultiplexerJob* - serviceAccept(ISocketMultiplexerJob*, - bool, bool, bool); - - void showSecureConnectInfo(); - void showSecureLibInfo(); - void showSecureCipherInfo(); - - void handleTCPConnected(const Event& event, void*); - -private: - Ssl* m_ssl; - bool m_secureReady; - bool m_fatal; -}; diff --git a/src/lib/net/TCPSocket.cpp b/src/lib/net/TCPSocket.cpp index ff69ab2b..aa18f49a 100644 --- a/src/lib/net/TCPSocket.cpp +++ b/src/lib/net/TCPSocket.cpp @@ -256,8 +256,6 @@ TCPSocket::isReady() const bool TCPSocket::isFatal() const { - // TCP sockets aren't ever left in a fatal state. - LOG((CLOG_ERR "isFatal() not valid for non-secure connections")); return false; } diff --git a/src/lib/net/TCPSocketFactory.cpp b/src/lib/net/TCPSocketFactory.cpp index e8329980..b0d0717b 100644 --- a/src/lib/net/TCPSocketFactory.cpp +++ b/src/lib/net/TCPSocketFactory.cpp @@ -19,8 +19,6 @@ #include "net/TCPSocketFactory.h" #include "net/TCPSocket.h" #include "net/TCPListenSocket.h" -#include "net/SecureSocket.h" -#include "net/SecureListenSocket.h" #include "arch/Arch.h" #include "base/Log.h" @@ -41,28 +39,13 @@ TCPSocketFactory::~TCPSocketFactory() } IDataSocket* -TCPSocketFactory::create(bool secure) const +TCPSocketFactory::create() const { - if (secure) { - SecureSocket* secureSocket = new SecureSocket(m_events, m_socketMultiplexer); - secureSocket->initSsl (false); - return secureSocket; - } - else { - return new TCPSocket(m_events, m_socketMultiplexer); - } + return new TCPSocket(m_events, m_socketMultiplexer); } IListenSocket* -TCPSocketFactory::createListen(bool secure) const +TCPSocketFactory::createListen() const { - IListenSocket* socket = NULL; - if (secure) { - socket = new SecureListenSocket(m_events, m_socketMultiplexer); - } - else { - socket = new TCPListenSocket(m_events, m_socketMultiplexer); - } - - return socket; + return new TCPListenSocket(m_events, m_socketMultiplexer); } diff --git a/src/lib/net/TCPSocketFactory.h b/src/lib/net/TCPSocketFactory.h index 0b28851e..ffc29164 100644 --- a/src/lib/net/TCPSocketFactory.h +++ b/src/lib/net/TCPSocketFactory.h @@ -31,9 +31,9 @@ public: // ISocketFactory overrides virtual IDataSocket* - create(bool secure) const; + create() const; virtual IListenSocket* - createListen(bool secure) const; + createListen() const; private: IEventQueue* m_events; diff --git a/src/lib/server/ClientListener.cpp b/src/lib/server/ClientListener.cpp index 0d07e766..705794bb 100644 --- a/src/lib/server/ClientListener.cpp +++ b/src/lib/server/ClientListener.cpp @@ -35,17 +35,15 @@ ClientListener::ClientListener(const NetworkAddress& address, ISocketFactory* socketFactory, - IEventQueue* events, - bool enableCrypto) : + IEventQueue* events) : m_socketFactory(socketFactory), m_server(NULL), - m_events(events), - m_useSecureNetwork(enableCrypto) + m_events(events) { assert(m_socketFactory != NULL); try { - m_listen = m_socketFactory->createListen(m_useSecureNetwork); + m_listen = m_socketFactory->createListen(); // setup event handler m_events->adoptHandler(m_events->forIListenSocket().connecting(), @@ -133,12 +131,8 @@ ClientListener::handleClientConnecting(const Event&, void*) new TMethodEventJob(this, &ClientListener::handleClientAccepted, socket)); - // When using non SSL, server accepts clients immediately, while SSL - // has to call secure accept which may require retry - if (!m_useSecureNetwork) { - m_events->addEvent(Event(m_events->forClientListener().accepted(), - socket->getEventTarget())); - } + m_events->addEvent(Event(m_events->forClientListener().accepted(), + socket->getEventTarget())); } void diff --git a/src/lib/server/ClientListener.h b/src/lib/server/ClientListener.h index 4b69f0d9..cd9c1eb3 100644 --- a/src/lib/server/ClientListener.h +++ b/src/lib/server/ClientListener.h @@ -37,8 +37,7 @@ public: // The factories are adopted. ClientListener(const NetworkAddress&, ISocketFactory*, - IEventQueue* events, - bool enableCrypto); + IEventQueue* events); ~ClientListener(); //! @name manipulators @@ -83,5 +82,4 @@ private: WaitingClients m_waitingClients; Server* m_server; IEventQueue* m_events; - bool m_useSecureNetwork; }; diff --git a/src/test/global/TestEventQueue.cpp b/src/test/global/TestEventQueue.cpp index f28c46dd..470ab334 100644 --- a/src/test/global/TestEventQueue.cpp +++ b/src/test/global/TestEventQueue.cpp @@ -22,6 +22,8 @@ #include "base/SimpleEventQueueBuffer.h" #include "common/stdexcept.h" +class EventQueueTimer { }; + void TestEventQueue::raiseQuitEvent() { diff --git a/src/test/integtests/CMakeLists.txt b/src/test/integtests/CMakeLists.txt index f39968a3..825b1ef6 100644 --- a/src/test/integtests/CMakeLists.txt +++ b/src/test/integtests/CMakeLists.txt @@ -68,4 +68,4 @@ endif() add_executable(integtests ${sources}) target_link_libraries(integtests - arch base client common io ipc mt net platform server synergy gtest gmock ${libs} ${OPENSSL_LIBS}) + arch base client common io ipc mt net platform server core gtest gmock ${libs} ${OPENSSL_LIBS}) diff --git a/src/test/integtests/net/NetworkTests.cpp b/src/test/integtests/net/NetworkTests.cpp index 222ddb7f..610f2776 100644 --- a/src/test/integtests/net/NetworkTests.cpp +++ b/src/test/integtests/net/NetworkTests.cpp @@ -115,7 +115,7 @@ TEST_F(NetworkTests, sendToClient_mockData) // server SocketMultiplexer serverSocketMultiplexer; TCPSocketFactory* serverSocketFactory = new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, false); + ClientListener listener(serverAddress, serverSocketFactory, &m_events); NiceMock serverScreen; NiceMock primaryClient; NiceMock serverConfig; @@ -146,7 +146,6 @@ TEST_F(NetworkTests, sendToClient_mockData) ClientArgs clientArgs; clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); m_events.adoptHandler( @@ -173,7 +172,7 @@ TEST_F(NetworkTests, sendToClient_mockFile) // server SocketMultiplexer serverSocketMultiplexer; TCPSocketFactory* serverSocketFactory = new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, false); + ClientListener listener(serverAddress, serverSocketFactory, &m_events); NiceMock serverScreen; NiceMock primaryClient; NiceMock serverConfig; @@ -204,7 +203,6 @@ TEST_F(NetworkTests, sendToClient_mockFile) ClientArgs clientArgs; clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); m_events.adoptHandler( @@ -230,7 +228,7 @@ TEST_F(NetworkTests, sendToServer_mockData) // server SocketMultiplexer serverSocketMultiplexer; TCPSocketFactory* serverSocketFactory = new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, false); + ClientListener listener(serverAddress, serverSocketFactory, &m_events); NiceMock serverScreen; NiceMock primaryClient; NiceMock serverConfig; @@ -255,7 +253,6 @@ TEST_F(NetworkTests, sendToServer_mockData) ClientArgs clientArgs; clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); m_events.adoptHandler( @@ -287,7 +284,7 @@ TEST_F(NetworkTests, sendToServer_mockFile) // server SocketMultiplexer serverSocketMultiplexer; TCPSocketFactory* serverSocketFactory = new TCPSocketFactory(&m_events, &serverSocketMultiplexer); - ClientListener listener(serverAddress, serverSocketFactory, &m_events, false); + ClientListener listener(serverAddress, serverSocketFactory, &m_events); NiceMock serverScreen; NiceMock primaryClient; NiceMock serverConfig; @@ -312,7 +309,6 @@ TEST_F(NetworkTests, sendToServer_mockFile) ClientArgs clientArgs; clientArgs.m_enableDragDrop = true; - clientArgs.m_enableCrypto = false; Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); m_events.adoptHandler( diff --git a/src/test/mock/synergy/MockApp.h b/src/test/mock/synergy/MockApp.h index ffffe9a2..13f87626 100644 --- a/src/test/mock/synergy/MockApp.h +++ b/src/test/mock/synergy/MockApp.h @@ -26,7 +26,7 @@ class MockApp : public App { public: - MockApp() : App(NULL, NULL, NULL) { } + MockApp() : App(NULL, NULL) { } MOCK_METHOD0(help, void()); MOCK_METHOD0(loadConfig, void()); diff --git a/src/test/unittests/CMakeLists.txt b/src/test/unittests/CMakeLists.txt index 54131eb2..9e9b5dfe 100644 --- a/src/test/unittests/CMakeLists.txt +++ b/src/test/unittests/CMakeLists.txt @@ -68,4 +68,4 @@ endif() add_executable(unittests ${sources}) target_link_libraries(unittests - arch base client server common io net platform server synergy mt ipc gtest gmock shared ${libs} ${OPENSSL_LIBS}) + arch base client server common io net platform server core mt ipc gtest gmock shared ${libs} ${OPENSSL_LIBS}) diff --git a/src/test/unittests/synergy/ClipboardChunkTests.cpp b/src/test/unittests/synergy/ClipboardChunkTests.cpp index 1834b6e5..0ca91aba 100644 --- a/src/test/unittests/synergy/ClipboardChunkTests.cpp +++ b/src/test/unittests/synergy/ClipboardChunkTests.cpp @@ -22,19 +22,6 @@ TEST(ClipboardChunkTests, start_formatStartChunk) { -<<<<<<< HEAD - ClipboardID id = 0; - UInt32 sequence = 0; - String mockDataSize("10"); - ClipboardChunk* chunk = ClipboardChunk::start(id, sequence, mockDataSize); - - EXPECT_EQ(id, chunk->m_chunk[0]); - EXPECT_EQ(sequence, (UInt32)chunk->m_chunk[1]); - EXPECT_EQ(kDataStart, chunk->m_chunk[5]); - EXPECT_EQ('1', chunk->m_chunk[6]); - EXPECT_EQ('0', chunk->m_chunk[7]); - EXPECT_EQ('\0', chunk->m_chunk[8]); -======= ClipboardID id = 0; UInt32 sequence = 0; String mockDataSize("10"); @@ -48,33 +35,12 @@ TEST(ClipboardChunkTests, start_formatStartChunk) EXPECT_EQ('1', chunk->m_chunk[6]); EXPECT_EQ('0', chunk->m_chunk[7]); EXPECT_EQ('\0', chunk->m_chunk[8]); ->>>>>>> master delete chunk; } TEST(ClipboardChunkTests, data_formatDataChunk) { -<<<<<<< HEAD - ClipboardID id = 0; - UInt32 sequence = 1; - String mockData("mock data"); - ClipboardChunk* chunk = ClipboardChunk::data(id, sequence, mockData); - - EXPECT_EQ(id, chunk->m_chunk[0]); - EXPECT_EQ(sequence, (UInt32)chunk->m_chunk[1]); - EXPECT_EQ(kDataChunk, chunk->m_chunk[5]); - EXPECT_EQ('m', chunk->m_chunk[6]); - EXPECT_EQ('o', chunk->m_chunk[7]); - EXPECT_EQ('c', chunk->m_chunk[8]); - EXPECT_EQ('k', chunk->m_chunk[9]); - EXPECT_EQ(' ', chunk->m_chunk[10]); - EXPECT_EQ('d', chunk->m_chunk[11]); - EXPECT_EQ('a', chunk->m_chunk[12]); - EXPECT_EQ('t', chunk->m_chunk[13]); - EXPECT_EQ('a', chunk->m_chunk[14]); - EXPECT_EQ('\0', chunk->m_chunk[15]); -======= ClipboardID id = 0; UInt32 sequence = 1; String mockData("mock data"); @@ -95,23 +61,12 @@ TEST(ClipboardChunkTests, data_formatDataChunk) EXPECT_EQ('t', chunk->m_chunk[13]); EXPECT_EQ('a', chunk->m_chunk[14]); EXPECT_EQ('\0', chunk->m_chunk[15]); ->>>>>>> master delete chunk; } TEST(ClipboardChunkTests, end_formatDataChunk) { -<<<<<<< HEAD - ClipboardID id = 1; - UInt32 sequence = 1; - ClipboardChunk* chunk = ClipboardChunk::end(id, sequence); - - EXPECT_EQ(id, chunk->m_chunk[0]); - EXPECT_EQ(sequence, (UInt32)chunk->m_chunk[1]); - EXPECT_EQ(kDataEnd, chunk->m_chunk[5]); - EXPECT_EQ('\0', chunk->m_chunk[6]); -======= ClipboardID id = 1; UInt32 sequence = 1; ClipboardChunk* chunk = ClipboardChunk::end(id, sequence); @@ -122,7 +77,6 @@ TEST(ClipboardChunkTests, end_formatDataChunk) EXPECT_EQ(sequence, temp_m_chunk); EXPECT_EQ(kDataEnd, chunk->m_chunk[5]); EXPECT_EQ('\0', chunk->m_chunk[6]); ->>>>>>> master delete chunk; }

    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%0A)tf!rPT4_DKh9{$qIndJL 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�KG?@cy?fo^%t2>D1nAR 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 - -# ifdef OPENSSL_NO_AES -# error AES is disabled. -# endif - -# include - -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 -# define AES_BLOCK_SIZE 16 - -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be a hidden type, but EVP requires that the size be known */ -struct aes_key_st { -# ifdef AES_LONG - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -const char *AES_options(void); - -int AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); -int AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); - -int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); -int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); - -void AES_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); -void AES_decrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); - -void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key, const int enc); -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num); -void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char ivec[AES_BLOCK_SIZE], - unsigned char ecount_buf[AES_BLOCK_SIZE], - unsigned int *num); -/* NB: the IV is _two_ blocks long */ -void AES_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -/* NB: the IV is _four_ blocks long */ -void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - -int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); -int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); - - -#ifdef __cplusplus -} -#endif - -#endif /* !HEADER_AES_H */ diff --git a/ext/openssl/windows/x64/include/openssl/applink.c b/ext/openssl/windows/x64/include/openssl/applink.c deleted file mode 100644 index 2831b39e..00000000 --- a/ext/openssl/windows/x64/include/openssl/applink.c +++ /dev/null @@ -1,129 +0,0 @@ -#define APPLINK_STDIN 1 -#define APPLINK_STDOUT 2 -#define APPLINK_STDERR 3 -#define APPLINK_FPRINTF 4 -#define APPLINK_FGETS 5 -#define APPLINK_FREAD 6 -#define APPLINK_FWRITE 7 -#define APPLINK_FSETMOD 8 -#define APPLINK_FEOF 9 -#define APPLINK_FCLOSE 10 /* should not be used */ - -#define APPLINK_FOPEN 11 /* solely for completeness */ -#define APPLINK_FSEEK 12 -#define APPLINK_FTELL 13 -#define APPLINK_FFLUSH 14 -#define APPLINK_FERROR 15 -#define APPLINK_CLEARERR 16 -#define APPLINK_FILENO 17 /* to be used with below */ - -#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */ -#define APPLINK_READ 19 -#define APPLINK_WRITE 20 -#define APPLINK_LSEEK 21 -#define APPLINK_CLOSE 22 -#define APPLINK_MAX 22 /* always same as last macro */ - -#ifndef APPMACROS_ONLY -# include -# include -# include - -static void *app_stdin(void) -{ - return stdin; -} - -static void *app_stdout(void) -{ - return stdout; -} - -static void *app_stderr(void) -{ - return stderr; -} - -static int app_feof(FILE *fp) -{ - return feof(fp); -} - -static int app_ferror(FILE *fp) -{ - return ferror(fp); -} - -static void app_clearerr(FILE *fp) -{ - clearerr(fp); -} - -static int app_fileno(FILE *fp) -{ - return _fileno(fp); -} - -static int app_fsetmod(FILE *fp, char mod) -{ - return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT); -} - -#ifdef __cplusplus -extern "C" { -#endif - -__declspec(dllexport) -void ** -# if defined(__BORLANDC__) -/* - * __stdcall appears to be the only way to get the name - * decoration right with Borland C. Otherwise it works - * purely incidentally, as we pass no parameters. - */ - __stdcall -# else - __cdecl -# endif -OPENSSL_Applink(void) -{ - static int once = 1; - static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] = - { (void *)APPLINK_MAX }; - - if (once) { - OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin; - OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout; - OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr; - OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf; - OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets; - OPENSSL_ApplinkTable[APPLINK_FREAD] = fread; - OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite; - OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod; - OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof; - OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose; - - OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen; - OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek; - OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell; - OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush; - OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror; - OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; - OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; - - OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; - OPENSSL_ApplinkTable[APPLINK_READ] = _read; - OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; - OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; - OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; - - once = 0; - } - - return OPENSSL_ApplinkTable; -} - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/asn1.h b/ext/openssl/windows/x64/include/openssl/asn1.h deleted file mode 100644 index 68e791fc..00000000 --- a/ext/openssl/windows/x64/include/openssl/asn1.h +++ /dev/null @@ -1,1419 +0,0 @@ -/* crypto/asn1/asn1.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H - -# include -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include - -# include - -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define V_ASN1_UNIVERSAL 0x00 -# define V_ASN1_APPLICATION 0x40 -# define V_ASN1_CONTEXT_SPECIFIC 0x80 -# define V_ASN1_PRIVATE 0xc0 - -# define V_ASN1_CONSTRUCTED 0x20 -# define V_ASN1_PRIMITIVE_TAG 0x1f -# define V_ASN1_PRIMATIVE_TAG 0x1f - -# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ -# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ -# define V_ASN1_ANY -4/* used in ASN1 template code */ - -# define V_ASN1_NEG 0x100/* negative flag */ - -# define V_ASN1_UNDEF -1 -# define V_ASN1_EOC 0 -# define V_ASN1_BOOLEAN 1 /**/ -# define V_ASN1_INTEGER 2 -# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) -# define V_ASN1_BIT_STRING 3 -# define V_ASN1_OCTET_STRING 4 -# define V_ASN1_NULL 5 -# define V_ASN1_OBJECT 6 -# define V_ASN1_OBJECT_DESCRIPTOR 7 -# define V_ASN1_EXTERNAL 8 -# define V_ASN1_REAL 9 -# define V_ASN1_ENUMERATED 10 -# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) -# define V_ASN1_UTF8STRING 12 -# define V_ASN1_SEQUENCE 16 -# define V_ASN1_SET 17 -# define V_ASN1_NUMERICSTRING 18 /**/ -# define V_ASN1_PRINTABLESTRING 19 -# define V_ASN1_T61STRING 20 -# define V_ASN1_TELETEXSTRING 20/* alias */ -# define V_ASN1_VIDEOTEXSTRING 21 /**/ -# define V_ASN1_IA5STRING 22 -# define V_ASN1_UTCTIME 23 -# define V_ASN1_GENERALIZEDTIME 24 /**/ -# define V_ASN1_GRAPHICSTRING 25 /**/ -# define V_ASN1_ISO64STRING 26 /**/ -# define V_ASN1_VISIBLESTRING 26/* alias */ -# define V_ASN1_GENERALSTRING 27 /**/ -# define V_ASN1_UNIVERSALSTRING 28 /**/ -# define V_ASN1_BMPSTRING 30 -/* For use with d2i_ASN1_type_bytes() */ -# define B_ASN1_NUMERICSTRING 0x0001 -# define B_ASN1_PRINTABLESTRING 0x0002 -# define B_ASN1_T61STRING 0x0004 -# define B_ASN1_TELETEXSTRING 0x0004 -# define B_ASN1_VIDEOTEXSTRING 0x0008 -# define B_ASN1_IA5STRING 0x0010 -# define B_ASN1_GRAPHICSTRING 0x0020 -# define B_ASN1_ISO64STRING 0x0040 -# define B_ASN1_VISIBLESTRING 0x0040 -# define B_ASN1_GENERALSTRING 0x0080 -# define B_ASN1_UNIVERSALSTRING 0x0100 -# define B_ASN1_OCTET_STRING 0x0200 -# define B_ASN1_BIT_STRING 0x0400 -# define B_ASN1_BMPSTRING 0x0800 -# define B_ASN1_UNKNOWN 0x1000 -# define B_ASN1_UTF8STRING 0x2000 -# define B_ASN1_UTCTIME 0x4000 -# define B_ASN1_GENERALIZEDTIME 0x8000 -# define B_ASN1_SEQUENCE 0x10000 -/* For use with ASN1_mbstring_copy() */ -# define MBSTRING_FLAG 0x1000 -# define MBSTRING_UTF8 (MBSTRING_FLAG) -# define MBSTRING_ASC (MBSTRING_FLAG|1) -# define MBSTRING_BMP (MBSTRING_FLAG|2) -# define MBSTRING_UNIV (MBSTRING_FLAG|4) -# define SMIME_OLDMIME 0x400 -# define SMIME_CRLFEOL 0x800 -# define SMIME_STREAM 0x1000 - struct X509_algor_st; -DECLARE_STACK_OF(X509_ALGOR) - -# define DECLARE_ASN1_SET_OF(type)/* filled in by mkstack.pl */ -# define IMPLEMENT_ASN1_SET_OF(type)/* nothing, no longer needed */ - -/* - * We MUST make sure that, except for constness, asn1_ctx_st and - * asn1_const_ctx are exactly the same. Fortunately, as soon as the old ASN1 - * parsing macros are gone, we can throw this away as well... - */ -typedef struct asn1_ctx_st { - unsigned char *p; /* work char pointer */ - int eos; /* end of sequence read for indefinite - * encoding */ - int error; /* error code to use when returning an error */ - int inf; /* constructed if 0x20, indefinite is 0x21 */ - int tag; /* tag from last 'get object' */ - int xclass; /* class from last 'get object' */ - long slen; /* length of last 'get object' */ - unsigned char *max; /* largest value of p allowed */ - unsigned char *q; /* temporary variable */ - unsigned char **pp; /* variable */ - int line; /* used in error processing */ -} ASN1_CTX; - -typedef struct asn1_const_ctx_st { - const unsigned char *p; /* work char pointer */ - int eos; /* end of sequence read for indefinite - * encoding */ - int error; /* error code to use when returning an error */ - int inf; /* constructed if 0x20, indefinite is 0x21 */ - int tag; /* tag from last 'get object' */ - int xclass; /* class from last 'get object' */ - long slen; /* length of last 'get object' */ - const unsigned char *max; /* largest value of p allowed */ - const unsigned char *q; /* temporary variable */ - const unsigned char **pp; /* variable */ - int line; /* used in error processing */ -} ASN1_const_CTX; - -/* - * These are used internally in the ASN1_OBJECT to keep track of whether the - * names and data need to be free()ed - */ -# define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ -# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ -# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ -# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ -struct asn1_object_st { - const char *sn, *ln; - int nid; - int length; - const unsigned char *data; /* data remains const after init */ - int flags; /* Should we free this one */ -}; - -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ -/* - * This indicates that the ASN1_STRING is not a real value but just a place - * holder for the location where indefinite length constructed data should be - * inserted in the memory buffer - */ -# define ASN1_STRING_FLAG_NDEF 0x010 - -/* - * This flag is used by the CMS code to indicate that a string is not - * complete and is a place holder for content when it had all been accessed. - * The flag will be reset when content has been written to it. - */ - -# define ASN1_STRING_FLAG_CONT 0x020 -/* - * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING - * type. - */ -# define ASN1_STRING_FLAG_MSTRING 0x040 -/* This is the base type that holds just about everything :-) */ -struct asn1_string_st { - int length; - int type; - unsigned char *data; - /* - * The value of the following field depends on the type being held. It - * is mostly being used for BIT_STRING so if the input data has a - * non-zero 'unused bits' value, it will be handled correctly - */ - long flags; -}; - -/* - * ASN1_ENCODING structure: this is used to save the received encoding of an - * ASN1 type. This is useful to get round problems with invalid encodings - * which can break signatures. - */ - -typedef struct ASN1_ENCODING_st { - unsigned char *enc; /* DER encoding */ - long len; /* Length of encoding */ - int modified; /* set to 1 if 'enc' is invalid */ -} ASN1_ENCODING; - -/* Used with ASN1 LONG type: if a long is set to this it is omitted */ -# define ASN1_LONG_UNDEF 0x7fffffffL - -# define STABLE_FLAGS_MALLOC 0x01 -# define STABLE_NO_MASK 0x02 -# define DIRSTRING_TYPE \ - (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) -# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) - -typedef struct asn1_string_table_st { - int nid; - long minsize; - long maxsize; - unsigned long mask; - unsigned long flags; -} ASN1_STRING_TABLE; - -DECLARE_STACK_OF(ASN1_STRING_TABLE) - -/* size limits: this stuff is taken straight from RFC2459 */ - -# define ub_name 32768 -# define ub_common_name 64 -# define ub_locality_name 128 -# define ub_state_name 128 -# define ub_organization_name 64 -# define ub_organization_unit_name 64 -# define ub_title 64 -# define ub_email_address 128 - -/* - * Declarations for template structures: for full definitions see asn1t.h - */ -typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; -typedef struct ASN1_TLC_st ASN1_TLC; -/* This is just an opaque pointer */ -typedef struct ASN1_VALUE_st ASN1_VALUE; - -/* Declare ASN1 functions: the implement macro in in asn1t.h */ - -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) - -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) - -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); - -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); - -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) - -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); - -# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) - -# define CHECKED_D2I_OF(type, d2i) \ - ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) -# define CHECKED_I2D_OF(type, i2d) \ - ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) -# define CHECKED_NEW_OF(type, xnew) \ - ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) -# define CHECKED_PTR_OF(type, p) \ - ((void*) (1 ? p : (type*)0)) -# define CHECKED_PPTR_OF(type, p) \ - ((void**) (1 ? p : (type**)0)) - -# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) -# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) - -TYPEDEF_D2I2D_OF(void); - -/*- - * The following macros and typedefs allow an ASN1_ITEM - * to be embedded in a structure and referenced. Since - * the ASN1_ITEM pointers need to be globally accessible - * (possibly from shared libraries) they may exist in - * different forms. On platforms that support it the - * ASN1_ITEM structure itself will be globally exported. - * Other platforms will export a function that returns - * an ASN1_ITEM pointer. - * - * To handle both cases transparently the macros below - * should be used instead of hard coding an ASN1_ITEM - * pointer in a structure. - * - * The structure will look like this: - * - * typedef struct SOMETHING_st { - * ... - * ASN1_ITEM_EXP *iptr; - * ... - * } SOMETHING; - * - * It would be initialised as e.g.: - * - * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; - * - * and the actual pointer extracted with: - * - * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); - * - * Finally an ASN1_ITEM pointer can be extracted from an - * appropriate reference with: ASN1_ITEM_rptr(X509). This - * would be used when a function takes an ASN1_ITEM * argument. - * - */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else - -/* - * Platforms that can't easily handle shared global variables are declared as - * functions returning ASN1_ITEM pointers. - */ - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) - -# define ASN1_ITEM_rptr(ref) (ref##_it()) - -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif - -/* Parameters used by ASN1_STRING_print_ex() */ - -/* - * These determine which characters to escape: RFC2253 special characters, - * control characters and MSB set characters - */ - -# define ASN1_STRFLGS_ESC_2253 1 -# define ASN1_STRFLGS_ESC_CTRL 2 -# define ASN1_STRFLGS_ESC_MSB 4 - -/* - * This flag determines how we do escaping: normally RC2253 backslash only, - * set this to use backslash and quote. - */ - -# define ASN1_STRFLGS_ESC_QUOTE 8 - -/* These three flags are internal use only. */ - -/* Character is a valid PrintableString character */ -# define CHARTYPE_PRINTABLESTRING 0x10 -/* Character needs escaping if it is the first character */ -# define CHARTYPE_FIRST_ESC_2253 0x20 -/* Character needs escaping if it is the last character */ -# define CHARTYPE_LAST_ESC_2253 0x40 - -/* - * NB the internal flags are safely reused below by flags handled at the top - * level. - */ - -/* - * If this is set we convert all character strings to UTF8 first - */ - -# define ASN1_STRFLGS_UTF8_CONVERT 0x10 - -/* - * If this is set we don't attempt to interpret content: just assume all - * strings are 1 byte per character. This will produce some pretty odd - * looking output! - */ - -# define ASN1_STRFLGS_IGNORE_TYPE 0x20 - -/* If this is set we include the string type in the output */ -# define ASN1_STRFLGS_SHOW_TYPE 0x40 - -/* - * This determines which strings to display and which to 'dump' (hex dump of - * content octets or DER encoding). We can only dump non character strings or - * everything. If we don't dump 'unknown' they are interpreted as character - * strings with 1 octet per character and are subject to the usual escaping - * options. - */ - -# define ASN1_STRFLGS_DUMP_ALL 0x80 -# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 - -/* - * These determine what 'dumping' does, we can dump the content octets or the - * DER encoding: both use the RFC2253 #XXXXX notation. - */ - -# define ASN1_STRFLGS_DUMP_DER 0x200 - -/* - * All the string flags consistent with RFC2253, escaping control characters - * isn't essential in RFC2253 but it is advisable anyway. - */ - -# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ - ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - ASN1_STRFLGS_UTF8_CONVERT | \ - ASN1_STRFLGS_DUMP_UNKNOWN | \ - ASN1_STRFLGS_DUMP_DER) - -DECLARE_STACK_OF(ASN1_INTEGER) -DECLARE_ASN1_SET_OF(ASN1_INTEGER) - -DECLARE_STACK_OF(ASN1_GENERALSTRING) - -typedef struct asn1_type_st { - int type; - union { - char *ptr; - ASN1_BOOLEAN boolean; - ASN1_STRING *asn1_string; - ASN1_OBJECT *object; - ASN1_INTEGER *integer; - ASN1_ENUMERATED *enumerated; - ASN1_BIT_STRING *bit_string; - ASN1_OCTET_STRING *octet_string; - ASN1_PRINTABLESTRING *printablestring; - ASN1_T61STRING *t61string; - ASN1_IA5STRING *ia5string; - ASN1_GENERALSTRING *generalstring; - ASN1_BMPSTRING *bmpstring; - ASN1_UNIVERSALSTRING *universalstring; - ASN1_UTCTIME *utctime; - ASN1_GENERALIZEDTIME *generalizedtime; - ASN1_VISIBLESTRING *visiblestring; - ASN1_UTF8STRING *utf8string; - /* - * set and sequence are left complete and still contain the set or - * sequence bytes - */ - ASN1_STRING *set; - ASN1_STRING *sequence; - ASN1_VALUE *asn1_value; - } value; -} ASN1_TYPE; - -DECLARE_STACK_OF(ASN1_TYPE) -DECLARE_ASN1_SET_OF(ASN1_TYPE) - -typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) - -typedef struct NETSCAPE_X509_st { - ASN1_OCTET_STRING *header; - X509 *cert; -} NETSCAPE_X509; - -/* This is used to contain a list of bit names */ -typedef struct BIT_STRING_BITNAME_st { - int bitnum; - const char *lname; - const char *sname; -} BIT_STRING_BITNAME; - -# define M_ASN1_STRING_length(x) ((x)->length) -# define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) -# define M_ASN1_STRING_type(x) ((x)->type) -# define M_ASN1_STRING_data(x) ((x)->data) - -/* Macros for string operations */ -# define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ - ASN1_STRING_type_new(V_ASN1_BIT_STRING) -# define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) -# define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) - -# define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ - ASN1_STRING_type_new(V_ASN1_INTEGER) -# define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) - -# define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ - ASN1_STRING_type_new(V_ASN1_ENUMERATED) -# define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) - -# define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ - ASN1_STRING_type_new(V_ASN1_OCTET_STRING) -# define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ - (const ASN1_STRING *)a,(const ASN1_STRING *)b) -# define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) -# define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) -# define M_i2d_ASN1_OCTET_STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ - V_ASN1_UNIVERSAL) - -# define B_ASN1_TIME \ - B_ASN1_UTCTIME | \ - B_ASN1_GENERALIZEDTIME - -# define B_ASN1_PRINTABLE \ - B_ASN1_NUMERICSTRING| \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_T61STRING| \ - B_ASN1_IA5STRING| \ - B_ASN1_BIT_STRING| \ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING|\ - B_ASN1_SEQUENCE|\ - B_ASN1_UNKNOWN - -# define B_ASN1_DIRECTORYSTRING \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_TELETEXSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_UTF8STRING - -# define B_ASN1_DISPLAYTEXT \ - B_ASN1_IA5STRING| \ - B_ASN1_VISIBLESTRING| \ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING - -# define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) -# define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ - pp,a->type,V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_PRINTABLE(a,pp,l) \ - d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ - B_ASN1_PRINTABLE) - -# define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) -# define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ - pp,a->type,V_ASN1_UNIVERSAL) -# define M_d2i_DIRECTORYSTRING(a,pp,l) \ - d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ - B_ASN1_DIRECTORYSTRING) - -# define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) -# define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ - pp,a->type,V_ASN1_UNIVERSAL) -# define M_d2i_DISPLAYTEXT(a,pp,l) \ - d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ - B_ASN1_DISPLAYTEXT) - -# define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ - ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) -# define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ - (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) - -# define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ - ASN1_STRING_type_new(V_ASN1_T61STRING) -# define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_T61STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_T61STRING(a,pp,l) \ - (ASN1_T61STRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) - -# define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ - ASN1_STRING_type_new(V_ASN1_IA5STRING) -# define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_IA5STRING_dup(a) \ - (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) -# define M_i2d_ASN1_IA5STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_IA5STRING(a,pp,l) \ - (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ - B_ASN1_IA5STRING) - -# define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ - ASN1_STRING_type_new(V_ASN1_UTCTIME) -# define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) - -# define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ - ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) -# define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ - (const ASN1_STRING *)a) - -# define M_ASN1_TIME_new() (ASN1_TIME *)\ - ASN1_STRING_type_new(V_ASN1_UTCTIME) -# define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ - ASN1_STRING_dup((const ASN1_STRING *)a) - -# define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ - ASN1_STRING_type_new(V_ASN1_GENERALSTRING) -# define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_GENERALSTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ - (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) - -# define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ - ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) -# define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ - (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) - -# define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ - ASN1_STRING_type_new(V_ASN1_BMPSTRING) -# define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_BMPSTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_BMPSTRING(a,pp,l) \ - (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) - -# define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ - ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) -# define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_VISIBLESTRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ - (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) - -# define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ - ASN1_STRING_type_new(V_ASN1_UTF8STRING) -# define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) -# define M_i2d_ASN1_UTF8STRING(a,pp) \ - i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ - V_ASN1_UNIVERSAL) -# define M_d2i_ASN1_UTF8STRING(a,pp,l) \ - (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ - ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) - - /* for the is_set parameter to i2d_ASN1_SET */ -# define IS_SEQUENCE 0 -# define IS_SET 1 - -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) - -int ASN1_TYPE_get(ASN1_TYPE *a); -void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); -int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); -int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); - -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); - -DECLARE_ASN1_ITEM(ASN1_OBJECT) - -DECLARE_STACK_OF(ASN1_OBJECT) -DECLARE_ASN1_SET_OF(ASN1_OBJECT) - -ASN1_STRING *ASN1_STRING_new(void); -void ASN1_STRING_free(ASN1_STRING *a); -void ASN1_STRING_clear_free(ASN1_STRING *a); -int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); -ASN1_STRING *ASN1_STRING_type_new(int type); -int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); - /* - * Since this is used to store all sorts of things, via macros, for now, - * make its data void * - */ -int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); -void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); -int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); -int ASN1_STRING_type(ASN1_STRING *x); -unsigned char *ASN1_STRING_data(ASN1_STRING *x); - -DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) -int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp); -ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, - const unsigned char **pp, long length); -int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); -int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); -int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); -int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, - unsigned char *flags, int flags_len); - -# ifndef OPENSSL_NO_BIO -int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, - BIT_STRING_BITNAME *tbl, int indent); -# endif -int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); -int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, - BIT_STRING_BITNAME *tbl); - -int i2d_ASN1_BOOLEAN(int a, unsigned char **pp); -int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length); - -DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) -int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp); -ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, - long length); -ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, - long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); -int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); - -DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) - -int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); -ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); -ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); -int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); -# if 0 -time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); -# endif - -int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, - time_t t); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, - time_t t, int offset_day, - long offset_sec); -int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); -int ASN1_TIME_diff(int *pday, int *psec, - const ASN1_TIME *from, const ASN1_TIME *to); - -DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); -int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, - const ASN1_OCTET_STRING *b); -int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, - int len); - -DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_NULL) -DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) - -int UTF8_getc(const unsigned char *str, int len, unsigned long *val); -int UTF8_putc(unsigned char *str, int len, unsigned long value); - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) -DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_TIME) - -DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) - -ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); -ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_TIME_check(ASN1_TIME *t); -ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME - **out); -int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); - -int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, - i2d_of_void *i2d, int ex_tag, int ex_class, int is_set); -STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, - const unsigned char **pp, - long length, d2i_of_void *d2i, - void (*free_func) (OPENSSL_BLOCK), - int ex_tag, int ex_class); - -# ifndef OPENSSL_NO_BIO -int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); -int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); -int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); -int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); -int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a); -int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); -int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); -# endif -int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a); - -int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); -ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, - const char *sn, const char *ln); - -int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); -long ASN1_INTEGER_get(const ASN1_INTEGER *a); -ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); -BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); - -int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); -long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); -ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); -BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn); - -/* General */ -/* given a string, return the correct type, max is the maximum length */ -int ASN1_PRINTABLE_type(const unsigned char *s, int max); - -int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); -ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, - long length, int Ptag, int Pclass); -unsigned long ASN1_tag2bit(int tag); -/* type is one or more of the B_ASN1_ values. */ -ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp, - long length, int type); - -/* PARSING */ -int asn1_Finish(ASN1_CTX *c); -int asn1_const_Finish(ASN1_const_CTX *c); - -/* SPECIALS */ -int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, - int *pclass, long omax); -int ASN1_check_infinite_end(unsigned char **p, long len); -int ASN1_const_check_infinite_end(const unsigned char **p, long len); -void ASN1_put_object(unsigned char **pp, int constructed, int length, - int tag, int xclass); -int ASN1_put_eoc(unsigned char **pp); -int ASN1_object_size(int constructed, int length, int tag); - -/* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); - -# define ASN1_dup_of(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(const type, x))) - -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); - -/* ASN1 alloc/free macros for when a type is only used internally */ - -# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) -# define M_ASN1_free_of(x, type) \ - ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) - -# ifndef OPENSSL_NO_FP_API -void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); - -# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); - -# define ASN1_i2d_fp_of(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); -int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); -# endif - -int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); - -# ifndef OPENSSL_NO_BIO -void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); - -# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); - -# define ASN1_i2d_bio_of(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); -int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); -int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); -int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); -int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); -int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, - unsigned char *buf, int off); -int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); -int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, - int dump); -# endif -const char *ASN1_tag2str(int tag); - -/* Used to load and write netscape format cert */ - -DECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) - -int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); - -int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); -int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len); -int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, - unsigned char *data, int len); -int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, - unsigned char *data, int max_len); - -STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, - d2i_of_void *d2i, - void (*free_func) (OPENSSL_BLOCK)); -unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, - unsigned char **buf, int *len); -void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); -void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); -ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, - ASN1_OCTET_STRING **oct); - -# define ASN1_pack_string_of(type,obj,i2d,oct) \ - (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ - CHECKED_I2D_OF(type, i2d), \ - oct)) - -ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, - ASN1_OCTET_STRING **oct); - -void ASN1_STRING_set_default_mask(unsigned long mask); -int ASN1_STRING_set_default_mask_asc(const char *p); -unsigned long ASN1_STRING_get_default_mask(void); -int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask); -int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask, - long minsize, long maxsize); - -ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, - const unsigned char *in, int inlen, - int inform, int nid); -ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); -int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); -void ASN1_STRING_TABLE_cleanup(void); - -/* ASN1 template functions */ - -/* Old API compatible functions */ -ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); -void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); -ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, - long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, - const ASN1_ITEM *it); - -void ASN1_add_oid_module(void); - -ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); -ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); - -/* ASN1 Print flags */ - -/* Indicate missing OPTIONAL fields */ -# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 -/* Mark start and end of SEQUENCE */ -# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 -/* Mark start and end of SEQUENCE/SET OF */ -# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 -/* Show the ASN1 type of primitives */ -# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 -/* Don't show ASN1 type of ANY */ -# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 -/* Don't show ASN1 type of MSTRINGs */ -# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 -/* Don't show field names in SEQUENCE */ -# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 -/* Show structure names of each SEQUENCE field */ -# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 -/* Don't show structure name even at top level */ -# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 - -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, - const ASN1_ITEM *it, const ASN1_PCTX *pctx); -ASN1_PCTX *ASN1_PCTX_new(void); -void ASN1_PCTX_free(ASN1_PCTX *p); -unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); -void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); - -BIO_METHOD *BIO_f_asn1(void); - -BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); - -int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const ASN1_ITEM *it); -int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const char *hdr, const ASN1_ITEM *it); -int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, - int ctype_nid, int econt_nid, - STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); -ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); -int SMIME_crlf_copy(BIO *in, BIO *out, int flags); -int SMIME_text(BIO *in, BIO *out); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ASN1_strings(void); - -/* Error codes for the ASN1 functions. */ - -/* Function codes. */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_ENUMERATED 101 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENUMERATED_SET 112 -# define ASN1_F_ASN1_ENUMERATED_TO_BN 113 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERALIZEDTIME_SET 185 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_HEADER_NEW 115 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_INTEGER_SET 118 -# define ASN1_F_ASN1_INTEGER_TO_BN 119 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 -# define ASN1_F_ASN1_ITEM_EX_D2I 120 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PACK_STRING 124 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PKCS5_PBE_SET 125 -# define ASN1_F_ASN1_SEQ_PACK 126 -# define ASN1_F_ASN1_SEQ_UNPACK 127 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TIME_SET 175 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UNPACK_STRING 136 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_UTCTIME_SET 187 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_ENUMERATED 138 -# define ASN1_F_BN_TO_ASN1_INTEGER 139 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_BIT_STRING 141 -# define ASN1_F_D2I_ASN1_BOOLEAN 142 -# define ASN1_F_D2I_ASN1_BYTES 143 -# define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 -# define ASN1_F_D2I_ASN1_HEADER 145 -# define ASN1_F_D2I_ASN1_INTEGER 146 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_SET 148 -# define ASN1_F_D2I_ASN1_TYPE_BYTES 149 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_ASN1_UTCTIME 151 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_NETSCAPE_RSA 152 -# define ASN1_F_D2I_NETSCAPE_RSA_2 153 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_D2I_RSA_NET 200 -# define ASN1_F_D2I_RSA_NET_2 201 -# define ASN1_F_D2I_X509 156 -# define ASN1_F_D2I_X509_CINF 157 -# define ASN1_F_D2I_X509_PKEY 159 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_SET 188 -# define ASN1_F_I2D_ASN1_TIME 160 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_NET 162 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_X509_CINF_NEW 168 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_NEW 172 -# define ASN1_F_X509_PKEY_NEW 173 - -/* Reason codes. */ -# define ASN1_R_ADDING_OBJECT 171 -# define ASN1_R_ASN1_PARSE_ERROR 203 -# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 -# define ASN1_R_AUX_ERROR 100 -# define ASN1_R_BAD_CLASS 101 -# define ASN1_R_BAD_OBJECT_HEADER 102 -# define ASN1_R_BAD_PASSWORD_READ 103 -# define ASN1_R_BAD_TAG 104 -# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DECODING_ERROR 111 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_PARSING_SET_ELEMENT 113 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPECTING_A_BOOLEAN 117 -# define ASN1_R_EXPECTING_A_TIME 118 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_TIME_FORMAT 132 -# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 -# define ASN1_R_INVALID_UTF8STRING 134 -# define ASN1_R_IV_TOO_LARGE 135 -# define ASN1_R_LENGTH_ERROR 136 -# define ASN1_R_LIST_ERROR 188 -# define ASN1_R_MIME_NO_CONTENT_TYPE 206 -# define ASN1_R_MIME_PARSE_ERROR 207 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_NON_HEX_CHARACTERS 141 -# define ASN1_R_NOT_ASCII_FORMAT 190 -# define ASN1_R_NOT_ENOUGH_DATA 142 -# define ASN1_R_NO_CONTENT_TYPE 209 -# define ASN1_R_NO_DEFAULT_DIGEST 201 -# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 -# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 -# define ASN1_R_NO_MULTIPART_BOUNDARY 211 -# define ASN1_R_NO_SIG_CONTENT_TYPE 212 -# define ASN1_R_NULL_IS_WRONG_LENGTH 144 -# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 -# define ASN1_R_ODD_NUMBER_OF_CHARS 145 -# define ASN1_R_PRIVATE_KEY_HEADER_MISSING 146 -# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 -# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 -# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 -# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 -# define ASN1_R_SHORT_LINE 150 -# define ASN1_R_SIG_INVALID_MIME_TYPE 213 -# define ASN1_R_STREAMING_NOT_SUPPORTED 202 -# define ASN1_R_STRING_TOO_LONG 151 -# define ASN1_R_STRING_TOO_SHORT 152 -# define ASN1_R_TAG_VALUE_TOO_HIGH 153 -# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 -# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 -# define ASN1_R_TOO_LONG 155 -# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 -# define ASN1_R_TYPE_NOT_PRIMITIVE 218 -# define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 -# define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 -# define ASN1_R_UNEXPECTED_EOC 159 -# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 -# define ASN1_R_UNKNOWN_FORMAT 160 -# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 -# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 -# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 -# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 -# define ASN1_R_UNKNOWN_TAG 194 -# define ASN1_R_UNKOWN_FORMAT 195 -# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 -# define ASN1_R_UNSUPPORTED_CIPHER 165 -# define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 -# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 -# define ASN1_R_UNSUPPORTED_TYPE 196 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 -# define ASN1_R_WRONG_TYPE 169 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/asn1_mac.h b/ext/openssl/windows/x64/include/openssl/asn1_mac.h deleted file mode 100644 index abc6dc35..00000000 --- a/ext/openssl/windows/x64/include/openssl/asn1_mac.h +++ /dev/null @@ -1,579 +0,0 @@ -/* crypto/asn1/asn1_mac.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_ASN1_MAC_H -# define HEADER_ASN1_MAC_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef ASN1_MAC_ERR_LIB -# define ASN1_MAC_ERR_LIB ERR_LIB_ASN1 -# endif - -# define ASN1_MAC_H_err(f,r,line) \ - ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line)) - -# define M_ASN1_D2I_vars(a,type,func) \ - ASN1_const_CTX c; \ - type ret=NULL; \ - \ - c.pp=(const unsigned char **)pp; \ - c.q= *(const unsigned char **)pp; \ - c.error=ERR_R_NESTED_ASN1_ERROR; \ - if ((a == NULL) || ((*a) == NULL)) \ - { if ((ret=(type)func()) == NULL) \ - { c.line=__LINE__; goto err; } } \ - else ret=(*a); - -# define M_ASN1_D2I_Init() \ - c.p= *(const unsigned char **)pp; \ - c.max=(length == 0)?0:(c.p+length); - -# define M_ASN1_D2I_Finish_2(a) \ - if (!asn1_const_Finish(&c)) \ - { c.line=__LINE__; goto err; } \ - *(const unsigned char **)pp=c.p; \ - if (a != NULL) (*a)=ret; \ - return(ret); - -# define M_ASN1_D2I_Finish(a,func,e) \ - M_ASN1_D2I_Finish_2(a); \ -err:\ - ASN1_MAC_H_err((e),c.error,c.line); \ - asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \ - if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ - return(NULL) - -# define M_ASN1_D2I_start_sequence() \ - if (!asn1_GetSequence(&c,&length)) \ - { c.line=__LINE__; goto err; } -/* Begin reading ASN1 without a surrounding sequence */ -# define M_ASN1_D2I_begin() \ - c.slen = length; - -/* End reading ASN1 with no check on length */ -# define M_ASN1_D2I_Finish_nolen(a, func, e) \ - *pp=c.p; \ - if (a != NULL) (*a)=ret; \ - return(ret); \ -err:\ - ASN1_MAC_H_err((e),c.error,c.line); \ - asn1_add_error(*pp,(int)(c.q- *pp)); \ - if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ - return(NULL) - -# define M_ASN1_D2I_end_sequence() \ - (((c.inf&1) == 0)?(c.slen <= 0): \ - (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen))) - -/* Don't use this with d2i_ASN1_BOOLEAN() */ -# define M_ASN1_D2I_get(b, func) \ - c.q=c.p; \ - if (func(&(b),&c.p,c.slen) == NULL) \ - {c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -/* Don't use this with d2i_ASN1_BOOLEAN() */ -# define M_ASN1_D2I_get_x(type,b,func) \ - c.q=c.p; \ - if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \ - {c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -/* use this instead () */ -# define M_ASN1_D2I_get_int(b,func) \ - c.q=c.p; \ - if (func(&(b),&c.p,c.slen) < 0) \ - {c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_opt(b,func,type) \ - if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ - == (V_ASN1_UNIVERSAL|(type)))) \ - { \ - M_ASN1_D2I_get(b,func); \ - } - -# define M_ASN1_D2I_get_int_opt(b,func,type) \ - if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ - == (V_ASN1_UNIVERSAL|(type)))) \ - { \ - M_ASN1_D2I_get_int(b,func); \ - } - -# define M_ASN1_D2I_get_imp(b,func, type) \ - M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \ - c.q=c.p; \ - if (func(&(b),&c.p,c.slen) == NULL) \ - {c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \ - c.slen-=(c.p-c.q);\ - M_ASN1_next_prev=_tmp; - -# define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \ - if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \ - (V_ASN1_CONTEXT_SPECIFIC|(tag)))) \ - { \ - unsigned char _tmp = M_ASN1_next; \ - M_ASN1_D2I_get_imp(b,func, type);\ - } - -# define M_ASN1_D2I_get_set(r,func,free_func) \ - M_ASN1_D2I_get_imp_set(r,func,free_func, \ - V_ASN1_SET,V_ASN1_UNIVERSAL); - -# define M_ASN1_D2I_get_set_type(type,r,func,free_func) \ - M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \ - V_ASN1_SET,V_ASN1_UNIVERSAL); - -# define M_ASN1_D2I_get_set_opt(r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ - { M_ASN1_D2I_get_set(r,func,free_func); } - -# define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ - { M_ASN1_D2I_get_set_type(type,r,func,free_func); } - -# define M_ASN1_I2D_len_SET_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_len_SET(a,f); - -# define M_ASN1_I2D_put_SET_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_put_SET(a,f); - -# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_put_SEQUENCE(a,f); - -# define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - M_ASN1_I2D_put_SEQUENCE_type(type,a,f); - -# define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ - if ((c.slen != 0) && \ - (M_ASN1_next == \ - (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ - { \ - M_ASN1_D2I_get_imp_set(b,func,free_func,\ - tag,V_ASN1_CONTEXT_SPECIFIC); \ - } - -# define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \ - if ((c.slen != 0) && \ - (M_ASN1_next == \ - (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ - { \ - M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\ - tag,V_ASN1_CONTEXT_SPECIFIC); \ - } - -# define M_ASN1_D2I_get_seq(r,func,free_func) \ - M_ASN1_D2I_get_imp_set(r,func,free_func,\ - V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); - -# define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \ - M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ - V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) - -# define M_ASN1_D2I_get_seq_opt(r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ - { M_ASN1_D2I_get_seq(r,func,free_func); } - -# define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \ - if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ - V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ - { M_ASN1_D2I_get_seq_type(type,r,func,free_func); } - -# define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \ - M_ASN1_D2I_get_imp_set(r,func,free_func,\ - x,V_ASN1_CONTEXT_SPECIFIC); - -# define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \ - M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ - x,V_ASN1_CONTEXT_SPECIFIC); - -# define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \ - c.q=c.p; \ - if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\ - (void (*)())free_func,a,b) == NULL) \ - { c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \ - c.q=c.p; \ - if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\ - free_func,a,b) == NULL) \ - { c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_set_strings(r,func,a,b) \ - c.q=c.p; \ - if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \ - { c.line=__LINE__; goto err; } \ - c.slen-=(c.p-c.q); - -# define M_ASN1_D2I_get_EXP_opt(r,func,tag) \ - if ((c.slen != 0L) && (M_ASN1_next == \ - (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ - { \ - int Tinf,Ttag,Tclass; \ - long Tlen; \ - \ - c.q=c.p; \ - Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ - if (Tinf & 0x80) \ - { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ - c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ - Tlen = c.slen - (c.p - c.q) - 2; \ - if (func(&(r),&c.p,Tlen) == NULL) \ - { c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ - Tlen = c.slen - (c.p - c.q); \ - if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \ - { c.error=ERR_R_MISSING_ASN1_EOS; \ - c.line=__LINE__; goto err; } \ - }\ - c.slen-=(c.p-c.q); \ - } - -# define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \ - if ((c.slen != 0) && (M_ASN1_next == \ - (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ - { \ - int Tinf,Ttag,Tclass; \ - long Tlen; \ - \ - c.q=c.p; \ - Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ - if (Tinf & 0x80) \ - { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ - c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ - Tlen = c.slen - (c.p - c.q) - 2; \ - if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \ - (void (*)())free_func, \ - b,V_ASN1_UNIVERSAL) == NULL) \ - { c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ - Tlen = c.slen - (c.p - c.q); \ - if(!ASN1_check_infinite_end(&c.p, Tlen)) \ - { c.error=ERR_R_MISSING_ASN1_EOS; \ - c.line=__LINE__; goto err; } \ - }\ - c.slen-=(c.p-c.q); \ - } - -# define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \ - if ((c.slen != 0) && (M_ASN1_next == \ - (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ - { \ - int Tinf,Ttag,Tclass; \ - long Tlen; \ - \ - c.q=c.p; \ - Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ - if (Tinf & 0x80) \ - { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ - c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ - Tlen = c.slen - (c.p - c.q) - 2; \ - if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \ - free_func,b,V_ASN1_UNIVERSAL) == NULL) \ - { c.line=__LINE__; goto err; } \ - if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ - Tlen = c.slen - (c.p - c.q); \ - if(!ASN1_check_infinite_end(&c.p, Tlen)) \ - { c.error=ERR_R_MISSING_ASN1_EOS; \ - c.line=__LINE__; goto err; } \ - }\ - c.slen-=(c.p-c.q); \ - } - -/* New macros */ -# define M_ASN1_New_Malloc(ret,type) \ - if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \ - { c.line=__LINE__; goto err2; } - -# define M_ASN1_New(arg,func) \ - if (((arg)=func()) == NULL) return(NULL) - -# define M_ASN1_New_Error(a) \ -/*- err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ - return(NULL);*/ \ - err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ - return(NULL) - -/* - * BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some - * macros that use ASN1_const_CTX still insist on writing in the input - * stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. Please? -- - * Richard Levitte - */ -# define M_ASN1_next (*((unsigned char *)(c.p))) -# define M_ASN1_next_prev (*((unsigned char *)(c.q))) - -/*************************************************/ - -# define M_ASN1_I2D_vars(a) int r=0,ret=0; \ - unsigned char *p; \ - if (a == NULL) return(0) - -/* Length Macros */ -# define M_ASN1_I2D_len(a,f) ret+=f(a,NULL) -# define M_ASN1_I2D_len_IMP_opt(a,f) if (a != NULL) M_ASN1_I2D_len(a,f) - -# define M_ASN1_I2D_len_SET(a,f) \ - ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET); - -# define M_ASN1_I2D_len_SET_type(type,a,f) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \ - V_ASN1_UNIVERSAL,IS_SET); - -# define M_ASN1_I2D_len_SEQUENCE(a,f) \ - ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \ - V_ASN1_UNIVERSAL,IS_SEQUENCE) - -# define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_len_SEQUENCE(a,f); - -# define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - M_ASN1_I2D_len_SEQUENCE_type(type,a,f); - -# define M_ASN1_I2D_len_IMP_SET(a,f,x) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); - -# define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ - V_ASN1_CONTEXT_SPECIFIC,IS_SET); - -# define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SET); - -# define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ - V_ASN1_CONTEXT_SPECIFIC,IS_SET); - -# define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ - V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); - -# define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \ - if (a != NULL)\ - { \ - v=f(a,NULL); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -# define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0))\ - { \ - v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -# define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0))\ - { \ - v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -# define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_##type##_num(a) != 0))\ - { \ - v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \ - V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); \ - ret+=ASN1_object_size(1,v,mtag); \ - } - -/* Put Macros */ -# define M_ASN1_I2D_put(a,f) f(a,&p) - -# define M_ASN1_I2D_put_IMP_opt(a,f,t) \ - if (a != NULL) \ - { \ - unsigned char *q=p; \ - f(a,&p); \ - *q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\ - } - -# define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\ - V_ASN1_UNIVERSAL,IS_SET) -# define M_ASN1_I2D_put_SET_type(type,a,f) \ - i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET) -# define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ - V_ASN1_CONTEXT_SPECIFIC,IS_SET) -# define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \ - i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET) -# define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ - V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE) - -# define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\ - V_ASN1_UNIVERSAL,IS_SEQUENCE) - -# define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \ - i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE) - -# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - M_ASN1_I2D_put_SEQUENCE(a,f); - -# define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SET); } - -# define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ - V_ASN1_CONTEXT_SPECIFIC, \ - IS_SET); } - -# define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); } - -# define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ - V_ASN1_CONTEXT_SPECIFIC, \ - IS_SEQUENCE); } - -# define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \ - if (a != NULL) \ - { \ - ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \ - f(a,&p); \ - } - -# define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { \ - ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ - i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ - } - -# define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_num(a) != 0)) \ - { \ - ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ - i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \ - } - -# define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ - if ((a != NULL) && (sk_##type##_num(a) != 0)) \ - { \ - ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ - i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \ - IS_SEQUENCE); \ - } - -# define M_ASN1_I2D_seq_total() \ - r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ - if (pp == NULL) return(r); \ - p= *pp; \ - ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) - -# define M_ASN1_I2D_INF_seq_start(tag,ctx) \ - *(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \ - *(p++)=0x80 - -# define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00 - -# define M_ASN1_I2D_finish() *pp=p; \ - return(r); - -int asn1_GetSequence(ASN1_const_CTX *c, long *length); -void asn1_add_error(const unsigned char *address, int offset); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/asn1t.h b/ext/openssl/windows/x64/include/openssl/asn1t.h deleted file mode 100644 index 99bc0eec..00000000 --- a/ext/openssl/windows/x64/include/openssl/asn1t.h +++ /dev/null @@ -1,973 +0,0 @@ -/* asn1t.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H - -# include -# include -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -/* ASN1 template defines, structures and functions */ - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM * itname##_it(void) \ - { \ - static const ASN1_ITEM local_it = { - -# define ASN1_ITEM_end(itname) \ - }; \ - return &local_it; \ - } - -# endif - -/* Macros to aid ASN1 template writing */ - -# define ASN1_ITEM_TEMPLATE(tname) \ - static const ASN1_TEMPLATE tname##_item_tt - -# define ASN1_ITEM_TEMPLATE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_PRIMITIVE,\ - -1,\ - &tname##_item_tt,\ - 0,\ - NULL,\ - 0,\ - #tname \ - ASN1_ITEM_end(tname) - -/* This is a ASN1 type which just embeds a template */ - -/*- - * This pair helps declare a SEQUENCE. We can do: - * - * ASN1_SEQUENCE(stname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END(stname) - * - * This will produce an ASN1_ITEM called stname_it - * for a structure called stname. - * - * If you want the same structure but a different - * name then use: - * - * ASN1_SEQUENCE(itname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END_name(stname, itname) - * - * This will create an item called itname_it using - * a structure called stname. - */ - -# define ASN1_SEQUENCE(tname) \ - static const ASN1_TEMPLATE tname##_seq_tt[] - -# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) - -# define ASN1_SEQUENCE_END_name(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_NDEF_SEQUENCE(tname) \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ - ASN1_SEQUENCE_cb(tname, cb) - -# define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_ref(tname, cb, lck) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(tname),\ - #tname \ - ASN1_ITEM_end(tname) - -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) - -# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_ref(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/*- - * This pair helps declare a CHOICE type. We can do: - * - * ASN1_CHOICE(chname) = { - * ... CHOICE options ... - * ASN1_CHOICE_END(chname) - * - * This will produce an ASN1_ITEM called chname_it - * for a structure called chname. The structure - * definition must look like this: - * typedef struct { - * int type; - * union { - * ASN1_SOMETHING *opt1; - * ASN1_SOMEOTHER *opt2; - * } value; - * } chname; - * - * the name of the selector must be 'type'. - * to use an alternative selector name use the - * ASN1_CHOICE_END_selector() version. - */ - -# define ASN1_CHOICE(tname) \ - static const ASN1_TEMPLATE tname##_ch_tt[] - -# define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ - ASN1_CHOICE(tname) - -# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) - -# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) - -# define ASN1_CHOICE_END_selector(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_CHOICE_END_cb(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/* This helps with the template wrapper form of ASN1_ITEM */ - -# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ - (flags), (tag), 0,\ - #name, ASN1_ITEM_ref(type) } - -/* These help with SEQUENCE or CHOICE components */ - -/* used to declare other types */ - -# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ - (flags), (tag), offsetof(stname, field),\ - #field, ASN1_ITEM_ref(type) } - -/* used when the structure is combined with the parent */ - -# define ASN1_EX_COMBINE(flags, tag, type) { \ - (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } - -/* implicit and explicit helper macros */ - -# define ASN1_IMP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type) - -# define ASN1_EXP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) - -/* Any defined by macros: the field used is in the table itself */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif -/* Plain simple type */ -# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) - -/* OPTIONAL simple type */ -# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* IMPLICIT tagged simple type */ -# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) - -/* IMPLICIT tagged OPTIONAL simple type */ -# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) - -/* Same as above but EXPLICIT */ - -# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) -# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) - -/* SEQUENCE OF type */ -# define ASN1_SEQUENCE_OF(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) - -/* OPTIONAL SEQUENCE OF */ -# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* Same as above but for SET OF */ - -# define ASN1_SET_OF(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) - -# define ASN1_SET_OF_OPT(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ - -# define ASN1_IMP_SET_OF(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) - -# define ASN1_EXP_SET_OF(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) - -# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) - -# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) - -# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) - -/* EXPLICIT using indefinite length constructed form */ -# define ASN1_NDEF_EXP(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) - -/* EXPLICIT OPTIONAL using indefinite length constructed form */ -# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) - -/* Macros for the ASN1_ADB structure */ - -# define ASN1_ADB(name) \ - static const ASN1_ADB_TABLE name##_adbtbl[] - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - app_table,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ - ;\ - static const ASN1_ITEM *name##_adb(void) \ - { \ - static const ASN1_ADB internal_adb = \ - {\ - flags,\ - offsetof(name, field),\ - app_table,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - }; \ - return (const ASN1_ITEM *) &internal_adb; \ - } \ - void dummy_function(void) - -# endif - -# define ADB_ENTRY(val, template) {val, template} - -# define ASN1_ADB_TEMPLATE(name) \ - static const ASN1_TEMPLATE name##_tt - -/* - * This is the ASN1 template structure that defines a wrapper round the - * actual type. It determines the actual position of the field in the value - * structure, various flags such as OPTIONAL and the field name. - */ - -struct ASN1_TEMPLATE_st { - unsigned long flags; /* Various flags */ - long tag; /* tag, not used if no tagging */ - unsigned long offset; /* Offset of this field in structure */ -# ifndef NO_ASN1_FIELD_NAMES - const char *field_name; /* Field name */ -# endif - ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ -}; - -/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ - -# define ASN1_TEMPLATE_item(t) (t->item_ptr) -# define ASN1_TEMPLATE_adb(t) (t->item_ptr) - -typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; -typedef struct ASN1_ADB_st ASN1_ADB; - -struct ASN1_ADB_st { - unsigned long flags; /* Various flags */ - unsigned long offset; /* Offset of selector field */ - STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */ - const ASN1_ADB_TABLE *tbl; /* Table of possible types */ - long tblcount; /* Number of entries in tbl */ - const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ - const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ -}; - -struct ASN1_ADB_TABLE_st { - long value; /* NID for an object or value for an int */ - const ASN1_TEMPLATE tt; /* item for this value */ -}; - -/* template flags */ - -/* Field is optional */ -# define ASN1_TFLG_OPTIONAL (0x1) - -/* Field is a SET OF */ -# define ASN1_TFLG_SET_OF (0x1 << 1) - -/* Field is a SEQUENCE OF */ -# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) - -/* - * Special case: this refers to a SET OF that will be sorted into DER order - * when encoded *and* the corresponding STACK will be modified to match the - * new order. - */ -# define ASN1_TFLG_SET_ORDER (0x3 << 1) - -/* Mask for SET OF or SEQUENCE OF */ -# define ASN1_TFLG_SK_MASK (0x3 << 1) - -/* - * These flags mean the tag should be taken from the tag field. If EXPLICIT - * then the underlying type is used for the inner tag. - */ - -/* IMPLICIT tagging */ -# define ASN1_TFLG_IMPTAG (0x1 << 3) - -/* EXPLICIT tagging, inner tag from underlying type */ -# define ASN1_TFLG_EXPTAG (0x2 << 3) - -# define ASN1_TFLG_TAG_MASK (0x3 << 3) - -/* context specific IMPLICIT */ -# define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT - -/* context specific EXPLICIT */ -# define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT - -/* - * If tagging is in force these determine the type of tag to use. Otherwise - * the tag is determined by the underlying type. These values reflect the - * actual octet format. - */ - -/* Universal tag */ -# define ASN1_TFLG_UNIVERSAL (0x0<<6) -/* Application tag */ -# define ASN1_TFLG_APPLICATION (0x1<<6) -/* Context specific tag */ -# define ASN1_TFLG_CONTEXT (0x2<<6) -/* Private tag */ -# define ASN1_TFLG_PRIVATE (0x3<<6) - -# define ASN1_TFLG_TAG_CLASS (0x3<<6) - -/* - * These are for ANY DEFINED BY type. In this case the 'item' field points to - * an ASN1_ADB structure which contains a table of values to decode the - * relevant type - */ - -# define ASN1_TFLG_ADB_MASK (0x3<<8) - -# define ASN1_TFLG_ADB_OID (0x1<<8) - -# define ASN1_TFLG_ADB_INT (0x1<<9) - -/* - * This flag means a parent structure is passed instead of the field: this is - * useful is a SEQUENCE is being combined with a CHOICE for example. Since - * this means the structure and item name will differ we need to use the - * ASN1_CHOICE_END_name() macro for example. - */ - -# define ASN1_TFLG_COMBINE (0x1<<10) - -/* - * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes - * indefinite length constructed encoding to be used if required. - */ - -# define ASN1_TFLG_NDEF (0x1<<11) - -/* This is the actual ASN1 item itself */ - -struct ASN1_ITEM_st { - char itype; /* The item type, primitive, SEQUENCE, CHOICE - * or extern */ - long utype; /* underlying type */ - const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains - * the contents */ - long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ - long size; /* Structure size (usually) */ -# ifndef NO_ASN1_FIELD_NAMES - const char *sname; /* Structure name */ -# endif -}; - -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * For COMPAT types the funcs field gives a - * set of functions that handle this type, this - * supports the old d2i, i2d convention. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_COMPAT 0x3 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - -/* - * Cache for ASN1 tag and length, so we don't keep re-reading it for things - * like CHOICE - */ - -struct ASN1_TLC_st { - char valid; /* Values below are valid */ - int ret; /* return value */ - long plen; /* length */ - int ptag; /* class value */ - int pclass; /* class value */ - int hdrlen; /* header length */ -}; - -/* Typedefs for ASN1 function pointers */ - -typedef ASN1_VALUE *ASN1_new_func(void); -typedef void ASN1_free_func(ASN1_VALUE *a); -typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in, - long length); -typedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in); - -typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); -typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); - -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, - int indent, const char *fname, - const ASN1_PCTX *pctx); - -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, - int *putype, const ASN1_ITEM *it); -typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, - int len, int utype, char *free_cont, - const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, - const ASN1_ITEM *it, int indent, - const ASN1_PCTX *pctx); - -typedef struct ASN1_COMPAT_FUNCS_st { - ASN1_new_func *asn1_new; - ASN1_free_func *asn1_free; - ASN1_d2i_func *asn1_d2i; - ASN1_i2d_func *asn1_i2d; -} ASN1_COMPAT_FUNCS; - -typedef struct ASN1_EXTERN_FUNCS_st { - void *app_data; - ASN1_ex_new_func *asn1_ex_new; - ASN1_ex_free_func *asn1_ex_free; - ASN1_ex_free_func *asn1_ex_clear; - ASN1_ex_d2i *asn1_ex_d2i; - ASN1_ex_i2d *asn1_ex_i2d; - ASN1_ex_print_func *asn1_ex_print; -} ASN1_EXTERN_FUNCS; - -typedef struct ASN1_PRIMITIVE_FUNCS_st { - void *app_data; - unsigned long flags; - ASN1_ex_new_func *prim_new; - ASN1_ex_free_func *prim_free; - ASN1_ex_free_func *prim_clear; - ASN1_primitive_c2i *prim_c2i; - ASN1_primitive_i2c *prim_i2c; - ASN1_primitive_print *prim_print; -} ASN1_PRIMITIVE_FUNCS; - -/* - * This is the ASN1_AUX structure: it handles various miscellaneous - * requirements. For example the use of reference counts and an informational - * callback. The "informational callback" is called at various points during - * the ASN1 encoding and decoding. It can be used to provide minor - * customisation of the structures used. This is most useful where the - * supplied routines *almost* do the right thing but need some extra help at - * a few points. If the callback returns zero then it is assumed a fatal - * error has occurred and the main operation should be abandoned. If major - * changes in the default behaviour are required then an external type is - * more appropriate. - */ - -typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, - void *exarg); - -typedef struct ASN1_AUX_st { - void *app_data; - int flags; - int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ - ASN1_aux_cb *asn1_cb; - int enc_offset; /* Offset of ASN1_ENCODING structure */ -} ASN1_AUX; - -/* For print related callbacks exarg points to this structure */ -typedef struct ASN1_PRINT_ARG_st { - BIO *out; - int indent; - const ASN1_PCTX *pctx; -} ASN1_PRINT_ARG; - -/* For streaming related callbacks exarg points to this structure */ -typedef struct ASN1_STREAM_ARG_st { - /* BIO to stream through */ - BIO *out; - /* BIO with filters appended */ - BIO *ndef_bio; - /* Streaming I/O boundary */ - unsigned char **boundary; -} ASN1_STREAM_ARG; - -/* Flags in ASN1_AUX */ - -/* Use a reference count */ -# define ASN1_AFLG_REFCOUNT 1 -/* Save the encoding of structure (useful for signatures) */ -# define ASN1_AFLG_ENCODING 2 -/* The Sequence length is invalid */ -# define ASN1_AFLG_BROKEN 4 - -/* operation values for asn1_cb */ - -# define ASN1_OP_NEW_PRE 0 -# define ASN1_OP_NEW_POST 1 -# define ASN1_OP_FREE_PRE 2 -# define ASN1_OP_FREE_POST 3 -# define ASN1_OP_D2I_PRE 4 -# define ASN1_OP_D2I_POST 5 -# define ASN1_OP_I2D_PRE 6 -# define ASN1_OP_I2D_POST 7 -# define ASN1_OP_PRINT_PRE 8 -# define ASN1_OP_PRINT_POST 9 -# define ASN1_OP_STREAM_PRE 10 -# define ASN1_OP_STREAM_POST 11 -# define ASN1_OP_DETACHED_PRE 12 -# define ASN1_OP_DETACHED_POST 13 - -/* Macro to implement a primitive type */ -# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) -# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ - ASN1_ITEM_end(itname) - -/* Macro to implement a multi string type */ -# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ - ASN1_ITEM_end(itname) - -/* Macro to implement an ASN1_ITEM in terms of old style funcs */ - -# define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE) - -# define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \ - static const ASN1_COMPAT_FUNCS sname##_ff = { \ - (ASN1_new_func *)sname##_new, \ - (ASN1_free_func *)sname##_free, \ - (ASN1_d2i_func *)d2i_##sname, \ - (ASN1_i2d_func *)i2d_##sname, \ - }; \ - ASN1_ITEM_start(sname) \ - ASN1_ITYPE_COMPAT, \ - tag, \ - NULL, \ - 0, \ - &sname##_ff, \ - 0, \ - #sname \ - ASN1_ITEM_end(sname) - -# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ - ASN1_ITEM_start(sname) \ - ASN1_ITYPE_EXTERN, \ - tag, \ - NULL, \ - 0, \ - &fptrs, \ - 0, \ - #sname \ - ASN1_ITEM_end(sname) - -/* Macro to implement standard functions in terms of ASN1_ITEM structures */ - -# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) - -# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ - IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) - -# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ - pre stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - pre void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ - stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ - { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ - } - -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ - { \ - return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ - } - -# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ - IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx) \ - { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ - ASN1_ITEM_rptr(itname), pctx); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -/* external definitions for primitive types */ - -DECLARE_ASN1_ITEM(ASN1_BOOLEAN) -DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_SEQUENCE) -DECLARE_ASN1_ITEM(CBIGNUM) -DECLARE_ASN1_ITEM(BIGNUM) -DECLARE_ASN1_ITEM(LONG) -DECLARE_ASN1_ITEM(ZLONG) - -DECLARE_STACK_OF(ASN1_VALUE) - -/* Functions used internally by the ASN1 code */ - -int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); -void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); -int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); -int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); - -void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); -int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_TEMPLATE *tt); -int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); -int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_TEMPLATE *tt); -void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it); - -int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, - const ASN1_ITEM *it); -int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, - int utype, char *free_cont, const ASN1_ITEM *it); - -int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); -int asn1_set_choice_selector(ASN1_VALUE **pval, int value, - const ASN1_ITEM *it); - -ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); - -const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, - int nullerr); - -int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it); - -void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it); -void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it); -int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, - const ASN1_ITEM *it); -int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, - const ASN1_ITEM *it); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/bio.h b/ext/openssl/windows/x64/include/openssl/bio.h deleted file mode 100644 index 8f2438cd..00000000 --- a/ext/openssl/windows/x64/include/openssl/bio.h +++ /dev/null @@ -1,883 +0,0 @@ -/* crypto/bio/bio.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_BIO_H -# define HEADER_BIO_H - -# include - -# ifndef OPENSSL_NO_FP_API -# include -# endif -# include - -# include - -# ifndef OPENSSL_NO_SCTP -# ifndef OPENSSL_SYS_VMS -# include -# else -# include -# endif -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* These are the 'types' of BIOs */ -# define BIO_TYPE_NONE 0 -# define BIO_TYPE_MEM (1|0x0400) -# define BIO_TYPE_FILE (2|0x0400) - -# define BIO_TYPE_FD (4|0x0400|0x0100) -# define BIO_TYPE_SOCKET (5|0x0400|0x0100) -# define BIO_TYPE_NULL (6|0x0400) -# define BIO_TYPE_SSL (7|0x0200) -# define BIO_TYPE_MD (8|0x0200)/* passive filter */ -# define BIO_TYPE_BUFFER (9|0x0200)/* filter */ -# define BIO_TYPE_CIPHER (10|0x0200)/* filter */ -# define BIO_TYPE_BASE64 (11|0x0200)/* filter */ -# define BIO_TYPE_CONNECT (12|0x0400|0x0100)/* socket - connect */ -# define BIO_TYPE_ACCEPT (13|0x0400|0x0100)/* socket for accept */ -# define BIO_TYPE_PROXY_CLIENT (14|0x0200)/* client proxy BIO */ -# define BIO_TYPE_PROXY_SERVER (15|0x0200)/* server proxy BIO */ -# define BIO_TYPE_NBIO_TEST (16|0x0200)/* server proxy BIO */ -# define BIO_TYPE_NULL_FILTER (17|0x0200) -# define BIO_TYPE_BER (18|0x0200)/* BER -> bin filter */ -# define BIO_TYPE_BIO (19|0x0400)/* (half a) BIO pair */ -# define BIO_TYPE_LINEBUFFER (20|0x0200)/* filter */ -# define BIO_TYPE_DGRAM (21|0x0400|0x0100) -# ifndef OPENSSL_NO_SCTP -# define BIO_TYPE_DGRAM_SCTP (24|0x0400|0x0100) -# endif -# define BIO_TYPE_ASN1 (22|0x0200)/* filter */ -# define BIO_TYPE_COMP (23|0x0200)/* filter */ - -# define BIO_TYPE_DESCRIPTOR 0x0100/* socket, fd, connect or accept */ -# define BIO_TYPE_FILTER 0x0200 -# define BIO_TYPE_SOURCE_SINK 0x0400 - -/* - * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. - * BIO_set_fp(in,stdin,BIO_NOCLOSE); - */ -# define BIO_NOCLOSE 0x00 -# define BIO_CLOSE 0x01 - -/* - * These are used in the following macros and are passed to BIO_ctrl() - */ -# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ -# define BIO_CTRL_EOF 2/* opt - are we at the eof */ -# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ -# define BIO_CTRL_SET 4/* man - set the 'IO' type */ -# define BIO_CTRL_GET 5/* man - get the 'IO' type */ -# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ -# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ -# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ -# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ -# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ -# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ -# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ -# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ -/* callback is int cb(BIO *bio,state,ret); */ -# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ -# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ - -# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ - -/* dgram BIO stuff */ -# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ -# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected - * socket to be passed in */ -# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ -# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ -# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ - -# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ - -/* #ifdef IP_MTU_DISCOVER */ -# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ -/* #endif */ - -# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ -# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 -# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ -# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. - * want to use this if asking - * the kernel fails */ - -# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was - * exceed in the previous write - * operation */ - -# define BIO_CTRL_DGRAM_GET_PEER 46 -# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ - -# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout - * to adjust socket timeouts */ -# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 - -# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 - -# ifndef OPENSSL_NO_SCTP -/* SCTP stuff */ -# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 -# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 -# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 -# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 -# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 -# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 -# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 -# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 -# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 -# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 -# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 -# endif - -/* modifiers */ -# define BIO_FP_READ 0x02 -# define BIO_FP_WRITE 0x04 -# define BIO_FP_APPEND 0x08 -# define BIO_FP_TEXT 0x10 - -# define BIO_FLAGS_READ 0x01 -# define BIO_FLAGS_WRITE 0x02 -# define BIO_FLAGS_IO_SPECIAL 0x04 -# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) -# define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 -# endif - -/* Used in BIO_gethostbyname() */ -# define BIO_GHBN_CTRL_HITS 1 -# define BIO_GHBN_CTRL_MISSES 2 -# define BIO_GHBN_CTRL_CACHE_SIZE 3 -# define BIO_GHBN_CTRL_GET_ENTRY 4 -# define BIO_GHBN_CTRL_FLUSH 5 - -/* Mostly used in the SSL BIO */ -/*- - * Not used anymore - * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10 - * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20 - * #define BIO_FLAGS_PROTOCOL_STARTUP 0x40 - */ - -# define BIO_FLAGS_BASE64_NO_NL 0x100 - -/* - * This is used with memory BIOs: it means we shouldn't free up or change the - * data in any way. - */ -# define BIO_FLAGS_MEM_RDONLY 0x200 - -typedef struct bio_st BIO; - -void BIO_set_flags(BIO *b, int flags); -int BIO_test_flags(const BIO *b, int flags); -void BIO_clear_flags(BIO *b, int flags); - -# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) -# define BIO_set_retry_special(b) \ - BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_read(b) \ - BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_write(b) \ - BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) - -/* These are normally used internally in BIOs */ -# define BIO_clear_retry_flags(b) \ - BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_get_retry_flags(b) \ - BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) - -/* These should be used by the application to tell why we should retry */ -# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) -# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) -# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) -# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) -# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) - -/* - * The next three are used in conjunction with the BIO_should_io_special() - * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int - * *reason); will walk the BIO stack and return the 'reason' for the special - * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return - * the code. - */ -/* - * Returned from the SSL bio when the certificate retrieval code had an error - */ -# define BIO_RR_SSL_X509_LOOKUP 0x01 -/* Returned from the connect BIO when a connect would have blocked */ -# define BIO_RR_CONNECT 0x02 -/* Returned from the accept BIO when an accept would have blocked */ -# define BIO_RR_ACCEPT 0x03 - -/* These are passed by the BIO callback */ -# define BIO_CB_FREE 0x01 -# define BIO_CB_READ 0x02 -# define BIO_CB_WRITE 0x03 -# define BIO_CB_PUTS 0x04 -# define BIO_CB_GETS 0x05 -# define BIO_CB_CTRL 0x06 - -/* - * The callback is called before and after the underling operation, The - * BIO_CB_RETURN flag indicates if it is after the call - */ -# define BIO_CB_RETURN 0x80 -# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) -# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) -# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) - -long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *, - int, long, long); -void BIO_set_callback(BIO *b, - long (*callback) (struct bio_st *, int, const char *, - int, long, long)); -char *BIO_get_callback_arg(const BIO *b); -void BIO_set_callback_arg(BIO *b, char *arg); - -const char *BIO_method_name(const BIO *b); -int BIO_method_type(const BIO *b); - -typedef void bio_info_cb (struct bio_st *, int, const char *, int, long, - long); - -typedef struct bio_method_st { - int type; - const char *name; - int (*bwrite) (BIO *, const char *, int); - int (*bread) (BIO *, char *, int); - int (*bputs) (BIO *, const char *); - int (*bgets) (BIO *, char *, int); - long (*ctrl) (BIO *, int, long, void *); - int (*create) (BIO *); - int (*destroy) (BIO *); - long (*callback_ctrl) (BIO *, int, bio_info_cb *); -} BIO_METHOD; - -struct bio_st { - BIO_METHOD *method; - /* bio, mode, argp, argi, argl, ret */ - long (*callback) (struct bio_st *, int, const char *, int, long, long); - char *cb_arg; /* first argument for the callback */ - int init; - int shutdown; - int flags; /* extra storage */ - int retry_reason; - int num; - void *ptr; - struct bio_st *next_bio; /* used by filter BIOs */ - struct bio_st *prev_bio; /* used by filter BIOs */ - int references; - unsigned long num_read; - unsigned long num_write; - CRYPTO_EX_DATA ex_data; -}; - -DECLARE_STACK_OF(BIO) - -typedef struct bio_f_buffer_ctx_struct { - /*- - * Buffers are setup like this: - * - * <---------------------- size -----------------------> - * +---------------------------------------------------+ - * | consumed | remaining | free space | - * +---------------------------------------------------+ - * <-- off --><------- len -------> - */ - /*- BIO *bio; *//* - * this is now in the BIO struct - */ - int ibuf_size; /* how big is the input buffer */ - int obuf_size; /* how big is the output buffer */ - char *ibuf; /* the char array */ - int ibuf_len; /* how many bytes are in it */ - int ibuf_off; /* write/read offset */ - char *obuf; /* the char array */ - int obuf_len; /* how many bytes are in it */ - int obuf_off; /* write/read offset */ -} BIO_F_BUFFER_CTX; - -/* Prefix and suffix callback in ASN1 BIO */ -typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, - void *parg); - -# ifndef OPENSSL_NO_SCTP -/* SCTP parameter structs */ -struct bio_dgram_sctp_sndinfo { - uint16_t snd_sid; - uint16_t snd_flags; - uint32_t snd_ppid; - uint32_t snd_context; -}; - -struct bio_dgram_sctp_rcvinfo { - uint16_t rcv_sid; - uint16_t rcv_ssn; - uint16_t rcv_flags; - uint32_t rcv_ppid; - uint32_t rcv_tsn; - uint32_t rcv_cumtsn; - uint32_t rcv_context; -}; - -struct bio_dgram_sctp_prinfo { - uint16_t pr_policy; - uint32_t pr_value; -}; -# endif - -/* connect BIO stuff */ -# define BIO_CONN_S_BEFORE 1 -# define BIO_CONN_S_GET_IP 2 -# define BIO_CONN_S_GET_PORT 3 -# define BIO_CONN_S_CREATE_SOCKET 4 -# define BIO_CONN_S_CONNECT 5 -# define BIO_CONN_S_OK 6 -# define BIO_CONN_S_BLOCKED_CONNECT 7 -# define BIO_CONN_S_NBIO 8 -/* - * #define BIO_CONN_get_param_hostname BIO_ctrl - */ - -# define BIO_C_SET_CONNECT 100 -# define BIO_C_DO_STATE_MACHINE 101 -# define BIO_C_SET_NBIO 102 -# define BIO_C_SET_PROXY_PARAM 103 -# define BIO_C_SET_FD 104 -# define BIO_C_GET_FD 105 -# define BIO_C_SET_FILE_PTR 106 -# define BIO_C_GET_FILE_PTR 107 -# define BIO_C_SET_FILENAME 108 -# define BIO_C_SET_SSL 109 -# define BIO_C_GET_SSL 110 -# define BIO_C_SET_MD 111 -# define BIO_C_GET_MD 112 -# define BIO_C_GET_CIPHER_STATUS 113 -# define BIO_C_SET_BUF_MEM 114 -# define BIO_C_GET_BUF_MEM_PTR 115 -# define BIO_C_GET_BUFF_NUM_LINES 116 -# define BIO_C_SET_BUFF_SIZE 117 -# define BIO_C_SET_ACCEPT 118 -# define BIO_C_SSL_MODE 119 -# define BIO_C_GET_MD_CTX 120 -# define BIO_C_GET_PROXY_PARAM 121 -# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ -# define BIO_C_GET_CONNECT 123 -# define BIO_C_GET_ACCEPT 124 -# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 -# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 -# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 -# define BIO_C_FILE_SEEK 128 -# define BIO_C_GET_CIPHER_CTX 129 -# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input - * value */ -# define BIO_C_SET_BIND_MODE 131 -# define BIO_C_GET_BIND_MODE 132 -# define BIO_C_FILE_TELL 133 -# define BIO_C_GET_SOCKS 134 -# define BIO_C_SET_SOCKS 135 - -# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ -# define BIO_C_GET_WRITE_BUF_SIZE 137 -# define BIO_C_MAKE_BIO_PAIR 138 -# define BIO_C_DESTROY_BIO_PAIR 139 -# define BIO_C_GET_WRITE_GUARANTEE 140 -# define BIO_C_GET_READ_REQUEST 141 -# define BIO_C_SHUTDOWN_WR 142 -# define BIO_C_NREAD0 143 -# define BIO_C_NREAD 144 -# define BIO_C_NWRITE0 145 -# define BIO_C_NWRITE 146 -# define BIO_C_RESET_READ_REQUEST 147 -# define BIO_C_SET_MD_CTX 148 - -# define BIO_C_SET_PREFIX 149 -# define BIO_C_GET_PREFIX 150 -# define BIO_C_SET_SUFFIX 151 -# define BIO_C_GET_SUFFIX 152 - -# define BIO_C_SET_EX_ARG 153 -# define BIO_C_GET_EX_ARG 154 - -# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) -# define BIO_get_app_data(s) BIO_get_ex_data(s,0) - -/* BIO_s_connect() and BIO_s_socks4a_connect() */ -# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name) -# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port) -# define BIO_set_conn_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip) -# define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port) -# define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0) -# define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1) -# define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2) -# define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) - -# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) - -/* BIO_s_accept() */ -# define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) -# define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0) -/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ -# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL) -# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio) - -# define BIO_BIND_NORMAL 0 -# define BIO_BIND_REUSEADDR_IF_UNUSED 1 -# define BIO_BIND_REUSEADDR 2 -# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) -# define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) -# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) - -/* BIO_s_proxy_client() */ -# define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url)) -# define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p)) -/* BIO_set_nbio(b,n) */ -# define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s)) -/* BIO *BIO_get_filter_bio(BIO *bio); */ -# define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)())) -# define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk) -# define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool) - -# define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp) -# define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p)) -# define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url)) -# define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL) - -/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ -# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) -# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) - -/* BIO_s_file() */ -# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) -# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) - -/* BIO_s_fd() and BIO_s_file() */ -# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) -# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) - -/* - * name is cast to lose const, but might be better to route through a - * function so we can do it safely - */ -# ifdef CONST_STRICT -/* - * If you are wondering why this isn't defined, its because CONST_STRICT is - * purely a compile-time kludge to allow const to be checked. - */ -int BIO_read_filename(BIO *b, const char *name); -# else -# define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ,(char *)name) -# endif -# define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_WRITE,name) -# define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_APPEND,name) -# define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) - -/* - * WARNING WARNING, this ups the reference count on the read bio of the SSL - * structure. This is because the ssl read BIO is now pointed to by the - * next_bio field in the bio. So when you free the BIO, make sure you are - * doing a BIO_free_all() to catch the underlying BIO. - */ -# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) -# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) -# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) -# define BIO_set_ssl_renegotiate_bytes(b,num) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) -# define BIO_get_num_renegotiates(b) \ - BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) -# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) - -/* defined in evp.h */ -/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ - -# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) -# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm) -# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp) -# define BIO_set_mem_eof_return(b,v) \ - BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) - -/* For the BIO_f_buffer() type */ -# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) -# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) -# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) -# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) -# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) - -/* Don't use the next one unless you know what you are doing :-) */ -# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) - -# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) -# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) -# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) -# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) -# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) -# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) -/* ...pending macros have inappropriate return type */ -size_t BIO_ctrl_pending(BIO *b); -size_t BIO_ctrl_wpending(BIO *b); -# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) -# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ - cbp) -# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) - -/* For the BIO_f_buffer() type */ -# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) - -/* For BIO_s_bio() */ -# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) -# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) -# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) -# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) -# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) -/* macros with inappropriate type -- but ...pending macros use int too: */ -# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) -# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) -size_t BIO_ctrl_get_write_guarantee(BIO *b); -size_t BIO_ctrl_get_read_request(BIO *b); -int BIO_ctrl_reset_read_request(BIO *b); - -/* ctrl macros for dgram */ -# define BIO_ctrl_dgram_connect(b,peer) \ - (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer) -# define BIO_ctrl_set_connected(b, state, peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer) -# define BIO_dgram_recv_timedout(b) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) -# define BIO_dgram_send_timedout(b) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) -# define BIO_dgram_get_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer) -# define BIO_dgram_set_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) - -/* These two aren't currently implemented */ -/* int BIO_get_ex_num(BIO *bio); */ -/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */ -int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); -int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -unsigned long BIO_number_read(BIO *bio); -unsigned long BIO_number_written(BIO *bio); - -/* For BIO_f_asn1() */ -int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, - asn1_ps_func *prefix_free); -int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, - asn1_ps_func **pprefix_free); -int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, - asn1_ps_func *suffix_free); -int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, - asn1_ps_func **psuffix_free); - -# ifndef OPENSSL_NO_FP_API -BIO_METHOD *BIO_s_file(void); -BIO *BIO_new_file(const char *filename, const char *mode); -BIO *BIO_new_fp(FILE *stream, int close_flag); -# define BIO_s_file_internal BIO_s_file -# endif -BIO *BIO_new(BIO_METHOD *type); -int BIO_set(BIO *a, BIO_METHOD *type); -int BIO_free(BIO *a); -void BIO_vfree(BIO *a); -int BIO_read(BIO *b, void *data, int len); -int BIO_gets(BIO *bp, char *buf, int size); -int BIO_write(BIO *b, const void *data, int len); -int BIO_puts(BIO *bp, const char *buf); -int BIO_indent(BIO *b, int indent, int max); -long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); -long BIO_callback_ctrl(BIO *b, int cmd, - void (*fp) (struct bio_st *, int, const char *, int, - long, long)); -char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); -long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); -BIO *BIO_push(BIO *b, BIO *append); -BIO *BIO_pop(BIO *b); -void BIO_free_all(BIO *a); -BIO *BIO_find_type(BIO *b, int bio_type); -BIO *BIO_next(BIO *b); -BIO *BIO_get_retry_BIO(BIO *bio, int *reason); -int BIO_get_retry_reason(BIO *bio); -BIO *BIO_dup_chain(BIO *in); - -int BIO_nread0(BIO *bio, char **buf); -int BIO_nread(BIO *bio, char **buf, int num); -int BIO_nwrite0(BIO *bio, char **buf); -int BIO_nwrite(BIO *bio, char **buf, int num); - -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - -BIO_METHOD *BIO_s_mem(void); -BIO *BIO_new_mem_buf(const void *buf, int len); -BIO_METHOD *BIO_s_socket(void); -BIO_METHOD *BIO_s_connect(void); -BIO_METHOD *BIO_s_accept(void); -BIO_METHOD *BIO_s_fd(void); -# ifndef OPENSSL_SYS_OS2 -BIO_METHOD *BIO_s_log(void); -# endif -BIO_METHOD *BIO_s_bio(void); -BIO_METHOD *BIO_s_null(void); -BIO_METHOD *BIO_f_null(void); -BIO_METHOD *BIO_f_buffer(void); -# ifdef OPENSSL_SYS_VMS -BIO_METHOD *BIO_f_linebuffer(void); -# endif -BIO_METHOD *BIO_f_nbio_test(void); -# ifndef OPENSSL_NO_DGRAM -BIO_METHOD *BIO_s_datagram(void); -# ifndef OPENSSL_NO_SCTP -BIO_METHOD *BIO_s_datagram_sctp(void); -# endif -# endif - -/* BIO_METHOD *BIO_f_ber(void); */ - -int BIO_sock_should_retry(int i); -int BIO_sock_non_fatal_error(int error); -int BIO_dgram_non_fatal_error(int error); - -int BIO_fd_should_retry(int i); -int BIO_fd_non_fatal_error(int error); -int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); -int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); -# ifndef OPENSSL_NO_FP_API -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); -# endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, - int datalen); - -struct hostent *BIO_gethostbyname(const char *name); -/*- - * We might want a thread-safe interface too: - * struct hostent *BIO_gethostbyname_r(const char *name, - * struct hostent *result, void *buffer, size_t buflen); - * or something similar (caller allocates a struct hostent, - * pointed to by "result", and additional buffer space for the various - * substructures; if the buffer does not suffice, NULL is returned - * and an appropriate error code is set). - */ -int BIO_sock_error(int sock); -int BIO_socket_ioctl(int fd, long type, void *arg); -int BIO_socket_nbio(int fd, int mode); -int BIO_get_port(const char *str, unsigned short *port_ptr); -int BIO_get_host_ip(const char *str, unsigned char *ip); -int BIO_get_accept_socket(char *host_port, int mode); -int BIO_accept(int sock, char **ip_port); -int BIO_sock_init(void); -void BIO_sock_cleanup(void); -int BIO_set_tcp_ndelay(int sock, int turn_on); - -BIO *BIO_new_socket(int sock, int close_flag); -BIO *BIO_new_dgram(int fd, int close_flag); -# ifndef OPENSSL_NO_SCTP -BIO *BIO_new_dgram_sctp(int fd, int close_flag); -int BIO_dgram_is_sctp(BIO *bio); -int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void - *context, - void *buf), - void *context); -int BIO_dgram_sctp_wait_for_dry(BIO *b); -int BIO_dgram_sctp_msg_waiting(BIO *b); -# endif -BIO *BIO_new_fd(int fd, int close_flag); -BIO *BIO_new_connect(const char *host_port); -BIO *BIO_new_accept(const char *host_port); - -int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -/* - * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. - * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default - * value. - */ - -void BIO_copy_next_retry(BIO *b); - -/* - * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); - */ - -# ifdef __GNUC__ -# define __bio_h__attr__ __attribute__ -# else -# define __bio_h__attr__(x) -# endif -int BIO_printf(BIO *bio, const char *format, ...) -__bio_h__attr__((__format__(__printf__, 2, 3))); -int BIO_vprintf(BIO *bio, const char *format, va_list args) -__bio_h__attr__((__format__(__printf__, 2, 0))); -int BIO_snprintf(char *buf, size_t n, const char *format, ...) -__bio_h__attr__((__format__(__printf__, 3, 4))); -int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) -__bio_h__attr__((__format__(__printf__, 3, 0))); -# undef __bio_h__attr__ - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_BIO_strings(void); - -/* Error codes for the BIO functions. */ - -/* Function codes. */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_BER_GET_HEADER 102 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETHOSTBYNAME 120 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_ACCEPT_SOCKET 105 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_MEM_READ 128 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_SSL_NEW 118 -# define BIO_F_WSASTARTUP 119 - -/* Reason codes. */ -# define BIO_R_ACCEPT_ERROR 100 -# define BIO_R_BAD_FOPEN_MODE 101 -# define BIO_R_BAD_HOSTNAME_LOOKUP 102 -# define BIO_R_BROKEN_PIPE 124 -# define BIO_R_CONNECT_ERROR 103 -# define BIO_R_EOF_ON_MEMORY_BIO 127 -# define BIO_R_ERROR_SETTING_NBIO 104 -# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105 -# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106 -# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 -# define BIO_R_INVALID_ARGUMENT 125 -# define BIO_R_INVALID_IP_ADDRESS 108 -# define BIO_R_IN_USE 123 -# define BIO_R_KEEPALIVE 109 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111 -# define BIO_R_NO_HOSTNAME_SPECIFIED 112 -# define BIO_R_NO_PORT_DEFINED 113 -# define BIO_R_NO_PORT_SPECIFIED 114 -# define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 -# define BIO_R_TAG_MISMATCH 116 -# define BIO_R_UNABLE_TO_BIND_SOCKET 117 -# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/blowfish.h b/ext/openssl/windows/x64/include/openssl/blowfish.h deleted file mode 100644 index 83293027..00000000 --- a/ext/openssl/windows/x64/include/openssl/blowfish.h +++ /dev/null @@ -1,130 +0,0 @@ -/* crypto/bf/blowfish.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_BF -# error BF is disabled. -# endif - -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! BF_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! BF_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define BF_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define BF_LONG unsigned long -# define BF_LONG_LOG2 3 -/* - * _CRAY note. I could declare short, but I have no idea what impact - * does it have on performance on none-T3E machines. I could declare - * int, but at least on C90 sizeof(int) can be chosen at compile time. - * So I've chosen long... - * - */ -# else -# define BF_LONG unsigned int -# endif - -# define BF_ROUNDS 16 -# define BF_BLOCK 8 - -typedef struct bf_key_st { - BF_LONG P[BF_ROUNDS + 2]; - BF_LONG S[4 * 256]; -} BF_KEY; - -# ifdef OPENSSL_FIPS -void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data); -# endif -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/bn.h b/ext/openssl/windows/x64/include/openssl/bn.h deleted file mode 100644 index 633d1b1f..00000000 --- a/ext/openssl/windows/x64/include/openssl/bn.h +++ /dev/null @@ -1,951 +0,0 @@ -/* crypto/bn/bn.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the Eric Young open source - * license provided above. - * - * The binary polynomial arithmetic software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - -#ifndef HEADER_BN_H -# define HEADER_BN_H - -# include -# include -# ifndef OPENSSL_NO_FP_API -# include /* FILE */ -# endif -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These preprocessor symbols control various aspects of the bignum headers - * and library code. They're not defined by any "normal" configuration, as - * they are intended for development and testing purposes. NB: defining all - * three can be useful for debugging application code as well as openssl - * itself. BN_DEBUG - turn on various debugging alterations to the bignum - * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up - * mismanagement of bignum internals. You must also define BN_DEBUG. - */ -/* #define BN_DEBUG */ -/* #define BN_DEBUG_RAND */ - -# ifndef OPENSSL_SMALL_FOOTPRINT -# define BN_MUL_COMBA -# define BN_SQR_COMBA -# define BN_RECURSION -# endif - -/* - * This next option uses the C libraries (2 word)/(1 word) function. If it is - * not defined, I use my C version (which is slower). The reason for this - * flag is that when the particular C compiler library routine is used, and - * the library is linked with a different compiler, the library is missing. - * This mostly happens when the library is built with gcc and then linked - * using normal cc. This would be a common occurrence because gcc normally - * produces code that is 2 times faster than system compilers for the big - * number stuff. For machines with only one compiler (or shared libraries), - * this should be on. Again this in only really a problem on machines using - * "long long's", are 32bit, and are not using my assembler code. - */ -# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \ - defined(OPENSSL_SYS_WIN32) || defined(linux) -# ifndef BN_DIV2W -# define BN_DIV2W -# endif -# endif - -/* - * assuming long is 64bit - this is the DEC Alpha unsigned long long is only - * 64 bits :-(, don't define BN_LLONG for the DEC Alpha - */ -# ifdef SIXTY_FOUR_BIT_LONG -# define BN_ULLONG unsigned long long -# define BN_ULONG unsigned long -# define BN_LONG long -# define BN_BITS 128 -# define BN_BYTES 8 -# define BN_BITS2 64 -# define BN_BITS4 32 -# define BN_MASK (0xffffffffffffffffffffffffffffffffLL) -# define BN_MASK2 (0xffffffffffffffffL) -# define BN_MASK2l (0xffffffffL) -# define BN_MASK2h (0xffffffff00000000L) -# define BN_MASK2h1 (0xffffffff80000000L) -# define BN_TBIT (0x8000000000000000L) -# define BN_DEC_CONV (10000000000000000000UL) -# define BN_DEC_FMT1 "%lu" -# define BN_DEC_FMT2 "%019lu" -# define BN_DEC_NUM 19 -# define BN_HEX_FMT1 "%lX" -# define BN_HEX_FMT2 "%016lX" -# endif - -/* - * This is where the long long data type is 64 bits, but long is 32. For - * machines where there are 64bit registers, this is the mode to use. IRIX, - * on R4000 and above should use this mode, along with the relevant assembler - * code :-). Do NOT define BN_LLONG. - */ -# ifdef SIXTY_FOUR_BIT -# undef BN_LLONG -# undef BN_ULLONG -# define BN_ULONG unsigned long long -# define BN_LONG long long -# define BN_BITS 128 -# define BN_BYTES 8 -# define BN_BITS2 64 -# define BN_BITS4 32 -# define BN_MASK2 (0xffffffffffffffffLL) -# define BN_MASK2l (0xffffffffL) -# define BN_MASK2h (0xffffffff00000000LL) -# define BN_MASK2h1 (0xffffffff80000000LL) -# define BN_TBIT (0x8000000000000000LL) -# define BN_DEC_CONV (10000000000000000000ULL) -# define BN_DEC_FMT1 "%llu" -# define BN_DEC_FMT2 "%019llu" -# define BN_DEC_NUM 19 -# define BN_HEX_FMT1 "%llX" -# define BN_HEX_FMT2 "%016llX" -# endif - -# ifdef THIRTY_TWO_BIT -# ifdef BN_LLONG -# if defined(_WIN32) && !defined(__GNUC__) -# define BN_ULLONG unsigned __int64 -# define BN_MASK (0xffffffffffffffffI64) -# else -# define BN_ULLONG unsigned long long -# define BN_MASK (0xffffffffffffffffLL) -# endif -# endif -# define BN_ULONG unsigned int -# define BN_LONG int -# define BN_BITS 64 -# define BN_BYTES 4 -# define BN_BITS2 32 -# define BN_BITS4 16 -# define BN_MASK2 (0xffffffffL) -# define BN_MASK2l (0xffff) -# define BN_MASK2h1 (0xffff8000L) -# define BN_MASK2h (0xffff0000L) -# define BN_TBIT (0x80000000L) -# define BN_DEC_CONV (1000000000L) -# define BN_DEC_FMT1 "%u" -# define BN_DEC_FMT2 "%09u" -# define BN_DEC_NUM 9 -# define BN_HEX_FMT1 "%X" -# define BN_HEX_FMT2 "%08X" -# endif - -# define BN_DEFAULT_BITS 1280 - -# define BN_FLG_MALLOCED 0x01 -# define BN_FLG_STATIC_DATA 0x02 - -/* - * avoid leaking exponent information through timing, - * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, - * BN_div() will call BN_div_no_branch, - * BN_mod_inverse() will call BN_mod_inverse_no_branch. - */ -# define BN_FLG_CONSTTIME 0x04 - -# ifdef OPENSSL_NO_DEPRECATED -/* deprecated name for the flag */ -# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME -/* - * avoid leaking exponent information through timings - * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) - */ -# endif - -# ifndef OPENSSL_NO_DEPRECATED -# define BN_FLG_FREE 0x8000 - /* used for debuging */ -# endif -# define BN_set_flags(b,n) ((b)->flags|=(n)) -# define BN_get_flags(b,n) ((b)->flags&(n)) - -/* - * get a clone of a BIGNUM with changed flags, for *temporary* use only (the - * two BIGNUMs cannot not be used in parallel!) - */ -# define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \ - (dest)->top=(b)->top, \ - (dest)->dmax=(b)->dmax, \ - (dest)->neg=(b)->neg, \ - (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \ - | ((b)->flags & ~BN_FLG_MALLOCED) \ - | BN_FLG_STATIC_DATA \ - | (n))) - -/* Already declared in ossl_typ.h */ -# if 0 -typedef struct bignum_st BIGNUM; -/* Used for temp variables (declaration hidden in bn_lcl.h) */ -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; -# endif - -struct bignum_st { - BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit - * chunks. */ - int top; /* Index of last used d +1. */ - /* The next are internal book keeping for bn_expand. */ - int dmax; /* Size of the d array. */ - int neg; /* one if the number is negative */ - int flags; -}; - -/* Used for montgomery multiplication */ -struct bn_mont_ctx_st { - int ri; /* number of bits in R */ - BIGNUM RR; /* used to convert to montgomery form */ - BIGNUM N; /* The modulus */ - BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 (Ni is only - * stored for bignum algorithm) */ - BN_ULONG n0[2]; /* least significant word(s) of Ni; (type - * changed with 0.9.9, was "BN_ULONG n0;" - * before) */ - int flags; -}; - -/* - * Used for reciprocal division/mod functions It cannot be shared between - * threads - */ -struct bn_recp_ctx_st { - BIGNUM N; /* the divisor */ - BIGNUM Nr; /* the reciprocal */ - int num_bits; - int shift; - int flags; -}; - -/* Used for slow "generation" functions. */ -struct bn_gencb_st { - unsigned int ver; /* To handle binary (in)compatibility */ - void *arg; /* callback-specific data */ - union { - /* if(ver==1) - handles old style callbacks */ - void (*cb_1) (int, int, void *); - /* if(ver==2) - new callback style */ - int (*cb_2) (int, int, BN_GENCB *); - } cb; -}; -/* Wrapper function to make using BN_GENCB easier, */ -int BN_GENCB_call(BN_GENCB *cb, int a, int b); -/* Macro to populate a BN_GENCB structure with an "old"-style callback */ -# define BN_GENCB_set_old(gencb, callback, cb_arg) { \ - BN_GENCB *tmp_gencb = (gencb); \ - tmp_gencb->ver = 1; \ - tmp_gencb->arg = (cb_arg); \ - tmp_gencb->cb.cb_1 = (callback); } -/* Macro to populate a BN_GENCB structure with a "new"-style callback */ -# define BN_GENCB_set(gencb, callback, cb_arg) { \ - BN_GENCB *tmp_gencb = (gencb); \ - tmp_gencb->ver = 2; \ - tmp_gencb->arg = (cb_arg); \ - tmp_gencb->cb.cb_2 = (callback); } - -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ - -/* - * number of Miller-Rabin iterations for an error rate of less than 2^-80 for - * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of - * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996]; - * original paper: Damgaard, Landrock, Pomerance: Average case error - * estimates for the strong probable prime test. -- Math. Comp. 61 (1993) - * 177-194) - */ -# define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \ - (b) >= 850 ? 3 : \ - (b) >= 650 ? 4 : \ - (b) >= 550 ? 5 : \ - (b) >= 450 ? 6 : \ - (b) >= 400 ? 7 : \ - (b) >= 350 ? 8 : \ - (b) >= 300 ? 9 : \ - (b) >= 250 ? 12 : \ - (b) >= 200 ? 15 : \ - (b) >= 150 ? 18 : \ - /* b >= 100 */ 27) - -# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) - -/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */ -# define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \ - (((w) == 0) && ((a)->top == 0))) -# define BN_is_zero(a) ((a)->top == 0) -# define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg) -# define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg)) -# define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1)) - -# define BN_one(a) (BN_set_word((a),1)) -# define BN_zero_ex(a) \ - do { \ - BIGNUM *_tmp_bn = (a); \ - _tmp_bn->top = 0; \ - _tmp_bn->neg = 0; \ - } while(0) -# ifdef OPENSSL_NO_DEPRECATED -# define BN_zero(a) BN_zero_ex(a) -# else -# define BN_zero(a) (BN_set_word((a),0)) -# endif - -const BIGNUM *BN_value_one(void); -char *BN_options(void); -BN_CTX *BN_CTX_new(void); -# ifndef OPENSSL_NO_DEPRECATED -void BN_CTX_init(BN_CTX *c); -# endif -void BN_CTX_free(BN_CTX *c); -void BN_CTX_start(BN_CTX *ctx); -BIGNUM *BN_CTX_get(BN_CTX *ctx); -void BN_CTX_end(BN_CTX *ctx); -int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_num_bits(const BIGNUM *a); -int BN_num_bits_word(BN_ULONG); -BIGNUM *BN_new(void); -void BN_init(BIGNUM *); -void BN_clear_free(BIGNUM *a); -BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); -void BN_swap(BIGNUM *a, BIGNUM *b); -BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2bin(const BIGNUM *a, unsigned char *to); -BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2mpi(const BIGNUM *a, unsigned char *to); -int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -/** BN_set_negative sets sign of a BIGNUM - * \param b pointer to the BIGNUM object - * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise - */ -void BN_set_negative(BIGNUM *b, int n); -/** BN_is_negative returns 1 if the BIGNUM is negative - * \param a pointer to the BIGNUM object - * \return 1 if a < 0 and 0 otherwise - */ -# define BN_is_negative(a) ((a)->neg != 0) - -int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, - BN_CTX *ctx); -# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) -int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); -int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); -int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); - -BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); -BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); -int BN_mul_word(BIGNUM *a, BN_ULONG w); -int BN_add_word(BIGNUM *a, BN_ULONG w); -int BN_sub_word(BIGNUM *a, BN_ULONG w); -int BN_set_word(BIGNUM *a, BN_ULONG w); -BN_ULONG BN_get_word(const BIGNUM *a); - -int BN_cmp(const BIGNUM *a, const BIGNUM *b); -void BN_free(BIGNUM *a); -int BN_is_bit_set(const BIGNUM *a, int n); -int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_lshift1(BIGNUM *r, const BIGNUM *a); -int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); -int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, - const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, - BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); - -int BN_mask_bits(BIGNUM *a, int n); -# ifndef OPENSSL_NO_FP_API -int BN_print_fp(FILE *fp, const BIGNUM *a); -# endif -# ifdef HEADER_BIO_H -int BN_print(BIO *fp, const BIGNUM *a); -# else -int BN_print(void *fp, const BIGNUM *a); -# endif -int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_rshift1(BIGNUM *r, const BIGNUM *a); -void BN_clear(BIGNUM *a); -BIGNUM *BN_dup(const BIGNUM *a); -int BN_ucmp(const BIGNUM *a, const BIGNUM *b); -int BN_set_bit(BIGNUM *a, int n); -int BN_clear_bit(BIGNUM *a, int n); -char *BN_bn2hex(const BIGNUM *a); -char *BN_bn2dec(const BIGNUM *a); -int BN_hex2bn(BIGNUM **a, const char *str); -int BN_dec2bn(BIGNUM **a, const char *str); -int BN_asc2bn(BIGNUM **a, const char *str); -int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns - * -2 for - * error */ -BIGNUM *BN_mod_inverse(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); -BIGNUM *BN_mod_sqrt(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); - -void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); - -/* Deprecated versions */ -# ifndef OPENSSL_NO_DEPRECATED -BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, const BIGNUM *rem, - void (*callback) (int, int, void *), void *cb_arg); -int BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg); -int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), BN_CTX *ctx, - void *cb_arg, int do_trial_division); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); -int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); -int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, - int do_trial_division, BN_GENCB *cb); - -int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); - -int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, - const BIGNUM *Xp, const BIGNUM *Xp1, - const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, - BN_GENCB *cb); -int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, - BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, - BN_CTX *ctx, BN_GENCB *cb); - -BN_MONT_CTX *BN_MONT_CTX_new(void); -void BN_MONT_CTX_init(BN_MONT_CTX *ctx); -int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -# define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\ - (r),(a),&((mont)->RR),(mont),(ctx)) -int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, - BN_MONT_CTX *mont, BN_CTX *ctx); -void BN_MONT_CTX_free(BN_MONT_CTX *mont); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); -BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); -BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, - const BIGNUM *mod, BN_CTX *ctx); - -/* BN_BLINDING flags */ -# define BN_BLINDING_NO_UPDATE 0x00000001 -# define BN_BLINDING_NO_RECREATE 0x00000002 - -BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); -void BN_BLINDING_free(BN_BLINDING *b); -int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); -int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, - BN_CTX *); -# ifndef OPENSSL_NO_DEPRECATED -unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *); -void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long); -# endif -CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *); -unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); -void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); -BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, - const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx), - BN_MONT_CTX *m_ctx); - -# ifndef OPENSSL_NO_DEPRECATED -void BN_set_params(int mul, int high, int low, int mont); -int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ -# endif - -void BN_RECP_CTX_init(BN_RECP_CTX *recp); -BN_RECP_CTX *BN_RECP_CTX_new(void); -void BN_RECP_CTX_free(BN_RECP_CTX *recp); -int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); -int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, - BN_RECP_CTX *recp, BN_CTX *ctx); -int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, - BN_RECP_CTX *recp, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M - -/* - * Functions for arithmetic over binary polynomials represented by BIGNUMs. - * The BIGNUM::neg property of BIGNUMs representing binary polynomials is - * ignored. Note that input arguments are not const so that their bit arrays - * can be expanded to the appropriate size if needed. - */ - -/* - * r = a + b - */ -int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) -/* - * r=a mod p - */ -int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) -/*- - * Some functions allow for representation of the irreducible polynomials - * as an unsigned int[], say p. The irreducible f(t) is then of the form: - * t^p[0] + t^p[1] + ... + t^p[k] - * where m = p[0] > p[1] > ... > p[k] = 0. - */ -/* r = a mod p */ -int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], - BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], - BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); -int BN_GF2m_arr2poly(const int p[], BIGNUM *a); - -# endif - -/* - * faster mod functions for the 'NIST primes' 0 <= a < p^2 - */ -int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -const BIGNUM *BN_get0_nist_prime_192(void); -const BIGNUM *BN_get0_nist_prime_224(void); -const BIGNUM *BN_get0_nist_prime_256(void); -const BIGNUM *BN_get0_nist_prime_384(void); -const BIGNUM *BN_get0_nist_prime_521(void); - -/* library internal functions */ - -# define bn_expand(a,bits) \ - ( \ - bits > (INT_MAX - BN_BITS2 + 1) ? \ - NULL \ - : \ - (((bits+BN_BITS2-1)/BN_BITS2) <= (a)->dmax) ? \ - (a) \ - : \ - bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2) \ - ) - -# define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) -BIGNUM *bn_expand2(BIGNUM *a, int words); -# ifndef OPENSSL_NO_DEPRECATED -BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ -# endif - -/*- - * Bignum consistency macros - * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from - * bignum data after direct manipulations on the data. There is also an - * "internal" macro, bn_check_top(), for verifying that there are no leading - * zeroes. Unfortunately, some auditing is required due to the fact that - * bn_fix_top() has become an overabused duct-tape because bignum data is - * occasionally passed around in an inconsistent state. So the following - * changes have been made to sort this out; - * - bn_fix_top()s implementation has been moved to bn_correct_top() - * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and - * bn_check_top() is as before. - * - if BN_DEBUG *is* defined; - * - bn_check_top() tries to pollute unused words even if the bignum 'top' is - * consistent. (ed: only if BN_DEBUG_RAND is defined) - * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything. - * The idea is to have debug builds flag up inconsistent bignums when they - * occur. If that occurs in a bn_fix_top(), we examine the code in question; if - * the use of bn_fix_top() was appropriate (ie. it follows directly after code - * that manipulates the bignum) it is converted to bn_correct_top(), and if it - * was not appropriate, we convert it permanently to bn_check_top() and track - * down the cause of the bug. Eventually, no internal code should be using the - * bn_fix_top() macro. External applications and libraries should try this with - * their own code too, both in terms of building against the openssl headers - * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it - * defined. This not only improves external code, it provides more test - * coverage for openssl's own code. - */ - -# ifdef BN_DEBUG - -/* We only need assert() when debugging */ -# include - -# ifdef BN_DEBUG_RAND -/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ -# ifndef RAND_pseudo_bytes -int RAND_pseudo_bytes(unsigned char *buf, int num); -# define BN_DEBUG_TRIX -# endif -# define bn_pollute(a) \ - do { \ - const BIGNUM *_bnum1 = (a); \ - if(_bnum1->top < _bnum1->dmax) { \ - unsigned char _tmp_char; \ - /* We cast away const without the compiler knowing, any \ - * *genuinely* constant variables that aren't mutable \ - * wouldn't be constructed with top!=dmax. */ \ - BN_ULONG *_not_const; \ - memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \ - /* Debug only - safe to ignore error return */ \ - RAND_pseudo_bytes(&_tmp_char, 1); \ - memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \ - (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \ - } \ - } while(0) -# ifdef BN_DEBUG_TRIX -# undef RAND_pseudo_bytes -# endif -# else -# define bn_pollute(a) -# endif -# define bn_check_top(a) \ - do { \ - const BIGNUM *_bnum2 = (a); \ - if (_bnum2 != NULL) { \ - assert((_bnum2->top == 0) || \ - (_bnum2->d[_bnum2->top - 1] != 0)); \ - bn_pollute(_bnum2); \ - } \ - } while(0) - -# define bn_fix_top(a) bn_check_top(a) - -# define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2) -# define bn_wcheck_size(bn, words) \ - do { \ - const BIGNUM *_bnum2 = (bn); \ - assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \ - /* avoid unused variable warning with NDEBUG */ \ - (void)(_bnum2); \ - } while(0) - -# else /* !BN_DEBUG */ - -# define bn_pollute(a) -# define bn_check_top(a) -# define bn_fix_top(a) bn_correct_top(a) -# define bn_check_size(bn, bits) -# define bn_wcheck_size(bn, words) - -# endif - -# define bn_correct_top(a) \ - { \ - BN_ULONG *ftl; \ - int tmp_top = (a)->top; \ - if (tmp_top > 0) \ - { \ - for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \ - if (*(ftl--)) break; \ - (a)->top = tmp_top; \ - } \ - if ((a)->top == 0) \ - (a)->neg = 0; \ - bn_pollute(a); \ - } - -BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, - BN_ULONG w); -BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); -void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num); -BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d); -BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, - int num); -BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, - int num); - -/* Primes from RFC 2409 */ -BIGNUM *get_rfc2409_prime_768(BIGNUM *bn); -BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn); - -/* Primes from RFC 3526 */ -BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn); -BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn); - -int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_BN_strings(void); - -/* Error codes for the BN functions. */ - -/* Function codes. */ -# define BN_F_BNRAND 127 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_NO_BRANCH 138 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND2 108 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_MUL_RECIPROCAL 111 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_USUB 115 - -/* Reason codes. */ -# define BN_R_ARG2_LT_ARG3 100 -# define BN_R_BAD_RECIPROCAL 101 -# define BN_R_BIGNUM_TOO_LONG 114 -# define BN_R_BITS_TOO_SMALL 118 -# define BN_R_CALLED_WITH_EVEN_MODULUS 102 -# define BN_R_DIV_BY_ZERO 103 -# define BN_R_ENCODING_ERROR 104 -# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 -# define BN_R_INPUT_NOT_REDUCED 110 -# define BN_R_INVALID_LENGTH 106 -# define BN_R_INVALID_RANGE 115 -# define BN_R_INVALID_SHIFT 119 -# define BN_R_NOT_A_SQUARE 111 -# define BN_R_NOT_INITIALIZED 107 -# define BN_R_NO_INVERSE 108 -# define BN_R_NO_SOLUTION 116 -# define BN_R_P_IS_NOT_PRIME 112 -# define BN_R_TOO_MANY_ITERATIONS 113 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/buffer.h b/ext/openssl/windows/x64/include/openssl/buffer.h deleted file mode 100644 index efd240a5..00000000 --- a/ext/openssl/windows/x64/include/openssl/buffer.h +++ /dev/null @@ -1,125 +0,0 @@ -/* crypto/buffer/buffer.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# if !defined(NO_SYS_TYPES_H) -# include -# endif - -/* Already declared in ossl_typ.h */ -/* typedef struct buf_mem_st BUF_MEM; */ - -struct buf_mem_st { - size_t length; /* current number of bytes */ - char *data; - size_t max; /* size of buffer */ -}; - -BUF_MEM *BUF_MEM_new(void); -void BUF_MEM_free(BUF_MEM *a); -int BUF_MEM_grow(BUF_MEM *str, size_t len); -int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); -size_t BUF_strnlen(const char *str, size_t maxlen); -char *BUF_strdup(const char *str); - -/* - * Like strndup, but in addition, explicitly guarantees to never read past the - * first |siz| bytes of |str|. - */ -char *BUF_strndup(const char *str, size_t siz); - -void *BUF_memdup(const void *data, size_t siz); -void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); - -/* safe string functions */ -size_t BUF_strlcpy(char *dst, const char *src, size_t siz); -size_t BUF_strlcat(char *dst, const char *src, size_t siz); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_BUF_strings(void); - -/* Error codes for the BUF functions. */ - -/* Function codes. */ -# define BUF_F_BUF_MEMDUP 103 -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 -# define BUF_F_BUF_STRDUP 102 -# define BUF_F_BUF_STRNDUP 104 - -/* Reason codes. */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/camellia.h b/ext/openssl/windows/x64/include/openssl/camellia.h deleted file mode 100644 index 45e8d25b..00000000 --- a/ext/openssl/windows/x64/include/openssl/camellia.h +++ /dev/null @@ -1,132 +0,0 @@ -/* crypto/camellia/camellia.h */ -/* ==================================================================== - * Copyright (c) 2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - */ - -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H - -# include - -# ifdef OPENSSL_NO_CAMELLIA -# error CAMELLIA is disabled. -# endif - -# include - -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be a hidden type, but EVP requires that the size be known */ - -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) - -typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match - * with WORD */ - -struct camellia_key_st { - union { - double d; /* ensures 64-bit align */ - KEY_TABLE_TYPE rd_key; - } u; - int grand_rounds; -}; -typedef struct camellia_key_st CAMELLIA_KEY; - -# ifdef OPENSSL_FIPS -int private_Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); -# endif -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); -void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char ivec[CAMELLIA_BLOCK_SIZE], - unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], - unsigned int *num); - -#ifdef __cplusplus -} -#endif - -#endif /* !HEADER_Camellia_H */ diff --git a/ext/openssl/windows/x64/include/openssl/cast.h b/ext/openssl/windows/x64/include/openssl/cast.h deleted file mode 100644 index 0003ec9c..00000000 --- a/ext/openssl/windows/x64/include/openssl/cast.h +++ /dev/null @@ -1,107 +0,0 @@ -/* crypto/cast/cast.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_CAST_H -# define HEADER_CAST_H - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef OPENSSL_NO_CAST -# error CAST is disabled. -# endif - -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - -# define CAST_BLOCK 8 -# define CAST_KEY_LENGTH 16 - -typedef struct cast_key_st { - CAST_LONG data[32]; - int short_key; /* Use reduced rounds for short key */ -} CAST_KEY; - -# ifdef OPENSSL_FIPS -void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); -# endif -void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); -void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAST_KEY *key, int enc); -void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *ks, unsigned char *iv, - int enc); -void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/cmac.h b/ext/openssl/windows/x64/include/openssl/cmac.h deleted file mode 100644 index 175be834..00000000 --- a/ext/openssl/windows/x64/include/openssl/cmac.h +++ /dev/null @@ -1,82 +0,0 @@ -/* crypto/cmac/cmac.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL - * project. - */ -/* ==================================================================== - * Copyright (c) 2010 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - */ - -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -/* Opaque */ -typedef struct CMAC_CTX_st CMAC_CTX; - -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/cms.h b/ext/openssl/windows/x64/include/openssl/cms.h deleted file mode 100644 index e6c7f964..00000000 --- a/ext/openssl/windows/x64/include/openssl/cms.h +++ /dev/null @@ -1,555 +0,0 @@ -/* crypto/cms/cms.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL - * project. - */ -/* ==================================================================== - * Copyright (c) 2008 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - */ - -#ifndef HEADER_CMS_H -# define HEADER_CMS_H - -# include - -# ifdef OPENSSL_NO_CMS -# error CMS is disabled. -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_CertificateChoices CMS_CertificateChoices; -typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; -typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; -typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; -typedef struct CMS_Receipt_st CMS_Receipt; -typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; -typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; - -DECLARE_STACK_OF(CMS_SignerInfo) -DECLARE_STACK_OF(GENERAL_NAMES) -DECLARE_STACK_OF(CMS_RecipientEncryptedKey) -DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) -DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) -DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) - -# define CMS_SIGNERINFO_ISSUER_SERIAL 0 -# define CMS_SIGNERINFO_KEYIDENTIFIER 1 - -# define CMS_RECIPINFO_NONE -1 -# define CMS_RECIPINFO_TRANS 0 -# define CMS_RECIPINFO_AGREE 1 -# define CMS_RECIPINFO_KEK 2 -# define CMS_RECIPINFO_PASS 3 -# define CMS_RECIPINFO_OTHER 4 - -/* S/MIME related flags */ - -# define CMS_TEXT 0x1 -# define CMS_NOCERTS 0x2 -# define CMS_NO_CONTENT_VERIFY 0x4 -# define CMS_NO_ATTR_VERIFY 0x8 -# define CMS_NOSIGS \ - (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) -# define CMS_NOINTERN 0x10 -# define CMS_NO_SIGNER_CERT_VERIFY 0x20 -# define CMS_NOVERIFY 0x20 -# define CMS_DETACHED 0x40 -# define CMS_BINARY 0x80 -# define CMS_NOATTR 0x100 -# define CMS_NOSMIMECAP 0x200 -# define CMS_NOOLDMIMETYPE 0x400 -# define CMS_CRLFEOL 0x800 -# define CMS_STREAM 0x1000 -# define CMS_NOCRL 0x2000 -# define CMS_PARTIAL 0x4000 -# define CMS_REUSE_DIGEST 0x8000 -# define CMS_USE_KEYID 0x10000 -# define CMS_DEBUG_DECRYPT 0x20000 -# define CMS_KEY_PARAM 0x40000 - -const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms); - -BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); -int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); - -ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); -int CMS_is_detached(CMS_ContentInfo *cms); -int CMS_set_detached(CMS_ContentInfo *cms, int detached); - -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) -# endif -int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); -CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); -int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); - -BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); -int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); -int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, - int flags); -CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); -int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); - -int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, - unsigned int flags); - -CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, BIO *data, - unsigned int flags); - -CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, - X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, unsigned int flags); - -int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); -CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); - -int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, - unsigned int flags); - -int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, - const unsigned char *key, size_t keylen, - BIO *dcont, BIO *out, unsigned int flags); - -CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, - const unsigned char *key, - size_t keylen, unsigned int flags); - -int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, - const unsigned char *key, size_t keylen); - -int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); - -int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, - STACK_OF(X509) *certs, - X509_STORE *store, unsigned int flags); - -STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); - -CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, - const EVP_CIPHER *cipher, unsigned int flags); - -int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, - BIO *dcont, BIO *out, unsigned int flags); - -int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); -int CMS_decrypt_set1_key(CMS_ContentInfo *cms, - unsigned char *key, size_t keylen, - unsigned char *id, size_t idlen); -int CMS_decrypt_set1_password(CMS_ContentInfo *cms, - unsigned char *pass, ossl_ssize_t passlen); - -STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); -int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); -EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); -CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); -CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, - X509 *recip, unsigned int flags); -int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); -int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); -int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, - EVP_PKEY **pk, X509 **recip, - X509_ALGOR **palg); -int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, - unsigned char *key, size_t keylen, - unsigned char *id, size_t idlen, - ASN1_GENERALIZEDTIME *date, - ASN1_OBJECT *otherTypeId, - ASN1_TYPE *otherType); - -int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pid, - ASN1_GENERALIZEDTIME **pdate, - ASN1_OBJECT **potherid, - ASN1_TYPE **pothertype); - -int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, - unsigned char *key, size_t keylen); - -int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, - const unsigned char *id, size_t idlen); - -int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, - unsigned char *pass, - ossl_ssize_t passlen); - -CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, - int iter, int wrap_nid, - int pbe_nid, - unsigned char *pass, - ossl_ssize_t passlen, - const EVP_CIPHER *kekciph); - -int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); - -int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); - -int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); -const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); - -CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); -int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); -int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); -STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); - -CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); -int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); -int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); -STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); - -int CMS_SignedData_init(CMS_ContentInfo *cms); -CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, - X509 *signer, EVP_PKEY *pk, const EVP_MD *md, - unsigned int flags); -EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); -EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); -STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); - -void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); -int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); -int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - unsigned int flags); -void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, - X509 **signer, X509_ALGOR **pdig, - X509_ALGOR **psig); -ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); -int CMS_SignerInfo_sign(CMS_SignerInfo *si); -int CMS_SignerInfo_verify(CMS_SignerInfo *si); -int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); - -int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); -int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, - int algnid, int keysize); -int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); - -int CMS_signed_get_attr_count(const CMS_SignerInfo *si); -int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, - int lastpos, int type); - -int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); -int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, - int lastpos, int type); - -# ifdef HEADER_X509V3_H - -int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); -int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); -void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, - ASN1_STRING **pcid, - int *pallorfirst, - STACK_OF(GENERAL_NAMES) **plist, - STACK_OF(GENERAL_NAMES) **prto); -# endif -int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pukm); -STACK_OF(CMS_RecipientEncryptedKey) -*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); - -int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, - X509_ALGOR **pubalg, - ASN1_BIT_STRING **pubkey, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); - -int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, - ASN1_OCTET_STRING **keyid, - ASN1_GENERALIZEDTIME **tm, - CMS_OtherKeyAttribute **other, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, - X509 *cert); -int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); -EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); -int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, - CMS_RecipientInfo *ri, - CMS_RecipientEncryptedKey *rek); - -int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, - ASN1_OCTET_STRING *ukm, int keylen); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_CMS_strings(void); - -/* Error codes for the CMS functions. */ - -/* Function codes. */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 - -/* Reason codes. */ -# define CMS_R_ADD_SIGNER_ERROR 99 -# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 -# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 -# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 -# define CMS_R_CIPHER_INITIALISATION_ERROR 101 -# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 -# define CMS_R_CMS_DATAFINAL_ERROR 103 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# define CMS_R_CONTENT_VERIFY_ERROR 109 -# define CMS_R_CTRL_ERROR 110 -# define CMS_R_CTRL_FAILURE 111 -# define CMS_R_DECRYPT_ERROR 112 -# define CMS_R_DIGEST_ERROR 161 -# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 -# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 -# define CMS_R_ERROR_SETTING_KEY 115 -# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 -# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 -# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 -# define CMS_R_INVALID_KEY_LENGTH 118 -# define CMS_R_MD_BIO_INIT_ERROR 119 -# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 -# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 -# define CMS_R_RECEIPT_DECODE_ERROR 169 -# define CMS_R_RECIPIENT_ERROR 137 -# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 -# define CMS_R_SIGNFINAL_ERROR 139 -# define CMS_R_SMIME_TEXT_ERROR 140 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORIHM 149 -# define CMS_R_UNKNOWN_ID 150 -# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 -# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 -# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 -# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 -# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 -# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE 155 -# define CMS_R_UNSUPPORTED_TYPE 156 -# define CMS_R_UNWRAP_ERROR 157 -# define CMS_R_UNWRAP_FAILURE 180 -# define CMS_R_VERIFICATION_FAILURE 158 -# define CMS_R_WRAP_ERROR 159 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/comp.h b/ext/openssl/windows/x64/include/openssl/comp.h deleted file mode 100644 index df599ba3..00000000 --- a/ext/openssl/windows/x64/include/openssl/comp.h +++ /dev/null @@ -1,83 +0,0 @@ - -#ifndef HEADER_COMP_H -# define HEADER_COMP_H - -# include - -# ifdef OPENSSL_NO_COMP -# error COMP is disabled. -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct comp_ctx_st COMP_CTX; - -struct comp_method_st { - int type; /* NID for compression library */ - const char *name; /* A text string to identify the library */ - int (*init) (COMP_CTX *ctx); - void (*finish) (COMP_CTX *ctx); - int (*compress) (COMP_CTX *ctx, - unsigned char *out, unsigned int olen, - unsigned char *in, unsigned int ilen); - int (*expand) (COMP_CTX *ctx, - unsigned char *out, unsigned int olen, - unsigned char *in, unsigned int ilen); - /* - * The following two do NOTHING, but are kept for backward compatibility - */ - long (*ctrl) (void); - long (*callback_ctrl) (void); -}; - -struct comp_ctx_st { - COMP_METHOD *meth; - unsigned long compress_in; - unsigned long compress_out; - unsigned long expand_in; - unsigned long expand_out; - CRYPTO_EX_DATA ex_data; -}; - -COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); -void COMP_CTX_free(COMP_CTX *ctx); -int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -COMP_METHOD *COMP_rle(void); -COMP_METHOD *COMP_zlib(void); -void COMP_zlib_cleanup(void); - -# ifdef HEADER_BIO_H -# ifdef ZLIB -BIO_METHOD *BIO_f_zlib(void); -# endif -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_COMP_strings(void); - -/* Error codes for the COMP functions. */ - -/* Function codes. */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 - -/* Reason codes. */ -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/conf.h b/ext/openssl/windows/x64/include/openssl/conf.h deleted file mode 100644 index fe491130..00000000 --- a/ext/openssl/windows/x64/include/openssl/conf.h +++ /dev/null @@ -1,268 +0,0 @@ -/* crypto/conf/conf.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_CONF_H -# define HEADER_CONF_H - -# include -# include -# include -# include -# include - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char *section; - char *name; - char *value; -} CONF_VALUE; - -DECLARE_STACK_OF(CONF_VALUE) -DECLARE_LHASH_OF(CONF_VALUE); - -struct conf_st; -struct conf_method_st; -typedef struct conf_method_st CONF_METHOD; - -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; - -/* Module definitions */ - -typedef struct conf_imodule_st CONF_IMODULE; -typedef struct conf_module_st CONF_MODULE; - -DECLARE_STACK_OF(CONF_MODULE) -DECLARE_STACK_OF(CONF_IMODULE) - -/* DSO module function typedefs */ -typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); -typedef void conf_finish_func (CONF_IMODULE *md); - -# define CONF_MFLAGS_IGNORE_ERRORS 0x1 -# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 -# define CONF_MFLAGS_SILENT 0x4 -# define CONF_MFLAGS_NO_DSO 0x8 -# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 -# define CONF_MFLAGS_DEFAULT_SECTION 0x20 - -int CONF_set_default_method(CONF_METHOD *meth); -void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); -LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, - long *eline); -# ifndef OPENSSL_NO_FP_API -LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, - long *eline); -# endif -LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, - long *eline); -STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, - const char *section); -char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -void CONF_free(LHASH_OF(CONF_VALUE) *conf); -int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); -int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); - -void OPENSSL_config(const char *config_name); -void OPENSSL_no_config(void); - -/* - * New conf code. The semantics are different from the functions above. If - * that wasn't the case, the above functions would have been replaced - */ - -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - -CONF *NCONF_new(CONF_METHOD *meth); -CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); -# if 0 /* Just to give you an idea of what I have in - * mind */ -CONF_METHOD *NCONF_XML(void); -# endif -void NCONF_free(CONF *conf); -void NCONF_free_data(CONF *conf); - -int NCONF_load(CONF *conf, const char *file, long *eline); -# ifndef OPENSSL_NO_FP_API -int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); -# endif -int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); -STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, - const char *section); -char *NCONF_get_string(const CONF *conf, const char *group, const char *name); -int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, - long *result); -int NCONF_dump_fp(const CONF *conf, FILE *out); -int NCONF_dump_bio(const CONF *conf, BIO *out); - -# if 0 /* The following function has no error - * checking, and should therefore be avoided */ -long NCONF_get_number(CONF *conf, char *group, char *name); -# else -# define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) -# endif - -/* Module functions */ - -int CONF_modules_load(const CONF *cnf, const char *appname, - unsigned long flags); -int CONF_modules_load_file(const char *filename, const char *appname, - unsigned long flags); -void CONF_modules_unload(int all); -void CONF_modules_finish(void); -void CONF_modules_free(void); -int CONF_module_add(const char *name, conf_init_func *ifunc, - conf_finish_func *ffunc); - -const char *CONF_imodule_get_name(const CONF_IMODULE *md); -const char *CONF_imodule_get_value(const CONF_IMODULE *md); -void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); -void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); -CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); -unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); -void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); -void *CONF_module_get_usr_data(CONF_MODULE *pmod); -void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); - -char *CONF_get1_default_config_file(void); - -int CONF_parse_list(const char *list, int sep, int nospc, - int (*list_cb) (const char *elem, int len, void *usr), - void *arg); - -void OPENSSL_load_builtin_modules(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_CONF_strings(void); - -/* Error codes for the CONF functions. */ - -/* Function codes. */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_BIO 102 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_MODULES_LOAD 116 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER 107 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_STR_COPY 101 - -/* Reason codes. */ -# define CONF_R_ERROR_LOADING_DSO 110 -# define CONF_R_LIST_CANNOT_BE_NULL 115 -# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 -# define CONF_R_MISSING_EQUAL_SIGN 101 -# define CONF_R_MISSING_FINISH_FUNCTION 111 -# define CONF_R_MISSING_INIT_FUNCTION 112 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# define CONF_R_NO_SUCH_FILE 114 -# define CONF_R_NO_VALUE 108 -# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 -# define CONF_R_UNKNOWN_MODULE_NAME 113 -# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 -# define CONF_R_VARIABLE_HAS_NO_VALUE 104 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/conf_api.h b/ext/openssl/windows/x64/include/openssl/conf_api.h deleted file mode 100644 index e478f7df..00000000 --- a/ext/openssl/windows/x64/include/openssl/conf_api.h +++ /dev/null @@ -1,89 +0,0 @@ -/* conf_api.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Up until OpenSSL 0.9.5a, this was new_section */ -CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was get_section */ -CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ -STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, - const char *section); - -int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); -char *_CONF_get_string(const CONF *conf, const char *section, - const char *name); -long _CONF_get_number(const CONF *conf, const char *section, - const char *name); - -int _CONF_new_data(CONF *conf); -void _CONF_free_data(CONF *conf); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/crypto.h b/ext/openssl/windows/x64/include/openssl/crypto.h deleted file mode 100644 index 6c644ce1..00000000 --- a/ext/openssl/windows/x64/include/openssl/crypto.h +++ /dev/null @@ -1,661 +0,0 @@ -/* crypto/crypto.h */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H - -# include - -# include - -# ifndef OPENSSL_NO_FP_API -# include -# endif - -# include -# include -# include -# include - -# ifdef CHARSET_EBCDIC -# include -# endif - -/* - * Resolve problems on some operating systems with symbol names that clash - * one way or another - */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Backward compatibility to SSLeay */ -/* - * This is more to be used to check the correct DLL is being used in the MS - * world. - */ -# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER -# define SSLEAY_VERSION 0 -/* #define SSLEAY_OPTIONS 1 no longer supported */ -# define SSLEAY_CFLAGS 2 -# define SSLEAY_BUILT_ON 3 -# define SSLEAY_PLATFORM 4 -# define SSLEAY_DIR 5 - -/* Already declared in ossl_typ.h */ -# if 0 -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; -/* Called when a new object is created */ -typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -/* Called when an object is free()ed */ -typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -/* Called when we need to dup an object */ -typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); -# endif - -/* A generic structure to pass assorted data in a expandable way */ -typedef struct openssl_item_st { - int code; - void *value; /* Not used for flag attributes */ - size_t value_size; /* Max size of value for output, length for - * input */ - size_t *value_length; /* Returned length of value for output */ -} OPENSSL_ITEM; - -/* - * When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock - * names in cryptlib.c - */ - -# define CRYPTO_LOCK_ERR 1 -# define CRYPTO_LOCK_EX_DATA 2 -# define CRYPTO_LOCK_X509 3 -# define CRYPTO_LOCK_X509_INFO 4 -# define CRYPTO_LOCK_X509_PKEY 5 -# define CRYPTO_LOCK_X509_CRL 6 -# define CRYPTO_LOCK_X509_REQ 7 -# define CRYPTO_LOCK_DSA 8 -# define CRYPTO_LOCK_RSA 9 -# define CRYPTO_LOCK_EVP_PKEY 10 -# define CRYPTO_LOCK_X509_STORE 11 -# define CRYPTO_LOCK_SSL_CTX 12 -# define CRYPTO_LOCK_SSL_CERT 13 -# define CRYPTO_LOCK_SSL_SESSION 14 -# define CRYPTO_LOCK_SSL_SESS_CERT 15 -# define CRYPTO_LOCK_SSL 16 -# define CRYPTO_LOCK_SSL_METHOD 17 -# define CRYPTO_LOCK_RAND 18 -# define CRYPTO_LOCK_RAND2 19 -# define CRYPTO_LOCK_MALLOC 20 -# define CRYPTO_LOCK_BIO 21 -# define CRYPTO_LOCK_GETHOSTBYNAME 22 -# define CRYPTO_LOCK_GETSERVBYNAME 23 -# define CRYPTO_LOCK_READDIR 24 -# define CRYPTO_LOCK_RSA_BLINDING 25 -# define CRYPTO_LOCK_DH 26 -# define CRYPTO_LOCK_MALLOC2 27 -# define CRYPTO_LOCK_DSO 28 -# define CRYPTO_LOCK_DYNLOCK 29 -# define CRYPTO_LOCK_ENGINE 30 -# define CRYPTO_LOCK_UI 31 -# define CRYPTO_LOCK_ECDSA 32 -# define CRYPTO_LOCK_EC 33 -# define CRYPTO_LOCK_ECDH 34 -# define CRYPTO_LOCK_BN 35 -# define CRYPTO_LOCK_EC_PRE_COMP 36 -# define CRYPTO_LOCK_STORE 37 -# define CRYPTO_LOCK_COMP 38 -# define CRYPTO_LOCK_FIPS 39 -# define CRYPTO_LOCK_FIPS2 40 -# define CRYPTO_NUM_LOCKS 41 - -# define CRYPTO_LOCK 1 -# define CRYPTO_UNLOCK 2 -# define CRYPTO_READ 4 -# define CRYPTO_WRITE 8 - -# ifndef OPENSSL_NO_LOCKING -# ifndef CRYPTO_w_lock -# define CRYPTO_w_lock(type) \ - CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) -# define CRYPTO_w_unlock(type) \ - CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) -# define CRYPTO_r_lock(type) \ - CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__) -# define CRYPTO_r_unlock(type) \ - CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__) -# define CRYPTO_add(addr,amount,type) \ - CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__) -# endif -# else -# define CRYPTO_w_lock(a) -# define CRYPTO_w_unlock(a) -# define CRYPTO_r_lock(a) -# define CRYPTO_r_unlock(a) -# define CRYPTO_add(a,b,c) ((*(a))+=(b)) -# endif - -/* - * Some applications as well as some parts of OpenSSL need to allocate and - * deallocate locks in a dynamic fashion. The following typedef makes this - * possible in a type-safe manner. - */ -/* struct CRYPTO_dynlock_value has to be defined by the application. */ -typedef struct { - int references; - struct CRYPTO_dynlock_value *data; -} CRYPTO_dynlock; - -/* - * The following can be used to detect memory leaks in the SSLeay library. It - * used, it turns on malloc checking - */ - -# define CRYPTO_MEM_CHECK_OFF 0x0/* an enume */ -# define CRYPTO_MEM_CHECK_ON 0x1/* a bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2/* a bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3/* an enume */ - -/* - * The following are bit values to turn on or off options connected to the - * malloc checking functionality - */ - -/* Adds time to the memory checking information */ -# define V_CRYPTO_MDEBUG_TIME 0x1/* a bit */ -/* Adds thread number to the memory checking information */ -# define V_CRYPTO_MDEBUG_THREAD 0x2/* a bit */ - -# define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) - -/* predec of the BIO type */ -typedef struct bio_st BIO_dummy; - -struct crypto_ex_data_st { - STACK_OF(void) *sk; - /* gcc is screwing up this data structure :-( */ - int dummy; -}; -DECLARE_STACK_OF(void) - -/* - * This stuff is basically class callback functions The current classes are - * SSL_CTX, SSL, SSL_SESSION, and a few more - */ - -typedef struct crypto_ex_data_func_st { - long argl; /* Arbitary long */ - void *argp; /* Arbitary void * */ - CRYPTO_EX_new *new_func; - CRYPTO_EX_free *free_func; - CRYPTO_EX_dup *dup_func; -} CRYPTO_EX_DATA_FUNCS; - -DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) - -/* - * Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA - * entry. - */ - -# define CRYPTO_EX_INDEX_BIO 0 -# define CRYPTO_EX_INDEX_SSL 1 -# define CRYPTO_EX_INDEX_SSL_CTX 2 -# define CRYPTO_EX_INDEX_SSL_SESSION 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_RSA 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_DH 8 -# define CRYPTO_EX_INDEX_ENGINE 9 -# define CRYPTO_EX_INDEX_X509 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_ECDSA 12 -# define CRYPTO_EX_INDEX_ECDH 13 -# define CRYPTO_EX_INDEX_COMP 14 -# define CRYPTO_EX_INDEX_STORE 15 - -/* - * Dynamically assigned indexes start from this value (don't use directly, - * use via CRYPTO_ex_data_new_class). - */ -# define CRYPTO_EX_INDEX_USER 100 - -/* - * This is the default callbacks, but we can have others as well: this is - * needed in Win32 where the application malloc and the library malloc may - * not be the same. - */ -# define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ - malloc, realloc, free) - -# if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD -# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ -# define CRYPTO_MDEBUG -# endif -# endif - -/* - * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG - * is defined) - */ -# define CRYPTO_malloc_debug_init() do {\ - CRYPTO_set_mem_debug_functions(\ - CRYPTO_dbg_malloc,\ - CRYPTO_dbg_realloc,\ - CRYPTO_dbg_free,\ - CRYPTO_dbg_set_options,\ - CRYPTO_dbg_get_options);\ - } while(0) - -int CRYPTO_mem_ctrl(int mode); -int CRYPTO_is_mem_check_on(void); - -/* for applications */ -# define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) -# define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) - -/* for library-internal use */ -# define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) -# define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) -# define is_MemCheck_on() CRYPTO_is_mem_check_on() - -# define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) -# define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__) -# define OPENSSL_realloc(addr,num) \ - CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) -# define OPENSSL_realloc_clean(addr,old_num,num) \ - CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__) -# define OPENSSL_remalloc(addr,num) \ - CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) -# define OPENSSL_freeFunc CRYPTO_free -# define OPENSSL_free(addr) CRYPTO_free(addr) - -# define OPENSSL_malloc_locked(num) \ - CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) -# define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr) - -const char *SSLeay_version(int type); -unsigned long SSLeay(void); - -int OPENSSL_issetugid(void); - -/* An opaque type representing an implementation of "ex_data" support */ -typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; -/* Return an opaque pointer to the current "ex_data" implementation */ -const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); -/* Sets the "ex_data" implementation to be used (if it's not too late) */ -int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); -/* Get a new "ex_data" class, and return the corresponding "class_index" */ -int CRYPTO_ex_data_new_class(void); -/* Within a given class, get/register a new index */ -int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -/* - * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a - * given class (invokes whatever per-class callbacks are applicable) - */ -int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); -int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, - CRYPTO_EX_DATA *from); -void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); -/* - * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular - * index (relative to the class type involved) - */ -int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); -void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); -/* - * This function cleans up all "ex_data" state. It mustn't be called under - * potential race-conditions. - */ -void CRYPTO_cleanup_all_ex_data(void); - -int CRYPTO_get_new_lockid(char *name); - -int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ -void CRYPTO_lock(int mode, int type, const char *file, int line); -void CRYPTO_set_locking_callback(void (*func) (int mode, int type, - const char *file, int line)); -void (*CRYPTO_get_locking_callback(void)) (int mode, int type, - const char *file, int line); -void CRYPTO_set_add_lock_callback(int (*func) - (int *num, int mount, int type, - const char *file, int line)); -int (*CRYPTO_get_add_lock_callback(void)) (int *num, int mount, int type, - const char *file, int line); - -/* Don't use this structure directly. */ -typedef struct crypto_threadid_st { - void *ptr; - unsigned long val; -} CRYPTO_THREADID; -/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ -void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); -void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); -int CRYPTO_THREADID_set_callback(void (*threadid_func) (CRYPTO_THREADID *)); -void (*CRYPTO_THREADID_get_callback(void)) (CRYPTO_THREADID *); -void CRYPTO_THREADID_current(CRYPTO_THREADID *id); -int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b); -void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src); -unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id); -# ifndef OPENSSL_NO_DEPRECATED -void CRYPTO_set_id_callback(unsigned long (*func) (void)); -unsigned long (*CRYPTO_get_id_callback(void)) (void); -unsigned long CRYPTO_thread_id(void); -# endif - -const char *CRYPTO_get_lock_name(int type); -int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, - int line); - -int CRYPTO_get_new_dynlockid(void); -void CRYPTO_destroy_dynlockid(int i); -struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); -void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value - *(*dyn_create_function) (const char - *file, - int line)); -void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function) - (int mode, - struct CRYPTO_dynlock_value *l, - const char *file, int line)); -void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function) - (struct CRYPTO_dynlock_value *l, - const char *file, int line)); -struct CRYPTO_dynlock_value -*(*CRYPTO_get_dynlock_create_callback(void)) (const char *file, int line); -void (*CRYPTO_get_dynlock_lock_callback(void)) (int mode, - struct CRYPTO_dynlock_value - *l, const char *file, - int line); -void (*CRYPTO_get_dynlock_destroy_callback(void)) (struct CRYPTO_dynlock_value - *l, const char *file, - int line); - -/* - * CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- call - * the latter last if you need different functions - */ -int CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t), - void (*f) (void *)); -int CRYPTO_set_locked_mem_functions(void *(*m) (size_t), - void (*free_func) (void *)); -int CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, - int), void (*f) (void *)); -int CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int), - void (*free_func) (void *)); -int CRYPTO_set_mem_debug_functions(void (*m) - (void *, int, const char *, int, int), - void (*r) (void *, void *, int, - const char *, int, int), - void (*f) (void *, int), void (*so) (long), - long (*go) (void)); -void CRYPTO_get_mem_functions(void *(**m) (size_t), - void *(**r) (void *, size_t), - void (**f) (void *)); -void CRYPTO_get_locked_mem_functions(void *(**m) (size_t), - void (**f) (void *)); -void CRYPTO_get_mem_ex_functions(void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, - int), void (**f) (void *)); -void CRYPTO_get_locked_mem_ex_functions(void - *(**m) (size_t, const char *, int), - void (**f) (void *)); -void CRYPTO_get_mem_debug_functions(void (**m) - (void *, int, const char *, int, int), - void (**r) (void *, void *, int, - const char *, int, int), - void (**f) (void *, int), - void (**so) (long), long (**go) (void)); - -void *CRYPTO_malloc_locked(int num, const char *file, int line); -void CRYPTO_free_locked(void *ptr); -void *CRYPTO_malloc(int num, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -void CRYPTO_free(void *ptr); -void *CRYPTO_realloc(void *addr, int num, const char *file, int line); -void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, - int line); -void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); - -void OPENSSL_cleanse(void *ptr, size_t len); - -void CRYPTO_set_mem_debug_options(long bits); -long CRYPTO_get_mem_debug_options(void); - -# define CRYPTO_push_info(info) \ - CRYPTO_push_info_(info, __FILE__, __LINE__); -int CRYPTO_push_info_(const char *info, const char *file, int line); -int CRYPTO_pop_info(void); -int CRYPTO_remove_all_info(void); - -/* - * Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro; - * used as default in CRYPTO_MDEBUG compilations): - */ -/*- - * The last argument has the following significance: - * - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place - */ -void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, - int before_p); -void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, - int line, int before_p); -void CRYPTO_dbg_free(void *addr, int before_p); -/*- - * Tell the debugging code about options. By default, the following values - * apply: - * - * 0: Clear all options. - * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option. - * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option. - * V_CRYPTO_MDEBUG_ALL (3): 1 + 2 - */ -void CRYPTO_dbg_set_options(long bits); -long CRYPTO_dbg_get_options(void); - -# ifndef OPENSSL_NO_FP_API -void CRYPTO_mem_leaks_fp(FILE *); -# endif -void CRYPTO_mem_leaks(struct bio_st *bio); -/* unsigned long order, char *file, int line, int num_bytes, char *addr */ -typedef void *CRYPTO_MEM_LEAK_CB (unsigned long, const char *, int, int, - void *); -void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); - -/* die if we have to */ -void OpenSSLDie(const char *file, int line, const char *assertion); -# define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) - -unsigned long *OPENSSL_ia32cap_loc(void); -# define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc())) -int OPENSSL_isservice(void); - -int FIPS_mode(void); -int FIPS_mode_set(int r); - -void OPENSSL_init(void); - -# define fips_md_init(alg) fips_md_init_ctx(alg, alg) - -# ifdef OPENSSL_FIPS -# define fips_md_init_ctx(alg, cx) \ - int alg##_Init(cx##_CTX *c) \ - { \ - if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ - "Low level API call to digest " #alg " forbidden in FIPS mode!"); \ - return private_##alg##_Init(c); \ - } \ - int private_##alg##_Init(cx##_CTX *c) - -# define fips_cipher_abort(alg) \ - if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ - "Low level API call to cipher " #alg " forbidden in FIPS mode!") - -# else -# define fips_md_init_ctx(alg, cx) \ - int alg##_Init(cx##_CTX *c) -# define fips_cipher_abort(alg) while(0) -# endif - -/* - * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. - * It takes an amount of time dependent on |len|, but independent of the - * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements - * into a defined order as the return value when a != b is undefined, other - * than to be non-zero. - */ -int CRYPTO_memcmp(const volatile void *a, const volatile void *b, size_t len); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_CRYPTO_strings(void); - -/* Error codes for the CRYPTO functions. */ - -/* Function codes. */ -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103 -# define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_DEF_ADD_INDEX 104 -# define CRYPTO_F_DEF_GET_CLASS 105 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_INT_DUP_EX_DATA 106 -# define CRYPTO_F_INT_FREE_EX_DATA 107 -# define CRYPTO_F_INT_NEW_EX_DATA 108 - -/* Reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 -# define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/des.h b/ext/openssl/windows/x64/include/openssl/des.h deleted file mode 100644 index 1b40144e..00000000 --- a/ext/openssl/windows/x64/include/openssl/des.h +++ /dev/null @@ -1,257 +0,0 @@ -/* crypto/des/des.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_NEW_DES_H -# define HEADER_NEW_DES_H - -# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG - * (via openssl/opensslconf.h */ - -# ifdef OPENSSL_NO_DES -# error DES is disabled. -# endif - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef unsigned char DES_cblock[8]; -typedef /* const */ unsigned char const_DES_cblock[8]; -/* - * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and - * const_DES_cblock * are incompatible pointer types. - */ - -typedef struct DES_ks { - union { - DES_cblock cblock; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG deslong[2]; - } ks[16]; -} DES_key_schedule; - -# ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT -# ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT -# define OPENSSL_ENABLE_OLD_DES_SUPPORT -# endif -# endif - -# ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT -# include -# endif - -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) - -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 - -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 - -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ - DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) -OPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */ -# define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) - -const char *DES_options(void); -void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, int enc); -DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, - long length, DES_key_schedule *schedule, - const_DES_cblock *ivec); -/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ -void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); -void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks, int enc); - -/* - * This is the DES encryption function that gets called by just about every - * other DES routine in the library. You should not use this function except - * to implement 'modes' of DES. I say this because the functions that call - * this routine do the conversion from 'char *' to long, and this needs to be - * done to make sure 'non-aligned' memory access do not occur. The - * characters are loaded 'little endian'. Data is a pointer to 2 unsigned - * long's and ks is the DES_key_schedule to use. enc, is non zero specifies - * encryption, zero if decryption. - */ -void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); - -/* - * This functions is the same as DES_encrypt1() except that the DES initial - * permutation (IP) and final permutation (FP) have been left out. As for - * DES_encrypt1(), you should not use this function. It is used by the - * routines in the library that implement triple DES. IP() DES_encrypt2() - * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() - * DES_encrypt1() DES_encrypt1() except faster :-). - */ -void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); -void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, - DES_cblock *ivec1, DES_cblock *ivec2, int enc); -void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num, int enc); -void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, - int numbits, long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int enc); -void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num); -# if 0 -void DES_xwhite_in2out(const_DES_cblock *DES_key, const_DES_cblock *in_white, - DES_cblock *out_white); -# endif - -int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, - DES_cblock *iv); -int DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched, - DES_cblock *iv); -char *DES_fcrypt(const char *buf, const char *salt, char *ret); -char *DES_crypt(const char *buf, const char *salt); -void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); -void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], - long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); -/* - * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. - */ -int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -# ifdef OPENSSL_FIPS -void private_DES_set_key_unchecked(const_DES_cblock *key, - DES_key_schedule *schedule); -# endif -void DES_string_to_key(const char *str, DES_cblock *key); -void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); -void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num, int enc); -void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num); - -int DES_read_password(DES_cblock *key, const char *prompt, int verify); -int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, - const char *prompt, int verify); - -# define DES_fixup_key_parity DES_set_odd_parity - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/des_old.h b/ext/openssl/windows/x64/include/openssl/des_old.h deleted file mode 100644 index ee7607a2..00000000 --- a/ext/openssl/windows/x64/include/openssl/des_old.h +++ /dev/null @@ -1,497 +0,0 @@ -/* crypto/des/des_old.h */ - -/*- - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - * - * The function names in here are deprecated and are only present to - * provide an interface compatible with openssl 0.9.6 and older as - * well as libdes. OpenSSL now provides functions where "des_" has - * been replaced with "DES_" in the names, to make it possible to - * make incompatible changes that are needed for C type security and - * other stuff. - * - * This include files has two compatibility modes: - * - * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API - * that is compatible with libdes and SSLeay. - * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an - * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. - * - * Note that these modes break earlier snapshots of OpenSSL, where - * libdes compatibility was the only available mode or (later on) the - * prefered compatibility mode. However, after much consideration - * (and more or less violent discussions with external parties), it - * was concluded that OpenSSL should be compatible with earlier versions - * of itself before anything else. Also, in all honesty, libdes is - * an old beast that shouldn't really be used any more. - * - * Please consider starting to use the DES_ functions rather than the - * des_ ones. The des_ functions will disappear completely before - * OpenSSL 1.0! - * - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ - -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DES_H -# define HEADER_DES_H - -# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ - -# ifdef OPENSSL_NO_DES -# error DES is disabled. -# endif - -# ifndef HEADER_NEW_DES_H -# error You must include des.h, not des_old.h directly. -# endif - -# ifdef _KERBEROS_DES_H -# error replaces . -# endif - -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef _ -# undef _ -# endif - -typedef unsigned char _ossl_old_des_cblock[8]; -typedef struct _ossl_old_des_ks_struct { - union { - _ossl_old_des_cblock _; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG pad[2]; - } ks; -} _ossl_old_des_key_schedule[16]; - -# ifndef OPENSSL_DES_LIBDES_COMPATIBILITY -# define des_cblock DES_cblock -# define const_des_cblock const_DES_cblock -# define des_key_schedule DES_key_schedule -# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ - DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e)) -# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ - DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e)) -# define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\ - DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e)) -# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e)) -# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ - DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n)) -# define des_options()\ - DES_options() -# define des_cbc_cksum(i,o,l,k,iv)\ - DES_cbc_cksum((i),(o),(l),&(k),(iv)) -# define des_cbc_encrypt(i,o,l,k,iv,e)\ - DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_ncbc_encrypt(i,o,l,k,iv,e)\ - DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ - DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e)) -# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ - DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e)) -# define des_ecb_encrypt(i,o,k,e)\ - DES_ecb_encrypt((i),(o),&(k),(e)) -# define des_encrypt1(d,k,e)\ - DES_encrypt1((d),&(k),(e)) -# define des_encrypt2(d,k,e)\ - DES_encrypt2((d),&(k),(e)) -# define des_encrypt3(d,k1,k2,k3)\ - DES_encrypt3((d),&(k1),&(k2),&(k3)) -# define des_decrypt3(d,k1,k2,k3)\ - DES_decrypt3((d),&(k1),&(k2),&(k3)) -# define des_xwhite_in2out(k,i,o)\ - DES_xwhite_in2out((k),(i),(o)) -# define des_enc_read(f,b,l,k,iv)\ - DES_enc_read((f),(b),(l),&(k),(iv)) -# define des_enc_write(f,b,l,k,iv)\ - DES_enc_write((f),(b),(l),&(k),(iv)) -# define des_fcrypt(b,s,r)\ - DES_fcrypt((b),(s),(r)) -# if 0 -# define des_crypt(b,s)\ - DES_crypt((b),(s)) -# if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__) -# define crypt(b,s)\ - DES_crypt((b),(s)) -# endif -# endif -# define des_ofb_encrypt(i,o,n,l,k,iv)\ - DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv)) -# define des_pcbc_encrypt(i,o,l,k,iv,e)\ - DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_quad_cksum(i,o,l,c,s)\ - DES_quad_cksum((i),(o),(l),(c),(s)) -# define des_random_seed(k)\ - _ossl_096_des_random_seed((k)) -# define des_random_key(r)\ - DES_random_key((r)) -# define des_read_password(k,p,v) \ - DES_read_password((k),(p),(v)) -# define des_read_2passwords(k1,k2,p,v) \ - DES_read_2passwords((k1),(k2),(p),(v)) -# define des_set_odd_parity(k)\ - DES_set_odd_parity((k)) -# define des_check_key_parity(k)\ - DES_check_key_parity((k)) -# define des_is_weak_key(k)\ - DES_is_weak_key((k)) -# define des_set_key(k,ks)\ - DES_set_key((k),&(ks)) -# define des_key_sched(k,ks)\ - DES_key_sched((k),&(ks)) -# define des_set_key_checked(k,ks)\ - DES_set_key_checked((k),&(ks)) -# define des_set_key_unchecked(k,ks)\ - DES_set_key_unchecked((k),&(ks)) -# define des_string_to_key(s,k)\ - DES_string_to_key((s),(k)) -# define des_string_to_2keys(s,k1,k2)\ - DES_string_to_2keys((s),(k1),(k2)) -# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ - DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e)) -# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ - DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n)) - -# define des_ecb2_encrypt(i,o,k1,k2,e) \ - des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# define des_check_key DES_check_key -# define des_rw_mode DES_rw_mode -# else /* libdes compatibility */ -/* - * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with - * libdes - */ -# define des_cblock _ossl_old_des_cblock -# define des_key_schedule _ossl_old_des_key_schedule -# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ - _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) -# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ - _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) -# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) -# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ - _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) -# define des_options()\ - _ossl_old_des_options() -# define des_cbc_cksum(i,o,l,k,iv)\ - _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv)) -# define des_cbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_ncbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ - _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) -# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ - _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) -# define des_ecb_encrypt(i,o,k,e)\ - _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) -# define des_encrypt(d,k,e)\ - _ossl_old_des_encrypt((d),(k),(e)) -# define des_encrypt2(d,k,e)\ - _ossl_old_des_encrypt2((d),(k),(e)) -# define des_encrypt3(d,k1,k2,k3)\ - _ossl_old_des_encrypt3((d),(k1),(k2),(k3)) -# define des_decrypt3(d,k1,k2,k3)\ - _ossl_old_des_decrypt3((d),(k1),(k2),(k3)) -# define des_xwhite_in2out(k,i,o)\ - _ossl_old_des_xwhite_in2out((k),(i),(o)) -# define des_enc_read(f,b,l,k,iv)\ - _ossl_old_des_enc_read((f),(b),(l),(k),(iv)) -# define des_enc_write(f,b,l,k,iv)\ - _ossl_old_des_enc_write((f),(b),(l),(k),(iv)) -# define des_fcrypt(b,s,r)\ - _ossl_old_des_fcrypt((b),(s),(r)) -# define des_crypt(b,s)\ - _ossl_old_des_crypt((b),(s)) -# if 0 -# define crypt(b,s)\ - _ossl_old_crypt((b),(s)) -# endif -# define des_ofb_encrypt(i,o,n,l,k,iv)\ - _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv)) -# define des_pcbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_quad_cksum(i,o,l,c,s)\ - _ossl_old_des_quad_cksum((i),(o),(l),(c),(s)) -# define des_random_seed(k)\ - _ossl_old_des_random_seed((k)) -# define des_random_key(r)\ - _ossl_old_des_random_key((r)) -# define des_read_password(k,p,v) \ - _ossl_old_des_read_password((k),(p),(v)) -# define des_read_2passwords(k1,k2,p,v) \ - _ossl_old_des_read_2passwords((k1),(k2),(p),(v)) -# define des_set_odd_parity(k)\ - _ossl_old_des_set_odd_parity((k)) -# define des_is_weak_key(k)\ - _ossl_old_des_is_weak_key((k)) -# define des_set_key(k,ks)\ - _ossl_old_des_set_key((k),(ks)) -# define des_key_sched(k,ks)\ - _ossl_old_des_key_sched((k),(ks)) -# define des_string_to_key(s,k)\ - _ossl_old_des_string_to_key((s),(k)) -# define des_string_to_2keys(s,k1,k2)\ - _ossl_old_des_string_to_2keys((s),(k1),(k2)) -# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ - _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e)) -# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ - _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n)) - -# define des_ecb2_encrypt(i,o,k1,k2,e) \ - des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# define des_check_key DES_check_key -# define des_rw_mode DES_rw_mode -# endif - -const char *_ossl_old_des_options(void); -void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, int enc); -DES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec); -void _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, - _ossl_old_des_cblock *inw, - _ossl_old_des_cblock *outw, int enc); -void _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out, - int numbits, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, - _ossl_old_des_key_schedule ks, int enc); -void _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks, - int enc); -void _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks, - int enc); -void _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3); -void _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3); -void _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int *num, - int enc); -void _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int *num); -# if 0 -void _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key), - _ossl_old_des_cblock (*in_white), - _ossl_old_des_cblock (*out_white)); -# endif - -int _ossl_old_des_enc_read(int fd, char *buf, int len, - _ossl_old_des_key_schedule sched, - _ossl_old_des_cblock *iv); -int _ossl_old_des_enc_write(int fd, char *buf, int len, - _ossl_old_des_key_schedule sched, - _ossl_old_des_cblock *iv); -char *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret); -char *_ossl_old_des_crypt(const char *buf, const char *salt); -# if !defined(PERL5) && !defined(NeXT) -char *_ossl_old_crypt(const char *buf, const char *salt); -# endif -void _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out, - int numbits, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec); -void _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -DES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - int out_count, _ossl_old_des_cblock *seed); -void _ossl_old_des_random_seed(_ossl_old_des_cblock key); -void _ossl_old_des_random_key(_ossl_old_des_cblock ret); -int _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt, - int verify); -int _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1, - _ossl_old_des_cblock *key2, - const char *prompt, int verify); -void _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key); -int _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key); -int _ossl_old_des_set_key(_ossl_old_des_cblock *key, - _ossl_old_des_key_schedule schedule); -int _ossl_old_des_key_sched(_ossl_old_des_cblock *key, - _ossl_old_des_key_schedule schedule); -void _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key); -void _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1, - _ossl_old_des_cblock *key2); -void _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int *num, - int enc); -void _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int *num); - -void _ossl_096_des_random_seed(des_cblock *key); - -/* - * The following definitions provide compatibility with the MIT Kerberos - * library. The _ossl_old_des_key_schedule structure is not binary - * compatible. - */ - -# define _KERBEROS_DES_H - -# define KRBDES_ENCRYPT DES_ENCRYPT -# define KRBDES_DECRYPT DES_DECRYPT - -# ifdef KERBEROS -# define ENCRYPT DES_ENCRYPT -# define DECRYPT DES_DECRYPT -# endif - -# ifndef NCOMPAT -# define C_Block des_cblock -# define Key_schedule des_key_schedule -# define KEY_SZ DES_KEY_SZ -# define string_to_key des_string_to_key -# define read_pw_string des_read_pw_string -# define random_key des_random_key -# define pcbc_encrypt des_pcbc_encrypt -# define set_key des_set_key -# define key_sched des_key_sched -# define ecb_encrypt des_ecb_encrypt -# define cbc_encrypt des_cbc_encrypt -# define ncbc_encrypt des_ncbc_encrypt -# define xcbc_encrypt des_xcbc_encrypt -# define cbc_cksum des_cbc_cksum -# define quad_cksum des_quad_cksum -# define check_parity des_check_key_parity -# endif - -# define des_fixup_key_parity DES_fixup_key_parity - -#ifdef __cplusplus -} -#endif - -/* for DES_read_pw_string et al */ -# include - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/dh.h b/ext/openssl/windows/x64/include/openssl/dh.h deleted file mode 100644 index a228c7a7..00000000 --- a/ext/openssl/windows/x64/include/openssl/dh.h +++ /dev/null @@ -1,410 +0,0 @@ -/* crypto/dh/dh.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_DH_H -# define HEADER_DH_H - -# include - -# ifdef OPENSSL_NO_DH -# error DH is disabled. -# endif - -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif - -# define DH_FLAG_CACHE_MONT_P 0x01 - -/* - * new with 0.9.7h; the built-in DH - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * faster variable sliding window method to - * be used for all exponents. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x02 - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its reposibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -struct dh_method { - const char *name; - /* Methods here */ - int (*generate_key) (DH *dh); - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh); - /* Can be null */ - int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a, - const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *m_ctx); - int (*init) (DH *dh); - int (*finish) (DH *dh); - int flags; - char *app_data; - /* If this is non-NULL, it will be used to generate parameters */ - int (*generate_params) (DH *dh, int prime_len, int generator, - BN_GENCB *cb); -}; - -struct dh_st { - /* - * This first argument is used to pick up errors when a DH is passed - * instead of a EVP_PKEY - */ - int pad; - int version; - BIGNUM *p; - BIGNUM *g; - long length; /* optional */ - BIGNUM *pub_key; /* g^x % p */ - BIGNUM *priv_key; /* x */ - int flags; - BN_MONT_CTX *method_mont_p; - /* Place holders if we want to do X9.42 DH */ - BIGNUM *q; - BIGNUM *j; - unsigned char *seed; - int seedlen; - BIGNUM *counter; - int references; - CRYPTO_EX_DATA ex_data; - const DH_METHOD *meth; - ENGINE *engine; -}; - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_size(const DH *dh); -int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -# ifndef OPENSSL_NO_DEPRECATED -DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, void *), void *cb_arg); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_FP_API -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -# ifndef OPENSSL_NO_BIO -int DHparams_print(BIO *bp, const DH *x); -# else -int DHparams_print(char *bp, const DH *x); -# endif - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p) - -# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) - -/* KDF types */ -# define EVP_PKEY_DH_KDF_NONE 1 -# define EVP_PKEY_DH_KDF_X9_42 2 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DH_strings(void); - -/* Error codes for the DH functions. */ - -/* Function codes. */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CMS_DECRYPT 117 -# define DH_F_DH_CMS_SET_PEERKEY 118 -# define DH_F_DH_CMS_SET_SHARED_INFO 119 -# define DH_F_DH_COMPUTE_KEY 114 -# define DH_F_DH_GENERATE_KEY 115 -# define DH_F_DH_GENERATE_PARAMETERS_EX 116 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_GENERATE_PARAMETERS 104 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_KEYGEN 113 - -/* Reason codes. */ -# define DH_R_BAD_GENERATOR 101 -# define DH_R_BN_DECODE_ERROR 109 -# define DH_R_BN_ERROR 106 -# define DH_R_DECODE_ERROR 104 -# define DH_R_INVALID_PUBKEY 102 -# define DH_R_KDF_PARAMETER_ERROR 112 -# define DH_R_KEYS_NOT_SET 108 -# define DH_R_KEY_SIZE_TOO_SMALL 110 -# define DH_R_MODULUS_TOO_LARGE 103 -# define DH_R_NON_FIPS_METHOD 111 -# define DH_R_NO_PARAMETERS_SET 107 -# define DH_R_NO_PRIVATE_VALUE 100 -# define DH_R_PARAMETER_ENCODING_ERROR 105 -# define DH_R_PEER_KEY_ERROR 113 -# define DH_R_SHARED_INFO_ERROR 114 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/dsa.h b/ext/openssl/windows/x64/include/openssl/dsa.h deleted file mode 100644 index 545358fd..00000000 --- a/ext/openssl/windows/x64/include/openssl/dsa.h +++ /dev/null @@ -1,332 +0,0 @@ -/* crypto/dsa/dsa.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -/* - * The DSS routines are based on patches supplied by - * Steven Schoch . He basically did the - * work and I have just tweaked them a little to fit into my - * stylistic vision for SSLeay :-) */ - -#ifndef HEADER_DSA_H -# define HEADER_DSA_H - -# include - -# ifdef OPENSSL_NO_DSA -# error DSA is disabled. -# endif - -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include - -# ifndef OPENSSL_NO_DEPRECATED -# include -# ifndef OPENSSL_NO_DH -# include -# endif -# endif - -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif - -# define DSA_FLAG_CACHE_MONT_P 0x01 -/* - * new with 0.9.7h; the built-in DSA implementation now uses constant time - * modular exponentiation for secret exponents by default. This flag causes - * the faster variable sliding window method to be used for all exponents. - */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x02 - -/* - * If this flag is set the DSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its reposibility to ensure the - * result is compliant. - */ - -# define DSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Already defined in ossl_typ.h */ -/* typedef struct dsa_st DSA; */ -/* typedef struct dsa_method DSA_METHOD; */ - -typedef struct DSA_SIG_st { - BIGNUM *r; - BIGNUM *s; -} DSA_SIG; - -struct dsa_method { - const char *name; - DSA_SIG *(*dsa_do_sign) (const unsigned char *dgst, int dlen, DSA *dsa); - int (*dsa_sign_setup) (DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, - BIGNUM **rp); - int (*dsa_do_verify) (const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - int (*dsa_mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, - BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); - /* Can be null */ - int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); - int (*init) (DSA *dsa); - int (*finish) (DSA *dsa); - int flags; - char *app_data; - /* If this is non-NULL, it is used to generate DSA parameters */ - int (*dsa_paramgen) (DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); - /* If this is non-NULL, it is used to generate DSA keys */ - int (*dsa_keygen) (DSA *dsa); -}; - -struct dsa_st { - /* - * This first variable is used to pick up errors where a DSA is passed - * instead of of a EVP_PKEY - */ - int pad; - long version; - int write_params; - BIGNUM *p; - BIGNUM *q; /* == 20 */ - BIGNUM *g; - BIGNUM *pub_key; /* y public key */ - BIGNUM *priv_key; /* x private key */ - BIGNUM *kinv; /* Signing pre-calc */ - BIGNUM *r; /* Signing pre-calc */ - int flags; - /* Normally used to cache montgomery values */ - BN_MONT_CTX *method_mont_p; - int references; - CRYPTO_EX_DATA ex_data; - const DSA_METHOD *meth; - /* functional reference if 'meth' is ENGINE-provided */ - ENGINE *engine; -}; - -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) - -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); - -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); -/* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); - /* next 4 return -1 on error */ -int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); - -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); - -/* Deprecated version */ -# ifndef OPENSSL_NO_DEPRECATED -DSA *DSA_generate_parameters(int bits, - unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, void - (*callback) (int, int, void *), void *cb_arg); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); - -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); - -# ifndef OPENSSL_NO_BIO -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# endif -# ifndef OPENSSL_NO_FP_API -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif - -# define DSS_prime_checks 50 -/* - * Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of - * Rabin-Miller - */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) - -# ifndef OPENSSL_NO_DH -/* - * Convert DSA structure (key or just parameters) into DH structure (be - * careful to avoid small subgroup attacks when using this!) - */ -DH *DSA_dup_DH(const DSA *r); -# endif - -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) - -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DSA_strings(void); - -/* Error codes for the DSA functions. */ - -/* Function codes. */ -# define DSA_F_D2I_DSA_SIG 110 -# define DSA_F_DO_DSA_PRINT 104 -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_GENERATE_KEY 124 -# define DSA_F_DSA_GENERATE_PARAMETERS_EX 123 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 109 -# define DSA_F_DSA_SIG_PRINT 125 -# define DSA_F_DSA_VERIFY 108 -# define DSA_F_I2D_DSA_SIG 111 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_KEYGEN 121 -# define DSA_F_SIG_CB 114 - -/* Reason codes. */ -# define DSA_R_BAD_Q_VALUE 102 -# define DSA_R_BN_DECODE_ERROR 108 -# define DSA_R_BN_ERROR 109 -# define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_MODULUS_TOO_LARGE 103 -# define DSA_R_NEED_NEW_SETUP_VALUES 110 -# define DSA_R_NON_FIPS_DSA_METHOD 111 -# define DSA_R_NO_PARAMETERS_SET 107 -# define DSA_R_PARAMETER_ENCODING_ERROR 105 -# define DSA_R_Q_NOT_PRIME 113 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/dso.h b/ext/openssl/windows/x64/include/openssl/dso.h deleted file mode 100644 index c9013f5c..00000000 --- a/ext/openssl/windows/x64/include/openssl/dso.h +++ /dev/null @@ -1,451 +0,0 @@ -/* dso.h */ -/* - * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DSO_H -# define HEADER_DSO_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* These values are used as commands to DSO_ctrl() */ -# define DSO_CTRL_GET_FLAGS 1 -# define DSO_CTRL_SET_FLAGS 2 -# define DSO_CTRL_OR_FLAGS 3 - -/* - * By default, DSO_load() will translate the provided filename into a form - * typical for the platform (more specifically the DSO_METHOD) using the - * dso_name_converter function of the method. Eg. win32 will transform "blah" - * into "blah.dll", and dlfcn will transform it into "libblah.so". The - * behaviour can be overriden by setting the name_converter callback in the - * DSO object (using DSO_set_name_converter()). This callback could even - * utilise the DSO_METHOD's converter too if it only wants to override - * behaviour for one or two possible DSO methods. However, the following flag - * can be set in a DSO to prevent *any* native name-translation at all - eg. - * if the caller has prompted the user for a path to a driver library so the - * filename should be interpreted as-is. - */ -# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 -/* - * An extra flag to give if only the extension should be added as - * translation. This is obviously only of importance on Unix and other - * operating systems where the translation also may prefix the name with - * something, like 'lib', and ignored everywhere else. This flag is also - * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. - */ -# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 - -/* - * The following flag controls the translation of symbol names to upper case. - * This is currently only being implemented for OpenVMS. - */ -# define DSO_FLAG_UPCASE_SYMBOL 0x10 - -/* - * This flag loads the library with public symbols. Meaning: The exported - * symbols of this library are public to all libraries loaded after this - * library. At the moment only implemented in unix. - */ -# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 - -typedef void (*DSO_FUNC_TYPE) (void); - -typedef struct dso_st DSO; - -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that transform filenames. They are passed a DSO structure - * pointer (or NULL if they are to be used independantly of a DSO object) and - * a filename to transform. They should either return NULL (if there is an - * error condition) or a newly allocated string containing the transformed - * form that the caller will need to free with OPENSSL_free() when done. - */ -typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that merge two file specifications. They are passed a DSO - * structure pointer (or NULL if they are to be used independantly of a DSO - * object) and two file specifications to merge. They should either return - * NULL (if there is an error condition) or a newly allocated string - * containing the result of merging that the caller will need to free with - * OPENSSL_free() when done. Here, merging means that bits and pieces are - * taken from each of the file specifications and added together in whatever - * fashion that is sensible for the DSO method in question. The only rule - * that really applies is that if the two specification contain pieces of the - * same type, the copy from the first string takes priority. One could see - * it as the first specification is the one given by the user and the second - * being a bunch of defaults to add on if they're missing in the first. - */ -typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); - -typedef struct dso_meth_st { - const char *name; - /* - * Loads a shared library, NB: new DSO_METHODs must ensure that a - * successful load populates the loaded_filename field, and likewise a - * successful unload OPENSSL_frees and NULLs it out. - */ - int (*dso_load) (DSO *dso); - /* Unloads a shared library */ - int (*dso_unload) (DSO *dso); - /* Binds a variable */ - void *(*dso_bind_var) (DSO *dso, const char *symname); - /* - * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should - * be cast to the real function prototype by the caller. Platforms that - * don't have compatible representations for different prototypes (this - * is possible within ANSI C) are highly unlikely to have shared - * libraries at all, let alone a DSO_METHOD implemented for them. - */ - DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); -/* I don't think this would actually be used in any circumstances. */ -# if 0 - /* Unbinds a variable */ - int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); - /* Unbinds a function */ - int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); -# endif - /* - * The generic (yuck) "ctrl()" function. NB: Negative return values - * (rather than zero) indicate errors. - */ - long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); - /* - * The default DSO_METHOD-specific function for converting filenames to a - * canonical native form. - */ - DSO_NAME_CONVERTER_FUNC dso_name_converter; - /* - * The default DSO_METHOD-specific function for converting filenames to a - * canonical native form. - */ - DSO_MERGER_FUNC dso_merger; - /* [De]Initialisation handlers. */ - int (*init) (DSO *dso); - int (*finish) (DSO *dso); - /* Return pathname of the module containing location */ - int (*pathbyaddr) (void *addr, char *path, int sz); - /* Perform global symbol lookup, i.e. among *all* modules */ - void *(*globallookup) (const char *symname); -} DSO_METHOD; - -/**********************************************************************/ -/* The low-level handle type used to refer to a loaded shared library */ - -struct dso_st { - DSO_METHOD *meth; - /* - * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use - * anything but will need to cache the filename for use in the dso_bind - * handler. All in all, let each method control its own destiny. - * "Handles" and such go in a STACK. - */ - STACK_OF(void) *meth_data; - int references; - int flags; - /* - * For use by applications etc ... use this for your bits'n'pieces, don't - * touch meth_data! - */ - CRYPTO_EX_DATA ex_data; - /* - * If this callback function pointer is set to non-NULL, then it will be - * used in DSO_load() in place of meth->dso_name_converter. NB: This - * should normally set using DSO_set_name_converter(). - */ - DSO_NAME_CONVERTER_FUNC name_converter; - /* - * If this callback function pointer is set to non-NULL, then it will be - * used in DSO_load() in place of meth->dso_merger. NB: This should - * normally set using DSO_set_merger(). - */ - DSO_MERGER_FUNC merger; - /* - * This is populated with (a copy of) the platform-independant filename - * used for this DSO. - */ - char *filename; - /* - * This is populated with (a copy of) the translated filename by which - * the DSO was actually loaded. It is NULL iff the DSO is not currently - * loaded. NB: This is here because the filename translation process may - * involve a callback being invoked more than once not only to convert to - * a platform-specific form, but also to try different filenames in the - * process of trying to perform a load. As such, this variable can be - * used to indicate (a) whether this DSO structure corresponds to a - * loaded library or not, and (b) the filename with which it was actually - * loaded. - */ - char *loaded_filename; -}; - -DSO *DSO_new(void); -DSO *DSO_new_method(DSO_METHOD *method); -int DSO_free(DSO *dso); -int DSO_flags(DSO *dso); -int DSO_up_ref(DSO *dso); -long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); - -/* - * This function sets the DSO's name_converter callback. If it is non-NULL, - * then it will be used instead of the associated DSO_METHOD's function. If - * oldcb is non-NULL then it is set to the function pointer value being - * replaced. Return value is non-zero for success. - */ -int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, - DSO_NAME_CONVERTER_FUNC *oldcb); -/* - * These functions can be used to get/set the platform-independant filename - * used for a DSO. NB: set will fail if the DSO is already loaded. - */ -const char *DSO_get_filename(DSO *dso); -int DSO_set_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's name_converter callback to translate a - * filename, or if the callback isn't set it will instead use the DSO_METHOD's - * converter. If "filename" is NULL, the "filename" in the DSO itself will be - * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is - * simply duplicated. NB: This function is usually called from within a - * DSO_METHOD during the processing of a DSO_load() call, and is exposed so - * that caller-created DSO_METHODs can do the same thing. A non-NULL return - * value will need to be OPENSSL_free()'d. - */ -char *DSO_convert_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's merger callback to merge two file - * specifications, or if the callback isn't set it will instead use the - * DSO_METHOD's merger. A non-NULL return value will need to be - * OPENSSL_free()'d. - */ -char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); -/* - * If the DSO is currently loaded, this returns the filename that it was - * loaded under, otherwise it returns NULL. So it is also useful as a test as - * to whether the DSO is currently loaded. NB: This will not necessarily - * return the same value as DSO_convert_filename(dso, dso->filename), because - * the DSO_METHOD's load function may have tried a variety of filenames (with - * and/or without the aid of the converters) before settling on the one it - * actually loaded. - */ -const char *DSO_get_loaded_filename(DSO *dso); - -void DSO_set_default_method(DSO_METHOD *meth); -DSO_METHOD *DSO_get_default_method(void); -DSO_METHOD *DSO_get_method(DSO *dso); -DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); - -/* - * The all-singing all-dancing load function, you normally pass NULL for the - * first and third parameters. Use DSO_up and DSO_free for subsequent - * reference count handling. Any flags passed in will be set in the - * constructed DSO after its init() function but before the load operation. - * If 'dso' is non-NULL, 'flags' is ignored. - */ -DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); - -/* This function binds to a variable inside a shared library. */ -void *DSO_bind_var(DSO *dso, const char *symname); - -/* This function binds to a function inside a shared library. */ -DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); - -/* - * This method is the default, but will beg, borrow, or steal whatever method - * should be the default on any particular platform (including - * DSO_METH_null() if necessary). - */ -DSO_METHOD *DSO_METHOD_openssl(void); - -/* - * This method is defined for all platforms - if a platform has no DSO - * support then this will be the only method! - */ -DSO_METHOD *DSO_METHOD_null(void); - -/* - * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, - * dlclose, dlsym, etc) will be used and incorporated into this method. If - * not, this method will return NULL. - */ -DSO_METHOD *DSO_METHOD_dlfcn(void); - -/* - * If DSO_DL is defined, the standard dl.h-style functions (shl_load, - * shl_unload, shl_findsym, etc) will be used and incorporated into this - * method. If not, this method will return NULL. - */ -DSO_METHOD *DSO_METHOD_dl(void); - -/* If WIN32 is defined, use DLLs. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_win32(void); - -/* If VMS is defined, use shared images. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_vms(void); - -/* - * This function writes null-terminated pathname of DSO module containing - * 'addr' into 'sz' large caller-provided 'path' and returns the number of - * characters [including trailing zero] written to it. If 'sz' is 0 or - * negative, 'path' is ignored and required amount of charachers [including - * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then - * pathname of cryptolib itself is returned. Negative or zero return value - * denotes error. - */ -int DSO_pathbyaddr(void *addr, char *path, int sz); - -/* - * This function should be used with caution! It looks up symbols in *all* - * loaded modules and if module gets unloaded by somebody else attempt to - * dereference the pointer is doomed to have fatal consequences. Primary - * usage for this function is to probe *core* system functionality, e.g. - * check if getnameinfo(3) is available at run-time without bothering about - * OS-specific details such as libc.so.versioning or where does it actually - * reside: in libc itself or libsocket. - */ -void *DSO_global_lookup(const char *name); - -/* If BeOS is defined, use shared images. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_beos(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DSO_strings(void); - -/* Error codes for the DSO functions. */ - -/* Function codes. */ -# define DSO_F_BEOS_BIND_FUNC 144 -# define DSO_F_BEOS_BIND_VAR 145 -# define DSO_F_BEOS_LOAD 146 -# define DSO_F_BEOS_NAME_CONVERTER 147 -# define DSO_F_BEOS_UNLOAD 148 -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_BIND_VAR 101 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_BIND_VAR 105 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_BIND_VAR 109 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GET_LOADED_FILENAME 128 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 140 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_SET_NAME_CONVERTER 122 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_GLOBAL_LOOKUP_FUNC 138 -# define DSO_F_PATHBYADDR 137 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 118 -# define DSO_F_WIN32_BIND_VAR 119 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 141 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 - -/* Reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NO_FILE_SPECIFICATION 116 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/dtls1.h b/ext/openssl/windows/x64/include/openssl/dtls1.h deleted file mode 100644 index 30bbcf27..00000000 --- a/ext/openssl/windows/x64/include/openssl/dtls1.h +++ /dev/null @@ -1,272 +0,0 @@ -/* ssl/dtls1.h */ -/* - * DTLS implementation written by Nagendra Modadugu - * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. - */ -/* ==================================================================== - * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H - -# include -# include -# ifdef OPENSSL_SYS_VMS -# include -# include -# endif -# ifdef OPENSSL_SYS_WIN32 -/* Needed for struct timeval */ -# include -# elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) -# include -# else -# if defined(OPENSSL_SYS_VXWORKS) -# include -# else -# include -# endif -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE - -# define DTLS1_BAD_VER 0x0100 - -/* Special value for method supporting multiple versions */ -# define DTLS_ANY_VERSION 0x1FFFF - -# if 0 -/* this alert description is not specified anywhere... */ -# define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110 -# endif - -/* lengths of messages */ -# define DTLS1_COOKIE_LENGTH 256 - -# define DTLS1_RT_HEADER_LENGTH 13 - -# define DTLS1_HM_HEADER_LENGTH 12 - -# define DTLS1_HM_BAD_FRAGMENT -2 -# define DTLS1_HM_FRAGMENT_RETRY -3 - -# define DTLS1_CCS_HEADER_LENGTH 1 - -# ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE -# define DTLS1_AL_HEADER_LENGTH 7 -# else -# define DTLS1_AL_HEADER_LENGTH 2 -# endif - -# ifndef OPENSSL_NO_SSL_INTERN - -# ifndef OPENSSL_NO_SCTP -# define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP" -# endif - -/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */ -# define DTLS1_MAX_MTU_OVERHEAD 48 - -typedef struct dtls1_bitmap_st { - unsigned long map; /* track 32 packets on 32-bit systems and 64 - * - on 64-bit systems */ - unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit - * value in big-endian encoding */ -} DTLS1_BITMAP; - -struct dtls1_retransmit_state { - EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ - EVP_MD_CTX *write_hash; /* used for mac generation */ -# ifndef OPENSSL_NO_COMP - COMP_CTX *compress; /* compression */ -# else - char *compress; -# endif - SSL_SESSION *session; - unsigned short epoch; -}; - -struct hm_header_st { - unsigned char type; - unsigned long msg_len; - unsigned short seq; - unsigned long frag_off; - unsigned long frag_len; - unsigned int is_ccs; - struct dtls1_retransmit_state saved_retransmit_state; -}; - -struct ccs_header_st { - unsigned char type; - unsigned short seq; -}; - -struct dtls1_timeout_st { - /* Number of read timeouts so far */ - unsigned int read_timeouts; - /* Number of write timeouts so far */ - unsigned int write_timeouts; - /* Number of alerts received so far */ - unsigned int num_alerts; -}; - -typedef struct record_pqueue_st { - unsigned short epoch; - pqueue q; -} record_pqueue; - -typedef struct hm_fragment_st { - struct hm_header_st msg_header; - unsigned char *fragment; - unsigned char *reassembly; -} hm_fragment; - -typedef struct dtls1_state_st { - unsigned int send_cookie; - unsigned char cookie[DTLS1_COOKIE_LENGTH]; - unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH]; - unsigned int cookie_len; - /* - * The current data and handshake epoch. This is initially - * undefined, and starts at zero once the initial handshake is - * completed - */ - unsigned short r_epoch; - unsigned short w_epoch; - /* records being received in the current epoch */ - DTLS1_BITMAP bitmap; - /* renegotiation starts a new set of sequence numbers */ - DTLS1_BITMAP next_bitmap; - /* handshake message numbers */ - unsigned short handshake_write_seq; - unsigned short next_handshake_write_seq; - unsigned short handshake_read_seq; - /* save last sequence number for retransmissions */ - unsigned char last_write_sequence[8]; - /* Received handshake records (processed and unprocessed) */ - record_pqueue unprocessed_rcds; - record_pqueue processed_rcds; - /* Buffered handshake messages */ - pqueue buffered_messages; - /* Buffered (sent) handshake records */ - pqueue sent_messages; - /* - * Buffered application records. Only for records between CCS and - * Finished to prevent either protocol violation or unnecessary message - * loss. - */ - record_pqueue buffered_app_data; - /* Is set when listening for new connections with dtls1_listen() */ - unsigned int listen; - unsigned int link_mtu; /* max on-the-wire DTLS packet size */ - unsigned int mtu; /* max DTLS packet size */ - struct hm_header_st w_msg_hdr; - struct hm_header_st r_msg_hdr; - struct dtls1_timeout_st timeout; - /* - * Indicates when the last handshake msg or heartbeat sent will timeout - */ - struct timeval next_timeout; - /* Timeout duration */ - unsigned short timeout_duration; - /* - * storage for Alert/Handshake protocol data received but not yet - * processed by ssl3_read_bytes: - */ - unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH]; - unsigned int alert_fragment_len; - unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH]; - unsigned int handshake_fragment_len; - unsigned int retransmitting; - /* - * Set when the handshake is ready to process peer's ChangeCipherSpec message. - * Cleared after the message has been processed. - */ - unsigned int change_cipher_spec_ok; -# ifndef OPENSSL_NO_SCTP - /* used when SSL_ST_XX_FLUSH is entered */ - int next_state; - int shutdown_received; -# endif -} DTLS1_STATE; - -typedef struct dtls1_record_data_st { - unsigned char *packet; - unsigned int packet_length; - SSL3_BUFFER rbuf; - SSL3_RECORD rrec; -# ifndef OPENSSL_NO_SCTP - struct bio_dgram_sctp_rcvinfo recordinfo; -# endif -} DTLS1_RECORD_DATA; - -# endif - -/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - -# define DTLS1_TMO_ALERT_COUNT 12 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/e_os2.h b/ext/openssl/windows/x64/include/openssl/e_os2.h deleted file mode 100644 index 7be9989a..00000000 --- a/ext/openssl/windows/x64/include/openssl/e_os2.h +++ /dev/null @@ -1,328 +0,0 @@ -/* e_os2.h */ -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#include - -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * Detect operating systems. This probably needs completing. - * The result is that at least one OPENSSL_SYS_os macro should be defined. - * However, if none is defined, Unix is assumed. - **/ - -# define OPENSSL_SYS_UNIX - -/* ---------------------- Macintosh, before MacOS X ----------------------- */ -# if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_MACINTOSH_CLASSIC -# endif - -/* ---------------------- NetWare ----------------------------------------- */ -# if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_NETWARE -# endif - -/* --------------------- Microsoft operating systems ---------------------- */ - -/* - * Note that MSDOS actually denotes 32-bit environments running on top of - * MS-DOS, such as DJGPP one. - */ -# if defined(OPENSSL_SYSNAME_MSDOS) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_MSDOS -# endif - -/* - * For 32 bit environment, there seems to be the CygWin environment and then - * all the others that try to do the same thing Microsoft does... - */ -# if defined(OPENSSL_SYSNAME_UWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_UWIN -# else -# if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_CYGWIN -# else -# if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32 -# endif -# if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN64) -# define OPENSSL_SYS_WIN64 -# endif -# endif -# if defined(OPENSSL_SYSNAME_WINNT) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINNT -# endif -# if defined(OPENSSL_SYSNAME_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINCE -# endif -# endif -# endif - -/* Anything that tries to look like Microsoft is "Windows" */ -# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_SYS_MSDOS -# define OPENSSL_SYS_MSDOS -# endif -# endif - -/* - * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it - * requires some macro to be used. - */ -# ifdef OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_OPT_WINDLL -# if defined(_WINDLL) /* This is used when building OpenSSL to - * indicate that DLL linkage should be used */ -# define OPENSSL_OPT_WINDLL -# endif -# endif -# endif - -/* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_VMS -# if defined(__DECC) -# define OPENSSL_SYS_VMS_DECC -# elif defined(__DECCXX) -# define OPENSSL_SYS_VMS_DECC -# define OPENSSL_SYS_VMS_DECCXX -# else -# define OPENSSL_SYS_VMS_NODECC -# endif -# endif - -/* -------------------------------- OS/2 ---------------------------------- */ -# if defined(__EMX__) || defined(__OS2__) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_OS2 -# endif - -/* -------------------------------- Unix ---------------------------------- */ -# ifdef OPENSSL_SYS_UNIX -# if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) -# define OPENSSL_SYS_LINUX -# endif -# ifdef OPENSSL_SYSNAME_MPE -# define OPENSSL_SYS_MPE -# endif -# ifdef OPENSSL_SYSNAME_SNI -# define OPENSSL_SYS_SNI -# endif -# ifdef OPENSSL_SYSNAME_ULTRASPARC -# define OPENSSL_SYS_ULTRASPARC -# endif -# ifdef OPENSSL_SYSNAME_NEWS4 -# define OPENSSL_SYS_NEWS4 -# endif -# ifdef OPENSSL_SYSNAME_MACOSX -# define OPENSSL_SYS_MACOSX -# endif -# ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY -# define OPENSSL_SYS_MACOSX_RHAPSODY -# define OPENSSL_SYS_MACOSX -# endif -# ifdef OPENSSL_SYSNAME_SUNOS -# define OPENSSL_SYS_SUNOS -# endif -# if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) -# define OPENSSL_SYS_CRAY -# endif -# if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) -# define OPENSSL_SYS_AIX -# endif -# endif - -/* -------------------------------- VOS ----------------------------------- */ -# if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS) -# define OPENSSL_SYS_VOS -# ifdef __HPPA__ -# define OPENSSL_SYS_VOS_HPPA -# endif -# ifdef __IA32__ -# define OPENSSL_SYS_VOS_IA32 -# endif -# endif - -/* ------------------------------ VxWorks --------------------------------- */ -# ifdef OPENSSL_SYSNAME_VXWORKS -# define OPENSSL_SYS_VXWORKS -# endif - -/* -------------------------------- BeOS ---------------------------------- */ -# if defined(__BEOS__) -# define OPENSSL_SYS_BEOS -# include -# if defined(BONE_VERSION) -# define OPENSSL_SYS_BEOS_BONE -# else -# define OPENSSL_SYS_BEOS_R5 -# endif -# endif - -/** - * That's it for OS-specific stuff - *****************************************************************************/ - -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - -/*- - * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare - * certain global symbols that, with some compilers under VMS, have to be - * defined and declared explicitely with globaldef and globalref. - * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare - * DLL exports and imports for compilers under Win32. These are a little - * more complicated to use. Basically, for any library that exports some - * global variables, the following code must be present in the header file - * that declares them, before OPENSSL_EXTERN is used: - * - * #ifdef SOME_BUILD_FLAG_MACRO - * # undef OPENSSL_EXTERN - * # define OPENSSL_EXTERN OPENSSL_EXPORT - * #endif - * - * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL - * have some generally sensible values, and for OPENSSL_EXTERN to have the - * value OPENSSL_IMPORT. - */ - -# if defined(OPENSSL_SYS_VMS_NODECC) -# define OPENSSL_EXPORT globalref -# define OPENSSL_IMPORT globalref -# define OPENSSL_GLOBAL globaldef -# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) -# define OPENSSL_EXPORT extern __declspec(dllexport) -# define OPENSSL_IMPORT extern __declspec(dllimport) -# define OPENSSL_GLOBAL -# else -# define OPENSSL_EXPORT extern -# define OPENSSL_IMPORT extern -# define OPENSSL_GLOBAL -# endif -# define OPENSSL_EXTERN OPENSSL_IMPORT - -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - -# if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE) -# define ossl_ssize_t long -# endif - -# ifdef OPENSSL_SYS_MSDOS -# define ossl_ssize_t long -# endif - -# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS) -# define ssize_t int -# endif - -# if defined(__ultrix) && !defined(ssize_t) -# define ossl_ssize_t int -# endif - -# ifndef ossl_ssize_t -# define ossl_ssize_t ssize_t -# endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ebcdic.h b/ext/openssl/windows/x64/include/openssl/ebcdic.h deleted file mode 100644 index 4cbdfeb7..00000000 --- a/ext/openssl/windows/x64/include/openssl/ebcdic.h +++ /dev/null @@ -1,26 +0,0 @@ -/* crypto/ebcdic.h */ - -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid name clashes with other applications */ -# define os_toascii _openssl_os_toascii -# define os_toebcdic _openssl_os_toebcdic -# define ebcdic2ascii _openssl_ebcdic2ascii -# define ascii2ebcdic _openssl_ascii2ebcdic - -extern const unsigned char os_toascii[256]; -extern const unsigned char os_toebcdic[256]; -void *ebcdic2ascii(void *dest, const void *srce, size_t count); -void *ascii2ebcdic(void *dest, const void *srce, size_t count); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ec.h b/ext/openssl/windows/x64/include/openssl/ec.h deleted file mode 100644 index 81e6faf6..00000000 --- a/ext/openssl/windows/x64/include/openssl/ec.h +++ /dev/null @@ -1,1282 +0,0 @@ -/* crypto/ec/ec.h */ -/* - * Originally written by Bodo Moeller for the OpenSSL project. - */ -/** - * \file crypto/ec/ec.h Include file for the OpenSSL EC functions - * \author Originally written by Bodo Moeller for the OpenSSL project - */ -/* ==================================================================== - * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - -#ifndef HEADER_EC_H -# define HEADER_EC_H - -# include - -# ifdef OPENSSL_NO_EC -# error EC is disabled. -# endif - -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifdef __cplusplus -extern "C" { -# elif defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -# endif - -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 -# endif - -/** Enum for the point conversion form as defined in X9.62 (ECDSA) - * for the encoding of a elliptic curve point (x,y) */ -typedef enum { - /** the point is encoded as z||x, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x04 */ - POINT_CONVERSION_UNCOMPRESSED = 4, - /** the point is encoded as z||x||y, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_HYBRID = 6 -} point_conversion_form_t; - -typedef struct ec_method_st EC_METHOD; - -typedef struct ec_group_st - /*- - EC_METHOD *meth; - -- field definition - -- curve coefficients - -- optional generator with associated information (order, cofactor) - -- optional extra data (precomputed table for fast computation of multiples of generator) - -- ASN1 stuff - */ - EC_GROUP; - -typedef struct ec_point_st EC_POINT; - -/********************************************************************/ -/* EC_METHODs for curves over GF(p) */ -/********************************************************************/ - -/** Returns the basic GFp ec methods which provides the basis for the - * optimized methods. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_simple_method(void); - -/** Returns GFp methods using montgomery multiplication. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_mont_method(void); - -/** Returns GFp methods using optimized methods for NIST recommended curves - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nist_method(void); - -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -/** Returns 64-bit optimized methods for nistp224 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp224_method(void); - -/** Returns 64-bit optimized methods for nistp256 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp256_method(void); - -/** Returns 64-bit optimized methods for nistp521 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif - -# ifndef OPENSSL_NO_EC2M -/********************************************************************/ -/* EC_METHOD for curves over GF(2^m) */ -/********************************************************************/ - -/** Returns the basic GF2m ec method - * \return EC_METHOD object - */ -const EC_METHOD *EC_GF2m_simple_method(void); - -# endif - -/********************************************************************/ -/* EC_GROUP functions */ -/********************************************************************/ - -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); - -/** Frees a EC_GROUP object - * \param group EC_GROUP object to be freed. - */ -void EC_GROUP_free(EC_GROUP *group); - -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - -/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. - * \param dst destination EC_GROUP object - * \param src source EC_GROUP object - * \return 1 on success and 0 if an error occurred. - */ -int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); - -/** Creates a new EC_GROUP object and copies the copies the content - * form src to the newly created EC_KEY object - * \param src source EC_GROUP object - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); - -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - -/** Sets the generator and it's order/cofactor of a EC_GROUP object. - * \param group EC_GROUP object - * \param generator EC_POINT object with the generator. - * \param order the order of the group generated by the generator. - * \param cofactor the index of the sub-group generated by the generator - * in the group of all points on the elliptic curve. - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, - const BIGNUM *order, const BIGNUM *cofactor); - -/** Returns the generator of a EC_GROUP object. - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). - */ -const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); - -/** Returns the montgomery data for order(Generator) - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). -*/ -BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); - -/** Gets the order of a EC_GROUP - * \param group EC_GROUP object - * \param order BIGNUM to which the order is copied - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); - -/** Gets the cofactor of a EC_GROUP - * \param group EC_GROUP object - * \param cofactor BIGNUM to which the cofactor is copied - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, - BN_CTX *ctx); - -/** Sets the name of a EC_GROUP object - * \param group EC_GROUP object - * \param nid NID of the curve name OID - */ -void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); - -/** Returns the curve name of a EC_GROUP object - * \param group EC_GROUP object - * \return NID of the curve name OID or 0 if not set. - */ -int EC_GROUP_get_curve_name(const EC_GROUP *group); - -void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); -int EC_GROUP_get_asn1_flag(const EC_GROUP *group); - -void EC_GROUP_set_point_conversion_form(EC_GROUP *group, - point_conversion_form_t form); -point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); - -unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); -size_t EC_GROUP_get_seed_len(const EC_GROUP *); -size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); - -/** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b - * \param group EC_GROUP object - * \param p BIGNUM with the prime number - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b - * \param group EC_GROUP object - * \param p BIGNUM for the prime number - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M -/** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b - * \param group EC_GROUP object - * \param p BIGNUM with the polynomial defining the underlying field - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b - * \param group EC_GROUP object - * \param p BIGNUM for the polynomial defining the underlying field - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx); -# endif -/** Returns the number of bits needed to represent a field element - * \param group EC_GROUP object - * \return number of bits needed to represent a field element - */ -int EC_GROUP_get_degree(const EC_GROUP *group); - -/** Checks whether the parameter in the EC_GROUP define a valid ec group - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if group is a valid ec group and 0 otherwise - */ -int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); - -/** Checks whether the discriminant of the elliptic curve is zero or not - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if the discriminant is not zero and 0 otherwise - */ -int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); - -/** Compares two EC_GROUP objects - * \param a first EC_GROUP object - * \param b second EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 0 if both groups are equal and 1 otherwise - */ -int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); - -/* - * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after - * choosing an appropriate EC_METHOD - */ - -/** Creates a new EC_GROUP object with the specified parameters defined - * over GFp (defined by the equation y^2 = x^3 + a*x + b) - * \param p BIGNUM with the prime number - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M -/** Creates a new EC_GROUP object with the specified parameters defined - * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) - * \param p BIGNUM with the polynomial defining the underlying field - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# endif -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_by_curve_name(int nid); - -/********************************************************************/ -/* handling of internal curves */ -/********************************************************************/ - -typedef struct { - int nid; - const char *comment; -} EC_builtin_curve; - -/* - * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all - * available curves or zero if a error occurred. In case r ist not zero - * nitems EC_builtin_curve structures are filled with the data of the first - * nitems internal groups - */ -size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); - -const char *EC_curve_nid2nist(int nid); -int EC_curve_nist2nid(const char *name); - -/********************************************************************/ -/* EC_POINT functions */ -/********************************************************************/ - -/** Creates a new EC_POINT object for the specified EC_GROUP - * \param group EC_GROUP the underlying EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_new(const EC_GROUP *group); - -/** Frees a EC_POINT object - * \param point EC_POINT object to be freed - */ -void EC_POINT_free(EC_POINT *point); - -/** Clears and frees a EC_POINT object - * \param point EC_POINT object to be cleared and freed - */ -void EC_POINT_clear_free(EC_POINT *point); - -/** Copies EC_POINT object - * \param dst destination EC_POINT object - * \param src source EC_POINT object - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); - -/** Creates a new EC_POINT object and copies the content of the supplied - * EC_POINT - * \param src source EC_POINT object - * \param group underlying the EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); - -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - -/** Sets a point to infinity (neutral element) - * \param group underlying EC_GROUP object - * \param point EC_POINT to set to infinity - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); - -/** Sets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param z BIGNUM with the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); - -/** Gets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param z BIGNUM for the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); - -/** Sets the affine coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BN_CTX *ctx); - -/** Sets the x9.62 compressed coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - int y_bit, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M -/** Sets the affine coordinates of a EC_POINT over GF2m - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of a EC_POINT over GF2m - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BN_CTX *ctx); - -/** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - int y_bit, BN_CTX *ctx); -# endif -/** Encodes a EC_POINT object to a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param form point conversion form - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, - point_conversion_form_t form, - unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Decodes a EC_POINT from a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, - const unsigned char *buf, size_t len, BN_CTX *ctx); - -/* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); -char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BN_CTX *); -EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, - EC_POINT *, BN_CTX *); - -/********************************************************************/ -/* functions for doing EC_POINT arithmetic */ -/********************************************************************/ - -/** Computes the sum of two EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = a + b) - * \param a EC_POINT object with the first summand - * \param b EC_POINT object with the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx); - -/** Computes the double of a EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = 2 * a) - * \param a EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx); - -/** Computes the inverse of a EC_POINT - * \param group underlying EC_GROUP object - * \param a EC_POINT object to be inverted (it's used for the result as well) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); - -/** Checks whether the point is the neutral element of the group - * \param group the underlying EC_GROUP object - * \param p EC_POINT object - * \return 1 if the point is the neutral element and 0 otherwise - */ -int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); - -/** Checks whether the point is on the curve - * \param group underlying EC_GROUP object - * \param point EC_POINT object to check - * \param ctx BN_CTX object (optional) - * \return 1 if point if on the curve and 0 otherwise - */ -int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx); - -/** Compares two EC_POINTs - * \param group underlying EC_GROUP object - * \param a first EC_POINT object - * \param b second EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 0 if both points are equal and a value != 0 otherwise - */ -int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, - BN_CTX *ctx); - -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); - -/** Computes r = generator * n sum_{i=0}^{num-1} p[i] * m[i] - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param num number futher summands - * \param p array of size num of EC_POINT objects - * \param m array of size num of BIGNUM objects - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); - -/** Computes r = generator * n + q * m - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param q EC_POINT object with the first factor of the second summand - * \param m BIGNUM with the second factor of the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); - -/** Stores multiples of generator for faster point multiplication - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occured - */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); - -/** Reports whether a precomputation has been done - * \param group EC_GROUP object - * \return 1 if a pre-computation has been done and 0 otherwise - */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); - -/********************************************************************/ -/* ASN1 stuff */ -/********************************************************************/ - -/* - * EC_GROUP_get_basis_type() returns the NID of the basis type used to - * represent the field elements - */ -int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M -int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); -int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, - unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_NAMED_CURVE 0x001 - -typedef struct ecpk_parameters_st ECPKPARAMETERS; - -EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); -int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); - -# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) -# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) -# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ - (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) -# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ - (unsigned char *)(x)) - -# ifndef OPENSSL_NO_BIO -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# endif -# ifndef OPENSSL_NO_FP_API -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif - -/********************************************************************/ -/* EC_KEY functions */ -/********************************************************************/ - -typedef struct ec_key_st EC_KEY; - -/* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 - -/* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 - -/** Creates a new EC_KEY object. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new(void); - -int EC_KEY_get_flags(const EC_KEY *key); - -void EC_KEY_set_flags(EC_KEY *key, int flags); - -void EC_KEY_clear_flags(EC_KEY *key, int flags); - -/** Creates a new EC_KEY object using a named curve as underlying - * EC_GROUP object. - * \param nid NID of the named curve. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); - -/** Frees a EC_KEY object. - * \param key EC_KEY object to be freed. - */ -void EC_KEY_free(EC_KEY *key); - -/** Copies a EC_KEY object. - * \param dst destination EC_KEY object - * \param src src EC_KEY object - * \return dst or NULL if an error occurred. - */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); - -/** Creates a new EC_KEY object and copies the content from src to it. - * \param src the source EC_KEY object - * \return newly created EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); - -/** Increases the internal reference count of a EC_KEY object. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_up_ref(EC_KEY *key); - -/** Returns the EC_GROUP object of a EC_KEY object - * \param key EC_KEY object - * \return the EC_GROUP object (possibly NULL). - */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); - -/** Sets the EC_GROUP of a EC_KEY object. - * \param key EC_KEY object - * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY - * object will use an own copy of the EC_GROUP). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); - -/** Returns the private key of a EC_KEY object. - * \param key EC_KEY object - * \return a BIGNUM with the private key (possibly NULL). - */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); - -/** Sets the private key of a EC_KEY object. - * \param key EC_KEY object - * \param prv BIGNUM with the private key (note: the EC_KEY object - * will use an own copy of the BIGNUM). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); - -/** Returns the public key of a EC_KEY object. - * \param key the EC_KEY object - * \return a EC_POINT object with the public key (possibly NULL) - */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); - -/** Sets the public key of a EC_KEY object. - * \param key EC_KEY object - * \param pub EC_POINT object with the public key (note: the EC_KEY object - * will use an own copy of the EC_POINT object). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); - -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); -/* functions to set/get method specific data */ -void *EC_KEY_get_key_method_data(EC_KEY *key, - void *(*dup_func) (void *), - void (*free_func) (void *), - void (*clear_free_func) (void *)); -/** Sets the key method data of an EC_KEY object, if none has yet been set. - * \param key EC_KEY object - * \param data opaque data to install. - * \param dup_func a function that duplicates |data|. - * \param free_func a function that frees |data|. - * \param clear_free_func a function that wipes and frees |data|. - * \return the previously set data pointer, or NULL if |data| was inserted. - */ -void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data, - void *(*dup_func) (void *), - void (*free_func) (void *), - void (*clear_free_func) (void *)); -/* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); - -/** Creates a table of pre-computed multiples of the generator to - * accelerate further EC_KEY operations. - * \param key EC_KEY object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); - -/** Creates a new ec private (and optional a new public) key. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_generate_key(EC_KEY *key); - -/** Verifies that a private and/or public key is valid. - * \param key the EC_KEY object - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_check_key(const EC_KEY *key); - -/** Sets a public key from affine coordindates performing - * neccessary NIST PKV tests. - * \param key the EC_KEY object - * \param x public key x coordinate - * \param y public key y coordinate - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); - -/********************************************************************/ -/* de- and encoding functions for SEC1 ECPrivateKey */ -/********************************************************************/ - -/** Decodes a private key from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded private key - * \param len length of the DER encoded private key - * \return the decoded private key or NULL if an error occurred. - */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a private key object and stores the result in a buffer. - * \param key the EC_KEY object to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC parameters */ -/********************************************************************/ - -/** Decodes ec parameter from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded ec parameters - * \param len length of the DER encoded ec parameters - * \return a EC_KEY object with the decoded parameters or NULL if an error - * occurred. - */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes ec parameter and stores the result in a buffer. - * \param key the EC_KEY object with ec paramters to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC public key */ -/* (octet string, not DER -- hence 'o2i' and 'i2o') */ -/********************************************************************/ - -/** Decodes a ec public key from a octet string. - * \param key a pointer to a EC_KEY object which should be used - * \param in memory buffer with the encoded public key - * \param len length of the encoded public key - * \return EC_KEY object with decoded public key or NULL if an error - * occurred. - */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a ec public key in an octet string. - * \param key the EC_KEY object with the public key - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred - */ -int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); - -# ifndef OPENSSL_NO_BIO -/** Prints out the ec parameters on human readable form. - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print(BIO *bp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); - -# endif -# ifndef OPENSSL_NO_FP_API -/** Prints out the ec parameters on human readable form. - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); - -# endif - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -# endif -# endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_62 2 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_EC_strings(void); - -/* Error codes for the EC functions. */ - -/* Function codes. */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_COMPUTE_WNAF 143 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_SET_WORDS 245 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECP_NIST_MOD_192 203 -# define EC_F_ECP_NIST_MOD_224 204 -# define EC_F_ECP_NIST_MOD_256 205 -# define EC_F_ECP_NIST_MOD_521 206 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_ASN1_GROUP2PARAMETERS 155 -# define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156 -# define EC_F_EC_ASN1_PARAMETERS2GROUP 157 -# define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158 -# define EC_F_EC_EX_DATA_SET_DATA 211 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP 135 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET0_GENERATOR 139 -# define EC_F_EC_GROUP_GET_COFACTOR 140 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ORDER 141 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_PRECOMPUTE_MULT 142 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_EXTRA_DATA 110 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_MUL 184 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_DUP 207 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 - -/* Reason codes. */ -# define EC_R_ASN1_ERROR 115 -# define EC_R_ASN1_UNKNOWN_FIELD 116 -# define EC_R_BIGNUM_OUT_OF_RANGE 144 -# define EC_R_BUFFER_TOO_SMALL 100 -# define EC_R_COORDINATES_OUT_OF_RANGE 146 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 -# define EC_R_DECODE_ERROR 142 -# define EC_R_DISCRIMINANT_IS_ZERO 118 -# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 -# define EC_R_FIELD_TOO_LARGE 143 -# define EC_R_GF2M_NOT_SUPPORTED 147 -# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 -# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 -# define EC_R_INCOMPATIBLE_OBJECTS 101 -# define EC_R_INVALID_ARGUMENT 112 -# define EC_R_INVALID_COMPRESSED_POINT 110 -# define EC_R_INVALID_COMPRESSION_BIT 109 -# define EC_R_INVALID_CURVE 141 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# define EC_R_INVALID_ENCODING 102 -# define EC_R_INVALID_FIELD 103 -# define EC_R_INVALID_FORM 104 -# define EC_R_INVALID_GROUP_ORDER 122 -# define EC_R_INVALID_PENTANOMIAL_BASIS 132 -# define EC_R_INVALID_PRIVATE_KEY 123 -# define EC_R_INVALID_TRINOMIAL_BASIS 137 -# define EC_R_KDF_PARAMETER_ERROR 148 -# define EC_R_KEYS_NOT_SET 140 -# define EC_R_MISSING_PARAMETERS 124 -# define EC_R_MISSING_PRIVATE_KEY 125 -# define EC_R_NOT_A_NIST_PRIME 135 -# define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 -# define EC_R_NOT_IMPLEMENTED 126 -# define EC_R_NOT_INITIALIZED 111 -# define EC_R_NO_FIELD_MOD 133 -# define EC_R_NO_PARAMETERS_SET 139 -# define EC_R_PASSED_NULL_PARAMETER 134 -# define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 -# define EC_R_POINT_AT_INFINITY 106 -# define EC_R_POINT_IS_NOT_ON_CURVE 107 -# define EC_R_SHARED_INFO_ERROR 150 -# define EC_R_SLOT_FULL 108 -# define EC_R_UNDEFINED_GENERATOR 113 -# define EC_R_UNDEFINED_ORDER 128 -# define EC_R_UNKNOWN_GROUP 129 -# define EC_R_UNKNOWN_ORDER 114 -# define EC_R_UNSUPPORTED_FIELD 131 -# define EC_R_WRONG_CURVE_PARAMETERS 145 -# define EC_R_WRONG_ORDER 130 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ecdh.h b/ext/openssl/windows/x64/include/openssl/ecdh.h deleted file mode 100644 index 25348b30..00000000 --- a/ext/openssl/windows/x64/include/openssl/ecdh.h +++ /dev/null @@ -1,134 +0,0 @@ -/* crypto/ecdh/ecdh.h */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - * - * The ECDH software is originally written by Douglas Stebila of - * Sun Microsystems Laboratories. - * - */ -/* ==================================================================== - * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_ECDH_H -# define HEADER_ECDH_H - -# include - -# ifdef OPENSSL_NO_ECDH -# error ECDH is disabled. -# endif - -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define EC_FLAG_COFACTOR_ECDH 0x1000 - -const ECDH_METHOD *ECDH_OpenSSL(void); - -void ECDH_set_default_method(const ECDH_METHOD *); -const ECDH_METHOD *ECDH_get_default_method(void); -int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); - -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); - -int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new - *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); -void *ECDH_get_ex_data(EC_KEY *d, int idx); - -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ECDH_strings(void); - -/* Error codes for the ECDH functions. */ - -/* Function codes. */ -# define ECDH_F_ECDH_CHECK 102 -# define ECDH_F_ECDH_COMPUTE_KEY 100 -# define ECDH_F_ECDH_DATA_NEW_METHOD 101 - -/* Reason codes. */ -# define ECDH_R_KDF_FAILED 102 -# define ECDH_R_NON_FIPS_METHOD 103 -# define ECDH_R_NO_PRIVATE_VALUE 100 -# define ECDH_R_POINT_ARITHMETIC_FAILURE 101 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ecdsa.h b/ext/openssl/windows/x64/include/openssl/ecdsa.h deleted file mode 100644 index a6f0930f..00000000 --- a/ext/openssl/windows/x64/include/openssl/ecdsa.h +++ /dev/null @@ -1,335 +0,0 @@ -/* crypto/ecdsa/ecdsa.h */ -/** - * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions - * \author Written by Nils Larsch for the OpenSSL project - */ -/* ==================================================================== - * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_ECDSA_H -# define HEADER_ECDSA_H - -# include - -# ifdef OPENSSL_NO_ECDSA -# error ECDSA is disabled. -# endif - -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ECDSA_SIG_st { - BIGNUM *r; - BIGNUM *s; -} ECDSA_SIG; - -/** Allocates and initialize a ECDSA_SIG structure - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_SIG_new(void); - -/** frees a ECDSA_SIG structure - * \param sig pointer to the ECDSA_SIG structure - */ -void ECDSA_SIG_free(ECDSA_SIG *sig); - -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp - * (*pp += length of the DER encoded signature)). - * \param sig pointer to the ECDSA_SIG object - * \param pp pointer to a unsigned char pointer for the output or NULL - * \return the length of the DER encoded ECDSA_SIG object or 0 - */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); - -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp - * (*pp += len)). - * \param sig pointer to ECDSA_SIG pointer (may be NULL) - * \param pp memory buffer with the DER encoded signature - * \param len length of the buffer - * \return pointer to the decoded ECDSA_SIG structure (or NULL) - */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); - -/** Computes the ECDSA signature of the given hash value using - * the supplied private key and returns the created signature. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optioanl), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); - -/** Verifies that the supplied signature is a valid ECDSA - * signature of the supplied hash value using the supplied public key. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param sig ECDSA_SIG structure - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); - -const ECDSA_METHOD *ECDSA_OpenSSL(void); - -/** Sets the default ECDSA method - * \param meth new default ECDSA_METHOD - */ -void ECDSA_set_default_method(const ECDSA_METHOD *meth); - -/** Returns the default ECDSA method - * \return pointer to ECDSA_METHOD structure containing the default method - */ -const ECDSA_METHOD *ECDSA_get_default_method(void); - -/** Sets method to be used for the ECDSA operations - * \param eckey EC_KEY object - * \param meth new method - * \return 1 on success and 0 otherwise - */ -int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); - -/** Returns the maximum length of the DER encoded signature - * \param eckey EC_KEY object - * \return numbers of bytes required for the DER encoded signature - */ -int ECDSA_size(const EC_KEY *eckey); - -/** Precompute parts of the signing operation - * \param eckey EC_KEY object containing a private EC key - * \param ctx BN_CTX object (optional) - * \param kinv BIGNUM pointer for the inverse of k - * \param rp BIGNUM pointer for x coordinate of k * generator - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig memory for the DER encoded created signature - * \param siglen pointer to the length of the returned signature - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig buffer to hold the DER encoded signature - * \param siglen pointer to the length of the returned signature - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optioanl), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); - -/** Verifies that the given signature is valid ECDSA signature - * of the supplied hash value using the specified public key. - * \param type this parameter is ignored - * \param dgst pointer to the hash value - * \param dgstlen length of the hash value - * \param sig pointer to the DER encoded signature - * \param siglen length of the DER encoded signature - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); - -/* the standard ex_data functions */ -int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new - *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); -void *ECDSA_get_ex_data(EC_KEY *d, int idx); - -/** Allocates and initialize a ECDSA_METHOD structure - * \param ecdsa_method pointer to ECDSA_METHOD to copy. (May be NULL) - * \return pointer to a ECDSA_METHOD structure or NULL if an error occurred - */ - -ECDSA_METHOD *ECDSA_METHOD_new(const ECDSA_METHOD *ecdsa_method); - -/** frees a ECDSA_METHOD structure - * \param ecdsa_method pointer to the ECDSA_METHOD structure - */ -void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method); - -/** Sets application specific data in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param app application specific data to set - */ - -void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app); - -/** Returns application specific data from a ECDSA_METHOD structure - * \param ecdsa_method pointer to ECDSA_METHOD structure - * \return pointer to application specific data. - */ - -void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method); - -/** Set the ECDSA_do_sign function in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param ecdsa_do_sign a funtion of type ECDSA_do_sign - */ - -void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method, - ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char - *dgst, int dgst_len, - const BIGNUM *inv, - const BIGNUM *rp, - EC_KEY *eckey)); - -/** Set the ECDSA_sign_setup function in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param ecdsa_sign_setup a funtion of type ECDSA_sign_setup - */ - -void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method, - int (*ecdsa_sign_setup) (EC_KEY *eckey, - BN_CTX *ctx, - BIGNUM **kinv, - BIGNUM **r)); - -/** Set the ECDSA_do_verify function in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param ecdsa_do_verify a funtion of type ECDSA_do_verify - */ - -void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method, - int (*ecdsa_do_verify) (const unsigned char - *dgst, int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags); - -/** Set the flags field in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param flags flags value to set - */ - -void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name); - -/** Set the name field in the ECDSA_METHOD - * \param ecdsa_method pointer to existing ECDSA_METHOD - * \param name name to set - */ - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ECDSA_strings(void); - -/* Error codes for the ECDSA functions. */ - -/* Function codes. */ -# define ECDSA_F_ECDSA_CHECK 104 -# define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 -# define ECDSA_F_ECDSA_DO_SIGN 101 -# define ECDSA_F_ECDSA_DO_VERIFY 102 -# define ECDSA_F_ECDSA_METHOD_NEW 105 -# define ECDSA_F_ECDSA_SIGN_SETUP 103 - -/* Reason codes. */ -# define ECDSA_R_BAD_SIGNATURE 100 -# define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 -# define ECDSA_R_ERR_EC_LIB 102 -# define ECDSA_R_MISSING_PARAMETERS 103 -# define ECDSA_R_NEED_NEW_SETUP_VALUES 106 -# define ECDSA_R_NON_FIPS_METHOD 107 -# define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 -# define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/engine.h b/ext/openssl/windows/x64/include/openssl/engine.h deleted file mode 100644 index bd7b5914..00000000 --- a/ext/openssl/windows/x64/include/openssl/engine.h +++ /dev/null @@ -1,960 +0,0 @@ -/* openssl/engine.h */ -/* - * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H - -# include - -# ifdef OPENSSL_NO_ENGINE -# error ENGINE is disabled. -# endif - -# ifndef OPENSSL_NO_DEPRECATED -# include -# ifndef OPENSSL_NO_RSA -# include -# endif -# ifndef OPENSSL_NO_DSA -# include -# endif -# ifndef OPENSSL_NO_DH -# include -# endif -# ifndef OPENSSL_NO_ECDH -# include -# endif -# ifndef OPENSSL_NO_ECDSA -# include -# endif -# include -# include -# include -# endif - -# include -# include - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These flags are used to control combinations of algorithm (methods) by - * bitwise "OR"ing. - */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_ECDH (unsigned int)0x0010 -# define ENGINE_METHOD_ECDSA (unsigned int)0x0020 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_STORE (unsigned int)0x0100 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -/* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 - -/* - * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used - * internally to control registration of ENGINE implementations, and can be - * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to - * initialise registered ENGINEs if they are not already initialised. - */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 - -/* ENGINE flags that can be set by ENGINE_set_flags(). */ -/* Not used */ -/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ - -/* - * This flag is for ENGINEs that wish to handle the various 'CMD'-related - * control commands on their own. Without this flag, ENGINE_ctrl() handles - * these control commands on behalf of the ENGINE using their "cmd_defns" - * data. - */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 - -/* - * This flag is for ENGINEs who return new duplicate structures when found - * via "ENGINE_by_id()". When an ENGINE must store state (eg. if - * ENGINE_ctrl() commands are called in sequence as part of some stateful - * process like key-generation setup and execution), it can set this flag - - * then each attempt to obtain the ENGINE will result in it being copied into - * a new structure. Normally, ENGINEs don't declare this flag so - * ENGINE_by_id() just increments the existing ENGINE's structural reference - * count. - */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 - -/* - * This flag if for an ENGINE that does not want its methods registered as - * part of ENGINE_register_all_complete() for example if the methods are not - * usable as default methods. - */ - -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 - -/* - * ENGINEs can support their own command types, and these flags are used in - * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input - * each command expects. Currently only numeric and string input is - * supported. If a control command supports none of the _NUMERIC, _STRING, or - * _NO_INPUT options, then it is regarded as an "internal" control command - - * and not for use in config setting situations. As such, they're not - * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() - * access. Changes to this list of 'command types' should be reflected - * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). - */ - -/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 -/* - * accepts string input (cast from 'void*' to 'const char *', 4th parameter - * to ENGINE_ctrl) - */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 -/* - * Indicates that the control command takes *no* input. Ie. the control - * command is unparameterised. - */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 -/* - * Indicates that the control command is internal. This control command won't - * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() - * function. - */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 - -/* - * NB: These 3 control commands are deprecated and should not be used. - * ENGINEs relying on these commands should compile conditional support for - * compatibility (eg. if these symbols are defined) but should also migrate - * the same functionality to their own ENGINE-specific control functions that - * can be "discovered" by calling applications. The fact these control - * commands wouldn't be "executable" (ie. usable by text-based config) - * doesn't change the fact that application code can find and use them - * without requiring per-ENGINE hacking. - */ - -/* - * These flags are used to tell the ctrl function what should be done. All - * command numbers are shared between all engines, even if some don't make - * sense to some engines. In such a case, they do nothing but return the - * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. - */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise - * any handles/connections - * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used - * when calling the password - * callback and the user - * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, - * given a string that - * represents a file name - * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given - * section in the already - * loaded configuration */ - -/* - * These control commands allow an application to deal with an arbitrary - * engine in a dynamic way. Warn: Negative return values indicate errors FOR - * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other - * commands, including ENGINE-specific command types, return zero for an - * error. An ENGINE can choose to implement these ctrl functions, and can - * internally manage things however it chooses - it does so by setting the - * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise - * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the - * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's - * ctrl() handler need only implement its own commands - the above "meta" - * commands will be taken care of. - */ - -/* - * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", - * then all the remaining control commands will return failure, so it is - * worth checking this first if the caller is trying to "discover" the - * engine's capabilities and doesn't want errors generated unnecessarily. - */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 -/* - * Returns a positive command number for the first command supported by the - * engine. Returns zero if no ctrl commands are supported. - */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 -/* - * The 'long' argument specifies a command implemented by the engine, and the - * return value is the next command supported, or zero if there are no more. - */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 -/* - * The 'void*' argument is a command name (cast from 'const char *'), and the - * return value is the command that corresponds to it. - */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 -/* - * The next two allow a command to be converted into its corresponding string - * form. In each case, the 'long' argument supplies the command. In the - * NAME_LEN case, the return value is the length of the command name (not - * counting a trailing EOL). In the NAME case, the 'void*' argument must be a - * string buffer large enough, and it will be populated with the name of the - * command (WITH a trailing EOL). - */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 -/* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 -/* - * With this command, the return value is the OR'd combination of - * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given - * engine-specific ctrl command expects. - */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 - -/* - * ENGINE implementations should start the numbering of their own control - * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). - */ -# define ENGINE_CMD_BASE 200 - -/* - * NB: These 2 nCipher "chil" control commands are deprecated, and their - * functionality is now available through ENGINE-specific control commands - * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 - * commands should be migrated to the more general command handling before - * these are removed. - */ - -/* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ - -/* - * If an ENGINE supports its own specific control commands and wishes the - * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on - * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN - * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() - * handler that supports the stated commands (ie. the "cmd_num" entries as - * described by the array). NB: The array must be ordered in increasing order - * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element - * has cmd_num set to zero and/or cmd_name set to NULL. - */ -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ -} ENGINE_CMD_DEFN; - -/* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); -/* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); -/* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); -/* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, - UI_METHOD *ui_method, - void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); -/*- - * These callback types are for an ENGINE's handler for cipher and digest logic. - * These handlers have these prototypes; - * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); - * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); - * Looking at how to implement these handlers in the case of cipher support, if - * the framework wants the EVP_CIPHER for 'nid', it will call; - * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) - * If the framework wants a list of supported 'nid's, it will call; - * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) - */ -/* - * Returns to a pointer to the array of supported cipher 'nid's. If the - * second parameter is non-NULL it is set to the size of the returned array. - */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); -/* - * STRUCTURE functions ... all of these functions deal with pointers to - * ENGINE structures where the pointers have a "structural reference". This - * means that their reference is to allowed access to the structure but it - * does not imply that the structure is functional. To simply increment or - * decrement the structural reference count, use ENGINE_by_id and - * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next - * as it will automatically decrement the structural reference count of the - * "current" ENGINE and increment the structural reference count of the - * ENGINE it returns (unless it is NULL). - */ - -/* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); -/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); -/* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); -/* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); -/* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); -/* Add all the built-in engines. */ -void ENGINE_load_openssl(void); -void ENGINE_load_dynamic(void); -# ifndef OPENSSL_NO_STATIC_ENGINE -void ENGINE_load_4758cca(void); -void ENGINE_load_aep(void); -void ENGINE_load_atalla(void); -void ENGINE_load_chil(void); -void ENGINE_load_cswift(void); -void ENGINE_load_nuron(void); -void ENGINE_load_sureware(void); -void ENGINE_load_ubsec(void); -void ENGINE_load_padlock(void); -void ENGINE_load_capi(void); -# ifndef OPENSSL_NO_GMP -void ENGINE_load_gmp(void); -# endif -# ifndef OPENSSL_NO_GOST -void ENGINE_load_gost(void); -# endif -# endif -void ENGINE_load_cryptodev(void); -void ENGINE_load_rdrand(void); -void ENGINE_load_builtin_engines(void); - -/* - * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation - * "registry" handling. - */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); - -/*- Manage registration of ENGINEs per "table". For each type, there are 3 - * functions; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required, so - * ENGINE_cleanup() will reverse any "register" operations. - */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_ECDH(ENGINE *e); -void ENGINE_unregister_ECDH(ENGINE *e); -void ENGINE_register_all_ECDH(void); - -int ENGINE_register_ECDSA(ENGINE *e); -void ENGINE_unregister_ECDSA(ENGINE *e); -void ENGINE_register_all_ECDSA(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_STORE(ENGINE *e); -void ENGINE_unregister_STORE(ENGINE *e); -void ENGINE_register_all_STORE(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); - -/* - * These functions register all support from the above categories. Note, use - * of these functions can result in static linkage of code your application - * may not need. If you only need a subset of functionality, consider using - * more selective initialisation. - */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); - -/* - * Send parametrised control commands to the engine. The possibilities to - * send down an integer, a pointer to data or a function pointer are - * provided. Any of the parameters may or may not be NULL, depending on the - * command number. In actuality, this function only requires a structural - * (rather than functional) reference to an engine, but many control commands - * may require the engine be functional. The caller should be aware of trying - * commands that require an operational ENGINE, and only use functional - * references in such situations. - */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); - -/* - * This function tests if an ENGINE-specific command is usable as a - * "setting". Eg. in an application's config file that gets processed through - * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to - * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). - */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); - -/* - * This function works like ENGINE_ctrl() with the exception of taking a - * command name instead of a command number, and can handle optional - * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation - * on how to use the cmd_name and cmd_optional. - */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); - -/* - * This function passes a command-name and argument to an ENGINE. The - * cmd_name is converted to a command number and the control command is - * called using 'arg' as an argument (unless the ENGINE doesn't support such - * a command, in which case no control command is called). The command is - * checked for input flags, and if necessary the argument will be converted - * to a numeric value. If cmd_optional is non-zero, then if the ENGINE - * doesn't support the given cmd_name the return value will be success - * anyway. This function is intended for applications to use so that users - * (or config files) can supply engine-specific config data to the ENGINE at - * run-time to control behaviour of specific engines. As such, it shouldn't - * be used for calling ENGINE_ctrl() functions that return data, deal with - * binary data, or that are otherwise supposed to be used directly through - * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() - * operation in this function will be lost - the return value is interpreted - * as failure if the return value is zero, success otherwise, and this - * function returns a boolean value as a result. In other words, vendors of - * 'ENGINE'-enabled devices should write ENGINE implementations with - * parameterisations that work in this scheme, so that compliant ENGINE-based - * applications can work consistently with the same configuration for the - * same ENGINE-enabled devices, across applications. - */ -int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, - int cmd_optional); - -/* - * These functions are useful for manufacturing new ENGINE structures. They - * don't address reference counting at all - one uses them to populate an - * ENGINE structure with personalised implementations of things prior to - * using it directly or adding it to the builtin ENGINE list in OpenSSL. - * These are also here so that the ENGINE structure doesn't have to be - * exposed and break binary compatibility! - */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *ecdh_meth); -int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *store_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); -int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); -int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); -int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); -int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); -int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); -int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); -int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); -int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); -int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); -/* These functions allow control over any per-structure ENGINE data. */ -int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); - -/* - * This function cleans up anything that needs it. Eg. the ENGINE_add() - * function automatically ensures the list cleanup function is registered to - * be called from ENGINE_cleanup(). Similarly, all ENGINE_register_*** - * functions ensure ENGINE_cleanup() will clean up after them. - */ -void ENGINE_cleanup(void); - -/* - * These return values from within the ENGINE structure. These can be useful - * with functional references as well as structural references - it depends - * which you obtained. Using the result for functional purposes if you only - * obtained a structural reference may be problematic! - */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e); -const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); -const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); -ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); -ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); -ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); -ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); -ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); -const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); -const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); -const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, - const char *str, - int len); -const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); - -/* - * FUNCTIONAL functions. These functions deal with ENGINE structures that - * have (or will) be initialised for use. Broadly speaking, the structural - * functions are useful for iterating the list of available engine types, - * creating new engine types, and other "list" operations. These functions - * actually deal with ENGINEs that are to be used. As such these functions - * can fail (if applicable) when particular engines are unavailable - eg. if - * a hardware accelerator is not attached or not functioning correctly. Each - * ENGINE has 2 reference counts; structural and functional. Every time a - * functional reference is obtained or released, a corresponding structural - * reference is automatically obtained or released too. - */ - -/* - * Initialise a engine type for use (or up its reference count if it's - * already in use). This will fail if the engine is not currently operational - * and cannot initialise. - */ -int ENGINE_init(ENGINE *e); -/* - * Free a functional reference to a engine type. This does not require a - * corresponding call to ENGINE_free as it also releases a structural - * reference. - */ -int ENGINE_finish(ENGINE *e); - -/* - * The following functions handle keys that are stored in some secondary - * location, handled by the engine. The storage may be on a card or - * whatever. - */ -EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, - UI_METHOD *ui_method, void *callback_data); - -/* - * This returns a pointer for the current ENGINE structure that is (by - * default) performing any RSA operations. The value returned is an - * incremented reference, so it should be free'd (ENGINE_finish) before it is - * discarded. - */ -ENGINE *ENGINE_get_default_RSA(void); -/* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_ECDH(void); -ENGINE *ENGINE_get_default_ECDSA(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); -/* - * These functions can be used to get a functional reference to perform - * ciphering or digesting corresponding to "nid". - */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); - -/* - * This sets a new default ENGINE structure for performing RSA operations. If - * the result is non-zero (success) then the ENGINE structure will have had - * its reference count up'd so the caller should still free their own - * reference 'e'. - */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); -/* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_ECDH(ENGINE *e); -int ENGINE_set_default_ECDSA(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); - -/* - * The combination "set" - the flags are bitwise "OR"d from the - * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" - * function, this function can result in unnecessary static linkage. If your - * application requires only specific functionality, consider using more - * selective functions. - */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); - -/* Deprecated functions ... */ -/* int ENGINE_clear_defaults(void); */ - -/**************************/ -/* DYNAMIC ENGINE SUPPORT */ -/**************************/ - -/* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00020000 -/* - * Binary versions older than this are too old for us (whether we're a loader - * or a loadee) - */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00020000 - -/* - * When compiling an ENGINE entirely as an external shared library, loadable - * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' - * structure type provides the calling application's (or library's) error - * functionality and memory management function pointers to the loaded - * library. These should be used/set in the loaded library code so that the - * loading application's 'state' will be used/changed in all operations. The - * 'static_state' pointer allows the loaded library to know if it shares the - * same static data as the calling application (or library), and thus whether - * these callbacks need to be set or not. - */ -typedef void *(*dyn_MEM_malloc_cb) (size_t); -typedef void *(*dyn_MEM_realloc_cb) (void *, size_t); -typedef void (*dyn_MEM_free_cb) (void *); -typedef struct st_dynamic_MEM_fns { - dyn_MEM_malloc_cb malloc_cb; - dyn_MEM_realloc_cb realloc_cb; - dyn_MEM_free_cb free_cb; -} dynamic_MEM_fns; -/* - * FIXME: Perhaps the memory and locking code (crypto.h) should declare and - * use these types so we (and any other dependant code) can simplify a bit?? - */ -typedef void (*dyn_lock_locking_cb) (int, int, const char *, int); -typedef int (*dyn_lock_add_lock_cb) (int *, int, int, const char *, int); -typedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb) (const char *, - int); -typedef void (*dyn_dynlock_lock_cb) (int, struct CRYPTO_dynlock_value *, - const char *, int); -typedef void (*dyn_dynlock_destroy_cb) (struct CRYPTO_dynlock_value *, - const char *, int); -typedef struct st_dynamic_LOCK_fns { - dyn_lock_locking_cb lock_locking_cb; - dyn_lock_add_lock_cb lock_add_lock_cb; - dyn_dynlock_create_cb dynlock_create_cb; - dyn_dynlock_lock_cb dynlock_lock_cb; - dyn_dynlock_destroy_cb dynlock_destroy_cb; -} dynamic_LOCK_fns; -/* The top-level structure */ -typedef struct st_dynamic_fns { - void *static_state; - const ERR_FNS *err_fns; - const CRYPTO_EX_DATA_IMPL *ex_data_fns; - dynamic_MEM_fns mem_fns; - dynamic_LOCK_fns lock_fns; -} dynamic_fns; - -/* - * The version checking function should be of this prototype. NB: The - * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading - * code. If this function returns zero, it indicates a (potential) version - * incompatibility and the loaded library doesn't believe it can proceed. - * Otherwise, the returned value is the (latest) version supported by the - * loading library. The loader may still decide that the loaded code's - * version is unsatisfactory and could veto the load. The function is - * expected to be implemented with the symbol name "v_check", and a default - * implementation can be fully instantiated with - * IMPLEMENT_DYNAMIC_CHECK_FN(). - */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ - if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ - return 0; } - -/* - * This function is passed the ENGINE structure to initialise with its own - * function and command settings. It should not adjust the structural or - * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So - * implementations should do their own internal cleanup in failure - * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, - * represents the ENGINE id that the loader is looking for. If this is NULL, - * the shared library can choose to return failure or to initialise a - * 'default' ENGINE. If non-NULL, the shared library must initialise only an - * ENGINE matching the passed 'id'. The function is expected to be - * implemented with the symbol name "bind_engine". A standard implementation - * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter - * 'fn' is a callback function that populates the ENGINE structure and - * returns an int value (zero for failure). 'fn' should have prototype; - * [static] int fn(ENGINE *e, const char *id); - */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \ - fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \ - return 0; \ - CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \ - CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \ - CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \ - CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \ - CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \ - if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \ - return 0; \ - if(!ERR_set_implementation(fns->err_fns)) return 0; \ - skip_cbs: \ - if(!fn(e,id)) return 0; \ - return 1; } - -/* - * If the loading application (or library) and the loaded ENGINE library - * share the same static data (eg. they're both dynamically linked to the - * same libcrypto.so) we need a way to avoid trying to set system callbacks - - * this would fail, and for the same reason that it's unnecessary to try. If - * the loaded ENGINE has (or gets from through the loader) its own copy of - * the libcrypto static data, we will need to set the callbacks. The easiest - * way to detect this is to have a function that returns a pointer to some - * static data and let the loading application and loaded ENGINE compare - * their respective values. - */ -void *ENGINE_get_static_state(void); - -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV) -void ENGINE_setup_bsd_cryptodev(void); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_ENGINE_strings(void); - -/* Error codes for the ENGINE functions. */ - -/* Function codes. */ -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_FREE_UTIL 108 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOAD_KEY 152 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_LOG_MESSAGE 141 - -/* Reason codes. */ -# define ENGINE_R_ALREADY_LOADED 100 -# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 -# define ENGINE_R_CMD_NOT_EXECUTABLE 134 -# define ENGINE_R_COMMAND_TAKES_INPUT 135 -# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 -# define ENGINE_R_CONFLICTING_ENGINE_ID 103 -# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 -# define ENGINE_R_DH_NOT_IMPLEMENTED 139 -# define ENGINE_R_DSA_NOT_IMPLEMENTED 140 -# define ENGINE_R_DSO_FAILURE 104 -# define ENGINE_R_DSO_NOT_FOUND 132 -# define ENGINE_R_ENGINES_SECTION_ERROR 148 -# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 -# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 -# define ENGINE_R_ENGINE_SECTION_ERROR 149 -# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 -# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 -# define ENGINE_R_FINISH_FAILED 106 -# define ENGINE_R_GET_HANDLE_FAILED 107 -# define ENGINE_R_ID_OR_NAME_MISSING 108 -# define ENGINE_R_INIT_FAILED 109 -# define ENGINE_R_INTERNAL_LIST_ERROR 110 -# define ENGINE_R_INVALID_ARGUMENT 143 -# define ENGINE_R_INVALID_CMD_NAME 137 -# define ENGINE_R_INVALID_CMD_NUMBER 138 -# define ENGINE_R_INVALID_INIT_VALUE 151 -# define ENGINE_R_INVALID_STRING 150 -# define ENGINE_R_NOT_INITIALISED 117 -# define ENGINE_R_NOT_LOADED 112 -# define ENGINE_R_NO_CONTROL_FUNCTION 120 -# define ENGINE_R_NO_INDEX 144 -# define ENGINE_R_NO_LOAD_FUNCTION 125 -# define ENGINE_R_NO_REFERENCE 130 -# define ENGINE_R_NO_SUCH_ENGINE 116 -# define ENGINE_R_NO_UNLOAD_FUNCTION 126 -# define ENGINE_R_PROVIDE_PARAMETERS 113 -# define ENGINE_R_RSA_NOT_IMPLEMENTED 141 -# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 -# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 -# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 -# define ENGINE_R_VERSION_INCOMPATIBILITY 145 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/err.h b/ext/openssl/windows/x64/include/openssl/err.h deleted file mode 100644 index f4236562..00000000 --- a/ext/openssl/windows/x64/include/openssl/err.h +++ /dev/null @@ -1,390 +0,0 @@ -/* crypto/err/err.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_ERR_H -# define HEADER_ERR_H - -# include - -# ifndef OPENSSL_NO_FP_API -# include -# include -# endif - -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# ifndef OPENSSL_NO_LHASH -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) -# endif - -# include - -# define ERR_TXT_MALLOCED 0x01 -# define ERR_TXT_STRING 0x02 - -# define ERR_FLAG_MARK 0x01 - -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { - CRYPTO_THREADID tid; - int err_flags[ERR_NUM_ERRORS]; - unsigned long err_buffer[ERR_NUM_ERRORS]; - char *err_data[ERR_NUM_ERRORS]; - int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; - int err_line[ERR_NUM_ERRORS]; - int top, bottom; -} ERR_STATE; - -/* library */ -# define ERR_LIB_NONE 1 -# define ERR_LIB_SYS 2 -# define ERR_LIB_BN 3 -# define ERR_LIB_RSA 4 -# define ERR_LIB_DH 5 -# define ERR_LIB_EVP 6 -# define ERR_LIB_BUF 7 -# define ERR_LIB_OBJ 8 -# define ERR_LIB_PEM 9 -# define ERR_LIB_DSA 10 -# define ERR_LIB_X509 11 -/* #define ERR_LIB_METH 12 */ -# define ERR_LIB_ASN1 13 -# define ERR_LIB_CONF 14 -# define ERR_LIB_CRYPTO 15 -# define ERR_LIB_EC 16 -# define ERR_LIB_SSL 20 -/* #define ERR_LIB_SSL23 21 */ -/* #define ERR_LIB_SSL2 22 */ -/* #define ERR_LIB_SSL3 23 */ -/* #define ERR_LIB_RSAREF 30 */ -/* #define ERR_LIB_PROXY 31 */ -# define ERR_LIB_BIO 32 -# define ERR_LIB_PKCS7 33 -# define ERR_LIB_X509V3 34 -# define ERR_LIB_PKCS12 35 -# define ERR_LIB_RAND 36 -# define ERR_LIB_DSO 37 -# define ERR_LIB_ENGINE 38 -# define ERR_LIB_OCSP 39 -# define ERR_LIB_UI 40 -# define ERR_LIB_COMP 41 -# define ERR_LIB_ECDSA 42 -# define ERR_LIB_ECDH 43 -# define ERR_LIB_STORE 44 -# define ERR_LIB_FIPS 45 -# define ERR_LIB_CMS 46 -# define ERR_LIB_TS 47 -# define ERR_LIB_HMAC 48 -# define ERR_LIB_JPAKE 49 - -# define ERR_LIB_USER 128 - -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) -# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) -# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) - -/* - * Borland C seems too stupid to be able to shift and do longs in the - * pre-processor :-( - */ -# define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ - ((((unsigned long)f)&0xfffL)*0x1000)| \ - ((((unsigned long)r)&0xfffL))) -# define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) -# define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) -# define ERR_GET_REASON(l) (int)((l)&0xfffL) -# define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) - -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_FFLUSH 18 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_CONF_LIB ERR_LIB_CONF/* 14 */ -# define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO/* 15 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_SSL_LIB ERR_LIB_SSL/* 20 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_PKCS12_LIB ERR_LIB_PKCS12/* 35 */ -# define ERR_R_RAND_LIB ERR_LIB_RAND/* 36 */ -# define ERR_R_DSO_LIB ERR_LIB_DSO/* 37 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_OCSP_LIB ERR_LIB_OCSP/* 39 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_COMP_LIB ERR_LIB_COMP/* 41 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_ECDH_LIB ERR_LIB_ECDH/* 43 */ -# define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */ -# define ERR_R_TS_LIB ERR_LIB_TS/* 45 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_BAD_ASN1_OBJECT_HEADER 59 -# define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 -# define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 -# define ERR_R_ASN1_LENGTH_MISMATCH 62 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) - -/* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries - */ - -typedef struct ERR_string_data_st { - unsigned long error; - const char *string; -} ERR_STRING_DATA; - -void ERR_put_error(int lib, int func, int reason, const char *file, int line); -void ERR_set_error_data(char *data, int flags); - -unsigned long ERR_get_error(void); -unsigned long ERR_get_error_line(const char **file, int *line); -unsigned long ERR_get_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_error(void); -unsigned long ERR_peek_error_line(const char **file, int *line); -unsigned long ERR_peek_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_last_error(void); -unsigned long ERR_peek_last_error_line(const char **file, int *line); -unsigned long ERR_peek_last_error_line_data(const char **file, int *line, - const char **data, int *flags); -void ERR_clear_error(void); -char *ERR_error_string(unsigned long e, char *buf); -void ERR_error_string_n(unsigned long e, char *buf, size_t len); -const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); -const char *ERR_reason_error_string(unsigned long e); -void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_FP_API -void ERR_print_errors_fp(FILE *fp); -# endif -# ifndef OPENSSL_NO_BIO -void ERR_print_errors(BIO *bp); -# endif -void ERR_add_error_data(int num, ...); -void ERR_add_error_vdata(int num, va_list args); -void ERR_load_strings(int lib, ERR_STRING_DATA str[]); -void ERR_unload_strings(int lib, ERR_STRING_DATA str[]); -void ERR_load_ERR_strings(void); -void ERR_load_crypto_strings(void); -void ERR_free_strings(void); - -void ERR_remove_thread_state(const CRYPTO_THREADID *tid); -# ifndef OPENSSL_NO_DEPRECATED -void ERR_remove_state(unsigned long pid); /* if zero we look it up */ -# endif -ERR_STATE *ERR_get_state(void); - -# ifndef OPENSSL_NO_LHASH -LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); -LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); -void ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash); -# endif - -int ERR_get_next_error_library(void); - -int ERR_set_mark(void); -int ERR_pop_to_mark(void); - -/* Already defined in ossl_typ.h */ -/* typedef struct st_ERR_FNS ERR_FNS; */ -/* - * An application can use this function and provide the return value to - * loaded modules that should use the application's ERR state/functionality - */ -const ERR_FNS *ERR_get_implementation(void); -/* - * A loaded module should call this function prior to any ERR operations - * using the application's "ERR_FNS". - */ -int ERR_set_implementation(const ERR_FNS *fns); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/evp.h b/ext/openssl/windows/x64/include/openssl/evp.h deleted file mode 100644 index d258ef87..00000000 --- a/ext/openssl/windows/x64/include/openssl/evp.h +++ /dev/null @@ -1,1536 +0,0 @@ -/* crypto/evp/evp.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H - -# ifdef OPENSSL_ALGORITHM_DEFINES -# include -# else -# define OPENSSL_ALGORITHM_DEFINES -# include -# undef OPENSSL_ALGORITHM_DEFINES -# endif - -# include - -# include - -# ifndef OPENSSL_NO_BIO -# include -# endif - -/*- -#define EVP_RC2_KEY_SIZE 16 -#define EVP_RC4_KEY_SIZE 16 -#define EVP_BLOWFISH_KEY_SIZE 16 -#define EVP_CAST5_KEY_SIZE 16 -#define EVP_RC5_32_12_16_KEY_SIZE 16 -*/ -# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ -# define EVP_MAX_KEY_LENGTH 64 -# define EVP_MAX_IV_LENGTH 16 -# define EVP_MAX_BLOCK_LENGTH 32 - -# define PKCS5_SALT_LEN 8 -/* Default PKCS#5 iteration count */ -# define PKCS5_DEFAULT_ITER 2048 - -# include - -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 - -# define EVP_PKEY_NONE NID_undef -# define EVP_PKEY_RSA NID_rsaEncryption -# define EVP_PKEY_RSA2 NID_rsa -# define EVP_PKEY_DSA NID_dsa -# define EVP_PKEY_DSA1 NID_dsa_2 -# define EVP_PKEY_DSA2 NID_dsaWithSHA -# define EVP_PKEY_DSA3 NID_dsaWithSHA1 -# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 -# define EVP_PKEY_DH NID_dhKeyAgreement -# define EVP_PKEY_DHX NID_dhpublicnumber -# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey -# define EVP_PKEY_HMAC NID_hmac -# define EVP_PKEY_CMAC NID_cmac - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Type needs to be a bit field Sub-type needs to be for variations on the - * method, as in, can it do arbitrary encryption.... - */ -struct evp_pkey_st { - int type; - int save_type; - int references; - const EVP_PKEY_ASN1_METHOD *ameth; - ENGINE *engine; - union { - char *ptr; -# ifndef OPENSSL_NO_RSA - struct rsa_st *rsa; /* RSA */ -# endif -# ifndef OPENSSL_NO_DSA - struct dsa_st *dsa; /* DSA */ -# endif -# ifndef OPENSSL_NO_DH - struct dh_st *dh; /* DH */ -# endif -# ifndef OPENSSL_NO_EC - struct ec_key_st *ec; /* ECC */ -# endif - } pkey; - int save_parameters; - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ -} /* EVP_PKEY */ ; - -# define EVP_PKEY_MO_SIGN 0x0001 -# define EVP_PKEY_MO_VERIFY 0x0002 -# define EVP_PKEY_MO_ENCRYPT 0x0004 -# define EVP_PKEY_MO_DECRYPT 0x0008 - -# ifndef EVP_MD -struct env_md_st { - int type; - int pkey_type; - int md_size; - unsigned long flags; - int (*init) (EVP_MD_CTX *ctx); - int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); - int (*final) (EVP_MD_CTX *ctx, unsigned char *md); - int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); - int (*cleanup) (EVP_MD_CTX *ctx); - /* FIXME: prototype these some day */ - int (*sign) (int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, void *key); - int (*verify) (int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, - void *key); - int required_pkey_type[5]; /* EVP_PKEY_xxx */ - int block_size; - int ctx_size; /* how big does the ctx->md_data need to be */ - /* control function */ - int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); -} /* EVP_MD */ ; - -typedef int evp_sign_method(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigret, - unsigned int *siglen, void *key); -typedef int evp_verify_method(int type, const unsigned char *m, - unsigned int m_length, - const unsigned char *sigbuf, - unsigned int siglen, void *key); - -/* digest can only handle a single block */ -# define EVP_MD_FLAG_ONESHOT 0x0001 - -/* - * digest is a "clone" digest used - * which is a copy of an existing - * one for a specific public key type. - * EVP_dss1() etc - */ -# define EVP_MD_FLAG_PKEY_DIGEST 0x0002 - -/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ - -# define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE 0x0004 - -/* DigestAlgorithmIdentifier flags... */ - -# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 - -/* NULL or absent parameter accepted. Use NULL */ - -# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 - -/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ - -# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 - -/* Custom handling via ctrl */ - -# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 - -/* Note if suitable for use in FIPS mode */ -# define EVP_MD_FLAG_FIPS 0x0400 - -/* Digest ctrls */ - -# define EVP_MD_CTRL_DIGALGID 0x1 -# define EVP_MD_CTRL_MICALG 0x2 - -/* Minimum Algorithm specific ctrl value */ - -# define EVP_MD_CTRL_ALG_CTRL 0x1000 - -# define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ - (evp_verify_method *)DSA_verify, \ - {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ - EVP_PKEY_DSA4,0} -# else -# define EVP_PKEY_DSA_method EVP_PKEY_NULL_method -# endif - -# ifndef OPENSSL_NO_ECDSA -# define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \ - (evp_verify_method *)ECDSA_verify, \ - {EVP_PKEY_EC,0,0,0} -# else -# define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method -# endif - -# ifndef OPENSSL_NO_RSA -# define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ - (evp_verify_method *)RSA_verify, \ - {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} -# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ - (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ - (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ - {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} -# else -# define EVP_PKEY_RSA_method EVP_PKEY_NULL_method -# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method -# endif - -# endif /* !EVP_MD */ - -struct env_md_ctx_st { - const EVP_MD *digest; - ENGINE *engine; /* functional reference if 'digest' is - * ENGINE-provided */ - unsigned long flags; - void *md_data; - /* Public key context for sign/verify */ - EVP_PKEY_CTX *pctx; - /* Update function: usually copied from EVP_MD */ - int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); -} /* EVP_MD_CTX */ ; - -/* values for EVP_MD_CTX flags */ - -# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be - * called once only */ -# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been - * cleaned */ -# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data - * in EVP_MD_CTX_cleanup */ -/* - * FIPS and pad options are ignored in 1.0.0, definitions are here so we - * don't accidentally reuse the values for other purposes. - */ - -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ - -/* - * The following PAD options are also currently ignored in 1.0.0, digest - * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() - * instead. - */ -# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ -# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ -# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ -# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ - -# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ - -struct evp_cipher_st { - int nid; - int block_size; - /* Default value for variable length ciphers */ - int key_len; - int iv_len; - /* Various flags */ - unsigned long flags; - /* init key */ - int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, - const unsigned char *iv, int enc); - /* encrypt/decrypt data */ - int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, - const unsigned char *in, size_t inl); - /* cleanup ctx */ - int (*cleanup) (EVP_CIPHER_CTX *); - /* how big ctx->cipher_data needs to be */ - int ctx_size; - /* Populate a ASN1_TYPE with parameters */ - int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Get parameters from a ASN1_TYPE */ - int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Miscellaneous operations */ - int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); - /* Application data */ - void *app_data; -} /* EVP_CIPHER */ ; - -/* Values for cipher flags */ - -/* Modes for ciphers */ - -# define EVP_CIPH_STREAM_CIPHER 0x0 -# define EVP_CIPH_ECB_MODE 0x1 -# define EVP_CIPH_CBC_MODE 0x2 -# define EVP_CIPH_CFB_MODE 0x3 -# define EVP_CIPH_OFB_MODE 0x4 -# define EVP_CIPH_CTR_MODE 0x5 -# define EVP_CIPH_GCM_MODE 0x6 -# define EVP_CIPH_CCM_MODE 0x7 -# define EVP_CIPH_XTS_MODE 0x10001 -# define EVP_CIPH_WRAP_MODE 0x10002 -# define EVP_CIPH_MODE 0xF0007 -/* Set if variable length cipher */ -# define EVP_CIPH_VARIABLE_LENGTH 0x8 -/* Set if the iv handling should be done by the cipher itself */ -# define EVP_CIPH_CUSTOM_IV 0x10 -/* Set if the cipher's init() function should be called if key is NULL */ -# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 -/* Call ctrl() to init cipher parameters */ -# define EVP_CIPH_CTRL_INIT 0x40 -/* Don't use standard key length function */ -# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 -/* Don't use standard block padding */ -# define EVP_CIPH_NO_PADDING 0x100 -/* cipher handles random key generation */ -# define EVP_CIPH_RAND_KEY 0x200 -/* cipher has its own additional copying logic */ -# define EVP_CIPH_CUSTOM_COPY 0x400 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 -/* Buffer length in bits not bytes: CFB1 mode only */ -# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 -/* - * Cipher handles any and all padding logic as well as finalisation. - */ -# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 -# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 -# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 - -/* - * Cipher context flag to indicate we can handle wrap mode: if allowed in - * older applications it could overflow buffers. - */ - -# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 - -/* ctrl() values */ - -# define EVP_CTRL_INIT 0x0 -# define EVP_CTRL_SET_KEY_LENGTH 0x1 -# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 -# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 -# define EVP_CTRL_GET_RC5_ROUNDS 0x4 -# define EVP_CTRL_SET_RC5_ROUNDS 0x5 -# define EVP_CTRL_RAND_KEY 0x6 -# define EVP_CTRL_PBE_PRF_NID 0x7 -# define EVP_CTRL_COPY 0x8 -# define EVP_CTRL_GCM_SET_IVLEN 0x9 -# define EVP_CTRL_GCM_GET_TAG 0x10 -# define EVP_CTRL_GCM_SET_TAG 0x11 -# define EVP_CTRL_GCM_SET_IV_FIXED 0x12 -# define EVP_CTRL_GCM_IV_GEN 0x13 -# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_GCM_SET_IVLEN -# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_GCM_GET_TAG -# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_GCM_SET_TAG -# define EVP_CTRL_CCM_SET_L 0x14 -# define EVP_CTRL_CCM_SET_MSGLEN 0x15 -/* - * AEAD cipher deduces payload length and returns number of bytes required to - * store MAC and eventual padding. Subsequent call to EVP_Cipher even - * appends/verifies MAC. - */ -# define EVP_CTRL_AEAD_TLS1_AAD 0x16 -/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ -# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 -/* Set the GCM invocation field, decrypt only */ -# define EVP_CTRL_GCM_SET_IV_INV 0x18 - -# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 -# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a -# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b -# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c - -/* RFC 5246 defines additional data to be 13 bytes in length */ -# define EVP_AEAD_TLS1_AAD_LEN 13 - -typedef struct { - unsigned char *out; - const unsigned char *inp; - size_t len; - unsigned int interleave; -} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; - -/* GCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_GCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 -/* Length of tag for TLS */ -# define EVP_GCM_TLS_TAG_LEN 16 - -typedef struct evp_cipher_info_st { - const EVP_CIPHER *cipher; - unsigned char iv[EVP_MAX_IV_LENGTH]; -} EVP_CIPHER_INFO; - -struct evp_cipher_ctx_st { - const EVP_CIPHER *cipher; - ENGINE *engine; /* functional reference if 'cipher' is - * ENGINE-provided */ - int encrypt; /* encrypt or decrypt */ - int buf_len; /* number we have left */ - unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ - unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ - unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ - int num; /* used by cfb/ofb/ctr mode */ - void *app_data; /* application stuff */ - int key_len; /* May change for variable length cipher */ - unsigned long flags; /* Various flags */ - void *cipher_data; /* per EVP data */ - int final_used; - int block_mask; - unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ -} /* EVP_CIPHER_CTX */ ; - -typedef struct evp_Encode_Ctx_st { - /* number saved in a partial encode/decode */ - int num; - /* - * The length is either the output line length (in input bytes) or the - * shortest input line length that is ok. Once decoding begins, the - * length is adjusted up each time a longer line is decoded - */ - int length; - /* data to encode */ - unsigned char enc_data[80]; - /* number read on current line */ - int line_num; - int expect_nl; -} EVP_ENCODE_CTX; - -/* Password based encryption function */ -typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *cipher, const EVP_MD *md, - int en_de); - -# ifndef OPENSSL_NO_RSA -# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) -# endif - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) -# endif - -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) -# endif - -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) -# endif - -/* Add some extra combinations */ -# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) -# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) -# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) -# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) - -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); - -const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) - -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) - -const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); -void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); -# define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) - -# define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) -# define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) - -# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_SignInit(a,b) EVP_DigestInit(a,b) -# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) -# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) -# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) - -# ifdef CONST_STRICT -void BIO_set_md(BIO *, const EVP_MD *md); -# else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) -# endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) -# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) - -int EVP_Cipher(EVP_CIPHER_CTX *c, - unsigned char *out, const unsigned char *in, unsigned int inl); - -# define EVP_add_cipher_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_add_digest_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_delete_cipher_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); -# define EVP_delete_digest_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); - -void EVP_MD_CTX_init(EVP_MD_CTX *ctx); -int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx); -EVP_MD_CTX *EVP_MD_CTX_create(void); -void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); -int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); -void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); -void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); -int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); -int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); -int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); -int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); -int EVP_Digest(const void *data, size_t count, - unsigned char *md, unsigned int *size, const EVP_MD *type, - ENGINE *impl); - -int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); -int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); -int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); - -int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); -int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, - const char *prompt, int verify); -void EVP_set_pw_prompt(const char *prompt); -char *EVP_get_pw_prompt(void); - -int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, - const unsigned char *salt, const unsigned char *data, - int datal, int count, unsigned char *key, - unsigned char *iv); - -void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); -void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); -int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); - -int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - ENGINE *impl, const unsigned char *key, - const unsigned char *iv); -int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - ENGINE *impl, const unsigned char *key, - const unsigned char *iv); -int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); -int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); - -int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv, - int enc); -int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - ENGINE *impl, const unsigned char *key, - const unsigned char *iv, int enc); -int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); -int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); - -int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, - EVP_PKEY *pkey); - -int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, - unsigned int siglen, EVP_PKEY *pkey); - -int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestSignFinal(EVP_MD_CTX *ctx, - unsigned char *sigret, size_t *siglen); - -int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, - const unsigned char *sig, size_t siglen); - -int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - const unsigned char *ek, int ekl, const unsigned char *iv, - EVP_PKEY *priv); -int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - unsigned char **ek, int *ekl, unsigned char *iv, - EVP_PKEY **pubk, int npubk); -int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); -void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); -int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned - char *out, int *outl); -int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); -int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a); -int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); -int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); -int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); -int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); - -# ifndef OPENSSL_NO_BIO -BIO_METHOD *BIO_f_md(void); -BIO_METHOD *BIO_f_base64(void); -BIO_METHOD *BIO_f_cipher(void); -BIO_METHOD *BIO_f_reliable(void); -void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, - const unsigned char *i, int enc); -# endif - -const EVP_MD *EVP_md_null(void); -# ifndef OPENSSL_NO_MD2 -const EVP_MD *EVP_md2(void); -# endif -# ifndef OPENSSL_NO_MD4 -const EVP_MD *EVP_md4(void); -# endif -# ifndef OPENSSL_NO_MD5 -const EVP_MD *EVP_md5(void); -# endif -# ifndef OPENSSL_NO_SHA -const EVP_MD *EVP_sha(void); -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_dss(void); -const EVP_MD *EVP_dss1(void); -const EVP_MD *EVP_ecdsa(void); -# endif -# ifndef OPENSSL_NO_SHA256 -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -# endif -# ifndef OPENSSL_NO_SHA512 -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); -# endif -# ifndef OPENSSL_NO_MDC2 -const EVP_MD *EVP_mdc2(void); -# endif -# ifndef OPENSSL_NO_RIPEMD -const EVP_MD *EVP_ripemd160(void); -# endif -# ifndef OPENSSL_NO_WHIRLPOOL -const EVP_MD *EVP_whirlpool(void); -# endif -const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ -# ifndef OPENSSL_NO_DES -const EVP_CIPHER *EVP_des_ecb(void); -const EVP_CIPHER *EVP_des_ede(void); -const EVP_CIPHER *EVP_des_ede3(void); -const EVP_CIPHER *EVP_des_ede_ecb(void); -const EVP_CIPHER *EVP_des_ede3_ecb(void); -const EVP_CIPHER *EVP_des_cfb64(void); -# define EVP_des_cfb EVP_des_cfb64 -const EVP_CIPHER *EVP_des_cfb1(void); -const EVP_CIPHER *EVP_des_cfb8(void); -const EVP_CIPHER *EVP_des_ede_cfb64(void); -# define EVP_des_ede_cfb EVP_des_ede_cfb64 -# if 0 -const EVP_CIPHER *EVP_des_ede_cfb1(void); -const EVP_CIPHER *EVP_des_ede_cfb8(void); -# endif -const EVP_CIPHER *EVP_des_ede3_cfb64(void); -# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb1(void); -const EVP_CIPHER *EVP_des_ede3_cfb8(void); -const EVP_CIPHER *EVP_des_ofb(void); -const EVP_CIPHER *EVP_des_ede_ofb(void); -const EVP_CIPHER *EVP_des_ede3_ofb(void); -const EVP_CIPHER *EVP_des_cbc(void); -const EVP_CIPHER *EVP_des_ede_cbc(void); -const EVP_CIPHER *EVP_des_ede3_cbc(void); -const EVP_CIPHER *EVP_desx_cbc(void); -const EVP_CIPHER *EVP_des_ede3_wrap(void); -/* - * This should now be supported through the dev_crypto ENGINE. But also, why - * are rc4 and md5 declarations made here inside a "NO_DES" precompiler - * branch? - */ -# if 0 -# ifdef OPENSSL_OPENBSD_DEV_CRYPTO -const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void); -const EVP_CIPHER *EVP_dev_crypto_rc4(void); -const EVP_MD *EVP_dev_crypto_md5(void); -# endif -# endif -# endif -# ifndef OPENSSL_NO_RC4 -const EVP_CIPHER *EVP_rc4(void); -const EVP_CIPHER *EVP_rc4_40(void); -# ifndef OPENSSL_NO_MD5 -const EVP_CIPHER *EVP_rc4_hmac_md5(void); -# endif -# endif -# ifndef OPENSSL_NO_IDEA -const EVP_CIPHER *EVP_idea_ecb(void); -const EVP_CIPHER *EVP_idea_cfb64(void); -# define EVP_idea_cfb EVP_idea_cfb64 -const EVP_CIPHER *EVP_idea_ofb(void); -const EVP_CIPHER *EVP_idea_cbc(void); -# endif -# ifndef OPENSSL_NO_RC2 -const EVP_CIPHER *EVP_rc2_ecb(void); -const EVP_CIPHER *EVP_rc2_cbc(void); -const EVP_CIPHER *EVP_rc2_40_cbc(void); -const EVP_CIPHER *EVP_rc2_64_cbc(void); -const EVP_CIPHER *EVP_rc2_cfb64(void); -# define EVP_rc2_cfb EVP_rc2_cfb64 -const EVP_CIPHER *EVP_rc2_ofb(void); -# endif -# ifndef OPENSSL_NO_BF -const EVP_CIPHER *EVP_bf_ecb(void); -const EVP_CIPHER *EVP_bf_cbc(void); -const EVP_CIPHER *EVP_bf_cfb64(void); -# define EVP_bf_cfb EVP_bf_cfb64 -const EVP_CIPHER *EVP_bf_ofb(void); -# endif -# ifndef OPENSSL_NO_CAST -const EVP_CIPHER *EVP_cast5_ecb(void); -const EVP_CIPHER *EVP_cast5_cbc(void); -const EVP_CIPHER *EVP_cast5_cfb64(void); -# define EVP_cast5_cfb EVP_cast5_cfb64 -const EVP_CIPHER *EVP_cast5_ofb(void); -# endif -# ifndef OPENSSL_NO_RC5 -const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); -const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); -const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); -# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 -const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); -# endif -# ifndef OPENSSL_NO_AES -const EVP_CIPHER *EVP_aes_128_ecb(void); -const EVP_CIPHER *EVP_aes_128_cbc(void); -const EVP_CIPHER *EVP_aes_128_cfb1(void); -const EVP_CIPHER *EVP_aes_128_cfb8(void); -const EVP_CIPHER *EVP_aes_128_cfb128(void); -# define EVP_aes_128_cfb EVP_aes_128_cfb128 -const EVP_CIPHER *EVP_aes_128_ofb(void); -const EVP_CIPHER *EVP_aes_128_ctr(void); -const EVP_CIPHER *EVP_aes_128_ccm(void); -const EVP_CIPHER *EVP_aes_128_gcm(void); -const EVP_CIPHER *EVP_aes_128_xts(void); -const EVP_CIPHER *EVP_aes_128_wrap(void); -const EVP_CIPHER *EVP_aes_192_ecb(void); -const EVP_CIPHER *EVP_aes_192_cbc(void); -const EVP_CIPHER *EVP_aes_192_cfb1(void); -const EVP_CIPHER *EVP_aes_192_cfb8(void); -const EVP_CIPHER *EVP_aes_192_cfb128(void); -# define EVP_aes_192_cfb EVP_aes_192_cfb128 -const EVP_CIPHER *EVP_aes_192_ofb(void); -const EVP_CIPHER *EVP_aes_192_ctr(void); -const EVP_CIPHER *EVP_aes_192_ccm(void); -const EVP_CIPHER *EVP_aes_192_gcm(void); -const EVP_CIPHER *EVP_aes_192_wrap(void); -const EVP_CIPHER *EVP_aes_256_ecb(void); -const EVP_CIPHER *EVP_aes_256_cbc(void); -const EVP_CIPHER *EVP_aes_256_cfb1(void); -const EVP_CIPHER *EVP_aes_256_cfb8(void); -const EVP_CIPHER *EVP_aes_256_cfb128(void); -# define EVP_aes_256_cfb EVP_aes_256_cfb128 -const EVP_CIPHER *EVP_aes_256_ofb(void); -const EVP_CIPHER *EVP_aes_256_ctr(void); -const EVP_CIPHER *EVP_aes_256_ccm(void); -const EVP_CIPHER *EVP_aes_256_gcm(void); -const EVP_CIPHER *EVP_aes_256_xts(void); -const EVP_CIPHER *EVP_aes_256_wrap(void); -# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); -# endif -# ifndef OPENSSL_NO_SHA256 -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); -# endif -# endif -# ifndef OPENSSL_NO_CAMELLIA -const EVP_CIPHER *EVP_camellia_128_ecb(void); -const EVP_CIPHER *EVP_camellia_128_cbc(void); -const EVP_CIPHER *EVP_camellia_128_cfb1(void); -const EVP_CIPHER *EVP_camellia_128_cfb8(void); -const EVP_CIPHER *EVP_camellia_128_cfb128(void); -# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 -const EVP_CIPHER *EVP_camellia_128_ofb(void); -const EVP_CIPHER *EVP_camellia_192_ecb(void); -const EVP_CIPHER *EVP_camellia_192_cbc(void); -const EVP_CIPHER *EVP_camellia_192_cfb1(void); -const EVP_CIPHER *EVP_camellia_192_cfb8(void); -const EVP_CIPHER *EVP_camellia_192_cfb128(void); -# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 -const EVP_CIPHER *EVP_camellia_192_ofb(void); -const EVP_CIPHER *EVP_camellia_256_ecb(void); -const EVP_CIPHER *EVP_camellia_256_cbc(void); -const EVP_CIPHER *EVP_camellia_256_cfb1(void); -const EVP_CIPHER *EVP_camellia_256_cfb8(void); -const EVP_CIPHER *EVP_camellia_256_cfb128(void); -# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 -const EVP_CIPHER *EVP_camellia_256_ofb(void); -# endif - -# ifndef OPENSSL_NO_SEED -const EVP_CIPHER *EVP_seed_ecb(void); -const EVP_CIPHER *EVP_seed_cbc(void); -const EVP_CIPHER *EVP_seed_cfb128(void); -# define EVP_seed_cfb EVP_seed_cfb128 -const EVP_CIPHER *EVP_seed_ofb(void); -# endif - -void OPENSSL_add_all_algorithms_noconf(void); -void OPENSSL_add_all_algorithms_conf(void); - -# ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() \ - OPENSSL_add_all_algorithms_conf() -# else -# define OpenSSL_add_all_algorithms() \ - OPENSSL_add_all_algorithms_noconf() -# endif - -void OpenSSL_add_all_ciphers(void); -void OpenSSL_add_all_digests(void); -# define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms() -# define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers() -# define SSLeay_add_all_digests() OpenSSL_add_all_digests() - -int EVP_add_cipher(const EVP_CIPHER *cipher); -int EVP_add_digest(const EVP_MD *digest); - -const EVP_CIPHER *EVP_get_cipherbyname(const char *name); -const EVP_MD *EVP_get_digestbyname(const char *name); -void EVP_cleanup(void); - -void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_CIPHER_do_all_sorted(void (*fn) - (const EVP_CIPHER *ciph, const char *from, - const char *to, void *x), void *arg); - -void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_MD_do_all_sorted(void (*fn) - (const EVP_MD *ciph, const char *from, - const char *to, void *x), void *arg); - -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); -int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(EVP_PKEY *pkey); -int EVP_PKEY_size(EVP_PKEY *pkey); -int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); -int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); -void *EVP_PKEY_get0(EVP_PKEY *pkey); - -# ifndef OPENSSL_NO_RSA -struct rsa_st; -int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA -struct dsa_st; -int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH -struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC -struct ec_key_st; -int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif - -EVP_PKEY *EVP_PKEY_new(void); -void EVP_PKEY_free(EVP_PKEY *pkey); - -EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); - -EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); - -int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); -int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); -int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); - -int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); - -int EVP_CIPHER_type(const EVP_CIPHER *ctx); - -/* calls methods */ -int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* These are used by EVP_CIPHER methods */ -int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* PKCS5 password based encryption */ -int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); -int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - int keylen, unsigned char *out); -int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - const EVP_MD *digest, int keylen, unsigned char *out); -int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); - -void PKCS5_PBE_add(void); - -int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, - ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); - -/* PBE type */ - -/* Can appear as the outermost AlgorithmIdentifier */ -# define EVP_PBE_TYPE_OUTER 0x0 -/* Is an PRF type OID */ -# define EVP_PBE_TYPE_PRF 0x1 - -int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, - int md_nid, EVP_PBE_KEYGEN *keygen); -int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, - EVP_PBE_KEYGEN *keygen); -int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, - EVP_PBE_KEYGEN **pkeygen); -void EVP_PBE_cleanup(void); - -# define ASN1_PKEY_ALIAS 0x1 -# define ASN1_PKEY_DYNAMIC 0x2 -# define ASN1_PKEY_SIGPARAM_NULL 0x4 - -# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 -# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 -# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 -# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 -# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 -# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 - -int EVP_PKEY_asn1_get_count(void); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, - const char *str, int len); -int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); -int EVP_PKEY_asn1_add_alias(int to, int from); -int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, - int *ppkey_flags, const char **pinfo, - const char **ppem_str, - const EVP_PKEY_ASN1_METHOD *ameth); - -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(EVP_PKEY *pkey); -EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, - const char *pem_str, - const char *info); -void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, - const EVP_PKEY_ASN1_METHOD *src); -void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); -void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, - int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), - int (*pub_encode) (X509_PUBKEY *pub, - const EVP_PKEY *pk), - int (*pub_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*pub_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx), - int (*pkey_size) (const EVP_PKEY *pk), - int (*pkey_bits) (const EVP_PKEY *pk)); -void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, - int (*priv_decode) (EVP_PKEY *pk, - PKCS8_PRIV_KEY_INFO - *p8inf), - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, - const EVP_PKEY *pk), - int (*priv_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); -void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, - int derlen), - int (*param_encode) (const EVP_PKEY *pkey, - unsigned char **pder), - int (*param_missing) (const EVP_PKEY *pk), - int (*param_copy) (EVP_PKEY *to, - const EVP_PKEY *from), - int (*param_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*param_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); - -void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, - void (*pkey_free) (EVP_PKEY *pkey)); -void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, - long arg1, void *arg2)); -void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, - int (*item_verify) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, - EVP_PKEY *pkey), - int (*item_sign) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *alg1, - X509_ALGOR *alg2, - ASN1_BIT_STRING *sig)); - -# define EVP_PKEY_OP_UNDEFINED 0 -# define EVP_PKEY_OP_PARAMGEN (1<<1) -# define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) - -# define EVP_PKEY_OP_TYPE_SIG \ - (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ - | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) - -# define EVP_PKEY_OP_TYPE_CRYPT \ - (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) - -# define EVP_PKEY_OP_TYPE_NOGEN \ - (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) - -# define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) - -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTRL_MD 1 -# define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - -# define EVP_PKEY_CTRL_SET_MAC_KEY 6 - -# define EVP_PKEY_CTRL_DIGESTINIT 7 - -/* Used by GOST key encryption in TLS */ -# define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - -# define EVP_PKEY_CTRL_CIPHER 12 - -# define EVP_PKEY_CTRL_GET_MD 13 - -# define EVP_PKEY_ALG_CTRL 0x1000 - -# define EVP_PKEY_FLAG_AUTOARGLEN 2 -/* - * Method handles all operations: don't assume any digest related defaults. - */ -# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 - -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); - -EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, int p1, void *p2); -int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, - const char *value); - -int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); - -EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, - const unsigned char *key, int keylen); - -void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); -EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); - -EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); - -void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, - const unsigned char *sig, size_t siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, - unsigned char *rout, size_t *routlen, - const unsigned char *sig, size_t siglen); -int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); -int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); - -int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); -int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); - -typedef int EVP_PKEY_gen_cb (EVP_PKEY_CTX *ctx); - -int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); -int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); - -void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); -EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_add_alg_module(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -void ERR_load_EVP_strings(void); - -/* Error codes for the EVP functions. */ - -/* Function codes. */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_CIPHER 176 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_XTS 172 -# define EVP_F_AES_XTS_CIPHER 175 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CMAC_INIT 173 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_D2I_PKEY 100 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_DSAPKEY2PKCS8 134 -# define EVP_F_DSA_PKEY2PKCS8 135 -# define EVP_F_ECDSA_PKEY2PKCS8 129 -# define EVP_F_ECKEY_PKEY2PKCS8 132 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKCS82PKEY_BROKEN 136 -# define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET1_DH 119 -# define EVP_F_EVP_PKEY_GET1_DSA 120 -# define EVP_F_EVP_PKEY_GET1_ECDSA 130 -# define EVP_F_EVP_PKEY_GET1_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET1_RSA 121 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_RIJNDAEL 126 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_FIPS_CIPHERINIT 166 -# define EVP_F_FIPS_CIPHER_CTX_COPY 170 -# define EVP_F_FIPS_CIPHER_CTX_CTRL 167 -# define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH 171 -# define EVP_F_FIPS_DIGESTINIT 168 -# define EVP_F_FIPS_MD_CTX_COPY 169 -# define EVP_F_HMAC_INIT_EX 174 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS8_SET_BROKEN 112 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 - -/* Reason codes. */ -# define EVP_R_AES_IV_SETUP_FAILED 162 -# define EVP_R_AES_KEY_SETUP_FAILED 143 -# define EVP_R_ASN1_LIB 140 -# define EVP_R_BAD_BLOCK_LENGTH 136 -# define EVP_R_BAD_DECRYPT 100 -# define EVP_R_BAD_KEY_LENGTH 137 -# define EVP_R_BN_DECODE_ERROR 112 -# define EVP_R_BN_PUBKEY_ERROR 113 -# define EVP_R_BUFFER_TOO_SMALL 155 -# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 -# define EVP_R_CIPHER_PARAMETER_ERROR 122 -# define EVP_R_COMMAND_NOT_SUPPORTED 147 -# define EVP_R_CTRL_NOT_IMPLEMENTED 132 -# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 -# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 -# define EVP_R_DECODE_ERROR 114 -# define EVP_R_DIFFERENT_KEY_TYPES 101 -# define EVP_R_DIFFERENT_PARAMETERS 153 -# define EVP_R_DISABLED_FOR_FIPS 163 -# define EVP_R_ENCODE_ERROR 115 -# define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 -# define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 -# define EVP_R_EXPECTING_AN_RSA_KEY 127 -# define EVP_R_EXPECTING_A_DH_KEY 128 -# define EVP_R_EXPECTING_A_DSA_KEY 129 -# define EVP_R_EXPECTING_A_ECDSA_KEY 141 -# define EVP_R_EXPECTING_A_EC_KEY 142 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 -# define EVP_R_INITIALIZATION_ERROR 134 -# define EVP_R_INPUT_NOT_INITIALIZED 111 -# define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 -# define EVP_R_INVALID_KEY 171 -# define EVP_R_INVALID_KEY_LENGTH 130 -# define EVP_R_INVALID_OPERATION 148 -# define EVP_R_IV_TOO_LARGE 102 -# define EVP_R_KEYGEN_FAILURE 120 -# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 -# define EVP_R_METHOD_NOT_SUPPORTED 144 -# define EVP_R_MISSING_PARAMETERS 103 -# define EVP_R_NO_CIPHER_SET 131 -# define EVP_R_NO_DEFAULT_DIGEST 158 -# define EVP_R_NO_DIGEST_SET 139 -# define EVP_R_NO_DSA_PARAMETERS 116 -# define EVP_R_NO_KEY_SET 154 -# define EVP_R_NO_OPERATION_SET 149 -# define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 -# define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 -# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117 -# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 -# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 -# define EVP_R_PUBLIC_KEY_NOT_RSA 106 -# define EVP_R_TOO_LARGE 164 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 -# define EVP_R_UNSUPPORTED_ALGORITHM 156 -# define EVP_R_UNSUPPORTED_CIPHER 107 -# define EVP_R_UNSUPPORTED_KEYLENGTH 123 -# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 -# define EVP_R_UNSUPPORTED_KEY_SIZE 108 -# define EVP_R_UNSUPPORTED_PRF 125 -# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 -# define EVP_R_UNSUPPORTED_SALT_TYPE 126 -# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 -# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 - -# ifdef __cplusplus -} -# endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/hmac.h b/ext/openssl/windows/x64/include/openssl/hmac.h deleted file mode 100644 index b8b55cda..00000000 --- a/ext/openssl/windows/x64/include/openssl/hmac.h +++ /dev/null @@ -1,109 +0,0 @@ -/* crypto/hmac/hmac.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H - -# include - -# ifdef OPENSSL_NO_HMAC -# error HMAC is disabled. -# endif - -# include - -# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct hmac_ctx_st { - const EVP_MD *md; - EVP_MD_CTX md_ctx; - EVP_MD_CTX i_ctx; - EVP_MD_CTX o_ctx; - unsigned int key_length; - unsigned char key[HMAC_MAX_MD_CBLOCK]; -} HMAC_CTX; - -# define HMAC_size(e) (EVP_MD_size((e)->md)) - -void HMAC_CTX_init(HMAC_CTX *ctx); -void HMAC_CTX_cleanup(HMAC_CTX *ctx); - -/* deprecated */ -# define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) - -/* deprecated */ -int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md); -int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); -int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); -unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); - -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/idea.h b/ext/openssl/windows/x64/include/openssl/idea.h deleted file mode 100644 index 60759840..00000000 --- a/ext/openssl/windows/x64/include/openssl/idea.h +++ /dev/null @@ -1,105 +0,0 @@ -/* crypto/idea/idea.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H - -# include /* IDEA_INT, OPENSSL_NO_IDEA */ - -# ifdef OPENSSL_NO_IDEA -# error IDEA is disabled. -# endif - -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct idea_key_st { - IDEA_INT data[9][6]; -} IDEA_KEY_SCHEDULE; - -const char *idea_options(void); -void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -# ifdef OPENSSL_FIPS -void private_idea_set_encrypt_key(const unsigned char *key, - IDEA_KEY_SCHEDULE *ks); -# endif -void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void idea_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void idea_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void idea_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/krb5_asn.h b/ext/openssl/windows/x64/include/openssl/krb5_asn.h deleted file mode 100644 index 9cf5a26d..00000000 --- a/ext/openssl/windows/x64/include/openssl/krb5_asn.h +++ /dev/null @@ -1,240 +0,0 @@ -/* krb5_asn.h */ -/* - * Written by Vern Staats for the OpenSSL project, ** - * using ocsp/{*.h,*asn*.c} as a starting point - */ - -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_KRB5_ASN_H -# define HEADER_KRB5_ASN_H - -/* - * #include - */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * ASN.1 from Kerberos RFC 1510 - */ - -/*- EncryptedData ::= SEQUENCE { - * etype[0] INTEGER, -- EncryptionType - * kvno[1] INTEGER OPTIONAL, - * cipher[2] OCTET STRING -- ciphertext - * } - */ -typedef struct krb5_encdata_st { - ASN1_INTEGER *etype; - ASN1_INTEGER *kvno; - ASN1_OCTET_STRING *cipher; -} KRB5_ENCDATA; - -DECLARE_STACK_OF(KRB5_ENCDATA) - -/*- PrincipalName ::= SEQUENCE { - * name-type[0] INTEGER, - * name-string[1] SEQUENCE OF GeneralString - * } - */ -typedef struct krb5_princname_st { - ASN1_INTEGER *nametype; - STACK_OF(ASN1_GENERALSTRING) *namestring; -} KRB5_PRINCNAME; - -DECLARE_STACK_OF(KRB5_PRINCNAME) - -/*- Ticket ::= [APPLICATION 1] SEQUENCE { - * tkt-vno[0] INTEGER, - * realm[1] Realm, - * sname[2] PrincipalName, - * enc-part[3] EncryptedData - * } - */ -typedef struct krb5_tktbody_st { - ASN1_INTEGER *tktvno; - ASN1_GENERALSTRING *realm; - KRB5_PRINCNAME *sname; - KRB5_ENCDATA *encdata; -} KRB5_TKTBODY; - -typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET; -DECLARE_STACK_OF(KRB5_TKTBODY) - -/*- AP-REQ ::= [APPLICATION 14] SEQUENCE { - * pvno[0] INTEGER, - * msg-type[1] INTEGER, - * ap-options[2] APOptions, - * ticket[3] Ticket, - * authenticator[4] EncryptedData - * } - * - * APOptions ::= BIT STRING { - * reserved(0), use-session-key(1), mutual-required(2) } - */ -typedef struct krb5_ap_req_st { - ASN1_INTEGER *pvno; - ASN1_INTEGER *msgtype; - ASN1_BIT_STRING *apoptions; - KRB5_TICKET *ticket; - KRB5_ENCDATA *authenticator; -} KRB5_APREQBODY; - -typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ; -DECLARE_STACK_OF(KRB5_APREQBODY) - -/* Authenticator Stuff */ - -/*- Checksum ::= SEQUENCE { - * cksumtype[0] INTEGER, - * checksum[1] OCTET STRING - * } - */ -typedef struct krb5_checksum_st { - ASN1_INTEGER *ctype; - ASN1_OCTET_STRING *checksum; -} KRB5_CHECKSUM; - -DECLARE_STACK_OF(KRB5_CHECKSUM) - -/*- EncryptionKey ::= SEQUENCE { - * keytype[0] INTEGER, - * keyvalue[1] OCTET STRING - * } - */ -typedef struct krb5_encryptionkey_st { - ASN1_INTEGER *ktype; - ASN1_OCTET_STRING *keyvalue; -} KRB5_ENCKEY; - -DECLARE_STACK_OF(KRB5_ENCKEY) - -/*- AuthorizationData ::= SEQUENCE OF SEQUENCE { - * ad-type[0] INTEGER, - * ad-data[1] OCTET STRING - * } - */ -typedef struct krb5_authorization_st { - ASN1_INTEGER *adtype; - ASN1_OCTET_STRING *addata; -} KRB5_AUTHDATA; - -DECLARE_STACK_OF(KRB5_AUTHDATA) - -/*- -- Unencrypted authenticator - * Authenticator ::= [APPLICATION 2] SEQUENCE { - * authenticator-vno[0] INTEGER, - * crealm[1] Realm, - * cname[2] PrincipalName, - * cksum[3] Checksum OPTIONAL, - * cusec[4] INTEGER, - * ctime[5] KerberosTime, - * subkey[6] EncryptionKey OPTIONAL, - * seq-number[7] INTEGER OPTIONAL, - * authorization-data[8] AuthorizationData OPTIONAL - * } - */ -typedef struct krb5_authenticator_st { - ASN1_INTEGER *avno; - ASN1_GENERALSTRING *crealm; - KRB5_PRINCNAME *cname; - KRB5_CHECKSUM *cksum; - ASN1_INTEGER *cusec; - ASN1_GENERALIZEDTIME *ctime; - KRB5_ENCKEY *subkey; - ASN1_INTEGER *seqnum; - KRB5_AUTHDATA *authorization; -} KRB5_AUTHENTBODY; - -typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT; -DECLARE_STACK_OF(KRB5_AUTHENTBODY) - -/*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) = - * type *name##_new(void); - * void name##_free(type *a); - * DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) = - * DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) = - * type *d2i_##name(type **a, const unsigned char **in, long len); - * int i2d_##name(type *a, unsigned char **out); - * DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it - */ - -DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA) -DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME) -DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_TICKET) -DECLARE_ASN1_FUNCTIONS(KRB5_APREQ) - -DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM) -DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT) - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/kssl.h b/ext/openssl/windows/x64/include/openssl/kssl.h deleted file mode 100644 index ae8a51f4..00000000 --- a/ext/openssl/windows/x64/include/openssl/kssl.h +++ /dev/null @@ -1,197 +0,0 @@ -/* ssl/kssl.h */ -/* - * Written by Vern Staats for the OpenSSL project - * 2000. project 2000. - */ -/* ==================================================================== - * Copyright (c) 2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - ** 19990701 VRS Started. - */ - -#ifndef KSSL_H -# define KSSL_H - -# include - -# ifndef OPENSSL_NO_KRB5 - -# include -# include -# include -# ifdef OPENSSL_SYS_WIN32 -/* - * These can sometimes get redefined indirectly by krb5 header files after - * they get undefed in ossl_typ.h - */ -# undef X509_NAME -# undef X509_EXTENSIONS -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Depending on which KRB5 implementation used, some types from - * the other may be missing. Resolve that here and now - */ -# ifdef KRB5_HEIMDAL -typedef unsigned char krb5_octet; -# define FAR -# else - -# ifndef FAR -# define FAR -# endif - -# endif - -/*- - * Uncomment this to debug kssl problems or - * to trace usage of the Kerberos session key - * - * #define KSSL_DEBUG - */ - -# ifndef KRB5SVC -# define KRB5SVC "host" -# endif - -# ifndef KRB5KEYTAB -# define KRB5KEYTAB "/etc/krb5.keytab" -# endif - -# ifndef KRB5SENDAUTH -# define KRB5SENDAUTH 1 -# endif - -# ifndef KRB5CHECKAUTH -# define KRB5CHECKAUTH 1 -# endif - -# ifndef KSSL_CLOCKSKEW -# define KSSL_CLOCKSKEW 300; -# endif - -# define KSSL_ERR_MAX 255 -typedef struct kssl_err_st { - int reason; - char text[KSSL_ERR_MAX + 1]; -} KSSL_ERR; - -/*- Context for passing - * (1) Kerberos session key to SSL, and - * (2) Config data between application and SSL lib - */ -typedef struct kssl_ctx_st { - /* used by: disposition: */ - char *service_name; /* C,S default ok (kssl) */ - char *service_host; /* C input, REQUIRED */ - char *client_princ; /* S output from krb5 ticket */ - char *keytab_file; /* S NULL (/etc/krb5.keytab) */ - char *cred_cache; /* C NULL (default) */ - krb5_enctype enctype; - int length; - krb5_octet FAR *key; -} KSSL_CTX; - -# define KSSL_CLIENT 1 -# define KSSL_SERVER 2 -# define KSSL_SERVICE 3 -# define KSSL_KEYTAB 4 - -# define KSSL_CTX_OK 0 -# define KSSL_CTX_ERR 1 -# define KSSL_NOMEM 2 - -/* Public (for use by applications that use OpenSSL with Kerberos 5 support */ -krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); -KSSL_CTX *kssl_ctx_new(void); -KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); -void kssl_ctx_show(KSSL_CTX *kssl_ctx); -krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, - krb5_data *realm, krb5_data *entity, - int nentities); -krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, - krb5_data *authenp, KSSL_ERR *kssl_err); -krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, - krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); -krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); -void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); -void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); -krb5_error_code kssl_build_principal_2(krb5_context context, - krb5_principal *princ, int rlen, - const char *realm, int slen, - const char *svc, int hlen, - const char *host); -krb5_error_code kssl_validate_times(krb5_timestamp atime, - krb5_ticket_times *ttimes); -krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, - krb5_timestamp *atimep, - KSSL_ERR *kssl_err); -unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); - -void SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx); -KSSL_CTX *SSL_get0_kssl_ctx(SSL *s); -char *kssl_ctx_get0_client_princ(KSSL_CTX *kctx); - -#ifdef __cplusplus -} -#endif -# endif /* OPENSSL_NO_KRB5 */ -#endif /* KSSL_H */ diff --git a/ext/openssl/windows/x64/include/openssl/lhash.h b/ext/openssl/windows/x64/include/openssl/lhash.h deleted file mode 100644 index b6c328bf..00000000 --- a/ext/openssl/windows/x64/include/openssl/lhash.h +++ /dev/null @@ -1,240 +0,0 @@ -/* crypto/lhash/lhash.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -/* - * Header for dynamic hash table routines Author - Eric Young - */ - -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H - -# include -# ifndef OPENSSL_NO_FP_API -# include -# endif - -# ifndef OPENSSL_NO_BIO -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct lhash_node_st { - void *data; - struct lhash_node_st *next; -# ifndef OPENSSL_NO_HASH_COMP - unsigned long hash; -# endif -} LHASH_NODE; - -typedef int (*LHASH_COMP_FN_TYPE) (const void *, const void *); -typedef unsigned long (*LHASH_HASH_FN_TYPE) (const void *); -typedef void (*LHASH_DOALL_FN_TYPE) (void *); -typedef void (*LHASH_DOALL_ARG_FN_TYPE) (void *, void *); - -/* - * Macros for declaring and implementing type-safe wrappers for LHASH - * callbacks. This way, callbacks can be provided to LHASH structures without - * function pointer casting and the macro-defined callbacks provide - * per-variable casting before deferring to the underlying type-specific - * callbacks. NB: It is possible to place a "static" in front of both the - * DECLARE and IMPLEMENT macros if the functions are strictly internal. - */ - -/* First: "hash" functions */ -# define DECLARE_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *); -# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *arg) { \ - const o_type *a = arg; \ - return name##_hash(a); } -# define LHASH_HASH_FN(name) name##_LHASH_HASH - -/* Second: "compare" functions */ -# define DECLARE_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *, const void *); -# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ - const o_type *a = arg1; \ - const o_type *b = arg2; \ - return name##_cmp(a,b); } -# define LHASH_COMP_FN(name) name##_LHASH_COMP - -/* Third: "doall" functions */ -# define DECLARE_LHASH_DOALL_FN(name, o_type) \ - void name##_LHASH_DOALL(void *); -# define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \ - void name##_LHASH_DOALL(void *arg) { \ - o_type *a = arg; \ - name##_doall(a); } -# define LHASH_DOALL_FN(name) name##_LHASH_DOALL - -/* Fourth: "doall_arg" functions */ -# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *, void *); -# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ - o_type *a = arg1; \ - a_type *b = arg2; \ - name##_doall_arg(a, b); } -# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG - -typedef struct lhash_st { - LHASH_NODE **b; - LHASH_COMP_FN_TYPE comp; - LHASH_HASH_FN_TYPE hash; - unsigned int num_nodes; - unsigned int num_alloc_nodes; - unsigned int p; - unsigned int pmax; - unsigned long up_load; /* load times 256 */ - unsigned long down_load; /* load times 256 */ - unsigned long num_items; - unsigned long num_expands; - unsigned long num_expand_reallocs; - unsigned long num_contracts; - unsigned long num_contract_reallocs; - unsigned long num_hash_calls; - unsigned long num_comp_calls; - unsigned long num_insert; - unsigned long num_replace; - unsigned long num_delete; - unsigned long num_no_delete; - unsigned long num_retrieve; - unsigned long num_retrieve_miss; - unsigned long num_hash_comps; - int error; -} _LHASH; /* Do not use _LHASH directly, use LHASH_OF - * and friends */ - -# define LH_LOAD_MULT 256 - -/* - * Indicates a malloc() error in the last call, this is only bad in - * lh_insert(). - */ -# define lh_error(lh) ((lh)->error) - -_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); -void lh_free(_LHASH *lh); -void *lh_insert(_LHASH *lh, void *data); -void *lh_delete(_LHASH *lh, const void *data); -void *lh_retrieve(_LHASH *lh, const void *data); -void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func); -void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); -unsigned long lh_strhash(const char *c); -unsigned long lh_num_items(const _LHASH *lh); - -# ifndef OPENSSL_NO_FP_API -void lh_stats(const _LHASH *lh, FILE *out); -void lh_node_stats(const _LHASH *lh, FILE *out); -void lh_node_usage_stats(const _LHASH *lh, FILE *out); -# endif - -# ifndef OPENSSL_NO_BIO -void lh_stats_bio(const _LHASH *lh, BIO *out); -void lh_node_stats_bio(const _LHASH *lh, BIO *out); -void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out); -# endif - -/* Type checking... */ - -# define LHASH_OF(type) struct lhash_st_##type - -# define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; } - -# define CHECKED_LHASH_OF(type,lh) \ - ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh)) - -/* Define wrapper functions. */ -# define LHM_lh_new(type, name) \ - ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name))) -# define LHM_lh_error(type, lh) \ - lh_error(CHECKED_LHASH_OF(type,lh)) -# define LHM_lh_insert(type, lh, inst) \ - ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \ - CHECKED_PTR_OF(type, inst))) -# define LHM_lh_retrieve(type, lh, inst) \ - ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \ - CHECKED_PTR_OF(type, inst))) -# define LHM_lh_delete(type, lh, inst) \ - ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \ - CHECKED_PTR_OF(type, inst))) -# define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn) -# define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \ - lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg)) -# define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh)) -# define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load) -# define LHM_lh_node_stats_bio(type, lh, out) \ - lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out) -# define LHM_lh_node_usage_stats_bio(type, lh, out) \ - lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out) -# define LHM_lh_stats_bio(type, lh, out) \ - lh_stats_bio(CHECKED_LHASH_OF(type, lh), out) -# define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh)) - -DECLARE_LHASH_OF(OPENSSL_STRING); -DECLARE_LHASH_OF(OPENSSL_CSTRING); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/md4.h b/ext/openssl/windows/x64/include/openssl/md4.h deleted file mode 100644 index 11fd7129..00000000 --- a/ext/openssl/windows/x64/include/openssl/md4.h +++ /dev/null @@ -1,119 +0,0 @@ -/* crypto/md4/md4.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_MD4_H -# define HEADER_MD4_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_MD4 -# error MD4 is disabled. -# endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD4_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! MD4_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define MD4_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define MD4_LONG unsigned long -# define MD4_LONG_LOG2 3 -/* - * _CRAY note. I could declare short, but I have no idea what impact - * does it have on performance on none-T3E machines. I could declare - * int, but at least on C90 sizeof(int) can be chosen at compile time. - * So I've chosen long... - * - */ -# else -# define MD4_LONG unsigned int -# endif - -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 - -typedef struct MD4state_st { - MD4_LONG A, B, C, D; - MD4_LONG Nl, Nh; - MD4_LONG data[MD4_LBLOCK]; - unsigned int num; -} MD4_CTX; - -# ifdef OPENSSL_FIPS -int private_MD4_Init(MD4_CTX *c); -# endif -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/md5.h b/ext/openssl/windows/x64/include/openssl/md5.h deleted file mode 100644 index 2659038a..00000000 --- a/ext/openssl/windows/x64/include/openssl/md5.h +++ /dev/null @@ -1,119 +0,0 @@ -/* crypto/md5/md5.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_MD5_H -# define HEADER_MD5_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_MD5 -# error MD5 is disabled. -# endif - -/* - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! MD5_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define MD5_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define MD5_LONG unsigned long -# define MD5_LONG_LOG2 3 -/* - * _CRAY note. I could declare short, but I have no idea what impact - * does it have on performance on none-T3E machines. I could declare - * int, but at least on C90 sizeof(int) can be chosen at compile time. - * So I've chosen long... - * - */ -# else -# define MD5_LONG unsigned int -# endif - -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 - -typedef struct MD5state_st { - MD5_LONG A, B, C, D; - MD5_LONG Nl, Nh; - MD5_LONG data[MD5_LBLOCK]; - unsigned int num; -} MD5_CTX; - -# ifdef OPENSSL_FIPS -int private_MD5_Init(MD5_CTX *c); -# endif -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/mdc2.h b/ext/openssl/windows/x64/include/openssl/mdc2.h deleted file mode 100644 index 7efe53bc..00000000 --- a/ext/openssl/windows/x64/include/openssl/mdc2.h +++ /dev/null @@ -1,94 +0,0 @@ -/* crypto/mdc2/mdc2.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_MDC2 -# error MDC2 is disabled. -# endif - -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 - -typedef struct mdc2_ctx_st { - unsigned int num; - unsigned char data[MDC2_BLOCK]; - DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ -} MDC2_CTX; - -# ifdef OPENSSL_FIPS -int private_MDC2_Init(MDC2_CTX *c); -# endif -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/modes.h b/ext/openssl/windows/x64/include/openssl/modes.h deleted file mode 100644 index fd488499..00000000 --- a/ext/openssl/windows/x64/include/openssl/modes.h +++ /dev/null @@ -1,163 +0,0 @@ -/* ==================================================================== - * Copyright (c) 2008 The OpenSSL Project. All rights reserved. - * - * Rights for redistribution and usage in source and binary - * forms are granted according to the OpenSSL license. - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif -typedef void (*block128_f) (const unsigned char in[16], - unsigned char out[16], const void *key); - -typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int enc); - -typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16]); - -typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16], - unsigned char cmac[16]); - -void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); -void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); - -void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], unsigned int *num, - block128_f block); - -void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], - unsigned int *num, ctr128_f ctr); - -void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - block128_f block); - -void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, - size_t bits, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -typedef struct gcm128_context GCM128_CONTEXT; - -GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); -void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); -void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, - size_t len); -int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); - -typedef struct ccm128_context CCM128_CONTEXT; - -void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, - unsigned int M, unsigned int L, void *key, - block128_f block); -int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, - size_t nlen, size_t mlen); -void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, - size_t alen); -int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); - -typedef struct xts128_context XTS128_CONTEXT; - -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -#ifdef __cplusplus -} -#endif diff --git a/ext/openssl/windows/x64/include/openssl/obj_mac.h b/ext/openssl/windows/x64/include/openssl/obj_mac.h deleted file mode 100644 index 779c309b..00000000 --- a/ext/openssl/windows/x64/include/openssl/obj_mac.h +++ /dev/null @@ -1,4194 +0,0 @@ -/* crypto/objects/obj_mac.h */ - -/* - * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following - * command: perl objects.pl objects.txt obj_mac.num obj_mac.h - */ - -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#define SN_undef "UNDEF" -#define LN_undef "undefined" -#define NID_undef 0 -#define OBJ_undef 0L - -#define SN_itu_t "ITU-T" -#define LN_itu_t "itu-t" -#define NID_itu_t 645 -#define OBJ_itu_t 0L - -#define NID_ccitt 404 -#define OBJ_ccitt OBJ_itu_t - -#define SN_iso "ISO" -#define LN_iso "iso" -#define NID_iso 181 -#define OBJ_iso 1L - -#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" -#define LN_joint_iso_itu_t "joint-iso-itu-t" -#define NID_joint_iso_itu_t 646 -#define OBJ_joint_iso_itu_t 2L - -#define NID_joint_iso_ccitt 393 -#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t - -#define SN_member_body "member-body" -#define LN_member_body "ISO Member Body" -#define NID_member_body 182 -#define OBJ_member_body OBJ_iso,2L - -#define SN_identified_organization "identified-organization" -#define NID_identified_organization 676 -#define OBJ_identified_organization OBJ_iso,3L - -#define SN_hmac_md5 "HMAC-MD5" -#define LN_hmac_md5 "hmac-md5" -#define NID_hmac_md5 780 -#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L - -#define SN_hmac_sha1 "HMAC-SHA1" -#define LN_hmac_sha1 "hmac-sha1" -#define NID_hmac_sha1 781 -#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L - -#define SN_certicom_arc "certicom-arc" -#define NID_certicom_arc 677 -#define OBJ_certicom_arc OBJ_identified_organization,132L - -#define SN_international_organizations "international-organizations" -#define LN_international_organizations "International Organizations" -#define NID_international_organizations 647 -#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L - -#define SN_wap "wap" -#define NID_wap 678 -#define OBJ_wap OBJ_international_organizations,43L - -#define SN_wap_wsg "wap-wsg" -#define NID_wap_wsg 679 -#define OBJ_wap_wsg OBJ_wap,1L - -#define SN_selected_attribute_types "selected-attribute-types" -#define LN_selected_attribute_types "Selected Attribute Types" -#define NID_selected_attribute_types 394 -#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L - -#define SN_clearance "clearance" -#define NID_clearance 395 -#define OBJ_clearance OBJ_selected_attribute_types,55L - -#define SN_ISO_US "ISO-US" -#define LN_ISO_US "ISO US Member Body" -#define NID_ISO_US 183 -#define OBJ_ISO_US OBJ_member_body,840L - -#define SN_X9_57 "X9-57" -#define LN_X9_57 "X9.57" -#define NID_X9_57 184 -#define OBJ_X9_57 OBJ_ISO_US,10040L - -#define SN_X9cm "X9cm" -#define LN_X9cm "X9.57 CM ?" -#define NID_X9cm 185 -#define OBJ_X9cm OBJ_X9_57,4L - -#define SN_dsa "DSA" -#define LN_dsa "dsaEncryption" -#define NID_dsa 116 -#define OBJ_dsa OBJ_X9cm,1L - -#define SN_dsaWithSHA1 "DSA-SHA1" -#define LN_dsaWithSHA1 "dsaWithSHA1" -#define NID_dsaWithSHA1 113 -#define OBJ_dsaWithSHA1 OBJ_X9cm,3L - -#define SN_ansi_X9_62 "ansi-X9-62" -#define LN_ansi_X9_62 "ANSI X9.62" -#define NID_ansi_X9_62 405 -#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L - -#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L - -#define SN_X9_62_prime_field "prime-field" -#define NID_X9_62_prime_field 406 -#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L - -#define SN_X9_62_characteristic_two_field "characteristic-two-field" -#define NID_X9_62_characteristic_two_field 407 -#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L - -#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" -#define NID_X9_62_id_characteristic_two_basis 680 -#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L - -#define SN_X9_62_onBasis "onBasis" -#define NID_X9_62_onBasis 681 -#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L - -#define SN_X9_62_tpBasis "tpBasis" -#define NID_X9_62_tpBasis 682 -#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L - -#define SN_X9_62_ppBasis "ppBasis" -#define NID_X9_62_ppBasis 683 -#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L - -#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L - -#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" -#define NID_X9_62_id_ecPublicKey 408 -#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L - -#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L - -#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L - -#define SN_X9_62_c2pnb163v1 "c2pnb163v1" -#define NID_X9_62_c2pnb163v1 684 -#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L - -#define SN_X9_62_c2pnb163v2 "c2pnb163v2" -#define NID_X9_62_c2pnb163v2 685 -#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L - -#define SN_X9_62_c2pnb163v3 "c2pnb163v3" -#define NID_X9_62_c2pnb163v3 686 -#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L - -#define SN_X9_62_c2pnb176v1 "c2pnb176v1" -#define NID_X9_62_c2pnb176v1 687 -#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L - -#define SN_X9_62_c2tnb191v1 "c2tnb191v1" -#define NID_X9_62_c2tnb191v1 688 -#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L - -#define SN_X9_62_c2tnb191v2 "c2tnb191v2" -#define NID_X9_62_c2tnb191v2 689 -#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L - -#define SN_X9_62_c2tnb191v3 "c2tnb191v3" -#define NID_X9_62_c2tnb191v3 690 -#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L - -#define SN_X9_62_c2onb191v4 "c2onb191v4" -#define NID_X9_62_c2onb191v4 691 -#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L - -#define SN_X9_62_c2onb191v5 "c2onb191v5" -#define NID_X9_62_c2onb191v5 692 -#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L - -#define SN_X9_62_c2pnb208w1 "c2pnb208w1" -#define NID_X9_62_c2pnb208w1 693 -#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L - -#define SN_X9_62_c2tnb239v1 "c2tnb239v1" -#define NID_X9_62_c2tnb239v1 694 -#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L - -#define SN_X9_62_c2tnb239v2 "c2tnb239v2" -#define NID_X9_62_c2tnb239v2 695 -#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L - -#define SN_X9_62_c2tnb239v3 "c2tnb239v3" -#define NID_X9_62_c2tnb239v3 696 -#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L - -#define SN_X9_62_c2onb239v4 "c2onb239v4" -#define NID_X9_62_c2onb239v4 697 -#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L - -#define SN_X9_62_c2onb239v5 "c2onb239v5" -#define NID_X9_62_c2onb239v5 698 -#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L - -#define SN_X9_62_c2pnb272w1 "c2pnb272w1" -#define NID_X9_62_c2pnb272w1 699 -#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L - -#define SN_X9_62_c2pnb304w1 "c2pnb304w1" -#define NID_X9_62_c2pnb304w1 700 -#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L - -#define SN_X9_62_c2tnb359v1 "c2tnb359v1" -#define NID_X9_62_c2tnb359v1 701 -#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L - -#define SN_X9_62_c2pnb368w1 "c2pnb368w1" -#define NID_X9_62_c2pnb368w1 702 -#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L - -#define SN_X9_62_c2tnb431r1 "c2tnb431r1" -#define NID_X9_62_c2tnb431r1 703 -#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L - -#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L - -#define SN_X9_62_prime192v1 "prime192v1" -#define NID_X9_62_prime192v1 409 -#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L - -#define SN_X9_62_prime192v2 "prime192v2" -#define NID_X9_62_prime192v2 410 -#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L - -#define SN_X9_62_prime192v3 "prime192v3" -#define NID_X9_62_prime192v3 411 -#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L - -#define SN_X9_62_prime239v1 "prime239v1" -#define NID_X9_62_prime239v1 412 -#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L - -#define SN_X9_62_prime239v2 "prime239v2" -#define NID_X9_62_prime239v2 413 -#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L - -#define SN_X9_62_prime239v3 "prime239v3" -#define NID_X9_62_prime239v3 414 -#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L - -#define SN_X9_62_prime256v1 "prime256v1" -#define NID_X9_62_prime256v1 415 -#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L - -#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L - -#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" -#define NID_ecdsa_with_SHA1 416 -#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L - -#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" -#define NID_ecdsa_with_Recommended 791 -#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L - -#define SN_ecdsa_with_Specified "ecdsa-with-Specified" -#define NID_ecdsa_with_Specified 792 -#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L - -#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" -#define NID_ecdsa_with_SHA224 793 -#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L - -#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" -#define NID_ecdsa_with_SHA256 794 -#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L - -#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" -#define NID_ecdsa_with_SHA384 795 -#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L - -#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" -#define NID_ecdsa_with_SHA512 796 -#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L - -#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L - -#define SN_secp112r1 "secp112r1" -#define NID_secp112r1 704 -#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L - -#define SN_secp112r2 "secp112r2" -#define NID_secp112r2 705 -#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L - -#define SN_secp128r1 "secp128r1" -#define NID_secp128r1 706 -#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L - -#define SN_secp128r2 "secp128r2" -#define NID_secp128r2 707 -#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L - -#define SN_secp160k1 "secp160k1" -#define NID_secp160k1 708 -#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L - -#define SN_secp160r1 "secp160r1" -#define NID_secp160r1 709 -#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L - -#define SN_secp160r2 "secp160r2" -#define NID_secp160r2 710 -#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L - -#define SN_secp192k1 "secp192k1" -#define NID_secp192k1 711 -#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L - -#define SN_secp224k1 "secp224k1" -#define NID_secp224k1 712 -#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L - -#define SN_secp224r1 "secp224r1" -#define NID_secp224r1 713 -#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L - -#define SN_secp256k1 "secp256k1" -#define NID_secp256k1 714 -#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L - -#define SN_secp384r1 "secp384r1" -#define NID_secp384r1 715 -#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L - -#define SN_secp521r1 "secp521r1" -#define NID_secp521r1 716 -#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L - -#define SN_sect113r1 "sect113r1" -#define NID_sect113r1 717 -#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L - -#define SN_sect113r2 "sect113r2" -#define NID_sect113r2 718 -#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L - -#define SN_sect131r1 "sect131r1" -#define NID_sect131r1 719 -#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L - -#define SN_sect131r2 "sect131r2" -#define NID_sect131r2 720 -#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L - -#define SN_sect163k1 "sect163k1" -#define NID_sect163k1 721 -#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L - -#define SN_sect163r1 "sect163r1" -#define NID_sect163r1 722 -#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L - -#define SN_sect163r2 "sect163r2" -#define NID_sect163r2 723 -#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L - -#define SN_sect193r1 "sect193r1" -#define NID_sect193r1 724 -#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L - -#define SN_sect193r2 "sect193r2" -#define NID_sect193r2 725 -#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L - -#define SN_sect233k1 "sect233k1" -#define NID_sect233k1 726 -#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L - -#define SN_sect233r1 "sect233r1" -#define NID_sect233r1 727 -#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L - -#define SN_sect239k1 "sect239k1" -#define NID_sect239k1 728 -#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L - -#define SN_sect283k1 "sect283k1" -#define NID_sect283k1 729 -#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L - -#define SN_sect283r1 "sect283r1" -#define NID_sect283r1 730 -#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L - -#define SN_sect409k1 "sect409k1" -#define NID_sect409k1 731 -#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L - -#define SN_sect409r1 "sect409r1" -#define NID_sect409r1 732 -#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L - -#define SN_sect571k1 "sect571k1" -#define NID_sect571k1 733 -#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L - -#define SN_sect571r1 "sect571r1" -#define NID_sect571r1 734 -#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L - -#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L - -#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" -#define NID_wap_wsg_idm_ecid_wtls1 735 -#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L - -#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" -#define NID_wap_wsg_idm_ecid_wtls3 736 -#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L - -#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" -#define NID_wap_wsg_idm_ecid_wtls4 737 -#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L - -#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" -#define NID_wap_wsg_idm_ecid_wtls5 738 -#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L - -#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" -#define NID_wap_wsg_idm_ecid_wtls6 739 -#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L - -#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" -#define NID_wap_wsg_idm_ecid_wtls7 740 -#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L - -#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" -#define NID_wap_wsg_idm_ecid_wtls8 741 -#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L - -#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" -#define NID_wap_wsg_idm_ecid_wtls9 742 -#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L - -#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" -#define NID_wap_wsg_idm_ecid_wtls10 743 -#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L - -#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" -#define NID_wap_wsg_idm_ecid_wtls11 744 -#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L - -#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" -#define NID_wap_wsg_idm_ecid_wtls12 745 -#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L - -#define SN_cast5_cbc "CAST5-CBC" -#define LN_cast5_cbc "cast5-cbc" -#define NID_cast5_cbc 108 -#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L - -#define SN_cast5_ecb "CAST5-ECB" -#define LN_cast5_ecb "cast5-ecb" -#define NID_cast5_ecb 109 - -#define SN_cast5_cfb64 "CAST5-CFB" -#define LN_cast5_cfb64 "cast5-cfb" -#define NID_cast5_cfb64 110 - -#define SN_cast5_ofb64 "CAST5-OFB" -#define LN_cast5_ofb64 "cast5-ofb" -#define NID_cast5_ofb64 111 - -#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -#define NID_pbeWithMD5AndCast5_CBC 112 -#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L - -#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" -#define LN_id_PasswordBasedMAC "password based MAC" -#define NID_id_PasswordBasedMAC 782 -#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L - -#define SN_id_DHBasedMac "id-DHBasedMac" -#define LN_id_DHBasedMac "Diffie-Hellman based MAC" -#define NID_id_DHBasedMac 783 -#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L - -#define SN_rsadsi "rsadsi" -#define LN_rsadsi "RSA Data Security, Inc." -#define NID_rsadsi 1 -#define OBJ_rsadsi OBJ_ISO_US,113549L - -#define SN_pkcs "pkcs" -#define LN_pkcs "RSA Data Security, Inc. PKCS" -#define NID_pkcs 2 -#define OBJ_pkcs OBJ_rsadsi,1L - -#define SN_pkcs1 "pkcs1" -#define NID_pkcs1 186 -#define OBJ_pkcs1 OBJ_pkcs,1L - -#define LN_rsaEncryption "rsaEncryption" -#define NID_rsaEncryption 6 -#define OBJ_rsaEncryption OBJ_pkcs1,1L - -#define SN_md2WithRSAEncryption "RSA-MD2" -#define LN_md2WithRSAEncryption "md2WithRSAEncryption" -#define NID_md2WithRSAEncryption 7 -#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L - -#define SN_md4WithRSAEncryption "RSA-MD4" -#define LN_md4WithRSAEncryption "md4WithRSAEncryption" -#define NID_md4WithRSAEncryption 396 -#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L - -#define SN_md5WithRSAEncryption "RSA-MD5" -#define LN_md5WithRSAEncryption "md5WithRSAEncryption" -#define NID_md5WithRSAEncryption 8 -#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L - -#define SN_sha1WithRSAEncryption "RSA-SHA1" -#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -#define NID_sha1WithRSAEncryption 65 -#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L - -#define SN_rsaesOaep "RSAES-OAEP" -#define LN_rsaesOaep "rsaesOaep" -#define NID_rsaesOaep 919 -#define OBJ_rsaesOaep OBJ_pkcs1,7L - -#define SN_mgf1 "MGF1" -#define LN_mgf1 "mgf1" -#define NID_mgf1 911 -#define OBJ_mgf1 OBJ_pkcs1,8L - -#define SN_pSpecified "PSPECIFIED" -#define LN_pSpecified "pSpecified" -#define NID_pSpecified 935 -#define OBJ_pSpecified OBJ_pkcs1,9L - -#define SN_rsassaPss "RSASSA-PSS" -#define LN_rsassaPss "rsassaPss" -#define NID_rsassaPss 912 -#define OBJ_rsassaPss OBJ_pkcs1,10L - -#define SN_sha256WithRSAEncryption "RSA-SHA256" -#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" -#define NID_sha256WithRSAEncryption 668 -#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L - -#define SN_sha384WithRSAEncryption "RSA-SHA384" -#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" -#define NID_sha384WithRSAEncryption 669 -#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L - -#define SN_sha512WithRSAEncryption "RSA-SHA512" -#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" -#define NID_sha512WithRSAEncryption 670 -#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L - -#define SN_sha224WithRSAEncryption "RSA-SHA224" -#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" -#define NID_sha224WithRSAEncryption 671 -#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L - -#define SN_pkcs3 "pkcs3" -#define NID_pkcs3 27 -#define OBJ_pkcs3 OBJ_pkcs,3L - -#define LN_dhKeyAgreement "dhKeyAgreement" -#define NID_dhKeyAgreement 28 -#define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -#define SN_pkcs5 "pkcs5" -#define NID_pkcs5 187 -#define OBJ_pkcs5 OBJ_pkcs,5L - -#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -#define NID_pbeWithMD2AndDES_CBC 9 -#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L - -#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -#define NID_pbeWithMD5AndDES_CBC 10 -#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L - -#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -#define NID_pbeWithMD2AndRC2_CBC 168 -#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L - -#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -#define NID_pbeWithMD5AndRC2_CBC 169 -#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L - -#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -#define NID_pbeWithSHA1AndDES_CBC 170 -#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L - -#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -#define NID_pbeWithSHA1AndRC2_CBC 68 -#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L - -#define LN_id_pbkdf2 "PBKDF2" -#define NID_id_pbkdf2 69 -#define OBJ_id_pbkdf2 OBJ_pkcs5,12L - -#define LN_pbes2 "PBES2" -#define NID_pbes2 161 -#define OBJ_pbes2 OBJ_pkcs5,13L - -#define LN_pbmac1 "PBMAC1" -#define NID_pbmac1 162 -#define OBJ_pbmac1 OBJ_pkcs5,14L - -#define SN_pkcs7 "pkcs7" -#define NID_pkcs7 20 -#define OBJ_pkcs7 OBJ_pkcs,7L - -#define LN_pkcs7_data "pkcs7-data" -#define NID_pkcs7_data 21 -#define OBJ_pkcs7_data OBJ_pkcs7,1L - -#define LN_pkcs7_signed "pkcs7-signedData" -#define NID_pkcs7_signed 22 -#define OBJ_pkcs7_signed OBJ_pkcs7,2L - -#define LN_pkcs7_enveloped "pkcs7-envelopedData" -#define NID_pkcs7_enveloped 23 -#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -#define NID_pkcs7_signedAndEnveloped 24 -#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -#define LN_pkcs7_digest "pkcs7-digestData" -#define NID_pkcs7_digest 25 -#define OBJ_pkcs7_digest OBJ_pkcs7,5L - -#define LN_pkcs7_encrypted "pkcs7-encryptedData" -#define NID_pkcs7_encrypted 26 -#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -#define SN_pkcs9 "pkcs9" -#define NID_pkcs9 47 -#define OBJ_pkcs9 OBJ_pkcs,9L - -#define LN_pkcs9_emailAddress "emailAddress" -#define NID_pkcs9_emailAddress 48 -#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -#define LN_pkcs9_unstructuredName "unstructuredName" -#define NID_pkcs9_unstructuredName 49 -#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -#define LN_pkcs9_contentType "contentType" -#define NID_pkcs9_contentType 50 -#define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -#define LN_pkcs9_messageDigest "messageDigest" -#define NID_pkcs9_messageDigest 51 -#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -#define LN_pkcs9_signingTime "signingTime" -#define NID_pkcs9_signingTime 52 -#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -#define LN_pkcs9_countersignature "countersignature" -#define NID_pkcs9_countersignature 53 -#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -#define LN_pkcs9_challengePassword "challengePassword" -#define NID_pkcs9_challengePassword 54 -#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -#define LN_pkcs9_unstructuredAddress "unstructuredAddress" -#define NID_pkcs9_unstructuredAddress 55 -#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -#define NID_pkcs9_extCertAttributes 56 -#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -#define SN_ext_req "extReq" -#define LN_ext_req "Extension Request" -#define NID_ext_req 172 -#define OBJ_ext_req OBJ_pkcs9,14L - -#define SN_SMIMECapabilities "SMIME-CAPS" -#define LN_SMIMECapabilities "S/MIME Capabilities" -#define NID_SMIMECapabilities 167 -#define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -#define SN_SMIME "SMIME" -#define LN_SMIME "S/MIME" -#define NID_SMIME 188 -#define OBJ_SMIME OBJ_pkcs9,16L - -#define SN_id_smime_mod "id-smime-mod" -#define NID_id_smime_mod 189 -#define OBJ_id_smime_mod OBJ_SMIME,0L - -#define SN_id_smime_ct "id-smime-ct" -#define NID_id_smime_ct 190 -#define OBJ_id_smime_ct OBJ_SMIME,1L - -#define SN_id_smime_aa "id-smime-aa" -#define NID_id_smime_aa 191 -#define OBJ_id_smime_aa OBJ_SMIME,2L - -#define SN_id_smime_alg "id-smime-alg" -#define NID_id_smime_alg 192 -#define OBJ_id_smime_alg OBJ_SMIME,3L - -#define SN_id_smime_cd "id-smime-cd" -#define NID_id_smime_cd 193 -#define OBJ_id_smime_cd OBJ_SMIME,4L - -#define SN_id_smime_spq "id-smime-spq" -#define NID_id_smime_spq 194 -#define OBJ_id_smime_spq OBJ_SMIME,5L - -#define SN_id_smime_cti "id-smime-cti" -#define NID_id_smime_cti 195 -#define OBJ_id_smime_cti OBJ_SMIME,6L - -#define SN_id_smime_mod_cms "id-smime-mod-cms" -#define NID_id_smime_mod_cms 196 -#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L - -#define SN_id_smime_mod_ess "id-smime-mod-ess" -#define NID_id_smime_mod_ess 197 -#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L - -#define SN_id_smime_mod_oid "id-smime-mod-oid" -#define NID_id_smime_mod_oid 198 -#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L - -#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" -#define NID_id_smime_mod_msg_v3 199 -#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L - -#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" -#define NID_id_smime_mod_ets_eSignature_88 200 -#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L - -#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" -#define NID_id_smime_mod_ets_eSignature_97 201 -#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L - -#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" -#define NID_id_smime_mod_ets_eSigPolicy_88 202 -#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L - -#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" -#define NID_id_smime_mod_ets_eSigPolicy_97 203 -#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L - -#define SN_id_smime_ct_receipt "id-smime-ct-receipt" -#define NID_id_smime_ct_receipt 204 -#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L - -#define SN_id_smime_ct_authData "id-smime-ct-authData" -#define NID_id_smime_ct_authData 205 -#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L - -#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" -#define NID_id_smime_ct_publishCert 206 -#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L - -#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" -#define NID_id_smime_ct_TSTInfo 207 -#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L - -#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" -#define NID_id_smime_ct_TDTInfo 208 -#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L - -#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" -#define NID_id_smime_ct_contentInfo 209 -#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L - -#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" -#define NID_id_smime_ct_DVCSRequestData 210 -#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L - -#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" -#define NID_id_smime_ct_DVCSResponseData 211 -#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L - -#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" -#define NID_id_smime_ct_compressedData 786 -#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L - -#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" -#define NID_id_ct_asciiTextWithCRLF 787 -#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L - -#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" -#define NID_id_smime_aa_receiptRequest 212 -#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L - -#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" -#define NID_id_smime_aa_securityLabel 213 -#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L - -#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" -#define NID_id_smime_aa_mlExpandHistory 214 -#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L - -#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" -#define NID_id_smime_aa_contentHint 215 -#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L - -#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" -#define NID_id_smime_aa_msgSigDigest 216 -#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L - -#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" -#define NID_id_smime_aa_encapContentType 217 -#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L - -#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" -#define NID_id_smime_aa_contentIdentifier 218 -#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L - -#define SN_id_smime_aa_macValue "id-smime-aa-macValue" -#define NID_id_smime_aa_macValue 219 -#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L - -#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" -#define NID_id_smime_aa_equivalentLabels 220 -#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L - -#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" -#define NID_id_smime_aa_contentReference 221 -#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L - -#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" -#define NID_id_smime_aa_encrypKeyPref 222 -#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L - -#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" -#define NID_id_smime_aa_signingCertificate 223 -#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L - -#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" -#define NID_id_smime_aa_smimeEncryptCerts 224 -#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L - -#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" -#define NID_id_smime_aa_timeStampToken 225 -#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L - -#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" -#define NID_id_smime_aa_ets_sigPolicyId 226 -#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L - -#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" -#define NID_id_smime_aa_ets_commitmentType 227 -#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L - -#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" -#define NID_id_smime_aa_ets_signerLocation 228 -#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L - -#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" -#define NID_id_smime_aa_ets_signerAttr 229 -#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L - -#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" -#define NID_id_smime_aa_ets_otherSigCert 230 -#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L - -#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" -#define NID_id_smime_aa_ets_contentTimestamp 231 -#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L - -#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" -#define NID_id_smime_aa_ets_CertificateRefs 232 -#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L - -#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" -#define NID_id_smime_aa_ets_RevocationRefs 233 -#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L - -#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" -#define NID_id_smime_aa_ets_certValues 234 -#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L - -#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" -#define NID_id_smime_aa_ets_revocationValues 235 -#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L - -#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" -#define NID_id_smime_aa_ets_escTimeStamp 236 -#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L - -#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" -#define NID_id_smime_aa_ets_certCRLTimestamp 237 -#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L - -#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" -#define NID_id_smime_aa_ets_archiveTimeStamp 238 -#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L - -#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" -#define NID_id_smime_aa_signatureType 239 -#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L - -#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" -#define NID_id_smime_aa_dvcs_dvc 240 -#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L - -#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" -#define NID_id_smime_alg_ESDHwith3DES 241 -#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L - -#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" -#define NID_id_smime_alg_ESDHwithRC2 242 -#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L - -#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" -#define NID_id_smime_alg_3DESwrap 243 -#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L - -#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" -#define NID_id_smime_alg_RC2wrap 244 -#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L - -#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" -#define NID_id_smime_alg_ESDH 245 -#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L - -#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" -#define NID_id_smime_alg_CMS3DESwrap 246 -#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L - -#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" -#define NID_id_smime_alg_CMSRC2wrap 247 -#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L - -#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" -#define NID_id_alg_PWRI_KEK 893 -#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L - -#define SN_id_smime_cd_ldap "id-smime-cd-ldap" -#define NID_id_smime_cd_ldap 248 -#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L - -#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" -#define NID_id_smime_spq_ets_sqt_uri 249 -#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L - -#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" -#define NID_id_smime_spq_ets_sqt_unotice 250 -#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L - -#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" -#define NID_id_smime_cti_ets_proofOfOrigin 251 -#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L - -#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" -#define NID_id_smime_cti_ets_proofOfReceipt 252 -#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L - -#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" -#define NID_id_smime_cti_ets_proofOfDelivery 253 -#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L - -#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" -#define NID_id_smime_cti_ets_proofOfSender 254 -#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L - -#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" -#define NID_id_smime_cti_ets_proofOfApproval 255 -#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L - -#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" -#define NID_id_smime_cti_ets_proofOfCreation 256 -#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L - -#define LN_friendlyName "friendlyName" -#define NID_friendlyName 156 -#define OBJ_friendlyName OBJ_pkcs9,20L - -#define LN_localKeyID "localKeyID" -#define NID_localKeyID 157 -#define OBJ_localKeyID OBJ_pkcs9,21L - -#define SN_ms_csp_name "CSPName" -#define LN_ms_csp_name "Microsoft CSP Name" -#define NID_ms_csp_name 417 -#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L - -#define SN_LocalKeySet "LocalKeySet" -#define LN_LocalKeySet "Microsoft Local Key set" -#define NID_LocalKeySet 856 -#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L - -#define OBJ_certTypes OBJ_pkcs9,22L - -#define LN_x509Certificate "x509Certificate" -#define NID_x509Certificate 158 -#define OBJ_x509Certificate OBJ_certTypes,1L - -#define LN_sdsiCertificate "sdsiCertificate" -#define NID_sdsiCertificate 159 -#define OBJ_sdsiCertificate OBJ_certTypes,2L - -#define OBJ_crlTypes OBJ_pkcs9,23L - -#define LN_x509Crl "x509Crl" -#define NID_x509Crl 160 -#define OBJ_x509Crl OBJ_crlTypes,1L - -#define OBJ_pkcs12 OBJ_pkcs,12L - -#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L - -#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -#define NID_pbe_WithSHA1And128BitRC4 144 -#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L - -#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -#define NID_pbe_WithSHA1And40BitRC4 145 -#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L - -#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L - -#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L - -#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -#define NID_pbe_WithSHA1And128BitRC2_CBC 148 -#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L - -#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -#define NID_pbe_WithSHA1And40BitRC2_CBC 149 -#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L - -#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L - -#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L - -#define LN_keyBag "keyBag" -#define NID_keyBag 150 -#define OBJ_keyBag OBJ_pkcs12_BagIds,1L - -#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -#define NID_pkcs8ShroudedKeyBag 151 -#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L - -#define LN_certBag "certBag" -#define NID_certBag 152 -#define OBJ_certBag OBJ_pkcs12_BagIds,3L - -#define LN_crlBag "crlBag" -#define NID_crlBag 153 -#define OBJ_crlBag OBJ_pkcs12_BagIds,4L - -#define LN_secretBag "secretBag" -#define NID_secretBag 154 -#define OBJ_secretBag OBJ_pkcs12_BagIds,5L - -#define LN_safeContentsBag "safeContentsBag" -#define NID_safeContentsBag 155 -#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L - -#define SN_md2 "MD2" -#define LN_md2 "md2" -#define NID_md2 3 -#define OBJ_md2 OBJ_rsadsi,2L,2L - -#define SN_md4 "MD4" -#define LN_md4 "md4" -#define NID_md4 257 -#define OBJ_md4 OBJ_rsadsi,2L,4L - -#define SN_md5 "MD5" -#define LN_md5 "md5" -#define NID_md5 4 -#define OBJ_md5 OBJ_rsadsi,2L,5L - -#define SN_md5_sha1 "MD5-SHA1" -#define LN_md5_sha1 "md5-sha1" -#define NID_md5_sha1 114 - -#define LN_hmacWithMD5 "hmacWithMD5" -#define NID_hmacWithMD5 797 -#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L - -#define LN_hmacWithSHA1 "hmacWithSHA1" -#define NID_hmacWithSHA1 163 -#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -#define LN_hmacWithSHA224 "hmacWithSHA224" -#define NID_hmacWithSHA224 798 -#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L - -#define LN_hmacWithSHA256 "hmacWithSHA256" -#define NID_hmacWithSHA256 799 -#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L - -#define LN_hmacWithSHA384 "hmacWithSHA384" -#define NID_hmacWithSHA384 800 -#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L - -#define LN_hmacWithSHA512 "hmacWithSHA512" -#define NID_hmacWithSHA512 801 -#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L - -#define SN_rc2_cbc "RC2-CBC" -#define LN_rc2_cbc "rc2-cbc" -#define NID_rc2_cbc 37 -#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -#define SN_rc2_ecb "RC2-ECB" -#define LN_rc2_ecb "rc2-ecb" -#define NID_rc2_ecb 38 - -#define SN_rc2_cfb64 "RC2-CFB" -#define LN_rc2_cfb64 "rc2-cfb" -#define NID_rc2_cfb64 39 - -#define SN_rc2_ofb64 "RC2-OFB" -#define LN_rc2_ofb64 "rc2-ofb" -#define NID_rc2_ofb64 40 - -#define SN_rc2_40_cbc "RC2-40-CBC" -#define LN_rc2_40_cbc "rc2-40-cbc" -#define NID_rc2_40_cbc 98 - -#define SN_rc2_64_cbc "RC2-64-CBC" -#define LN_rc2_64_cbc "rc2-64-cbc" -#define NID_rc2_64_cbc 166 - -#define SN_rc4 "RC4" -#define LN_rc4 "rc4" -#define NID_rc4 5 -#define OBJ_rc4 OBJ_rsadsi,3L,4L - -#define SN_rc4_40 "RC4-40" -#define LN_rc4_40 "rc4-40" -#define NID_rc4_40 97 - -#define SN_des_ede3_cbc "DES-EDE3-CBC" -#define LN_des_ede3_cbc "des-ede3-cbc" -#define NID_des_ede3_cbc 44 -#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -#define SN_rc5_cbc "RC5-CBC" -#define LN_rc5_cbc "rc5-cbc" -#define NID_rc5_cbc 120 -#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -#define SN_rc5_ecb "RC5-ECB" -#define LN_rc5_ecb "rc5-ecb" -#define NID_rc5_ecb 121 - -#define SN_rc5_cfb64 "RC5-CFB" -#define LN_rc5_cfb64 "rc5-cfb" -#define NID_rc5_cfb64 122 - -#define SN_rc5_ofb64 "RC5-OFB" -#define LN_rc5_ofb64 "rc5-ofb" -#define NID_rc5_ofb64 123 - -#define SN_ms_ext_req "msExtReq" -#define LN_ms_ext_req "Microsoft Extension Request" -#define NID_ms_ext_req 171 -#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -#define SN_ms_code_ind "msCodeInd" -#define LN_ms_code_ind "Microsoft Individual Code Signing" -#define NID_ms_code_ind 134 -#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -#define SN_ms_code_com "msCodeCom" -#define LN_ms_code_com "Microsoft Commercial Code Signing" -#define NID_ms_code_com 135 -#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -#define SN_ms_ctl_sign "msCTLSign" -#define LN_ms_ctl_sign "Microsoft Trust List Signing" -#define NID_ms_ctl_sign 136 -#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -#define SN_ms_sgc "msSGC" -#define LN_ms_sgc "Microsoft Server Gated Crypto" -#define NID_ms_sgc 137 -#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -#define SN_ms_efs "msEFS" -#define LN_ms_efs "Microsoft Encrypted File System" -#define NID_ms_efs 138 -#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -#define SN_ms_smartcard_login "msSmartcardLogin" -#define LN_ms_smartcard_login "Microsoft Smartcardlogin" -#define NID_ms_smartcard_login 648 -#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L - -#define SN_ms_upn "msUPN" -#define LN_ms_upn "Microsoft Universal Principal Name" -#define NID_ms_upn 649 -#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L - -#define SN_idea_cbc "IDEA-CBC" -#define LN_idea_cbc "idea-cbc" -#define NID_idea_cbc 34 -#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -#define SN_idea_ecb "IDEA-ECB" -#define LN_idea_ecb "idea-ecb" -#define NID_idea_ecb 36 - -#define SN_idea_cfb64 "IDEA-CFB" -#define LN_idea_cfb64 "idea-cfb" -#define NID_idea_cfb64 35 - -#define SN_idea_ofb64 "IDEA-OFB" -#define LN_idea_ofb64 "idea-ofb" -#define NID_idea_ofb64 46 - -#define SN_bf_cbc "BF-CBC" -#define LN_bf_cbc "bf-cbc" -#define NID_bf_cbc 91 -#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -#define SN_bf_ecb "BF-ECB" -#define LN_bf_ecb "bf-ecb" -#define NID_bf_ecb 92 - -#define SN_bf_cfb64 "BF-CFB" -#define LN_bf_cfb64 "bf-cfb" -#define NID_bf_cfb64 93 - -#define SN_bf_ofb64 "BF-OFB" -#define LN_bf_ofb64 "bf-ofb" -#define NID_bf_ofb64 94 - -#define SN_id_pkix "PKIX" -#define NID_id_pkix 127 -#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -#define SN_id_pkix_mod "id-pkix-mod" -#define NID_id_pkix_mod 258 -#define OBJ_id_pkix_mod OBJ_id_pkix,0L - -#define SN_id_pe "id-pe" -#define NID_id_pe 175 -#define OBJ_id_pe OBJ_id_pkix,1L - -#define SN_id_qt "id-qt" -#define NID_id_qt 259 -#define OBJ_id_qt OBJ_id_pkix,2L - -#define SN_id_kp "id-kp" -#define NID_id_kp 128 -#define OBJ_id_kp OBJ_id_pkix,3L - -#define SN_id_it "id-it" -#define NID_id_it 260 -#define OBJ_id_it OBJ_id_pkix,4L - -#define SN_id_pkip "id-pkip" -#define NID_id_pkip 261 -#define OBJ_id_pkip OBJ_id_pkix,5L - -#define SN_id_alg "id-alg" -#define NID_id_alg 262 -#define OBJ_id_alg OBJ_id_pkix,6L - -#define SN_id_cmc "id-cmc" -#define NID_id_cmc 263 -#define OBJ_id_cmc OBJ_id_pkix,7L - -#define SN_id_on "id-on" -#define NID_id_on 264 -#define OBJ_id_on OBJ_id_pkix,8L - -#define SN_id_pda "id-pda" -#define NID_id_pda 265 -#define OBJ_id_pda OBJ_id_pkix,9L - -#define SN_id_aca "id-aca" -#define NID_id_aca 266 -#define OBJ_id_aca OBJ_id_pkix,10L - -#define SN_id_qcs "id-qcs" -#define NID_id_qcs 267 -#define OBJ_id_qcs OBJ_id_pkix,11L - -#define SN_id_cct "id-cct" -#define NID_id_cct 268 -#define OBJ_id_cct OBJ_id_pkix,12L - -#define SN_id_ppl "id-ppl" -#define NID_id_ppl 662 -#define OBJ_id_ppl OBJ_id_pkix,21L - -#define SN_id_ad "id-ad" -#define NID_id_ad 176 -#define OBJ_id_ad OBJ_id_pkix,48L - -#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" -#define NID_id_pkix1_explicit_88 269 -#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L - -#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" -#define NID_id_pkix1_implicit_88 270 -#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L - -#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" -#define NID_id_pkix1_explicit_93 271 -#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L - -#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" -#define NID_id_pkix1_implicit_93 272 -#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L - -#define SN_id_mod_crmf "id-mod-crmf" -#define NID_id_mod_crmf 273 -#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L - -#define SN_id_mod_cmc "id-mod-cmc" -#define NID_id_mod_cmc 274 -#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L - -#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" -#define NID_id_mod_kea_profile_88 275 -#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L - -#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" -#define NID_id_mod_kea_profile_93 276 -#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L - -#define SN_id_mod_cmp "id-mod-cmp" -#define NID_id_mod_cmp 277 -#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L - -#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" -#define NID_id_mod_qualified_cert_88 278 -#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L - -#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" -#define NID_id_mod_qualified_cert_93 279 -#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L - -#define SN_id_mod_attribute_cert "id-mod-attribute-cert" -#define NID_id_mod_attribute_cert 280 -#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L - -#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" -#define NID_id_mod_timestamp_protocol 281 -#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L - -#define SN_id_mod_ocsp "id-mod-ocsp" -#define NID_id_mod_ocsp 282 -#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L - -#define SN_id_mod_dvcs "id-mod-dvcs" -#define NID_id_mod_dvcs 283 -#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L - -#define SN_id_mod_cmp2000 "id-mod-cmp2000" -#define NID_id_mod_cmp2000 284 -#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L - -#define SN_info_access "authorityInfoAccess" -#define LN_info_access "Authority Information Access" -#define NID_info_access 177 -#define OBJ_info_access OBJ_id_pe,1L - -#define SN_biometricInfo "biometricInfo" -#define LN_biometricInfo "Biometric Info" -#define NID_biometricInfo 285 -#define OBJ_biometricInfo OBJ_id_pe,2L - -#define SN_qcStatements "qcStatements" -#define NID_qcStatements 286 -#define OBJ_qcStatements OBJ_id_pe,3L - -#define SN_ac_auditEntity "ac-auditEntity" -#define NID_ac_auditEntity 287 -#define OBJ_ac_auditEntity OBJ_id_pe,4L - -#define SN_ac_targeting "ac-targeting" -#define NID_ac_targeting 288 -#define OBJ_ac_targeting OBJ_id_pe,5L - -#define SN_aaControls "aaControls" -#define NID_aaControls 289 -#define OBJ_aaControls OBJ_id_pe,6L - -#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" -#define NID_sbgp_ipAddrBlock 290 -#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L - -#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" -#define NID_sbgp_autonomousSysNum 291 -#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L - -#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" -#define NID_sbgp_routerIdentifier 292 -#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L - -#define SN_ac_proxying "ac-proxying" -#define NID_ac_proxying 397 -#define OBJ_ac_proxying OBJ_id_pe,10L - -#define SN_sinfo_access "subjectInfoAccess" -#define LN_sinfo_access "Subject Information Access" -#define NID_sinfo_access 398 -#define OBJ_sinfo_access OBJ_id_pe,11L - -#define SN_proxyCertInfo "proxyCertInfo" -#define LN_proxyCertInfo "Proxy Certificate Information" -#define NID_proxyCertInfo 663 -#define OBJ_proxyCertInfo OBJ_id_pe,14L - -#define SN_id_qt_cps "id-qt-cps" -#define LN_id_qt_cps "Policy Qualifier CPS" -#define NID_id_qt_cps 164 -#define OBJ_id_qt_cps OBJ_id_qt,1L - -#define SN_id_qt_unotice "id-qt-unotice" -#define LN_id_qt_unotice "Policy Qualifier User Notice" -#define NID_id_qt_unotice 165 -#define OBJ_id_qt_unotice OBJ_id_qt,2L - -#define SN_textNotice "textNotice" -#define NID_textNotice 293 -#define OBJ_textNotice OBJ_id_qt,3L - -#define SN_server_auth "serverAuth" -#define LN_server_auth "TLS Web Server Authentication" -#define NID_server_auth 129 -#define OBJ_server_auth OBJ_id_kp,1L - -#define SN_client_auth "clientAuth" -#define LN_client_auth "TLS Web Client Authentication" -#define NID_client_auth 130 -#define OBJ_client_auth OBJ_id_kp,2L - -#define SN_code_sign "codeSigning" -#define LN_code_sign "Code Signing" -#define NID_code_sign 131 -#define OBJ_code_sign OBJ_id_kp,3L - -#define SN_email_protect "emailProtection" -#define LN_email_protect "E-mail Protection" -#define NID_email_protect 132 -#define OBJ_email_protect OBJ_id_kp,4L - -#define SN_ipsecEndSystem "ipsecEndSystem" -#define LN_ipsecEndSystem "IPSec End System" -#define NID_ipsecEndSystem 294 -#define OBJ_ipsecEndSystem OBJ_id_kp,5L - -#define SN_ipsecTunnel "ipsecTunnel" -#define LN_ipsecTunnel "IPSec Tunnel" -#define NID_ipsecTunnel 295 -#define OBJ_ipsecTunnel OBJ_id_kp,6L - -#define SN_ipsecUser "ipsecUser" -#define LN_ipsecUser "IPSec User" -#define NID_ipsecUser 296 -#define OBJ_ipsecUser OBJ_id_kp,7L - -#define SN_time_stamp "timeStamping" -#define LN_time_stamp "Time Stamping" -#define NID_time_stamp 133 -#define OBJ_time_stamp OBJ_id_kp,8L - -#define SN_OCSP_sign "OCSPSigning" -#define LN_OCSP_sign "OCSP Signing" -#define NID_OCSP_sign 180 -#define OBJ_OCSP_sign OBJ_id_kp,9L - -#define SN_dvcs "DVCS" -#define LN_dvcs "dvcs" -#define NID_dvcs 297 -#define OBJ_dvcs OBJ_id_kp,10L - -#define SN_id_it_caProtEncCert "id-it-caProtEncCert" -#define NID_id_it_caProtEncCert 298 -#define OBJ_id_it_caProtEncCert OBJ_id_it,1L - -#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" -#define NID_id_it_signKeyPairTypes 299 -#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L - -#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" -#define NID_id_it_encKeyPairTypes 300 -#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L - -#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" -#define NID_id_it_preferredSymmAlg 301 -#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L - -#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" -#define NID_id_it_caKeyUpdateInfo 302 -#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L - -#define SN_id_it_currentCRL "id-it-currentCRL" -#define NID_id_it_currentCRL 303 -#define OBJ_id_it_currentCRL OBJ_id_it,6L - -#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" -#define NID_id_it_unsupportedOIDs 304 -#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L - -#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" -#define NID_id_it_subscriptionRequest 305 -#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L - -#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" -#define NID_id_it_subscriptionResponse 306 -#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L - -#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" -#define NID_id_it_keyPairParamReq 307 -#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L - -#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" -#define NID_id_it_keyPairParamRep 308 -#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L - -#define SN_id_it_revPassphrase "id-it-revPassphrase" -#define NID_id_it_revPassphrase 309 -#define OBJ_id_it_revPassphrase OBJ_id_it,12L - -#define SN_id_it_implicitConfirm "id-it-implicitConfirm" -#define NID_id_it_implicitConfirm 310 -#define OBJ_id_it_implicitConfirm OBJ_id_it,13L - -#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" -#define NID_id_it_confirmWaitTime 311 -#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L - -#define SN_id_it_origPKIMessage "id-it-origPKIMessage" -#define NID_id_it_origPKIMessage 312 -#define OBJ_id_it_origPKIMessage OBJ_id_it,15L - -#define SN_id_it_suppLangTags "id-it-suppLangTags" -#define NID_id_it_suppLangTags 784 -#define OBJ_id_it_suppLangTags OBJ_id_it,16L - -#define SN_id_regCtrl "id-regCtrl" -#define NID_id_regCtrl 313 -#define OBJ_id_regCtrl OBJ_id_pkip,1L - -#define SN_id_regInfo "id-regInfo" -#define NID_id_regInfo 314 -#define OBJ_id_regInfo OBJ_id_pkip,2L - -#define SN_id_regCtrl_regToken "id-regCtrl-regToken" -#define NID_id_regCtrl_regToken 315 -#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L - -#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" -#define NID_id_regCtrl_authenticator 316 -#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L - -#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" -#define NID_id_regCtrl_pkiPublicationInfo 317 -#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L - -#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" -#define NID_id_regCtrl_pkiArchiveOptions 318 -#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L - -#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" -#define NID_id_regCtrl_oldCertID 319 -#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L - -#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" -#define NID_id_regCtrl_protocolEncrKey 320 -#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L - -#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" -#define NID_id_regInfo_utf8Pairs 321 -#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L - -#define SN_id_regInfo_certReq "id-regInfo-certReq" -#define NID_id_regInfo_certReq 322 -#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L - -#define SN_id_alg_des40 "id-alg-des40" -#define NID_id_alg_des40 323 -#define OBJ_id_alg_des40 OBJ_id_alg,1L - -#define SN_id_alg_noSignature "id-alg-noSignature" -#define NID_id_alg_noSignature 324 -#define OBJ_id_alg_noSignature OBJ_id_alg,2L - -#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" -#define NID_id_alg_dh_sig_hmac_sha1 325 -#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L - -#define SN_id_alg_dh_pop "id-alg-dh-pop" -#define NID_id_alg_dh_pop 326 -#define OBJ_id_alg_dh_pop OBJ_id_alg,4L - -#define SN_id_cmc_statusInfo "id-cmc-statusInfo" -#define NID_id_cmc_statusInfo 327 -#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L - -#define SN_id_cmc_identification "id-cmc-identification" -#define NID_id_cmc_identification 328 -#define OBJ_id_cmc_identification OBJ_id_cmc,2L - -#define SN_id_cmc_identityProof "id-cmc-identityProof" -#define NID_id_cmc_identityProof 329 -#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L - -#define SN_id_cmc_dataReturn "id-cmc-dataReturn" -#define NID_id_cmc_dataReturn 330 -#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L - -#define SN_id_cmc_transactionId "id-cmc-transactionId" -#define NID_id_cmc_transactionId 331 -#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L - -#define SN_id_cmc_senderNonce "id-cmc-senderNonce" -#define NID_id_cmc_senderNonce 332 -#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L - -#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" -#define NID_id_cmc_recipientNonce 333 -#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L - -#define SN_id_cmc_addExtensions "id-cmc-addExtensions" -#define NID_id_cmc_addExtensions 334 -#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L - -#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" -#define NID_id_cmc_encryptedPOP 335 -#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L - -#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" -#define NID_id_cmc_decryptedPOP 336 -#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L - -#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" -#define NID_id_cmc_lraPOPWitness 337 -#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L - -#define SN_id_cmc_getCert "id-cmc-getCert" -#define NID_id_cmc_getCert 338 -#define OBJ_id_cmc_getCert OBJ_id_cmc,15L - -#define SN_id_cmc_getCRL "id-cmc-getCRL" -#define NID_id_cmc_getCRL 339 -#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L - -#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" -#define NID_id_cmc_revokeRequest 340 -#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L - -#define SN_id_cmc_regInfo "id-cmc-regInfo" -#define NID_id_cmc_regInfo 341 -#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L - -#define SN_id_cmc_responseInfo "id-cmc-responseInfo" -#define NID_id_cmc_responseInfo 342 -#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L - -#define SN_id_cmc_queryPending "id-cmc-queryPending" -#define NID_id_cmc_queryPending 343 -#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L - -#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" -#define NID_id_cmc_popLinkRandom 344 -#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L - -#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" -#define NID_id_cmc_popLinkWitness 345 -#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L - -#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" -#define NID_id_cmc_confirmCertAcceptance 346 -#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L - -#define SN_id_on_personalData "id-on-personalData" -#define NID_id_on_personalData 347 -#define OBJ_id_on_personalData OBJ_id_on,1L - -#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" -#define LN_id_on_permanentIdentifier "Permanent Identifier" -#define NID_id_on_permanentIdentifier 858 -#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L - -#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" -#define NID_id_pda_dateOfBirth 348 -#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L - -#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" -#define NID_id_pda_placeOfBirth 349 -#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L - -#define SN_id_pda_gender "id-pda-gender" -#define NID_id_pda_gender 351 -#define OBJ_id_pda_gender OBJ_id_pda,3L - -#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" -#define NID_id_pda_countryOfCitizenship 352 -#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L - -#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" -#define NID_id_pda_countryOfResidence 353 -#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L - -#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" -#define NID_id_aca_authenticationInfo 354 -#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L - -#define SN_id_aca_accessIdentity "id-aca-accessIdentity" -#define NID_id_aca_accessIdentity 355 -#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L - -#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" -#define NID_id_aca_chargingIdentity 356 -#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L - -#define SN_id_aca_group "id-aca-group" -#define NID_id_aca_group 357 -#define OBJ_id_aca_group OBJ_id_aca,4L - -#define SN_id_aca_role "id-aca-role" -#define NID_id_aca_role 358 -#define OBJ_id_aca_role OBJ_id_aca,5L - -#define SN_id_aca_encAttrs "id-aca-encAttrs" -#define NID_id_aca_encAttrs 399 -#define OBJ_id_aca_encAttrs OBJ_id_aca,6L - -#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" -#define NID_id_qcs_pkixQCSyntax_v1 359 -#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L - -#define SN_id_cct_crs "id-cct-crs" -#define NID_id_cct_crs 360 -#define OBJ_id_cct_crs OBJ_id_cct,1L - -#define SN_id_cct_PKIData "id-cct-PKIData" -#define NID_id_cct_PKIData 361 -#define OBJ_id_cct_PKIData OBJ_id_cct,2L - -#define SN_id_cct_PKIResponse "id-cct-PKIResponse" -#define NID_id_cct_PKIResponse 362 -#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L - -#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" -#define LN_id_ppl_anyLanguage "Any language" -#define NID_id_ppl_anyLanguage 664 -#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L - -#define SN_id_ppl_inheritAll "id-ppl-inheritAll" -#define LN_id_ppl_inheritAll "Inherit all" -#define NID_id_ppl_inheritAll 665 -#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L - -#define SN_Independent "id-ppl-independent" -#define LN_Independent "Independent" -#define NID_Independent 667 -#define OBJ_Independent OBJ_id_ppl,2L - -#define SN_ad_OCSP "OCSP" -#define LN_ad_OCSP "OCSP" -#define NID_ad_OCSP 178 -#define OBJ_ad_OCSP OBJ_id_ad,1L - -#define SN_ad_ca_issuers "caIssuers" -#define LN_ad_ca_issuers "CA Issuers" -#define NID_ad_ca_issuers 179 -#define OBJ_ad_ca_issuers OBJ_id_ad,2L - -#define SN_ad_timeStamping "ad_timestamping" -#define LN_ad_timeStamping "AD Time Stamping" -#define NID_ad_timeStamping 363 -#define OBJ_ad_timeStamping OBJ_id_ad,3L - -#define SN_ad_dvcs "AD_DVCS" -#define LN_ad_dvcs "ad dvcs" -#define NID_ad_dvcs 364 -#define OBJ_ad_dvcs OBJ_id_ad,4L - -#define SN_caRepository "caRepository" -#define LN_caRepository "CA Repository" -#define NID_caRepository 785 -#define OBJ_caRepository OBJ_id_ad,5L - -#define OBJ_id_pkix_OCSP OBJ_ad_OCSP - -#define SN_id_pkix_OCSP_basic "basicOCSPResponse" -#define LN_id_pkix_OCSP_basic "Basic OCSP Response" -#define NID_id_pkix_OCSP_basic 365 -#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L - -#define SN_id_pkix_OCSP_Nonce "Nonce" -#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" -#define NID_id_pkix_OCSP_Nonce 366 -#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L - -#define SN_id_pkix_OCSP_CrlID "CrlID" -#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" -#define NID_id_pkix_OCSP_CrlID 367 -#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L - -#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" -#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" -#define NID_id_pkix_OCSP_acceptableResponses 368 -#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L - -#define SN_id_pkix_OCSP_noCheck "noCheck" -#define LN_id_pkix_OCSP_noCheck "OCSP No Check" -#define NID_id_pkix_OCSP_noCheck 369 -#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L - -#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" -#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" -#define NID_id_pkix_OCSP_archiveCutoff 370 -#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L - -#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" -#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" -#define NID_id_pkix_OCSP_serviceLocator 371 -#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L - -#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" -#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" -#define NID_id_pkix_OCSP_extendedStatus 372 -#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L - -#define SN_id_pkix_OCSP_valid "valid" -#define NID_id_pkix_OCSP_valid 373 -#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L - -#define SN_id_pkix_OCSP_path "path" -#define NID_id_pkix_OCSP_path 374 -#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L - -#define SN_id_pkix_OCSP_trustRoot "trustRoot" -#define LN_id_pkix_OCSP_trustRoot "Trust Root" -#define NID_id_pkix_OCSP_trustRoot 375 -#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L - -#define SN_algorithm "algorithm" -#define LN_algorithm "algorithm" -#define NID_algorithm 376 -#define OBJ_algorithm 1L,3L,14L,3L,2L - -#define SN_md5WithRSA "RSA-NP-MD5" -#define LN_md5WithRSA "md5WithRSA" -#define NID_md5WithRSA 104 -#define OBJ_md5WithRSA OBJ_algorithm,3L - -#define SN_des_ecb "DES-ECB" -#define LN_des_ecb "des-ecb" -#define NID_des_ecb 29 -#define OBJ_des_ecb OBJ_algorithm,6L - -#define SN_des_cbc "DES-CBC" -#define LN_des_cbc "des-cbc" -#define NID_des_cbc 31 -#define OBJ_des_cbc OBJ_algorithm,7L - -#define SN_des_ofb64 "DES-OFB" -#define LN_des_ofb64 "des-ofb" -#define NID_des_ofb64 45 -#define OBJ_des_ofb64 OBJ_algorithm,8L - -#define SN_des_cfb64 "DES-CFB" -#define LN_des_cfb64 "des-cfb" -#define NID_des_cfb64 30 -#define OBJ_des_cfb64 OBJ_algorithm,9L - -#define SN_rsaSignature "rsaSignature" -#define NID_rsaSignature 377 -#define OBJ_rsaSignature OBJ_algorithm,11L - -#define SN_dsa_2 "DSA-old" -#define LN_dsa_2 "dsaEncryption-old" -#define NID_dsa_2 67 -#define OBJ_dsa_2 OBJ_algorithm,12L - -#define SN_dsaWithSHA "DSA-SHA" -#define LN_dsaWithSHA "dsaWithSHA" -#define NID_dsaWithSHA 66 -#define OBJ_dsaWithSHA OBJ_algorithm,13L - -#define SN_shaWithRSAEncryption "RSA-SHA" -#define LN_shaWithRSAEncryption "shaWithRSAEncryption" -#define NID_shaWithRSAEncryption 42 -#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -#define SN_des_ede_ecb "DES-EDE" -#define LN_des_ede_ecb "des-ede" -#define NID_des_ede_ecb 32 -#define OBJ_des_ede_ecb OBJ_algorithm,17L - -#define SN_des_ede3_ecb "DES-EDE3" -#define LN_des_ede3_ecb "des-ede3" -#define NID_des_ede3_ecb 33 - -#define SN_des_ede_cbc "DES-EDE-CBC" -#define LN_des_ede_cbc "des-ede-cbc" -#define NID_des_ede_cbc 43 - -#define SN_des_ede_cfb64 "DES-EDE-CFB" -#define LN_des_ede_cfb64 "des-ede-cfb" -#define NID_des_ede_cfb64 60 - -#define SN_des_ede3_cfb64 "DES-EDE3-CFB" -#define LN_des_ede3_cfb64 "des-ede3-cfb" -#define NID_des_ede3_cfb64 61 - -#define SN_des_ede_ofb64 "DES-EDE-OFB" -#define LN_des_ede_ofb64 "des-ede-ofb" -#define NID_des_ede_ofb64 62 - -#define SN_des_ede3_ofb64 "DES-EDE3-OFB" -#define LN_des_ede3_ofb64 "des-ede3-ofb" -#define NID_des_ede3_ofb64 63 - -#define SN_desx_cbc "DESX-CBC" -#define LN_desx_cbc "desx-cbc" -#define NID_desx_cbc 80 - -#define SN_sha "SHA" -#define LN_sha "sha" -#define NID_sha 41 -#define OBJ_sha OBJ_algorithm,18L - -#define SN_sha1 "SHA1" -#define LN_sha1 "sha1" -#define NID_sha1 64 -#define OBJ_sha1 OBJ_algorithm,26L - -#define SN_dsaWithSHA1_2 "DSA-SHA1-old" -#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -#define NID_dsaWithSHA1_2 70 -#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -#define SN_sha1WithRSA "RSA-SHA1-2" -#define LN_sha1WithRSA "sha1WithRSA" -#define NID_sha1WithRSA 115 -#define OBJ_sha1WithRSA OBJ_algorithm,29L - -#define SN_ripemd160 "RIPEMD160" -#define LN_ripemd160 "ripemd160" -#define NID_ripemd160 117 -#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -#define SN_ripemd160WithRSA "RSA-RIPEMD160" -#define LN_ripemd160WithRSA "ripemd160WithRSA" -#define NID_ripemd160WithRSA 119 -#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -#define SN_sxnet "SXNetID" -#define LN_sxnet "Strong Extranet ID" -#define NID_sxnet 143 -#define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -#define SN_X500 "X500" -#define LN_X500 "directory services (X.500)" -#define NID_X500 11 -#define OBJ_X500 2L,5L - -#define SN_X509 "X509" -#define NID_X509 12 -#define OBJ_X509 OBJ_X500,4L - -#define SN_commonName "CN" -#define LN_commonName "commonName" -#define NID_commonName 13 -#define OBJ_commonName OBJ_X509,3L - -#define SN_surname "SN" -#define LN_surname "surname" -#define NID_surname 100 -#define OBJ_surname OBJ_X509,4L - -#define LN_serialNumber "serialNumber" -#define NID_serialNumber 105 -#define OBJ_serialNumber OBJ_X509,5L - -#define SN_countryName "C" -#define LN_countryName "countryName" -#define NID_countryName 14 -#define OBJ_countryName OBJ_X509,6L - -#define SN_localityName "L" -#define LN_localityName "localityName" -#define NID_localityName 15 -#define OBJ_localityName OBJ_X509,7L - -#define SN_stateOrProvinceName "ST" -#define LN_stateOrProvinceName "stateOrProvinceName" -#define NID_stateOrProvinceName 16 -#define OBJ_stateOrProvinceName OBJ_X509,8L - -#define SN_streetAddress "street" -#define LN_streetAddress "streetAddress" -#define NID_streetAddress 660 -#define OBJ_streetAddress OBJ_X509,9L - -#define SN_organizationName "O" -#define LN_organizationName "organizationName" -#define NID_organizationName 17 -#define OBJ_organizationName OBJ_X509,10L - -#define SN_organizationalUnitName "OU" -#define LN_organizationalUnitName "organizationalUnitName" -#define NID_organizationalUnitName 18 -#define OBJ_organizationalUnitName OBJ_X509,11L - -#define SN_title "title" -#define LN_title "title" -#define NID_title 106 -#define OBJ_title OBJ_X509,12L - -#define LN_description "description" -#define NID_description 107 -#define OBJ_description OBJ_X509,13L - -#define LN_searchGuide "searchGuide" -#define NID_searchGuide 859 -#define OBJ_searchGuide OBJ_X509,14L - -#define LN_businessCategory "businessCategory" -#define NID_businessCategory 860 -#define OBJ_businessCategory OBJ_X509,15L - -#define LN_postalAddress "postalAddress" -#define NID_postalAddress 861 -#define OBJ_postalAddress OBJ_X509,16L - -#define LN_postalCode "postalCode" -#define NID_postalCode 661 -#define OBJ_postalCode OBJ_X509,17L - -#define LN_postOfficeBox "postOfficeBox" -#define NID_postOfficeBox 862 -#define OBJ_postOfficeBox OBJ_X509,18L - -#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" -#define NID_physicalDeliveryOfficeName 863 -#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L - -#define LN_telephoneNumber "telephoneNumber" -#define NID_telephoneNumber 864 -#define OBJ_telephoneNumber OBJ_X509,20L - -#define LN_telexNumber "telexNumber" -#define NID_telexNumber 865 -#define OBJ_telexNumber OBJ_X509,21L - -#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" -#define NID_teletexTerminalIdentifier 866 -#define OBJ_teletexTerminalIdentifier OBJ_X509,22L - -#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" -#define NID_facsimileTelephoneNumber 867 -#define OBJ_facsimileTelephoneNumber OBJ_X509,23L - -#define LN_x121Address "x121Address" -#define NID_x121Address 868 -#define OBJ_x121Address OBJ_X509,24L - -#define LN_internationaliSDNNumber "internationaliSDNNumber" -#define NID_internationaliSDNNumber 869 -#define OBJ_internationaliSDNNumber OBJ_X509,25L - -#define LN_registeredAddress "registeredAddress" -#define NID_registeredAddress 870 -#define OBJ_registeredAddress OBJ_X509,26L - -#define LN_destinationIndicator "destinationIndicator" -#define NID_destinationIndicator 871 -#define OBJ_destinationIndicator OBJ_X509,27L - -#define LN_preferredDeliveryMethod "preferredDeliveryMethod" -#define NID_preferredDeliveryMethod 872 -#define OBJ_preferredDeliveryMethod OBJ_X509,28L - -#define LN_presentationAddress "presentationAddress" -#define NID_presentationAddress 873 -#define OBJ_presentationAddress OBJ_X509,29L - -#define LN_supportedApplicationContext "supportedApplicationContext" -#define NID_supportedApplicationContext 874 -#define OBJ_supportedApplicationContext OBJ_X509,30L - -#define SN_member "member" -#define NID_member 875 -#define OBJ_member OBJ_X509,31L - -#define SN_owner "owner" -#define NID_owner 876 -#define OBJ_owner OBJ_X509,32L - -#define LN_roleOccupant "roleOccupant" -#define NID_roleOccupant 877 -#define OBJ_roleOccupant OBJ_X509,33L - -#define SN_seeAlso "seeAlso" -#define NID_seeAlso 878 -#define OBJ_seeAlso OBJ_X509,34L - -#define LN_userPassword "userPassword" -#define NID_userPassword 879 -#define OBJ_userPassword OBJ_X509,35L - -#define LN_userCertificate "userCertificate" -#define NID_userCertificate 880 -#define OBJ_userCertificate OBJ_X509,36L - -#define LN_cACertificate "cACertificate" -#define NID_cACertificate 881 -#define OBJ_cACertificate OBJ_X509,37L - -#define LN_authorityRevocationList "authorityRevocationList" -#define NID_authorityRevocationList 882 -#define OBJ_authorityRevocationList OBJ_X509,38L - -#define LN_certificateRevocationList "certificateRevocationList" -#define NID_certificateRevocationList 883 -#define OBJ_certificateRevocationList OBJ_X509,39L - -#define LN_crossCertificatePair "crossCertificatePair" -#define NID_crossCertificatePair 884 -#define OBJ_crossCertificatePair OBJ_X509,40L - -#define SN_name "name" -#define LN_name "name" -#define NID_name 173 -#define OBJ_name OBJ_X509,41L - -#define SN_givenName "GN" -#define LN_givenName "givenName" -#define NID_givenName 99 -#define OBJ_givenName OBJ_X509,42L - -#define SN_initials "initials" -#define LN_initials "initials" -#define NID_initials 101 -#define OBJ_initials OBJ_X509,43L - -#define LN_generationQualifier "generationQualifier" -#define NID_generationQualifier 509 -#define OBJ_generationQualifier OBJ_X509,44L - -#define LN_x500UniqueIdentifier "x500UniqueIdentifier" -#define NID_x500UniqueIdentifier 503 -#define OBJ_x500UniqueIdentifier OBJ_X509,45L - -#define SN_dnQualifier "dnQualifier" -#define LN_dnQualifier "dnQualifier" -#define NID_dnQualifier 174 -#define OBJ_dnQualifier OBJ_X509,46L - -#define LN_enhancedSearchGuide "enhancedSearchGuide" -#define NID_enhancedSearchGuide 885 -#define OBJ_enhancedSearchGuide OBJ_X509,47L - -#define LN_protocolInformation "protocolInformation" -#define NID_protocolInformation 886 -#define OBJ_protocolInformation OBJ_X509,48L - -#define LN_distinguishedName "distinguishedName" -#define NID_distinguishedName 887 -#define OBJ_distinguishedName OBJ_X509,49L - -#define LN_uniqueMember "uniqueMember" -#define NID_uniqueMember 888 -#define OBJ_uniqueMember OBJ_X509,50L - -#define LN_houseIdentifier "houseIdentifier" -#define NID_houseIdentifier 889 -#define OBJ_houseIdentifier OBJ_X509,51L - -#define LN_supportedAlgorithms "supportedAlgorithms" -#define NID_supportedAlgorithms 890 -#define OBJ_supportedAlgorithms OBJ_X509,52L - -#define LN_deltaRevocationList "deltaRevocationList" -#define NID_deltaRevocationList 891 -#define OBJ_deltaRevocationList OBJ_X509,53L - -#define SN_dmdName "dmdName" -#define NID_dmdName 892 -#define OBJ_dmdName OBJ_X509,54L - -#define LN_pseudonym "pseudonym" -#define NID_pseudonym 510 -#define OBJ_pseudonym OBJ_X509,65L - -#define SN_role "role" -#define LN_role "role" -#define NID_role 400 -#define OBJ_role OBJ_X509,72L - -#define SN_X500algorithms "X500algorithms" -#define LN_X500algorithms "directory services - algorithms" -#define NID_X500algorithms 378 -#define OBJ_X500algorithms OBJ_X500,8L - -#define SN_rsa "RSA" -#define LN_rsa "rsa" -#define NID_rsa 19 -#define OBJ_rsa OBJ_X500algorithms,1L,1L - -#define SN_mdc2WithRSA "RSA-MDC2" -#define LN_mdc2WithRSA "mdc2WithRSA" -#define NID_mdc2WithRSA 96 -#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L - -#define SN_mdc2 "MDC2" -#define LN_mdc2 "mdc2" -#define NID_mdc2 95 -#define OBJ_mdc2 OBJ_X500algorithms,3L,101L - -#define SN_id_ce "id-ce" -#define NID_id_ce 81 -#define OBJ_id_ce OBJ_X500,29L - -#define SN_subject_directory_attributes "subjectDirectoryAttributes" -#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" -#define NID_subject_directory_attributes 769 -#define OBJ_subject_directory_attributes OBJ_id_ce,9L - -#define SN_subject_key_identifier "subjectKeyIdentifier" -#define LN_subject_key_identifier "X509v3 Subject Key Identifier" -#define NID_subject_key_identifier 82 -#define OBJ_subject_key_identifier OBJ_id_ce,14L - -#define SN_key_usage "keyUsage" -#define LN_key_usage "X509v3 Key Usage" -#define NID_key_usage 83 -#define OBJ_key_usage OBJ_id_ce,15L - -#define SN_private_key_usage_period "privateKeyUsagePeriod" -#define LN_private_key_usage_period "X509v3 Private Key Usage Period" -#define NID_private_key_usage_period 84 -#define OBJ_private_key_usage_period OBJ_id_ce,16L - -#define SN_subject_alt_name "subjectAltName" -#define LN_subject_alt_name "X509v3 Subject Alternative Name" -#define NID_subject_alt_name 85 -#define OBJ_subject_alt_name OBJ_id_ce,17L - -#define SN_issuer_alt_name "issuerAltName" -#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -#define NID_issuer_alt_name 86 -#define OBJ_issuer_alt_name OBJ_id_ce,18L - -#define SN_basic_constraints "basicConstraints" -#define LN_basic_constraints "X509v3 Basic Constraints" -#define NID_basic_constraints 87 -#define OBJ_basic_constraints OBJ_id_ce,19L - -#define SN_crl_number "crlNumber" -#define LN_crl_number "X509v3 CRL Number" -#define NID_crl_number 88 -#define OBJ_crl_number OBJ_id_ce,20L - -#define SN_crl_reason "CRLReason" -#define LN_crl_reason "X509v3 CRL Reason Code" -#define NID_crl_reason 141 -#define OBJ_crl_reason OBJ_id_ce,21L - -#define SN_invalidity_date "invalidityDate" -#define LN_invalidity_date "Invalidity Date" -#define NID_invalidity_date 142 -#define OBJ_invalidity_date OBJ_id_ce,24L - -#define SN_delta_crl "deltaCRL" -#define LN_delta_crl "X509v3 Delta CRL Indicator" -#define NID_delta_crl 140 -#define OBJ_delta_crl OBJ_id_ce,27L - -#define SN_issuing_distribution_point "issuingDistributionPoint" -#define LN_issuing_distribution_point "X509v3 Issuing Distrubution Point" -#define NID_issuing_distribution_point 770 -#define OBJ_issuing_distribution_point OBJ_id_ce,28L - -#define SN_certificate_issuer "certificateIssuer" -#define LN_certificate_issuer "X509v3 Certificate Issuer" -#define NID_certificate_issuer 771 -#define OBJ_certificate_issuer OBJ_id_ce,29L - -#define SN_name_constraints "nameConstraints" -#define LN_name_constraints "X509v3 Name Constraints" -#define NID_name_constraints 666 -#define OBJ_name_constraints OBJ_id_ce,30L - -#define SN_crl_distribution_points "crlDistributionPoints" -#define LN_crl_distribution_points "X509v3 CRL Distribution Points" -#define NID_crl_distribution_points 103 -#define OBJ_crl_distribution_points OBJ_id_ce,31L - -#define SN_certificate_policies "certificatePolicies" -#define LN_certificate_policies "X509v3 Certificate Policies" -#define NID_certificate_policies 89 -#define OBJ_certificate_policies OBJ_id_ce,32L - -#define SN_any_policy "anyPolicy" -#define LN_any_policy "X509v3 Any Policy" -#define NID_any_policy 746 -#define OBJ_any_policy OBJ_certificate_policies,0L - -#define SN_policy_mappings "policyMappings" -#define LN_policy_mappings "X509v3 Policy Mappings" -#define NID_policy_mappings 747 -#define OBJ_policy_mappings OBJ_id_ce,33L - -#define SN_authority_key_identifier "authorityKeyIdentifier" -#define LN_authority_key_identifier "X509v3 Authority Key Identifier" -#define NID_authority_key_identifier 90 -#define OBJ_authority_key_identifier OBJ_id_ce,35L - -#define SN_policy_constraints "policyConstraints" -#define LN_policy_constraints "X509v3 Policy Constraints" -#define NID_policy_constraints 401 -#define OBJ_policy_constraints OBJ_id_ce,36L - -#define SN_ext_key_usage "extendedKeyUsage" -#define LN_ext_key_usage "X509v3 Extended Key Usage" -#define NID_ext_key_usage 126 -#define OBJ_ext_key_usage OBJ_id_ce,37L - -#define SN_freshest_crl "freshestCRL" -#define LN_freshest_crl "X509v3 Freshest CRL" -#define NID_freshest_crl 857 -#define OBJ_freshest_crl OBJ_id_ce,46L - -#define SN_inhibit_any_policy "inhibitAnyPolicy" -#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" -#define NID_inhibit_any_policy 748 -#define OBJ_inhibit_any_policy OBJ_id_ce,54L - -#define SN_target_information "targetInformation" -#define LN_target_information "X509v3 AC Targeting" -#define NID_target_information 402 -#define OBJ_target_information OBJ_id_ce,55L - -#define SN_no_rev_avail "noRevAvail" -#define LN_no_rev_avail "X509v3 No Revocation Available" -#define NID_no_rev_avail 403 -#define OBJ_no_rev_avail OBJ_id_ce,56L - -#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" -#define LN_anyExtendedKeyUsage "Any Extended Key Usage" -#define NID_anyExtendedKeyUsage 910 -#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L - -#define SN_netscape "Netscape" -#define LN_netscape "Netscape Communications Corp." -#define NID_netscape 57 -#define OBJ_netscape 2L,16L,840L,1L,113730L - -#define SN_netscape_cert_extension "nsCertExt" -#define LN_netscape_cert_extension "Netscape Certificate Extension" -#define NID_netscape_cert_extension 58 -#define OBJ_netscape_cert_extension OBJ_netscape,1L - -#define SN_netscape_data_type "nsDataType" -#define LN_netscape_data_type "Netscape Data Type" -#define NID_netscape_data_type 59 -#define OBJ_netscape_data_type OBJ_netscape,2L - -#define SN_netscape_cert_type "nsCertType" -#define LN_netscape_cert_type "Netscape Cert Type" -#define NID_netscape_cert_type 71 -#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -#define SN_netscape_base_url "nsBaseUrl" -#define LN_netscape_base_url "Netscape Base Url" -#define NID_netscape_base_url 72 -#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -#define SN_netscape_revocation_url "nsRevocationUrl" -#define LN_netscape_revocation_url "Netscape Revocation Url" -#define NID_netscape_revocation_url 73 -#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -#define NID_netscape_ca_revocation_url 74 -#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -#define SN_netscape_renewal_url "nsRenewalUrl" -#define LN_netscape_renewal_url "Netscape Renewal Url" -#define NID_netscape_renewal_url 75 -#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -#define SN_netscape_ca_policy_url "nsCaPolicyUrl" -#define LN_netscape_ca_policy_url "Netscape CA Policy Url" -#define NID_netscape_ca_policy_url 76 -#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -#define SN_netscape_ssl_server_name "nsSslServerName" -#define LN_netscape_ssl_server_name "Netscape SSL Server Name" -#define NID_netscape_ssl_server_name 77 -#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -#define SN_netscape_comment "nsComment" -#define LN_netscape_comment "Netscape Comment" -#define NID_netscape_comment 78 -#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -#define SN_netscape_cert_sequence "nsCertSequence" -#define LN_netscape_cert_sequence "Netscape Certificate Sequence" -#define NID_netscape_cert_sequence 79 -#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -#define SN_ns_sgc "nsSGC" -#define LN_ns_sgc "Netscape Server Gated Crypto" -#define NID_ns_sgc 139 -#define OBJ_ns_sgc OBJ_netscape,4L,1L - -#define SN_org "ORG" -#define LN_org "org" -#define NID_org 379 -#define OBJ_org OBJ_iso,3L - -#define SN_dod "DOD" -#define LN_dod "dod" -#define NID_dod 380 -#define OBJ_dod OBJ_org,6L - -#define SN_iana "IANA" -#define LN_iana "iana" -#define NID_iana 381 -#define OBJ_iana OBJ_dod,1L - -#define OBJ_internet OBJ_iana - -#define SN_Directory "directory" -#define LN_Directory "Directory" -#define NID_Directory 382 -#define OBJ_Directory OBJ_internet,1L - -#define SN_Management "mgmt" -#define LN_Management "Management" -#define NID_Management 383 -#define OBJ_Management OBJ_internet,2L - -#define SN_Experimental "experimental" -#define LN_Experimental "Experimental" -#define NID_Experimental 384 -#define OBJ_Experimental OBJ_internet,3L - -#define SN_Private "private" -#define LN_Private "Private" -#define NID_Private 385 -#define OBJ_Private OBJ_internet,4L - -#define SN_Security "security" -#define LN_Security "Security" -#define NID_Security 386 -#define OBJ_Security OBJ_internet,5L - -#define SN_SNMPv2 "snmpv2" -#define LN_SNMPv2 "SNMPv2" -#define NID_SNMPv2 387 -#define OBJ_SNMPv2 OBJ_internet,6L - -#define LN_Mail "Mail" -#define NID_Mail 388 -#define OBJ_Mail OBJ_internet,7L - -#define SN_Enterprises "enterprises" -#define LN_Enterprises "Enterprises" -#define NID_Enterprises 389 -#define OBJ_Enterprises OBJ_Private,1L - -#define SN_dcObject "dcobject" -#define LN_dcObject "dcObject" -#define NID_dcObject 390 -#define OBJ_dcObject OBJ_Enterprises,1466L,344L - -#define SN_mime_mhs "mime-mhs" -#define LN_mime_mhs "MIME MHS" -#define NID_mime_mhs 504 -#define OBJ_mime_mhs OBJ_Mail,1L - -#define SN_mime_mhs_headings "mime-mhs-headings" -#define LN_mime_mhs_headings "mime-mhs-headings" -#define NID_mime_mhs_headings 505 -#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L - -#define SN_mime_mhs_bodies "mime-mhs-bodies" -#define LN_mime_mhs_bodies "mime-mhs-bodies" -#define NID_mime_mhs_bodies 506 -#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L - -#define SN_id_hex_partial_message "id-hex-partial-message" -#define LN_id_hex_partial_message "id-hex-partial-message" -#define NID_id_hex_partial_message 507 -#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L - -#define SN_id_hex_multipart_message "id-hex-multipart-message" -#define LN_id_hex_multipart_message "id-hex-multipart-message" -#define NID_id_hex_multipart_message 508 -#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L - -#define SN_rle_compression "RLE" -#define LN_rle_compression "run length compression" -#define NID_rle_compression 124 -#define OBJ_rle_compression 1L,1L,1L,1L,666L,1L - -#define SN_zlib_compression "ZLIB" -#define LN_zlib_compression "zlib compression" -#define NID_zlib_compression 125 -#define OBJ_zlib_compression OBJ_id_smime_alg,8L - -#define OBJ_csor 2L,16L,840L,1L,101L,3L - -#define OBJ_nistAlgorithms OBJ_csor,4L - -#define OBJ_aes OBJ_nistAlgorithms,1L - -#define SN_aes_128_ecb "AES-128-ECB" -#define LN_aes_128_ecb "aes-128-ecb" -#define NID_aes_128_ecb 418 -#define OBJ_aes_128_ecb OBJ_aes,1L - -#define SN_aes_128_cbc "AES-128-CBC" -#define LN_aes_128_cbc "aes-128-cbc" -#define NID_aes_128_cbc 419 -#define OBJ_aes_128_cbc OBJ_aes,2L - -#define SN_aes_128_ofb128 "AES-128-OFB" -#define LN_aes_128_ofb128 "aes-128-ofb" -#define NID_aes_128_ofb128 420 -#define OBJ_aes_128_ofb128 OBJ_aes,3L - -#define SN_aes_128_cfb128 "AES-128-CFB" -#define LN_aes_128_cfb128 "aes-128-cfb" -#define NID_aes_128_cfb128 421 -#define OBJ_aes_128_cfb128 OBJ_aes,4L - -#define SN_id_aes128_wrap "id-aes128-wrap" -#define NID_id_aes128_wrap 788 -#define OBJ_id_aes128_wrap OBJ_aes,5L - -#define SN_aes_128_gcm "id-aes128-GCM" -#define LN_aes_128_gcm "aes-128-gcm" -#define NID_aes_128_gcm 895 -#define OBJ_aes_128_gcm OBJ_aes,6L - -#define SN_aes_128_ccm "id-aes128-CCM" -#define LN_aes_128_ccm "aes-128-ccm" -#define NID_aes_128_ccm 896 -#define OBJ_aes_128_ccm OBJ_aes,7L - -#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" -#define NID_id_aes128_wrap_pad 897 -#define OBJ_id_aes128_wrap_pad OBJ_aes,8L - -#define SN_aes_192_ecb "AES-192-ECB" -#define LN_aes_192_ecb "aes-192-ecb" -#define NID_aes_192_ecb 422 -#define OBJ_aes_192_ecb OBJ_aes,21L - -#define SN_aes_192_cbc "AES-192-CBC" -#define LN_aes_192_cbc "aes-192-cbc" -#define NID_aes_192_cbc 423 -#define OBJ_aes_192_cbc OBJ_aes,22L - -#define SN_aes_192_ofb128 "AES-192-OFB" -#define LN_aes_192_ofb128 "aes-192-ofb" -#define NID_aes_192_ofb128 424 -#define OBJ_aes_192_ofb128 OBJ_aes,23L - -#define SN_aes_192_cfb128 "AES-192-CFB" -#define LN_aes_192_cfb128 "aes-192-cfb" -#define NID_aes_192_cfb128 425 -#define OBJ_aes_192_cfb128 OBJ_aes,24L - -#define SN_id_aes192_wrap "id-aes192-wrap" -#define NID_id_aes192_wrap 789 -#define OBJ_id_aes192_wrap OBJ_aes,25L - -#define SN_aes_192_gcm "id-aes192-GCM" -#define LN_aes_192_gcm "aes-192-gcm" -#define NID_aes_192_gcm 898 -#define OBJ_aes_192_gcm OBJ_aes,26L - -#define SN_aes_192_ccm "id-aes192-CCM" -#define LN_aes_192_ccm "aes-192-ccm" -#define NID_aes_192_ccm 899 -#define OBJ_aes_192_ccm OBJ_aes,27L - -#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" -#define NID_id_aes192_wrap_pad 900 -#define OBJ_id_aes192_wrap_pad OBJ_aes,28L - -#define SN_aes_256_ecb "AES-256-ECB" -#define LN_aes_256_ecb "aes-256-ecb" -#define NID_aes_256_ecb 426 -#define OBJ_aes_256_ecb OBJ_aes,41L - -#define SN_aes_256_cbc "AES-256-CBC" -#define LN_aes_256_cbc "aes-256-cbc" -#define NID_aes_256_cbc 427 -#define OBJ_aes_256_cbc OBJ_aes,42L - -#define SN_aes_256_ofb128 "AES-256-OFB" -#define LN_aes_256_ofb128 "aes-256-ofb" -#define NID_aes_256_ofb128 428 -#define OBJ_aes_256_ofb128 OBJ_aes,43L - -#define SN_aes_256_cfb128 "AES-256-CFB" -#define LN_aes_256_cfb128 "aes-256-cfb" -#define NID_aes_256_cfb128 429 -#define OBJ_aes_256_cfb128 OBJ_aes,44L - -#define SN_id_aes256_wrap "id-aes256-wrap" -#define NID_id_aes256_wrap 790 -#define OBJ_id_aes256_wrap OBJ_aes,45L - -#define SN_aes_256_gcm "id-aes256-GCM" -#define LN_aes_256_gcm "aes-256-gcm" -#define NID_aes_256_gcm 901 -#define OBJ_aes_256_gcm OBJ_aes,46L - -#define SN_aes_256_ccm "id-aes256-CCM" -#define LN_aes_256_ccm "aes-256-ccm" -#define NID_aes_256_ccm 902 -#define OBJ_aes_256_ccm OBJ_aes,47L - -#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" -#define NID_id_aes256_wrap_pad 903 -#define OBJ_id_aes256_wrap_pad OBJ_aes,48L - -#define SN_aes_128_cfb1 "AES-128-CFB1" -#define LN_aes_128_cfb1 "aes-128-cfb1" -#define NID_aes_128_cfb1 650 - -#define SN_aes_192_cfb1 "AES-192-CFB1" -#define LN_aes_192_cfb1 "aes-192-cfb1" -#define NID_aes_192_cfb1 651 - -#define SN_aes_256_cfb1 "AES-256-CFB1" -#define LN_aes_256_cfb1 "aes-256-cfb1" -#define NID_aes_256_cfb1 652 - -#define SN_aes_128_cfb8 "AES-128-CFB8" -#define LN_aes_128_cfb8 "aes-128-cfb8" -#define NID_aes_128_cfb8 653 - -#define SN_aes_192_cfb8 "AES-192-CFB8" -#define LN_aes_192_cfb8 "aes-192-cfb8" -#define NID_aes_192_cfb8 654 - -#define SN_aes_256_cfb8 "AES-256-CFB8" -#define LN_aes_256_cfb8 "aes-256-cfb8" -#define NID_aes_256_cfb8 655 - -#define SN_aes_128_ctr "AES-128-CTR" -#define LN_aes_128_ctr "aes-128-ctr" -#define NID_aes_128_ctr 904 - -#define SN_aes_192_ctr "AES-192-CTR" -#define LN_aes_192_ctr "aes-192-ctr" -#define NID_aes_192_ctr 905 - -#define SN_aes_256_ctr "AES-256-CTR" -#define LN_aes_256_ctr "aes-256-ctr" -#define NID_aes_256_ctr 906 - -#define SN_aes_128_xts "AES-128-XTS" -#define LN_aes_128_xts "aes-128-xts" -#define NID_aes_128_xts 913 - -#define SN_aes_256_xts "AES-256-XTS" -#define LN_aes_256_xts "aes-256-xts" -#define NID_aes_256_xts 914 - -#define SN_des_cfb1 "DES-CFB1" -#define LN_des_cfb1 "des-cfb1" -#define NID_des_cfb1 656 - -#define SN_des_cfb8 "DES-CFB8" -#define LN_des_cfb8 "des-cfb8" -#define NID_des_cfb8 657 - -#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" -#define LN_des_ede3_cfb1 "des-ede3-cfb1" -#define NID_des_ede3_cfb1 658 - -#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" -#define LN_des_ede3_cfb8 "des-ede3-cfb8" -#define NID_des_ede3_cfb8 659 - -#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L - -#define SN_sha256 "SHA256" -#define LN_sha256 "sha256" -#define NID_sha256 672 -#define OBJ_sha256 OBJ_nist_hashalgs,1L - -#define SN_sha384 "SHA384" -#define LN_sha384 "sha384" -#define NID_sha384 673 -#define OBJ_sha384 OBJ_nist_hashalgs,2L - -#define SN_sha512 "SHA512" -#define LN_sha512 "sha512" -#define NID_sha512 674 -#define OBJ_sha512 OBJ_nist_hashalgs,3L - -#define SN_sha224 "SHA224" -#define LN_sha224 "sha224" -#define NID_sha224 675 -#define OBJ_sha224 OBJ_nist_hashalgs,4L - -#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L - -#define SN_dsa_with_SHA224 "dsa_with_SHA224" -#define NID_dsa_with_SHA224 802 -#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L - -#define SN_dsa_with_SHA256 "dsa_with_SHA256" -#define NID_dsa_with_SHA256 803 -#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L - -#define SN_hold_instruction_code "holdInstructionCode" -#define LN_hold_instruction_code "Hold Instruction Code" -#define NID_hold_instruction_code 430 -#define OBJ_hold_instruction_code OBJ_id_ce,23L - -#define OBJ_holdInstruction OBJ_X9_57,2L - -#define SN_hold_instruction_none "holdInstructionNone" -#define LN_hold_instruction_none "Hold Instruction None" -#define NID_hold_instruction_none 431 -#define OBJ_hold_instruction_none OBJ_holdInstruction,1L - -#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" -#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" -#define NID_hold_instruction_call_issuer 432 -#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L - -#define SN_hold_instruction_reject "holdInstructionReject" -#define LN_hold_instruction_reject "Hold Instruction Reject" -#define NID_hold_instruction_reject 433 -#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L - -#define SN_data "data" -#define NID_data 434 -#define OBJ_data OBJ_itu_t,9L - -#define SN_pss "pss" -#define NID_pss 435 -#define OBJ_pss OBJ_data,2342L - -#define SN_ucl "ucl" -#define NID_ucl 436 -#define OBJ_ucl OBJ_pss,19200300L - -#define SN_pilot "pilot" -#define NID_pilot 437 -#define OBJ_pilot OBJ_ucl,100L - -#define LN_pilotAttributeType "pilotAttributeType" -#define NID_pilotAttributeType 438 -#define OBJ_pilotAttributeType OBJ_pilot,1L - -#define LN_pilotAttributeSyntax "pilotAttributeSyntax" -#define NID_pilotAttributeSyntax 439 -#define OBJ_pilotAttributeSyntax OBJ_pilot,3L - -#define LN_pilotObjectClass "pilotObjectClass" -#define NID_pilotObjectClass 440 -#define OBJ_pilotObjectClass OBJ_pilot,4L - -#define LN_pilotGroups "pilotGroups" -#define NID_pilotGroups 441 -#define OBJ_pilotGroups OBJ_pilot,10L - -#define LN_iA5StringSyntax "iA5StringSyntax" -#define NID_iA5StringSyntax 442 -#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L - -#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" -#define NID_caseIgnoreIA5StringSyntax 443 -#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L - -#define LN_pilotObject "pilotObject" -#define NID_pilotObject 444 -#define OBJ_pilotObject OBJ_pilotObjectClass,3L - -#define LN_pilotPerson "pilotPerson" -#define NID_pilotPerson 445 -#define OBJ_pilotPerson OBJ_pilotObjectClass,4L - -#define SN_account "account" -#define NID_account 446 -#define OBJ_account OBJ_pilotObjectClass,5L - -#define SN_document "document" -#define NID_document 447 -#define OBJ_document OBJ_pilotObjectClass,6L - -#define SN_room "room" -#define NID_room 448 -#define OBJ_room OBJ_pilotObjectClass,7L - -#define LN_documentSeries "documentSeries" -#define NID_documentSeries 449 -#define OBJ_documentSeries OBJ_pilotObjectClass,9L - -#define SN_Domain "domain" -#define LN_Domain "Domain" -#define NID_Domain 392 -#define OBJ_Domain OBJ_pilotObjectClass,13L - -#define LN_rFC822localPart "rFC822localPart" -#define NID_rFC822localPart 450 -#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L - -#define LN_dNSDomain "dNSDomain" -#define NID_dNSDomain 451 -#define OBJ_dNSDomain OBJ_pilotObjectClass,15L - -#define LN_domainRelatedObject "domainRelatedObject" -#define NID_domainRelatedObject 452 -#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L - -#define LN_friendlyCountry "friendlyCountry" -#define NID_friendlyCountry 453 -#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L - -#define LN_simpleSecurityObject "simpleSecurityObject" -#define NID_simpleSecurityObject 454 -#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L - -#define LN_pilotOrganization "pilotOrganization" -#define NID_pilotOrganization 455 -#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L - -#define LN_pilotDSA "pilotDSA" -#define NID_pilotDSA 456 -#define OBJ_pilotDSA OBJ_pilotObjectClass,21L - -#define LN_qualityLabelledData "qualityLabelledData" -#define NID_qualityLabelledData 457 -#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L - -#define SN_userId "UID" -#define LN_userId "userId" -#define NID_userId 458 -#define OBJ_userId OBJ_pilotAttributeType,1L - -#define LN_textEncodedORAddress "textEncodedORAddress" -#define NID_textEncodedORAddress 459 -#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L - -#define SN_rfc822Mailbox "mail" -#define LN_rfc822Mailbox "rfc822Mailbox" -#define NID_rfc822Mailbox 460 -#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L - -#define SN_info "info" -#define NID_info 461 -#define OBJ_info OBJ_pilotAttributeType,4L - -#define LN_favouriteDrink "favouriteDrink" -#define NID_favouriteDrink 462 -#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L - -#define LN_roomNumber "roomNumber" -#define NID_roomNumber 463 -#define OBJ_roomNumber OBJ_pilotAttributeType,6L - -#define SN_photo "photo" -#define NID_photo 464 -#define OBJ_photo OBJ_pilotAttributeType,7L - -#define LN_userClass "userClass" -#define NID_userClass 465 -#define OBJ_userClass OBJ_pilotAttributeType,8L - -#define SN_host "host" -#define NID_host 466 -#define OBJ_host OBJ_pilotAttributeType,9L - -#define SN_manager "manager" -#define NID_manager 467 -#define OBJ_manager OBJ_pilotAttributeType,10L - -#define LN_documentIdentifier "documentIdentifier" -#define NID_documentIdentifier 468 -#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L - -#define LN_documentTitle "documentTitle" -#define NID_documentTitle 469 -#define OBJ_documentTitle OBJ_pilotAttributeType,12L - -#define LN_documentVersion "documentVersion" -#define NID_documentVersion 470 -#define OBJ_documentVersion OBJ_pilotAttributeType,13L - -#define LN_documentAuthor "documentAuthor" -#define NID_documentAuthor 471 -#define OBJ_documentAuthor OBJ_pilotAttributeType,14L - -#define LN_documentLocation "documentLocation" -#define NID_documentLocation 472 -#define OBJ_documentLocation OBJ_pilotAttributeType,15L - -#define LN_homeTelephoneNumber "homeTelephoneNumber" -#define NID_homeTelephoneNumber 473 -#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L - -#define SN_secretary "secretary" -#define NID_secretary 474 -#define OBJ_secretary OBJ_pilotAttributeType,21L - -#define LN_otherMailbox "otherMailbox" -#define NID_otherMailbox 475 -#define OBJ_otherMailbox OBJ_pilotAttributeType,22L - -#define LN_lastModifiedTime "lastModifiedTime" -#define NID_lastModifiedTime 476 -#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L - -#define LN_lastModifiedBy "lastModifiedBy" -#define NID_lastModifiedBy 477 -#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L - -#define SN_domainComponent "DC" -#define LN_domainComponent "domainComponent" -#define NID_domainComponent 391 -#define OBJ_domainComponent OBJ_pilotAttributeType,25L - -#define LN_aRecord "aRecord" -#define NID_aRecord 478 -#define OBJ_aRecord OBJ_pilotAttributeType,26L - -#define LN_pilotAttributeType27 "pilotAttributeType27" -#define NID_pilotAttributeType27 479 -#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L - -#define LN_mXRecord "mXRecord" -#define NID_mXRecord 480 -#define OBJ_mXRecord OBJ_pilotAttributeType,28L - -#define LN_nSRecord "nSRecord" -#define NID_nSRecord 481 -#define OBJ_nSRecord OBJ_pilotAttributeType,29L - -#define LN_sOARecord "sOARecord" -#define NID_sOARecord 482 -#define OBJ_sOARecord OBJ_pilotAttributeType,30L - -#define LN_cNAMERecord "cNAMERecord" -#define NID_cNAMERecord 483 -#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L - -#define LN_associatedDomain "associatedDomain" -#define NID_associatedDomain 484 -#define OBJ_associatedDomain OBJ_pilotAttributeType,37L - -#define LN_associatedName "associatedName" -#define NID_associatedName 485 -#define OBJ_associatedName OBJ_pilotAttributeType,38L - -#define LN_homePostalAddress "homePostalAddress" -#define NID_homePostalAddress 486 -#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L - -#define LN_personalTitle "personalTitle" -#define NID_personalTitle 487 -#define OBJ_personalTitle OBJ_pilotAttributeType,40L - -#define LN_mobileTelephoneNumber "mobileTelephoneNumber" -#define NID_mobileTelephoneNumber 488 -#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L - -#define LN_pagerTelephoneNumber "pagerTelephoneNumber" -#define NID_pagerTelephoneNumber 489 -#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L - -#define LN_friendlyCountryName "friendlyCountryName" -#define NID_friendlyCountryName 490 -#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L - -#define LN_organizationalStatus "organizationalStatus" -#define NID_organizationalStatus 491 -#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L - -#define LN_janetMailbox "janetMailbox" -#define NID_janetMailbox 492 -#define OBJ_janetMailbox OBJ_pilotAttributeType,46L - -#define LN_mailPreferenceOption "mailPreferenceOption" -#define NID_mailPreferenceOption 493 -#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L - -#define LN_buildingName "buildingName" -#define NID_buildingName 494 -#define OBJ_buildingName OBJ_pilotAttributeType,48L - -#define LN_dSAQuality "dSAQuality" -#define NID_dSAQuality 495 -#define OBJ_dSAQuality OBJ_pilotAttributeType,49L - -#define LN_singleLevelQuality "singleLevelQuality" -#define NID_singleLevelQuality 496 -#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L - -#define LN_subtreeMinimumQuality "subtreeMinimumQuality" -#define NID_subtreeMinimumQuality 497 -#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L - -#define LN_subtreeMaximumQuality "subtreeMaximumQuality" -#define NID_subtreeMaximumQuality 498 -#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L - -#define LN_personalSignature "personalSignature" -#define NID_personalSignature 499 -#define OBJ_personalSignature OBJ_pilotAttributeType,53L - -#define LN_dITRedirect "dITRedirect" -#define NID_dITRedirect 500 -#define OBJ_dITRedirect OBJ_pilotAttributeType,54L - -#define SN_audio "audio" -#define NID_audio 501 -#define OBJ_audio OBJ_pilotAttributeType,55L - -#define LN_documentPublisher "documentPublisher" -#define NID_documentPublisher 502 -#define OBJ_documentPublisher OBJ_pilotAttributeType,56L - -#define SN_id_set "id-set" -#define LN_id_set "Secure Electronic Transactions" -#define NID_id_set 512 -#define OBJ_id_set OBJ_international_organizations,42L - -#define SN_set_ctype "set-ctype" -#define LN_set_ctype "content types" -#define NID_set_ctype 513 -#define OBJ_set_ctype OBJ_id_set,0L - -#define SN_set_msgExt "set-msgExt" -#define LN_set_msgExt "message extensions" -#define NID_set_msgExt 514 -#define OBJ_set_msgExt OBJ_id_set,1L - -#define SN_set_attr "set-attr" -#define NID_set_attr 515 -#define OBJ_set_attr OBJ_id_set,3L - -#define SN_set_policy "set-policy" -#define NID_set_policy 516 -#define OBJ_set_policy OBJ_id_set,5L - -#define SN_set_certExt "set-certExt" -#define LN_set_certExt "certificate extensions" -#define NID_set_certExt 517 -#define OBJ_set_certExt OBJ_id_set,7L - -#define SN_set_brand "set-brand" -#define NID_set_brand 518 -#define OBJ_set_brand OBJ_id_set,8L - -#define SN_setct_PANData "setct-PANData" -#define NID_setct_PANData 519 -#define OBJ_setct_PANData OBJ_set_ctype,0L - -#define SN_setct_PANToken "setct-PANToken" -#define NID_setct_PANToken 520 -#define OBJ_setct_PANToken OBJ_set_ctype,1L - -#define SN_setct_PANOnly "setct-PANOnly" -#define NID_setct_PANOnly 521 -#define OBJ_setct_PANOnly OBJ_set_ctype,2L - -#define SN_setct_OIData "setct-OIData" -#define NID_setct_OIData 522 -#define OBJ_setct_OIData OBJ_set_ctype,3L - -#define SN_setct_PI "setct-PI" -#define NID_setct_PI 523 -#define OBJ_setct_PI OBJ_set_ctype,4L - -#define SN_setct_PIData "setct-PIData" -#define NID_setct_PIData 524 -#define OBJ_setct_PIData OBJ_set_ctype,5L - -#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" -#define NID_setct_PIDataUnsigned 525 -#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L - -#define SN_setct_HODInput "setct-HODInput" -#define NID_setct_HODInput 526 -#define OBJ_setct_HODInput OBJ_set_ctype,7L - -#define SN_setct_AuthResBaggage "setct-AuthResBaggage" -#define NID_setct_AuthResBaggage 527 -#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L - -#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" -#define NID_setct_AuthRevReqBaggage 528 -#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L - -#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" -#define NID_setct_AuthRevResBaggage 529 -#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L - -#define SN_setct_CapTokenSeq "setct-CapTokenSeq" -#define NID_setct_CapTokenSeq 530 -#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L - -#define SN_setct_PInitResData "setct-PInitResData" -#define NID_setct_PInitResData 531 -#define OBJ_setct_PInitResData OBJ_set_ctype,12L - -#define SN_setct_PI_TBS "setct-PI-TBS" -#define NID_setct_PI_TBS 532 -#define OBJ_setct_PI_TBS OBJ_set_ctype,13L - -#define SN_setct_PResData "setct-PResData" -#define NID_setct_PResData 533 -#define OBJ_setct_PResData OBJ_set_ctype,14L - -#define SN_setct_AuthReqTBS "setct-AuthReqTBS" -#define NID_setct_AuthReqTBS 534 -#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L - -#define SN_setct_AuthResTBS "setct-AuthResTBS" -#define NID_setct_AuthResTBS 535 -#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L - -#define SN_setct_AuthResTBSX "setct-AuthResTBSX" -#define NID_setct_AuthResTBSX 536 -#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L - -#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" -#define NID_setct_AuthTokenTBS 537 -#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L - -#define SN_setct_CapTokenData "setct-CapTokenData" -#define NID_setct_CapTokenData 538 -#define OBJ_setct_CapTokenData OBJ_set_ctype,20L - -#define SN_setct_CapTokenTBS "setct-CapTokenTBS" -#define NID_setct_CapTokenTBS 539 -#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L - -#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" -#define NID_setct_AcqCardCodeMsg 540 -#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L - -#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" -#define NID_setct_AuthRevReqTBS 541 -#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L - -#define SN_setct_AuthRevResData "setct-AuthRevResData" -#define NID_setct_AuthRevResData 542 -#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L - -#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" -#define NID_setct_AuthRevResTBS 543 -#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L - -#define SN_setct_CapReqTBS "setct-CapReqTBS" -#define NID_setct_CapReqTBS 544 -#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L - -#define SN_setct_CapReqTBSX "setct-CapReqTBSX" -#define NID_setct_CapReqTBSX 545 -#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L - -#define SN_setct_CapResData "setct-CapResData" -#define NID_setct_CapResData 546 -#define OBJ_setct_CapResData OBJ_set_ctype,28L - -#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" -#define NID_setct_CapRevReqTBS 547 -#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L - -#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" -#define NID_setct_CapRevReqTBSX 548 -#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L - -#define SN_setct_CapRevResData "setct-CapRevResData" -#define NID_setct_CapRevResData 549 -#define OBJ_setct_CapRevResData OBJ_set_ctype,31L - -#define SN_setct_CredReqTBS "setct-CredReqTBS" -#define NID_setct_CredReqTBS 550 -#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L - -#define SN_setct_CredReqTBSX "setct-CredReqTBSX" -#define NID_setct_CredReqTBSX 551 -#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L - -#define SN_setct_CredResData "setct-CredResData" -#define NID_setct_CredResData 552 -#define OBJ_setct_CredResData OBJ_set_ctype,34L - -#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" -#define NID_setct_CredRevReqTBS 553 -#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L - -#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" -#define NID_setct_CredRevReqTBSX 554 -#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L - -#define SN_setct_CredRevResData "setct-CredRevResData" -#define NID_setct_CredRevResData 555 -#define OBJ_setct_CredRevResData OBJ_set_ctype,37L - -#define SN_setct_PCertReqData "setct-PCertReqData" -#define NID_setct_PCertReqData 556 -#define OBJ_setct_PCertReqData OBJ_set_ctype,38L - -#define SN_setct_PCertResTBS "setct-PCertResTBS" -#define NID_setct_PCertResTBS 557 -#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L - -#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" -#define NID_setct_BatchAdminReqData 558 -#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L - -#define SN_setct_BatchAdminResData "setct-BatchAdminResData" -#define NID_setct_BatchAdminResData 559 -#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L - -#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" -#define NID_setct_CardCInitResTBS 560 -#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L - -#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" -#define NID_setct_MeAqCInitResTBS 561 -#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L - -#define SN_setct_RegFormResTBS "setct-RegFormResTBS" -#define NID_setct_RegFormResTBS 562 -#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L - -#define SN_setct_CertReqData "setct-CertReqData" -#define NID_setct_CertReqData 563 -#define OBJ_setct_CertReqData OBJ_set_ctype,45L - -#define SN_setct_CertReqTBS "setct-CertReqTBS" -#define NID_setct_CertReqTBS 564 -#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L - -#define SN_setct_CertResData "setct-CertResData" -#define NID_setct_CertResData 565 -#define OBJ_setct_CertResData OBJ_set_ctype,47L - -#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" -#define NID_setct_CertInqReqTBS 566 -#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L - -#define SN_setct_ErrorTBS "setct-ErrorTBS" -#define NID_setct_ErrorTBS 567 -#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L - -#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" -#define NID_setct_PIDualSignedTBE 568 -#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L - -#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" -#define NID_setct_PIUnsignedTBE 569 -#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L - -#define SN_setct_AuthReqTBE "setct-AuthReqTBE" -#define NID_setct_AuthReqTBE 570 -#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L - -#define SN_setct_AuthResTBE "setct-AuthResTBE" -#define NID_setct_AuthResTBE 571 -#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L - -#define SN_setct_AuthResTBEX "setct-AuthResTBEX" -#define NID_setct_AuthResTBEX 572 -#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L - -#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" -#define NID_setct_AuthTokenTBE 573 -#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L - -#define SN_setct_CapTokenTBE "setct-CapTokenTBE" -#define NID_setct_CapTokenTBE 574 -#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L - -#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" -#define NID_setct_CapTokenTBEX 575 -#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L - -#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" -#define NID_setct_AcqCardCodeMsgTBE 576 -#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L - -#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" -#define NID_setct_AuthRevReqTBE 577 -#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L - -#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" -#define NID_setct_AuthRevResTBE 578 -#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L - -#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" -#define NID_setct_AuthRevResTBEB 579 -#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L - -#define SN_setct_CapReqTBE "setct-CapReqTBE" -#define NID_setct_CapReqTBE 580 -#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L - -#define SN_setct_CapReqTBEX "setct-CapReqTBEX" -#define NID_setct_CapReqTBEX 581 -#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L - -#define SN_setct_CapResTBE "setct-CapResTBE" -#define NID_setct_CapResTBE 582 -#define OBJ_setct_CapResTBE OBJ_set_ctype,64L - -#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" -#define NID_setct_CapRevReqTBE 583 -#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L - -#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" -#define NID_setct_CapRevReqTBEX 584 -#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L - -#define SN_setct_CapRevResTBE "setct-CapRevResTBE" -#define NID_setct_CapRevResTBE 585 -#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L - -#define SN_setct_CredReqTBE "setct-CredReqTBE" -#define NID_setct_CredReqTBE 586 -#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L - -#define SN_setct_CredReqTBEX "setct-CredReqTBEX" -#define NID_setct_CredReqTBEX 587 -#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L - -#define SN_setct_CredResTBE "setct-CredResTBE" -#define NID_setct_CredResTBE 588 -#define OBJ_setct_CredResTBE OBJ_set_ctype,70L - -#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" -#define NID_setct_CredRevReqTBE 589 -#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L - -#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" -#define NID_setct_CredRevReqTBEX 590 -#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L - -#define SN_setct_CredRevResTBE "setct-CredRevResTBE" -#define NID_setct_CredRevResTBE 591 -#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L - -#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" -#define NID_setct_BatchAdminReqTBE 592 -#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L - -#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" -#define NID_setct_BatchAdminResTBE 593 -#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L - -#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" -#define NID_setct_RegFormReqTBE 594 -#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L - -#define SN_setct_CertReqTBE "setct-CertReqTBE" -#define NID_setct_CertReqTBE 595 -#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L - -#define SN_setct_CertReqTBEX "setct-CertReqTBEX" -#define NID_setct_CertReqTBEX 596 -#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L - -#define SN_setct_CertResTBE "setct-CertResTBE" -#define NID_setct_CertResTBE 597 -#define OBJ_setct_CertResTBE OBJ_set_ctype,79L - -#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" -#define NID_setct_CRLNotificationTBS 598 -#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L - -#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" -#define NID_setct_CRLNotificationResTBS 599 -#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L - -#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" -#define NID_setct_BCIDistributionTBS 600 -#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L - -#define SN_setext_genCrypt "setext-genCrypt" -#define LN_setext_genCrypt "generic cryptogram" -#define NID_setext_genCrypt 601 -#define OBJ_setext_genCrypt OBJ_set_msgExt,1L - -#define SN_setext_miAuth "setext-miAuth" -#define LN_setext_miAuth "merchant initiated auth" -#define NID_setext_miAuth 602 -#define OBJ_setext_miAuth OBJ_set_msgExt,3L - -#define SN_setext_pinSecure "setext-pinSecure" -#define NID_setext_pinSecure 603 -#define OBJ_setext_pinSecure OBJ_set_msgExt,4L - -#define SN_setext_pinAny "setext-pinAny" -#define NID_setext_pinAny 604 -#define OBJ_setext_pinAny OBJ_set_msgExt,5L - -#define SN_setext_track2 "setext-track2" -#define NID_setext_track2 605 -#define OBJ_setext_track2 OBJ_set_msgExt,7L - -#define SN_setext_cv "setext-cv" -#define LN_setext_cv "additional verification" -#define NID_setext_cv 606 -#define OBJ_setext_cv OBJ_set_msgExt,8L - -#define SN_set_policy_root "set-policy-root" -#define NID_set_policy_root 607 -#define OBJ_set_policy_root OBJ_set_policy,0L - -#define SN_setCext_hashedRoot "setCext-hashedRoot" -#define NID_setCext_hashedRoot 608 -#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L - -#define SN_setCext_certType "setCext-certType" -#define NID_setCext_certType 609 -#define OBJ_setCext_certType OBJ_set_certExt,1L - -#define SN_setCext_merchData "setCext-merchData" -#define NID_setCext_merchData 610 -#define OBJ_setCext_merchData OBJ_set_certExt,2L - -#define SN_setCext_cCertRequired "setCext-cCertRequired" -#define NID_setCext_cCertRequired 611 -#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L - -#define SN_setCext_tunneling "setCext-tunneling" -#define NID_setCext_tunneling 612 -#define OBJ_setCext_tunneling OBJ_set_certExt,4L - -#define SN_setCext_setExt "setCext-setExt" -#define NID_setCext_setExt 613 -#define OBJ_setCext_setExt OBJ_set_certExt,5L - -#define SN_setCext_setQualf "setCext-setQualf" -#define NID_setCext_setQualf 614 -#define OBJ_setCext_setQualf OBJ_set_certExt,6L - -#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" -#define NID_setCext_PGWYcapabilities 615 -#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L - -#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" -#define NID_setCext_TokenIdentifier 616 -#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L - -#define SN_setCext_Track2Data "setCext-Track2Data" -#define NID_setCext_Track2Data 617 -#define OBJ_setCext_Track2Data OBJ_set_certExt,9L - -#define SN_setCext_TokenType "setCext-TokenType" -#define NID_setCext_TokenType 618 -#define OBJ_setCext_TokenType OBJ_set_certExt,10L - -#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" -#define NID_setCext_IssuerCapabilities 619 -#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L - -#define SN_setAttr_Cert "setAttr-Cert" -#define NID_setAttr_Cert 620 -#define OBJ_setAttr_Cert OBJ_set_attr,0L - -#define SN_setAttr_PGWYcap "setAttr-PGWYcap" -#define LN_setAttr_PGWYcap "payment gateway capabilities" -#define NID_setAttr_PGWYcap 621 -#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L - -#define SN_setAttr_TokenType "setAttr-TokenType" -#define NID_setAttr_TokenType 622 -#define OBJ_setAttr_TokenType OBJ_set_attr,2L - -#define SN_setAttr_IssCap "setAttr-IssCap" -#define LN_setAttr_IssCap "issuer capabilities" -#define NID_setAttr_IssCap 623 -#define OBJ_setAttr_IssCap OBJ_set_attr,3L - -#define SN_set_rootKeyThumb "set-rootKeyThumb" -#define NID_set_rootKeyThumb 624 -#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L - -#define SN_set_addPolicy "set-addPolicy" -#define NID_set_addPolicy 625 -#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L - -#define SN_setAttr_Token_EMV "setAttr-Token-EMV" -#define NID_setAttr_Token_EMV 626 -#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L - -#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" -#define NID_setAttr_Token_B0Prime 627 -#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L - -#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" -#define NID_setAttr_IssCap_CVM 628 -#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L - -#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" -#define NID_setAttr_IssCap_T2 629 -#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L - -#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" -#define NID_setAttr_IssCap_Sig 630 -#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L - -#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" -#define LN_setAttr_GenCryptgrm "generate cryptogram" -#define NID_setAttr_GenCryptgrm 631 -#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L - -#define SN_setAttr_T2Enc "setAttr-T2Enc" -#define LN_setAttr_T2Enc "encrypted track 2" -#define NID_setAttr_T2Enc 632 -#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L - -#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" -#define LN_setAttr_T2cleartxt "cleartext track 2" -#define NID_setAttr_T2cleartxt 633 -#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L - -#define SN_setAttr_TokICCsig "setAttr-TokICCsig" -#define LN_setAttr_TokICCsig "ICC or token signature" -#define NID_setAttr_TokICCsig 634 -#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L - -#define SN_setAttr_SecDevSig "setAttr-SecDevSig" -#define LN_setAttr_SecDevSig "secure device signature" -#define NID_setAttr_SecDevSig 635 -#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L - -#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" -#define NID_set_brand_IATA_ATA 636 -#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L - -#define SN_set_brand_Diners "set-brand-Diners" -#define NID_set_brand_Diners 637 -#define OBJ_set_brand_Diners OBJ_set_brand,30L - -#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" -#define NID_set_brand_AmericanExpress 638 -#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L - -#define SN_set_brand_JCB "set-brand-JCB" -#define NID_set_brand_JCB 639 -#define OBJ_set_brand_JCB OBJ_set_brand,35L - -#define SN_set_brand_Visa "set-brand-Visa" -#define NID_set_brand_Visa 640 -#define OBJ_set_brand_Visa OBJ_set_brand,4L - -#define SN_set_brand_MasterCard "set-brand-MasterCard" -#define NID_set_brand_MasterCard 641 -#define OBJ_set_brand_MasterCard OBJ_set_brand,5L - -#define SN_set_brand_Novus "set-brand-Novus" -#define NID_set_brand_Novus 642 -#define OBJ_set_brand_Novus OBJ_set_brand,6011L - -#define SN_des_cdmf "DES-CDMF" -#define LN_des_cdmf "des-cdmf" -#define NID_des_cdmf 643 -#define OBJ_des_cdmf OBJ_rsadsi,3L,10L - -#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" -#define NID_rsaOAEPEncryptionSET 644 -#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L - -#define SN_ipsec3 "Oakley-EC2N-3" -#define LN_ipsec3 "ipsec3" -#define NID_ipsec3 749 - -#define SN_ipsec4 "Oakley-EC2N-4" -#define LN_ipsec4 "ipsec4" -#define NID_ipsec4 750 - -#define SN_whirlpool "whirlpool" -#define NID_whirlpool 804 -#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L - -#define SN_cryptopro "cryptopro" -#define NID_cryptopro 805 -#define OBJ_cryptopro OBJ_member_body,643L,2L,2L - -#define SN_cryptocom "cryptocom" -#define NID_cryptocom 806 -#define OBJ_cryptocom OBJ_member_body,643L,2L,9L - -#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" -#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" -#define NID_id_GostR3411_94_with_GostR3410_2001 807 -#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L - -#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" -#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" -#define NID_id_GostR3411_94_with_GostR3410_94 808 -#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L - -#define SN_id_GostR3411_94 "md_gost94" -#define LN_id_GostR3411_94 "GOST R 34.11-94" -#define NID_id_GostR3411_94 809 -#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L - -#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" -#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" -#define NID_id_HMACGostR3411_94 810 -#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L - -#define SN_id_GostR3410_2001 "gost2001" -#define LN_id_GostR3410_2001 "GOST R 34.10-2001" -#define NID_id_GostR3410_2001 811 -#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L - -#define SN_id_GostR3410_94 "gost94" -#define LN_id_GostR3410_94 "GOST R 34.10-94" -#define NID_id_GostR3410_94 812 -#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L - -#define SN_id_Gost28147_89 "gost89" -#define LN_id_Gost28147_89 "GOST 28147-89" -#define NID_id_Gost28147_89 813 -#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L - -#define SN_gost89_cnt "gost89-cnt" -#define NID_gost89_cnt 814 - -#define SN_id_Gost28147_89_MAC "gost-mac" -#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" -#define NID_id_Gost28147_89_MAC 815 -#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L - -#define SN_id_GostR3411_94_prf "prf-gostr3411-94" -#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" -#define NID_id_GostR3411_94_prf 816 -#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L - -#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" -#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" -#define NID_id_GostR3410_2001DH 817 -#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L - -#define SN_id_GostR3410_94DH "id-GostR3410-94DH" -#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" -#define NID_id_GostR3410_94DH 818 -#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L - -#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" -#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 -#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L - -#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" -#define NID_id_Gost28147_89_None_KeyMeshing 820 -#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L - -#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" -#define NID_id_GostR3411_94_TestParamSet 821 -#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L - -#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" -#define NID_id_GostR3411_94_CryptoProParamSet 822 -#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L - -#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" -#define NID_id_Gost28147_89_TestParamSet 823 -#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L - -#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 -#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L - -#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 -#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L - -#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 -#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L - -#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 -#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L - -#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 -#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L - -#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" -#define NID_id_GostR3410_94_TestParamSet 831 -#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L - -#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 -#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L - -#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 -#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L - -#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 -#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L - -#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 -#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L - -#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 -#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L - -#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 -#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L - -#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 -#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L - -#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" -#define NID_id_GostR3410_2001_TestParamSet 839 -#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L - -#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 -#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L - -#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 -#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L - -#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 -#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L - -#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 -#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L - -#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 -#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L - -#define SN_id_GostR3410_94_a "id-GostR3410-94-a" -#define NID_id_GostR3410_94_a 845 -#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L - -#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" -#define NID_id_GostR3410_94_aBis 846 -#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L - -#define SN_id_GostR3410_94_b "id-GostR3410-94-b" -#define NID_id_GostR3410_94_b 847 -#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L - -#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" -#define NID_id_GostR3410_94_bBis 848 -#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L - -#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" -#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" -#define NID_id_Gost28147_89_cc 849 -#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L - -#define SN_id_GostR3410_94_cc "gost94cc" -#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" -#define NID_id_GostR3410_94_cc 850 -#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L - -#define SN_id_GostR3410_2001_cc "gost2001cc" -#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" -#define NID_id_GostR3410_2001_cc 851 -#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L - -#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" -#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 -#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L - -#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" -#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 -#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L - -#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" -#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" -#define NID_id_GostR3410_2001_ParamSet_cc 854 -#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L - -#define SN_camellia_128_cbc "CAMELLIA-128-CBC" -#define LN_camellia_128_cbc "camellia-128-cbc" -#define NID_camellia_128_cbc 751 -#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L - -#define SN_camellia_192_cbc "CAMELLIA-192-CBC" -#define LN_camellia_192_cbc "camellia-192-cbc" -#define NID_camellia_192_cbc 752 -#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L - -#define SN_camellia_256_cbc "CAMELLIA-256-CBC" -#define LN_camellia_256_cbc "camellia-256-cbc" -#define NID_camellia_256_cbc 753 -#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L - -#define SN_id_camellia128_wrap "id-camellia128-wrap" -#define NID_id_camellia128_wrap 907 -#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L - -#define SN_id_camellia192_wrap "id-camellia192-wrap" -#define NID_id_camellia192_wrap 908 -#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L - -#define SN_id_camellia256_wrap "id-camellia256-wrap" -#define NID_id_camellia256_wrap 909 -#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L - -#define OBJ_ntt_ds 0L,3L,4401L,5L - -#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L - -#define SN_camellia_128_ecb "CAMELLIA-128-ECB" -#define LN_camellia_128_ecb "camellia-128-ecb" -#define NID_camellia_128_ecb 754 -#define OBJ_camellia_128_ecb OBJ_camellia,1L - -#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" -#define LN_camellia_128_ofb128 "camellia-128-ofb" -#define NID_camellia_128_ofb128 766 -#define OBJ_camellia_128_ofb128 OBJ_camellia,3L - -#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" -#define LN_camellia_128_cfb128 "camellia-128-cfb" -#define NID_camellia_128_cfb128 757 -#define OBJ_camellia_128_cfb128 OBJ_camellia,4L - -#define SN_camellia_192_ecb "CAMELLIA-192-ECB" -#define LN_camellia_192_ecb "camellia-192-ecb" -#define NID_camellia_192_ecb 755 -#define OBJ_camellia_192_ecb OBJ_camellia,21L - -#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" -#define LN_camellia_192_ofb128 "camellia-192-ofb" -#define NID_camellia_192_ofb128 767 -#define OBJ_camellia_192_ofb128 OBJ_camellia,23L - -#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" -#define LN_camellia_192_cfb128 "camellia-192-cfb" -#define NID_camellia_192_cfb128 758 -#define OBJ_camellia_192_cfb128 OBJ_camellia,24L - -#define SN_camellia_256_ecb "CAMELLIA-256-ECB" -#define LN_camellia_256_ecb "camellia-256-ecb" -#define NID_camellia_256_ecb 756 -#define OBJ_camellia_256_ecb OBJ_camellia,41L - -#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" -#define LN_camellia_256_ofb128 "camellia-256-ofb" -#define NID_camellia_256_ofb128 768 -#define OBJ_camellia_256_ofb128 OBJ_camellia,43L - -#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" -#define LN_camellia_256_cfb128 "camellia-256-cfb" -#define NID_camellia_256_cfb128 759 -#define OBJ_camellia_256_cfb128 OBJ_camellia,44L - -#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" -#define LN_camellia_128_cfb1 "camellia-128-cfb1" -#define NID_camellia_128_cfb1 760 - -#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" -#define LN_camellia_192_cfb1 "camellia-192-cfb1" -#define NID_camellia_192_cfb1 761 - -#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" -#define LN_camellia_256_cfb1 "camellia-256-cfb1" -#define NID_camellia_256_cfb1 762 - -#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" -#define LN_camellia_128_cfb8 "camellia-128-cfb8" -#define NID_camellia_128_cfb8 763 - -#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" -#define LN_camellia_192_cfb8 "camellia-192-cfb8" -#define NID_camellia_192_cfb8 764 - -#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" -#define LN_camellia_256_cfb8 "camellia-256-cfb8" -#define NID_camellia_256_cfb8 765 - -#define SN_kisa "KISA" -#define LN_kisa "kisa" -#define NID_kisa 773 -#define OBJ_kisa OBJ_member_body,410L,200004L - -#define SN_seed_ecb "SEED-ECB" -#define LN_seed_ecb "seed-ecb" -#define NID_seed_ecb 776 -#define OBJ_seed_ecb OBJ_kisa,1L,3L - -#define SN_seed_cbc "SEED-CBC" -#define LN_seed_cbc "seed-cbc" -#define NID_seed_cbc 777 -#define OBJ_seed_cbc OBJ_kisa,1L,4L - -#define SN_seed_cfb128 "SEED-CFB" -#define LN_seed_cfb128 "seed-cfb" -#define NID_seed_cfb128 779 -#define OBJ_seed_cfb128 OBJ_kisa,1L,5L - -#define SN_seed_ofb128 "SEED-OFB" -#define LN_seed_ofb128 "seed-ofb" -#define NID_seed_ofb128 778 -#define OBJ_seed_ofb128 OBJ_kisa,1L,6L - -#define SN_hmac "HMAC" -#define LN_hmac "hmac" -#define NID_hmac 855 - -#define SN_cmac "CMAC" -#define LN_cmac "cmac" -#define NID_cmac 894 - -#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" -#define LN_rc4_hmac_md5 "rc4-hmac-md5" -#define NID_rc4_hmac_md5 915 - -#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" -#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" -#define NID_aes_128_cbc_hmac_sha1 916 - -#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" -#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" -#define NID_aes_192_cbc_hmac_sha1 917 - -#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" -#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" -#define NID_aes_256_cbc_hmac_sha1 918 - -#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" -#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" -#define NID_aes_128_cbc_hmac_sha256 948 - -#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" -#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" -#define NID_aes_192_cbc_hmac_sha256 949 - -#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" -#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" -#define NID_aes_256_cbc_hmac_sha256 950 - -#define SN_dhpublicnumber "dhpublicnumber" -#define LN_dhpublicnumber "X9.42 DH" -#define NID_dhpublicnumber 920 -#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L - -#define SN_brainpoolP160r1 "brainpoolP160r1" -#define NID_brainpoolP160r1 921 -#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L - -#define SN_brainpoolP160t1 "brainpoolP160t1" -#define NID_brainpoolP160t1 922 -#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L - -#define SN_brainpoolP192r1 "brainpoolP192r1" -#define NID_brainpoolP192r1 923 -#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L - -#define SN_brainpoolP192t1 "brainpoolP192t1" -#define NID_brainpoolP192t1 924 -#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L - -#define SN_brainpoolP224r1 "brainpoolP224r1" -#define NID_brainpoolP224r1 925 -#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L - -#define SN_brainpoolP224t1 "brainpoolP224t1" -#define NID_brainpoolP224t1 926 -#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L - -#define SN_brainpoolP256r1 "brainpoolP256r1" -#define NID_brainpoolP256r1 927 -#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L - -#define SN_brainpoolP256t1 "brainpoolP256t1" -#define NID_brainpoolP256t1 928 -#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L - -#define SN_brainpoolP320r1 "brainpoolP320r1" -#define NID_brainpoolP320r1 929 -#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L - -#define SN_brainpoolP320t1 "brainpoolP320t1" -#define NID_brainpoolP320t1 930 -#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L - -#define SN_brainpoolP384r1 "brainpoolP384r1" -#define NID_brainpoolP384r1 931 -#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L - -#define SN_brainpoolP384t1 "brainpoolP384t1" -#define NID_brainpoolP384t1 932 -#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L - -#define SN_brainpoolP512r1 "brainpoolP512r1" -#define NID_brainpoolP512r1 933 -#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L - -#define SN_brainpoolP512t1 "brainpoolP512t1" -#define NID_brainpoolP512t1 934 -#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L - -#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L - -#define OBJ_secg_scheme OBJ_certicom_arc,1L - -#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" -#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 -#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L - -#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" -#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 -#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L - -#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" -#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 -#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L - -#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" -#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 -#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L - -#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" -#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 -#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L - -#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 -#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L - -#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 -#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L - -#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 -#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L - -#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 -#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L - -#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 -#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L - -#define SN_dh_std_kdf "dh-std-kdf" -#define NID_dh_std_kdf 946 - -#define SN_dh_cofactor_kdf "dh-cofactor-kdf" -#define NID_dh_cofactor_kdf 947 - -#define SN_ct_precert_scts "ct_precert_scts" -#define LN_ct_precert_scts "CT Precertificate SCTs" -#define NID_ct_precert_scts 951 -#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L - -#define SN_ct_precert_poison "ct_precert_poison" -#define LN_ct_precert_poison "CT Precertificate Poison" -#define NID_ct_precert_poison 952 -#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L - -#define SN_ct_precert_signer "ct_precert_signer" -#define LN_ct_precert_signer "CT Precertificate Signer" -#define NID_ct_precert_signer 953 -#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L - -#define SN_ct_cert_scts "ct_cert_scts" -#define LN_ct_cert_scts "CT Certificate SCTs" -#define NID_ct_cert_scts 954 -#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L - -#define SN_jurisdictionLocalityName "jurisdictionL" -#define LN_jurisdictionLocalityName "jurisdictionLocalityName" -#define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L - -#define SN_jurisdictionStateOrProvinceName "jurisdictionST" -#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" -#define NID_jurisdictionStateOrProvinceName 956 -#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L - -#define SN_jurisdictionCountryName "jurisdictionC" -#define LN_jurisdictionCountryName "jurisdictionCountryName" -#define NID_jurisdictionCountryName 957 -#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L diff --git a/ext/openssl/windows/x64/include/openssl/objects.h b/ext/openssl/windows/x64/include/openssl/objects.h deleted file mode 100644 index b8dafa89..00000000 --- a/ext/openssl/windows/x64/include/openssl/objects.h +++ /dev/null @@ -1,1143 +0,0 @@ -/* crypto/objects/objects.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H - -# define USE_OBJ_MAC - -# ifdef USE_OBJ_MAC -# include -# else -# define SN_undef "UNDEF" -# define LN_undef "undefined" -# define NID_undef 0 -# define OBJ_undef 0L - -# define SN_Algorithm "Algorithm" -# define LN_algorithm "algorithm" -# define NID_algorithm 38 -# define OBJ_algorithm 1L,3L,14L,3L,2L - -# define LN_rsadsi "rsadsi" -# define NID_rsadsi 1 -# define OBJ_rsadsi 1L,2L,840L,113549L - -# define LN_pkcs "pkcs" -# define NID_pkcs 2 -# define OBJ_pkcs OBJ_rsadsi,1L - -# define SN_md2 "MD2" -# define LN_md2 "md2" -# define NID_md2 3 -# define OBJ_md2 OBJ_rsadsi,2L,2L - -# define SN_md5 "MD5" -# define LN_md5 "md5" -# define NID_md5 4 -# define OBJ_md5 OBJ_rsadsi,2L,5L - -# define SN_rc4 "RC4" -# define LN_rc4 "rc4" -# define NID_rc4 5 -# define OBJ_rc4 OBJ_rsadsi,3L,4L - -# define LN_rsaEncryption "rsaEncryption" -# define NID_rsaEncryption 6 -# define OBJ_rsaEncryption OBJ_pkcs,1L,1L - -# define SN_md2WithRSAEncryption "RSA-MD2" -# define LN_md2WithRSAEncryption "md2WithRSAEncryption" -# define NID_md2WithRSAEncryption 7 -# define OBJ_md2WithRSAEncryption OBJ_pkcs,1L,2L - -# define SN_md5WithRSAEncryption "RSA-MD5" -# define LN_md5WithRSAEncryption "md5WithRSAEncryption" -# define NID_md5WithRSAEncryption 8 -# define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L - -# define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -# define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -# define NID_pbeWithMD2AndDES_CBC 9 -# define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L - -# define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -# define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -# define NID_pbeWithMD5AndDES_CBC 10 -# define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L - -# define LN_X500 "X500" -# define NID_X500 11 -# define OBJ_X500 2L,5L - -# define LN_X509 "X509" -# define NID_X509 12 -# define OBJ_X509 OBJ_X500,4L - -# define SN_commonName "CN" -# define LN_commonName "commonName" -# define NID_commonName 13 -# define OBJ_commonName OBJ_X509,3L - -# define SN_countryName "C" -# define LN_countryName "countryName" -# define NID_countryName 14 -# define OBJ_countryName OBJ_X509,6L - -# define SN_localityName "L" -# define LN_localityName "localityName" -# define NID_localityName 15 -# define OBJ_localityName OBJ_X509,7L - -/* Postal Address? PA */ - -/* should be "ST" (rfc1327) but MS uses 'S' */ -# define SN_stateOrProvinceName "ST" -# define LN_stateOrProvinceName "stateOrProvinceName" -# define NID_stateOrProvinceName 16 -# define OBJ_stateOrProvinceName OBJ_X509,8L - -# define SN_organizationName "O" -# define LN_organizationName "organizationName" -# define NID_organizationName 17 -# define OBJ_organizationName OBJ_X509,10L - -# define SN_organizationalUnitName "OU" -# define LN_organizationalUnitName "organizationalUnitName" -# define NID_organizationalUnitName 18 -# define OBJ_organizationalUnitName OBJ_X509,11L - -# define SN_rsa "RSA" -# define LN_rsa "rsa" -# define NID_rsa 19 -# define OBJ_rsa OBJ_X500,8L,1L,1L - -# define LN_pkcs7 "pkcs7" -# define NID_pkcs7 20 -# define OBJ_pkcs7 OBJ_pkcs,7L - -# define LN_pkcs7_data "pkcs7-data" -# define NID_pkcs7_data 21 -# define OBJ_pkcs7_data OBJ_pkcs7,1L - -# define LN_pkcs7_signed "pkcs7-signedData" -# define NID_pkcs7_signed 22 -# define OBJ_pkcs7_signed OBJ_pkcs7,2L - -# define LN_pkcs7_enveloped "pkcs7-envelopedData" -# define NID_pkcs7_enveloped 23 -# define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -# define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -# define NID_pkcs7_signedAndEnveloped 24 -# define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -# define LN_pkcs7_digest "pkcs7-digestData" -# define NID_pkcs7_digest 25 -# define OBJ_pkcs7_digest OBJ_pkcs7,5L - -# define LN_pkcs7_encrypted "pkcs7-encryptedData" -# define NID_pkcs7_encrypted 26 -# define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -# define LN_pkcs3 "pkcs3" -# define NID_pkcs3 27 -# define OBJ_pkcs3 OBJ_pkcs,3L - -# define LN_dhKeyAgreement "dhKeyAgreement" -# define NID_dhKeyAgreement 28 -# define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -# define SN_des_ecb "DES-ECB" -# define LN_des_ecb "des-ecb" -# define NID_des_ecb 29 -# define OBJ_des_ecb OBJ_algorithm,6L - -# define SN_des_cfb64 "DES-CFB" -# define LN_des_cfb64 "des-cfb" -# define NID_des_cfb64 30 -/* IV + num */ -# define OBJ_des_cfb64 OBJ_algorithm,9L - -# define SN_des_cbc "DES-CBC" -# define LN_des_cbc "des-cbc" -# define NID_des_cbc 31 -/* IV */ -# define OBJ_des_cbc OBJ_algorithm,7L - -# define SN_des_ede "DES-EDE" -# define LN_des_ede "des-ede" -# define NID_des_ede 32 -/* ?? */ -# define OBJ_des_ede OBJ_algorithm,17L - -# define SN_des_ede3 "DES-EDE3" -# define LN_des_ede3 "des-ede3" -# define NID_des_ede3 33 - -# define SN_idea_cbc "IDEA-CBC" -# define LN_idea_cbc "idea-cbc" -# define NID_idea_cbc 34 -# define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -# define SN_idea_cfb64 "IDEA-CFB" -# define LN_idea_cfb64 "idea-cfb" -# define NID_idea_cfb64 35 - -# define SN_idea_ecb "IDEA-ECB" -# define LN_idea_ecb "idea-ecb" -# define NID_idea_ecb 36 - -# define SN_rc2_cbc "RC2-CBC" -# define LN_rc2_cbc "rc2-cbc" -# define NID_rc2_cbc 37 -# define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -# define SN_rc2_ecb "RC2-ECB" -# define LN_rc2_ecb "rc2-ecb" -# define NID_rc2_ecb 38 - -# define SN_rc2_cfb64 "RC2-CFB" -# define LN_rc2_cfb64 "rc2-cfb" -# define NID_rc2_cfb64 39 - -# define SN_rc2_ofb64 "RC2-OFB" -# define LN_rc2_ofb64 "rc2-ofb" -# define NID_rc2_ofb64 40 - -# define SN_sha "SHA" -# define LN_sha "sha" -# define NID_sha 41 -# define OBJ_sha OBJ_algorithm,18L - -# define SN_shaWithRSAEncryption "RSA-SHA" -# define LN_shaWithRSAEncryption "shaWithRSAEncryption" -# define NID_shaWithRSAEncryption 42 -# define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -# define SN_des_ede_cbc "DES-EDE-CBC" -# define LN_des_ede_cbc "des-ede-cbc" -# define NID_des_ede_cbc 43 - -# define SN_des_ede3_cbc "DES-EDE3-CBC" -# define LN_des_ede3_cbc "des-ede3-cbc" -# define NID_des_ede3_cbc 44 -# define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -# define SN_des_ofb64 "DES-OFB" -# define LN_des_ofb64 "des-ofb" -# define NID_des_ofb64 45 -# define OBJ_des_ofb64 OBJ_algorithm,8L - -# define SN_idea_ofb64 "IDEA-OFB" -# define LN_idea_ofb64 "idea-ofb" -# define NID_idea_ofb64 46 - -# define LN_pkcs9 "pkcs9" -# define NID_pkcs9 47 -# define OBJ_pkcs9 OBJ_pkcs,9L - -# define SN_pkcs9_emailAddress "Email" -# define LN_pkcs9_emailAddress "emailAddress" -# define NID_pkcs9_emailAddress 48 -# define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -# define LN_pkcs9_unstructuredName "unstructuredName" -# define NID_pkcs9_unstructuredName 49 -# define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -# define LN_pkcs9_contentType "contentType" -# define NID_pkcs9_contentType 50 -# define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -# define LN_pkcs9_messageDigest "messageDigest" -# define NID_pkcs9_messageDigest 51 -# define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -# define LN_pkcs9_signingTime "signingTime" -# define NID_pkcs9_signingTime 52 -# define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -# define LN_pkcs9_countersignature "countersignature" -# define NID_pkcs9_countersignature 53 -# define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -# define LN_pkcs9_challengePassword "challengePassword" -# define NID_pkcs9_challengePassword 54 -# define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -# define LN_pkcs9_unstructuredAddress "unstructuredAddress" -# define NID_pkcs9_unstructuredAddress 55 -# define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -# define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -# define NID_pkcs9_extCertAttributes 56 -# define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -# define SN_netscape "Netscape" -# define LN_netscape "Netscape Communications Corp." -# define NID_netscape 57 -# define OBJ_netscape 2L,16L,840L,1L,113730L - -# define SN_netscape_cert_extension "nsCertExt" -# define LN_netscape_cert_extension "Netscape Certificate Extension" -# define NID_netscape_cert_extension 58 -# define OBJ_netscape_cert_extension OBJ_netscape,1L - -# define SN_netscape_data_type "nsDataType" -# define LN_netscape_data_type "Netscape Data Type" -# define NID_netscape_data_type 59 -# define OBJ_netscape_data_type OBJ_netscape,2L - -# define SN_des_ede_cfb64 "DES-EDE-CFB" -# define LN_des_ede_cfb64 "des-ede-cfb" -# define NID_des_ede_cfb64 60 - -# define SN_des_ede3_cfb64 "DES-EDE3-CFB" -# define LN_des_ede3_cfb64 "des-ede3-cfb" -# define NID_des_ede3_cfb64 61 - -# define SN_des_ede_ofb64 "DES-EDE-OFB" -# define LN_des_ede_ofb64 "des-ede-ofb" -# define NID_des_ede_ofb64 62 - -# define SN_des_ede3_ofb64 "DES-EDE3-OFB" -# define LN_des_ede3_ofb64 "des-ede3-ofb" -# define NID_des_ede3_ofb64 63 - -/* I'm not sure about the object ID */ -# define SN_sha1 "SHA1" -# define LN_sha1 "sha1" -# define NID_sha1 64 -# define OBJ_sha1 OBJ_algorithm,26L -/* 28 Jun 1996 - eay */ -/* #define OBJ_sha1 1L,3L,14L,2L,26L,05L <- wrong */ - -# define SN_sha1WithRSAEncryption "RSA-SHA1" -# define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -# define NID_sha1WithRSAEncryption 65 -# define OBJ_sha1WithRSAEncryption OBJ_pkcs,1L,5L - -# define SN_dsaWithSHA "DSA-SHA" -# define LN_dsaWithSHA "dsaWithSHA" -# define NID_dsaWithSHA 66 -# define OBJ_dsaWithSHA OBJ_algorithm,13L - -# define SN_dsa_2 "DSA-old" -# define LN_dsa_2 "dsaEncryption-old" -# define NID_dsa_2 67 -# define OBJ_dsa_2 OBJ_algorithm,12L - -/* proposed by microsoft to RSA */ -# define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -# define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -# define NID_pbeWithSHA1AndRC2_CBC 68 -# define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L - -/* - * proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now defined - * explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something completely - * different. - */ -# define LN_id_pbkdf2 "PBKDF2" -# define NID_id_pbkdf2 69 -# define OBJ_id_pbkdf2 OBJ_pkcs,5L,12L - -# define SN_dsaWithSHA1_2 "DSA-SHA1-old" -# define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -# define NID_dsaWithSHA1_2 70 -/* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */ -# define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -# define SN_netscape_cert_type "nsCertType" -# define LN_netscape_cert_type "Netscape Cert Type" -# define NID_netscape_cert_type 71 -# define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -# define SN_netscape_base_url "nsBaseUrl" -# define LN_netscape_base_url "Netscape Base Url" -# define NID_netscape_base_url 72 -# define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -# define SN_netscape_revocation_url "nsRevocationUrl" -# define LN_netscape_revocation_url "Netscape Revocation Url" -# define NID_netscape_revocation_url 73 -# define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -# define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -# define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -# define NID_netscape_ca_revocation_url 74 -# define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -# define SN_netscape_renewal_url "nsRenewalUrl" -# define LN_netscape_renewal_url "Netscape Renewal Url" -# define NID_netscape_renewal_url 75 -# define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -# define SN_netscape_ca_policy_url "nsCaPolicyUrl" -# define LN_netscape_ca_policy_url "Netscape CA Policy Url" -# define NID_netscape_ca_policy_url 76 -# define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -# define SN_netscape_ssl_server_name "nsSslServerName" -# define LN_netscape_ssl_server_name "Netscape SSL Server Name" -# define NID_netscape_ssl_server_name 77 -# define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -# define SN_netscape_comment "nsComment" -# define LN_netscape_comment "Netscape Comment" -# define NID_netscape_comment 78 -# define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -# define SN_netscape_cert_sequence "nsCertSequence" -# define LN_netscape_cert_sequence "Netscape Certificate Sequence" -# define NID_netscape_cert_sequence 79 -# define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -# define SN_desx_cbc "DESX-CBC" -# define LN_desx_cbc "desx-cbc" -# define NID_desx_cbc 80 - -# define SN_id_ce "id-ce" -# define NID_id_ce 81 -# define OBJ_id_ce 2L,5L,29L - -# define SN_subject_key_identifier "subjectKeyIdentifier" -# define LN_subject_key_identifier "X509v3 Subject Key Identifier" -# define NID_subject_key_identifier 82 -# define OBJ_subject_key_identifier OBJ_id_ce,14L - -# define SN_key_usage "keyUsage" -# define LN_key_usage "X509v3 Key Usage" -# define NID_key_usage 83 -# define OBJ_key_usage OBJ_id_ce,15L - -# define SN_private_key_usage_period "privateKeyUsagePeriod" -# define LN_private_key_usage_period "X509v3 Private Key Usage Period" -# define NID_private_key_usage_period 84 -# define OBJ_private_key_usage_period OBJ_id_ce,16L - -# define SN_subject_alt_name "subjectAltName" -# define LN_subject_alt_name "X509v3 Subject Alternative Name" -# define NID_subject_alt_name 85 -# define OBJ_subject_alt_name OBJ_id_ce,17L - -# define SN_issuer_alt_name "issuerAltName" -# define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -# define NID_issuer_alt_name 86 -# define OBJ_issuer_alt_name OBJ_id_ce,18L - -# define SN_basic_constraints "basicConstraints" -# define LN_basic_constraints "X509v3 Basic Constraints" -# define NID_basic_constraints 87 -# define OBJ_basic_constraints OBJ_id_ce,19L - -# define SN_crl_number "crlNumber" -# define LN_crl_number "X509v3 CRL Number" -# define NID_crl_number 88 -# define OBJ_crl_number OBJ_id_ce,20L - -# define SN_certificate_policies "certificatePolicies" -# define LN_certificate_policies "X509v3 Certificate Policies" -# define NID_certificate_policies 89 -# define OBJ_certificate_policies OBJ_id_ce,32L - -# define SN_authority_key_identifier "authorityKeyIdentifier" -# define LN_authority_key_identifier "X509v3 Authority Key Identifier" -# define NID_authority_key_identifier 90 -# define OBJ_authority_key_identifier OBJ_id_ce,35L - -# define SN_bf_cbc "BF-CBC" -# define LN_bf_cbc "bf-cbc" -# define NID_bf_cbc 91 -# define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -# define SN_bf_ecb "BF-ECB" -# define LN_bf_ecb "bf-ecb" -# define NID_bf_ecb 92 - -# define SN_bf_cfb64 "BF-CFB" -# define LN_bf_cfb64 "bf-cfb" -# define NID_bf_cfb64 93 - -# define SN_bf_ofb64 "BF-OFB" -# define LN_bf_ofb64 "bf-ofb" -# define NID_bf_ofb64 94 - -# define SN_mdc2 "MDC2" -# define LN_mdc2 "mdc2" -# define NID_mdc2 95 -# define OBJ_mdc2 2L,5L,8L,3L,101L -/* An alternative? 1L,3L,14L,3L,2L,19L */ - -# define SN_mdc2WithRSA "RSA-MDC2" -# define LN_mdc2WithRSA "mdc2withRSA" -# define NID_mdc2WithRSA 96 -# define OBJ_mdc2WithRSA 2L,5L,8L,3L,100L - -# define SN_rc4_40 "RC4-40" -# define LN_rc4_40 "rc4-40" -# define NID_rc4_40 97 - -# define SN_rc2_40_cbc "RC2-40-CBC" -# define LN_rc2_40_cbc "rc2-40-cbc" -# define NID_rc2_40_cbc 98 - -# define SN_givenName "G" -# define LN_givenName "givenName" -# define NID_givenName 99 -# define OBJ_givenName OBJ_X509,42L - -# define SN_surname "S" -# define LN_surname "surname" -# define NID_surname 100 -# define OBJ_surname OBJ_X509,4L - -# define SN_initials "I" -# define LN_initials "initials" -# define NID_initials 101 -# define OBJ_initials OBJ_X509,43L - -# define SN_uniqueIdentifier "UID" -# define LN_uniqueIdentifier "uniqueIdentifier" -# define NID_uniqueIdentifier 102 -# define OBJ_uniqueIdentifier OBJ_X509,45L - -# define SN_crl_distribution_points "crlDistributionPoints" -# define LN_crl_distribution_points "X509v3 CRL Distribution Points" -# define NID_crl_distribution_points 103 -# define OBJ_crl_distribution_points OBJ_id_ce,31L - -# define SN_md5WithRSA "RSA-NP-MD5" -# define LN_md5WithRSA "md5WithRSA" -# define NID_md5WithRSA 104 -# define OBJ_md5WithRSA OBJ_algorithm,3L - -# define SN_serialNumber "SN" -# define LN_serialNumber "serialNumber" -# define NID_serialNumber 105 -# define OBJ_serialNumber OBJ_X509,5L - -# define SN_title "T" -# define LN_title "title" -# define NID_title 106 -# define OBJ_title OBJ_X509,12L - -# define SN_description "D" -# define LN_description "description" -# define NID_description 107 -# define OBJ_description OBJ_X509,13L - -/* CAST5 is CAST-128, I'm just sticking with the documentation */ -# define SN_cast5_cbc "CAST5-CBC" -# define LN_cast5_cbc "cast5-cbc" -# define NID_cast5_cbc 108 -# define OBJ_cast5_cbc 1L,2L,840L,113533L,7L,66L,10L - -# define SN_cast5_ecb "CAST5-ECB" -# define LN_cast5_ecb "cast5-ecb" -# define NID_cast5_ecb 109 - -# define SN_cast5_cfb64 "CAST5-CFB" -# define LN_cast5_cfb64 "cast5-cfb" -# define NID_cast5_cfb64 110 - -# define SN_cast5_ofb64 "CAST5-OFB" -# define LN_cast5_ofb64 "cast5-ofb" -# define NID_cast5_ofb64 111 - -# define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -# define NID_pbeWithMD5AndCast5_CBC 112 -# define OBJ_pbeWithMD5AndCast5_CBC 1L,2L,840L,113533L,7L,66L,12L - -/*- - * This is one sun will soon be using :-( - * id-dsa-with-sha1 ID ::= { - * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 } - */ -# define SN_dsaWithSHA1 "DSA-SHA1" -# define LN_dsaWithSHA1 "dsaWithSHA1" -# define NID_dsaWithSHA1 113 -# define OBJ_dsaWithSHA1 1L,2L,840L,10040L,4L,3L - -# define NID_md5_sha1 114 -# define SN_md5_sha1 "MD5-SHA1" -# define LN_md5_sha1 "md5-sha1" - -# define SN_sha1WithRSA "RSA-SHA1-2" -# define LN_sha1WithRSA "sha1WithRSA" -# define NID_sha1WithRSA 115 -# define OBJ_sha1WithRSA OBJ_algorithm,29L - -# define SN_dsa "DSA" -# define LN_dsa "dsaEncryption" -# define NID_dsa 116 -# define OBJ_dsa 1L,2L,840L,10040L,4L,1L - -# define SN_ripemd160 "RIPEMD160" -# define LN_ripemd160 "ripemd160" -# define NID_ripemd160 117 -# define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -/* - * The name should actually be rsaSignatureWithripemd160, but I'm going to - * continue using the convention I'm using with the other ciphers - */ -# define SN_ripemd160WithRSA "RSA-RIPEMD160" -# define LN_ripemd160WithRSA "ripemd160WithRSA" -# define NID_ripemd160WithRSA 119 -# define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -/*- - * Taken from rfc2040 - * RC5_CBC_Parameters ::= SEQUENCE { - * version INTEGER (v1_0(16)), - * rounds INTEGER (8..127), - * blockSizeInBits INTEGER (64, 128), - * iv OCTET STRING OPTIONAL - * } - */ -# define SN_rc5_cbc "RC5-CBC" -# define LN_rc5_cbc "rc5-cbc" -# define NID_rc5_cbc 120 -# define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -# define SN_rc5_ecb "RC5-ECB" -# define LN_rc5_ecb "rc5-ecb" -# define NID_rc5_ecb 121 - -# define SN_rc5_cfb64 "RC5-CFB" -# define LN_rc5_cfb64 "rc5-cfb" -# define NID_rc5_cfb64 122 - -# define SN_rc5_ofb64 "RC5-OFB" -# define LN_rc5_ofb64 "rc5-ofb" -# define NID_rc5_ofb64 123 - -# define SN_rle_compression "RLE" -# define LN_rle_compression "run length compression" -# define NID_rle_compression 124 -# define OBJ_rle_compression 1L,1L,1L,1L,666L,1L - -# define SN_zlib_compression "ZLIB" -# define LN_zlib_compression "zlib compression" -# define NID_zlib_compression 125 -# define OBJ_zlib_compression 1L,1L,1L,1L,666L,2L - -# define SN_ext_key_usage "extendedKeyUsage" -# define LN_ext_key_usage "X509v3 Extended Key Usage" -# define NID_ext_key_usage 126 -# define OBJ_ext_key_usage OBJ_id_ce,37 - -# define SN_id_pkix "PKIX" -# define NID_id_pkix 127 -# define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -# define SN_id_kp "id-kp" -# define NID_id_kp 128 -# define OBJ_id_kp OBJ_id_pkix,3L - -/* PKIX extended key usage OIDs */ - -# define SN_server_auth "serverAuth" -# define LN_server_auth "TLS Web Server Authentication" -# define NID_server_auth 129 -# define OBJ_server_auth OBJ_id_kp,1L - -# define SN_client_auth "clientAuth" -# define LN_client_auth "TLS Web Client Authentication" -# define NID_client_auth 130 -# define OBJ_client_auth OBJ_id_kp,2L - -# define SN_code_sign "codeSigning" -# define LN_code_sign "Code Signing" -# define NID_code_sign 131 -# define OBJ_code_sign OBJ_id_kp,3L - -# define SN_email_protect "emailProtection" -# define LN_email_protect "E-mail Protection" -# define NID_email_protect 132 -# define OBJ_email_protect OBJ_id_kp,4L - -# define SN_time_stamp "timeStamping" -# define LN_time_stamp "Time Stamping" -# define NID_time_stamp 133 -# define OBJ_time_stamp OBJ_id_kp,8L - -/* Additional extended key usage OIDs: Microsoft */ - -# define SN_ms_code_ind "msCodeInd" -# define LN_ms_code_ind "Microsoft Individual Code Signing" -# define NID_ms_code_ind 134 -# define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -# define SN_ms_code_com "msCodeCom" -# define LN_ms_code_com "Microsoft Commercial Code Signing" -# define NID_ms_code_com 135 -# define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -# define SN_ms_ctl_sign "msCTLSign" -# define LN_ms_ctl_sign "Microsoft Trust List Signing" -# define NID_ms_ctl_sign 136 -# define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -# define SN_ms_sgc "msSGC" -# define LN_ms_sgc "Microsoft Server Gated Crypto" -# define NID_ms_sgc 137 -# define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -# define SN_ms_efs "msEFS" -# define LN_ms_efs "Microsoft Encrypted File System" -# define NID_ms_efs 138 -# define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -/* Additional usage: Netscape */ - -# define SN_ns_sgc "nsSGC" -# define LN_ns_sgc "Netscape Server Gated Crypto" -# define NID_ns_sgc 139 -# define OBJ_ns_sgc OBJ_netscape,4L,1L - -# define SN_delta_crl "deltaCRL" -# define LN_delta_crl "X509v3 Delta CRL Indicator" -# define NID_delta_crl 140 -# define OBJ_delta_crl OBJ_id_ce,27L - -# define SN_crl_reason "CRLReason" -# define LN_crl_reason "CRL Reason Code" -# define NID_crl_reason 141 -# define OBJ_crl_reason OBJ_id_ce,21L - -# define SN_invalidity_date "invalidityDate" -# define LN_invalidity_date "Invalidity Date" -# define NID_invalidity_date 142 -# define OBJ_invalidity_date OBJ_id_ce,24L - -# define SN_sxnet "SXNetID" -# define LN_sxnet "Strong Extranet ID" -# define NID_sxnet 143 -# define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -/* PKCS12 and related OBJECT IDENTIFIERS */ - -# define OBJ_pkcs12 OBJ_pkcs,12L -# define OBJ_pkcs12_pbeids OBJ_pkcs12, 1 - -# define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -# define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -# define NID_pbe_WithSHA1And128BitRC4 144 -# define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L - -# define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -# define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -# define NID_pbe_WithSHA1And40BitRC4 145 -# define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L - -# define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -# define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -# define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -# define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L - -# define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -# define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -# define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -# define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L - -# define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -# define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -# define NID_pbe_WithSHA1And128BitRC2_CBC 148 -# define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L - -# define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -# define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -# define NID_pbe_WithSHA1And40BitRC2_CBC 149 -# define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L - -# define OBJ_pkcs12_Version1 OBJ_pkcs12, 10L - -# define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1, 1L - -# define LN_keyBag "keyBag" -# define NID_keyBag 150 -# define OBJ_keyBag OBJ_pkcs12_BagIds, 1L - -# define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -# define NID_pkcs8ShroudedKeyBag 151 -# define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L - -# define LN_certBag "certBag" -# define NID_certBag 152 -# define OBJ_certBag OBJ_pkcs12_BagIds, 3L - -# define LN_crlBag "crlBag" -# define NID_crlBag 153 -# define OBJ_crlBag OBJ_pkcs12_BagIds, 4L - -# define LN_secretBag "secretBag" -# define NID_secretBag 154 -# define OBJ_secretBag OBJ_pkcs12_BagIds, 5L - -# define LN_safeContentsBag "safeContentsBag" -# define NID_safeContentsBag 155 -# define OBJ_safeContentsBag OBJ_pkcs12_BagIds, 6L - -# define LN_friendlyName "friendlyName" -# define NID_friendlyName 156 -# define OBJ_friendlyName OBJ_pkcs9, 20L - -# define LN_localKeyID "localKeyID" -# define NID_localKeyID 157 -# define OBJ_localKeyID OBJ_pkcs9, 21L - -# define OBJ_certTypes OBJ_pkcs9, 22L - -# define LN_x509Certificate "x509Certificate" -# define NID_x509Certificate 158 -# define OBJ_x509Certificate OBJ_certTypes, 1L - -# define LN_sdsiCertificate "sdsiCertificate" -# define NID_sdsiCertificate 159 -# define OBJ_sdsiCertificate OBJ_certTypes, 2L - -# define OBJ_crlTypes OBJ_pkcs9, 23L - -# define LN_x509Crl "x509Crl" -# define NID_x509Crl 160 -# define OBJ_x509Crl OBJ_crlTypes, 1L - -/* PKCS#5 v2 OIDs */ - -# define LN_pbes2 "PBES2" -# define NID_pbes2 161 -# define OBJ_pbes2 OBJ_pkcs,5L,13L - -# define LN_pbmac1 "PBMAC1" -# define NID_pbmac1 162 -# define OBJ_pbmac1 OBJ_pkcs,5L,14L - -# define LN_hmacWithSHA1 "hmacWithSHA1" -# define NID_hmacWithSHA1 163 -# define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -/* Policy Qualifier Ids */ - -# define LN_id_qt_cps "Policy Qualifier CPS" -# define SN_id_qt_cps "id-qt-cps" -# define NID_id_qt_cps 164 -# define OBJ_id_qt_cps OBJ_id_pkix,2L,1L - -# define LN_id_qt_unotice "Policy Qualifier User Notice" -# define SN_id_qt_unotice "id-qt-unotice" -# define NID_id_qt_unotice 165 -# define OBJ_id_qt_unotice OBJ_id_pkix,2L,2L - -# define SN_rc2_64_cbc "RC2-64-CBC" -# define LN_rc2_64_cbc "rc2-64-cbc" -# define NID_rc2_64_cbc 166 - -# define SN_SMIMECapabilities "SMIME-CAPS" -# define LN_SMIMECapabilities "S/MIME Capabilities" -# define NID_SMIMECapabilities 167 -# define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -# define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -# define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -# define NID_pbeWithMD2AndRC2_CBC 168 -# define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L - -# define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -# define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -# define NID_pbeWithMD5AndRC2_CBC 169 -# define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L - -# define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -# define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -# define NID_pbeWithSHA1AndDES_CBC 170 -# define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L - -/* Extension request OIDs */ - -# define LN_ms_ext_req "Microsoft Extension Request" -# define SN_ms_ext_req "msExtReq" -# define NID_ms_ext_req 171 -# define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -# define LN_ext_req "Extension Request" -# define SN_ext_req "extReq" -# define NID_ext_req 172 -# define OBJ_ext_req OBJ_pkcs9,14L - -# define SN_name "name" -# define LN_name "name" -# define NID_name 173 -# define OBJ_name OBJ_X509,41L - -# define SN_dnQualifier "dnQualifier" -# define LN_dnQualifier "dnQualifier" -# define NID_dnQualifier 174 -# define OBJ_dnQualifier OBJ_X509,46L - -# define SN_id_pe "id-pe" -# define NID_id_pe 175 -# define OBJ_id_pe OBJ_id_pkix,1L - -# define SN_id_ad "id-ad" -# define NID_id_ad 176 -# define OBJ_id_ad OBJ_id_pkix,48L - -# define SN_info_access "authorityInfoAccess" -# define LN_info_access "Authority Information Access" -# define NID_info_access 177 -# define OBJ_info_access OBJ_id_pe,1L - -# define SN_ad_OCSP "OCSP" -# define LN_ad_OCSP "OCSP" -# define NID_ad_OCSP 178 -# define OBJ_ad_OCSP OBJ_id_ad,1L - -# define SN_ad_ca_issuers "caIssuers" -# define LN_ad_ca_issuers "CA Issuers" -# define NID_ad_ca_issuers 179 -# define OBJ_ad_ca_issuers OBJ_id_ad,2L - -# define SN_OCSP_sign "OCSPSigning" -# define LN_OCSP_sign "OCSP Signing" -# define NID_OCSP_sign 180 -# define OBJ_OCSP_sign OBJ_id_kp,9L -# endif /* USE_OBJ_MAC */ - -# include -# include - -# define OBJ_NAME_TYPE_UNDEF 0x00 -# define OBJ_NAME_TYPE_MD_METH 0x01 -# define OBJ_NAME_TYPE_CIPHER_METH 0x02 -# define OBJ_NAME_TYPE_PKEY_METH 0x03 -# define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 - -# define OBJ_NAME_ALIAS 0x8000 - -# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 -# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct obj_name_st { - int type; - int alias; - const char *name; - const char *data; -} OBJ_NAME; - -# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) - -int OBJ_NAME_init(void); -int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), - int (*cmp_func) (const char *, const char *), - void (*free_func) (const char *, int, const char *)); -const char *OBJ_NAME_get(const char *name, int type); -int OBJ_NAME_add(const char *name, int type, const char *data); -int OBJ_NAME_remove(const char *name, int type); -void OBJ_NAME_cleanup(int type); /* -1 for everything */ -void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), - void *arg); -void OBJ_NAME_do_all_sorted(int type, - void (*fn) (const OBJ_NAME *, void *arg), - void *arg); - -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_nid2obj(int n); -const char *OBJ_nid2ln(int n); -const char *OBJ_nid2sn(int n); -int OBJ_obj2nid(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); -int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); -int OBJ_txt2nid(const char *s); -int OBJ_ln2nid(const char *s); -int OBJ_sn2nid(const char *s); -int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); -const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, - int (*cmp) (const void *, const void *)); -const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, - int size, - int (*cmp) (const void *, const void *), - int flags); - -# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ - static int nm##_cmp(type1 const *, type2 const *); \ - scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ - _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) -# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -/*- - * Unsolved problem: if a type is actually a pointer type, like - * nid_triple is, then its impossible to get a const where you need - * it. Consider: - * - * typedef int nid_triple[3]; - * const void *a_; - * const nid_triple const *a = a_; - * - * The assignement discards a const because what you really want is: - * - * const int const * const *a = a_; - * - * But if you do that, you lose the fact that a is an array of 3 ints, - * which breaks comparison functions. - * - * Thus we end up having to cast, sadly, or unpack the - * declarations. Or, as I finally did in this case, delcare nid_triple - * to be a struct, which it should have been in the first place. - * - * Ben, August 2008. - * - * Also, strictly speaking not all types need be const, but handling - * the non-constness means a lot of complication, and in practice - * comparison routines do always not touch their arguments. - */ - -# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ - ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN))) - -# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ - ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN)),flags) - -int OBJ_new_nid(int num); -int OBJ_add_object(const ASN1_OBJECT *obj); -int OBJ_create(const char *oid, const char *sn, const char *ln); -void OBJ_cleanup(void); -int OBJ_create_objects(BIO *in); - -int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); -int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); -int OBJ_add_sigid(int signid, int dig_id, int pkey_id); -void OBJ_sigid_free(void); - -extern int obj_cleanup_defer; -void check_defer(int nid); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_OBJ_strings(void); - -/* Error codes for the OBJ functions. */ - -/* Function codes. */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 - -/* Reason codes. */ -# define OBJ_R_MALLOC_FAILURE 100 -# define OBJ_R_UNKNOWN_NID 101 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ocsp.h b/ext/openssl/windows/x64/include/openssl/ocsp.h deleted file mode 100644 index ca2ee76d..00000000 --- a/ext/openssl/windows/x64/include/openssl/ocsp.h +++ /dev/null @@ -1,637 +0,0 @@ -/* ocsp.h */ -/* - * Written by Tom Titchener for the OpenSSL - * project. - */ - -/* - * History: This file was transfered to Richard Levitte from CertCo by Kathy - * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a - * patch kit. - */ - -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Various flags and values */ - -# define OCSP_DEFAULT_NONCE_LENGTH 16 - -# define OCSP_NOCERTS 0x1 -# define OCSP_NOINTERN 0x2 -# define OCSP_NOSIGS 0x4 -# define OCSP_NOCHAIN 0x8 -# define OCSP_NOVERIFY 0x10 -# define OCSP_NOEXPLICIT 0x20 -# define OCSP_NOCASIGN 0x40 -# define OCSP_NODELEGATED 0x80 -# define OCSP_NOCHECKS 0x100 -# define OCSP_TRUSTOTHER 0x200 -# define OCSP_RESPID_KEY 0x400 -# define OCSP_NOTIME 0x800 - -/*- CertID ::= SEQUENCE { - * hashAlgorithm AlgorithmIdentifier, - * issuerNameHash OCTET STRING, -- Hash of Issuer's DN - * issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields) - * serialNumber CertificateSerialNumber } - */ -typedef struct ocsp_cert_id_st { - X509_ALGOR *hashAlgorithm; - ASN1_OCTET_STRING *issuerNameHash; - ASN1_OCTET_STRING *issuerKeyHash; - ASN1_INTEGER *serialNumber; -} OCSP_CERTID; - -DECLARE_STACK_OF(OCSP_CERTID) - -/*- Request ::= SEQUENCE { - * reqCert CertID, - * singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_one_request_st { - OCSP_CERTID *reqCert; - STACK_OF(X509_EXTENSION) *singleRequestExtensions; -} OCSP_ONEREQ; - -DECLARE_STACK_OF(OCSP_ONEREQ) -DECLARE_ASN1_SET_OF(OCSP_ONEREQ) - -/*- TBSRequest ::= SEQUENCE { - * version [0] EXPLICIT Version DEFAULT v1, - * requestorName [1] EXPLICIT GeneralName OPTIONAL, - * requestList SEQUENCE OF Request, - * requestExtensions [2] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_req_info_st { - ASN1_INTEGER *version; - GENERAL_NAME *requestorName; - STACK_OF(OCSP_ONEREQ) *requestList; - STACK_OF(X509_EXTENSION) *requestExtensions; -} OCSP_REQINFO; - -/*- Signature ::= SEQUENCE { - * signatureAlgorithm AlgorithmIdentifier, - * signature BIT STRING, - * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } - */ -typedef struct ocsp_signature_st { - X509_ALGOR *signatureAlgorithm; - ASN1_BIT_STRING *signature; - STACK_OF(X509) *certs; -} OCSP_SIGNATURE; - -/*- OCSPRequest ::= SEQUENCE { - * tbsRequest TBSRequest, - * optionalSignature [0] EXPLICIT Signature OPTIONAL } - */ -typedef struct ocsp_request_st { - OCSP_REQINFO *tbsRequest; - OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */ -} OCSP_REQUEST; - -/*- OCSPResponseStatus ::= ENUMERATED { - * successful (0), --Response has valid confirmations - * malformedRequest (1), --Illegal confirmation request - * internalError (2), --Internal error in issuer - * tryLater (3), --Try again later - * --(4) is not used - * sigRequired (5), --Must sign the request - * unauthorized (6) --Request unauthorized - * } - */ -# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 -# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 -# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 -# define OCSP_RESPONSE_STATUS_TRYLATER 3 -# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 -# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 - -/*- ResponseBytes ::= SEQUENCE { - * responseType OBJECT IDENTIFIER, - * response OCTET STRING } - */ -typedef struct ocsp_resp_bytes_st { - ASN1_OBJECT *responseType; - ASN1_OCTET_STRING *response; -} OCSP_RESPBYTES; - -/*- OCSPResponse ::= SEQUENCE { - * responseStatus OCSPResponseStatus, - * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } - */ -struct ocsp_response_st { - ASN1_ENUMERATED *responseStatus; - OCSP_RESPBYTES *responseBytes; -}; - -/*- ResponderID ::= CHOICE { - * byName [1] Name, - * byKey [2] KeyHash } - */ -# define V_OCSP_RESPID_NAME 0 -# define V_OCSP_RESPID_KEY 1 -struct ocsp_responder_id_st { - int type; - union { - X509_NAME *byName; - ASN1_OCTET_STRING *byKey; - } value; -}; - -DECLARE_STACK_OF(OCSP_RESPID) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) - -/*- KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key - * --(excluding the tag and length fields) - */ - -/*- RevokedInfo ::= SEQUENCE { - * revocationTime GeneralizedTime, - * revocationReason [0] EXPLICIT CRLReason OPTIONAL } - */ -typedef struct ocsp_revoked_info_st { - ASN1_GENERALIZEDTIME *revocationTime; - ASN1_ENUMERATED *revocationReason; -} OCSP_REVOKEDINFO; - -/*- CertStatus ::= CHOICE { - * good [0] IMPLICIT NULL, - * revoked [1] IMPLICIT RevokedInfo, - * unknown [2] IMPLICIT UnknownInfo } - */ -# define V_OCSP_CERTSTATUS_GOOD 0 -# define V_OCSP_CERTSTATUS_REVOKED 1 -# define V_OCSP_CERTSTATUS_UNKNOWN 2 -typedef struct ocsp_cert_status_st { - int type; - union { - ASN1_NULL *good; - OCSP_REVOKEDINFO *revoked; - ASN1_NULL *unknown; - } value; -} OCSP_CERTSTATUS; - -/*- SingleResponse ::= SEQUENCE { - * certID CertID, - * certStatus CertStatus, - * thisUpdate GeneralizedTime, - * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, - * singleExtensions [1] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_single_response_st { - OCSP_CERTID *certId; - OCSP_CERTSTATUS *certStatus; - ASN1_GENERALIZEDTIME *thisUpdate; - ASN1_GENERALIZEDTIME *nextUpdate; - STACK_OF(X509_EXTENSION) *singleExtensions; -} OCSP_SINGLERESP; - -DECLARE_STACK_OF(OCSP_SINGLERESP) -DECLARE_ASN1_SET_OF(OCSP_SINGLERESP) - -/*- ResponseData ::= SEQUENCE { - * version [0] EXPLICIT Version DEFAULT v1, - * responderID ResponderID, - * producedAt GeneralizedTime, - * responses SEQUENCE OF SingleResponse, - * responseExtensions [1] EXPLICIT Extensions OPTIONAL } - */ -typedef struct ocsp_response_data_st { - ASN1_INTEGER *version; - OCSP_RESPID *responderId; - ASN1_GENERALIZEDTIME *producedAt; - STACK_OF(OCSP_SINGLERESP) *responses; - STACK_OF(X509_EXTENSION) *responseExtensions; -} OCSP_RESPDATA; - -/*- BasicOCSPResponse ::= SEQUENCE { - * tbsResponseData ResponseData, - * signatureAlgorithm AlgorithmIdentifier, - * signature BIT STRING, - * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } - */ - /* - * Note 1: The value for "signature" is specified in the OCSP rfc2560 as - * follows: "The value for the signature SHALL be computed on the hash of - * the DER encoding ResponseData." This means that you must hash the - * DER-encoded tbsResponseData, and then run it through a crypto-signing - * function, which will (at least w/RSA) do a hash-'n'-private-encrypt - * operation. This seems a bit odd, but that's the spec. Also note that - * the data structures do not leave anywhere to independently specify the - * algorithm used for the initial hash. So, we look at the - * signature-specification algorithm, and try to do something intelligent. - * -- Kathy Weinhold, CertCo - */ - /* - * Note 2: It seems that the mentioned passage from RFC 2560 (section - * 4.2.1) is open for interpretation. I've done tests against another - * responder, and found that it doesn't do the double hashing that the RFC - * seems to say one should. Therefore, all relevant functions take a flag - * saying which variant should be used. -- Richard Levitte, OpenSSL team - * and CeloCom - */ -typedef struct ocsp_basic_response_st { - OCSP_RESPDATA *tbsResponseData; - X509_ALGOR *signatureAlgorithm; - ASN1_BIT_STRING *signature; - STACK_OF(X509) *certs; -} OCSP_BASICRESP; - -/*- - * CRLReason ::= ENUMERATED { - * unspecified (0), - * keyCompromise (1), - * cACompromise (2), - * affiliationChanged (3), - * superseded (4), - * cessationOfOperation (5), - * certificateHold (6), - * removeFromCRL (8) } - */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 - -/*- - * CrlID ::= SEQUENCE { - * crlUrl [0] EXPLICIT IA5String OPTIONAL, - * crlNum [1] EXPLICIT INTEGER OPTIONAL, - * crlTime [2] EXPLICIT GeneralizedTime OPTIONAL } - */ -typedef struct ocsp_crl_id_st { - ASN1_IA5STRING *crlUrl; - ASN1_INTEGER *crlNum; - ASN1_GENERALIZEDTIME *crlTime; -} OCSP_CRLID; - -/*- - * ServiceLocator ::= SEQUENCE { - * issuer Name, - * locator AuthorityInfoAccessSyntax OPTIONAL } - */ -typedef struct ocsp_service_locator_st { - X509_NAME *issuer; - STACK_OF(ACCESS_DESCRIPTION) *locator; -} OCSP_SERVICELOC; - -# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" -# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" - -# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) - -# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) - -# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ - (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL) - -# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ - (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL) - -# define PEM_write_bio_OCSP_REQUEST(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ - bp,(char *)o, NULL,NULL,0,NULL,NULL) - -# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ - bp,(char *)o, NULL,NULL,0,NULL,NULL) - -# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) - -# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) - -# define OCSP_REQUEST_sign(o,pkey,md) \ - ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\ - o->optionalSignature->signatureAlgorithm,NULL,\ - o->optionalSignature->signature,o->tbsRequest,pkey,md) - -# define OCSP_BASICRESP_sign(o,pkey,md,d) \ - ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\ - o->signature,o->tbsResponseData,pkey,md) - -# define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\ - a->optionalSignature->signatureAlgorithm,\ - a->optionalSignature->signature,a->tbsRequest,r) - -# define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\ - a->signatureAlgorithm,a->signature,a->tbsResponseData,r) - -# define ASN1_BIT_STRING_digest(data,type,md,len) \ - ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) - -# define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) - -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); - -OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); - -OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); - -OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, - X509_NAME *issuerName, - ASN1_BIT_STRING *issuerKey, - ASN1_INTEGER *serialNumber); - -OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); - -int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); -int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); -int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); -int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); - -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); -int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); - -int OCSP_request_sign(OCSP_REQUEST *req, - X509 *signer, - EVP_PKEY *key, - const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); - -int OCSP_response_status(OCSP_RESPONSE *resp); -OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); - -int OCSP_resp_count(OCSP_BASICRESP *bs); -OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); -int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); -int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, - ASN1_GENERALIZEDTIME **revtime, - ASN1_GENERALIZEDTIME **thisupd, - ASN1_GENERALIZEDTIME **nextupd); -int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, - int *reason, - ASN1_GENERALIZEDTIME **revtime, - ASN1_GENERALIZEDTIME **thisupd, - ASN1_GENERALIZEDTIME **nextupd); -int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, - ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); - -int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, - X509_STORE *store, unsigned long flags); - -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); - -int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b); -int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); - -int OCSP_request_onereq_count(OCSP_REQUEST *req); -OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); -OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); -int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, - ASN1_OCTET_STRING **pikeyHash, - ASN1_INTEGER **pserial, OCSP_CERTID *cid); -int OCSP_request_is_signed(OCSP_REQUEST *req); -OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); -OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, - OCSP_CERTID *cid, - int status, int reason, - ASN1_TIME *revtime, - ASN1_TIME *thisupd, - ASN1_TIME *nextupd); -int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); -int OCSP_basic_sign(OCSP_BASICRESP *brsp, - X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); - -X509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim); - -X509_EXTENSION *OCSP_accept_responses_new(char **oids); - -X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); - -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls); - -int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); -int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); -int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj, - int lastpos); -int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); -X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); -X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); -void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, - int *idx); -int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); - -int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); -int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); -int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos); -int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); -X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); -X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); -void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); -int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); - -int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); -int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); -int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj, - int lastpos); -int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); -X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); -void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, - int *idx); -int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); - -int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); -int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); -int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj, - int lastpos); -int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); -X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); -void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, - int *idx); -int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); - -DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) -DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) -DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) -DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) -DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) -DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) -DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) - -const char *OCSP_response_status_str(long s); -const char *OCSP_cert_status_str(long s); -const char *OCSP_crl_reason_str(long s); - -int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); -int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); - -int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, - X509_STORE *st, unsigned long flags); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_OCSP_strings(void); - -/* Error codes for the OCSP functions. */ - -/* Function codes. */ -# define OCSP_F_ASN1_STRING_ENCODE 100 -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_OCSP_SENDREQ_BIO 112 -# define OCSP_F_OCSP_SENDREQ_NBIO 117 -# define OCSP_F_PARSE_HTTP_LINE1 118 -# define OCSP_F_REQUEST_VERIFY 113 - -/* Reason codes. */ -# define OCSP_R_BAD_DATA 100 -# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 -# define OCSP_R_DIGEST_ERR 102 -# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 -# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 -# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_CONTENT 106 -# define OCSP_R_NO_PUBLIC_KEY 107 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# define OCSP_R_REQUEST_NOT_SIGNED 128 -# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 -# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_READ_ERROR 113 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 -# define OCSP_R_SERVER_WRITE_ERROR 116 -# define OCSP_R_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/opensslconf.h b/ext/openssl/windows/x64/include/openssl/opensslconf.h deleted file mode 100644 index d01afc20..00000000 --- a/ext/openssl/windows/x64/include/openssl/opensslconf.h +++ /dev/null @@ -1,271 +0,0 @@ -/* opensslconf.h */ -/* WARNING: Generated automatically from opensslconf.h.in by Configure. */ - -#ifdef __cplusplus -extern "C" { -#endif -/* OpenSSL was configured with the following options: */ -#ifndef OPENSSL_SYSNAME_WIN64A -# define OPENSSL_SYSNAME_WIN64A -#endif -#ifndef OPENSSL_DOING_MAKEDEPEND - - -#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -# define OPENSSL_NO_EC_NISTP_64_GCC_128 -#endif -#ifndef OPENSSL_NO_GMP -# define OPENSSL_NO_GMP -#endif -#ifndef OPENSSL_NO_JPAKE -# define OPENSSL_NO_JPAKE -#endif -#ifndef OPENSSL_NO_KRB5 -# define OPENSSL_NO_KRB5 -#endif -#ifndef OPENSSL_NO_LIBUNBOUND -# define OPENSSL_NO_LIBUNBOUND -#endif -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_NO_RFC3779 -# define OPENSSL_NO_RFC3779 -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL2 -# define OPENSSL_NO_SSL2 -#endif -#ifndef OPENSSL_NO_STORE -# define OPENSSL_NO_STORE -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif - -#endif /* OPENSSL_DOING_MAKEDEPEND */ - -#ifndef OPENSSL_THREADS -# define OPENSSL_THREADS -#endif - -/* The OPENSSL_NO_* macros are also defined as NO_* if the application - asks for it. This is a transient feature that is provided for those - who haven't had the time to do the appropriate changes in their - applications. */ -#ifdef OPENSSL_ALGORITHM_DEFINES -# if defined(OPENSSL_NO_EC_NISTP_64_GCC_128) && !defined(NO_EC_NISTP_64_GCC_128) -# define NO_EC_NISTP_64_GCC_128 -# endif -# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP) -# define NO_GMP -# endif -# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE) -# define NO_JPAKE -# endif -# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5) -# define NO_KRB5 -# endif -# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND) -# define NO_LIBUNBOUND -# endif -# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2) -# define NO_MD2 -# endif -# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5) -# define NO_RC5 -# endif -# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779) -# define NO_RFC3779 -# endif -# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP) -# define NO_SCTP -# endif -# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE) -# define NO_SSL_TRACE -# endif -# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2) -# define NO_SSL2 -# endif -# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE) -# define NO_STORE -# endif -# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST) -# define NO_UNIT_TEST -# endif -# if defined(OPENSSL_NO_WEAK_SSL_CIPHERS) && !defined(NO_WEAK_SSL_CIPHERS) -# define NO_WEAK_SSL_CIPHERS -# endif -#endif - -#define OPENSSL_CPUID_OBJ - -/* crypto/opensslconf.h.in */ - -/* Generate 80386 code? */ -#undef I386_ONLY - -#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ -#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) -#define ENGINESDIR "C:\\OpenSSL/lib/engines" -#define OPENSSLDIR "C:\\OpenSSL/ssl" -#endif -#endif - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION -#define OPENSSL_EXPORT_VAR_AS_FUNCTION - -#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) -#define IDEA_INT unsigned int -#endif - -#if defined(HEADER_MD2_H) && !defined(MD2_INT) -#define MD2_INT unsigned int -#endif - -#if defined(HEADER_RC2_H) && !defined(RC2_INT) -/* I need to put in a mod for the alpha - eay */ -#define RC2_INT unsigned int -#endif - -#if defined(HEADER_RC4_H) -#if !defined(RC4_INT) -/* using int types make the structure larger but make the code faster - * on most boxes I have tested - up to %20 faster. */ -/* - * I don't know what does "most" mean, but declaring "int" is a must on: - * - Intel P6 because partial register stalls are very expensive; - * - elder Alpha because it lacks byte load/store instructions; - */ -#define RC4_INT unsigned int -#endif -#if !defined(RC4_CHUNK) -/* - * This enables code handling data aligned at natural CPU word - * boundary. See crypto/rc4/rc4_enc.c for further details. - */ -#define RC4_CHUNK unsigned long long -#endif -#endif - -#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) -/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a - * %20 speed up (longs are 8 bytes, int's are 4). */ -#ifndef DES_LONG -#define DES_LONG unsigned int -#endif -#endif - -#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) -#define CONFIG_HEADER_BN_H -#undef BN_LLONG - -/* Should we define BN_DIV2W here? */ - -/* Only one for the following should be defined */ -#undef SIXTY_FOUR_BIT_LONG -#define SIXTY_FOUR_BIT -#undef THIRTY_TWO_BIT -#endif - -#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) -#define CONFIG_HEADER_RC4_LOCL_H -/* if this is defined data[i] is used instead of *data, this is a %20 - * speedup on x86 */ -#undef RC4_INDEX -#endif - -#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) -#define CONFIG_HEADER_BF_LOCL_H -#undef BF_PTR -#endif /* HEADER_BF_LOCL_H */ - -#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) -#define CONFIG_HEADER_DES_LOCL_H -#ifndef DES_DEFAULT_OPTIONS -/* the following is tweaked from a config script, that is why it is a - * protected undef/define */ -#ifndef DES_PTR -#undef DES_PTR -#endif - -/* This helps C compiler generate the correct code for multiple functional - * units. It reduces register dependancies at the expense of 2 more - * registers */ -#ifndef DES_RISC1 -#undef DES_RISC1 -#endif - -#ifndef DES_RISC2 -#undef DES_RISC2 -#endif - -#if defined(DES_RISC1) && defined(DES_RISC2) -#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! -#endif - -/* Unroll the inner loop, this sometimes helps, sometimes hinders. - * Very mucy CPU dependant */ -#ifndef DES_UNROLL -#undef DES_UNROLL -#endif - -/* These default values were supplied by - * Peter Gutman - * They are only used if nothing else has been defined */ -#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) -/* Special defines which change the way the code is built depending on the - CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find - even newer MIPS CPU's, but at the moment one size fits all for - optimization options. Older Sparc's work better with only UNROLL, but - there's no way to tell at compile time what it is you're running on */ - -#if defined( __sun ) || defined ( sun ) /* Newer Sparc's */ -# define DES_PTR -# define DES_RISC1 -# define DES_UNROLL -#elif defined( __ultrix ) /* Older MIPS */ -# define DES_PTR -# define DES_RISC2 -# define DES_UNROLL -#elif defined( __osf1__ ) /* Alpha */ -# define DES_PTR -# define DES_RISC2 -#elif defined ( _AIX ) /* RS6000 */ - /* Unknown */ -#elif defined( __hpux ) /* HP-PA */ - /* Unknown */ -#elif defined( __aux ) /* 68K */ - /* Unknown */ -#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ -# define DES_UNROLL -#elif defined( __sgi ) /* Newer MIPS */ -# define DES_PTR -# define DES_RISC2 -# define DES_UNROLL -#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ -# define DES_PTR -# define DES_RISC1 -# define DES_UNROLL -#endif /* Systems-specific speed defines */ -#endif - -#endif /* DES_DEFAULT_OPTIONS */ -#endif /* HEADER_DES_LOCL_H */ -#ifdef __cplusplus -} -#endif diff --git a/ext/openssl/windows/x64/include/openssl/opensslv.h b/ext/openssl/windows/x64/include/openssl/opensslv.h deleted file mode 100644 index 825a330a..00000000 --- a/ext/openssl/windows/x64/include/openssl/opensslv.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) - */ -# define OPENSSL_VERSION_NUMBER 0x100020cfL -# ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2l-fips 25 May 2017" -# else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2l 25 May 2017" -# endif -# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT - -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: - * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major verson number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. - */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.0.0" - - -#ifdef __cplusplus -} -#endif -#endif /* HEADER_OPENSSLV_H */ diff --git a/ext/openssl/windows/x64/include/openssl/ossl_typ.h b/ext/openssl/windows/x64/include/openssl/ossl_typ.h deleted file mode 100644 index 364d2623..00000000 --- a/ext/openssl/windows/x64/include/openssl/ossl_typ.h +++ /dev/null @@ -1,213 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; - -# ifdef OPENSSL_SYS_WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef X509_CERT_PAIR -# undef PKCS7_ISSUER_AND_SERIAL -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct env_md_st EVP_MD; -typedef struct env_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; - -typedef struct rand_meth_st RAND_METHOD; - -typedef struct ecdh_method ECDH_METHOD; -typedef struct ecdsa_method ECDSA_METHOD; - -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; - -typedef struct store_st STORE; -typedef struct store_method_st STORE_METHOD; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct st_ERR_FNS ERR_FNS; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - - /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ -# define DECLARE_PKCS12_STACK_OF(type)/* Nothing */ -# define IMPLEMENT_PKCS12_STACK_OF(type)/* Nothing */ - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; -/* Callback types for crypto.h */ -typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/ext/openssl/windows/x64/include/openssl/pem.h b/ext/openssl/windows/x64/include/openssl/pem.h deleted file mode 100644 index aac72fb2..00000000 --- a/ext/openssl/windows/x64/include/openssl/pem.h +++ /dev/null @@ -1,617 +0,0 @@ -/* crypto/pem/pem.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_PEM_H -# define HEADER_PEM_H - -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# ifndef OPENSSL_NO_STACK -# include -# endif -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PEM_BUFSIZE 1024 - -# define PEM_OBJ_UNDEF 0 -# define PEM_OBJ_X509 1 -# define PEM_OBJ_X509_REQ 2 -# define PEM_OBJ_CRL 3 -# define PEM_OBJ_SSL_SESSION 4 -# define PEM_OBJ_PRIV_KEY 10 -# define PEM_OBJ_PRIV_RSA 11 -# define PEM_OBJ_PRIV_DSA 12 -# define PEM_OBJ_PRIV_DH 13 -# define PEM_OBJ_PUB_RSA 14 -# define PEM_OBJ_PUB_DSA 15 -# define PEM_OBJ_PUB_DH 16 -# define PEM_OBJ_DHPARAMS 17 -# define PEM_OBJ_DSAPARAMS 18 -# define PEM_OBJ_PRIV_RSA_PUBLIC 19 -# define PEM_OBJ_PRIV_ECDSA 20 -# define PEM_OBJ_PUB_ECDSA 21 -# define PEM_OBJ_ECPARAMETERS 22 - -# define PEM_ERROR 30 -# define PEM_DEK_DES_CBC 40 -# define PEM_DEK_IDEA_CBC 45 -# define PEM_DEK_DES_EDE 50 -# define PEM_DEK_DES_ECB 60 -# define PEM_DEK_RSA 70 -# define PEM_DEK_RSA_MD2 80 -# define PEM_DEK_RSA_MD5 90 - -# define PEM_MD_MD2 NID_md2 -# define PEM_MD_MD5 NID_md5 -# define PEM_MD_SHA NID_sha -# define PEM_MD_MD2_RSA NID_md2WithRSAEncryption -# define PEM_MD_MD5_RSA NID_md5WithRSAEncryption -# define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption - -# define PEM_STRING_X509_OLD "X509 CERTIFICATE" -# define PEM_STRING_X509 "CERTIFICATE" -# define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" -# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" -# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" -# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" -# define PEM_STRING_X509_CRL "X509 CRL" -# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" -# define PEM_STRING_PUBLIC "PUBLIC KEY" -# define PEM_STRING_RSA "RSA PRIVATE KEY" -# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" -# define PEM_STRING_DSA "DSA PRIVATE KEY" -# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" -# define PEM_STRING_PKCS7 "PKCS7" -# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" -# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" -# define PEM_STRING_PKCS8INF "PRIVATE KEY" -# define PEM_STRING_DHPARAMS "DH PARAMETERS" -# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" -# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" -# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" -# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" -# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" -# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" -# define PEM_STRING_PARAMETERS "PARAMETERS" -# define PEM_STRING_CMS "CMS" - - /* - * Note that this structure is initialised by PEM_SealInit and cleaned up - * by PEM_SealFinal (at least for now) - */ -typedef struct PEM_Encode_Seal_st { - EVP_ENCODE_CTX encode; - EVP_MD_CTX md; - EVP_CIPHER_CTX cipher; -} PEM_ENCODE_SEAL_CTX; - -/* enc_type is one off */ -# define PEM_TYPE_ENCRYPTED 10 -# define PEM_TYPE_MIC_ONLY 20 -# define PEM_TYPE_MIC_CLEAR 30 -# define PEM_TYPE_CLEAR 40 - -typedef struct pem_recip_st { - char *name; - X509_NAME *dn; - int cipher; - int key_enc; - /* char iv[8]; unused and wrong size */ -} PEM_USER; - -typedef struct pem_ctx_st { - int type; /* what type of object */ - struct { - int version; - int mode; - } proc_type; - - char *domain; - - struct { - int cipher; - /*- - unused, and wrong size - unsigned char iv[8]; */ - } DEK_info; - - PEM_USER *originator; - - int num_recipient; - PEM_USER **recipient; -/*- - XXX(ben): don#t think this is used! - STACK *x509_chain; / * certificate chain */ - EVP_MD *md; /* signature type */ - - int md_enc; /* is the md encrypted or not? */ - int md_len; /* length of md_data */ - char *md_data; /* message digest, could be pkey encrypted */ - - EVP_CIPHER *dec; /* date encryption cipher */ - int key_len; /* key length */ - unsigned char *key; /* key */ - /*- - unused, and wrong size - unsigned char iv[8]; */ - - int data_enc; /* is the data encrypted */ - int data_len; - unsigned char *data; -} PEM_CTX; - -/* - * These macros make the PEM_read/PEM_write functions easier to maintain and - * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or - * IMPLEMENT_PEM_rw_cb(...) - */ - -# ifdef OPENSSL_NO_FP_API - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ -# else - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# endif - -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_read_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb(name, type, str, asn1) - -/* These are the same except they are for the declarations */ - -# if defined(OPENSSL_NO_FP_API) - -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ -# else - -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# endif - -# ifndef OPENSSL_NO_BIO -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); - -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); - -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# else - -# define DECLARE_PEM_read_bio(name, type) /**/ -# define DECLARE_PEM_write_bio(name, type) /**/ -# define DECLARE_PEM_write_bio_const(name, type) /**/ -# define DECLARE_PEM_write_cb_bio(name, type) /**/ -# endif -# define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) -# define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) -# define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -# if 1 -/* "userdata": new with OpenSSL 0.9.4 */ -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); -# else -/* OpenSSL 0.9.3, 0.9.3a */ -typedef int pem_password_cb (char *buf, int size, int rwflag); -# endif - -int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); -int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, - pem_password_cb *callback, void *u); - -# ifndef OPENSSL_NO_BIO -int PEM_read_bio(BIO *bp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write_bio(BIO *bp, const char *name, const char *hdr, - const unsigned char *data, long len); -int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u); -void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cd, void *u); -# endif - -int PEM_read(FILE *fp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write(FILE *fp, const char *name, const char *hdr, - const unsigned char *data, long len); -void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); -STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); - -int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, - EVP_MD *md_type, unsigned char **ek, int *ekl, - unsigned char *iv, EVP_PKEY **pubk, int npubk); -void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, - unsigned char *in, int inl); -int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl, - unsigned char *out, int *outl, EVP_PKEY *priv); - -void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); -int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, - unsigned int *siglen, EVP_PKEY *pkey); - -int PEM_def_callback(char *buf, int num, int w, void *key); -void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); - -# include - -DECLARE_PEM_rw(X509, X509) -DECLARE_PEM_rw(X509_AUX, X509) -DECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR) -DECLARE_PEM_rw(X509_REQ, X509_REQ) -DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) -DECLARE_PEM_rw(X509_CRL, X509_CRL) -DECLARE_PEM_rw(PKCS7, PKCS7) -DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) -DECLARE_PEM_rw(PKCS8, X509_SIG) -DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) -# endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) -# endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) - -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); - -EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); - -EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); - -EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PrivateKey_bio(BIO *in); -EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 -EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, - pem_password_cb *cb, void *u); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -void ERR_load_PEM_strings(void); - -/* Error codes for the PEM functions. */ - -/* Function codes. */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_PK8PKEY 119 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SEALFINAL 110 -# define PEM_F_PEM_SEALINIT 111 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 - -/* Reason codes. */ -# define PEM_R_BAD_BASE64_DECODE 100 -# define PEM_R_BAD_DECRYPT 101 -# define PEM_R_BAD_END_LINE 102 -# define PEM_R_BAD_IV_CHARS 103 -# define PEM_R_BAD_MAGIC_NUMBER 116 -# define PEM_R_BAD_PASSWORD_READ 104 -# define PEM_R_BAD_VERSION_NUMBER 117 -# define PEM_R_BIO_WRITE_FAILURE 118 -# define PEM_R_CIPHER_IS_NULL 127 -# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 -# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 -# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 -# define PEM_R_HEADER_TOO_LONG 128 -# define PEM_R_INCONSISTENT_HEADER 121 -# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PUBLIC_KEY_NO_RSA 110 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 - -# ifdef __cplusplus -} -# endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/pem2.h b/ext/openssl/windows/x64/include/openssl/pem2.h deleted file mode 100644 index 84897d5e..00000000 --- a/ext/openssl/windows/x64/include/openssl/pem2.h +++ /dev/null @@ -1,70 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - * This header only exists to break a circular dependency between pem and err - * Ben 30 Jan 1999. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef HEADER_PEM_H -void ERR_load_PEM_strings(void); -#endif - -#ifdef __cplusplus -} -#endif diff --git a/ext/openssl/windows/x64/include/openssl/pkcs12.h b/ext/openssl/windows/x64/include/openssl/pkcs12.h deleted file mode 100644 index 21f1f62b..00000000 --- a/ext/openssl/windows/x64/include/openssl/pkcs12.h +++ /dev/null @@ -1,342 +0,0 @@ -/* pkcs12.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project - * 1999. - */ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PKCS12_KEY_ID 1 -# define PKCS12_IV_ID 2 -# define PKCS12_MAC_ID 3 - -/* Default iteration count */ -# ifndef PKCS12_DEFAULT_ITER -# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER -# endif - -# define PKCS12_MAC_KEY_LENGTH 20 - -# define PKCS12_SALT_LEN 8 - -/* Uncomment out next line for unicode password and names, otherwise ASCII */ - -/* - * #define PBE_UNICODE - */ - -# ifdef PBE_UNICODE -# define PKCS12_key_gen PKCS12_key_gen_uni -# define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni -# else -# define PKCS12_key_gen PKCS12_key_gen_asc -# define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc -# endif - -/* MS key usage constants */ - -# define KEY_EX 0x10 -# define KEY_SIG 0x80 - -typedef struct { - X509_SIG *dinfo; - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *iter; /* defaults to 1 */ -} PKCS12_MAC_DATA; - -typedef struct { - ASN1_INTEGER *version; - PKCS12_MAC_DATA *mac; - PKCS7 *authsafes; -} PKCS12; - -typedef struct { - ASN1_OBJECT *type; - union { - struct pkcs12_bag_st *bag; /* secret, crl and certbag */ - struct pkcs8_priv_key_info_st *keybag; /* keybag */ - X509_SIG *shkeybag; /* shrouded key bag */ - STACK_OF(PKCS12_SAFEBAG) *safes; - ASN1_TYPE *other; - } value; - STACK_OF(X509_ATTRIBUTE) *attrib; -} PKCS12_SAFEBAG; - -DECLARE_STACK_OF(PKCS12_SAFEBAG) -DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG) -DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) - -typedef struct pkcs12_bag_st { - ASN1_OBJECT *type; - union { - ASN1_OCTET_STRING *x509cert; - ASN1_OCTET_STRING *x509crl; - ASN1_OCTET_STRING *octet; - ASN1_IA5STRING *sdsicert; - ASN1_TYPE *other; /* Secret or other bag */ - } value; -} PKCS12_BAGS; - -# define PKCS12_ERROR 0 -# define PKCS12_OK 1 - -/* Compatibility macros */ - -# define M_PKCS12_x5092certbag PKCS12_x5092certbag -# define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag - -# define M_PKCS12_certbag2x509 PKCS12_certbag2x509 -# define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl - -# define M_PKCS12_unpack_p7data PKCS12_unpack_p7data -# define M_PKCS12_pack_authsafes PKCS12_pack_authsafes -# define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes -# define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata - -# define M_PKCS12_decrypt_skey PKCS12_decrypt_skey -# define M_PKCS8_decrypt PKCS8_decrypt - -# define M_PKCS12_bag_type(bg) OBJ_obj2nid((bg)->type) -# define M_PKCS12_cert_bag_type(bg) OBJ_obj2nid((bg)->value.bag->type) -# define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type - -# define PKCS12_get_attr(bag, attr_nid) \ - PKCS12_get_attr_gen(bag->attrib, attr_nid) - -# define PKCS8_get_attr(p8, attr_nid) \ - PKCS12_get_attr_gen(p8->attributes, attr_nid) - -# define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0) - -PKCS12_SAFEBAG *PKCS12_x5092certbag(X509 *x509); -PKCS12_SAFEBAG *PKCS12_x509crl2certbag(X509_CRL *crl); -X509 *PKCS12_certbag2x509(PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag); - -PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, - int nid1, int nid2); -PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *p8, const char *pass, - int passlen); -PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag, - const char *pass, int passlen); -X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, - const char *pass, int passlen, unsigned char *salt, - int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); -PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, - int passlen, unsigned char *salt, - int saltlen, int iter, - PKCS8_PRIV_KEY_INFO *p8); -PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); -PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - STACK_OF(PKCS12_SAFEBAG) *bags); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, - int passlen); - -int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); -STACK_OF(PKCS7) *PKCS12_unpack_authsafes(PKCS12 *p12); - -int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, - int namelen); -int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, - const unsigned char *name, int namelen); -int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); -ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); -char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); -unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, - int passlen, unsigned char *in, int inlen, - unsigned char **data, int *datalen, - int en_de); -void *PKCS12_item_decrypt_d2i(X509_ALGOR *algor, const ASN1_ITEM *it, - const char *pass, int passlen, - ASN1_OCTET_STRING *oct, int zbuf); -ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, - const ASN1_ITEM *it, - const char *pass, int passlen, - void *obj, int zbuf); -PKCS12 *PKCS12_init(int mode); -int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md_type, int en_de); -int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *mac, unsigned int *maclen); -int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); -int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - const EVP_MD *md_type); -int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, - int saltlen, const EVP_MD *md_type); -unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, - unsigned char **uni, int *unilen); -char *OPENSSL_uni2asc(unsigned char *uni, int unilen); - -DECLARE_ASN1_FUNCTIONS(PKCS12) -DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) -DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) -DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) - -DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) -DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) - -void PKCS12_PBE_add(void); -int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, - STACK_OF(X509) **ca); -PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, - STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, - int mac_iter, int keytype); - -PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); -PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, - EVP_PKEY *key, int key_usage, int iter, - int key_nid, char *pass); -int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, - int safe_nid, int iter, char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); - -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); -PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); -PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); -int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_PKCS12_strings(void); - -/* Error codes for the PKCS12 functions. */ - -/* Function codes. */ -# define PKCS12_F_PARSE_BAG 129 -# define PKCS12_F_PARSE_BAGS 103 -# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 -# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 -# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 -# define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_MAKE_KEYBAG 112 -# define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ADD_KEYUSAGE 124 -# define PKCS12_F_PKCS8_ENCRYPT 125 - -/* Reason codes. */ -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 -# define PKCS12_R_INVALID_NULL_ARGUMENT 104 -# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 -# define PKCS12_R_IV_GEN_ERROR 106 -# define PKCS12_R_KEY_GEN_ERROR 107 -# define PKCS12_R_MAC_ABSENT 108 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# define PKCS12_R_MAC_STRING_SET_ERROR 111 -# define PKCS12_R_MAC_VERIFY_ERROR 112 -# define PKCS12_R_MAC_VERIFY_FAILURE 113 -# define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 -# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/pkcs7.h b/ext/openssl/windows/x64/include/openssl/pkcs7.h deleted file mode 100644 index b51b3863..00000000 --- a/ext/openssl/windows/x64/include/openssl/pkcs7.h +++ /dev/null @@ -1,481 +0,0 @@ -/* crypto/pkcs7/pkcs7.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H - -# include -# include -# include - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_SYS_WIN32 -/* Under Win32 thes are defined in wincrypt.h */ -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# endif - -/*- -Encryption_ID DES-CBC -Digest_ID MD5 -Digest_Encryption_ID rsaEncryption -Key_Encryption_ID rsaEncryption -*/ - -typedef struct pkcs7_issuer_and_serial_st { - X509_NAME *issuer; - ASN1_INTEGER *serial; -} PKCS7_ISSUER_AND_SERIAL; - -typedef struct pkcs7_signer_info_st { - ASN1_INTEGER *version; /* version 1 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *digest_alg; - STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ - X509_ALGOR *digest_enc_alg; - ASN1_OCTET_STRING *enc_digest; - STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ - /* The private key to sign with */ - EVP_PKEY *pkey; -} PKCS7_SIGNER_INFO; - -DECLARE_STACK_OF(PKCS7_SIGNER_INFO) -DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) - -typedef struct pkcs7_recip_info_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *key_enc_algor; - ASN1_OCTET_STRING *enc_key; - X509 *cert; /* get the pub-key from this */ -} PKCS7_RECIP_INFO; - -DECLARE_STACK_OF(PKCS7_RECIP_INFO) -DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) - -typedef struct pkcs7_signed_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - struct pkcs7_st *contents; -} PKCS7_SIGNED; -/* - * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about - * merging the two - */ - -typedef struct pkcs7_enc_content_st { - ASN1_OBJECT *content_type; - X509_ALGOR *algorithm; - ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ - const EVP_CIPHER *cipher; -} PKCS7_ENC_CONTENT; - -typedef struct pkcs7_enveloped_st { - ASN1_INTEGER *version; /* version 0 */ - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENVELOPE; - -typedef struct pkcs7_signedandenveloped_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - PKCS7_ENC_CONTENT *enc_data; - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; -} PKCS7_SIGN_ENVELOPE; - -typedef struct pkcs7_digest_st { - ASN1_INTEGER *version; /* version 0 */ - X509_ALGOR *md; /* md used */ - struct pkcs7_st *contents; - ASN1_OCTET_STRING *digest; -} PKCS7_DIGEST; - -typedef struct pkcs7_encrypted_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENCRYPT; - -typedef struct pkcs7_st { - /* - * The following is non NULL if it contains ASN1 encoding of this - * structure - */ - unsigned char *asn1; - long length; -# define PKCS7_S_HEADER 0 -# define PKCS7_S_BODY 1 -# define PKCS7_S_TAIL 2 - int state; /* used during processing */ - int detached; - ASN1_OBJECT *type; - /* content as defined by the type */ - /* - * all encryption/message digests are applied to the 'contents', leaving - * out the 'type' field. - */ - union { - char *ptr; - /* NID_pkcs7_data */ - ASN1_OCTET_STRING *data; - /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; - /* NID_pkcs7_enveloped */ - PKCS7_ENVELOPE *enveloped; - /* NID_pkcs7_signedAndEnveloped */ - PKCS7_SIGN_ENVELOPE *signed_and_enveloped; - /* NID_pkcs7_digest */ - PKCS7_DIGEST *digest; - /* NID_pkcs7_encrypted */ - PKCS7_ENCRYPT *encrypted; - /* Anything else */ - ASN1_TYPE *other; - } d; -} PKCS7; - -DECLARE_STACK_OF(PKCS7) -DECLARE_ASN1_SET_OF(PKCS7) -DECLARE_PKCS12_STACK_OF(PKCS7) - -# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 -# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 - -# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) -# define PKCS7_get_attributes(si) ((si)->unauth_attr) - -# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) -# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) -# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) -# define PKCS7_type_is_signedAndEnveloped(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) -# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) -# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) - -# define PKCS7_set_detached(p,v) \ - PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) -# define PKCS7_get_detached(p) \ - PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) - -# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) - -/* S/MIME related flags */ - -# define PKCS7_TEXT 0x1 -# define PKCS7_NOCERTS 0x2 -# define PKCS7_NOSIGS 0x4 -# define PKCS7_NOCHAIN 0x8 -# define PKCS7_NOINTERN 0x10 -# define PKCS7_NOVERIFY 0x20 -# define PKCS7_DETACHED 0x40 -# define PKCS7_BINARY 0x80 -# define PKCS7_NOATTR 0x100 -# define PKCS7_NOSMIMECAP 0x200 -# define PKCS7_NOOLDMIMETYPE 0x400 -# define PKCS7_CRLFEOL 0x800 -# define PKCS7_STREAM 0x1000 -# define PKCS7_NOCRL 0x2000 -# define PKCS7_PARTIAL 0x4000 -# define PKCS7_REUSE_DIGEST 0x8000 - -/* Flags: for compatibility with older code */ - -# define SMIME_TEXT PKCS7_TEXT -# define SMIME_NOCERTS PKCS7_NOCERTS -# define SMIME_NOSIGS PKCS7_NOSIGS -# define SMIME_NOCHAIN PKCS7_NOCHAIN -# define SMIME_NOINTERN PKCS7_NOINTERN -# define SMIME_NOVERIFY PKCS7_NOVERIFY -# define SMIME_DETACHED PKCS7_DETACHED -# define SMIME_BINARY PKCS7_BINARY -# define SMIME_NOATTR PKCS7_NOATTR - -DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) - -int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, - const EVP_MD *type, unsigned char *md, - unsigned int *len); -# ifndef OPENSSL_NO_FP_API -PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); -# endif -PKCS7 *PKCS7_dup(PKCS7 *p7); -PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); -int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); -int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); - -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) -DECLARE_ASN1_FUNCTIONS(PKCS7) - -DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) -DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) - -DECLARE_ASN1_NDEF_FUNCTION(PKCS7) -DECLARE_ASN1_PRINT_FUNCTION(PKCS7) - -long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); - -int PKCS7_set_type(PKCS7 *p7, int type); -int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); -int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); -int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, - const EVP_MD *dgst); -int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); -int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); -int PKCS7_content_new(PKCS7 *p7, int nid); -int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, - BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, - X509 *x509); - -BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); -int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); -BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); - -PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, - EVP_PKEY *pkey, const EVP_MD *dgst); -X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); -STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); - -PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); -void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, - X509_ALGOR **pdig, X509_ALGOR **psig); -void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); -int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); -int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); -int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); -int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); - -PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); -ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, - void *data); -int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, - void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); -int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); - -PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, - BIO *data, int flags); - -PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, - X509 *signcert, EVP_PKEY *pkey, - const EVP_MD *md, int flags); - -int PKCS7_final(PKCS7 *p7, BIO *data, int flags); -int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, - BIO *indata, BIO *out, int flags); -STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, - int flags); -PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, - int flags); -int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, - int flags); - -int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, - STACK_OF(X509_ALGOR) *cap); -STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); -int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); - -int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); -int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); -int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, - const unsigned char *md, int mdlen); - -int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); -PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); - -BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_PKCS7_strings(void); - -/* Error codes for the PKCS7 functions. */ - -/* Function codes. */ -# define PKCS7_F_B64_READ_PKCS7 120 -# define PKCS7_F_B64_WRITE_PKCS7 121 -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_I2D_PKCS7_BIO_STREAM 140 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATASIGN 106 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 -# define PKCS7_F_SMIME_READ_PKCS7 122 -# define PKCS7_F_SMIME_TEXT 123 - -/* Reason codes. */ -# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 -# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 -# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 -# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 -# define PKCS7_R_CTRL_ERROR 152 -# define PKCS7_R_DECODE_ERROR 130 -# define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH 100 -# define PKCS7_R_DECRYPT_ERROR 119 -# define PKCS7_R_DIGEST_FAILURE 101 -# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 -# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 -# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 -# define PKCS7_R_ERROR_SETTING_CIPHER 121 -# define PKCS7_R_INVALID_MIME_TYPE 131 -# define PKCS7_R_INVALID_NULL_POINTER 143 -# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 -# define PKCS7_R_MIME_NO_CONTENT_TYPE 132 -# define PKCS7_R_MIME_PARSE_ERROR 133 -# define PKCS7_R_MIME_SIG_PARSE_ERROR 134 -# define PKCS7_R_MISSING_CERIPEND_INFO 103 -# define PKCS7_R_NO_CONTENT 122 -# define PKCS7_R_NO_CONTENT_TYPE 135 -# define PKCS7_R_NO_DEFAULT_DIGEST 151 -# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 -# define PKCS7_R_NO_MULTIPART_BODY_FAILURE 136 -# define PKCS7_R_NO_MULTIPART_BOUNDARY 137 -# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 -# define PKCS7_R_NO_RECIPIENT_MATCHES_KEY 146 -# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 -# define PKCS7_R_NO_SIGNERS 142 -# define PKCS7_R_NO_SIG_CONTENT_TYPE 138 -# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 -# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 -# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 -# define PKCS7_R_PKCS7_DATAFINAL 126 -# define PKCS7_R_PKCS7_DATAFINAL_ERROR 125 -# define PKCS7_R_PKCS7_DATASIGN 145 -# define PKCS7_R_PKCS7_PARSE_ERROR 139 -# define PKCS7_R_PKCS7_SIG_PARSE_ERROR 140 -# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 -# define PKCS7_R_SIGNATURE_FAILURE 105 -# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 -# define PKCS7_R_SIGNING_CTRL_FAILURE 147 -# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 -# define PKCS7_R_SIG_INVALID_MIME_TYPE 141 -# define PKCS7_R_SMIME_TEXT_ERROR 129 -# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 -# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 -# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 -# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 -# define PKCS7_R_UNKNOWN_OPERATION 110 -# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 -# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 -# define PKCS7_R_WRONG_CONTENT_TYPE 113 -# define PKCS7_R_WRONG_PKCS7_TYPE 114 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/pqueue.h b/ext/openssl/windows/x64/include/openssl/pqueue.h deleted file mode 100644 index d40d9c7d..00000000 --- a/ext/openssl/windows/x64/include/openssl/pqueue.h +++ /dev/null @@ -1,99 +0,0 @@ -/* crypto/pqueue/pqueue.h */ -/* - * DTLS implementation written by Nagendra Modadugu - * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. - */ -/* ==================================================================== - * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_PQUEUE_H -# define HEADER_PQUEUE_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif -typedef struct _pqueue *pqueue; - -typedef struct _pitem { - unsigned char priority[8]; /* 64-bit value in big-endian encoding */ - void *data; - struct _pitem *next; -} pitem; - -typedef struct _pitem *piterator; - -pitem *pitem_new(unsigned char *prio64be, void *data); -void pitem_free(pitem *item); - -pqueue pqueue_new(void); -void pqueue_free(pqueue pq); - -pitem *pqueue_insert(pqueue pq, pitem *item); -pitem *pqueue_peek(pqueue pq); -pitem *pqueue_pop(pqueue pq); -pitem *pqueue_find(pqueue pq, unsigned char *prio64be); -pitem *pqueue_iterator(pqueue pq); -pitem *pqueue_next(piterator *iter); - -void pqueue_print(pqueue pq); -int pqueue_size(pqueue pq); - -#ifdef __cplusplus -} -#endif -#endif /* ! HEADER_PQUEUE_H */ diff --git a/ext/openssl/windows/x64/include/openssl/rand.h b/ext/openssl/windows/x64/include/openssl/rand.h deleted file mode 100644 index 2553afda..00000000 --- a/ext/openssl/windows/x64/include/openssl/rand.h +++ /dev/null @@ -1,150 +0,0 @@ -/* crypto/rand/rand.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RAND_H -# define HEADER_RAND_H - -# include -# include -# include - -# if defined(OPENSSL_SYS_WINDOWS) -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if defined(OPENSSL_FIPS) -# define FIPS_RAND_SIZE_T size_t -# endif - -/* Already defined in ossl_typ.h */ -/* typedef struct rand_meth_st RAND_METHOD; */ - -struct rand_meth_st { - void (*seed) (const void *buf, int num); - int (*bytes) (unsigned char *buf, int num); - void (*cleanup) (void); - void (*add) (const void *buf, int num, double entropy); - int (*pseudorand) (unsigned char *buf, int num); - int (*status) (void); -}; - -# ifdef BN_DEBUG -extern int rand_predictable; -# endif - -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif -RAND_METHOD *RAND_SSLeay(void); -void RAND_cleanup(void); -int RAND_bytes(unsigned char *buf, int num); -int RAND_pseudo_bytes(unsigned char *buf, int num); -void RAND_seed(const void *buf, int num); -void RAND_add(const void *buf, int num, double entropy); -int RAND_load_file(const char *file, long max_bytes); -int RAND_write_file(const char *file); -const char *RAND_file_name(char *file, size_t num); -int RAND_status(void); -int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); -int RAND_egd(const char *path); -int RAND_egd_bytes(const char *path, int bytes); -int RAND_poll(void); - -# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) - -void RAND_screen(void); -int RAND_event(UINT, WPARAM, LPARAM); - -# endif - -# ifdef OPENSSL_FIPS -void RAND_set_fips_drbg_type(int type, int flags); -int RAND_init_fips(void); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_RAND_strings(void); - -/* Error codes for the RAND functions. */ - -/* Function codes. */ -# define RAND_F_RAND_GET_RAND_METHOD 101 -# define RAND_F_RAND_INIT_FIPS 102 -# define RAND_F_SSLEAY_RAND_BYTES 100 - -/* Reason codes. */ -# define RAND_R_DUAL_EC_DRBG_DISABLED 104 -# define RAND_R_ERROR_INITIALISING_DRBG 102 -# define RAND_R_ERROR_INSTANTIATING_DRBG 103 -# define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 -# define RAND_R_PRNG_NOT_SEEDED 100 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/rc2.h b/ext/openssl/windows/x64/include/openssl/rc2.h deleted file mode 100644 index 29d02d73..00000000 --- a/ext/openssl/windows/x64/include/openssl/rc2.h +++ /dev/null @@ -1,103 +0,0 @@ -/* crypto/rc2/rc2.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RC2_H -# define HEADER_RC2_H - -# include /* OPENSSL_NO_RC2, RC2_INT */ -# ifdef OPENSSL_NO_RC2 -# error RC2 is disabled. -# endif - -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc2_key_st { - RC2_INT data[64]; -} RC2_KEY; - -# ifdef OPENSSL_FIPS -void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, - int bits); -# endif -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/rc4.h b/ext/openssl/windows/x64/include/openssl/rc4.h deleted file mode 100644 index 39162b16..00000000 --- a/ext/openssl/windows/x64/include/openssl/rc4.h +++ /dev/null @@ -1,88 +0,0 @@ -/* crypto/rc4/rc4.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RC4_H -# define HEADER_RC4_H - -# include /* OPENSSL_NO_RC4, RC4_INT */ -# ifdef OPENSSL_NO_RC4 -# error RC4 is disabled. -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc4_key_st { - RC4_INT x, y; - RC4_INT data[256]; -} RC4_KEY; - -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ripemd.h b/ext/openssl/windows/x64/include/openssl/ripemd.h deleted file mode 100644 index b88ef25e..00000000 --- a/ext/openssl/windows/x64/include/openssl/ripemd.h +++ /dev/null @@ -1,105 +0,0 @@ -/* crypto/ripemd/ripemd.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_NO_RIPEMD -# error RIPEMD is disabled. -# endif - -# if defined(__LP32__) -# define RIPEMD160_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define RIPEMD160_LONG unsigned long -# define RIPEMD160_LONG_LOG2 3 -# else -# define RIPEMD160_LONG unsigned int -# endif - -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 - -typedef struct RIPEMD160state_st { - RIPEMD160_LONG A, B, C, D, E; - RIPEMD160_LONG Nl, Nh; - RIPEMD160_LONG data[RIPEMD160_LBLOCK]; - unsigned int num; -} RIPEMD160_CTX; - -# ifdef OPENSSL_FIPS -int private_RIPEMD160_Init(RIPEMD160_CTX *c); -# endif -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/rsa.h b/ext/openssl/windows/x64/include/openssl/rsa.h deleted file mode 100644 index d2ee3740..00000000 --- a/ext/openssl/windows/x64/include/openssl/rsa.h +++ /dev/null @@ -1,664 +0,0 @@ -/* crypto/rsa/rsa.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RSA_H -# define HEADER_RSA_H - -# include - -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif - -# ifdef OPENSSL_NO_RSA -# error RSA is disabled. -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Declared already in ossl_typ.h */ -/* typedef struct rsa_st RSA; */ -/* typedef struct rsa_meth_st RSA_METHOD; */ - -struct rsa_meth_st { - const char *name; - int (*rsa_pub_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - int (*rsa_pub_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - int (*rsa_priv_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - int (*rsa_priv_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); - /* Can be null */ - int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); - /* Can be null */ - int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); - /* called at new */ - int (*init) (RSA *rsa); - /* called at free */ - int (*finish) (RSA *rsa); - /* RSA_METHOD_FLAG_* things */ - int flags; - /* may be needed! */ - char *app_data; - /* - * New sign and verify functions: some libraries don't allow arbitrary - * data to be signed/verified: this allows them to be used. Note: for - * this to work the RSA_public_decrypt() and RSA_private_encrypt() should - * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note: - * for backwards compatibility this functionality is only enabled if the - * RSA_FLAG_SIGN_VER option is set in 'flags'. - */ - int (*rsa_sign) (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); - int (*rsa_verify) (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); - /* - * If this callback is NULL, the builtin software RSA key-gen will be - * used. This is for behavioural compatibility whilst the code gets - * rewired, but one day it would be nice to assume there are no such - * things as "builtin software" implementations. - */ - int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); -}; - -struct rsa_st { - /* - * The first parameter is used to pickup errors where this is passed - * instead of aEVP_PKEY, it is set to 0 - */ - int pad; - long version; - const RSA_METHOD *meth; - /* functional reference if 'meth' is ENGINE-provided */ - ENGINE *engine; - BIGNUM *n; - BIGNUM *e; - BIGNUM *d; - BIGNUM *p; - BIGNUM *q; - BIGNUM *dmp1; - BIGNUM *dmq1; - BIGNUM *iqmp; - /* be careful using this if the RSA structure is shared */ - CRYPTO_EX_DATA ex_data; - int references; - int flags; - /* Used to cache montgomery values */ - BN_MONT_CTX *_method_mod_n; - BN_MONT_CTX *_method_mod_p; - BN_MONT_CTX *_method_mod_q; - /* - * all BIGNUM values are actually in the following data, if it is not - * NULL - */ - char *bignum_data; - BN_BLINDING *blinding; - BN_BLINDING *mt_blinding; -}; - -# ifndef OPENSSL_RSA_MAX_MODULUS_BITS -# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 -# endif - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - -# define RSA_3 0x3L -# define RSA_F4 0x10001L - -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 -/* - * This flag means the private key operations will be handled by rsa_mod_exp - * and that they do not depend on the private key components being present: - * for example a key stored in external hardware. Without this flag - * bn_mod_exp gets called when private key components are absent. - */ -# define RSA_FLAG_EXT_PKEY 0x0020 - -/* - * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify - * functions. - */ -# define RSA_FLAG_SIGN_VER 0x0040 - -/* - * new with 0.9.6j and 0.9.7b; the built-in - * RSA implementation now uses blinding by - * default (ignoring RSA_FLAG_BLINDING), - * but other engines might not need it - */ -# define RSA_FLAG_NO_BLINDING 0x0080 -/* - * new with 0.9.8f; the built-in RSA - * implementation now uses constant time - * operations by default in private key operations, - * e.g., constant time modular exponentiation, - * modular inverse without leaking branches, - * division without leaking branches. This - * flag disables these constant time - * operations and results in faster RSA - * private key operations. - */ -# define RSA_FLAG_NO_CONSTTIME 0x0100 -# ifdef OPENSSL_USE_DEPRECATED -/* deprecated name for the flag*/ -/* - * new with 0.9.7h; the built-in RSA - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * faster variable sliding window method to - * be used for all exponents. - */ -# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME -# endif - -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ - pad, NULL) - -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \ - EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) - -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ - len, NULL) - -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \ - 0, plen) - -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l) - -# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) - -# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) - -# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) - -# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) - -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 - -# define RSA_PKCS1_PADDING_SIZE 11 - -# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) -# define RSA_get_app_data(s) RSA_get_ex_data(s,0) - -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_size(const RSA *rsa); - -/* Deprecated version */ -# ifndef OPENSSL_NO_DEPRECATED -RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), void *cb_arg); -# endif /* !defined(OPENSSL_NO_DEPRECATED) */ - -/* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); - -int RSA_check_key(const RSA *); - /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); -/* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); - -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); - -/* This function needs the memory locking malloc callbacks to be installed */ -int RSA_memory_lock(RSA *r); - -/* these are the actual SSLeay RSA functions */ -const RSA_METHOD *RSA_PKCS1_SSLeay(void); - -const RSA_METHOD *RSA_null_method(void); - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - -typedef struct rsa_pss_params_st { - X509_ALGOR *hashAlgorithm; - X509_ALGOR *maskGenAlgorithm; - ASN1_INTEGER *saltLength; - ASN1_INTEGER *trailerField; -} RSA_PSS_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) - -typedef struct rsa_oaep_params_st { - X509_ALGOR *hashFunc; - X509_ALGOR *maskGenFunc; - X509_ALGOR *pSourceFunc; -} RSA_OAEP_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) - -# ifndef OPENSSL_NO_FP_API -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif - -# ifndef OPENSSL_NO_BIO -int RSA_print(BIO *bp, const RSA *r, int offset); -# endif - -# ifndef OPENSSL_NO_RC4 -int i2d_RSA_NET(const RSA *a, unsigned char **pp, - int (*cb) (char *buf, int len, const char *prompt, - int verify), int sgckey); -RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, - int (*cb) (char *buf, int len, const char *prompt, - int verify), int sgckey); - -int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, - int (*cb) (char *buf, int len, const char *prompt, - int verify)); -RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, - int (*cb) (char *buf, int len, const char *prompt, - int verify)); -# endif - -/* - * The following 2 functions sign and verify a X509_SIG ASN1 object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); - -/* - * The following 2 function sign and verify a ASN1_OCTET_STRING object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign_ASN1_OCTET_STRING(int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); - -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); - -int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); -int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, - const unsigned char *p, int pl); -int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len, - const unsigned char *p, int pl); -int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - const unsigned char *param, int plen, - const EVP_MD *md, const EVP_MD *mgf1md); -int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); - -int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const unsigned char *EM, - int sLen); -int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, const EVP_MD *Hash, - int sLen); - -int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - const unsigned char *EM, int sLen); - -int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - int sLen); - -int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); - -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); - -/* - * If this flag is set the RSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define RSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 -/* - * Application has decided PRNG is good enough to generate a key: don't - * check. - */ -# define RSA_FLAG_CHECKED 0x0800 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_RSA_strings(void); - -/* Error codes for the RSA functions. */ - -/* Function codes. */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_DO_RSA_PRINT 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_MEMORY_LOCK 100 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 154 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 157 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CMS_DECRYPT 158 -# define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_GENERATE_KEY 105 -# define RSA_F_RSA_GENERATE_KEY_EX 155 -# define RSA_F_RSA_ITEM_VERIFY 156 -# define RSA_F_RSA_MEMORY_LOCK 130 -# define RSA_F_RSA_MGF1_TO_MD 159 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_MOD_EXP 131 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 160 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 161 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIVATE_DECRYPT 150 -# define RSA_F_RSA_PRIVATE_ENCRYPT 151 -# define RSA_F_RSA_PRIV_DECODE 137 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_TO_CTX 162 -# define RSA_F_RSA_PUBLIC_DECRYPT 152 -# define RSA_F_RSA_PUBLIC_ENCRYPT 153 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS 126 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 149 - -/* Reason codes. */ -# define RSA_R_ALGORITHM_MISMATCH 100 -# define RSA_R_BAD_E_VALUE 101 -# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 -# define RSA_R_BAD_PAD_BYTE_COUNT 103 -# define RSA_R_BAD_SIGNATURE 104 -# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 -# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 -# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 -# define RSA_R_DATA_TOO_LARGE 109 -# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 -# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 -# define RSA_R_DATA_TOO_SMALL 111 -# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 -# define RSA_R_DIGEST_DOES_NOT_MATCH 166 -# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 -# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 -# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 -# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 -# define RSA_R_FIRST_OCTET_INVALID 133 -# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 -# define RSA_R_INVALID_DIGEST 160 -# define RSA_R_INVALID_DIGEST_LENGTH 143 -# define RSA_R_INVALID_HEADER 137 -# define RSA_R_INVALID_KEYBITS 145 -# define RSA_R_INVALID_LABEL 161 -# define RSA_R_INVALID_MESSAGE_LENGTH 131 -# define RSA_R_INVALID_MGF1_MD 156 -# define RSA_R_INVALID_OAEP_PARAMETERS 162 -# define RSA_R_INVALID_PADDING 138 -# define RSA_R_INVALID_PADDING_MODE 141 -# define RSA_R_INVALID_PSS_PARAMETERS 149 -# define RSA_R_INVALID_PSS_SALTLEN 146 -# define RSA_R_INVALID_SALT_LENGTH 150 -# define RSA_R_INVALID_TRAILER 139 -# define RSA_R_INVALID_X931_DIGEST 142 -# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 -# define RSA_R_KEY_SIZE_TOO_SMALL 120 -# define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MODULUS_TOO_LARGE 105 -# define RSA_R_NON_FIPS_RSA_METHOD 157 -# define RSA_R_NO_PUBLIC_EXPONENT 140 -# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 -# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 -# define RSA_R_OAEP_DECODING_ERROR 121 -# define RSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE 158 -# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 -# define RSA_R_PADDING_CHECK_FAILED 114 -# define RSA_R_PKCS_DECODING_ERROR 159 -# define RSA_R_P_NOT_PRIME 128 -# define RSA_R_Q_NOT_PRIME 129 -# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 -# define RSA_R_SLEN_CHECK_FAILED 136 -# define RSA_R_SLEN_RECOVERY_FAILED 135 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 163 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNKNOWN_PSS_DIGEST 152 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 164 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 165 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/safestack.h b/ext/openssl/windows/x64/include/openssl/safestack.h deleted file mode 100644 index 1d4f87ea..00000000 --- a/ext/openssl/windows/x64/include/openssl/safestack.h +++ /dev/null @@ -1,2672 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef CHECKED_PTR_OF -# define CHECKED_PTR_OF(type, p) \ - ((void*) (1 ? p : (type*)0)) -# endif - -/* - * In C++ we get problems because an explicit cast is needed from (void *) we - * use CHECKED_STACK_OF to ensure the correct type is passed in the macros - * below. - */ - -# define CHECKED_STACK_OF(type, p) \ - ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) - -# define CHECKED_SK_COPY_FUNC(type, p) \ - ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0))) - -# define CHECKED_SK_FREE_FUNC(type, p) \ - ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) - -# define CHECKED_SK_CMP_FUNC(type, p) \ - ((int (*)(const void *, const void *)) \ - ((1 ? p : (int (*)(const type * const *, const type * const *))0))) - -# define STACK_OF(type) struct stack_st_##type -# define PREDECLARE_STACK_OF(type) STACK_OF(type); - -# define DECLARE_STACK_OF(type) \ -STACK_OF(type) \ - { \ - _STACK stack; \ - }; -# define DECLARE_SPECIAL_STACK_OF(type, type2) \ -STACK_OF(type) \ - { \ - _STACK stack; \ - }; - -/* nada (obsolete in new safestack approach)*/ -# define IMPLEMENT_STACK_OF(type) - -/*- - * Strings are special: normally an lhash entry will point to a single - * (somewhat) mutable object. In the case of strings: - * - * a) Instead of a single char, there is an array of chars, NUL-terminated. - * b) The string may have be immutable. - * - * So, they need their own declarations. Especially important for - * type-checking tools, such as Deputy. - * - * In practice, however, it appears to be hard to have a const - * string. For now, I'm settling for dealing with the fact it is a - * string at all. - */ -typedef char *OPENSSL_STRING; - -typedef const char *OPENSSL_CSTRING; - -/* - * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but - * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned - * above, instead of a single char each entry is a NUL-terminated array of - * chars. So, we have to implement STRING specially for STACK_OF. This is - * dealt with in the autogenerated macros below. - */ - -DECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char) - -/* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. - * These should also be distinguished from "normal" stacks. - */ -typedef void *OPENSSL_BLOCK; -DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) - -/* - * SKM_sk_... stack macros are internal to safestack.h: never use them - * directly, use sk__... instead - */ -# define SKM_sk_new(type, cmp) \ - ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp))) -# define SKM_sk_new_null(type) \ - ((STACK_OF(type) *)sk_new_null()) -# define SKM_sk_free(type, st) \ - sk_free(CHECKED_STACK_OF(type, st)) -# define SKM_sk_num(type, st) \ - sk_num(CHECKED_STACK_OF(type, st)) -# define SKM_sk_value(type, st,i) \ - ((type *)sk_value(CHECKED_STACK_OF(type, st), i)) -# define SKM_sk_set(type, st,i,val) \ - sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val)) -# define SKM_sk_zero(type, st) \ - sk_zero(CHECKED_STACK_OF(type, st)) -# define SKM_sk_push(type, st, val) \ - sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) -# define SKM_sk_unshift(type, st, val) \ - sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) -# define SKM_sk_find(type, st, val) \ - sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) -# define SKM_sk_find_ex(type, st, val) \ - sk_find_ex(CHECKED_STACK_OF(type, st), \ - CHECKED_PTR_OF(type, val)) -# define SKM_sk_delete(type, st, i) \ - (type *)sk_delete(CHECKED_STACK_OF(type, st), i) -# define SKM_sk_delete_ptr(type, st, ptr) \ - (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr)) -# define SKM_sk_insert(type, st,val, i) \ - sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i) -# define SKM_sk_set_cmp_func(type, st, cmp) \ - ((int (*)(const type * const *,const type * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp))) -# define SKM_sk_dup(type, st) \ - (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st)) -# define SKM_sk_pop_free(type, st, free_func) \ - sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func)) -# define SKM_sk_deep_copy(type, st, copy_func, free_func) \ - (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func)) -# define SKM_sk_shift(type, st) \ - (type *)sk_shift(CHECKED_STACK_OF(type, st)) -# define SKM_sk_pop(type, st) \ - (type *)sk_pop(CHECKED_STACK_OF(type, st)) -# define SKM_sk_sort(type, st) \ - sk_sort(CHECKED_STACK_OF(type, st)) -# define SKM_sk_is_sorted(type, st) \ - sk_is_sorted(CHECKED_STACK_OF(type, st)) -# define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - (STACK_OF(type) *)d2i_ASN1_SET( \ - (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \ - pp, length, \ - CHECKED_D2I_OF(type, d2i_func), \ - CHECKED_SK_FREE_FUNC(type, free_func), \ - ex_tag, ex_class) -# define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ - i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \ - CHECKED_I2D_OF(type, i2d_func), \ - ex_tag, ex_class, is_set) -# define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \ - ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \ - CHECKED_I2D_OF(type, i2d_func), buf, len) -# define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \ - (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func)) -# define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \ - (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \ - CHECKED_D2I_OF(type, d2i_func), \ - CHECKED_SK_FREE_FUNC(type, free_func), \ - pass, passlen, oct, seq) -/* - * This block of defines is updated by util/mkstack.pl, please do not touch! - */ -# define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp)) -# define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION) -# define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i)) -# define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val)) -# define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val)) -# define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i)) -# define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr)) -# define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i)) -# define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp)) -# define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st) -# define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func)) -# define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func)) -# define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) -# define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) -# define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp)) -# define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange) -# define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st)) -# define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st)) -# define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i)) -# define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val)) -# define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st)) -# define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val)) -# define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i)) -# define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr)) -# define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i)) -# define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp)) -# define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st) -# define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func)) -# define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func)) -# define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st)) -# define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st)) -# define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st)) -# define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st)) -# define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp)) -# define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) -# define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i)) -# define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val)) -# define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val)) -# define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i)) -# define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr)) -# define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i)) -# define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp)) -# define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st) -# define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func)) -# define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func)) -# define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) -# define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp)) -# define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) -# define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i)) -# define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val)) -# define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val)) -# define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i)) -# define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr)) -# define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i)) -# define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp)) -# define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st) -# define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func)) -# define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func)) -# define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) -# define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) -# define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp)) -# define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) -# define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i)) -# define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val)) -# define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val)) -# define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i)) -# define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr)) -# define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i)) -# define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp)) -# define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st) -# define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func)) -# define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func)) -# define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) -# define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) -# define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp)) -# define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) -# define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i)) -# define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val)) -# define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val)) -# define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i)) -# define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr)) -# define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i)) -# define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp)) -# define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st) -# define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func)) -# define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func)) -# define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) -# define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp)) -# define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) -# define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i)) -# define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val)) -# define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val)) -# define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i)) -# define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr)) -# define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i)) -# define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp)) -# define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st) -# define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func)) -# define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func)) -# define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) -# define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) -# define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp)) -# define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING) -# define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i)) -# define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val)) -# define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val)) -# define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i)) -# define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr)) -# define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i)) -# define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp)) -# define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st) -# define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func)) -# define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func)) -# define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st)) -# define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st)) -# define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp)) -# define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) -# define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i)) -# define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val)) -# define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val)) -# define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i)) -# define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr)) -# define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i)) -# define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp)) -# define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st) -# define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func)) -# define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func)) -# define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) -# define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) -# define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) -# define sk_BIO_new_null() SKM_sk_new_null(BIO) -# define sk_BIO_free(st) SKM_sk_free(BIO, (st)) -# define sk_BIO_num(st) SKM_sk_num(BIO, (st)) -# define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i)) -# define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val)) -# define sk_BIO_zero(st) SKM_sk_zero(BIO, (st)) -# define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val)) -# define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val)) -# define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val)) -# define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val)) -# define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i)) -# define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr)) -# define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i)) -# define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp)) -# define sk_BIO_dup(st) SKM_sk_dup(BIO, st) -# define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func)) -# define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func)) -# define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) -# define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) -# define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) -# define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) -# define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp)) -# define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY) -# define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i)) -# define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val)) -# define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val)) -# define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i)) -# define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr)) -# define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i)) -# define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp)) -# define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st) -# define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func)) -# define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func)) -# define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st)) -# define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp)) -# define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH) -# define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i)) -# define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val)) -# define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val)) -# define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i)) -# define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr)) -# define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i)) -# define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp)) -# define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st) -# define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func)) -# define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func)) -# define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st)) -# define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st)) -# define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp)) -# define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices) -# define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i)) -# define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val)) -# define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val)) -# define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i)) -# define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr)) -# define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i)) -# define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp)) -# define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st) -# define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func)) -# define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func)) -# define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st)) -# define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st)) -# define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp)) -# define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey) -# define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i)) -# define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val)) -# define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val)) -# define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i)) -# define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr)) -# define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i)) -# define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp)) -# define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st) -# define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func)) -# define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func)) -# define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st)) -# define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp)) -# define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo) -# define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i)) -# define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val)) -# define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val)) -# define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i)) -# define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr)) -# define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i)) -# define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp)) -# define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st) -# define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func)) -# define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func)) -# define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st)) -# define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st)) -# define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp)) -# define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice) -# define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i)) -# define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val)) -# define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val)) -# define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i)) -# define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr)) -# define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i)) -# define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp)) -# define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st) -# define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func)) -# define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func)) -# define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st)) -# define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp)) -# define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo) -# define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i)) -# define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val)) -# define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val)) -# define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i)) -# define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr)) -# define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i)) -# define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp)) -# define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st) -# define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func)) -# define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func)) -# define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st)) -# define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st)) -# define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp)) -# define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) -# define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i)) -# define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val)) -# define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val)) -# define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i)) -# define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr)) -# define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i)) -# define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp)) -# define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st) -# define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func)) -# define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func)) -# define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) -# define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) -# define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp)) -# define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) -# define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st)) -# define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st)) -# define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i)) -# define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val)) -# define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st)) -# define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val)) -# define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i)) -# define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr)) -# define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i)) -# define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp)) -# define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st) -# define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func)) -# define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func)) -# define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) -# define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) -# define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) -# define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) -# define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp)) -# define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) -# define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st)) -# define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st)) -# define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i)) -# define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val)) -# define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st)) -# define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val)) -# define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i)) -# define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr)) -# define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i)) -# define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp)) -# define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st) -# define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func)) -# define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func)) -# define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) -# define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) -# define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) -# define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) -# define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) -# define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) -# define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) -# define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) -# define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) -# define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) -# define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) -# define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) -# define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) -# define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func)) -# define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) -# define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) -# define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) -# define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i)) -# define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val)) -# define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val)) -# define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i)) -# define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr)) -# define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i)) -# define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp)) -# define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st) -# define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func)) -# define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func)) -# define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) -# define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) -# define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp)) -# define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) -# define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st)) -# define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st)) -# define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i)) -# define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val)) -# define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st)) -# define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val)) -# define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i)) -# define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr)) -# define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i)) -# define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp)) -# define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st) -# define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func)) -# define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func)) -# define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) -# define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) -# define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) -# define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) -# define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp)) -# define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) -# define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st)) -# define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st)) -# define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i)) -# define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val)) -# define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st)) -# define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val)) -# define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val)) -# define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val)) -# define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val)) -# define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i)) -# define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr)) -# define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i)) -# define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp)) -# define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st) -# define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func)) -# define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func)) -# define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) -# define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) -# define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) -# define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) -# define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp)) -# define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) -# define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i)) -# define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val)) -# define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val)) -# define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i)) -# define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr)) -# define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i)) -# define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp)) -# define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st) -# define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func)) -# define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func)) -# define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) -# define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp)) -# define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID) -# define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i)) -# define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val)) -# define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val)) -# define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i)) -# define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr)) -# define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i)) -# define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp)) -# define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st) -# define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func)) -# define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func)) -# define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st)) -# define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st)) -# define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp)) -# define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD) -# define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st)) -# define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st)) -# define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i)) -# define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val)) -# define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st)) -# define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val)) -# define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val)) -# define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val)) -# define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val)) -# define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i)) -# define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr)) -# define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i)) -# define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp)) -# define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st) -# define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func)) -# define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func)) -# define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st)) -# define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st)) -# define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st)) -# define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st)) -# define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp)) -# define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL) -# define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i)) -# define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val)) -# define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val)) -# define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i)) -# define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr)) -# define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i)) -# define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp)) -# define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st) -# define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func)) -# define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func)) -# define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st)) -# define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp)) -# define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD) -# define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i)) -# define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val)) -# define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i)) -# define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr)) -# define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i)) -# define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp)) -# define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st) -# define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func)) -# define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func)) -# define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp)) -# define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD) -# define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i)) -# define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val)) -# define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val)) -# define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i)) -# define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr)) -# define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i)) -# define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp)) -# define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st) -# define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func)) -# define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func)) -# define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st)) -# define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st)) -# define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp)) -# define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) -# define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i)) -# define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val)) -# define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val)) -# define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i)) -# define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr)) -# define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i)) -# define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp)) -# define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st) -# define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func)) -# define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func)) -# define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) -# define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) -# define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp)) -# define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES) -# define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i)) -# define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val)) -# define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val)) -# define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i)) -# define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr)) -# define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i)) -# define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp)) -# define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st) -# define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func)) -# define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func)) -# define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st)) -# define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st)) -# define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp)) -# define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE) -# define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i)) -# define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val)) -# define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val)) -# define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i)) -# define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr)) -# define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i)) -# define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp)) -# define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st) -# define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func)) -# define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func)) -# define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st)) -# define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st)) -# define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp)) -# define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily) -# define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st)) -# define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st)) -# define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i)) -# define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val)) -# define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st)) -# define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val)) -# define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i)) -# define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr)) -# define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i)) -# define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp)) -# define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st) -# define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func)) -# define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func)) -# define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st)) -# define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st)) -# define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st)) -# define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st)) -# define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp)) -# define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange) -# define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i)) -# define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val)) -# define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val)) -# define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i)) -# define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr)) -# define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i)) -# define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp)) -# define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st) -# define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func)) -# define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func)) -# define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st)) -# define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st)) -# define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp)) -# define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) -# define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i)) -# define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val)) -# define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val)) -# define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i)) -# define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr)) -# define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i)) -# define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp)) -# define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st) -# define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func)) -# define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func)) -# define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) -# define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) -# define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp)) -# define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) -# define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i)) -# define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val)) -# define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val)) -# define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i)) -# define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr)) -# define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i)) -# define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp)) -# define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st) -# define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func)) -# define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func)) -# define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) -# define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp)) -# define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) -# define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i)) -# define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val)) -# define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val)) -# define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i)) -# define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr)) -# define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i)) -# define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp)) -# define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st) -# define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func)) -# define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func)) -# define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) -# define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp)) -# define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) -# define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i)) -# define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val)) -# define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val)) -# define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i)) -# define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr)) -# define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i)) -# define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp)) -# define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st) -# define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func)) -# define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func)) -# define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) -# define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) -# define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp)) -# define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) -# define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i)) -# define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val)) -# define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val)) -# define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i)) -# define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr)) -# define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i)) -# define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp)) -# define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st) -# define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func)) -# define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func)) -# define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) -# define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp)) -# define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) -# define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i)) -# define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val)) -# define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val)) -# define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i)) -# define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr)) -# define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i)) -# define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp)) -# define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st) -# define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func)) -# define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func)) -# define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) -# define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) -# define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp)) -# define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) -# define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i)) -# define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val)) -# define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val)) -# define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i)) -# define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr)) -# define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i)) -# define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp)) -# define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st) -# define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func)) -# define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func)) -# define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) -# define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) -# define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp)) -# define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) -# define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i)) -# define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val)) -# define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val)) -# define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i)) -# define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr)) -# define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i)) -# define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp)) -# define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st) -# define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func)) -# define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func)) -# define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) -# define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) -# define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp)) -# define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA) -# define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i)) -# define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val)) -# define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val)) -# define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i)) -# define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr)) -# define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i)) -# define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp)) -# define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st) -# define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func)) -# define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func)) -# define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st)) -# define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st)) -# define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp)) -# define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) -# define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st)) -# define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st)) -# define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i)) -# define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val)) -# define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st)) -# define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val)) -# define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i)) -# define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr)) -# define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i)) -# define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp)) -# define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st) -# define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func)) -# define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func)) -# define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) -# define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) -# define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) -# define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) -# define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp)) -# define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) -# define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st)) -# define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st)) -# define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i)) -# define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val)) -# define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st)) -# define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val)) -# define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i)) -# define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr)) -# define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i)) -# define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp)) -# define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st) -# define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func)) -# define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func)) -# define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) -# define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) -# define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) -# define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) -# define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp)) -# define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) -# define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i)) -# define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val)) -# define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val)) -# define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i)) -# define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr)) -# define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i)) -# define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp)) -# define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st) -# define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func)) -# define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func)) -# define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) -# define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) -# define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp)) -# define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) -# define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i)) -# define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val)) -# define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val)) -# define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i)) -# define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr)) -# define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i)) -# define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp)) -# define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st) -# define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func)) -# define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func)) -# define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) -# define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) -# define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp)) -# define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) -# define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i)) -# define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val)) -# define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val)) -# define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i)) -# define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr)) -# define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i)) -# define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp)) -# define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st) -# define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func)) -# define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func)) -# define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) -# define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) -# define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp)) -# define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID) -# define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i)) -# define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val)) -# define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val)) -# define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i)) -# define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr)) -# define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i)) -# define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp)) -# define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st) -# define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func)) -# define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func)) -# define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st)) -# define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st)) -# define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp)) -# define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) -# define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i)) -# define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val)) -# define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val)) -# define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i)) -# define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr)) -# define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i)) -# define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp)) -# define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st) -# define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func)) -# define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func)) -# define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) -# define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) -# define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp)) -# define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) -# define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i)) -# define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val)) -# define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val)) -# define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i)) -# define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr)) -# define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i)) -# define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp)) -# define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st) -# define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func)) -# define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func)) -# define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) -# define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) -# define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp)) -# define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) -# define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st)) -# define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st)) -# define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i)) -# define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val)) -# define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st)) -# define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val)) -# define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val)) -# define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val)) -# define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val)) -# define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i)) -# define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr)) -# define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i)) -# define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp)) -# define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st) -# define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func)) -# define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func)) -# define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) -# define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) -# define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) -# define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) -# define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp)) -# define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) -# define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i)) -# define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val)) -# define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val)) -# define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i)) -# define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr)) -# define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i)) -# define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp)) -# define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st) -# define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func)) -# define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func)) -# define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp)) -# define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) -# define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i)) -# define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val)) -# define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val)) -# define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i)) -# define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr)) -# define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i)) -# define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp)) -# define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st) -# define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func)) -# define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func)) -# define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) -# define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) -# define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp)) -# define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) -# define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st)) -# define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st)) -# define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i)) -# define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val)) -# define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st)) -# define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val)) -# define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i)) -# define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr)) -# define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i)) -# define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp)) -# define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st) -# define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func)) -# define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func)) -# define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) -# define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) -# define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) -# define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) -# define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp)) -# define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) -# define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i)) -# define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val)) -# define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val)) -# define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i)) -# define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr)) -# define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i)) -# define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp)) -# define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st) -# define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func)) -# define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func)) -# define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) -# define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) -# define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp)) -# define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING) -# define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i)) -# define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val)) -# define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val)) -# define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i)) -# define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr)) -# define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i)) -# define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp)) -# define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st) -# define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func)) -# define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func)) -# define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st)) -# define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st)) -# define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp)) -# define sk_SCT_new_null() SKM_sk_new_null(SCT) -# define sk_SCT_free(st) SKM_sk_free(SCT, (st)) -# define sk_SCT_num(st) SKM_sk_num(SCT, (st)) -# define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i)) -# define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val)) -# define sk_SCT_zero(st) SKM_sk_zero(SCT, (st)) -# define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val)) -# define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val)) -# define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val)) -# define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val)) -# define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i)) -# define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr)) -# define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i)) -# define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp)) -# define sk_SCT_dup(st) SKM_sk_dup(SCT, st) -# define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func)) -# define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func)) -# define sk_SCT_shift(st) SKM_sk_shift(SCT, (st)) -# define sk_SCT_pop(st) SKM_sk_pop(SCT, (st)) -# define sk_SCT_sort(st) SKM_sk_sort(SCT, (st)) -# define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st)) -# define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp)) -# define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN) -# define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st)) -# define sk_SRP_gN_num(st) SKM_sk_num(SRP_gN, (st)) -# define sk_SRP_gN_value(st, i) SKM_sk_value(SRP_gN, (st), (i)) -# define sk_SRP_gN_set(st, i, val) SKM_sk_set(SRP_gN, (st), (i), (val)) -# define sk_SRP_gN_zero(st) SKM_sk_zero(SRP_gN, (st)) -# define sk_SRP_gN_push(st, val) SKM_sk_push(SRP_gN, (st), (val)) -# define sk_SRP_gN_unshift(st, val) SKM_sk_unshift(SRP_gN, (st), (val)) -# define sk_SRP_gN_find(st, val) SKM_sk_find(SRP_gN, (st), (val)) -# define sk_SRP_gN_find_ex(st, val) SKM_sk_find_ex(SRP_gN, (st), (val)) -# define sk_SRP_gN_delete(st, i) SKM_sk_delete(SRP_gN, (st), (i)) -# define sk_SRP_gN_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN, (st), (ptr)) -# define sk_SRP_gN_insert(st, val, i) SKM_sk_insert(SRP_gN, (st), (val), (i)) -# define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp)) -# define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st) -# define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func)) -# define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func)) -# define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st)) -# define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st)) -# define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st)) -# define sk_SRP_gN_is_sorted(st) SKM_sk_is_sorted(SRP_gN, (st)) -# define sk_SRP_gN_cache_new(cmp) SKM_sk_new(SRP_gN_cache, (cmp)) -# define sk_SRP_gN_cache_new_null() SKM_sk_new_null(SRP_gN_cache) -# define sk_SRP_gN_cache_free(st) SKM_sk_free(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_num(st) SKM_sk_num(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_value(st, i) SKM_sk_value(SRP_gN_cache, (st), (i)) -# define sk_SRP_gN_cache_set(st, i, val) SKM_sk_set(SRP_gN_cache, (st), (i), (val)) -# define sk_SRP_gN_cache_zero(st) SKM_sk_zero(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_push(st, val) SKM_sk_push(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_unshift(st, val) SKM_sk_unshift(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_find(st, val) SKM_sk_find(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_find_ex(st, val) SKM_sk_find_ex(SRP_gN_cache, (st), (val)) -# define sk_SRP_gN_cache_delete(st, i) SKM_sk_delete(SRP_gN_cache, (st), (i)) -# define sk_SRP_gN_cache_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN_cache, (st), (ptr)) -# define sk_SRP_gN_cache_insert(st, val, i) SKM_sk_insert(SRP_gN_cache, (st), (val), (i)) -# define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp)) -# define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st) -# define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func)) -# define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func)) -# define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st)) -# define sk_SRP_gN_cache_is_sorted(st) SKM_sk_is_sorted(SRP_gN_cache, (st)) -# define sk_SRP_user_pwd_new(cmp) SKM_sk_new(SRP_user_pwd, (cmp)) -# define sk_SRP_user_pwd_new_null() SKM_sk_new_null(SRP_user_pwd) -# define sk_SRP_user_pwd_free(st) SKM_sk_free(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_num(st) SKM_sk_num(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_value(st, i) SKM_sk_value(SRP_user_pwd, (st), (i)) -# define sk_SRP_user_pwd_set(st, i, val) SKM_sk_set(SRP_user_pwd, (st), (i), (val)) -# define sk_SRP_user_pwd_zero(st) SKM_sk_zero(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_push(st, val) SKM_sk_push(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_unshift(st, val) SKM_sk_unshift(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_find(st, val) SKM_sk_find(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_find_ex(st, val) SKM_sk_find_ex(SRP_user_pwd, (st), (val)) -# define sk_SRP_user_pwd_delete(st, i) SKM_sk_delete(SRP_user_pwd, (st), (i)) -# define sk_SRP_user_pwd_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_user_pwd, (st), (ptr)) -# define sk_SRP_user_pwd_insert(st, val, i) SKM_sk_insert(SRP_user_pwd, (st), (val), (i)) -# define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp)) -# define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st) -# define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func)) -# define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func)) -# define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st)) -# define sk_SRP_user_pwd_is_sorted(st) SKM_sk_is_sorted(SRP_user_pwd, (st)) -# define sk_SRTP_PROTECTION_PROFILE_new(cmp) SKM_sk_new(SRTP_PROTECTION_PROFILE, (cmp)) -# define sk_SRTP_PROTECTION_PROFILE_new_null() SKM_sk_new_null(SRTP_PROTECTION_PROFILE) -# define sk_SRTP_PROTECTION_PROFILE_free(st) SKM_sk_free(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_num(st) SKM_sk_num(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_value(st, i) SKM_sk_value(SRTP_PROTECTION_PROFILE, (st), (i)) -# define sk_SRTP_PROTECTION_PROFILE_set(st, i, val) SKM_sk_set(SRTP_PROTECTION_PROFILE, (st), (i), (val)) -# define sk_SRTP_PROTECTION_PROFILE_zero(st) SKM_sk_zero(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_push(st, val) SKM_sk_push(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_unshift(st, val) SKM_sk_unshift(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_find(st, val) SKM_sk_find(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_find_ex(st, val) SKM_sk_find_ex(SRTP_PROTECTION_PROFILE, (st), (val)) -# define sk_SRTP_PROTECTION_PROFILE_delete(st, i) SKM_sk_delete(SRTP_PROTECTION_PROFILE, (st), (i)) -# define sk_SRTP_PROTECTION_PROFILE_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRTP_PROTECTION_PROFILE, (st), (ptr)) -# define sk_SRTP_PROTECTION_PROFILE_insert(st, val, i) SKM_sk_insert(SRTP_PROTECTION_PROFILE, (st), (val), (i)) -# define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp)) -# define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st) -# define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func)) -# define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func)) -# define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SRTP_PROTECTION_PROFILE_is_sorted(st) SKM_sk_is_sorted(SRTP_PROTECTION_PROFILE, (st)) -# define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp)) -# define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) -# define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i)) -# define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val)) -# define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val)) -# define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i)) -# define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr)) -# define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i)) -# define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp)) -# define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st) -# define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func)) -# define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func)) -# define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) -# define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) -# define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp)) -# define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) -# define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st)) -# define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st)) -# define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i)) -# define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val)) -# define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st)) -# define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val)) -# define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i)) -# define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr)) -# define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i)) -# define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp)) -# define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st) -# define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func)) -# define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func)) -# define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) -# define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) -# define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) -# define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp)) -# define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY) -# define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i)) -# define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val)) -# define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i)) -# define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr)) -# define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i)) -# define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp)) -# define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st) -# define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func)) -# define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func)) -# define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st)) -# define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp)) -# define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO) -# define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i)) -# define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val)) -# define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val)) -# define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i)) -# define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr)) -# define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i)) -# define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp)) -# define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st) -# define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func)) -# define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func)) -# define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st)) -# define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st)) -# define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp)) -# define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT) -# define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i)) -# define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val)) -# define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val)) -# define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i)) -# define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr)) -# define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i)) -# define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp)) -# define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st) -# define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func)) -# define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func)) -# define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st)) -# define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st)) -# define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp)) -# define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) -# define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st)) -# define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st)) -# define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i)) -# define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val)) -# define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st)) -# define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val)) -# define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val)) -# define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val)) -# define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val)) -# define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i)) -# define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr)) -# define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i)) -# define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp)) -# define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st) -# define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func)) -# define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func)) -# define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) -# define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) -# define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) -# define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) -# define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp)) -# define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) -# define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st)) -# define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st)) -# define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i)) -# define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val)) -# define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st)) -# define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val)) -# define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val)) -# define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val)) -# define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val)) -# define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i)) -# define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr)) -# define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i)) -# define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp)) -# define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st) -# define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func)) -# define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func)) -# define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) -# define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) -# define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) -# define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) -# define sk_X509_new(cmp) SKM_sk_new(X509, (cmp)) -# define sk_X509_new_null() SKM_sk_new_null(X509) -# define sk_X509_free(st) SKM_sk_free(X509, (st)) -# define sk_X509_num(st) SKM_sk_num(X509, (st)) -# define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i)) -# define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val)) -# define sk_X509_zero(st) SKM_sk_zero(X509, (st)) -# define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val)) -# define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val)) -# define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val)) -# define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val)) -# define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i)) -# define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr)) -# define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i)) -# define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) -# define sk_X509_dup(st) SKM_sk_dup(X509, st) -# define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func)) -# define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func)) -# define sk_X509_shift(st) SKM_sk_shift(X509, (st)) -# define sk_X509_pop(st) SKM_sk_pop(X509, (st)) -# define sk_X509_sort(st) SKM_sk_sort(X509, (st)) -# define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) -# define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp)) -# define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) -# define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i)) -# define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val)) -# define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val)) -# define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i)) -# define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr)) -# define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i)) -# define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp)) -# define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st) -# define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func)) -# define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func)) -# define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) -# define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) -# define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp)) -# define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) -# define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st)) -# define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st)) -# define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i)) -# define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val)) -# define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st)) -# define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val)) -# define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i)) -# define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr)) -# define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i)) -# define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp)) -# define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st) -# define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func)) -# define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func)) -# define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) -# define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) -# define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) -# define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) -# define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp)) -# define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) -# define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i)) -# define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val)) -# define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val)) -# define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i)) -# define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr)) -# define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i)) -# define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp)) -# define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st) -# define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func)) -# define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func)) -# define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) -# define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) -# define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp)) -# define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) -# define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st)) -# define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st)) -# define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i)) -# define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val)) -# define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st)) -# define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)) -# define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val)) -# define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val)) -# define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val)) -# define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i)) -# define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr)) -# define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i)) -# define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp)) -# define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st) -# define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func)) -# define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func)) -# define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) -# define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) -# define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) -# define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) -# define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp)) -# define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) -# define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i)) -# define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val)) -# define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val)) -# define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i)) -# define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr)) -# define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i)) -# define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp)) -# define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st) -# define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func)) -# define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func)) -# define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) -# define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) -# define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp)) -# define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) -# define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st)) -# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st)) -# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i)) -# define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val)) -# define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st)) -# define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val)) -# define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val)) -# define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val)) -# define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val)) -# define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i)) -# define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr)) -# define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i)) -# define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp)) -# define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st) -# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func)) -# define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func)) -# define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) -# define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) -# define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) -# define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) -# define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp)) -# define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) -# define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i)) -# define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val)) -# define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val)) -# define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i)) -# define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr)) -# define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i)) -# define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp)) -# define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st) -# define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func)) -# define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func)) -# define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) -# define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) -# define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp)) -# define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) -# define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st)) -# define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st)) -# define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i)) -# define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val)) -# define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st)) -# define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val)) -# define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val)) -# define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val)) -# define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val)) -# define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i)) -# define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr)) -# define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i)) -# define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp)) -# define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st) -# define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func)) -# define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func)) -# define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) -# define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) -# define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) -# define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) -# define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp)) -# define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) -# define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i)) -# define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val)) -# define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val)) -# define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i)) -# define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr)) -# define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i)) -# define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp)) -# define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st) -# define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func)) -# define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func)) -# define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) -# define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) -# define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp)) -# define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) -# define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st)) -# define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st)) -# define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i)) -# define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val)) -# define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st)) -# define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val)) -# define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i)) -# define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr)) -# define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i)) -# define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp)) -# define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st) -# define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func)) -# define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func)) -# define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) -# define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) -# define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) -# define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) -# define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp)) -# define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA) -# define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i)) -# define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val)) -# define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val)) -# define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i)) -# define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr)) -# define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i)) -# define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp)) -# define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st) -# define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func)) -# define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func)) -# define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st)) -# define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp)) -# define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE) -# define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i)) -# define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val)) -# define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val)) -# define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i)) -# define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr)) -# define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i)) -# define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp)) -# define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st) -# define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func)) -# define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func)) -# define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st)) -# define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st)) -# define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp)) -# define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) -# define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i)) -# define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val)) -# define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val)) -# define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i)) -# define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr)) -# define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i)) -# define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp)) -# define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st) -# define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func)) -# define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func)) -# define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) -# define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) -# define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp)) -# define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) -# define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st)) -# define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st)) -# define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i)) -# define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val)) -# define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st)) -# define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val)) -# define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i)) -# define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr)) -# define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i)) -# define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp)) -# define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st) -# define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func)) -# define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func)) -# define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) -# define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) -# define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) -# define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) -# define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp)) -# define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) -# define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st)) -# define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st)) -# define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i)) -# define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val)) -# define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st)) -# define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val)) -# define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i)) -# define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr)) -# define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i)) -# define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp)) -# define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st) -# define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func)) -# define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func)) -# define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) -# define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) -# define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) -# define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) -# define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp)) -# define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM) -# define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i)) -# define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val)) -# define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val)) -# define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i)) -# define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr)) -# define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i)) -# define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp)) -# define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st) -# define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func)) -# define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func)) -# define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st)) -# define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st)) -# define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp)) -# define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple) -# define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st)) -# define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st)) -# define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i)) -# define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val)) -# define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st)) -# define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val)) -# define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val)) -# define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val)) -# define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val)) -# define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i)) -# define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr)) -# define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i)) -# define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp)) -# define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st) -# define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func)) -# define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func)) -# define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st)) -# define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st)) -# define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st)) -# define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st)) -# define sk_void_new(cmp) SKM_sk_new(void, (cmp)) -# define sk_void_new_null() SKM_sk_new_null(void) -# define sk_void_free(st) SKM_sk_free(void, (st)) -# define sk_void_num(st) SKM_sk_num(void, (st)) -# define sk_void_value(st, i) SKM_sk_value(void, (st), (i)) -# define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val)) -# define sk_void_zero(st) SKM_sk_zero(void, (st)) -# define sk_void_push(st, val) SKM_sk_push(void, (st), (val)) -# define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val)) -# define sk_void_find(st, val) SKM_sk_find(void, (st), (val)) -# define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val)) -# define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i)) -# define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr)) -# define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i)) -# define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp)) -# define sk_void_dup(st) SKM_sk_dup(void, st) -# define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func)) -# define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func)) -# define sk_void_shift(st) SKM_sk_shift(void, (st)) -# define sk_void_pop(st) SKM_sk_pop(void, (st)) -# define sk_void_sort(st) SKM_sk_sort(void, (st)) -# define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st)) -# define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp))) -# define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null()) -# define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i)) -# define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st) -# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func)) -# define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func))) -# define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i) -# define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st) -# define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st)) -# define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val)) -# define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i)) -# define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr)) -# define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \ - ((int (*)(const char * const *,const char * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp))) -# define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st) -# define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st)) -# define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st)) -# define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st)) -# define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st)) -# define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp))) -# define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null()) -# define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i)) -# define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st) -# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func)) -# define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func))) -# define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i) -# define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st) -# define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val)) -# define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i)) -# define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr)) -# define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp) \ - ((int (*)(const void * const *,const void * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp))) -# define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st) -# define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st)) -# define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st)) -# define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) -# define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null()) -# define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i)) -# define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st) -# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)) -# define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))) -# define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i) -# define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st) -# define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st)) -# define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val)) -# define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i)) -# define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr)) -# define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp) \ - ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \ - sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) -# define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st) -# define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st)) -# define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st)) -# define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st)) -# define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st)) -# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func)) -# define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) -# define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \ - SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) -# define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \ - SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len)) -# define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func)) -# define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \ - SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) -# define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \ - SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) -# define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj) -# define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst) -# define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst) -# define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst) -# define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn) -# define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg) -# define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh) -# define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh) -# define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh) -# define lh_ADDED_OBJ_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ADDED_OBJ,lh,out) -# define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out) -# define lh_ADDED_OBJ_stats_bio(lh,out) \ - LHM_lh_stats_bio(ADDED_OBJ,lh,out) -# define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh) -# define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info) -# define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst) -# define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst) -# define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst) -# define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn) -# define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg) -# define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh) -# define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh) -# define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh) -# define lh_APP_INFO_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(APP_INFO,lh,out) -# define lh_APP_INFO_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(APP_INFO,lh,out) -# define lh_APP_INFO_stats_bio(lh,out) \ - LHM_lh_stats_bio(APP_INFO,lh,out) -# define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh) -# define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value) -# define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst) -# define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst) -# define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst) -# define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn) -# define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg) -# define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh) -# define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh) -# define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh) -# define lh_CONF_VALUE_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(CONF_VALUE,lh,out) -# define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out) -# define lh_CONF_VALUE_stats_bio(lh,out) \ - LHM_lh_stats_bio(CONF_VALUE,lh,out) -# define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh) -# define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile) -# define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst) -# define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst) -# define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst) -# define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn) -# define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg) -# define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh) -# define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh) -# define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh) -# define lh_ENGINE_PILE_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ENGINE_PILE,lh,out) -# define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out) -# define lh_ENGINE_PILE_stats_bio(lh,out) \ - LHM_lh_stats_bio(ENGINE_PILE,lh,out) -# define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh) -# define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state) -# define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst) -# define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst) -# define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst) -# define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn) -# define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg) -# define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh) -# define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh) -# define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh) -# define lh_ERR_STATE_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ERR_STATE,lh,out) -# define lh_ERR_STATE_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out) -# define lh_ERR_STATE_stats_bio(lh,out) \ - LHM_lh_stats_bio(ERR_STATE,lh,out) -# define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh) -# define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data) -# define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst) -# define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst) -# define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst) -# define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn) -# define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg) -# define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh) -# define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh) -# define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh) -# define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out) -# define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out) -# define lh_ERR_STRING_DATA_stats_bio(lh,out) \ - LHM_lh_stats_bio(ERR_STRING_DATA,lh,out) -# define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh) -# define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item) -# define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst) -# define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst) -# define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst) -# define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn) -# define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg) -# define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh) -# define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh) -# define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh) -# define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out) -# define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out) -# define lh_EX_CLASS_ITEM_stats_bio(lh,out) \ - LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out) -# define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh) -# define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function) -# define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst) -# define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst) -# define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst) -# define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn) -# define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg) -# define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh) -# define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh) -# define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh) -# define lh_FUNCTION_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(FUNCTION,lh,out) -# define lh_FUNCTION_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(FUNCTION,lh,out) -# define lh_FUNCTION_stats_bio(lh,out) \ - LHM_lh_stats_bio(FUNCTION,lh,out) -# define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh) -# define lh_MEM_new() LHM_lh_new(MEM,mem) -# define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst) -# define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst) -# define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst) -# define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn) -# define lh_MEM_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg) -# define lh_MEM_error(lh) LHM_lh_error(MEM,lh) -# define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh) -# define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh) -# define lh_MEM_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(MEM,lh,out) -# define lh_MEM_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(MEM,lh,out) -# define lh_MEM_stats_bio(lh,out) \ - LHM_lh_stats_bio(MEM,lh,out) -# define lh_MEM_free(lh) LHM_lh_free(MEM,lh) -# define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name) -# define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst) -# define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst) -# define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst) -# define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn) -# define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg) -# define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh) -# define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh) -# define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh) -# define lh_OBJ_NAME_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(OBJ_NAME,lh,out) -# define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out) -# define lh_OBJ_NAME_stats_bio(lh,out) \ - LHM_lh_stats_bio(OBJ_NAME,lh,out) -# define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh) -# define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring) -# define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst) -# define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst) -# define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst) -# define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn) -# define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg) -# define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out) -# define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out) -# define lh_OPENSSL_CSTRING_stats_bio(lh,out) \ - LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out) -# define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh) -# define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string) -# define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst) -# define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst) -# define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst) -# define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn) -# define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg) -# define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh) -# define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh) -# define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh) -# define lh_OPENSSL_STRING_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out) -# define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out) -# define lh_OPENSSL_STRING_stats_bio(lh,out) \ - LHM_lh_stats_bio(OPENSSL_STRING,lh,out) -# define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh) -# define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session) -# define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst) -# define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst) -# define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst) -# define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn) -# define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \ - LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg) -# define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh) -# define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh) -# define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh) -# define lh_SSL_SESSION_node_stats_bio(lh,out) \ - LHM_lh_node_stats_bio(SSL_SESSION,lh,out) -# define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \ - LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out) -# define lh_SSL_SESSION_stats_bio(lh,out) \ - LHM_lh_stats_bio(SSL_SESSION,lh,out) -# define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh) -#ifdef __cplusplus -} -#endif -#endif /* !defined HEADER_SAFESTACK_H */ diff --git a/ext/openssl/windows/x64/include/openssl/seed.h b/ext/openssl/windows/x64/include/openssl/seed.h deleted file mode 100644 index 8cbf0d92..00000000 --- a/ext/openssl/windows/x64/include/openssl/seed.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Neither the name of author nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -/* ==================================================================== - * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_SEED_H -# define HEADER_SEED_H - -# include -# include -# include - -# ifdef OPENSSL_NO_SEED -# error SEED is disabled. -# endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 -# endif -# endif - -# if !defined(NO_SYS_TYPES_H) -# include -# endif - -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct seed_key_st { -# ifdef SEED_LONG - unsigned long data[32]; -# else - unsigned int data[32]; -# endif -} SEED_KEY_SCHEDULE; - -# ifdef OPENSSL_FIPS -void private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], - SEED_KEY_SCHEDULE *ks); -# endif -void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], - SEED_KEY_SCHEDULE *ks); - -void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); -void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, - const SEED_KEY_SCHEDULE *ks, int enc); -void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, - const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); -void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); -void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); - -#ifdef __cplusplus -} -#endif - -#endif /* HEADER_SEED_H */ diff --git a/ext/openssl/windows/x64/include/openssl/sha.h b/ext/openssl/windows/x64/include/openssl/sha.h deleted file mode 100644 index e5169e4f..00000000 --- a/ext/openssl/windows/x64/include/openssl/sha.h +++ /dev/null @@ -1,214 +0,0 @@ -/* crypto/sha/sha.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SHA_H -# define HEADER_SHA_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) -# error SHA is disabled. -# endif - -# if defined(OPENSSL_FIPS) -# define FIPS_SHA_SIZE_T size_t -# endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! - * ! SHA_LONG_LOG2 has to be defined along. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -# if defined(__LP32__) -# define SHA_LONG unsigned long -# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) -# define SHA_LONG unsigned long -# define SHA_LONG_LOG2 3 -# else -# define SHA_LONG unsigned int -# endif - -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 - -typedef struct SHAstate_st { - SHA_LONG h0, h1, h2, h3, h4; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num; -} SHA_CTX; - -# ifndef OPENSSL_NO_SHA0 -# ifdef OPENSSL_FIPS -int private_SHA_Init(SHA_CTX *c); -# endif -int SHA_Init(SHA_CTX *c); -int SHA_Update(SHA_CTX *c, const void *data, size_t len); -int SHA_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md); -void SHA_Transform(SHA_CTX *c, const unsigned char *data); -# endif -# ifndef OPENSSL_NO_SHA1 -# ifdef OPENSSL_FIPS -int private_SHA1_Init(SHA_CTX *c); -# endif -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); -# endif - -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA224_DIGEST_LENGTH 28 -# define SHA256_DIGEST_LENGTH 32 - -typedef struct SHA256state_st { - SHA_LONG h[8]; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num, md_len; -} SHA256_CTX; - -# ifndef OPENSSL_NO_SHA256 -# ifdef OPENSSL_FIPS -int private_SHA224_Init(SHA256_CTX *c); -int private_SHA256_Init(SHA256_CTX *c); -# endif -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); -# endif - -# define SHA384_DIGEST_LENGTH 48 -# define SHA512_DIGEST_LENGTH 64 - -# ifndef OPENSSL_NO_SHA512 -/* - * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 - * being exactly 64-bit wide. See Implementation Notes in sha512.c - * for further details. - */ -/* - * SHA-512 treats input data as a - * contiguous array of 64 bit - * wide big-endian values. - */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif - -typedef struct SHA512state_st { - SHA_LONG64 h[8]; - SHA_LONG64 Nl, Nh; - union { - SHA_LONG64 d[SHA_LBLOCK]; - unsigned char p[SHA512_CBLOCK]; - } u; - unsigned int num, md_len; -} SHA512_CTX; -# endif - -# ifndef OPENSSL_NO_SHA512 -# ifdef OPENSSL_FIPS -int private_SHA384_Init(SHA512_CTX *c); -int private_SHA512_Init(SHA512_CTX *c); -# endif -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/srp.h b/ext/openssl/windows/x64/include/openssl/srp.h deleted file mode 100644 index 028892a1..00000000 --- a/ext/openssl/windows/x64/include/openssl/srp.h +++ /dev/null @@ -1,179 +0,0 @@ -/* crypto/srp/srp.h */ -/* - * Written by Christophe Renou (christophe.renou@edelweb.fr) with the - * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the - * EdelKey project and contributed to the OpenSSL project 2004. - */ -/* ==================================================================== - * Copyright (c) 2004 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef __SRP_H__ -# define __SRP_H__ - -# ifndef OPENSSL_NO_SRP - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include -# include - -typedef struct SRP_gN_cache_st { - char *b64_bn; - BIGNUM *bn; -} SRP_gN_cache; - - -DECLARE_STACK_OF(SRP_gN_cache) - -typedef struct SRP_user_pwd_st { - /* Owned by us. */ - char *id; - BIGNUM *s; - BIGNUM *v; - /* Not owned by us. */ - const BIGNUM *g; - const BIGNUM *N; - /* Owned by us. */ - char *info; -} SRP_user_pwd; - -DECLARE_STACK_OF(SRP_user_pwd) - -void SRP_user_pwd_free(SRP_user_pwd *user_pwd); - -typedef struct SRP_VBASE_st { - STACK_OF(SRP_user_pwd) *users_pwd; - STACK_OF(SRP_gN_cache) *gN_cache; -/* to simulate a user */ - char *seed_key; - BIGNUM *default_g; - BIGNUM *default_N; -} SRP_VBASE; - -/* - * Structure interne pour retenir les couples N et g - */ -typedef struct SRP_gN_st { - char *id; - BIGNUM *g; - BIGNUM *N; -} SRP_gN; - -DECLARE_STACK_OF(SRP_gN) - -SRP_VBASE *SRP_VBASE_new(char *seed_key); -int SRP_VBASE_free(SRP_VBASE *vb); -int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); - -/* This method ignores the configured seed and fails for an unknown user. */ -SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); -/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ -SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); - -char *SRP_create_verifier(const char *user, const char *pass, char **salt, - char **verifier, const char *N, const char *g); -int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, - BIGNUM **verifier, BIGNUM *N, BIGNUM *g); - -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 - -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 - -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' - -/* see srp.c */ -char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N); -SRP_gN *SRP_get_default_gN(const char *id); - -/* server side .... */ -BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, - BIGNUM *N); -BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v); -int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N); -BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N); - -/* client side .... */ -BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass); -BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g); -BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, - BIGNUM *a, BIGNUM *u); -int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N); - -# define SRP_MINIMAL_N 1024 - -#ifdef __cplusplus -} -#endif - -# endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/srtp.h b/ext/openssl/windows/x64/include/openssl/srtp.h deleted file mode 100644 index 2279c32b..00000000 --- a/ext/openssl/windows/x64/include/openssl/srtp.h +++ /dev/null @@ -1,147 +0,0 @@ -/* ssl/srtp.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* - * DTLS code by Eric Rescorla - * - * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. - */ - -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define SRTP_AES128_CM_SHA1_80 0x0001 -# define SRTP_AES128_CM_SHA1_32 0x0002 -# define SRTP_AES128_F8_SHA1_80 0x0003 -# define SRTP_AES128_F8_SHA1_32 0x0004 -# define SRTP_NULL_SHA1_80 0x0005 -# define SRTP_NULL_SHA1_32 0x0006 - -# ifndef OPENSSL_NO_SRTP - -int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); -int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); - -STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); -SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); - -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ssl.h b/ext/openssl/windows/x64/include/openssl/ssl.h deleted file mode 100644 index 90aeb0ce..00000000 --- a/ext/openssl/windows/x64/include/openssl/ssl.h +++ /dev/null @@ -1,3163 +0,0 @@ -/* ssl/ssl.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - -#ifndef HEADER_SSL_H -# define HEADER_SSL_H - -# include - -# ifndef OPENSSL_NO_COMP -# include -# endif -# ifndef OPENSSL_NO_BIO -# include -# endif -# ifndef OPENSSL_NO_DEPRECATED -# ifndef OPENSSL_NO_X509 -# include -# endif -# include -# include -# include -# endif -# include -# include - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* SSLeay version number for ASN.1 encoding of the session information */ -/*- - * Version 0 - initial version - * Version 1 - added the optional peer certificate - */ -# define SSL_SESSION_ASN1_VERSION 0x0001 - -/* text strings for the ciphers */ -# define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5 -# define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5 -# define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 -# define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5 -# define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 -# define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5 -# define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5 -# define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA -# define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 -# define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA - -/* - * VRS Additional Kerberos5 entries - */ -# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA -# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA -# define SSL_TXT_KRB5_RC4_128_SHA SSL3_TXT_KRB5_RC4_128_SHA -# define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA -# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 -# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 -# define SSL_TXT_KRB5_RC4_128_MD5 SSL3_TXT_KRB5_RC4_128_MD5 -# define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 - -# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA -# define SSL_TXT_KRB5_RC2_40_CBC_SHA SSL3_TXT_KRB5_RC2_40_CBC_SHA -# define SSL_TXT_KRB5_RC4_40_SHA SSL3_TXT_KRB5_RC4_40_SHA -# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 -# define SSL_TXT_KRB5_RC2_40_CBC_MD5 SSL3_TXT_KRB5_RC2_40_CBC_MD5 -# define SSL_TXT_KRB5_RC4_40_MD5 SSL3_TXT_KRB5_RC4_40_MD5 - -# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA -# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 -# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA -# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 -# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA -# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 -# define SSL_MAX_KRB5_PRINCIPAL_LENGTH 256 - -# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 -# define SSL_MAX_SID_CTX_LENGTH 32 - -# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) -# define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 - -/* These are used to specify which ciphers to use and not to use */ - -# define SSL_TXT_EXP40 "EXPORT40" -# define SSL_TXT_EXP56 "EXPORT56" -# define SSL_TXT_LOW "LOW" -# define SSL_TXT_MEDIUM "MEDIUM" -# define SSL_TXT_HIGH "HIGH" -# define SSL_TXT_FIPS "FIPS" - -# define SSL_TXT_kFZA "kFZA"/* unused! */ -# define SSL_TXT_aFZA "aFZA"/* unused! */ -# define SSL_TXT_eFZA "eFZA"/* unused! */ -# define SSL_TXT_FZA "FZA"/* unused! */ - -# define SSL_TXT_aNULL "aNULL" -# define SSL_TXT_eNULL "eNULL" -# define SSL_TXT_NULL "NULL" - -# define SSL_TXT_kRSA "kRSA" -# define SSL_TXT_kDHr "kDHr" -# define SSL_TXT_kDHd "kDHd" -# define SSL_TXT_kDH "kDH" -# define SSL_TXT_kEDH "kEDH" -# define SSL_TXT_kDHE "kDHE"/* alias for kEDH */ -# define SSL_TXT_kKRB5 "kKRB5" -# define SSL_TXT_kECDHr "kECDHr" -# define SSL_TXT_kECDHe "kECDHe" -# define SSL_TXT_kECDH "kECDH" -# define SSL_TXT_kEECDH "kEECDH" -# define SSL_TXT_kECDHE "kECDHE"/* alias for kEECDH */ -# define SSL_TXT_kPSK "kPSK" -# define SSL_TXT_kGOST "kGOST" -# define SSL_TXT_kSRP "kSRP" - -# define SSL_TXT_aRSA "aRSA" -# define SSL_TXT_aDSS "aDSS" -# define SSL_TXT_aDH "aDH" -# define SSL_TXT_aECDH "aECDH" -# define SSL_TXT_aKRB5 "aKRB5" -# define SSL_TXT_aECDSA "aECDSA" -# define SSL_TXT_aPSK "aPSK" -# define SSL_TXT_aGOST94 "aGOST94" -# define SSL_TXT_aGOST01 "aGOST01" -# define SSL_TXT_aGOST "aGOST" -# define SSL_TXT_aSRP "aSRP" - -# define SSL_TXT_DSS "DSS" -# define SSL_TXT_DH "DH" -# define SSL_TXT_EDH "EDH"/* same as "kEDH:-ADH" */ -# define SSL_TXT_DHE "DHE"/* alias for EDH */ -# define SSL_TXT_ADH "ADH" -# define SSL_TXT_RSA "RSA" -# define SSL_TXT_ECDH "ECDH" -# define SSL_TXT_EECDH "EECDH"/* same as "kEECDH:-AECDH" */ -# define SSL_TXT_ECDHE "ECDHE"/* alias for ECDHE" */ -# define SSL_TXT_AECDH "AECDH" -# define SSL_TXT_ECDSA "ECDSA" -# define SSL_TXT_KRB5 "KRB5" -# define SSL_TXT_PSK "PSK" -# define SSL_TXT_SRP "SRP" - -# define SSL_TXT_DES "DES" -# define SSL_TXT_3DES "3DES" -# define SSL_TXT_RC4 "RC4" -# define SSL_TXT_RC2 "RC2" -# define SSL_TXT_IDEA "IDEA" -# define SSL_TXT_SEED "SEED" -# define SSL_TXT_AES128 "AES128" -# define SSL_TXT_AES256 "AES256" -# define SSL_TXT_AES "AES" -# define SSL_TXT_AES_GCM "AESGCM" -# define SSL_TXT_CAMELLIA128 "CAMELLIA128" -# define SSL_TXT_CAMELLIA256 "CAMELLIA256" -# define SSL_TXT_CAMELLIA "CAMELLIA" - -# define SSL_TXT_MD5 "MD5" -# define SSL_TXT_SHA1 "SHA1" -# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ -# define SSL_TXT_GOST94 "GOST94" -# define SSL_TXT_GOST89MAC "GOST89MAC" -# define SSL_TXT_SHA256 "SHA256" -# define SSL_TXT_SHA384 "SHA384" - -# define SSL_TXT_SSLV2 "SSLv2" -# define SSL_TXT_SSLV3 "SSLv3" -# define SSL_TXT_TLSV1 "TLSv1" -# define SSL_TXT_TLSV1_1 "TLSv1.1" -# define SSL_TXT_TLSV1_2 "TLSv1.2" - -# define SSL_TXT_EXP "EXP" -# define SSL_TXT_EXPORT "EXPORT" - -# define SSL_TXT_ALL "ALL" - -/*- - * COMPLEMENTOF* definitions. These identifiers are used to (de-select) - * ciphers normally not being used. - * Example: "RC4" will activate all ciphers using RC4 including ciphers - * without authentication, which would normally disabled by DEFAULT (due - * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" - * will make sure that it is also disabled in the specific selection. - * COMPLEMENTOF* identifiers are portable between version, as adjustments - * to the default cipher setup will also be included here. - * - * COMPLEMENTOFDEFAULT does not experience the same special treatment that - * DEFAULT gets, as only selection is being done and no sorting as needed - * for DEFAULT. - */ -# define SSL_TXT_CMPALL "COMPLEMENTOFALL" -# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" - -/* - * The following cipher list is used by default. It also is substituted when - * an application-defined cipher list string starts with 'DEFAULT'. - */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2" -/* - * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always - * starts with a reasonable order, and all we have to do for DEFAULT is - * throwing out anonymous and unencrypted ciphersuites! (The latter are not - * actually enabled by ALL, but "ALL:RSA" would enable some of them.) - */ - -/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ -# define SSL_SENT_SHUTDOWN 1 -# define SSL_RECEIVED_SHUTDOWN 2 - -#ifdef __cplusplus -} -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2) -# define OPENSSL_NO_SSL2 -# endif - -# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 -# define SSL_FILETYPE_PEM X509_FILETYPE_PEM - -/* - * This is needed to stop compilers complaining about the 'struct ssl_st *' - * function parameters used to prototype callbacks in SSL_CTX. - */ -typedef struct ssl_st *ssl_crock_st; -typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; -typedef struct ssl_method_st SSL_METHOD; -typedef struct ssl_cipher_st SSL_CIPHER; -typedef struct ssl_session_st SSL_SESSION; -typedef struct tls_sigalgs_st TLS_SIGALGS; -typedef struct ssl_conf_ctx_st SSL_CONF_CTX; - -DECLARE_STACK_OF(SSL_CIPHER) - -/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ -typedef struct srtp_protection_profile_st { - const char *name; - unsigned long id; -} SRTP_PROTECTION_PROFILE; - -DECLARE_STACK_OF(SRTP_PROTECTION_PROFILE) - -typedef int (*tls_session_ticket_ext_cb_fn) (SSL *s, - const unsigned char *data, - int len, void *arg); -typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret, - int *secret_len, - STACK_OF(SSL_CIPHER) *peer_ciphers, - SSL_CIPHER **cipher, void *arg); - -# ifndef OPENSSL_NO_TLSEXT - -/* Typedefs for handling custom extensions */ - -typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type, - const unsigned char **out, - size_t *outlen, int *al, void *add_arg); - -typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type, - const unsigned char *out, void *add_arg); - -typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type, - const unsigned char *in, - size_t inlen, int *al, void *parse_arg); - -# endif - -# ifndef OPENSSL_NO_SSL_INTERN - -/* used to hold info on the particular ciphers used */ -struct ssl_cipher_st { - int valid; - const char *name; /* text name */ - unsigned long id; /* id, 4 bytes, first is version */ - /* - * changed in 0.9.9: these four used to be portions of a single value - * 'algorithms' - */ - unsigned long algorithm_mkey; /* key exchange algorithm */ - unsigned long algorithm_auth; /* server authentication */ - unsigned long algorithm_enc; /* symmetric encryption */ - unsigned long algorithm_mac; /* symmetric authentication */ - unsigned long algorithm_ssl; /* (major) protocol version */ - unsigned long algo_strength; /* strength and export flags */ - unsigned long algorithm2; /* Extra flags */ - int strength_bits; /* Number of bits really used */ - int alg_bits; /* Number of bits for algorithm */ -}; - -/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ -struct ssl_method_st { - int version; - int (*ssl_new) (SSL *s); - void (*ssl_clear) (SSL *s); - void (*ssl_free) (SSL *s); - int (*ssl_accept) (SSL *s); - int (*ssl_connect) (SSL *s); - int (*ssl_read) (SSL *s, void *buf, int len); - int (*ssl_peek) (SSL *s, void *buf, int len); - int (*ssl_write) (SSL *s, const void *buf, int len); - int (*ssl_shutdown) (SSL *s); - int (*ssl_renegotiate) (SSL *s); - int (*ssl_renegotiate_check) (SSL *s); - long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long - max, int *ok); - int (*ssl_read_bytes) (SSL *s, int type, unsigned char *buf, int len, - int peek); - int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len); - int (*ssl_dispatch_alert) (SSL *s); - long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg); - long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg); - const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr); - int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr); - int (*ssl_pending) (const SSL *s); - int (*num_ciphers) (void); - const SSL_CIPHER *(*get_cipher) (unsigned ncipher); - const struct ssl_method_st *(*get_ssl_method) (int version); - long (*get_timeout) (void); - struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */ - int (*ssl_version) (void); - long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void)); - long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void)); -}; - -/*- - * Lets make this into an ASN.1 type structure as follows - * SSL_SESSION_ID ::= SEQUENCE { - * version INTEGER, -- structure version number - * SSLversion INTEGER, -- SSL version number - * Cipher OCTET STRING, -- the 3 byte cipher ID - * Session_ID OCTET STRING, -- the Session ID - * Master_key OCTET STRING, -- the master key - * KRB5_principal OCTET STRING -- optional Kerberos principal - * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument - * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time - * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds - * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate - * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context - * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer' - * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension - * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint - * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity - * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket - * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only) - * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method - * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username - * } - * Look in ssl/ssl_asn1.c for more details - * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). - */ -struct ssl_session_st { - int ssl_version; /* what ssl version session info is being - * kept in here? */ - /* only really used in SSLv2 */ - unsigned int key_arg_length; - unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; - int master_key_length; - unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH]; - /* session_id - valid? */ - unsigned int session_id_length; - unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; - /* - * this is used to determine whether the session is being reused in the - * appropriate context. It is up to the application to set this, via - * SSL_new - */ - unsigned int sid_ctx_length; - unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; -# ifndef OPENSSL_NO_KRB5 - unsigned int krb5_client_princ_len; - unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH]; -# endif /* OPENSSL_NO_KRB5 */ -# ifndef OPENSSL_NO_PSK - char *psk_identity_hint; - char *psk_identity; -# endif - /* - * Used to indicate that session resumption is not allowed. Applications - * can also set this bit for a new session via not_resumable_session_cb - * to disable session caching and tickets. - */ - int not_resumable; - /* The cert is the certificate used to establish this connection */ - struct sess_cert_st /* SESS_CERT */ *sess_cert; - /* - * This is the cert for the other end. On clients, it will be the same as - * sess_cert->peer_key->x509 (the latter is not enough as sess_cert is - * not retained in the external representation of sessions, see - * ssl_asn1.c). - */ - X509 *peer; - /* - * when app_verify_callback accepts a session where the peer's - * certificate is not ok, we must remember the error for session reuse: - */ - long verify_result; /* only for servers */ - int references; - long timeout; - long time; - unsigned int compress_meth; /* Need to lookup the method */ - const SSL_CIPHER *cipher; - unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used - * to load the 'cipher' structure */ - STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ - CRYPTO_EX_DATA ex_data; /* application specific data */ - /* - * These are used to make removal of session-ids more efficient and to - * implement a maximum cache size. - */ - struct ssl_session_st *prev, *next; -# ifndef OPENSSL_NO_TLSEXT - char *tlsext_hostname; -# ifndef OPENSSL_NO_EC - size_t tlsext_ecpointformatlist_length; - unsigned char *tlsext_ecpointformatlist; /* peer's list */ - size_t tlsext_ellipticcurvelist_length; - unsigned char *tlsext_ellipticcurvelist; /* peer's list */ -# endif /* OPENSSL_NO_EC */ - /* RFC4507 info */ - unsigned char *tlsext_tick; /* Session ticket */ - size_t tlsext_ticklen; /* Session ticket length */ - long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ -# endif -# ifndef OPENSSL_NO_SRP - char *srp_username; -# endif -}; - -# endif - -# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L -# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L -# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L -# define SSL_OP_TLSEXT_PADDING 0x00000010L -# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L -# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L -# define SSL_OP_TLS_D5_BUG 0x00000100L -# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L - -/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ -# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Refers to ancient SSLREF and SSLv2, retained for compatibility */ -# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 - -/* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. - */ -/* added in 0.9.6e */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. This - * used to be 0x000FFFFFL before 0.9.7. - */ -# define SSL_OP_ALL 0x80000BFFL - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000L -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000L -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000L -/* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000L - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000L -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L -/* If set, always create a new key when using tmp_ecdh parameters */ -# define SSL_OP_SINGLE_ECDH_USE 0x00080000L -/* Does nothing: retained for compatibility */ -# define SSL_OP_SINGLE_DH_USE 0x00100000L -/* Does nothing: retained for compatibiity */ -# define SSL_OP_EPHEMERAL_RSA 0x0 -/* - * Set on servers to choose the cipher according to the server's preferences - */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L - -# define SSL_OP_NO_SSLv2 0x01000000L -# define SSL_OP_NO_SSLv3 0x02000000L -# define SSL_OP_NO_TLSv1 0x04000000L -# define SSL_OP_NO_TLSv1_2 0x08000000L -# define SSL_OP_NO_TLSv1_1 0x10000000L - -# define SSL_OP_NO_DTLSv1 0x04000000L -# define SSL_OP_NO_DTLSv1_2 0x08000000L - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) - -/* - * These next two were never actually used for anything since SSLeay zap so - * we have some more flags. - */ -/* - * The next flag deliberately changes the ciphertest, this is a check for the - * PKCS#1 attack - */ -# define SSL_OP_PKCS1_CHECK_1 0x0 -# define SSL_OP_PKCS1_CHECK_2 0x0 - -# define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L -# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L - -/* - * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success - * when just a single record has been written): - */ -# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L -/* - * Make it possible to retry SSL_write() with changed buffer location (buffer - * contents must stay the same!); this is not the default to avoid the - * misconception that non-blocking SSL_write() behaves like non-blocking - * write(): - */ -# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L -/* - * Never bother the application with retries if the transport is blocking: - */ -# define SSL_MODE_AUTO_RETRY 0x00000004L -/* Don't attempt to automatically build certificate chain */ -# define SSL_MODE_NO_AUTO_CHAIN 0x00000008L -/* - * Save RAM by releasing read and write buffers when they're empty. (SSL3 and - * TLS only.) "Released" buffers are put onto a free-list in the context or - * just freed (depending on the context's setting for freelist_max_len). - */ -# define SSL_MODE_RELEASE_BUFFERS 0x00000010L -/* - * Send the current time in the Random fields of the ClientHello and - * ServerHello records for compatibility with hypothetical implementations - * that require it. - */ -# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L -# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L -/* - * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications - * that reconnect with a downgraded protocol version; see - * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your - * application attempts a normal handshake. Only use this in explicit - * fallback retries, following the guidance in - * draft-ietf-tls-downgrade-scsv-00. - */ -# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L - -/* Cert related flags */ -/* - * Many implementations ignore some aspects of the TLS standards such as - * enforcing certifcate chain algorithms. When this is set we enforce them. - */ -# define SSL_CERT_FLAG_TLS_STRICT 0x00000001L - -/* Suite B modes, takes same values as certificate verify flags */ -# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 - -/* Perform all sorts of protocol violations for testing purposes */ -# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 - -/* Flags for building certificate chains */ -/* Treat any existing certificates as untrusted CAs */ -# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 -/* Don't include root CA in chain */ -# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 -/* Just check certificates already there */ -# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 -/* Ignore verification errors */ -# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 -/* Clear verification errors from queue */ -# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 - -/* Flags returned by SSL_check_chain */ -/* Certificate can be used with this session */ -# define CERT_PKEY_VALID 0x1 -/* Certificate can also be used for signing */ -# define CERT_PKEY_SIGN 0x2 -/* EE certificate signing algorithm OK */ -# define CERT_PKEY_EE_SIGNATURE 0x10 -/* CA signature algorithms OK */ -# define CERT_PKEY_CA_SIGNATURE 0x20 -/* EE certificate parameters OK */ -# define CERT_PKEY_EE_PARAM 0x40 -/* CA certificate parameters OK */ -# define CERT_PKEY_CA_PARAM 0x80 -/* Signing explicitly allowed as opposed to SHA1 fallback */ -# define CERT_PKEY_EXPLICIT_SIGN 0x100 -/* Client CA issuer names match (always set for server cert) */ -# define CERT_PKEY_ISSUER_NAME 0x200 -/* Cert type matches client types (always set for server cert) */ -# define CERT_PKEY_CERT_TYPE 0x400 -/* Cert chain suitable to Suite B */ -# define CERT_PKEY_SUITEB 0x800 - -# define SSL_CONF_FLAG_CMDLINE 0x1 -# define SSL_CONF_FLAG_FILE 0x2 -# define SSL_CONF_FLAG_CLIENT 0x4 -# define SSL_CONF_FLAG_SERVER 0x8 -# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 -# define SSL_CONF_FLAG_CERTIFICATE 0x20 -/* Configuration value types */ -# define SSL_CONF_TYPE_UNKNOWN 0x0 -# define SSL_CONF_TYPE_STRING 0x1 -# define SSL_CONF_TYPE_FILE 0x2 -# define SSL_CONF_TYPE_DIR 0x3 - -/* - * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they - * cannot be used to clear bits. - */ - -# define SSL_CTX_set_options(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) -# define SSL_CTX_clear_options(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) -# define SSL_CTX_get_options(ctx) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL) -# define SSL_set_options(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL) -# define SSL_clear_options(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) -# define SSL_get_options(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL) - -# define SSL_CTX_set_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) -# define SSL_CTX_clear_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_CTX_get_mode(ctx) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) -# define SSL_clear_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_set_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) -# define SSL_get_mode(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) -# define SSL_set_mtu(ssl, mtu) \ - SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) -# define DTLS_set_link_mtu(ssl, mtu) \ - SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) -# define DTLS_get_link_min_mtu(ssl) \ - SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) - -# define SSL_get_secure_renegotiation_support(ssl) \ - SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - -# define SSL_CTX_set_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_set_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_CTX_clear_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) -# define SSL_clear_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) - -void SSL_CTX_set_msg_callback(SSL_CTX *ctx, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -void SSL_set_msg_callback(SSL *ssl, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) -# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) - -# ifndef OPENSSL_NO_SRP - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct srp_ctx_st { - /* param for all the callbacks */ - void *SRP_cb_arg; - /* set client Hello login callback */ - int (*TLS_ext_srp_username_callback) (SSL *, int *, void *); - /* set SRP N/g param callback for verification */ - int (*SRP_verify_param_callback) (SSL *, void *); - /* set SRP client passwd callback */ - char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *); - char *login; - BIGNUM *N, *g, *s, *B, *A; - BIGNUM *a, *b, *v; - char *info; - int strength; - unsigned long srp_Mask; -} SRP_CTX; - -# endif - -/* see tls_srp.c */ -int SSL_SRP_CTX_init(SSL *s); -int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -int SSL_srp_server_param_with_username(SSL *s, int *ad); -int SRP_generate_server_master_secret(SSL *s, unsigned char *master_key); -int SRP_Calc_A_param(SSL *s); -int SRP_generate_client_master_secret(SSL *s, unsigned char *master_key); - -# endif - -# if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) -# define SSL_MAX_CERT_LIST_DEFAULT 1024*30 - /* 30k max cert list :-) */ -# else -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 - /* 100k max cert list :-) */ -# endif - -# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) - -/* - * This callback type is used inside SSL_CTX, SSL, and in the functions that - * set them. It is used to override the generation of SSL/TLS session IDs in - * a server. Return value should be zero on an error, non-zero to proceed. - * Also, callbacks should themselves check if the id they generate is unique - * otherwise the SSL handshake will fail with an error - callbacks can do - * this using the 'ssl' value they're passed by; - * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in - * is set at the maximum size the session ID can be. In SSLv2 this is 16 - * bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback can alter this - * length to be less if desired, but under SSLv2 session IDs are supposed to - * be fixed at 16 bytes so the id will be padded after the callback returns - * in this case. It is also an error for the callback to set the size to - * zero. - */ -typedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id, - unsigned int *id_len); - -typedef struct ssl_comp_st SSL_COMP; - -# ifndef OPENSSL_NO_SSL_INTERN - -struct ssl_comp_st { - int id; - const char *name; -# ifndef OPENSSL_NO_COMP - COMP_METHOD *method; -# else - char *method; -# endif -}; - -DECLARE_STACK_OF(SSL_COMP) -DECLARE_LHASH_OF(SSL_SESSION); - -struct ssl_ctx_st { - const SSL_METHOD *method; - STACK_OF(SSL_CIPHER) *cipher_list; - /* same as above but sorted for lookup */ - STACK_OF(SSL_CIPHER) *cipher_list_by_id; - struct x509_store_st /* X509_STORE */ *cert_store; - LHASH_OF(SSL_SESSION) *sessions; - /* - * Most session-ids that will be cached, default is - * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. - */ - unsigned long session_cache_size; - struct ssl_session_st *session_cache_head; - struct ssl_session_st *session_cache_tail; - /* - * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT, - * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which - * means only SSL_accept which cache SSL_SESSIONS. - */ - int session_cache_mode; - /* - * If timeout is not 0, it is the default timeout value set when - * SSL_new() is called. This has been put in to make life easier to set - * things up - */ - long session_timeout; - /* - * If this callback is not null, it will be called each time a session id - * is added to the cache. If this function returns 1, it means that the - * callback will do a SSL_SESSION_free() when it has finished using it. - * Otherwise, on 0, it means the callback has finished with it. If - * remove_session_cb is not null, it will be called when a session-id is - * removed from the cache. After the call, OpenSSL will - * SSL_SESSION_free() it. - */ - int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess); - void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); - SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl, - unsigned char *data, int len, int *copy); - struct { - int sess_connect; /* SSL new conn - started */ - int sess_connect_renegotiate; /* SSL reneg - requested */ - int sess_connect_good; /* SSL new conne/reneg - finished */ - int sess_accept; /* SSL new accept - started */ - int sess_accept_renegotiate; /* SSL reneg - requested */ - int sess_accept_good; /* SSL accept/reneg - finished */ - int sess_miss; /* session lookup misses */ - int sess_timeout; /* reuse attempt on timeouted session */ - int sess_cache_full; /* session removed due to full cache */ - int sess_hit; /* session reuse actually done */ - int sess_cb_hit; /* session-id that was not in the cache was - * passed back via the callback. This - * indicates that the application is - * supplying session-id's from other - * processes - spooky :-) */ - } stats; - - int references; - - /* if defined, these override the X509_verify_cert() calls */ - int (*app_verify_callback) (X509_STORE_CTX *, void *); - void *app_verify_arg; - /* - * before OpenSSL 0.9.7, 'app_verify_arg' was ignored - * ('app_verify_callback' was called with just one argument) - */ - - /* Default password callback. */ - pem_password_cb *default_passwd_callback; - - /* Default password callback user data. */ - void *default_passwd_callback_userdata; - - /* get client cert callback */ - int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey); - - /* cookie generate callback */ - int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie, - unsigned int *cookie_len); - - /* verify cookie callback */ - int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie, - unsigned int cookie_len); - - CRYPTO_EX_DATA ex_data; - - const EVP_MD *rsa_md5; /* For SSLv2 - name is 'ssl2-md5' */ - const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ - const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */ - - STACK_OF(X509) *extra_certs; - STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */ - - /* Default values used when no per-SSL value is defined follow */ - - /* used if SSL's info_callback is NULL */ - void (*info_callback) (const SSL *ssl, int type, int val); - - /* what we put in client cert requests */ - STACK_OF(X509_NAME) *client_CA; - - /* - * Default values to use in SSL structures follow (these are copied by - * SSL_new) - */ - - unsigned long options; - unsigned long mode; - long max_cert_list; - - struct cert_st /* CERT */ *cert; - int read_ahead; - - /* callback that allows applications to peek at protocol messages */ - void (*msg_callback) (int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); - void *msg_callback_arg; - - int verify_mode; - unsigned int sid_ctx_length; - unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; - /* called 'verify_callback' in the SSL */ - int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx); - - /* Default generate session ID callback. */ - GEN_SESSION_CB generate_session_id; - - X509_VERIFY_PARAM *param; - -# if 0 - int purpose; /* Purpose setting */ - int trust; /* Trust setting */ -# endif - - int quiet_shutdown; - - /* - * Maximum amount of data to send in one fragment. actual record size can - * be more than this due to padding and MAC overheads. - */ - unsigned int max_send_fragment; - -# ifndef OPENSSL_NO_ENGINE - /* - * Engine to pass requests for client certs to - */ - ENGINE *client_cert_engine; -# endif - -# ifndef OPENSSL_NO_TLSEXT - /* TLS extensions servername callback */ - int (*tlsext_servername_callback) (SSL *, int *, void *); - void *tlsext_servername_arg; - /* RFC 4507 session ticket keys */ - unsigned char tlsext_tick_key_name[16]; - unsigned char tlsext_tick_hmac_key[16]; - unsigned char tlsext_tick_aes_key[16]; - /* Callback to support customisation of ticket key setting */ - int (*tlsext_ticket_key_cb) (SSL *ssl, - unsigned char *name, unsigned char *iv, - EVP_CIPHER_CTX *ectx, - HMAC_CTX *hctx, int enc); - - /* certificate status request info */ - /* Callback for status request */ - int (*tlsext_status_cb) (SSL *ssl, void *arg); - void *tlsext_status_arg; - - /* draft-rescorla-tls-opaque-prf-input-00.txt information */ - int (*tlsext_opaque_prf_input_callback) (SSL *, void *peerinput, - size_t len, void *arg); - void *tlsext_opaque_prf_input_callback_arg; -# endif - -# ifndef OPENSSL_NO_PSK - char *psk_identity_hint; - unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, - char *identity, - unsigned int max_identity_len, - unsigned char *psk, - unsigned int max_psk_len); - unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, - unsigned char *psk, - unsigned int max_psk_len); -# endif - -# ifndef OPENSSL_NO_BUF_FREELISTS -# define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 - unsigned int freelist_max_len; - struct ssl3_buf_freelist_st *wbuf_freelist; - struct ssl3_buf_freelist_st *rbuf_freelist; -# endif -# ifndef OPENSSL_NO_SRP - SRP_CTX srp_ctx; /* ctx for SRP authentication */ -# endif - -# ifndef OPENSSL_NO_TLSEXT - -# ifndef OPENSSL_NO_NEXTPROTONEG - /* Next protocol negotiation information */ - /* (for experimental NPN extension). */ - - /* - * For a server, this contains a callback function by which the set of - * advertised protocols can be provided. - */ - int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf, - unsigned int *len, void *arg); - void *next_protos_advertised_cb_arg; - /* - * For a client, this contains a callback function that selects the next - * protocol from the list provided by the server. - */ - int (*next_proto_select_cb) (SSL *s, unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, void *arg); - void *next_proto_select_cb_arg; -# endif - /* SRTP profiles we are willing to do from RFC 5764 */ - STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; - - /* - * ALPN information (we are in the process of transitioning from NPN to - * ALPN.) - */ - - /*- - * For a server, this contains a callback function that allows the - * server to select the protocol for the connection. - * out: on successful return, this must point to the raw protocol - * name (without the length prefix). - * outlen: on successful return, this contains the length of |*out|. - * in: points to the client's list of supported protocols in - * wire-format. - * inlen: the length of |in|. - */ - int (*alpn_select_cb) (SSL *s, - const unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, void *arg); - void *alpn_select_cb_arg; - - /* - * For a client, this contains the list of supported protocols in wire - * format. - */ - unsigned char *alpn_client_proto_list; - unsigned alpn_client_proto_list_len; - -# ifndef OPENSSL_NO_EC - /* EC extension values inherited by SSL structure */ - size_t tlsext_ecpointformatlist_length; - unsigned char *tlsext_ecpointformatlist; - size_t tlsext_ellipticcurvelist_length; - unsigned char *tlsext_ellipticcurvelist; -# endif /* OPENSSL_NO_EC */ -# endif -}; - -# endif - -# define SSL_SESS_CACHE_OFF 0x0000 -# define SSL_SESS_CACHE_CLIENT 0x0001 -# define SSL_SESS_CACHE_SERVER 0x0002 -# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) -# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 -/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ -# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 -# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 -# define SSL_SESS_CACHE_NO_INTERNAL \ - (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) - -LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); -# define SSL_CTX_sess_number(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) -# define SSL_CTX_sess_connect(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) -# define SSL_CTX_sess_connect_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) -# define SSL_CTX_sess_connect_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) -# define SSL_CTX_sess_accept_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) -# define SSL_CTX_sess_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) -# define SSL_CTX_sess_cb_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) -# define SSL_CTX_sess_misses(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) -# define SSL_CTX_sess_timeouts(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) -# define SSL_CTX_sess_cache_full(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) - -void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, - int (*new_session_cb) (struct ssl_st *ssl, - SSL_SESSION *sess)); -int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - SSL_SESSION *sess); -void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, - void (*remove_session_cb) (struct ssl_ctx_st - *ctx, - SSL_SESSION - *sess)); -void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, - SSL_SESSION *sess); -void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, - SSL_SESSION *(*get_session_cb) (struct ssl_st - *ssl, - unsigned char - *data, int len, - int *copy)); -SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - unsigned char *Data, - int len, int *copy); -void SSL_CTX_set_info_callback(SSL_CTX *ctx, - void (*cb) (const SSL *ssl, int type, - int val)); -void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, - int val); -void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, - int (*client_cert_cb) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey)); -int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey); -# ifndef OPENSSL_NO_ENGINE -int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); -# endif -void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, - int (*app_gen_cookie_cb) (SSL *ssl, - unsigned char - *cookie, - unsigned int - *cookie_len)); -void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, - int (*app_verify_cookie_cb) (SSL *ssl, - unsigned char - *cookie, - unsigned int - cookie_len)); -# ifndef OPENSSL_NO_NEXTPROTONEG -void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, - int (*cb) (SSL *ssl, - const unsigned char - **out, - unsigned int *outlen, - void *arg), void *arg); -void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, - int (*cb) (SSL *ssl, - unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg), void *arg); -void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, - unsigned *len); -# endif - -# ifndef OPENSSL_NO_TLSEXT -int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, - const unsigned char *in, unsigned int inlen, - const unsigned char *client, - unsigned int client_len); -# endif - -# define OPENSSL_NPN_UNSUPPORTED 0 -# define OPENSSL_NPN_NEGOTIATED 1 -# define OPENSSL_NPN_NO_OVERLAP 2 - -int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, - unsigned protos_len); -int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, - unsigned protos_len); -void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, - int (*cb) (SSL *ssl, - const unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg), void *arg); -void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, - unsigned *len); - -# ifndef OPENSSL_NO_PSK -/* - * the maximum length of the buffer given to callbacks containing the - * resulting identity/psk - */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 -void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, - unsigned int (*psk_client_callback) (SSL - *ssl, - const - char - *hint, - char - *identity, - unsigned - int - max_identity_len, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_set_psk_client_callback(SSL *ssl, - unsigned int (*psk_client_callback) (SSL - *ssl, - const - char - *hint, - char - *identity, - unsigned - int - max_identity_len, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, - unsigned int (*psk_server_callback) (SSL - *ssl, - const - char - *identity, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_set_psk_server_callback(SSL *ssl, - unsigned int (*psk_server_callback) (SSL - *ssl, - const - char - *identity, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); -int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); -const char *SSL_get_psk_identity_hint(const SSL *s); -const char *SSL_get_psk_identity(const SSL *s); -# endif - -# ifndef OPENSSL_NO_TLSEXT -/* Register callbacks to handle custom TLS Extensions for client or server. */ - -int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); - -int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); - -int SSL_extension_supported(unsigned int ext_type); - -# endif - -# define SSL_NOTHING 1 -# define SSL_WRITING 2 -# define SSL_READING 3 -# define SSL_X509_LOOKUP 4 - -/* These will only be used when doing non-blocking IO */ -# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) -# define SSL_want_read(s) (SSL_want(s) == SSL_READING) -# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) -# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) - -# define SSL_MAC_FLAG_READ_MAC_STREAM 1 -# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 - -# ifndef OPENSSL_NO_SSL_INTERN - -struct ssl_st { - /* - * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, - * DTLS1_VERSION) - */ - int version; - /* SSL_ST_CONNECT or SSL_ST_ACCEPT */ - int type; - /* SSLv3 */ - const SSL_METHOD *method; - /* - * There are 2 BIO's even though they are normally both the same. This - * is so data can be read and written to different handlers - */ -# ifndef OPENSSL_NO_BIO - /* used by SSL_read */ - BIO *rbio; - /* used by SSL_write */ - BIO *wbio; - /* used during session-id reuse to concatenate messages */ - BIO *bbio; -# else - /* used by SSL_read */ - char *rbio; - /* used by SSL_write */ - char *wbio; - char *bbio; -# endif - /* - * This holds a variable that indicates what we were doing when a 0 or -1 - * is returned. This is needed for non-blocking IO so we know what - * request needs re-doing when in SSL_accept or SSL_connect - */ - int rwstate; - /* true when we are actually in SSL_accept() or SSL_connect() */ - int in_handshake; - int (*handshake_func) (SSL *); - /* - * Imagine that here's a boolean member "init" that is switched as soon - * as SSL_set_{accept/connect}_state is called for the first time, so - * that "state" and "handshake_func" are properly initialized. But as - * handshake_func is == 0 until then, we use this test instead of an - * "init" member. - */ - /* are we the server side? - mostly used by SSL_clear */ - int server; - /* - * Generate a new session or reuse an old one. - * NB: For servers, the 'new' session may actually be a previously - * cached session or even the previous session unless - * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set - */ - int new_session; - /* don't send shutdown packets */ - int quiet_shutdown; - /* we have shut things down, 0x01 sent, 0x02 for received */ - int shutdown; - /* where we are */ - int state; - /* where we are when reading */ - int rstate; - BUF_MEM *init_buf; /* buffer used during init */ - void *init_msg; /* pointer to handshake message body, set by - * ssl3_get_message() */ - int init_num; /* amount read/written */ - int init_off; /* amount read/written */ - /* used internally to point at a raw packet */ - unsigned char *packet; - unsigned int packet_length; - struct ssl2_state_st *s2; /* SSLv2 variables */ - struct ssl3_state_st *s3; /* SSLv3 variables */ - struct dtls1_state_st *d1; /* DTLSv1 variables */ - int read_ahead; /* Read as many input bytes as possible (for - * non-blocking reads) */ - /* callback that allows applications to peek at protocol messages */ - void (*msg_callback) (int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); - void *msg_callback_arg; - int hit; /* reusing a previous session */ - X509_VERIFY_PARAM *param; -# if 0 - int purpose; /* Purpose setting */ - int trust; /* Trust setting */ -# endif - /* crypto */ - STACK_OF(SSL_CIPHER) *cipher_list; - STACK_OF(SSL_CIPHER) *cipher_list_by_id; - /* - * These are the ones being used, the ones in SSL_SESSION are the ones to - * be 'copied' into these ones - */ - int mac_flags; - EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ - EVP_MD_CTX *read_hash; /* used for mac generation */ -# ifndef OPENSSL_NO_COMP - COMP_CTX *expand; /* uncompress */ -# else - char *expand; -# endif - EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ - EVP_MD_CTX *write_hash; /* used for mac generation */ -# ifndef OPENSSL_NO_COMP - COMP_CTX *compress; /* compression */ -# else - char *compress; -# endif - /* session info */ - /* client cert? */ - /* This is used to hold the server certificate used */ - struct cert_st /* CERT */ *cert; - /* - * the session_id_context is used to ensure sessions are only reused in - * the appropriate context - */ - unsigned int sid_ctx_length; - unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; - /* This can also be in the session once a session is established */ - SSL_SESSION *session; - /* Default generate session ID callback. */ - GEN_SESSION_CB generate_session_id; - /* Used in SSL2 and SSL3 */ - /* - * 0 don't care about verify failure. - * 1 fail if verify fails - */ - int verify_mode; - /* fail if callback returns 0 */ - int (*verify_callback) (int ok, X509_STORE_CTX *ctx); - /* optional informational callback */ - void (*info_callback) (const SSL *ssl, int type, int val); - /* error bytes to be written */ - int error; - /* actual code */ - int error_code; -# ifndef OPENSSL_NO_KRB5 - /* Kerberos 5 context */ - KSSL_CTX *kssl_ctx; -# endif /* OPENSSL_NO_KRB5 */ -# ifndef OPENSSL_NO_PSK - unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, - char *identity, - unsigned int max_identity_len, - unsigned char *psk, - unsigned int max_psk_len); - unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, - unsigned char *psk, - unsigned int max_psk_len); -# endif - SSL_CTX *ctx; - /* - * set this flag to 1 and a sleep(1) is put into all SSL_read() and - * SSL_write() calls, good for nbio debuging :-) - */ - int debug; - /* extra application data */ - long verify_result; - CRYPTO_EX_DATA ex_data; - /* for server side, keep the list of CA_dn we can use */ - STACK_OF(X509_NAME) *client_CA; - int references; - /* protocol behaviour */ - unsigned long options; - /* API behaviour */ - unsigned long mode; - long max_cert_list; - int first_packet; - /* what was passed, used for SSLv3/TLS rollback check */ - int client_version; - unsigned int max_send_fragment; -# ifndef OPENSSL_NO_TLSEXT - /* TLS extension debug callback */ - void (*tlsext_debug_cb) (SSL *s, int client_server, int type, - unsigned char *data, int len, void *arg); - void *tlsext_debug_arg; - char *tlsext_hostname; - /*- - * no further mod of servername - * 0 : call the servername extension callback. - * 1 : prepare 2, allow last ack just after in server callback. - * 2 : don't call servername callback, no ack in server hello - */ - int servername_done; - /* certificate status request info */ - /* Status type or -1 if no status type */ - int tlsext_status_type; - /* Expect OCSP CertificateStatus message */ - int tlsext_status_expected; - /* OCSP status request only */ - STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids; - X509_EXTENSIONS *tlsext_ocsp_exts; - /* OCSP response received or to be sent */ - unsigned char *tlsext_ocsp_resp; - int tlsext_ocsp_resplen; - /* RFC4507 session ticket expected to be received or sent */ - int tlsext_ticket_expected; -# ifndef OPENSSL_NO_EC - size_t tlsext_ecpointformatlist_length; - /* our list */ - unsigned char *tlsext_ecpointformatlist; - size_t tlsext_ellipticcurvelist_length; - /* our list */ - unsigned char *tlsext_ellipticcurvelist; -# endif /* OPENSSL_NO_EC */ - /* - * draft-rescorla-tls-opaque-prf-input-00.txt information to be used for - * handshakes - */ - void *tlsext_opaque_prf_input; - size_t tlsext_opaque_prf_input_len; - /* TLS Session Ticket extension override */ - TLS_SESSION_TICKET_EXT *tlsext_session_ticket; - /* TLS Session Ticket extension callback */ - tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb; - void *tls_session_ticket_ext_cb_arg; - /* TLS pre-shared secret session resumption */ - tls_session_secret_cb_fn tls_session_secret_cb; - void *tls_session_secret_cb_arg; - SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */ -# ifndef OPENSSL_NO_NEXTPROTONEG - /* - * Next protocol negotiation. For the client, this is the protocol that - * we sent in NextProtocol and is set when handling ServerHello - * extensions. For a server, this is the client's selected_protocol from - * NextProtocol and is set when handling the NextProtocol message, before - * the Finished message. - */ - unsigned char *next_proto_negotiated; - unsigned char next_proto_negotiated_len; -# endif -# define session_ctx initial_ctx - /* What we'll do */ - STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; - /* What's been chosen */ - SRTP_PROTECTION_PROFILE *srtp_profile; - /*- - * Is use of the Heartbeat extension negotiated? - * 0: disabled - * 1: enabled - * 2: enabled, but not allowed to send Requests - */ - unsigned int tlsext_heartbeat; - /* Indicates if a HeartbeatRequest is in flight */ - unsigned int tlsext_hb_pending; - /* HeartbeatRequest sequence number */ - unsigned int tlsext_hb_seq; -# else -# define session_ctx ctx -# endif /* OPENSSL_NO_TLSEXT */ - /*- - * 1 if we are renegotiating. - * 2 if we are a server and are inside a handshake - * (i.e. not just sending a HelloRequest) - */ - int renegotiate; -# ifndef OPENSSL_NO_SRP - /* ctx for SRP authentication */ - SRP_CTX srp_ctx; -# endif -# ifndef OPENSSL_NO_TLSEXT - /* - * For a client, this contains the list of supported protocols in wire - * format. - */ - unsigned char *alpn_client_proto_list; - unsigned alpn_client_proto_list_len; -# endif /* OPENSSL_NO_TLSEXT */ -}; - -# endif - -#ifdef __cplusplus -} -#endif - -# include -# include -# include /* This is mostly sslv3 with a few tweaks */ -# include /* Datagram TLS */ -# include -# include /* Support for the use_srtp extension */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* compatibility */ -# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg)) -# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) -# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a)) -# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) -# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) -# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg)) - -/* - * The following are the possible values for ssl->state are are used to - * indicate where we are up to in the SSL connection establishment. The - * macros that follow are about the only things you should need to use and - * even then, only when using non-blocking IO. It can also be useful to work - * out where you were when the connection failed - */ - -# define SSL_ST_CONNECT 0x1000 -# define SSL_ST_ACCEPT 0x2000 -# define SSL_ST_MASK 0x0FFF -# define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT) -# define SSL_ST_BEFORE 0x4000 -# define SSL_ST_OK 0x03 -# define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) -# define SSL_ST_ERR 0x05 - -# define SSL_CB_LOOP 0x01 -# define SSL_CB_EXIT 0x02 -# define SSL_CB_READ 0x04 -# define SSL_CB_WRITE 0x08 -# define SSL_CB_ALERT 0x4000/* used in callback */ -# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) -# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) -# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) -# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) -# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) -# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) -# define SSL_CB_HANDSHAKE_START 0x10 -# define SSL_CB_HANDSHAKE_DONE 0x20 - -/* Is the SSL_connection established? */ -# define SSL_get_state(a) SSL_state(a) -# define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK) -# define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT) -# define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE) -# define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT) -# define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) - -/* - * The following 2 states are kept in ssl->rstate when reads fail, you should - * not need these - */ -# define SSL_ST_READ_HEADER 0xF0 -# define SSL_ST_READ_BODY 0xF1 -# define SSL_ST_READ_DONE 0xF2 - -/*- - * Obtain latest Finished message - * -- that we sent (SSL_get_finished) - * -- that we expected from peer (SSL_get_peer_finished). - * Returns length (0 == no Finished so far), copies up to 'count' bytes. - */ -size_t SSL_get_finished(const SSL *s, void *buf, size_t count); -size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); - -/* - * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are - * 'ored' with SSL_VERIFY_PEER if they are desired - */ -# define SSL_VERIFY_NONE 0x00 -# define SSL_VERIFY_PEER 0x01 -# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 -# define SSL_VERIFY_CLIENT_ONCE 0x04 - -# define OpenSSL_add_ssl_algorithms() SSL_library_init() -# define SSLeay_add_ssl_algorithms() SSL_library_init() - -/* this is for backward compatibility */ -# if 0 /* NEW_SSLEAY */ -# define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c) -# define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n) -# define SSL_add_session(a,b) SSL_CTX_add_session((a),(b)) -# define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b)) -# define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b)) -# endif -/* More backward compatibility */ -# define SSL_get_cipher(s) \ - SSL_CIPHER_get_name(SSL_get_current_cipher(s)) -# define SSL_get_cipher_bits(s,np) \ - SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) -# define SSL_get_cipher_version(s) \ - SSL_CIPHER_get_version(SSL_get_current_cipher(s)) -# define SSL_get_cipher_name(s) \ - SSL_CIPHER_get_name(SSL_get_current_cipher(s)) -# define SSL_get_time(a) SSL_SESSION_get_time(a) -# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) -# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) -# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) - -# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) -# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) - -DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) -# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value - * from SSL_AD_... */ -/* These alert types are for SSLv3 and TLSv1 */ -# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY -/* fatal */ -# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE -/* fatal */ -# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC -# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED -# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW -/* fatal */ -# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE -/* fatal */ -# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE -/* Not for TLS */ -# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE -# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE -# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE -# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED -# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED -# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN -/* fatal */ -# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER -/* fatal */ -# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA -/* fatal */ -# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED -/* fatal */ -# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR -# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR -/* fatal */ -# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION -/* fatal */ -# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION -/* fatal */ -# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY -/* fatal */ -# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR -# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED -# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION -# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION -# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE -# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME -# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE -# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE -/* fatal */ -# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY -/* fatal */ -# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK -# define SSL_ERROR_NONE 0 -# define SSL_ERROR_SSL 1 -# define SSL_ERROR_WANT_READ 2 -# define SSL_ERROR_WANT_WRITE 3 -# define SSL_ERROR_WANT_X509_LOOKUP 4 -# define SSL_ERROR_SYSCALL 5/* look at error stack/return - * value/errno */ -# define SSL_ERROR_ZERO_RETURN 6 -# define SSL_ERROR_WANT_CONNECT 7 -# define SSL_ERROR_WANT_ACCEPT 8 -# define SSL_CTRL_NEED_TMP_RSA 1 -# define SSL_CTRL_SET_TMP_RSA 2 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_RSA_CB 5 -# define SSL_CTRL_SET_TMP_DH_CB 6 -# define SSL_CTRL_SET_TMP_ECDH_CB 7 -# define SSL_CTRL_GET_SESSION_REUSED 8 -# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 -# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 -# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 -# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 -# define SSL_CTRL_GET_FLAGS 13 -# define SSL_CTRL_EXTRA_CHAIN_CERT 14 -# define SSL_CTRL_SET_MSG_CALLBACK 15 -# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 -/* only applies to datagram connections */ -# define SSL_CTRL_SET_MTU 17 -/* Stats */ -# define SSL_CTRL_SESS_NUMBER 20 -# define SSL_CTRL_SESS_CONNECT 21 -# define SSL_CTRL_SESS_CONNECT_GOOD 22 -# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 -# define SSL_CTRL_SESS_ACCEPT 24 -# define SSL_CTRL_SESS_ACCEPT_GOOD 25 -# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 -# define SSL_CTRL_SESS_HIT 27 -# define SSL_CTRL_SESS_CB_HIT 28 -# define SSL_CTRL_SESS_MISSES 29 -# define SSL_CTRL_SESS_TIMEOUTS 30 -# define SSL_CTRL_SESS_CACHE_FULL 31 -# define SSL_CTRL_OPTIONS 32 -# define SSL_CTRL_MODE 33 -# define SSL_CTRL_GET_READ_AHEAD 40 -# define SSL_CTRL_SET_READ_AHEAD 41 -# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 -# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 -# define SSL_CTRL_SET_SESS_CACHE_MODE 44 -# define SSL_CTRL_GET_SESS_CACHE_MODE 45 -# define SSL_CTRL_GET_MAX_CERT_LIST 50 -# define SSL_CTRL_SET_MAX_CERT_LIST 51 -# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 -/* see tls1.h for macros based on these */ -# ifndef OPENSSL_NO_TLSEXT -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 -# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 -# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 -# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 -# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 -# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 -# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 -# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 -# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 -# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 -# define SSL_CTRL_SET_SRP_ARG 78 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 -# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 -# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif -# endif /* OPENSSL_NO_TLSEXT */ -# define DTLS_CTRL_GET_TIMEOUT 73 -# define DTLS_CTRL_HANDLE_TIMEOUT 74 -# define DTLS_CTRL_LISTEN 75 -# define SSL_CTRL_GET_RI_SUPPORT 76 -# define SSL_CTRL_CLEAR_OPTIONS 77 -# define SSL_CTRL_CLEAR_MODE 78 -# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 -# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 -# define SSL_CTRL_CHAIN 88 -# define SSL_CTRL_CHAIN_CERT 89 -# define SSL_CTRL_GET_CURVES 90 -# define SSL_CTRL_SET_CURVES 91 -# define SSL_CTRL_SET_CURVES_LIST 92 -# define SSL_CTRL_GET_SHARED_CURVE 93 -# define SSL_CTRL_SET_ECDH_AUTO 94 -# define SSL_CTRL_SET_SIGALGS 97 -# define SSL_CTRL_SET_SIGALGS_LIST 98 -# define SSL_CTRL_CERT_FLAGS 99 -# define SSL_CTRL_CLEAR_CERT_FLAGS 100 -# define SSL_CTRL_SET_CLIENT_SIGALGS 101 -# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 -# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 -# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 -# define SSL_CTRL_BUILD_CERT_CHAIN 105 -# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 -# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 -# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 -# define SSL_CTRL_GET_SERVER_TMP_KEY 109 -# define SSL_CTRL_GET_RAW_CIPHERLIST 110 -# define SSL_CTRL_GET_EC_POINT_FORMATS 111 -# define SSL_CTRL_GET_CHAIN_CERTS 115 -# define SSL_CTRL_SELECT_CURRENT_CERT 116 -# define SSL_CTRL_SET_CURRENT_CERT 117 -# define SSL_CTRL_CHECK_PROTO_VERSION 119 -# define DTLS_CTRL_SET_LINK_MTU 120 -# define DTLS_CTRL_GET_LINK_MIN_MTU 121 -# define SSL_CERT_SET_FIRST 1 -# define SSL_CERT_SET_NEXT 2 -# define SSL_CERT_SET_SERVER 3 -# define DTLSv1_get_timeout(ssl, arg) \ - SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) -# define DTLSv1_handle_timeout(ssl) \ - SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) -# define DTLSv1_listen(ssl, peer) \ - SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer) -# define SSL_session_reused(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL) -# define SSL_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_clear_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_total_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_need_tmp_RSA(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL) -# define SSL_CTX_set_tmp_rsa(ctx,rsa) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) -# define SSL_need_tmp_RSA(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL) -# define SSL_set_tmp_rsa(ssl,rsa) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) -# define SSL_set_tmp_dh(ssl,dh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) -# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) -# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) -# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) -# define SSL_CTX_clear_extra_chain_certs(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) -# define SSL_CTX_set0_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) -# define SSL_CTX_set1_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) -# define SSL_CTX_add0_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) -# define SSL_CTX_add1_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) -# define SSL_CTX_get0_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_CTX_clear_chain_certs(ctx) \ - SSL_CTX_set0_chain(ctx,NULL) -# define SSL_CTX_build_cert_chain(ctx, flags) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_CTX_select_current_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) -# define SSL_CTX_set_current_cert(ctx, op) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_CTX_set0_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) -# define SSL_CTX_set1_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) -# define SSL_CTX_set0_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) -# define SSL_CTX_set1_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) -# define SSL_set0_chain(ctx,sk) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) -# define SSL_set1_chain(ctx,sk) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) -# define SSL_add0_chain_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) -# define SSL_add1_chain_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) -# define SSL_get0_chain_certs(ctx,px509) \ - SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_clear_chain_certs(ctx) \ - SSL_set0_chain(ctx,NULL) -# define SSL_build_cert_chain(s, flags) \ - SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_select_current_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) -# define SSL_set_current_cert(ctx,op) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_set0_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) -# define SSL_set1_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) -# define SSL_set0_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) -# define SSL_set1_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) -# define SSL_get1_curves(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s) -# define SSL_CTX_set1_curves(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) -# define SSL_CTX_set1_curves_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) -# define SSL_set1_curves(ctx, clist, clistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) -# define SSL_set1_curves_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) -# define SSL_get_shared_curve(s, n) \ - SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL) -# define SSL_CTX_set_ecdh_auto(ctx, onoff) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) -# define SSL_set_ecdh_auto(s, onoff) \ - SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) -# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) -# define SSL_CTX_set1_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) -# define SSL_set1_sigalgs(ctx, slist, slistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) -# define SSL_set1_sigalgs_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) -# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist) -# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) -# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist) -# define SSL_set1_client_sigalgs_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) -# define SSL_get0_certificate_types(s, clist) \ - SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist) -# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) -# define SSL_set1_client_certificate_types(s, clist, clistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) -# define SSL_get_peer_signature_nid(s, pn) \ - SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) -# define SSL_get_server_tmp_key(s, pk) \ - SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk) -# define SSL_get0_raw_cipherlist(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst) -# define SSL_get0_ec_point_formats(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst) -# ifndef OPENSSL_NO_BIO -BIO_METHOD *BIO_f_ssl(void); -BIO *BIO_new_ssl(SSL_CTX *ctx, int client); -BIO *BIO_new_ssl_connect(SSL_CTX *ctx); -BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); -int BIO_ssl_copy_session_id(BIO *to, BIO *from); -void BIO_ssl_shutdown(BIO *ssl_bio); - -# endif - -int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); -SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); -void SSL_CTX_free(SSL_CTX *); -long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); -long SSL_CTX_get_timeout(const SSL_CTX *ctx); -X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); -void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); -int SSL_want(const SSL *s); -int SSL_clear(SSL *s); - -void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); - -const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); -int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); -char *SSL_CIPHER_get_version(const SSL_CIPHER *c); -const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); -unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c); - -int SSL_get_fd(const SSL *s); -int SSL_get_rfd(const SSL *s); -int SSL_get_wfd(const SSL *s); -const char *SSL_get_cipher_list(const SSL *s, int n); -char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); -int SSL_get_read_ahead(const SSL *s); -int SSL_pending(const SSL *s); -# ifndef OPENSSL_NO_SOCK -int SSL_set_fd(SSL *s, int fd); -int SSL_set_rfd(SSL *s, int fd); -int SSL_set_wfd(SSL *s, int fd); -# endif -# ifndef OPENSSL_NO_BIO -void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); -BIO *SSL_get_rbio(const SSL *s); -BIO *SSL_get_wbio(const SSL *s); -# endif -int SSL_set_cipher_list(SSL *s, const char *str); -void SSL_set_read_ahead(SSL *s, int yes); -int SSL_get_verify_mode(const SSL *s); -int SSL_get_verify_depth(const SSL *s); -int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *); -void SSL_set_verify(SSL *s, int mode, - int (*callback) (int ok, X509_STORE_CTX *ctx)); -void SSL_set_verify_depth(SSL *s, int depth); -void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -# endif -int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); -int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); -int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, - long len); -int SSL_use_certificate(SSL *ssl, X509 *x); -int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); - -# ifndef OPENSSL_NO_TLSEXT -/* Set serverinfo data for the current active cert. */ -int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, - size_t serverinfo_length); -# ifndef OPENSSL_NO_STDIO -int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); -# endif /* NO_STDIO */ - -# endif - -# ifndef OPENSSL_NO_STDIO -int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); -int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); -int SSL_use_certificate_file(SSL *ssl, const char *file, int type); -int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); -int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); -int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); -/* PEM type */ -int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); -STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); -int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *file); -# ifndef OPENSSL_SYS_VMS -/* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */ -# ifndef OPENSSL_SYS_MACINTOSH_CLASSIC -int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *dir); -# endif -# endif - -# endif - -void SSL_load_error_strings(void); -const char *SSL_state_string(const SSL *s); -const char *SSL_rstate_string(const SSL *s); -const char *SSL_state_string_long(const SSL *s); -const char *SSL_rstate_string_long(const SSL *s); -long SSL_SESSION_get_time(const SSL_SESSION *s); -long SSL_SESSION_set_time(SSL_SESSION *s, long t); -long SSL_SESSION_get_timeout(const SSL_SESSION *s); -long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); -void SSL_copy_session_id(SSL *to, const SSL *from); -X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); -int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -SSL_SESSION *SSL_SESSION_new(void); -const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, - unsigned int *len); -unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); -# ifndef OPENSSL_NO_FP_API -int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); -# endif -# ifndef OPENSSL_NO_BIO -int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); -# endif -void SSL_SESSION_free(SSL_SESSION *ses); -int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); -int SSL_set_session(SSL *to, SSL_SESSION *session); -int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); -int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); -int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); -int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); -int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, - unsigned int id_len); -SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, - long length); - -# ifdef HEADER_X509_H -X509 *SSL_get_peer_certificate(const SSL *s); -# endif - -STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); - -int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); -int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); -int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, - X509_STORE_CTX *); -void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, - int (*callback) (int, X509_STORE_CTX *)); -void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); -void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, - int (*cb) (X509_STORE_CTX *, void *), - void *arg); -void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), - void *arg); -# ifndef OPENSSL_NO_RSA -int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); -# endif -int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, - long len); -int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); -int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, - const unsigned char *d, long len); -int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); -int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, - const unsigned char *d); - -void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); -void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); - -int SSL_CTX_check_private_key(const SSL_CTX *ctx); -int SSL_check_private_key(const SSL *ctx); - -int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -SSL *SSL_new(SSL_CTX *ctx); -int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); -int SSL_set_purpose(SSL *s, int purpose); -int SSL_CTX_set_trust(SSL_CTX *s, int trust); -int SSL_set_trust(SSL *s, int trust); - -int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); -int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); - -X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); -X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); - -# ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); -int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, - char *(*cb) (SSL *, void *)); -int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, - int (*cb) (SSL *, void *)); -int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, - int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); - -int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, - BIGNUM *sa, BIGNUM *v, char *info); -int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, - const char *grp); - -BIGNUM *SSL_get_srp_g(SSL *s); -BIGNUM *SSL_get_srp_N(SSL *s); - -char *SSL_get_srp_username(SSL *s); -char *SSL_get_srp_userinfo(SSL *s); -# endif - -void SSL_certs_clear(SSL *s); -void SSL_free(SSL *ssl); -int SSL_accept(SSL *ssl); -int SSL_connect(SSL *ssl); -int SSL_read(SSL *ssl, void *buf, int num); -int SSL_peek(SSL *ssl, void *buf, int num); -int SSL_write(SSL *ssl, const void *buf, int num); -long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); -long SSL_callback_ctrl(SSL *, int, void (*)(void)); -long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); -long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); - -int SSL_get_error(const SSL *s, int ret_code); -const char *SSL_get_version(const SSL *s); - -/* This sets the 'default' SSL version that SSL_new() will create */ -int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); - -# ifndef OPENSSL_NO_SSL2_METHOD -const SSL_METHOD *SSLv2_method(void); /* SSLv2 */ -const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ -const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ -# endif - -# ifndef OPENSSL_NO_SSL3_METHOD -const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ -const SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ -const SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ -# endif - -const SSL_METHOD *SSLv23_method(void); /* Negotiate highest available SSL/TLS - * version */ -const SSL_METHOD *SSLv23_server_method(void); /* Negotiate highest available - * SSL/TLS version */ -const SSL_METHOD *SSLv23_client_method(void); /* Negotiate highest available - * SSL/TLS version */ - -const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ -const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ -const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ - -const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ -const SSL_METHOD *TLSv1_1_server_method(void); /* TLSv1.1 */ -const SSL_METHOD *TLSv1_1_client_method(void); /* TLSv1.1 */ - -const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ -const SSL_METHOD *TLSv1_2_server_method(void); /* TLSv1.2 */ -const SSL_METHOD *TLSv1_2_client_method(void); /* TLSv1.2 */ - -const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ -const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ -const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */ - -const SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */ -const SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */ -const SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */ - -const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ -const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ -const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ - -STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); - -int SSL_do_handshake(SSL *s); -int SSL_renegotiate(SSL *s); -int SSL_renegotiate_abbreviated(SSL *s); -int SSL_renegotiate_pending(SSL *s); -int SSL_shutdown(SSL *s); - -const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); -const SSL_METHOD *SSL_get_ssl_method(SSL *s); -int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); -const char *SSL_alert_type_string_long(int value); -const char *SSL_alert_type_string(int value); -const char *SSL_alert_desc_string_long(int value); -const char *SSL_alert_desc_string(int value); - -void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); -void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); -STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); -STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); -int SSL_add_client_CA(SSL *ssl, X509 *x); -int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); - -void SSL_set_connect_state(SSL *s); -void SSL_set_accept_state(SSL *s); - -long SSL_get_default_timeout(const SSL *s); - -int SSL_library_init(void); - -char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); -STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); - -SSL *SSL_dup(SSL *ssl); - -X509 *SSL_get_certificate(const SSL *ssl); -/* - * EVP_PKEY - */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); - -X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); -EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); - -void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); -int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); -void SSL_set_quiet_shutdown(SSL *ssl, int mode); -int SSL_get_quiet_shutdown(const SSL *ssl); -void SSL_set_shutdown(SSL *ssl, int mode); -int SSL_get_shutdown(const SSL *ssl); -int SSL_version(const SSL *ssl); -int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); -int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); -# define SSL_get0_session SSL_get_session/* just peek at pointer */ -SSL_SESSION *SSL_get_session(const SSL *ssl); -SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ -SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); -SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); -void SSL_set_info_callback(SSL *ssl, - void (*cb) (const SSL *ssl, int type, int val)); -void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, - int val); -int SSL_state(const SSL *ssl); -void SSL_set_state(SSL *ssl, int state); - -void SSL_set_verify_result(SSL *ssl, long v); -long SSL_get_verify_result(const SSL *ssl); - -int SSL_set_ex_data(SSL *ssl, int idx, void *data); -void *SSL_get_ex_data(const SSL *ssl, int idx); -int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); - -int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); -void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); -int SSL_SESSION_get_ex_new_index(long argl, void *argp, - CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); - -int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); -void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); -int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); - -int SSL_get_ex_data_X509_STORE_CTX_idx(void); - -# define SSL_CTX_sess_set_cache_size(ctx,t) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) -# define SSL_CTX_sess_get_cache_size(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) -# define SSL_CTX_set_session_cache_mode(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) -# define SSL_CTX_get_session_cache_mode(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) - -# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) -# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) -# define SSL_CTX_get_read_ahead(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) -# define SSL_CTX_set_read_ahead(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) -# define SSL_CTX_get_max_cert_list(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) -# define SSL_CTX_set_max_cert_list(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) -# define SSL_get_max_cert_list(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) -# define SSL_set_max_cert_list(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) - -# define SSL_CTX_set_max_send_fragment(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) -# define SSL_set_max_send_fragment(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) - - /* NB: the keylength is only applicable when is_export is true */ -# ifndef OPENSSL_NO_RSA -void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, - RSA *(*cb) (SSL *ssl, int is_export, - int keylength)); - -void SSL_set_tmp_rsa_callback(SSL *ssl, - RSA *(*cb) (SSL *ssl, int is_export, - int keylength)); -# endif -# ifndef OPENSSL_NO_DH -void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -void SSL_set_tmp_dh_callback(SSL *ssl, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -# endif -# ifndef OPENSSL_NO_ECDH -void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, - EC_KEY *(*ecdh) (SSL *ssl, int is_export, - int keylength)); -void SSL_set_tmp_ecdh_callback(SSL *ssl, - EC_KEY *(*ecdh) (SSL *ssl, int is_export, - int keylength)); -# endif - -const COMP_METHOD *SSL_get_current_compression(SSL *s); -const COMP_METHOD *SSL_get_current_expansion(SSL *s); -const char *SSL_COMP_get_name(const COMP_METHOD *comp); -STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); -STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) - *meths); -void SSL_COMP_free_compression_methods(void); -int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); - -const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); - -/* TLS extensions functions */ -int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); - -int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, - void *arg); - -/* Pre-shared secret session resumption functions */ -int SSL_set_session_secret_cb(SSL *s, - tls_session_secret_cb_fn tls_session_secret_cb, - void *arg); - -void SSL_set_debug(SSL *s, int debug); -int SSL_cache_hit(SSL *s); -int SSL_is_server(SSL *s); - -SSL_CONF_CTX *SSL_CONF_CTX_new(void); -int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); -void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); -unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); -unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); -int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); - -void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); -void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); - -int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); -int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); -int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); - -# ifndef OPENSSL_NO_SSL_TRACE -void SSL_trace(int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); -const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); -# endif - -# ifndef OPENSSL_NO_UNIT_TEST -const struct openssl_ssl_test_functions *SSL_test_functions(void); -# endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_SSL_strings(void); - -/* Error codes for the SSL functions. */ - -/* Function codes. */ -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CLIENT_CERTIFICATE 100 -# define SSL_F_CLIENT_FINISHED 167 -# define SSL_F_CLIENT_HELLO 101 -# define SSL_F_CLIENT_MASTER_KEY 102 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_ACCEPT 246 -# define SSL_F_DTLS1_ADD_CERT_TO_BUF 295 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 316 -# define SSL_F_DTLS1_CLIENT_HELLO 248 -# define SSL_F_DTLS1_CONNECT 249 -# define SSL_F_DTLS1_ENC 250 -# define SSL_F_DTLS1_GET_HELLO_VERIFY 251 -# define SSL_F_DTLS1_GET_MESSAGE 252 -# define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT 253 -# define SSL_F_DTLS1_GET_RECORD 254 -# define SSL_F_DTLS1_HANDLE_TIMEOUT 297 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 259 -# define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST 260 -# define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE 261 -# define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE 262 -# define SSL_F_DTLS1_SEND_CLIENT_VERIFY 263 -# define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST 264 -# define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE 265 -# define SSL_F_DTLS1_SEND_SERVER_HELLO 266 -# define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE 267 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_GET_CLIENT_FINISHED 105 -# define SSL_F_GET_CLIENT_HELLO 106 -# define SSL_F_GET_CLIENT_MASTER_KEY 107 -# define SSL_F_GET_SERVER_FINISHED 108 -# define SSL_F_GET_SERVER_HELLO 109 -# define SSL_F_GET_SERVER_STATIC_DH_KEY 340 -# define SSL_F_GET_SERVER_VERIFY 110 -# define SSL_F_I2D_SSL_SESSION 111 -# define SSL_F_READ_N 112 -# define SSL_F_REQUEST_CERTIFICATE 113 -# define SSL_F_SERVER_FINISH 239 -# define SSL_F_SERVER_HELLO 114 -# define SSL_F_SERVER_VERIFY 240 -# define SSL_F_SSL23_ACCEPT 115 -# define SSL_F_SSL23_CLIENT_HELLO 116 -# define SSL_F_SSL23_CONNECT 117 -# define SSL_F_SSL23_GET_CLIENT_HELLO 118 -# define SSL_F_SSL23_GET_SERVER_HELLO 119 -# define SSL_F_SSL23_PEEK 237 -# define SSL_F_SSL23_READ 120 -# define SSL_F_SSL23_WRITE 121 -# define SSL_F_SSL2_ACCEPT 122 -# define SSL_F_SSL2_CONNECT 123 -# define SSL_F_SSL2_ENC_INIT 124 -# define SSL_F_SSL2_GENERATE_KEY_MATERIAL 241 -# define SSL_F_SSL2_PEEK 234 -# define SSL_F_SSL2_READ 125 -# define SSL_F_SSL2_READ_INTERNAL 236 -# define SSL_F_SSL2_SET_CERTIFICATE 126 -# define SSL_F_SSL2_WRITE 127 -# define SSL_F_SSL3_ACCEPT 128 -# define SSL_F_SSL3_ADD_CERT_TO_BUF 296 -# define SSL_F_SSL3_CALLBACK_CTRL 233 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CHECK_CLIENT_HELLO 304 -# define SSL_F_SSL3_CHECK_FINISHED 339 -# define SSL_F_SSL3_CLIENT_HELLO 131 -# define SSL_F_SSL3_CONNECT 132 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 134 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 -# define SSL_F_SSL3_GET_CERT_STATUS 289 -# define SSL_F_SSL3_GET_CERT_VERIFY 136 -# define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137 -# define SSL_F_SSL3_GET_CLIENT_HELLO 138 -# define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139 -# define SSL_F_SSL3_GET_FINISHED 140 -# define SSL_F_SSL3_GET_KEY_EXCHANGE 141 -# define SSL_F_SSL3_GET_MESSAGE 142 -# define SSL_F_SSL3_GET_NEW_SESSION_TICKET 283 -# define SSL_F_SSL3_GET_NEXT_PROTO 306 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144 -# define SSL_F_SSL3_GET_SERVER_DONE 145 -# define SSL_F_SSL3_GET_SERVER_HELLO 146 -# define SSL_F_SSL3_HANDSHAKE_MAC 285 -# define SSL_F_SSL3_NEW_SESSION_TICKET 287 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_PEEK 235 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150 -# define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151 -# define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152 -# define SSL_F_SSL3_SEND_CLIENT_VERIFY 153 -# define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154 -# define SSL_F_SSL3_SEND_SERVER_HELLO 242 -# define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 318 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_INST 222 -# define SSL_F_SSL_CERT_INSTANTIATE 214 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_PURPOSE 226 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TRUST 229 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SERVER_SEND_CERT 182 -# define SSL_F_SSL_GET_SERVER_SEND_PKEY 317 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT 281 -# define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT 282 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187 -# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SESS_CERT_NEW 225 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_PURPOSE 227 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TRUST 228 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_UNDEFINED_CONST_FUNCTION 243 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS1_CERT_VERIFY_MAC 286 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274 -# define SSL_F_TLS1_ENC 210 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_HEARTBEAT 315 -# define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275 -# define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_WRITE_PENDING 212 - -/* Reason codes. */ -# define SSL_R_APP_DATA_IN_HANDSHAKE 100 -# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_BAD_ALERT_RECORD 101 -# define SSL_R_BAD_AUTHENTICATION_TYPE 102 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_CHECKSUM 104 -# define SSL_R_BAD_DATA 390 -# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 -# define SSL_R_BAD_DECOMPRESSION 107 -# define SSL_R_BAD_DH_G_LENGTH 108 -# define SSL_R_BAD_DH_G_VALUE 375 -# define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 -# define SSL_R_BAD_DH_PUB_KEY_VALUE 393 -# define SSL_R_BAD_DH_P_LENGTH 110 -# define SSL_R_BAD_DH_P_VALUE 395 -# define SSL_R_BAD_DIGEST_LENGTH 111 -# define SSL_R_BAD_DSA_SIGNATURE 112 -# define SSL_R_BAD_ECC_CERT 304 -# define SSL_R_BAD_ECDSA_SIGNATURE 305 -# define SSL_R_BAD_ECPOINT 306 -# define SSL_R_BAD_HANDSHAKE_LENGTH 332 -# define SSL_R_BAD_HELLO_REQUEST 105 -# define SSL_R_BAD_LENGTH 271 -# define SSL_R_BAD_MAC_DECODE 113 -# define SSL_R_BAD_MAC_LENGTH 333 -# define SSL_R_BAD_MESSAGE_TYPE 114 -# define SSL_R_BAD_PACKET_LENGTH 115 -# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 -# define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 316 -# define SSL_R_BAD_RESPONSE_ARGUMENT 117 -# define SSL_R_BAD_RSA_DECRYPT 118 -# define SSL_R_BAD_RSA_ENCRYPT 119 -# define SSL_R_BAD_RSA_E_LENGTH 120 -# define SSL_R_BAD_RSA_MODULUS_LENGTH 121 -# define SSL_R_BAD_RSA_SIGNATURE 122 -# define SSL_R_BAD_SIGNATURE 123 -# define SSL_R_BAD_SRP_A_LENGTH 347 -# define SSL_R_BAD_SRP_B_LENGTH 348 -# define SSL_R_BAD_SRP_G_LENGTH 349 -# define SSL_R_BAD_SRP_N_LENGTH 350 -# define SSL_R_BAD_SRP_PARAMETERS 371 -# define SSL_R_BAD_SRP_S_LENGTH 351 -# define SSL_R_BAD_SRTP_MKI_VALUE 352 -# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 -# define SSL_R_BAD_SSL_FILETYPE 124 -# define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125 -# define SSL_R_BAD_STATE 126 -# define SSL_R_BAD_VALUE 384 -# define SSL_R_BAD_WRITE_RETRY 127 -# define SSL_R_BIO_NOT_SET 128 -# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 -# define SSL_R_BN_LIB 130 -# define SSL_R_CA_DN_LENGTH_MISMATCH 131 -# define SSL_R_CA_DN_TOO_LONG 132 -# define SSL_R_CCS_RECEIVED_EARLY 133 -# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 -# define SSL_R_CERT_CB_ERROR 377 -# define SSL_R_CERT_LENGTH_MISMATCH 135 -# define SSL_R_CHALLENGE_IS_DIFFERENT 136 -# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 -# define SSL_R_CIPHER_TABLE_SRC_ERROR 139 -# define SSL_R_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_ID_IS_DIFFERENT 143 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_COOKIE_MISMATCH 308 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 372 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT 317 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322 -# define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 -# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS 355 -# define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION 356 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_PADDING 283 -# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 -# define SSL_R_INAPPROPRIATE_FALLBACK 373 -# define SSL_R_INCONSISTENT_COMPRESSION 340 -# define SSL_R_INVALID_CHALLENGE_LENGTH 158 -# define SSL_R_INVALID_COMMAND 280 -# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 -# define SSL_R_INVALID_NULL_CMD_NAME 385 -# define SSL_R_INVALID_PURPOSE 278 -# define SSL_R_INVALID_SERVERINFO_DATA 388 -# define SSL_R_INVALID_SRP_USERNAME 357 -# define SSL_R_INVALID_STATUS_RESPONSE 328 -# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 -# define SSL_R_INVALID_TRUST 279 -# define SSL_R_KEY_ARG_TOO_LONG 284 -# define SSL_R_KRB5 285 -# define SSL_R_KRB5_C_CC_PRINC 286 -# define SSL_R_KRB5_C_GET_CRED 287 -# define SSL_R_KRB5_C_INIT 288 -# define SSL_R_KRB5_C_MK_REQ 289 -# define SSL_R_KRB5_S_BAD_TICKET 290 -# define SSL_R_KRB5_S_INIT 291 -# define SSL_R_KRB5_S_RD_REQ 292 -# define SSL_R_KRB5_S_TKT_EXPIRED 293 -# define SSL_R_KRB5_S_TKT_NYV 294 -# define SSL_R_KRB5_S_TKT_SKEW 295 -# define SSL_R_LENGTH_MISMATCH 159 -# define SSL_R_LENGTH_TOO_SHORT 160 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MESSAGE_TOO_LONG 296 -# define SSL_R_MISSING_DH_DSA_CERT 162 -# define SSL_R_MISSING_DH_KEY 163 -# define SSL_R_MISSING_DH_RSA_CERT 164 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDH_CERT 382 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166 -# define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167 -# define SSL_R_MISSING_RSA_CERTIFICATE 168 -# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 -# define SSL_R_MISSING_RSA_SIGNING_CERT 170 -# define SSL_R_MISSING_SRP_PARAM 358 -# define SSL_R_MISSING_TMP_DH_KEY 171 -# define SSL_R_MISSING_TMP_ECDH_KEY 311 -# define SSL_R_MISSING_TMP_RSA_KEY 172 -# define SSL_R_MISSING_TMP_RSA_PKEY 173 -# define SSL_R_MISSING_VERIFY_MESSAGE 174 -# define SSL_R_MULTIPLE_SGC_RESTARTS 346 -# define SSL_R_NON_SSLV2_INITIAL_PACKET 175 -# define SSL_R_NO_CERTIFICATES_RETURNED 176 -# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 -# define SSL_R_NO_CERTIFICATE_RETURNED 178 -# define SSL_R_NO_CERTIFICATE_SET 179 -# define SSL_R_NO_CERTIFICATE_SPECIFIED 180 -# define SSL_R_NO_CIPHERS_AVAILABLE 181 -# define SSL_R_NO_CIPHERS_PASSED 182 -# define SSL_R_NO_CIPHERS_SPECIFIED 183 -# define SSL_R_NO_CIPHER_LIST 184 -# define SSL_R_NO_CIPHER_MATCH 185 -# define SSL_R_NO_CLIENT_CERT_METHOD 331 -# define SSL_R_NO_CLIENT_CERT_RECEIVED 186 -# define SSL_R_NO_COMPRESSION_SPECIFIED 187 -# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 -# define SSL_R_NO_METHOD_SPECIFIED 188 -# define SSL_R_NO_PEM_EXTENSIONS 389 -# define SSL_R_NO_PRIVATEKEY 189 -# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 -# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 -# define SSL_R_NO_PUBLICKEY 192 -# define SSL_R_NO_RENEGOTIATION 339 -# define SSL_R_NO_REQUIRED_DIGEST 324 -# define SSL_R_NO_SHARED_CIPHER 193 -# define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS 376 -# define SSL_R_NO_SRTP_PROFILES 359 -# define SSL_R_NO_VERIFY_CALLBACK 194 -# define SSL_R_NULL_SSL_CTX 195 -# define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 -# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 -# define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 387 -# define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 379 -# define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 -# define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 -# define SSL_R_PACKET_LENGTH_TOO_LONG 198 -# define SSL_R_PARSE_TLSEXT 227 -# define SSL_R_PATH_TOO_LONG 270 -# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 -# define SSL_R_PEER_ERROR 200 -# define SSL_R_PEER_ERROR_CERTIFICATE 201 -# define SSL_R_PEER_ERROR_NO_CERTIFICATE 202 -# define SSL_R_PEER_ERROR_NO_CIPHER 203 -# define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204 -# define SSL_R_PEM_NAME_BAD_PREFIX 391 -# define SSL_R_PEM_NAME_TOO_SHORT 392 -# define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205 -# define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206 -# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 -# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 -# define SSL_R_PSK_NO_CLIENT_CB 224 -# define SSL_R_PSK_NO_SERVER_CB 225 -# define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 208 -# define SSL_R_PUBLIC_KEY_IS_NOT_RSA 209 -# define SSL_R_PUBLIC_KEY_NOT_RSA 210 -# define SSL_R_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_READ_WRONG_PACKET_TYPE 212 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_LARGE 214 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_REQUIRED_CIPHER_MISSING 215 -# define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING 342 -# define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 216 -# define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 217 -# define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 218 -# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 -# define SSL_R_SERVERHELLO_TLSEXT 275 -# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 -# define SSL_R_SHORT_READ 219 -# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 -# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 -# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 -# define SSL_R_SRP_A_CALC 361 -# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 -# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 -# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 -# define SSL_R_SSL23_DOING_SESSION_ID_REUSE 221 -# define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 299 -# define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 321 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 -# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 -# define SSL_R_SSL3_SESSION_ID_TOO_SHORT 222 -# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 -# define SSL_R_SSL_HANDSHAKE_FAILURE 229 -# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 -# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 -# define SSL_R_SSL_SESSION_ID_CONFLICT 302 -# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 -# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 -# define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 231 -# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 -# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 -# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 232 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 -# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 -# define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 -# define SSL_R_TOO_MANY_WARN_ALERTS 409 -# define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 -# define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 -# define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 -# define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 237 -# define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 238 -# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 -# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 -# define SSL_R_UNABLE_TO_FIND_SSL_METHOD 240 -# define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 241 -# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 -# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 -# define SSL_R_UNEXPECTED_MESSAGE 244 -# define SSL_R_UNEXPECTED_RECORD 245 -# define SSL_R_UNINITIALIZED 276 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 253 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSUPPORTED_CIPHER 256 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_DIGEST_TYPE 326 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_WRITE_BIO_NOT_SET 260 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_MESSAGE_TYPE 262 -# define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ssl2.h b/ext/openssl/windows/x64/include/openssl/ssl2.h deleted file mode 100644 index 03c7dd8c..00000000 --- a/ext/openssl/windows/x64/include/openssl/ssl2.h +++ /dev/null @@ -1,265 +0,0 @@ -/* ssl/ssl2.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Protocol Version Codes */ -# define SSL2_VERSION 0x0002 -# define SSL2_VERSION_MAJOR 0x00 -# define SSL2_VERSION_MINOR 0x02 -/* #define SSL2_CLIENT_VERSION 0x0002 */ -/* #define SSL2_SERVER_VERSION 0x0002 */ - -/* Protocol Message Codes */ -# define SSL2_MT_ERROR 0 -# define SSL2_MT_CLIENT_HELLO 1 -# define SSL2_MT_CLIENT_MASTER_KEY 2 -# define SSL2_MT_CLIENT_FINISHED 3 -# define SSL2_MT_SERVER_HELLO 4 -# define SSL2_MT_SERVER_VERIFY 5 -# define SSL2_MT_SERVER_FINISHED 6 -# define SSL2_MT_REQUEST_CERTIFICATE 7 -# define SSL2_MT_CLIENT_CERTIFICATE 8 - -/* Error Message Codes */ -# define SSL2_PE_UNDEFINED_ERROR 0x0000 -# define SSL2_PE_NO_CIPHER 0x0001 -# define SSL2_PE_NO_CERTIFICATE 0x0002 -# define SSL2_PE_BAD_CERTIFICATE 0x0004 -# define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 - -/* Cipher Kind Values */ -# define SSL2_CK_NULL_WITH_MD5 0x02000000/* v3 */ -# define SSL2_CK_RC4_128_WITH_MD5 0x02010080 -# define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080 -# define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080 -# define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080 -# define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080 -# define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040 -# define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140/* v3 */ -# define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0 -# define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0/* v3 */ -# define SSL2_CK_RC4_64_WITH_MD5 0x02080080/* MS hack */ - -# define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800/* SSLeay */ -# define SSL2_CK_NULL 0x02ff0810/* SSLeay */ - -# define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1" -# define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5" -# define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5" -# define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5" -# define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5" -# define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5" -# define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5" -# define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5" -# define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA" -# define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5" -# define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA" -# define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5" - -# define SSL2_TXT_NULL "NULL" - -/* Flags for the SSL_CIPHER.algorithm2 field */ -# define SSL2_CF_5_BYTE_ENC 0x01 -# define SSL2_CF_8_BYTE_ENC 0x02 - -/* Certificate Type Codes */ -# define SSL2_CT_X509_CERTIFICATE 0x01 - -/* Authentication Type Code */ -# define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01 - -# define SSL2_MAX_SSL_SESSION_ID_LENGTH 32 - -/* Upper/Lower Bounds */ -# define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256 -# ifdef OPENSSL_SYS_MPE -# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u -# else -# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u - /* 2^15-1 */ -# endif -# define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383/* 2^14-1 */ - -# define SSL2_CHALLENGE_LENGTH 16 -/* - * #define SSL2_CHALLENGE_LENGTH 32 - */ -# define SSL2_MIN_CHALLENGE_LENGTH 16 -# define SSL2_MAX_CHALLENGE_LENGTH 32 -# define SSL2_CONNECTION_ID_LENGTH 16 -# define SSL2_MAX_CONNECTION_ID_LENGTH 16 -# define SSL2_SSL_SESSION_ID_LENGTH 16 -# define SSL2_MAX_CERT_CHALLENGE_LENGTH 32 -# define SSL2_MIN_CERT_CHALLENGE_LENGTH 16 -# define SSL2_MAX_KEY_MATERIAL_LENGTH 24 - -# ifndef HEADER_SSL_LOCL_H -# define CERT char -# endif - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct ssl2_state_st { - int three_byte_header; - int clear_text; /* clear text */ - int escape; /* not used in SSLv2 */ - int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */ - /* - * non-blocking io info, used to make sure the same args were passwd - */ - unsigned int wnum; /* number of bytes sent so far */ - int wpend_tot; - const unsigned char *wpend_buf; - int wpend_off; /* offset to data to write */ - int wpend_len; /* number of bytes passwd to write */ - int wpend_ret; /* number of bytes to return to caller */ - /* buffer raw data */ - int rbuf_left; - int rbuf_offs; - unsigned char *rbuf; - unsigned char *wbuf; - unsigned char *write_ptr; /* used to point to the start due to 2/3 byte - * header. */ - unsigned int padding; - unsigned int rlength; /* passed to ssl2_enc */ - int ract_data_length; /* Set when things are encrypted. */ - unsigned int wlength; /* passed to ssl2_enc */ - int wact_data_length; /* Set when things are decrypted. */ - unsigned char *ract_data; - unsigned char *wact_data; - unsigned char *mac_data; - unsigned char *read_key; - unsigned char *write_key; - /* Stuff specifically to do with this SSL session */ - unsigned int challenge_length; - unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH]; - unsigned int conn_id_length; - unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH]; - unsigned int key_material_length; - unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2]; - unsigned long read_sequence; - unsigned long write_sequence; - struct { - unsigned int conn_id_length; - unsigned int cert_type; - unsigned int cert_length; - unsigned int csl; - unsigned int clear; - unsigned int enc; - unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH]; - unsigned int cipher_spec_length; - unsigned int session_id_length; - unsigned int clen; - unsigned int rlen; - } tmp; -} SSL2_STATE; - -# endif - -/* SSLv2 */ -/* client */ -# define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT) -# define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT) -# define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT) -# define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT) -# define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT) -/* server */ -# define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT) -# define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT) -# define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT) -# define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT) -# define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ssl23.h b/ext/openssl/windows/x64/include/openssl/ssl23.h deleted file mode 100644 index 9de4685a..00000000 --- a/ext/openssl/windows/x64/include/openssl/ssl23.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ssl/ssl23.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SSL23_H -# define HEADER_SSL23_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * client - */ -/* write to server */ -# define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) -# define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) -/* read from server */ -# define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) -# define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) - -/* server */ -/* read from client */ -# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) -# define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ssl3.h b/ext/openssl/windows/x64/include/openssl/ssl3.h deleted file mode 100644 index e681d50a..00000000 --- a/ext/openssl/windows/x64/include/openssl/ssl3.h +++ /dev/null @@ -1,774 +0,0 @@ -/* ssl/ssl3.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H - -# ifndef OPENSSL_NO_COMP -# include -# endif -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Signalling cipher suite value from RFC 5746 - * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - */ -# define SSL3_CK_SCSV 0x030000FF - -/* - * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 - * (TLS_FALLBACK_SCSV) - */ -# define SSL3_CK_FALLBACK_SCSV 0x03005600 - -# define SSL3_CK_RSA_NULL_MD5 0x03000001 -# define SSL3_CK_RSA_NULL_SHA 0x03000002 -# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 -# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 -# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 -# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 -# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 -# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 -# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 -# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A - -# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B -# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C -# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D -# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E -# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F -# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 - -# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011 -# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA -# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012 -# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA -# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013 -# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA -# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014 -# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA -# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015 -# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA -# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016 -# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA - -# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 -# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 -# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 -# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A -# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B - -# if 0 -# define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C -# define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D -# if 0 /* Because it clashes with KRB5, is never - * used any more, and is safe to remove - * according to David Hopwood - * of the - * ietf-tls list */ -# define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E -# endif -# endif - -/* - * VRS Additional Kerberos5 entries - */ -# define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E -# define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F -# define SSL3_CK_KRB5_RC4_128_SHA 0x03000020 -# define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021 -# define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022 -# define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023 -# define SSL3_CK_KRB5_RC4_128_MD5 0x03000024 -# define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025 - -# define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026 -# define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027 -# define SSL3_CK_KRB5_RC4_40_SHA 0x03000028 -# define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029 -# define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A -# define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B - -# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" -# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" -# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" -# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" -# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" -# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" - -# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" - -/* - * This next block of six "EDH" labels is for backward compatibility with - * older versions of OpenSSL. New code should use the six "DHE" labels above - * instead: - */ -# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" -# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" -# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" - -# if 0 -# define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA" -# define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA" -# define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA" -# endif - -# define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA" -# define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA" -# define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA" -# define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA" -# define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5" -# define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5" -# define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5" -# define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5" - -# define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA" -# define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA" -# define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA" -# define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5" -# define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5" -# define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5" - -# define SSL3_SSL_SESSION_ID_LENGTH 32 -# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 - -# define SSL3_MASTER_SECRET_SIZE 48 -# define SSL3_RANDOM_SIZE 32 -# define SSL3_SESSION_ID_SIZE 32 -# define SSL3_RT_HEADER_LENGTH 5 - -# define SSL3_HM_HEADER_LENGTH 4 - -# ifndef SSL3_ALIGN_PAYLOAD - /* - * Some will argue that this increases memory footprint, but it's not - * actually true. Point is that malloc has to return at least 64-bit aligned - * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. - * Suggested pre-gaping simply moves these wasted bytes from the end of - * allocated region to its front, but makes data payload aligned, which - * improves performance:-) - */ -# define SSL3_ALIGN_PAYLOAD 8 -# else -# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 -# error "insane SSL3_ALIGN_PAYLOAD" -# undef SSL3_ALIGN_PAYLOAD -# endif -# endif - -/* - * This is the maximum MAC (digest) size used by the SSL library. Currently - * maximum of 20 is used by SHA1, but we reserve for future extension for - * 512-bit hashes. - */ - -# define SSL3_RT_MAX_MD_SIZE 64 - -/* - * Maximum block size used in all ciphersuites. Currently 16 for AES. - */ - -# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 - -# define SSL3_RT_MAX_EXTRA (16384) - -/* Maximum plaintext length: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_PLAIN_LENGTH 16384 -/* Maximum compression overhead: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 - -/* - * The standards give a maximum encryption overhead of 1024 bytes. In - * practice the value is lower than this. The overhead is the maximum number - * of padding bytes (256) plus the mac size. - */ -# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) - -/* - * OpenSSL currently only uses a padding length of at most one block so the - * send overhead is smaller. - */ - -# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ - (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) - -/* If compression isn't used don't include the compression overhead */ - -# ifdef OPENSSL_NO_COMP -# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH -# else -# define SSL3_RT_MAX_COMPRESSED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) -# endif -# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) -# define SSL3_RT_MAX_PACKET_SIZE \ - (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) - -# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" -# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" - -# define SSL3_VERSION 0x0300 -# define SSL3_VERSION_MAJOR 0x03 -# define SSL3_VERSION_MINOR 0x00 - -# define SSL3_RT_CHANGE_CIPHER_SPEC 20 -# define SSL3_RT_ALERT 21 -# define SSL3_RT_HANDSHAKE 22 -# define SSL3_RT_APPLICATION_DATA 23 -# define TLS1_RT_HEARTBEAT 24 - -/* Pseudo content types to indicate additional parameters */ -# define TLS1_RT_CRYPTO 0x1000 -# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) -# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) -# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) -# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) - -# define TLS1_RT_CRYPTO_READ 0x0000 -# define TLS1_RT_CRYPTO_WRITE 0x0100 -# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) -# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) -# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) -# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) - -/* Pseudo content type for SSL/TLS header info */ -# define SSL3_RT_HEADER 0x100 - -# define SSL3_AL_WARNING 1 -# define SSL3_AL_FATAL 2 - -# define SSL3_AD_CLOSE_NOTIFY 0 -# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ -# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ -# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ -# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ -# define SSL3_AD_NO_CERTIFICATE 41 -# define SSL3_AD_BAD_CERTIFICATE 42 -# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 -# define SSL3_AD_CERTIFICATE_REVOKED 44 -# define SSL3_AD_CERTIFICATE_EXPIRED 45 -# define SSL3_AD_CERTIFICATE_UNKNOWN 46 -# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ - -# define TLS1_HB_REQUEST 1 -# define TLS1_HB_RESPONSE 2 - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct ssl3_record_st { - /* type of record */ - /* - * r - */ int type; - /* How many bytes available */ - /* - * rw - */ unsigned int length; - /* read/write offset into 'buf' */ - /* - * r - */ unsigned int off; - /* pointer to the record data */ - /* - * rw - */ unsigned char *data; - /* where the decode bytes are */ - /* - * rw - */ unsigned char *input; - /* only used with decompression - malloc()ed */ - /* - * r - */ unsigned char *comp; - /* epoch number, needed by DTLS1 */ - /* - * r - */ unsigned long epoch; - /* sequence number, needed by DTLS1 */ - /* - * r - */ unsigned char seq_num[8]; -} SSL3_RECORD; - -typedef struct ssl3_buffer_st { - /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */ - unsigned char *buf; - /* buffer size */ - size_t len; - /* where to 'copy from' */ - int offset; - /* how many bytes left */ - int left; -} SSL3_BUFFER; - -# endif - -# define SSL3_CT_RSA_SIGN 1 -# define SSL3_CT_DSS_SIGN 2 -# define SSL3_CT_RSA_FIXED_DH 3 -# define SSL3_CT_DSS_FIXED_DH 4 -# define SSL3_CT_RSA_EPHEMERAL_DH 5 -# define SSL3_CT_DSS_EPHEMERAL_DH 6 -# define SSL3_CT_FORTEZZA_DMS 20 -/* - * SSL3_CT_NUMBER is used to size arrays and it must be large enough to - * contain all of the cert types defined either for SSLv3 and TLSv1. - */ -# define SSL3_CT_NUMBER 9 - -# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 -# define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 -# define SSL3_FLAGS_POP_BUFFER 0x0004 -# define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 -# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 -# define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 -/* - * Set when the handshake is ready to process peer's ChangeCipherSpec message. - * Cleared after the message has been processed. - */ -# define SSL3_FLAGS_CCS_OK 0x0080 - -/* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */ -# define SSL3_FLAGS_SGC_RESTART_DONE 0x0040 - -# ifndef OPENSSL_NO_SSL_INTERN - -typedef struct ssl3_state_st { - long flags; - int delay_buf_pop_ret; - unsigned char read_sequence[8]; - int read_mac_secret_size; - unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; - unsigned char write_sequence[8]; - int write_mac_secret_size; - unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; - unsigned char server_random[SSL3_RANDOM_SIZE]; - unsigned char client_random[SSL3_RANDOM_SIZE]; - /* flags for countermeasure against known-IV weakness */ - int need_empty_fragments; - int empty_fragment_done; - /* The value of 'extra' when the buffers were initialized */ - int init_extra; - SSL3_BUFFER rbuf; /* read IO goes into here */ - SSL3_BUFFER wbuf; /* write IO goes into here */ - SSL3_RECORD rrec; /* each decoded record goes in here */ - SSL3_RECORD wrec; /* goes out from here */ - /* - * storage for Alert/Handshake protocol data received but not yet - * processed by ssl3_read_bytes: - */ - unsigned char alert_fragment[2]; - unsigned int alert_fragment_len; - unsigned char handshake_fragment[4]; - unsigned int handshake_fragment_len; - /* partial write - check the numbers match */ - unsigned int wnum; /* number of bytes sent so far */ - int wpend_tot; /* number bytes written */ - int wpend_type; - int wpend_ret; /* number of bytes submitted */ - const unsigned char *wpend_buf; - /* used during startup, digest all incoming/outgoing packets */ - BIO *handshake_buffer; - /* - * When set of handshake digests is determined, buffer is hashed and - * freed and MD_CTX-es for all required digests are stored in this array - */ - EVP_MD_CTX **handshake_dgst; - /* - * Set whenever an expected ChangeCipherSpec message is processed. - * Unset when the peer's Finished message is received. - * Unexpected ChangeCipherSpec messages trigger a fatal alert. - */ - int change_cipher_spec; - int warn_alert; - int fatal_alert; - /* - * we allow one fatal and one warning alert to be outstanding, send close - * alert via the warning alert - */ - int alert_dispatch; - unsigned char send_alert[2]; - /* - * This flag is set when we should renegotiate ASAP, basically when there - * is no more data in the read or write buffers - */ - int renegotiate; - int total_renegotiations; - int num_renegotiations; - int in_read_app_data; - /* - * Opaque PRF input as used for the current handshake. These fields are - * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they - * are merely present to improve binary compatibility) - */ - void *client_opaque_prf_input; - size_t client_opaque_prf_input_len; - void *server_opaque_prf_input; - size_t server_opaque_prf_input_len; - struct { - /* actually only needs to be 16+20 */ - unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2]; - /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ - unsigned char finish_md[EVP_MAX_MD_SIZE * 2]; - int finish_md_len; - unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2]; - int peer_finish_md_len; - unsigned long message_size; - int message_type; - /* used to hold the new cipher we are going to use */ - const SSL_CIPHER *new_cipher; -# ifndef OPENSSL_NO_DH - DH *dh; -# endif -# ifndef OPENSSL_NO_ECDH - EC_KEY *ecdh; /* holds short lived ECDH key */ -# endif - /* used when SSL_ST_FLUSH_DATA is entered */ - int next_state; - int reuse_message; - /* used for certificate requests */ - int cert_req; - int ctype_num; - char ctype[SSL3_CT_NUMBER]; - STACK_OF(X509_NAME) *ca_names; - int use_rsa_tmp; - int key_block_length; - unsigned char *key_block; - const EVP_CIPHER *new_sym_enc; - const EVP_MD *new_hash; - int new_mac_pkey_type; - int new_mac_secret_size; -# ifndef OPENSSL_NO_COMP - const SSL_COMP *new_compression; -# else - char *new_compression; -# endif - int cert_request; - } tmp; - - /* Connection binding to prevent renegotiation attacks */ - unsigned char previous_client_finished[EVP_MAX_MD_SIZE]; - unsigned char previous_client_finished_len; - unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; - unsigned char previous_server_finished_len; - int send_connection_binding; /* TODOEKR */ - -# ifndef OPENSSL_NO_NEXTPROTONEG - /* - * Set if we saw the Next Protocol Negotiation extension from our peer. - */ - int next_proto_neg_seen; -# endif - -# ifndef OPENSSL_NO_TLSEXT -# ifndef OPENSSL_NO_EC - /* - * This is set to true if we believe that this is a version of Safari - * running on OS X 10.6 or newer. We wish to know this because Safari on - * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. - */ - char is_probably_safari; -# endif /* !OPENSSL_NO_EC */ - - /* - * ALPN information (we are in the process of transitioning from NPN to - * ALPN.) - */ - - /* - * In a server these point to the selected ALPN protocol after the - * ClientHello has been processed. In a client these contain the protocol - * that the server selected once the ServerHello has been processed. - */ - unsigned char *alpn_selected; - unsigned alpn_selected_len; -# endif /* OPENSSL_NO_TLSEXT */ -} SSL3_STATE; - -# endif - -/* SSLv3 */ -/* - * client - */ -/* extra state */ -# define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT) -# ifndef OPENSSL_NO_SCTP -# define DTLS1_SCTP_ST_CW_WRITE_SOCK (0x310|SSL_ST_CONNECT) -# define DTLS1_SCTP_ST_CR_READ_SOCK (0x320|SSL_ST_CONNECT) -# endif -/* write to server */ -# define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT) -# define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT) -/* read from server */ -# define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT) -# define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT) -# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT) -# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT) -# define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT) -# define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT) -# define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT) -# define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT) -/* write to server */ -# define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT) -# define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT) -# define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT) -# define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) -# define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) -# define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) -# define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) -# endif -# define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) -# define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) -/* read from server */ -# define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT) -# define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT) -# define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT) -# define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT) -# define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT) -# define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT) -# define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT) - -/* server */ -/* extra state */ -# define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT) -# ifndef OPENSSL_NO_SCTP -# define DTLS1_SCTP_ST_SW_WRITE_SOCK (0x310|SSL_ST_ACCEPT) -# define DTLS1_SCTP_ST_SR_READ_SOCK (0x320|SSL_ST_ACCEPT) -# endif -/* read from client */ -/* Do not change the number values, they do matter */ -# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT) -/* write to client */ -# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT) -# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT) -# define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT) -# define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT) -# define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT) -# define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT) -# define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT) -/* read from client */ -# define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT) -# define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT) -# define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) -# define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) -# define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) -# endif -# define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) -# define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) -/* write to client */ -# define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT) -# define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT) -# define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT) -# define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT) -# define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT) - -# define SSL3_MT_HELLO_REQUEST 0 -# define SSL3_MT_CLIENT_HELLO 1 -# define SSL3_MT_SERVER_HELLO 2 -# define SSL3_MT_NEWSESSION_TICKET 4 -# define SSL3_MT_CERTIFICATE 11 -# define SSL3_MT_SERVER_KEY_EXCHANGE 12 -# define SSL3_MT_CERTIFICATE_REQUEST 13 -# define SSL3_MT_SERVER_DONE 14 -# define SSL3_MT_CERTIFICATE_VERIFY 15 -# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 -# define SSL3_MT_FINISHED 20 -# define SSL3_MT_CERTIFICATE_STATUS 22 -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_MT_NEXT_PROTO 67 -# endif -# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 - -# define SSL3_MT_CCS 1 - -/* These are used when changing over to a new cipher */ -# define SSL3_CC_READ 0x01 -# define SSL3_CC_WRITE 0x02 -# define SSL3_CC_CLIENT 0x10 -# define SSL3_CC_SERVER 0x20 -# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) -# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/stack.h b/ext/openssl/windows/x64/include/openssl/stack.h deleted file mode 100644 index eb072166..00000000 --- a/ext/openssl/windows/x64/include/openssl/stack.h +++ /dev/null @@ -1,107 +0,0 @@ -/* crypto/stack/stack.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_STACK_H -# define HEADER_STACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stack_st { - int num; - char **data; - int sorted; - int num_alloc; - int (*comp) (const void *, const void *); -} _STACK; /* Use STACK_OF(...) instead */ - -# define M_sk_num(sk) ((sk) ? (sk)->num:-1) -# define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) - -int sk_num(const _STACK *); -void *sk_value(const _STACK *, int); - -void *sk_set(_STACK *, int, void *); - -_STACK *sk_new(int (*cmp) (const void *, const void *)); -_STACK *sk_new_null(void); -void sk_free(_STACK *); -void sk_pop_free(_STACK *st, void (*func) (void *)); -_STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *)); -int sk_insert(_STACK *sk, void *data, int where); -void *sk_delete(_STACK *st, int loc); -void *sk_delete_ptr(_STACK *st, void *p); -int sk_find(_STACK *st, void *data); -int sk_find_ex(_STACK *st, void *data); -int sk_push(_STACK *st, void *data); -int sk_unshift(_STACK *st, void *data); -void *sk_shift(_STACK *st); -void *sk_pop(_STACK *st); -void sk_zero(_STACK *st); -int (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *))) - (const void *, const void *); -_STACK *sk_dup(_STACK *st); -void sk_sort(_STACK *st); -int sk_is_sorted(const _STACK *st); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/symhacks.h b/ext/openssl/windows/x64/include/openssl/symhacks.h deleted file mode 100644 index 239fa4fb..00000000 --- a/ext/openssl/windows/x64/include/openssl/symhacks.h +++ /dev/null @@ -1,516 +0,0 @@ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H - -# include - -/* - * Hacks to solve the problem with linkers incapable of handling very long - * symbol names. In the case of VMS, the limit is 31 characters on VMS for - * VAX. - */ -/* - * Note that this affects util/libeay.num and util/ssleay.num... you may - * change those manually, but that's not recommended, as those files are - * controlled centrally and updated on Unix, and the central definition may - * disagree with yours, which in turn may come with shareable library - * incompatibilities. - */ -# ifdef OPENSSL_SYS_VMS - -/* Hack a long name in crypto/ex_data.c */ -# undef CRYPTO_get_ex_data_implementation -# define CRYPTO_get_ex_data_implementation CRYPTO_get_ex_data_impl -# undef CRYPTO_set_ex_data_implementation -# define CRYPTO_set_ex_data_implementation CRYPTO_set_ex_data_impl - -/* Hack a long name in crypto/asn1/a_mbstr.c */ -# undef ASN1_STRING_set_default_mask_asc -# define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc - -# if 0 /* No longer needed, since safestack macro - * magic does the job */ -/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */ -# undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO -# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF -# undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO -# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF -# endif - -# if 0 /* No longer needed, since safestack macro - * magic does the job */ -/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */ -# undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO -# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECINF -# undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO -# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECINF -# endif - -# if 0 /* No longer needed, since safestack macro - * magic does the job */ -/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */ -# undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION -# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION i2d_ASN1_SET_OF_ACC_DESC -# undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION -# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION d2i_ASN1_SET_OF_ACC_DESC -# endif - -/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */ -# undef PEM_read_NETSCAPE_CERT_SEQUENCE -# define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ -# undef PEM_write_NETSCAPE_CERT_SEQUENCE -# define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ -# undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE -# define PEM_read_bio_NETSCAPE_CERT_SEQUENCE PEM_read_bio_NS_CERT_SEQ -# undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE -# define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ -# undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE -# define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ - -/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */ -# undef PEM_read_PKCS8_PRIV_KEY_INFO -# define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO -# undef PEM_write_PKCS8_PRIV_KEY_INFO -# define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO -# undef PEM_read_bio_PKCS8_PRIV_KEY_INFO -# define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO -# undef PEM_write_bio_PKCS8_PRIV_KEY_INFO -# define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO -# undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO -# define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO PEM_wrt_cb_bio_P8_PRIV_KEY_INFO - -/* Hack other PEM names */ -# undef PEM_write_bio_PKCS8PrivateKey_nid -# define PEM_write_bio_PKCS8PrivateKey_nid PEM_write_bio_PKCS8PrivKey_nid - -/* Hack some long X509 names */ -# undef X509_REVOKED_get_ext_by_critical -# define X509_REVOKED_get_ext_by_critical X509_REVOKED_get_ext_by_critic -# undef X509_policy_tree_get0_user_policies -# define X509_policy_tree_get0_user_policies X509_pcy_tree_get0_usr_policies -# undef X509_policy_node_get0_qualifiers -# define X509_policy_node_get0_qualifiers X509_pcy_node_get0_qualifiers -# undef X509_STORE_CTX_get_explicit_policy -# define X509_STORE_CTX_get_explicit_policy X509_STORE_CTX_get_expl_policy -# undef X509_STORE_CTX_get0_current_issuer -# define X509_STORE_CTX_get0_current_issuer X509_STORE_CTX_get0_cur_issuer - -/* Hack some long CRYPTO names */ -# undef CRYPTO_set_dynlock_destroy_callback -# define CRYPTO_set_dynlock_destroy_callback CRYPTO_set_dynlock_destroy_cb -# undef CRYPTO_set_dynlock_create_callback -# define CRYPTO_set_dynlock_create_callback CRYPTO_set_dynlock_create_cb -# undef CRYPTO_set_dynlock_lock_callback -# define CRYPTO_set_dynlock_lock_callback CRYPTO_set_dynlock_lock_cb -# undef CRYPTO_get_dynlock_lock_callback -# define CRYPTO_get_dynlock_lock_callback CRYPTO_get_dynlock_lock_cb -# undef CRYPTO_get_dynlock_destroy_callback -# define CRYPTO_get_dynlock_destroy_callback CRYPTO_get_dynlock_destroy_cb -# undef CRYPTO_get_dynlock_create_callback -# define CRYPTO_get_dynlock_create_callback CRYPTO_get_dynlock_create_cb -# undef CRYPTO_set_locked_mem_ex_functions -# define CRYPTO_set_locked_mem_ex_functions CRYPTO_set_locked_mem_ex_funcs -# undef CRYPTO_get_locked_mem_ex_functions -# define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs - -/* Hack some long SSL/TLS names */ -# undef SSL_CTX_set_default_verify_paths -# define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths -# undef SSL_get_ex_data_X509_STORE_CTX_idx -# define SSL_get_ex_data_X509_STORE_CTX_idx SSL_get_ex_d_X509_STORE_CTX_idx -# undef SSL_add_file_cert_subjects_to_stack -# define SSL_add_file_cert_subjects_to_stack SSL_add_file_cert_subjs_to_stk -# undef SSL_add_dir_cert_subjects_to_stack -# define SSL_add_dir_cert_subjects_to_stack SSL_add_dir_cert_subjs_to_stk -# undef SSL_CTX_use_certificate_chain_file -# define SSL_CTX_use_certificate_chain_file SSL_CTX_use_cert_chain_file -# undef SSL_CTX_set_cert_verify_callback -# define SSL_CTX_set_cert_verify_callback SSL_CTX_set_cert_verify_cb -# undef SSL_CTX_set_default_passwd_cb_userdata -# define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud -# undef SSL_COMP_get_compression_methods -# define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods -# undef SSL_COMP_set0_compression_methods -# define SSL_COMP_set0_compression_methods SSL_COMP_set0_compress_methods -# undef SSL_COMP_free_compression_methods -# define SSL_COMP_free_compression_methods SSL_COMP_free_compress_methods -# undef ssl_add_clienthello_renegotiate_ext -# define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext -# undef ssl_add_serverhello_renegotiate_ext -# define ssl_add_serverhello_renegotiate_ext ssl_add_serverhello_reneg_ext -# undef ssl_parse_clienthello_renegotiate_ext -# define ssl_parse_clienthello_renegotiate_ext ssl_parse_clienthello_reneg_ext -# undef ssl_parse_serverhello_renegotiate_ext -# define ssl_parse_serverhello_renegotiate_ext ssl_parse_serverhello_reneg_ext -# undef SSL_srp_server_param_with_username -# define SSL_srp_server_param_with_username SSL_srp_server_param_with_un -# undef SSL_CTX_set_srp_client_pwd_callback -# define SSL_CTX_set_srp_client_pwd_callback SSL_CTX_set_srp_client_pwd_cb -# undef SSL_CTX_set_srp_verify_param_callback -# define SSL_CTX_set_srp_verify_param_callback SSL_CTX_set_srp_vfy_param_cb -# undef SSL_CTX_set_srp_username_callback -# define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb -# undef ssl_add_clienthello_use_srtp_ext -# define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext -# undef ssl_add_serverhello_use_srtp_ext -# define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext -# undef ssl_parse_clienthello_use_srtp_ext -# define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext -# undef ssl_parse_serverhello_use_srtp_ext -# define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext -# undef SSL_CTX_set_next_protos_advertised_cb -# define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb -# undef SSL_CTX_set_next_proto_select_cb -# define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb - -# undef tls1_send_server_supplemental_data -# define tls1_send_server_supplemental_data tls1_send_server_suppl_data -# undef tls1_send_client_supplemental_data -# define tls1_send_client_supplemental_data tls1_send_client_suppl_data -# undef tls1_get_server_supplemental_data -# define tls1_get_server_supplemental_data tls1_get_server_suppl_data -# undef tls1_get_client_supplemental_data -# define tls1_get_client_supplemental_data tls1_get_client_suppl_data - -# undef ssl3_cbc_record_digest_supported -# define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support -# undef ssl_check_clienthello_tlsext_late -# define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late -# undef ssl_check_clienthello_tlsext_early -# define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early - -/* Hack some RSA long names */ -# undef RSA_padding_check_PKCS1_OAEP_mgf1 -# define RSA_padding_check_PKCS1_OAEP_mgf1 RSA_pad_check_PKCS1_OAEP_mgf1 - -/* Hack some ENGINE long names */ -# undef ENGINE_get_default_BN_mod_exp_crt -# define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt -# undef ENGINE_set_default_BN_mod_exp_crt -# define ENGINE_set_default_BN_mod_exp_crt ENGINE_set_def_BN_mod_exp_crt -# undef ENGINE_set_load_privkey_function -# define ENGINE_set_load_privkey_function ENGINE_set_load_privkey_fn -# undef ENGINE_get_load_privkey_function -# define ENGINE_get_load_privkey_function ENGINE_get_load_privkey_fn -# undef ENGINE_unregister_pkey_asn1_meths -# define ENGINE_unregister_pkey_asn1_meths ENGINE_unreg_pkey_asn1_meths -# undef ENGINE_register_all_pkey_asn1_meths -# define ENGINE_register_all_pkey_asn1_meths ENGINE_reg_all_pkey_asn1_meths -# undef ENGINE_set_default_pkey_asn1_meths -# define ENGINE_set_default_pkey_asn1_meths ENGINE_set_def_pkey_asn1_meths -# undef ENGINE_get_pkey_asn1_meth_engine -# define ENGINE_get_pkey_asn1_meth_engine ENGINE_get_pkey_asn1_meth_eng -# undef ENGINE_set_load_ssl_client_cert_function -# define ENGINE_set_load_ssl_client_cert_function \ - ENGINE_set_ld_ssl_clnt_cert_fn -# undef ENGINE_get_ssl_client_cert_function -# define ENGINE_get_ssl_client_cert_function ENGINE_get_ssl_client_cert_fn - -/* Hack some long OCSP names */ -# undef OCSP_REQUEST_get_ext_by_critical -# define OCSP_REQUEST_get_ext_by_critical OCSP_REQUEST_get_ext_by_crit -# undef OCSP_BASICRESP_get_ext_by_critical -# define OCSP_BASICRESP_get_ext_by_critical OCSP_BASICRESP_get_ext_by_crit -# undef OCSP_SINGLERESP_get_ext_by_critical -# define OCSP_SINGLERESP_get_ext_by_critical OCSP_SINGLERESP_get_ext_by_crit - -/* Hack some long DES names */ -# undef _ossl_old_des_ede3_cfb64_encrypt -# define _ossl_old_des_ede3_cfb64_encrypt _ossl_odes_ede3_cfb64_encrypt -# undef _ossl_old_des_ede3_ofb64_encrypt -# define _ossl_old_des_ede3_ofb64_encrypt _ossl_odes_ede3_ofb64_encrypt - -/* Hack some long EVP names */ -# undef OPENSSL_add_all_algorithms_noconf -# define OPENSSL_add_all_algorithms_noconf OPENSSL_add_all_algo_noconf -# undef OPENSSL_add_all_algorithms_conf -# define OPENSSL_add_all_algorithms_conf OPENSSL_add_all_algo_conf -# undef EVP_PKEY_meth_set_verify_recover -# define EVP_PKEY_meth_set_verify_recover EVP_PKEY_meth_set_vrfy_recover - -/* Hack some long EC names */ -# undef EC_GROUP_set_point_conversion_form -# define EC_GROUP_set_point_conversion_form EC_GROUP_set_point_conv_form -# undef EC_GROUP_get_point_conversion_form -# define EC_GROUP_get_point_conversion_form EC_GROUP_get_point_conv_form -# undef EC_GROUP_clear_free_all_extra_data -# define EC_GROUP_clear_free_all_extra_data EC_GROUP_clr_free_all_xtra_data -# undef EC_KEY_set_public_key_affine_coordinates -# define EC_KEY_set_public_key_affine_coordinates \ - EC_KEY_set_pub_key_aff_coords -# undef EC_POINT_set_Jprojective_coordinates_GFp -# define EC_POINT_set_Jprojective_coordinates_GFp \ - EC_POINT_set_Jproj_coords_GFp -# undef EC_POINT_get_Jprojective_coordinates_GFp -# define EC_POINT_get_Jprojective_coordinates_GFp \ - EC_POINT_get_Jproj_coords_GFp -# undef EC_POINT_set_affine_coordinates_GFp -# define EC_POINT_set_affine_coordinates_GFp EC_POINT_set_affine_coords_GFp -# undef EC_POINT_get_affine_coordinates_GFp -# define EC_POINT_get_affine_coordinates_GFp EC_POINT_get_affine_coords_GFp -# undef EC_POINT_set_compressed_coordinates_GFp -# define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp -# undef EC_POINT_set_affine_coordinates_GF2m -# define EC_POINT_set_affine_coordinates_GF2m EC_POINT_set_affine_coords_GF2m -# undef EC_POINT_get_affine_coordinates_GF2m -# define EC_POINT_get_affine_coordinates_GF2m EC_POINT_get_affine_coords_GF2m -# undef EC_POINT_set_compressed_coordinates_GF2m -# define EC_POINT_set_compressed_coordinates_GF2m \ - EC_POINT_set_compr_coords_GF2m -# undef ec_GF2m_simple_group_clear_finish -# define ec_GF2m_simple_group_clear_finish ec_GF2m_simple_grp_clr_finish -# undef ec_GF2m_simple_group_check_discriminant -# define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim -# undef ec_GF2m_simple_point_clear_finish -# define ec_GF2m_simple_point_clear_finish ec_GF2m_simple_pt_clr_finish -# undef ec_GF2m_simple_point_set_to_infinity -# define ec_GF2m_simple_point_set_to_infinity ec_GF2m_simple_pt_set_to_inf -# undef ec_GF2m_simple_points_make_affine -# define ec_GF2m_simple_points_make_affine ec_GF2m_simple_pts_make_affine -# undef ec_GF2m_simple_point_set_affine_coordinates -# define ec_GF2m_simple_point_set_affine_coordinates \ - ec_GF2m_smp_pt_set_af_coords -# undef ec_GF2m_simple_point_get_affine_coordinates -# define ec_GF2m_simple_point_get_affine_coordinates \ - ec_GF2m_smp_pt_get_af_coords -# undef ec_GF2m_simple_set_compressed_coordinates -# define ec_GF2m_simple_set_compressed_coordinates \ - ec_GF2m_smp_set_compr_coords -# undef ec_GFp_simple_group_set_curve_GFp -# define ec_GFp_simple_group_set_curve_GFp ec_GFp_simple_grp_set_curve_GFp -# undef ec_GFp_simple_group_get_curve_GFp -# define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp -# undef ec_GFp_simple_group_clear_finish -# define ec_GFp_simple_group_clear_finish ec_GFp_simple_grp_clear_finish -# undef ec_GFp_simple_group_set_generator -# define ec_GFp_simple_group_set_generator ec_GFp_simple_grp_set_generator -# undef ec_GFp_simple_group_get0_generator -# define ec_GFp_simple_group_get0_generator ec_GFp_simple_grp_gt0_generator -# undef ec_GFp_simple_group_get_cofactor -# define ec_GFp_simple_group_get_cofactor ec_GFp_simple_grp_get_cofactor -# undef ec_GFp_simple_point_clear_finish -# define ec_GFp_simple_point_clear_finish ec_GFp_simple_pt_clear_finish -# undef ec_GFp_simple_point_set_to_infinity -# define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf -# undef ec_GFp_simple_points_make_affine -# define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine -# undef ec_GFp_simple_set_Jprojective_coordinates_GFp -# define ec_GFp_simple_set_Jprojective_coordinates_GFp \ - ec_GFp_smp_set_Jproj_coords_GFp -# undef ec_GFp_simple_get_Jprojective_coordinates_GFp -# define ec_GFp_simple_get_Jprojective_coordinates_GFp \ - ec_GFp_smp_get_Jproj_coords_GFp -# undef ec_GFp_simple_point_set_affine_coordinates_GFp -# define ec_GFp_simple_point_set_affine_coordinates_GFp \ - ec_GFp_smp_pt_set_af_coords_GFp -# undef ec_GFp_simple_point_get_affine_coordinates_GFp -# define ec_GFp_simple_point_get_affine_coordinates_GFp \ - ec_GFp_smp_pt_get_af_coords_GFp -# undef ec_GFp_simple_set_compressed_coordinates_GFp -# define ec_GFp_simple_set_compressed_coordinates_GFp \ - ec_GFp_smp_set_compr_coords_GFp -# undef ec_GFp_simple_point_set_affine_coordinates -# define ec_GFp_simple_point_set_affine_coordinates \ - ec_GFp_smp_pt_set_af_coords -# undef ec_GFp_simple_point_get_affine_coordinates -# define ec_GFp_simple_point_get_affine_coordinates \ - ec_GFp_smp_pt_get_af_coords -# undef ec_GFp_simple_set_compressed_coordinates -# define ec_GFp_simple_set_compressed_coordinates \ - ec_GFp_smp_set_compr_coords -# undef ec_GFp_simple_group_check_discriminant -# define ec_GFp_simple_group_check_discriminant ec_GFp_simple_grp_chk_discrim - -/* Hack som long STORE names */ -# undef STORE_method_set_initialise_function -# define STORE_method_set_initialise_function STORE_meth_set_initialise_fn -# undef STORE_method_set_cleanup_function -# define STORE_method_set_cleanup_function STORE_meth_set_cleanup_fn -# undef STORE_method_set_generate_function -# define STORE_method_set_generate_function STORE_meth_set_generate_fn -# undef STORE_method_set_modify_function -# define STORE_method_set_modify_function STORE_meth_set_modify_fn -# undef STORE_method_set_revoke_function -# define STORE_method_set_revoke_function STORE_meth_set_revoke_fn -# undef STORE_method_set_delete_function -# define STORE_method_set_delete_function STORE_meth_set_delete_fn -# undef STORE_method_set_list_start_function -# define STORE_method_set_list_start_function STORE_meth_set_list_start_fn -# undef STORE_method_set_list_next_function -# define STORE_method_set_list_next_function STORE_meth_set_list_next_fn -# undef STORE_method_set_list_end_function -# define STORE_method_set_list_end_function STORE_meth_set_list_end_fn -# undef STORE_method_set_update_store_function -# define STORE_method_set_update_store_function STORE_meth_set_update_store_fn -# undef STORE_method_set_lock_store_function -# define STORE_method_set_lock_store_function STORE_meth_set_lock_store_fn -# undef STORE_method_set_unlock_store_function -# define STORE_method_set_unlock_store_function STORE_meth_set_unlock_store_fn -# undef STORE_method_get_initialise_function -# define STORE_method_get_initialise_function STORE_meth_get_initialise_fn -# undef STORE_method_get_cleanup_function -# define STORE_method_get_cleanup_function STORE_meth_get_cleanup_fn -# undef STORE_method_get_generate_function -# define STORE_method_get_generate_function STORE_meth_get_generate_fn -# undef STORE_method_get_modify_function -# define STORE_method_get_modify_function STORE_meth_get_modify_fn -# undef STORE_method_get_revoke_function -# define STORE_method_get_revoke_function STORE_meth_get_revoke_fn -# undef STORE_method_get_delete_function -# define STORE_method_get_delete_function STORE_meth_get_delete_fn -# undef STORE_method_get_list_start_function -# define STORE_method_get_list_start_function STORE_meth_get_list_start_fn -# undef STORE_method_get_list_next_function -# define STORE_method_get_list_next_function STORE_meth_get_list_next_fn -# undef STORE_method_get_list_end_function -# define STORE_method_get_list_end_function STORE_meth_get_list_end_fn -# undef STORE_method_get_update_store_function -# define STORE_method_get_update_store_function STORE_meth_get_update_store_fn -# undef STORE_method_get_lock_store_function -# define STORE_method_get_lock_store_function STORE_meth_get_lock_store_fn -# undef STORE_method_get_unlock_store_function -# define STORE_method_get_unlock_store_function STORE_meth_get_unlock_store_fn - -/* Hack some long TS names */ -# undef TS_RESP_CTX_set_status_info_cond -# define TS_RESP_CTX_set_status_info_cond TS_RESP_CTX_set_stat_info_cond -# undef TS_RESP_CTX_set_clock_precision_digits -# define TS_RESP_CTX_set_clock_precision_digits TS_RESP_CTX_set_clk_prec_digits -# undef TS_CONF_set_clock_precision_digits -# define TS_CONF_set_clock_precision_digits TS_CONF_set_clk_prec_digits - -/* Hack some long CMS names */ -# undef CMS_RecipientInfo_ktri_get0_algs -# define CMS_RecipientInfo_ktri_get0_algs CMS_RecipInfo_ktri_get0_algs -# undef CMS_RecipientInfo_ktri_get0_signer_id -# define CMS_RecipientInfo_ktri_get0_signer_id CMS_RecipInfo_ktri_get0_sigr_id -# undef CMS_OtherRevocationInfoFormat_it -# define CMS_OtherRevocationInfoFormat_it CMS_OtherRevocInfoFormat_it -# undef CMS_KeyAgreeRecipientIdentifier_it -# define CMS_KeyAgreeRecipientIdentifier_it CMS_KeyAgreeRecipIdentifier_it -# undef CMS_OriginatorIdentifierOrKey_it -# define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it -# undef cms_SignerIdentifier_get0_signer_id -# define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id -# undef CMS_RecipientInfo_kari_get0_orig_id -# define CMS_RecipientInfo_kari_get0_orig_id CMS_RecipInfo_kari_get0_orig_id -# undef CMS_RecipientInfo_kari_get0_reks -# define CMS_RecipientInfo_kari_get0_reks CMS_RecipInfo_kari_get0_reks -# undef CMS_RecipientEncryptedKey_cert_cmp -# define CMS_RecipientEncryptedKey_cert_cmp CMS_RecipEncryptedKey_cert_cmp -# undef CMS_RecipientInfo_kari_set0_pkey -# define CMS_RecipientInfo_kari_set0_pkey CMS_RecipInfo_kari_set0_pkey -# undef CMS_RecipientEncryptedKey_get0_id -# define CMS_RecipientEncryptedKey_get0_id CMS_RecipEncryptedKey_get0_id -# undef CMS_RecipientInfo_kari_orig_id_cmp -# define CMS_RecipientInfo_kari_orig_id_cmp CMS_RecipInfo_kari_orig_id_cmp - -/* Hack some long DTLS1 names */ -# undef dtls1_retransmit_buffered_messages -# define dtls1_retransmit_buffered_messages dtls1_retransmit_buffered_msgs - -/* Hack some long SRP names */ -# undef SRP_generate_server_master_secret -# define SRP_generate_server_master_secret SRP_gen_server_master_secret -# undef SRP_generate_client_master_secret -# define SRP_generate_client_master_secret SRP_gen_client_master_secret - -/* Hack some long UI names */ -# undef UI_method_get_prompt_constructor -# define UI_method_get_prompt_constructor UI_method_get_prompt_constructr -# undef UI_method_set_prompt_constructor -# define UI_method_set_prompt_constructor UI_method_set_prompt_constructr - -# endif /* defined OPENSSL_SYS_VMS */ - -/* Case insensitive linking causes problems.... */ -# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) -# undef ERR_load_CRYPTO_strings -# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings -# undef OCSP_crlID_new -# define OCSP_crlID_new OCSP_crlID2_new - -# undef d2i_ECPARAMETERS -# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS -# undef i2d_ECPARAMETERS -# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS -# undef d2i_ECPKPARAMETERS -# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS -# undef i2d_ECPKPARAMETERS -# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS - -/* - * These functions do not seem to exist! However, I'm paranoid... Original - * command in x509v3.h: These functions are being redefined in another - * directory, and clash when the linker is case-insensitive, so let's hide - * them a little, by giving them an extra 'o' at the beginning of the name... - */ -# undef X509v3_cleanup_extensions -# define X509v3_cleanup_extensions oX509v3_cleanup_extensions -# undef X509v3_add_extension -# define X509v3_add_extension oX509v3_add_extension -# undef X509v3_add_netscape_extensions -# define X509v3_add_netscape_extensions oX509v3_add_netscape_extensions -# undef X509v3_add_standard_extensions -# define X509v3_add_standard_extensions oX509v3_add_standard_extensions - -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - -# endif - -#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/ext/openssl/windows/x64/include/openssl/tls1.h b/ext/openssl/windows/x64/include/openssl/tls1.h deleted file mode 100644 index 7e237d06..00000000 --- a/ext/openssl/windows/x64/include/openssl/tls1.h +++ /dev/null @@ -1,810 +0,0 @@ -/* ssl/tls1.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * ECC cipher suite support in OpenSSL originally written by - * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. - * - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 0 - -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS_MAX_VERSION TLS1_2_VERSION - -# define TLS1_VERSION_MAJOR 0x03 -# define TLS1_VERSION_MINOR 0x01 - -# define TLS1_1_VERSION_MAJOR 0x03 -# define TLS1_1_VERSION_MINOR 0x02 - -# define TLS1_2_VERSION_MAJOR 0x03 -# define TLS1_2_VERSION_MINOR 0x03 - -# define TLS1_get_version(s) \ - ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0) - -# define TLS1_get_client_version(s) \ - ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) - -# define TLS1_AD_DECRYPTION_FAILED 21 -# define TLS1_AD_RECORD_OVERFLOW 22 -# define TLS1_AD_UNKNOWN_CA 48/* fatal */ -# define TLS1_AD_ACCESS_DENIED 49/* fatal */ -# define TLS1_AD_DECODE_ERROR 50/* fatal */ -# define TLS1_AD_DECRYPT_ERROR 51 -# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ -# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ -# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ -# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ -# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ -# define TLS1_AD_USER_CANCELLED 90 -# define TLS1_AD_NO_RENEGOTIATION 100 -/* codes 110-114 are from RFC3546 */ -# define TLS1_AD_UNSUPPORTED_EXTENSION 110 -# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 -# define TLS1_AD_UNRECOGNIZED_NAME 112 -# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 -# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 -# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ - -/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ -# define TLSEXT_TYPE_server_name 0 -# define TLSEXT_TYPE_max_fragment_length 1 -# define TLSEXT_TYPE_client_certificate_url 2 -# define TLSEXT_TYPE_trusted_ca_keys 3 -# define TLSEXT_TYPE_truncated_hmac 4 -# define TLSEXT_TYPE_status_request 5 -/* ExtensionType values from RFC4681 */ -# define TLSEXT_TYPE_user_mapping 6 -/* ExtensionType values from RFC5878 */ -# define TLSEXT_TYPE_client_authz 7 -# define TLSEXT_TYPE_server_authz 8 -/* ExtensionType values from RFC6091 */ -# define TLSEXT_TYPE_cert_type 9 - -/* ExtensionType values from RFC4492 */ -# define TLSEXT_TYPE_elliptic_curves 10 -# define TLSEXT_TYPE_ec_point_formats 11 - -/* ExtensionType value from RFC5054 */ -# define TLSEXT_TYPE_srp 12 - -/* ExtensionType values from RFC5246 */ -# define TLSEXT_TYPE_signature_algorithms 13 - -/* ExtensionType value from RFC5764 */ -# define TLSEXT_TYPE_use_srtp 14 - -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - -/* ExtensionType value from RFC7301 */ -# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 - -/* - * ExtensionType value for TLS padding extension. - * http://tools.ietf.org/html/draft-agl-tls-padding - */ -# define TLSEXT_TYPE_padding 21 - -/* ExtensionType value from RFC4507 */ -# define TLSEXT_TYPE_session_ticket 35 - -/* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */ -# if 0 -/* - * will have to be provided externally for now , - * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183 - * using whatever extension number you'd like to try - */ -# define TLSEXT_TYPE_opaque_prf_input ?? -# endif - -/* Temporary extension type */ -# define TLSEXT_TYPE_renegotiate 0xff01 - -# ifndef OPENSSL_NO_NEXTPROTONEG -/* This is not an IANA defined extension number */ -# define TLSEXT_TYPE_next_proto_neg 13172 -# endif - -/* NameType value from RFC3546 */ -# define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC3546 */ -# define TLSEXT_STATUSTYPE_ocsp 1 - -/* ECPointFormat values from RFC4492 */ -# define TLSEXT_ECPOINTFORMAT_first 0 -# define TLSEXT_ECPOINTFORMAT_uncompressed 0 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 -# define TLSEXT_ECPOINTFORMAT_last 2 - -/* Signature and hash algorithms from RFC5246 */ -# define TLSEXT_signature_anonymous 0 -# define TLSEXT_signature_rsa 1 -# define TLSEXT_signature_dsa 2 -# define TLSEXT_signature_ecdsa 3 - -/* Total number of different signature algorithms */ -# define TLSEXT_signature_num 4 - -# define TLSEXT_hash_none 0 -# define TLSEXT_hash_md5 1 -# define TLSEXT_hash_sha1 2 -# define TLSEXT_hash_sha224 3 -# define TLSEXT_hash_sha256 4 -# define TLSEXT_hash_sha384 5 -# define TLSEXT_hash_sha512 6 - -/* Total number of different digest algorithms */ - -# define TLSEXT_hash_num 7 - -/* Flag set for unrecognised algorithms */ -# define TLSEXT_nid_unknown 0x1000000 - -/* ECC curves */ - -# define TLSEXT_curve_P_256 23 -# define TLSEXT_curve_P_384 24 - -# ifndef OPENSSL_NO_TLSEXT - -# define TLSEXT_MAXLEN_host_name 255 - -const char *SSL_get_servername(const SSL *s, const int type); -int SSL_get_servername_type(const SSL *s); -/* - * SSL_export_keying_material exports a value derived from the master secret, - * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and - * optional context. (Since a zero length context is allowed, the |use_context| - * flag controls whether a context is included.) It returns 1 on success and - * zero otherwise. - */ -int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, - const char *label, size_t llen, - const unsigned char *p, size_t plen, - int use_context); - -int SSL_get_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_get_shared_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); - -# define SSL_set_tlsext_host_name(s,name) \ -SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name) - -# define SSL_set_tlsext_debug_callback(ssl, cb) \ -SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb) - -# define SSL_set_tlsext_debug_arg(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg) - -# define SSL_set_tlsext_status_type(ssl, type) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL) - -# define SSL_get_tlsext_status_exts(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) - -# define SSL_set_tlsext_status_exts(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) - -# define SSL_get_tlsext_status_ids(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) - -# define SSL_set_tlsext_status_ids(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) - -# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg) - -# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg) - -# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ -SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) - -# define SSL_TLSEXT_ERR_OK 0 -# define SSL_TLSEXT_ERR_ALERT_WARNING 1 -# define SSL_TLSEXT_ERR_ALERT_FATAL 2 -# define SSL_TLSEXT_ERR_NOACK 3 - -# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ -SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg) - -# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys)) -# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys)) - -# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ -SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) - -# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ -SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) - -# define SSL_set_tlsext_opaque_prf_input(s, src, len) \ -SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) -# define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ -SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) -# define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ -SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) - -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ -SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_TLSEXT_HB_ENABLED 0x01 -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS 0x04 - -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) -# endif -# endif - -/* PSK ciphersuites from 4279 */ -# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A -# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D - -/* - * Additional TLS ciphersuites from expired Internet Draft - * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if - * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c). We - * actually treat them like SSL 3.0 ciphers, which we probably shouldn't. - * Note that the first two are actually not in the IDs. - */ -# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060/* not in - * ID */ -# define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061/* not in - * ID */ -# define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062 -# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063 -# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064 -# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065 -# define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 - -/* AES ciphersuites from RFC3268 */ -# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 -# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 - -# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 -# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B -# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C -# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B -# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C -# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 -# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 -# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 -# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 -# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A -# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C -# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D -# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E -# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F -# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 -# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 -# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 -# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 -# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 -# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 -# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 -# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 - -/* - * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in - * draft 13 - */ -# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 -# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 -# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 - -# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 -# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 -# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A - -# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B -# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C -# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D -# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E -# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F - -# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 -# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 -# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 - -# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 -# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 -# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 -# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 -# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 - -/* SRP ciphersuites from RFC 5054 */ -# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A -# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B -# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C -# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F -# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 - -/* ECDH HMAC based ciphersuites from RFC5289 */ - -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 - -/* - * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave - * some DHE ciphers names with "EDH" + * instead of "DHE". Going forward, we - * should be using DHE + * everywhere, though we may indefinitely maintain - * aliases for users + * or configurations that used "EDH" + - */ -# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" -# define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" -# define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" -# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" -# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" -# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" -# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" - -/* AES ciphersuites from RFC3268 */ -# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" -# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" - -# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" -# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" - -# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" -# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" -# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" - -/* PSK ciphersuites from RFC 4279 */ -# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" -# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" - -/* SRP ciphersuite from RFC 5054 */ -# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" -# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" -# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" -# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" -# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" -# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" - -/* TLS v1.2 ciphersuites */ -# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" -# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" -# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" - -/* ECDH HMAC based ciphersuites from RFC5289 */ - -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" - -# define TLS_CT_RSA_SIGN 1 -# define TLS_CT_DSS_SIGN 2 -# define TLS_CT_RSA_FIXED_DH 3 -# define TLS_CT_DSS_FIXED_DH 4 -# define TLS_CT_ECDSA_SIGN 64 -# define TLS_CT_RSA_FIXED_ECDH 65 -# define TLS_CT_ECDSA_FIXED_ECDH 66 -# define TLS_CT_GOST94_SIGN 21 -# define TLS_CT_GOST01_SIGN 22 -/* - * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see - * comment there) - */ -# define TLS_CT_NUMBER 9 - -# define TLS1_FINISH_MAC_LENGTH 12 - -# define TLS_MD_MAX_CONST_SIZE 20 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 - -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif - -/* TLS Session Ticket extension struct */ -struct tls_session_ticket_ext_st { - unsigned short length; - void *data; -}; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ts.h b/ext/openssl/windows/x64/include/openssl/ts.h deleted file mode 100644 index 2daa1b2f..00000000 --- a/ext/openssl/windows/x64/include/openssl/ts.h +++ /dev/null @@ -1,865 +0,0 @@ -/* crypto/ts/ts.h */ -/* - * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project - * 2002, 2003, 2004. - */ -/* ==================================================================== - * Copyright (c) 2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_TS_H -# define HEADER_TS_H - -# include -# include -# ifndef OPENSSL_NO_BUFFER -# include -# endif -# ifndef OPENSSL_NO_EVP -# include -# endif -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include -# include - -# ifndef OPENSSL_NO_RSA -# include -# endif - -# ifndef OPENSSL_NO_DSA -# include -# endif - -# ifndef OPENSSL_NO_DH -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef WIN32 -/* Under Win32 this is defined in wincrypt.h */ -# undef X509_NAME -# endif - -# include -# include - -/*- -MessageImprint ::= SEQUENCE { - hashAlgorithm AlgorithmIdentifier, - hashedMessage OCTET STRING } -*/ - -typedef struct TS_msg_imprint_st { - X509_ALGOR *hash_algo; - ASN1_OCTET_STRING *hashed_msg; -} TS_MSG_IMPRINT; - -/*- -TimeStampReq ::= SEQUENCE { - version INTEGER { v1(1) }, - messageImprint MessageImprint, - --a hash algorithm OID and the hash value of the data to be - --time-stamped - reqPolicy TSAPolicyId OPTIONAL, - nonce INTEGER OPTIONAL, - certReq BOOLEAN DEFAULT FALSE, - extensions [0] IMPLICIT Extensions OPTIONAL } -*/ - -typedef struct TS_req_st { - ASN1_INTEGER *version; - TS_MSG_IMPRINT *msg_imprint; - ASN1_OBJECT *policy_id; /* OPTIONAL */ - ASN1_INTEGER *nonce; /* OPTIONAL */ - ASN1_BOOLEAN cert_req; /* DEFAULT FALSE */ - STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */ -} TS_REQ; - -/*- -Accuracy ::= SEQUENCE { - seconds INTEGER OPTIONAL, - millis [0] INTEGER (1..999) OPTIONAL, - micros [1] INTEGER (1..999) OPTIONAL } -*/ - -typedef struct TS_accuracy_st { - ASN1_INTEGER *seconds; - ASN1_INTEGER *millis; - ASN1_INTEGER *micros; -} TS_ACCURACY; - -/*- -TSTInfo ::= SEQUENCE { - version INTEGER { v1(1) }, - policy TSAPolicyId, - messageImprint MessageImprint, - -- MUST have the same value as the similar field in - -- TimeStampReq - serialNumber INTEGER, - -- Time-Stamping users MUST be ready to accommodate integers - -- up to 160 bits. - genTime GeneralizedTime, - accuracy Accuracy OPTIONAL, - ordering BOOLEAN DEFAULT FALSE, - nonce INTEGER OPTIONAL, - -- MUST be present if the similar field was present - -- in TimeStampReq. In that case it MUST have the same value. - tsa [0] GeneralName OPTIONAL, - extensions [1] IMPLICIT Extensions OPTIONAL } -*/ - -typedef struct TS_tst_info_st { - ASN1_INTEGER *version; - ASN1_OBJECT *policy_id; - TS_MSG_IMPRINT *msg_imprint; - ASN1_INTEGER *serial; - ASN1_GENERALIZEDTIME *time; - TS_ACCURACY *accuracy; - ASN1_BOOLEAN ordering; - ASN1_INTEGER *nonce; - GENERAL_NAME *tsa; - STACK_OF(X509_EXTENSION) *extensions; -} TS_TST_INFO; - -/*- -PKIStatusInfo ::= SEQUENCE { - status PKIStatus, - statusString PKIFreeText OPTIONAL, - failInfo PKIFailureInfo OPTIONAL } - -From RFC 1510 - section 3.1.1: -PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String - -- text encoded as UTF-8 String (note: each UTF8String SHOULD - -- include an RFC 1766 language tag to indicate the language - -- of the contained text) -*/ - -/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */ - -# define TS_STATUS_GRANTED 0 -# define TS_STATUS_GRANTED_WITH_MODS 1 -# define TS_STATUS_REJECTION 2 -# define TS_STATUS_WAITING 3 -# define TS_STATUS_REVOCATION_WARNING 4 -# define TS_STATUS_REVOCATION_NOTIFICATION 5 - -/* - * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c - */ - -# define TS_INFO_BAD_ALG 0 -# define TS_INFO_BAD_REQUEST 2 -# define TS_INFO_BAD_DATA_FORMAT 5 -# define TS_INFO_TIME_NOT_AVAILABLE 14 -# define TS_INFO_UNACCEPTED_POLICY 15 -# define TS_INFO_UNACCEPTED_EXTENSION 16 -# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 -# define TS_INFO_SYSTEM_FAILURE 25 - -typedef struct TS_status_info_st { - ASN1_INTEGER *status; - STACK_OF(ASN1_UTF8STRING) *text; - ASN1_BIT_STRING *failure_info; -} TS_STATUS_INFO; - -DECLARE_STACK_OF(ASN1_UTF8STRING) -DECLARE_ASN1_SET_OF(ASN1_UTF8STRING) - -/*- -TimeStampResp ::= SEQUENCE { - status PKIStatusInfo, - timeStampToken TimeStampToken OPTIONAL } -*/ - -typedef struct TS_resp_st { - TS_STATUS_INFO *status_info; - PKCS7 *token; - TS_TST_INFO *tst_info; -} TS_RESP; - -/* The structure below would belong to the ESS component. */ - -/*- -IssuerSerial ::= SEQUENCE { - issuer GeneralNames, - serialNumber CertificateSerialNumber - } -*/ - -typedef struct ESS_issuer_serial { - STACK_OF(GENERAL_NAME) *issuer; - ASN1_INTEGER *serial; -} ESS_ISSUER_SERIAL; - -/*- -ESSCertID ::= SEQUENCE { - certHash Hash, - issuerSerial IssuerSerial OPTIONAL -} -*/ - -typedef struct ESS_cert_id { - ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ - ESS_ISSUER_SERIAL *issuer_serial; -} ESS_CERT_ID; - -DECLARE_STACK_OF(ESS_CERT_ID) -DECLARE_ASN1_SET_OF(ESS_CERT_ID) - -/*- -SigningCertificate ::= SEQUENCE { - certs SEQUENCE OF ESSCertID, - policies SEQUENCE OF PolicyInformation OPTIONAL -} -*/ - -typedef struct ESS_signing_cert { - STACK_OF(ESS_CERT_ID) *cert_ids; - STACK_OF(POLICYINFO) *policy_info; -} ESS_SIGNING_CERT; - -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); - -TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); -TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); - -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a); - -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); - -TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); -TS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *fp, TS_RESP *a); - -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); - -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); - -TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); -TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a); - -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -void ERR_load_TS_strings(void); - -int TS_REQ_set_version(TS_REQ *a, long version); -long TS_REQ_get_version(const TS_REQ *a); - -int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); - -int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); -X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); - -int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); -ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); - -int TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy); -ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); - -int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); - -int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); -int TS_REQ_get_cert_req(const TS_REQ *a); - -STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); -void TS_REQ_ext_free(TS_REQ *a); -int TS_REQ_get_ext_count(TS_REQ *a); -int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); -int TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos); -int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); -X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); -X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); -int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); -void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); - -/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ - -int TS_REQ_print_bio(BIO *bio, TS_REQ *a); - -/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ - -int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); -TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); - -/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ -void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); -PKCS7 *TS_RESP_get_token(TS_RESP *a); -TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); - -int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); -long TS_TST_INFO_get_version(const TS_TST_INFO *a); - -int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); -ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); - -int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); - -int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); -const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); - -int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); -const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); - -int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); -TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); - -int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); -const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); - -int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); -const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); - -int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); -const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); - -int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); -int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); - -int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); - -int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); -GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); - -STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); -void TS_TST_INFO_ext_free(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); -int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos); -int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); -X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); -X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); -int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); -void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); - -/* - * Declarations related to response generation, defined in ts/ts_resp_sign.c. - */ - -/* Optional flags for response generation. */ - -/* Don't include the TSA name in response. */ -# define TS_TSA_NAME 0x01 - -/* Set ordering to true in response. */ -# define TS_ORDERING 0x02 - -/* - * Include the signer certificate and the other specified certificates in - * the ESS signing certificate attribute beside the PKCS7 signed data. - * Only the signer certificates is included by default. - */ -# define TS_ESS_CERT_ID_CHAIN 0x04 - -/* Forward declaration. */ -struct TS_resp_ctx; - -/* This must return a unique number less than 160 bits long. */ -typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); - -/* - * This must return the seconds and microseconds since Jan 1, 1970 in the sec - * and usec variables allocated by the caller. Return non-zero for success - * and zero for failure. - */ -typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, - long *usec); - -/* - * This must process the given extension. It can modify the TS_TST_INFO - * object of the context. Return values: !0 (processed), 0 (error, it must - * set the status info/failure info of the response). - */ -typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, - void *); - -typedef struct TS_resp_ctx { - X509 *signer_cert; - EVP_PKEY *signer_key; - STACK_OF(X509) *certs; /* Certs to include in signed data. */ - STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ - ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ - STACK_OF(EVP_MD) *mds; /* Acceptable message digests. */ - ASN1_INTEGER *seconds; /* accuracy, 0 means not specified. */ - ASN1_INTEGER *millis; /* accuracy, 0 means not specified. */ - ASN1_INTEGER *micros; /* accuracy, 0 means not specified. */ - unsigned clock_precision_digits; /* fraction of seconds in time stamp - * token. */ - unsigned flags; /* Optional info, see values above. */ - /* Callback functions. */ - TS_serial_cb serial_cb; - void *serial_cb_data; /* User data for serial_cb. */ - TS_time_cb time_cb; - void *time_cb_data; /* User data for time_cb. */ - TS_extension_cb extension_cb; - void *extension_cb_data; /* User data for extension_cb. */ - /* These members are used only while creating the response. */ - TS_REQ *request; - TS_RESP *response; - TS_TST_INFO *tst_info; -} TS_RESP_CTX; - -DECLARE_STACK_OF(EVP_MD) -DECLARE_ASN1_SET_OF(EVP_MD) - -/* Creates a response context that can be used for generating responses. */ -TS_RESP_CTX *TS_RESP_CTX_new(void); -void TS_RESP_CTX_free(TS_RESP_CTX *ctx); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy); - -/* No additional certs are included in the response by default. */ -int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); - -/* - * Adds a new acceptable policy, only the default policy is accepted by - * default. - */ -int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy); - -/* - * Adds a new acceptable message digest. Note that no message digests are - * accepted by default. The md argument is shared with the caller. - */ -int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* Accuracy is not included by default. */ -int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, - int secs, int millis, int micros); - -/* - * Clock precision digits, i.e. the number of decimal digits: '0' means sec, - * '3' msec, '6' usec, and so on. Default is 0. - */ -int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, - unsigned clock_precision_digits); -/* At most we accept usec precision. */ -# define TS_MAX_CLOCK_PRECISION_DIGITS 6 - -/* Maximum status message length */ -# define TS_MAX_STATUS_LENGTH (1024 * 1024) - -/* No flags are set by default. */ -void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); - -/* Default callback always returns a constant. */ -void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); - -/* Default callback uses the gettimeofday() and gmtime() system calls. */ -void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); - -/* - * Default callback rejects all extensions. The extension callback is called - * when the TS_TST_INFO object is already set up and not signed yet. - */ -/* FIXME: extension handling is not tested yet. */ -void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, - TS_extension_cb cb, void *data); - -/* The following methods can be used in the callbacks. */ -int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, - int status, const char *text); - -/* Sets the status info only if it is still TS_STATUS_GRANTED. */ -int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, - int status, const char *text); - -int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); - -/* The get methods below can be used in the extension callback. */ -TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); - -TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); - -/* - * Creates the signed TS_TST_INFO and puts it in TS_RESP. - * In case of errors it sets the status info properly. - * Returns NULL only in case of memory allocation/fatal error. - */ -TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); - -/* - * Declarations related to response verification, - * they are defined in ts/ts_resp_verify.c. - */ - -int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, - X509_STORE *store, X509 **signer_out); - -/* Context structure for the generic verify method. */ - -/* Verify the signer's certificate and the signature of the response. */ -# define TS_VFY_SIGNATURE (1u << 0) -/* Verify the version number of the response. */ -# define TS_VFY_VERSION (1u << 1) -/* Verify if the policy supplied by the user matches the policy of the TSA. */ -# define TS_VFY_POLICY (1u << 2) -/* - * Verify the message imprint provided by the user. This flag should not be - * specified with TS_VFY_DATA. - */ -# define TS_VFY_IMPRINT (1u << 3) -/* - * Verify the message imprint computed by the verify method from the user - * provided data and the MD algorithm of the response. This flag should not - * be specified with TS_VFY_IMPRINT. - */ -# define TS_VFY_DATA (1u << 4) -/* Verify the nonce value. */ -# define TS_VFY_NONCE (1u << 5) -/* Verify if the TSA name field matches the signer certificate. */ -# define TS_VFY_SIGNER (1u << 6) -/* Verify if the TSA name field equals to the user provided name. */ -# define TS_VFY_TSA_NAME (1u << 7) - -/* You can use the following convenience constants. */ -# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_IMPRINT \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) -# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_DATA \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) - -typedef struct TS_verify_ctx { - /* Set this to the union of TS_VFY_... flags you want to carry out. */ - unsigned flags; - /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */ - X509_STORE *store; - STACK_OF(X509) *certs; - /* Must be set only with TS_VFY_POLICY. */ - ASN1_OBJECT *policy; - /* - * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the - * algorithm from the response is used. - */ - X509_ALGOR *md_alg; - unsigned char *imprint; - unsigned imprint_len; - /* Must be set only with TS_VFY_DATA. */ - BIO *data; - /* Must be set only with TS_VFY_TSA_NAME. */ - ASN1_INTEGER *nonce; - /* Must be set only with TS_VFY_TSA_NAME. */ - GENERAL_NAME *tsa_name; -} TS_VERIFY_CTX; - -int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); -int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); - -/* - * Declarations related to response verification context, - * they are defined in ts/ts_verify_ctx.c. - */ - -/* Set all fields to zero. */ -TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); -void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); - -/*- - * If ctx is NULL, it allocates and returns a new object, otherwise - * it returns ctx. It initialises all the members as follows: - * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) - * certs = NULL - * store = NULL - * policy = policy from the request or NULL if absent (in this case - * TS_VFY_POLICY is cleared from flags as well) - * md_alg = MD algorithm from request - * imprint, imprint_len = imprint from request - * data = NULL - * nonce, nonce_len = nonce from the request or NULL if absent (in this case - * TS_VFY_NONCE is cleared from flags as well) - * tsa_name = NULL - * Important: after calling this method TS_VFY_SIGNATURE should be added! - */ -TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); - -/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ - -int TS_RESP_print_bio(BIO *bio, TS_RESP *a); -int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); -int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); - -/* Common utility functions defined in ts/ts_lib.c */ - -int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); -int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); -int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); -int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); -int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); - -/* - * Function declarations for handling configuration options, defined in - * ts/ts_conf.c - */ - -X509 *TS_CONF_load_cert(const char *file); -STACK_OF(X509) *TS_CONF_load_certs(const char *file); -EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); -const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); -int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, - TS_RESP_CTX *ctx); -int TS_CONF_set_crypto_device(CONF *conf, const char *section, - const char *device); -int TS_CONF_set_default_engine(const char *name); -int TS_CONF_set_signer_cert(CONF *conf, const char *section, - const char *cert, TS_RESP_CTX *ctx); -int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_key(CONF *conf, const char *section, - const char *key, const char *pass, - TS_RESP_CTX *ctx); -int TS_CONF_set_def_policy(CONF *conf, const char *section, - const char *policy, TS_RESP_CTX *ctx); -int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, - TS_RESP_CTX *ctx); - -/* -------------------------------------------------- */ -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_TS_strings(void); - -/* Error codes for the TS functions. */ - -/* Function codes. */ -# define TS_F_D2I_TS_RESP 147 -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_RESP_VERIFY_TOKEN 107 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 - -/* Reason codes. */ -# define TS_R_BAD_PKCS7_TYPE 132 -# define TS_R_BAD_TYPE 133 -# define TS_R_CERTIFICATE_VERIFY_ERROR 100 -# define TS_R_COULD_NOT_SET_ENGINE 127 -# define TS_R_COULD_NOT_SET_TIME 115 -# define TS_R_D2I_TS_RESP_INT_FAILED 128 -# define TS_R_DETACHED_CONTENT 134 -# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 -# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 -# define TS_R_INVALID_NULL_POINTER 102 -# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 -# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 -# define TS_R_NONCE_MISMATCH 104 -# define TS_R_NONCE_NOT_RETURNED 105 -# define TS_R_NO_CONTENT 106 -# define TS_R_NO_TIME_STAMP_TOKEN 107 -# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 -# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 -# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 -# define TS_R_POLICY_MISMATCH 108 -# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 -# define TS_R_RESPONSE_SETUP_ERROR 121 -# define TS_R_SIGNATURE_FAILURE 109 -# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 -# define TS_R_TIME_SYSCALL_ERROR 122 -# define TS_R_TOKEN_NOT_PRESENT 130 -# define TS_R_TOKEN_PRESENT 131 -# define TS_R_TSA_NAME_MISMATCH 111 -# define TS_R_TSA_UNTRUSTED 112 -# define TS_R_TST_INFO_SETUP_ERROR 123 -# define TS_R_TS_DATASIGN 124 -# define TS_R_UNACCEPTABLE_POLICY 125 -# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 -# define TS_R_UNSUPPORTED_VERSION 113 -# define TS_R_WRONG_CONTENT_TYPE 114 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/txt_db.h b/ext/openssl/windows/x64/include/openssl/txt_db.h deleted file mode 100644 index 98e23a20..00000000 --- a/ext/openssl/windows/x64/include/openssl/txt_db.h +++ /dev/null @@ -1,112 +0,0 @@ -/* crypto/txt_db/txt_db.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H - -# include -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include - -# define DB_ERROR_OK 0 -# define DB_ERROR_MALLOC 1 -# define DB_ERROR_INDEX_CLASH 2 -# define DB_ERROR_INDEX_OUT_OF_RANGE 3 -# define DB_ERROR_NO_INDEX 4 -# define DB_ERROR_INSERT_INDEX_CLASH 5 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef OPENSSL_STRING *OPENSSL_PSTRING; -DECLARE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) - -typedef struct txt_db_st { - int num_fields; - STACK_OF(OPENSSL_PSTRING) *data; - LHASH_OF(OPENSSL_STRING) **index; - int (**qual) (OPENSSL_STRING *); - long error; - long arg1; - long arg2; - OPENSSL_STRING *arg_row; -} TXT_DB; - -# ifndef OPENSSL_NO_BIO -TXT_DB *TXT_DB_read(BIO *in, int num); -long TXT_DB_write(BIO *out, TXT_DB *db); -# else -TXT_DB *TXT_DB_read(char *in, int num); -long TXT_DB_write(char *out, TXT_DB *db); -# endif -int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), - LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp); -void TXT_DB_free(TXT_DB *db); -OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, - OPENSSL_STRING *value); -int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ui.h b/ext/openssl/windows/x64/include/openssl/ui.h deleted file mode 100644 index 0dc16330..00000000 --- a/ext/openssl/windows/x64/include/openssl/ui.h +++ /dev/null @@ -1,415 +0,0 @@ -/* crypto/ui/ui.h */ -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_UI_H -# define HEADER_UI_H - -# ifndef OPENSSL_NO_DEPRECATED -# include -# endif -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Declared already in ossl_typ.h */ -/* typedef struct ui_st UI; */ -/* typedef struct ui_method_st UI_METHOD; */ - -/* - * All the following functions return -1 or NULL on error and in some cases - * (UI_process()) -2 if interrupted or in some other way cancelled. When - * everything is fine, they return 0, a positive value or a non-NULL pointer, - * all depending on their purpose. - */ - -/* Creators and destructor. */ -UI *UI_new(void); -UI *UI_new_method(const UI_METHOD *method); -void UI_free(UI *ui); - -/*- - The following functions are used to add strings to be printed and prompt - strings to prompt for data. The names are UI_{add,dup}__string - and UI_{add,dup}_input_boolean. - - UI_{add,dup}__string have the following meanings: - add add a text or prompt string. The pointers given to these - functions are used verbatim, no copying is done. - dup make a copy of the text or prompt string, then add the copy - to the collection of strings in the user interface. - - The function is a name for the functionality that the given - string shall be used for. It can be one of: - input use the string as data prompt. - verify use the string as verification prompt. This - is used to verify a previous input. - info use the string for informational output. - error use the string for error output. - Honestly, there's currently no difference between info and error for the - moment. - - UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", - and are typically used when one wants to prompt for a yes/no response. - - All of the functions in this group take a UI and a prompt string. - The string input and verify addition functions also take a flag argument, - a buffer for the result to end up with, a minimum input size and a maximum - input size (the result buffer MUST be large enough to be able to contain - the maximum number of characters). Additionally, the verify addition - functions takes another buffer to compare the result against. - The boolean input functions take an action description string (which should - be safe to ignore if the expected user action is obvious, for example with - a dialog box with an OK button and a Cancel button), a string of acceptable - characters to mean OK and to mean Cancel. The two last strings are checked - to make sure they don't have common characters. Additionally, the same - flag argument as for the string input is taken, as well as a result buffer. - The result buffer is required to be at least one byte long. Depending on - the answer, the first character from the OK or the Cancel character strings - will be stored in the first byte of the result buffer. No NUL will be - added, so the result is *not* a string. - - On success, the all return an index of the added information. That index - is usefull when retrieving results with UI_get0_result(). */ -int UI_add_input_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize); -int UI_dup_input_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize); -int UI_add_verify_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize, - const char *test_buf); -int UI_dup_verify_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize, - const char *test_buf); -int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, - const char *ok_chars, const char *cancel_chars, - int flags, char *result_buf); -int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, - const char *ok_chars, const char *cancel_chars, - int flags, char *result_buf); -int UI_add_info_string(UI *ui, const char *text); -int UI_dup_info_string(UI *ui, const char *text); -int UI_add_error_string(UI *ui, const char *text); -int UI_dup_error_string(UI *ui, const char *text); - -/* These are the possible flags. They can be or'ed together. */ -/* Use to have echoing of input */ -# define UI_INPUT_FLAG_ECHO 0x01 -/* - * Use a default password. Where that password is found is completely up to - * the application, it might for example be in the user data set with - * UI_add_user_data(). It is not recommended to have more than one input in - * each UI being marked with this flag, or the application might get - * confused. - */ -# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 - -/*- - * The user of these routines may want to define flags of their own. The core - * UI won't look at those, but will pass them on to the method routines. They - * must use higher bits so they don't get confused with the UI bits above. - * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good - * example of use is this: - * - * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) - * -*/ -# define UI_INPUT_FLAG_USER_BASE 16 - -/*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. - * The returned string shall always be allocated on the heap with - * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). - * - * If the ui_method doesn't contain a pointer to a user-defined prompt - * constructor, a default string is built, looking like this: - * - * "Enter {object_desc} for {object_name}:" - * - * So, if object_desc has the value "pass phrase" and object_name has - * the value "foo.key", the resulting string is: - * - * "Enter pass phrase for foo.key:" -*/ -char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); - -/* - * The following function is used to store a pointer to user-specific data. - * Any previous such pointer will be returned and replaced. - * - * For callback purposes, this function makes a lot more sense than using - * ex_data, since the latter requires that different parts of OpenSSL or - * applications share the same ex_data index. - * - * Note that the UI_OpenSSL() method completely ignores the user data. Other - * methods may not, however. - */ -void *UI_add_user_data(UI *ui, void *user_data); -/* We need a user data retrieving function as well. */ -void *UI_get0_user_data(UI *ui); - -/* Return the result associated with a prompt given with the index i. */ -const char *UI_get0_result(UI *ui, int i); - -/* When all strings have been added, process the whole thing. */ -int UI_process(UI *ui); - -/* - * Give a user interface parametrised control commands. This can be used to - * send down an integer, a data pointer or a function pointer, as well as be - * used to get information from a UI. - */ -int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); - -/* The commands */ -/* - * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the - * OpenSSL error stack before printing any info or added error messages and - * before any prompting. - */ -# define UI_CTRL_PRINT_ERRORS 1 -/* - * Check if a UI_process() is possible to do again with the same instance of - * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 - * if not. - */ -# define UI_CTRL_IS_REDOABLE 2 - -/* Some methods may use extra data */ -# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) -# define UI_get_app_data(s) UI_get_ex_data(s,0) -int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); - -/* Use specific methods instead of the built-in one */ -void UI_set_default_method(const UI_METHOD *meth); -const UI_METHOD *UI_get_default_method(void); -const UI_METHOD *UI_get_method(UI *ui); -const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); - -/* The method with all the built-in thingies */ -UI_METHOD *UI_OpenSSL(void); - -/* ---------- For method writers ---------- */ -/*- - A method contains a number of functions that implement the low level - of the User Interface. The functions are: - - an opener This function starts a session, maybe by opening - a channel to a tty, or by opening a window. - a writer This function is called to write a given string, - maybe to the tty, maybe as a field label in a - window. - a flusher This function is called to flush everything that - has been output so far. It can be used to actually - display a dialog box after it has been built. - a reader This function is called to read a given prompt, - maybe from the tty, maybe from a field in a - window. Note that it's called wth all string - structures, not only the prompt ones, so it must - check such things itself. - a closer This function closes the session, maybe by closing - the channel to the tty, or closing the window. - - All these functions are expected to return: - - 0 on error. - 1 on success. - -1 on out-of-band events, for example if some prompting has - been canceled (by pressing Ctrl-C, for example). This is - only checked when returned by the flusher or the reader. - - The way this is used, the opener is first called, then the writer for all - strings, then the flusher, then the reader for all strings and finally the - closer. Note that if you want to prompt from a terminal or other command - line interface, the best is to have the reader also write the prompts - instead of having the writer do it. If you want to prompt from a dialog - box, the writer can be used to build up the contents of the box, and the - flusher to actually display the box and run the event loop until all data - has been given, after which the reader only grabs the given data and puts - them back into the UI strings. - - All method functions take a UI as argument. Additionally, the writer and - the reader take a UI_STRING. -*/ - -/* - * The UI_STRING type is the data structure that contains all the needed info - * about a string or a prompt, including test data for a verification prompt. - */ -typedef struct ui_string_st UI_STRING; -DECLARE_STACK_OF(UI_STRING) - -/* - * The different types of strings that are currently supported. This is only - * needed by method authors. - */ -enum UI_string_types { - UIT_NONE = 0, - UIT_PROMPT, /* Prompt for a string */ - UIT_VERIFY, /* Prompt for a string and verify */ - UIT_BOOLEAN, /* Prompt for a yes/no response */ - UIT_INFO, /* Send info to the user */ - UIT_ERROR /* Send an error message to the user */ -}; - -/* Create and manipulate methods */ -UI_METHOD *UI_create_method(char *name); -void UI_destroy_method(UI_METHOD *ui_method); -int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); -int UI_method_set_writer(UI_METHOD *method, - int (*writer) (UI *ui, UI_STRING *uis)); -int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); -int UI_method_set_reader(UI_METHOD *method, - int (*reader) (UI *ui, UI_STRING *uis)); -int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); -int UI_method_set_prompt_constructor(UI_METHOD *method, - char *(*prompt_constructor) (UI *ui, - const char - *object_desc, - const char - *object_name)); -int (*UI_method_get_opener(UI_METHOD *method)) (UI *); -int (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_flusher(UI_METHOD *method)) (UI *); -int (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_closer(UI_METHOD *method)) (UI *); -char *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *, - const char *, - const char *); - -/* - * The following functions are helpers for method writers to access relevant - * data from a UI_STRING. - */ - -/* Return type of the UI_STRING */ -enum UI_string_types UI_get_string_type(UI_STRING *uis); -/* Return input flags of the UI_STRING */ -int UI_get_input_flags(UI_STRING *uis); -/* Return the actual string to output (the prompt, info or error) */ -const char *UI_get0_output_string(UI_STRING *uis); -/* - * Return the optional action string to output (the boolean promtp - * instruction) - */ -const char *UI_get0_action_string(UI_STRING *uis); -/* Return the result of a prompt */ -const char *UI_get0_result_string(UI_STRING *uis); -/* - * Return the string to test the result against. Only useful with verifies. - */ -const char *UI_get0_test_string(UI_STRING *uis); -/* Return the required minimum size of the result */ -int UI_get_result_minsize(UI_STRING *uis); -/* Return the required maximum size of the result */ -int UI_get_result_maxsize(UI_STRING *uis); -/* Set the result of a UI_STRING. */ -int UI_set_result(UI *ui, UI_STRING *uis, const char *result); - -/* A couple of popular utility functions */ -int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, - int verify); -int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, - int verify); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_UI_strings(void); - -/* Error codes for the UI functions. */ - -/* Function codes. */ -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_GENERAL_ALLOCATE_STRING 100 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_SET_RESULT 105 - -/* Reason codes. */ -# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 -# define UI_R_INDEX_TOO_LARGE 102 -# define UI_R_INDEX_TOO_SMALL 103 -# define UI_R_NO_RESULT_BUFFER 105 -# define UI_R_RESULT_TOO_LARGE 100 -# define UI_R_RESULT_TOO_SMALL 101 -# define UI_R_UNKNOWN_CONTROL_COMMAND 106 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/ui_compat.h b/ext/openssl/windows/x64/include/openssl/ui_compat.h deleted file mode 100644 index bf541542..00000000 --- a/ext/openssl/windows/x64/include/openssl/ui_compat.h +++ /dev/null @@ -1,88 +0,0 @@ -/* crypto/ui/ui.h */ -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_UI_COMPAT_H -# define HEADER_UI_COMPAT_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * The following functions were previously part of the DES section, and are - * provided here for backward compatibility reasons. - */ - -# define des_read_pw_string(b,l,p,v) \ - _ossl_old_des_read_pw_string((b),(l),(p),(v)) -# define des_read_pw(b,bf,s,p,v) \ - _ossl_old_des_read_pw((b),(bf),(s),(p),(v)) - -int _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt, - int verify); -int _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt, - int verify); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/whrlpool.h b/ext/openssl/windows/x64/include/openssl/whrlpool.h deleted file mode 100644 index 73c749da..00000000 --- a/ext/openssl/windows/x64/include/openssl/whrlpool.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) - -typedef struct { - union { - unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; - /* double q is here to ensure 64-bit alignment */ - double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; - } H; - unsigned char data[WHIRLPOOL_BBLOCK / 8]; - unsigned int bitoff; - size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; -} WHIRLPOOL_CTX; - -# ifndef OPENSSL_NO_WHIRLPOOL -# ifdef OPENSSL_FIPS -int private_WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -# endif -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/openssl/windows/x64/include/openssl/x509.h b/ext/openssl/windows/x64/include/openssl/x509.h deleted file mode 100644 index 6fa28eba..00000000 --- a/ext/openssl/windows/x64/include/openssl/x509.h +++ /dev/null @@ -1,1330 +0,0 @@ -/* crypto/x509/x509.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - -#ifndef HEADER_X509_H -# define HEADER_X509_H - -# include -# include -# ifndef OPENSSL_NO_BUFFER -# include -# endif -# ifndef OPENSSL_NO_EVP -# include -# endif -# ifndef OPENSSL_NO_BIO -# include -# endif -# include -# include -# include - -# ifndef OPENSSL_NO_EC -# include -# endif - -# ifndef OPENSSL_NO_ECDSA -# include -# endif - -# ifndef OPENSSL_NO_ECDH -# include -# endif - -# ifndef OPENSSL_NO_DEPRECATED -# ifndef OPENSSL_NO_RSA -# include -# endif -# ifndef OPENSSL_NO_DSA -# include -# endif -# ifndef OPENSSL_NO_DH -# include -# endif -# endif - -# ifndef OPENSSL_NO_SHA -# include -# endif -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_SYS_WIN32 -/* Under Win32 these are defined in wincrypt.h */ -# undef X509_NAME -# undef X509_CERT_PAIR -# undef X509_EXTENSIONS -# endif - -# define X509_FILETYPE_PEM 1 -# define X509_FILETYPE_ASN1 2 -# define X509_FILETYPE_DEFAULT 3 - -# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 -# define X509v3_KU_NON_REPUDIATION 0x0040 -# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 -# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 -# define X509v3_KU_KEY_AGREEMENT 0x0008 -# define X509v3_KU_KEY_CERT_SIGN 0x0004 -# define X509v3_KU_CRL_SIGN 0x0002 -# define X509v3_KU_ENCIPHER_ONLY 0x0001 -# define X509v3_KU_DECIPHER_ONLY 0x8000 -# define X509v3_KU_UNDEF 0xffff - -typedef struct X509_objects_st { - int nid; - int (*a2i) (void); - int (*i2a) (void); -} X509_OBJECTS; - -struct X509_algor_st { - ASN1_OBJECT *algorithm; - ASN1_TYPE *parameter; -} /* X509_ALGOR */ ; - -DECLARE_ASN1_SET_OF(X509_ALGOR) - -typedef STACK_OF(X509_ALGOR) X509_ALGORS; - -typedef struct X509_val_st { - ASN1_TIME *notBefore; - ASN1_TIME *notAfter; -} X509_VAL; - -struct X509_pubkey_st { - X509_ALGOR *algor; - ASN1_BIT_STRING *public_key; - EVP_PKEY *pkey; -}; - -typedef struct X509_sig_st { - X509_ALGOR *algor; - ASN1_OCTET_STRING *digest; -} X509_SIG; - -typedef struct X509_name_entry_st { - ASN1_OBJECT *object; - ASN1_STRING *value; - int set; - int size; /* temp variable */ -} X509_NAME_ENTRY; - -DECLARE_STACK_OF(X509_NAME_ENTRY) -DECLARE_ASN1_SET_OF(X509_NAME_ENTRY) - -/* we always keep X509_NAMEs in 2 forms. */ -struct X509_name_st { - STACK_OF(X509_NAME_ENTRY) *entries; - int modified; /* true if 'bytes' needs to be built */ -# ifndef OPENSSL_NO_BUFFER - BUF_MEM *bytes; -# else - char *bytes; -# endif -/* unsigned long hash; Keep the hash around for lookups */ - unsigned char *canon_enc; - int canon_enclen; -} /* X509_NAME */ ; - -DECLARE_STACK_OF(X509_NAME) - -# define X509_EX_V_NETSCAPE_HACK 0x8000 -# define X509_EX_V_INIT 0x0001 -typedef struct X509_extension_st { - ASN1_OBJECT *object; - ASN1_BOOLEAN critical; - ASN1_OCTET_STRING *value; -} X509_EXTENSION; - -typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DECLARE_STACK_OF(X509_EXTENSION) -DECLARE_ASN1_SET_OF(X509_EXTENSION) - -/* a sequence of these are used */ -typedef struct x509_attributes_st { - ASN1_OBJECT *object; - int single; /* 0 for a set, 1 for a single item (which is - * wrong) */ - union { - char *ptr; - /* - * 0 - */ STACK_OF(ASN1_TYPE) *set; - /* - * 1 - */ ASN1_TYPE *single; - } value; -} X509_ATTRIBUTE; - -DECLARE_STACK_OF(X509_ATTRIBUTE) -DECLARE_ASN1_SET_OF(X509_ATTRIBUTE) - -typedef struct X509_req_info_st { - ASN1_ENCODING enc; - ASN1_INTEGER *version; - X509_NAME *subject; - X509_PUBKEY *pubkey; - /* d=2 hl=2 l= 0 cons: cont: 00 */ - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ -} X509_REQ_INFO; - -typedef struct X509_req_st { - X509_REQ_INFO *req_info; - X509_ALGOR *sig_alg; - ASN1_BIT_STRING *signature; - int references; -} X509_REQ; - -typedef struct x509_cinf_st { - ASN1_INTEGER *version; /* [ 0 ] default of v1 */ - ASN1_INTEGER *serialNumber; - X509_ALGOR *signature; - X509_NAME *issuer; - X509_VAL *validity; - X509_NAME *subject; - X509_PUBKEY *key; - ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ - ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ - STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ - ASN1_ENCODING enc; -} X509_CINF; - -/* - * This stuff is certificate "auxiliary info" it contains details which are - * useful in certificate stores and databases. When used this is tagged onto - * the end of the certificate itself - */ - -typedef struct x509_cert_aux_st { - STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ - STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ - ASN1_UTF8STRING *alias; /* "friendly name" */ - ASN1_OCTET_STRING *keyid; /* key id of private key */ - STACK_OF(X509_ALGOR) *other; /* other unspecified info */ -} X509_CERT_AUX; - -struct x509_st { - X509_CINF *cert_info; - X509_ALGOR *sig_alg; - ASN1_BIT_STRING *signature; - int valid; - int references; - char *name; - CRYPTO_EX_DATA ex_data; - /* These contain copies of various extension values */ - long ex_pathlen; - long ex_pcpathlen; - unsigned long ex_flags; - unsigned long ex_kusage; - unsigned long ex_xkusage; - unsigned long ex_nscert; - ASN1_OCTET_STRING *skid; - AUTHORITY_KEYID *akid; - X509_POLICY_CACHE *policy_cache; - STACK_OF(DIST_POINT) *crldp; - STACK_OF(GENERAL_NAME) *altname; - NAME_CONSTRAINTS *nc; -# ifndef OPENSSL_NO_RFC3779 - STACK_OF(IPAddressFamily) *rfc3779_addr; - struct ASIdentifiers_st *rfc3779_asid; -# endif -# ifndef OPENSSL_NO_SHA - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; -# endif - X509_CERT_AUX *aux; -} /* X509 */ ; - -DECLARE_STACK_OF(X509) -DECLARE_ASN1_SET_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DECLARE_STACK_OF(X509_TRUST) - -typedef struct x509_cert_pair_st { - X509 *forward; - X509 *reverse; -} X509_CERT_PAIR; - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT -1/* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC 1 -# define X509_TRUST_DYNAMIC_NAME 2 - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - -/* Flags for X509_print_ex() */ - -# define X509_FLAG_COMPAT 0 -# define X509_FLAG_NO_HEADER 1L -# define X509_FLAG_NO_VERSION (1L << 1) -# define X509_FLAG_NO_SERIAL (1L << 2) -# define X509_FLAG_NO_SIGNAME (1L << 3) -# define X509_FLAG_NO_ISSUER (1L << 4) -# define X509_FLAG_NO_VALIDITY (1L << 5) -# define X509_FLAG_NO_SUBJECT (1L << 6) -# define X509_FLAG_NO_PUBKEY (1L << 7) -# define X509_FLAG_NO_EXTENSIONS (1L << 8) -# define X509_FLAG_NO_SIGDUMP (1L << 9) -# define X509_FLAG_NO_AUX (1L << 10) -# define X509_FLAG_NO_ATTRIBUTES (1L << 11) -# define X509_FLAG_NO_IDS (1L << 12) - -/* Flags specific to X509_NAME_print_ex() */ - -/* The field separator information */ - -# define XN_FLAG_SEP_MASK (0xf << 16) - -# define XN_FLAG_COMPAT 0/* Traditional SSLeay: use old - * X509_NAME_print */ -# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ -# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ -# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ -# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ - -# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ - -/* How the field name is shown */ - -# define XN_FLAG_FN_MASK (0x3 << 21) - -# define XN_FLAG_FN_SN 0/* Object short name */ -# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ -# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ -# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ - -# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ - -/* - * This determines if we dump fields we don't recognise: RFC2253 requires - * this. - */ - -# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) - -# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 - * characters */ - -/* Complete set of RFC2253 flags */ - -# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ - XN_FLAG_SEP_COMMA_PLUS | \ - XN_FLAG_DN_REV | \ - XN_FLAG_FN_SN | \ - XN_FLAG_DUMP_UNKNOWN_FIELDS) - -/* readable oneline form */ - -# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ - ASN1_STRFLGS_ESC_QUOTE | \ - XN_FLAG_SEP_CPLUS_SPC | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_SN) - -/* readable multiline form */ - -# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - XN_FLAG_SEP_MULTILINE | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_LN | \ - XN_FLAG_FN_ALIGN) - -struct x509_revoked_st { - ASN1_INTEGER *serialNumber; - ASN1_TIME *revocationDate; - STACK_OF(X509_EXTENSION) /* optional */ *extensions; - /* Set up if indirect CRL */ - STACK_OF(GENERAL_NAME) *issuer; - /* Revocation reason */ - int reason; - int sequence; /* load sequence */ -}; - -DECLARE_STACK_OF(X509_REVOKED) -DECLARE_ASN1_SET_OF(X509_REVOKED) - -typedef struct X509_crl_info_st { - ASN1_INTEGER *version; - X509_ALGOR *sig_alg; - X509_NAME *issuer; - ASN1_TIME *lastUpdate; - ASN1_TIME *nextUpdate; - STACK_OF(X509_REVOKED) *revoked; - STACK_OF(X509_EXTENSION) /* [0] */ *extensions; - ASN1_ENCODING enc; -} X509_CRL_INFO; - -struct X509_crl_st { - /* actual signature */ - X509_CRL_INFO *crl; - X509_ALGOR *sig_alg; - ASN1_BIT_STRING *signature; - int references; - int flags; - /* Copies of various extensions */ - AUTHORITY_KEYID *akid; - ISSUING_DIST_POINT *idp; - /* Convenient breakdown of IDP */ - int idp_flags; - int idp_reasons; - /* CRL and base CRL numbers for delta processing */ - ASN1_INTEGER *crl_number; - ASN1_INTEGER *base_crl_number; -# ifndef OPENSSL_NO_SHA - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; -# endif - STACK_OF(GENERAL_NAMES) *issuers; - const X509_CRL_METHOD *meth; - void *meth_data; -} /* X509_CRL */ ; - -DECLARE_STACK_OF(X509_CRL) -DECLARE_ASN1_SET_OF(X509_CRL) - -typedef struct private_key_st { - int version; - /* The PKCS#8 data types */ - X509_ALGOR *enc_algor; - ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ - /* When decrypted, the following will not be NULL */ - EVP_PKEY *dec_pkey; - /* used to encrypt and decrypt */ - int key_length; - char *key_data; - int key_free; /* true if we should auto free key_data */ - /* expanded version of 'enc_algor' */ - EVP_CIPHER_INFO cipher; - int references; -} X509_PKEY; - -# ifndef OPENSSL_NO_EVP -typedef struct X509_info_st { - X509 *x509; - X509_CRL *crl; - X509_PKEY *x_pkey; - EVP_CIPHER_INFO enc_cipher; - int enc_len; - char *enc_data; - int references; -} X509_INFO; - -DECLARE_STACK_OF(X509_INFO) -# endif - -/* - * The next 2 structures and their 8 routines were sent to me by Pat Richard - * and are used to manipulate Netscapes spki structures - - * useful if you are writing a CA web page - */ -typedef struct Netscape_spkac_st { - X509_PUBKEY *pubkey; - ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ -} NETSCAPE_SPKAC; - -typedef struct Netscape_spki_st { - NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ - X509_ALGOR *sig_algor; - ASN1_BIT_STRING *signature; -} NETSCAPE_SPKI; - -/* Netscape certificate sequence structure */ -typedef struct Netscape_certificate_sequence { - ASN1_OBJECT *type; - STACK_OF(X509) *certs; -} NETSCAPE_CERT_SEQUENCE; - -/*- Unused (and iv length is wrong) -typedef struct CBCParameter_st - { - unsigned char iv[8]; - } CBC_PARAM; -*/ - -/* Password based encryption structure */ - -typedef struct PBEPARAM_st { - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *iter; -} PBEPARAM; - -/* Password based encryption V2 structures */ - -typedef struct PBE2PARAM_st { - X509_ALGOR *keyfunc; - X509_ALGOR *encryption; -} PBE2PARAM; - -typedef struct PBKDF2PARAM_st { -/* Usually OCTET STRING but could be anything */ - ASN1_TYPE *salt; - ASN1_INTEGER *iter; - ASN1_INTEGER *keylength; - X509_ALGOR *prf; -} PBKDF2PARAM; - -/* PKCS#8 private key info structure */ - -struct pkcs8_priv_key_info_st { - /* Flag for various broken formats */ - int broken; -# define PKCS8_OK 0 -# define PKCS8_NO_OCTET 1 -# define PKCS8_EMBEDDED_PARAM 2 -# define PKCS8_NS_DB 3 -# define PKCS8_NEG_PRIVKEY 4 - ASN1_INTEGER *version; - X509_ALGOR *pkeyalg; - /* Should be OCTET STRING but some are broken */ - ASN1_TYPE *pkey; - STACK_OF(X509_ATTRIBUTE) *attributes; -}; - -#ifdef __cplusplus -} -#endif - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define X509_EXT_PACK_UNKNOWN 1 -# define X509_EXT_PACK_STRING 2 - -# define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version) -/* #define X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */ -# define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore) -# define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter) -# define X509_extract_key(x) X509_get_pubkey(x)/*****/ -# define X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version) -# define X509_REQ_get_subject_name(x) ((x)->req_info->subject) -# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) -# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) -# define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) - -# define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version) -# define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate) -# define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate) -# define X509_CRL_get_issuer(x) ((x)->crl->issuer) -# define X509_CRL_get_REVOKED(x) ((x)->crl->revoked) - -void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); -X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), - int (*crl_free) (X509_CRL *crl), - int (*crl_lookup) (X509_CRL *crl, - X509_REVOKED **ret, - ASN1_INTEGER *ser, - X509_NAME *issuer), - int (*crl_verify) (X509_CRL *crl, - EVP_PKEY *pk)); -void X509_CRL_METHOD_free(X509_CRL_METHOD *m); - -void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); -void *X509_CRL_get_meth_data(X509_CRL *crl); - -/* - * This one is only used so that a binary form can output, as in - * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) - */ -# define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) - -const char *X509_verify_cert_error_string(long n); - -# ifndef OPENSSL_NO_EVP -int X509_verify(X509 *a, EVP_PKEY *r); - -int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); -int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); -int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); - -NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); -char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); -EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); -int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); - -int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); - -int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); -int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig); - -int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); -int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); - -int X509_pubkey_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -# endif - -# ifndef OPENSSL_NO_FP_API -X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); -X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); -# endif - -# ifndef OPENSSL_NO_BIO -X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); -X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); -# endif - -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); -int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, - void *pval); -void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, - X509_ALGOR *algor); -void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); -int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); - -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); - -int X509_cmp_time(const ASN1_TIME *s, time_t *t); -int X509_cmp_current_time(const ASN1_TIME *s); -ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); -ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, - int offset_day, long offset_sec, time_t *t); -ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); - -const char *X509_get_default_cert_area(void); -const char *X509_get_default_cert_dir(void); -const char *X509_get_default_cert_file(void); -const char *X509_get_default_cert_dir_env(void); -const char *X509_get_default_cert_file_env(void); -const char *X509_get_default_private_dir(void); - -X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); - -DECLARE_ASN1_FUNCTIONS(X509_ALGOR) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) -DECLARE_ASN1_FUNCTIONS(X509_VAL) - -DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) - -int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); -int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); -# endif - -DECLARE_ASN1_FUNCTIONS(X509_SIG) -DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) -DECLARE_ASN1_FUNCTIONS(X509_REQ) - -DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) -X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); - -DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) - -DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) - -DECLARE_ASN1_FUNCTIONS(X509_NAME) - -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(X509_CINF) - -DECLARE_ASN1_FUNCTIONS(X509) -DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) - -DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR) - -int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); -int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); - -int i2d_re_X509_tbs(X509 *x, unsigned char **pp); - -void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, - const X509 *x); -int X509_get_signature_nid(const X509 *x); - -int X509_alias_set1(X509 *x, unsigned char *name, int len); -int X509_keyid_set1(X509 *x, unsigned char *id, int len); -unsigned char *X509_alias_get0(X509 *x, int *len); -unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -DECLARE_ASN1_FUNCTIONS(X509_REVOKED) -DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) -DECLARE_ASN1_FUNCTIONS(X509_CRL) - -int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); -int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); -int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); - -X509_PKEY *X509_PKEY_new(void); -void X509_PKEY_free(X509_PKEY *a); -int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp); -X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, - long length); - -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) - -# ifndef OPENSSL_NO_EVP -X509_INFO *X509_INFO_new(void); -void X509_INFO_free(X509_INFO *a); -char *X509_NAME_oneline(X509_NAME *a, char *buf, int size); - -int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - -int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, - unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - -int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, - unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); -int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); -# endif - -int X509_set_version(X509 *x, long version); -int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); -ASN1_INTEGER *X509_get_serialNumber(X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_issuer_name(X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_subject_name(X509 *a); -int X509_set_notBefore(X509 *x, const ASN1_TIME *tm); -int X509_set_notAfter(X509 *x, const ASN1_TIME *tm); -int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); -EVP_PKEY *X509_get_pubkey(X509 *x); -ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ ); - -int X509_REQ_set_version(X509_REQ *x, long version); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); -int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); -EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -int X509_REQ_extension_nid(int nid); -int *X509_REQ_get_extension_nids(void); -void X509_REQ_set_extension_nids(int *nids); -STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); -int X509_REQ_get_attr_count(const X509_REQ *req); -int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); -int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); -X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); -int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); -int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_NID(X509_REQ *req, - int nid, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_txt(X509_REQ *req, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); -int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_sort(X509_CRL *crl); - -int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); -int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); - -X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, - EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); - -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); - -int X509_check_private_key(X509 *x509, EVP_PKEY *pkey); -int X509_chain_check_suiteb(int *perror_depth, - X509 *x, STACK_OF(X509) *chain, - unsigned long flags); -int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); -STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); - -int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_and_serial_hash(X509 *a); - -int X509_issuer_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_name_hash(X509 *a); - -int X509_subject_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_subject_name_hash(X509 *x); - -# ifndef OPENSSL_NO_MD5 -unsigned long X509_issuer_name_hash_old(X509 *a); -unsigned long X509_subject_name_hash_old(X509 *x); -# endif - -int X509_cmp(const X509 *a, const X509 *b); -int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); - -int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); -int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); -# ifndef OPENSSL_NO_FP_API -int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print_fp(FILE *bp, X509 *x); -int X509_CRL_print_fp(FILE *bp, X509_CRL *x); -int X509_REQ_print_fp(FILE *bp, X509_REQ *req); -int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, - unsigned long flags); -# endif - -# ifndef OPENSSL_NO_BIO -int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); -int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, - unsigned long flags); -int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print(BIO *bp, X509 *x); -int X509_ocspid_print(BIO *bp, X509 *x); -int X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent); -int X509_CRL_print(BIO *bp, X509_CRL *x); -int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, - unsigned long cflag); -int X509_REQ_print(BIO *bp, X509_REQ *req); -# endif - -int X509_NAME_entry_count(X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, - char *buf, int len); - -/* - * NOTE: you should be passsing -1, not 0 as lastpos. The functions that use - * lastpos, search after that position on. - */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, - int lastpos); -X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc); -X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); -int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, - int loc, int set); -int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, - unsigned char *bytes, int len, int loc, - int set); -int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, - unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, - const char *field, int type, - const unsigned char *bytes, - int len); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, - int type, unsigned char *bytes, - int len); -int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, - const unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, - ASN1_OBJECT *obj, int type, - const unsigned char *bytes, - int len); -int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj); -int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, - const unsigned char *bytes, int len); -ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); -ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); - -int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); -int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, - int nid, int lastpos); -int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, - ASN1_OBJECT *obj, int lastpos); -int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, - int crit, int lastpos); -X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); -X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); -STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, - X509_EXTENSION *ex, int loc); - -int X509_get_ext_count(X509 *x); -int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); -int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos); -int X509_get_ext_by_critical(X509 *x, int crit, int lastpos); -X509_EXTENSION *X509_get_ext(X509 *x, int loc); -X509_EXTENSION *X509_delete_ext(X509 *x, int loc); -int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); -void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx); -int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_CRL_get_ext_count(X509_CRL *x); -int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); -int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos); -int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos); -X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); -X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); -int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); -void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx); -int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_REVOKED_get_ext_count(X509_REVOKED *x); -int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); -int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj, - int lastpos); -int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos); -X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); -X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); -int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); -void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx); -int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, - unsigned long flags); - -X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, - int nid, int crit, - ASN1_OCTET_STRING *data); -X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, - ASN1_OBJECT *obj, int crit, - ASN1_OCTET_STRING *data); -int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj); -int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); -int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); -ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); -ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); -int X509_EXTENSION_get_critical(X509_EXTENSION *ex); - -int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); -int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, - int lastpos); -int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, - ASN1_OBJECT *obj, int lastpos); -X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); -X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, - X509_ATTRIBUTE *attr); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) - **x, const ASN1_OBJECT *obj, - int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) - **x, int nid, int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) - **x, const char *attrname, - int type, - const unsigned char *bytes, - int len); -void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj, - int lastpos, int type); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, - const ASN1_OBJECT *obj, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, - const char *atrname, int type, - const unsigned char *bytes, - int len); -int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); -int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, - const void *data, int len); -void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, - void *data); -int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr); -ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); -ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); - -int EVP_PKEY_get_attr_count(const EVP_PKEY *key); -int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); -int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); -X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); -int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); -int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, - int nid, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_verify_cert(X509_STORE_CTX *ctx); - -/* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(PBEPARAM) -DECLARE_ASN1_FUNCTIONS(PBE2PARAM) -DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) - -int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, - const unsigned char *salt, int saltlen); - -X509_ALGOR *PKCS5_pbe_set(int alg, int iter, - const unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen, - unsigned char *aiv, int prf_nid); - -X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, - int prf_nid, int keylen); - -/* PKCS#8 utilities */ - -DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) - -EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken); -PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken); - -int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, - int version, int ptype, void *pval, - unsigned char *penc, int penclen); -int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8); - -int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, - int ptype, void *pval, - unsigned char *penc, int penclen); -int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(X509_TRUST *xp); -char *X509_TRUST_get0_name(X509_TRUST *xp); -int X509_TRUST_get_trust(X509_TRUST *xp); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -void ERR_load_X509_strings(void); - -/* Error codes for the X509 functions. */ - -/* Function codes. */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 106 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_GET 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 - -/* Reason codes. */ -# define X509_R_AKID_MISMATCH 110 -# define X509_R_BAD_X509_FILETYPE 100 -# define X509_R_BASE64_DECODE_ERROR 118 -# define X509_R_CANT_CHECK_DH_KEY 114 -# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 -# define X509_R_CRL_ALREADY_DELTA 127 -# define X509_R_CRL_VERIFY_FAILURE 131 -# define X509_R_ERR_ASN1_LIB 102 -# define X509_R_IDP_MISMATCH 128 -# define X509_R_INVALID_DIRECTORY 113 -# define X509_R_INVALID_FIELD_NAME 119 -# define X509_R_INVALID_TRUST 123 -# define X509_R_ISSUER_MISMATCH 129 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 -# define X509_R_NO_CRL_NUMBER 130 -# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 -# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 -# define X509_R_SHOULD_RETRY 106 -# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 -# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 -# define X509_R_UNKNOWN_KEY_TYPE 117 -# define X509_R_UNKNOWN_NID 109 -# define X509_R_UNKNOWN_PURPOSE_ID 121 -# define X509_R_UNKNOWN_TRUST_ID 120 -# define X509_R_UNSUPPORTED_ALGORITHM 111 -# define X509_R_WRONG_LOOKUP_TYPE 112 -# define X509_R_WRONG_TYPE 122 - -# ifdef __cplusplus -} -# endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/x509_vfy.h b/ext/openssl/windows/x64/include/openssl/x509_vfy.h deleted file mode 100644 index 50626826..00000000 --- a/ext/openssl/windows/x64/include/openssl/x509_vfy.h +++ /dev/null @@ -1,652 +0,0 @@ -/* crypto/x509/x509_vfy.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_X509_H -# include -/* - * openssl/x509.h ends up #include-ing this file at about the only - * appropriate moment. - */ -#endif - -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H - -# include -# ifndef OPENSSL_NO_LHASH -# include -# endif -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# if 0 -/* Outer object */ -typedef struct x509_hash_dir_st { - int num_dirs; - char **dirs; - int *dirs_type; - int num_dirs_alloced; -} X509_HASH_DIR_CTX; -# endif - -typedef struct x509_file_st { - int num_paths; /* number of paths to files or directories */ - int num_alloced; - char **paths; /* the list of paths or directories */ - int *path_type; -} X509_CERT_FILE_CTX; - -/*******************************/ -/*- -SSL_CTX -> X509_STORE - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -SSL -> X509_STORE_CTX - ->X509_STORE - -The X509_STORE holds the tables etc for verification stuff. -A X509_STORE_CTX is used while validating a single certificate. -The X509_STORE has X509_LOOKUPs for looking up certs. -The X509_STORE then calls a function to actually verify the -certificate chain. -*/ - -# define X509_LU_RETRY -1 -# define X509_LU_FAIL 0 -# define X509_LU_X509 1 -# define X509_LU_CRL 2 -# define X509_LU_PKEY 3 - -typedef struct x509_object_st { - /* one of the above types */ - int type; - union { - char *ptr; - X509 *x509; - X509_CRL *crl; - EVP_PKEY *pkey; - } data; -} X509_OBJECT; - -typedef struct x509_lookup_st X509_LOOKUP; - -DECLARE_STACK_OF(X509_LOOKUP) -DECLARE_STACK_OF(X509_OBJECT) - -/* This is a static that defines the function interface */ -typedef struct x509_lookup_method_st { - const char *name; - int (*new_item) (X509_LOOKUP *ctx); - void (*free) (X509_LOOKUP *ctx); - int (*init) (X509_LOOKUP *ctx); - int (*shutdown) (X509_LOOKUP *ctx); - int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl, - char **ret); - int (*get_by_subject) (X509_LOOKUP *ctx, int type, X509_NAME *name, - X509_OBJECT *ret); - int (*get_by_issuer_serial) (X509_LOOKUP *ctx, int type, X509_NAME *name, - ASN1_INTEGER *serial, X509_OBJECT *ret); - int (*get_by_fingerprint) (X509_LOOKUP *ctx, int type, - unsigned char *bytes, int len, - X509_OBJECT *ret); - int (*get_by_alias) (X509_LOOKUP *ctx, int type, char *str, int len, - X509_OBJECT *ret); -} X509_LOOKUP_METHOD; - -typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; - -/* - * This structure hold all parameters associated with a verify operation by - * including an X509_VERIFY_PARAM structure in related structures the - * parameters used can be customized - */ - -typedef struct X509_VERIFY_PARAM_st { - char *name; - time_t check_time; /* Time to use */ - unsigned long inh_flags; /* Inheritance flags */ - unsigned long flags; /* Various verify flags */ - int purpose; /* purpose to check untrusted certificates */ - int trust; /* trust setting to check */ - int depth; /* Verify depth */ - STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ - X509_VERIFY_PARAM_ID *id; /* opaque ID data */ -} X509_VERIFY_PARAM; - -DECLARE_STACK_OF(X509_VERIFY_PARAM) - -/* - * This is used to hold everything. It is used for all certificate - * validation. Once we have a certificate chain, the 'verify' function is - * then called to actually check the cert chain. - */ -struct x509_store_st { - /* The following is a cache of trusted certs */ - int cache; /* if true, stash any hits */ - STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */ - /* These are external lookup methods */ - STACK_OF(X509_LOOKUP) *get_cert_methods; - X509_VERIFY_PARAM *param; - /* Callbacks for various operations */ - /* called to verify a certificate */ - int (*verify) (X509_STORE_CTX *ctx); - /* error callback */ - int (*verify_cb) (int ok, X509_STORE_CTX *ctx); - /* get issuers cert from ctx */ - int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - /* check issued */ - int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); - /* Check revocation status of chain */ - int (*check_revocation) (X509_STORE_CTX *ctx); - /* retrieve CRL */ - int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); - /* Check CRL validity */ - int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); - /* Check certificate against CRL */ - int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); - int (*cleanup) (X509_STORE_CTX *ctx); - CRYPTO_EX_DATA ex_data; - int references; -} /* X509_STORE */ ; - -int X509_STORE_set_depth(X509_STORE *store, int depth); - -# define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) -# define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) - -/* This is the functions plus an instance of the local variables. */ -struct x509_lookup_st { - int init; /* have we been started */ - int skip; /* don't use us. */ - X509_LOOKUP_METHOD *method; /* the functions */ - char *method_data; /* method data */ - X509_STORE *store_ctx; /* who owns us */ -} /* X509_LOOKUP */ ; - -/* - * This is a used when verifying cert chains. Since the gathering of the - * cert chain can take some time (and have to be 'retried', this needs to be - * kept and passed around. - */ -struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *ctx; - /* used when looking up certs */ - int current_method; - /* The following are set by the caller */ - /* The cert to check */ - X509 *cert; - /* chain of X509s - untrusted - passed in */ - STACK_OF(X509) *untrusted; - /* set of CRLs passed in */ - STACK_OF(X509_CRL) *crls; - X509_VERIFY_PARAM *param; - /* Other info for use with get_issuer() */ - void *other_ctx; - /* Callbacks for various operations */ - /* called to verify a certificate */ - int (*verify) (X509_STORE_CTX *ctx); - /* error callback */ - int (*verify_cb) (int ok, X509_STORE_CTX *ctx); - /* get issuers cert from ctx */ - int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - /* check issued */ - int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); - /* Check revocation status of chain */ - int (*check_revocation) (X509_STORE_CTX *ctx); - /* retrieve CRL */ - int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); - /* Check CRL validity */ - int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); - /* Check certificate against CRL */ - int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); - int (*check_policy) (X509_STORE_CTX *ctx); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); - int (*cleanup) (X509_STORE_CTX *ctx); - /* The following is built up */ - /* if 0, rebuild chain */ - int valid; - /* index of last untrusted cert */ - int last_untrusted; - /* chain of X509s - built up and trusted */ - STACK_OF(X509) *chain; - /* Valid policy tree */ - X509_POLICY_TREE *tree; - /* Require explicit policy value */ - int explicit_policy; - /* When something goes wrong, this is why */ - int error_depth; - int error; - X509 *current_cert; - /* cert currently being tested as valid issuer */ - X509 *current_issuer; - /* current CRL */ - X509_CRL *current_crl; - /* score of current CRL */ - int current_crl_score; - /* Reason mask */ - unsigned int current_reasons; - /* For CRL path validation: parent context */ - X509_STORE_CTX *parent; - CRYPTO_EX_DATA ex_data; -} /* X509_STORE_CTX */ ; - -void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); - -# define X509_STORE_CTX_set_app_data(ctx,data) \ - X509_STORE_CTX_set_ex_data(ctx,0,data) -# define X509_STORE_CTX_get_app_data(ctx) \ - X509_STORE_CTX_get_ex_data(ctx,0) - -# define X509_L_FILE_LOAD 1 -# define X509_L_ADD_DIR 2 - -# define X509_LOOKUP_load_file(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) - -# define X509_LOOKUP_add_dir(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) - -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 - -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 - -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 - -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 - -# define X509_V_ERR_UNNESTED_RESOURCE 46 - -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 - -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 - -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 - -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 65 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 66 - -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 67 - -/* Certificate verify flags */ - -/* Send issuer+subject checks to verify_cb */ -# define X509_V_FLAG_CB_ISSUER_CHECK 0x1 -/* Use check time instead of current time */ -# define X509_V_FLAG_USE_CHECK_TIME 0x2 -/* Lookup CRLs */ -# define X509_V_FLAG_CRL_CHECK 0x4 -/* Lookup CRLs for whole chain */ -# define X509_V_FLAG_CRL_CHECK_ALL 0x8 -/* Ignore unhandled critical extensions */ -# define X509_V_FLAG_IGNORE_CRITICAL 0x10 -/* Disable workarounds for broken certificates */ -# define X509_V_FLAG_X509_STRICT 0x20 -/* Enable proxy certificate validation */ -# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 -/* Enable policy checking */ -# define X509_V_FLAG_POLICY_CHECK 0x80 -/* Policy variable require-explicit-policy */ -# define X509_V_FLAG_EXPLICIT_POLICY 0x100 -/* Policy variable inhibit-any-policy */ -# define X509_V_FLAG_INHIBIT_ANY 0x200 -/* Policy variable inhibit-policy-mapping */ -# define X509_V_FLAG_INHIBIT_MAP 0x400 -/* Notify callback that policy is OK */ -# define X509_V_FLAG_NOTIFY_POLICY 0x800 -/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ -# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 -/* Delta CRL support */ -# define X509_V_FLAG_USE_DELTAS 0x2000 -/* Check selfsigned CA signature */ -# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 -/* Use trusted store first */ -# define X509_V_FLAG_TRUSTED_FIRST 0x8000 -/* Suite B 128 bit only mode: not normally used */ -# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define X509_V_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define X509_V_FLAG_SUITEB_128_LOS 0x30000 - -/* Allow partial chains if at least one certificate is in trusted store */ -# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 -/* - * If the initial chain is not trusted, do not attempt to build an alternative - * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag - * will force the behaviour to match that of previous versions. - */ -# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 - -# define X509_VP_FLAG_DEFAULT 0x1 -# define X509_VP_FLAG_OVERWRITE 0x2 -# define X509_VP_FLAG_RESET_FLAGS 0x4 -# define X509_VP_FLAG_LOCKED 0x8 -# define X509_VP_FLAG_ONCE 0x10 - -/* Internal use: mask of policy related options */ -# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ - | X509_V_FLAG_EXPLICIT_POLICY \ - | X509_V_FLAG_INHIBIT_ANY \ - | X509_V_FLAG_INHIBIT_MAP) - -int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, - X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, - int type, X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, - X509_OBJECT *x); -void X509_OBJECT_up_ref_count(X509_OBJECT *a); -void X509_OBJECT_free_contents(X509_OBJECT *a); -X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); -int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); - -void X509_STORE_set_verify_cb(X509_STORE *ctx, - int (*verify_cb) (int, X509_STORE_CTX *)); - -void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, - STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX - *ctx, - X509_NAME *nm)); - -X509_STORE_CTX *X509_STORE_CTX_new(void); - -int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - -void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); -void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); -void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); - -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); - -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); - -X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); -X509_LOOKUP_METHOD *X509_LOOKUP_file(void); - -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); - -int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, - X509_OBJECT *ret); - -int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, - long argl, char **ret); - -# ifndef OPENSSL_NO_STDIO -int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); -# endif - -X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); -void X509_LOOKUP_free(X509_LOOKUP *ctx); -int X509_LOOKUP_init(X509_LOOKUP *ctx); -int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name, - X509_OBJECT *ret); -int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name, - ASN1_INTEGER *serial, X509_OBJECT *ret); -int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type, - unsigned char *bytes, int len, - X509_OBJECT *ret); -int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len, - X509_OBJECT *ret); -int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); - -# ifndef OPENSSL_NO_STDIO -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); -# endif - -int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, - CRYPTO_EX_new *new_func, - CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); -void X509_STORE_CTX_set_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); -int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); -int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); -int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, - int purpose, int trust); -void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); -void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, - time_t t); -void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, - int (*verify_cb) (int, X509_STORE_CTX *)); - -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); - -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); -int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); - -/* X509_VERIFY_PARAM functions */ - -X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); -void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); -int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); -int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); -void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); -void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); -int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, - ASN1_OBJECT *policy); -int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, - STACK_OF(ASN1_OBJECT) *policies); - -int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, - const char *name, size_t namelen); -int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, - const char *name, size_t namelen); -void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, - unsigned int flags); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); -int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, - const char *email, size_t emaillen); -int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, - const unsigned char *ip, size_t iplen); -int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, - const char *ipasc); - -int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); -const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); - -int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_get_count(void); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); -void X509_VERIFY_PARAM_table_cleanup(void); - -int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, - STACK_OF(X509) *certs, - STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); - -void X509_policy_tree_free(X509_POLICY_TREE *tree); - -int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); -X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, - int i); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); - -int X509_policy_level_node_count(X509_POLICY_LEVEL *level); - -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, - int i); - -const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); - -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/include/openssl/x509v3.h b/ext/openssl/windows/x64/include/openssl/x509v3.h deleted file mode 100644 index f5c61560..00000000 --- a/ext/openssl/windows/x64/include/openssl/x509v3.h +++ /dev/null @@ -1,1055 +0,0 @@ -/* x509v3.h */ -/* - * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project - * 1999. - */ -/* ==================================================================== - * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef OPENSSL_SYS_WIN32 -/* Under Win32 these are defined in wincrypt.h */ -# undef X509_NAME -# undef X509_CERT_PAIR -# undef X509_EXTENSIONS -# endif - -/* Forward reference */ -struct v3_ext_method; -struct v3_ext_ctx; - -/* Useful typedefs */ - -typedef void *(*X509V3_EXT_NEW)(void); -typedef void (*X509V3_EXT_FREE) (void *); -typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); -typedef STACK_OF(CONF_VALUE) * - (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, - STACK_OF(CONF_VALUE) *extlist); -typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, - STACK_OF(CONF_VALUE) *values); -typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, - void *ext); -typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); -typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, - BIO *out, int indent); -typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); - -/* V3 extension structure */ - -struct v3_ext_method { - int ext_nid; - int ext_flags; -/* If this is set the following four fields are ignored */ - ASN1_ITEM_EXP *it; -/* Old style ASN1 calls */ - X509V3_EXT_NEW ext_new; - X509V3_EXT_FREE ext_free; - X509V3_EXT_D2I d2i; - X509V3_EXT_I2D i2d; -/* The following pair is used for string extensions */ - X509V3_EXT_I2S i2s; - X509V3_EXT_S2I s2i; -/* The following pair is used for multi-valued extensions */ - X509V3_EXT_I2V i2v; - X509V3_EXT_V2I v2i; -/* The following are used for raw extensions */ - X509V3_EXT_I2R i2r; - X509V3_EXT_R2I r2i; - void *usr_data; /* Any extension specific data */ -}; - -typedef struct X509V3_CONF_METHOD_st { - char *(*get_string) (void *db, char *section, char *value); - STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section); - void (*free_string) (void *db, char *string); - void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); -} X509V3_CONF_METHOD; - -/* Context specific info */ -struct v3_ext_ctx { -# define CTX_TEST 0x1 - int flags; - X509 *issuer_cert; - X509 *subject_cert; - X509_REQ *subject_req; - X509_CRL *crl; - X509V3_CONF_METHOD *db_meth; - void *db; -/* Maybe more here */ -}; - -typedef struct v3_ext_method X509V3_EXT_METHOD; - -DECLARE_STACK_OF(X509V3_EXT_METHOD) - -/* ext_flags values */ -# define X509V3_EXT_DYNAMIC 0x1 -# define X509V3_EXT_CTX_DEP 0x2 -# define X509V3_EXT_MULTILINE 0x4 - -typedef BIT_STRING_BITNAME ENUMERATED_NAMES; - -typedef struct BASIC_CONSTRAINTS_st { - int ca; - ASN1_INTEGER *pathlen; -} BASIC_CONSTRAINTS; - -typedef struct PKEY_USAGE_PERIOD_st { - ASN1_GENERALIZEDTIME *notBefore; - ASN1_GENERALIZEDTIME *notAfter; -} PKEY_USAGE_PERIOD; - -typedef struct otherName_st { - ASN1_OBJECT *type_id; - ASN1_TYPE *value; -} OTHERNAME; - -typedef struct EDIPartyName_st { - ASN1_STRING *nameAssigner; - ASN1_STRING *partyName; -} EDIPARTYNAME; - -typedef struct GENERAL_NAME_st { -# define GEN_OTHERNAME 0 -# define GEN_EMAIL 1 -# define GEN_DNS 2 -# define GEN_X400 3 -# define GEN_DIRNAME 4 -# define GEN_EDIPARTY 5 -# define GEN_URI 6 -# define GEN_IPADD 7 -# define GEN_RID 8 - int type; - union { - char *ptr; - OTHERNAME *otherName; /* otherName */ - ASN1_IA5STRING *rfc822Name; - ASN1_IA5STRING *dNSName; - ASN1_TYPE *x400Address; - X509_NAME *directoryName; - EDIPARTYNAME *ediPartyName; - ASN1_IA5STRING *uniformResourceIdentifier; - ASN1_OCTET_STRING *iPAddress; - ASN1_OBJECT *registeredID; - /* Old names */ - ASN1_OCTET_STRING *ip; /* iPAddress */ - X509_NAME *dirn; /* dirn */ - ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, - * uniformResourceIdentifier */ - ASN1_OBJECT *rid; /* registeredID */ - ASN1_TYPE *other; /* x400Address */ - } d; -} GENERAL_NAME; - -typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; - -typedef struct ACCESS_DESCRIPTION_st { - ASN1_OBJECT *method; - GENERAL_NAME *location; -} ACCESS_DESCRIPTION; - -typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - -typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - -DECLARE_STACK_OF(GENERAL_NAME) -DECLARE_ASN1_SET_OF(GENERAL_NAME) - -DECLARE_STACK_OF(ACCESS_DESCRIPTION) -DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) - -typedef struct DIST_POINT_NAME_st { - int type; - union { - GENERAL_NAMES *fullname; - STACK_OF(X509_NAME_ENTRY) *relativename; - } name; -/* If relativename then this contains the full distribution point name */ - X509_NAME *dpname; -} DIST_POINT_NAME; -/* All existing reasons */ -# define CRLDP_ALL_REASONS 0x807f - -# define CRL_REASON_NONE -1 -# define CRL_REASON_UNSPECIFIED 0 -# define CRL_REASON_KEY_COMPROMISE 1 -# define CRL_REASON_CA_COMPROMISE 2 -# define CRL_REASON_AFFILIATION_CHANGED 3 -# define CRL_REASON_SUPERSEDED 4 -# define CRL_REASON_CESSATION_OF_OPERATION 5 -# define CRL_REASON_CERTIFICATE_HOLD 6 -# define CRL_REASON_REMOVE_FROM_CRL 8 -# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 -# define CRL_REASON_AA_COMPROMISE 10 - -struct DIST_POINT_st { - DIST_POINT_NAME *distpoint; - ASN1_BIT_STRING *reasons; - GENERAL_NAMES *CRLissuer; - int dp_reasons; -}; - -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; - -DECLARE_STACK_OF(DIST_POINT) -DECLARE_ASN1_SET_OF(DIST_POINT) - -struct AUTHORITY_KEYID_st { - ASN1_OCTET_STRING *keyid; - GENERAL_NAMES *issuer; - ASN1_INTEGER *serial; -}; - -/* Strong extranet structures */ - -typedef struct SXNET_ID_st { - ASN1_INTEGER *zone; - ASN1_OCTET_STRING *user; -} SXNETID; - -DECLARE_STACK_OF(SXNETID) -DECLARE_ASN1_SET_OF(SXNETID) - -typedef struct SXNET_st { - ASN1_INTEGER *version; - STACK_OF(SXNETID) *ids; -} SXNET; - -typedef struct NOTICEREF_st { - ASN1_STRING *organization; - STACK_OF(ASN1_INTEGER) *noticenos; -} NOTICEREF; - -typedef struct USERNOTICE_st { - NOTICEREF *noticeref; - ASN1_STRING *exptext; -} USERNOTICE; - -typedef struct POLICYQUALINFO_st { - ASN1_OBJECT *pqualid; - union { - ASN1_IA5STRING *cpsuri; - USERNOTICE *usernotice; - ASN1_TYPE *other; - } d; -} POLICYQUALINFO; - -DECLARE_STACK_OF(POLICYQUALINFO) -DECLARE_ASN1_SET_OF(POLICYQUALINFO) - -typedef struct POLICYINFO_st { - ASN1_OBJECT *policyid; - STACK_OF(POLICYQUALINFO) *qualifiers; -} POLICYINFO; - -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; - -DECLARE_STACK_OF(POLICYINFO) -DECLARE_ASN1_SET_OF(POLICYINFO) - -typedef struct POLICY_MAPPING_st { - ASN1_OBJECT *issuerDomainPolicy; - ASN1_OBJECT *subjectDomainPolicy; -} POLICY_MAPPING; - -DECLARE_STACK_OF(POLICY_MAPPING) - -typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; - -typedef struct GENERAL_SUBTREE_st { - GENERAL_NAME *base; - ASN1_INTEGER *minimum; - ASN1_INTEGER *maximum; -} GENERAL_SUBTREE; - -DECLARE_STACK_OF(GENERAL_SUBTREE) - -struct NAME_CONSTRAINTS_st { - STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; - STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; -}; - -typedef struct POLICY_CONSTRAINTS_st { - ASN1_INTEGER *requireExplicitPolicy; - ASN1_INTEGER *inhibitPolicyMapping; -} POLICY_CONSTRAINTS; - -/* Proxy certificate structures, see RFC 3820 */ -typedef struct PROXY_POLICY_st { - ASN1_OBJECT *policyLanguage; - ASN1_OCTET_STRING *policy; -} PROXY_POLICY; - -typedef struct PROXY_CERT_INFO_EXTENSION_st { - ASN1_INTEGER *pcPathLengthConstraint; - PROXY_POLICY *proxyPolicy; -} PROXY_CERT_INFO_EXTENSION; - -DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) -DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) - -struct ISSUING_DIST_POINT_st { - DIST_POINT_NAME *distpoint; - int onlyuser; - int onlyCA; - ASN1_BIT_STRING *onlysomereasons; - int indirectCRL; - int onlyattr; -}; - -/* Values in idp_flags field */ -/* IDP present */ -# define IDP_PRESENT 0x1 -/* IDP values inconsistent */ -# define IDP_INVALID 0x2 -/* onlyuser true */ -# define IDP_ONLYUSER 0x4 -/* onlyCA true */ -# define IDP_ONLYCA 0x8 -/* onlyattr true */ -# define IDP_ONLYATTR 0x10 -/* indirectCRL true */ -# define IDP_INDIRECT 0x20 -/* onlysomereasons present */ -# define IDP_REASONS 0x40 - -# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ -",name:", val->name, ",value:", val->value); - -# define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) -# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; - -# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ - 0,0,0,0, \ - 0,0, \ - (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ - (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ - NULL, NULL, \ - table} - -# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ - 0,0,0,0, \ - (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ - (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ - 0,0,0,0, \ - NULL} - -# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - -/* X509_PURPOSE stuff */ - -# define EXFLAG_BCONS 0x1 -# define EXFLAG_KUSAGE 0x2 -# define EXFLAG_XKUSAGE 0x4 -# define EXFLAG_NSCERT 0x8 - -# define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 -# define EXFLAG_V1 0x40 -# define EXFLAG_INVALID 0x80 -# define EXFLAG_SET 0x100 -# define EXFLAG_CRITICAL 0x200 -# define EXFLAG_PROXY 0x400 - -# define EXFLAG_INVALID_POLICY 0x800 -# define EXFLAG_FRESHEST 0x1000 -/* Self signed */ -# define EXFLAG_SS 0x2000 - -# define KU_DIGITAL_SIGNATURE 0x0080 -# define KU_NON_REPUDIATION 0x0040 -# define KU_KEY_ENCIPHERMENT 0x0020 -# define KU_DATA_ENCIPHERMENT 0x0010 -# define KU_KEY_AGREEMENT 0x0008 -# define KU_KEY_CERT_SIGN 0x0004 -# define KU_CRL_SIGN 0x0002 -# define KU_ENCIPHER_ONLY 0x0001 -# define KU_DECIPHER_ONLY 0x8000 - -# define NS_SSL_CLIENT 0x80 -# define NS_SSL_SERVER 0x40 -# define NS_SMIME 0x20 -# define NS_OBJSIGN 0x10 -# define NS_SSL_CA 0x04 -# define NS_SMIME_CA 0x02 -# define NS_OBJSIGN_CA 0x01 -# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) - -# define XKU_SSL_SERVER 0x1 -# define XKU_SSL_CLIENT 0x2 -# define XKU_SMIME 0x4 -# define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 -# define XKU_OCSP_SIGN 0x20 -# define XKU_TIMESTAMP 0x40 -# define XKU_DVCS 0x80 -# define XKU_ANYEKU 0x100 - -# define X509_PURPOSE_DYNAMIC 0x1 -# define X509_PURPOSE_DYNAMIC_NAME 0x2 - -typedef struct x509_purpose_st { - int purpose; - int trust; /* Default trust ID */ - int flags; - int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); - char *name; - char *sname; - void *usr_data; -} X509_PURPOSE; - -# define X509_PURPOSE_SSL_CLIENT 1 -# define X509_PURPOSE_SSL_SERVER 2 -# define X509_PURPOSE_NS_SSL_SERVER 3 -# define X509_PURPOSE_SMIME_SIGN 4 -# define X509_PURPOSE_SMIME_ENCRYPT 5 -# define X509_PURPOSE_CRL_SIGN 6 -# define X509_PURPOSE_ANY 7 -# define X509_PURPOSE_OCSP_HELPER 8 -# define X509_PURPOSE_TIMESTAMP_SIGN 9 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 9 - -/* Flags for X509V3_EXT_print() */ - -# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) -/* Return error for unknown extensions */ -# define X509V3_EXT_DEFAULT 0 -/* Print error for unknown extensions */ -# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) -/* ASN1 parse unknown extensions */ -# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) -/* BIO_dump unknown extensions */ -# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) - -/* Flags for X509V3_add1_i2d */ - -# define X509V3_ADD_OP_MASK 0xfL -# define X509V3_ADD_DEFAULT 0L -# define X509V3_ADD_APPEND 1L -# define X509V3_ADD_REPLACE 2L -# define X509V3_ADD_REPLACE_EXISTING 3L -# define X509V3_ADD_KEEP_EXISTING 4L -# define X509V3_ADD_DELETE 5L -# define X509V3_ADD_SILENT 0x10 - -DECLARE_STACK_OF(X509_PURPOSE) - -DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) - -DECLARE_ASN1_FUNCTIONS(SXNET) -DECLARE_ASN1_FUNCTIONS(SXNETID) - -int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen); -int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, - int userlen); -int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user, - int userlen); - -ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone); -ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); -ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); - -DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) - -DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); -int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); - -ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, - STACK_OF(CONF_VALUE) *nval); -STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - ASN1_BIT_STRING *bits, - STACK_OF(CONF_VALUE) *extlist); - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, - GENERAL_NAME *gen, - STACK_OF(CONF_VALUE) *ret); -int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, - GENERAL_NAMES *gen, - STACK_OF(CONF_VALUE) *extlist); -GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); - -DECLARE_ASN1_FUNCTIONS(OTHERNAME) -DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) -int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); -void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); -void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype); -int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, - ASN1_OBJECT *oid, ASN1_TYPE *value); -int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, - ASN1_OBJECT **poid, ASN1_TYPE **pvalue); - -char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, - ASN1_OCTET_STRING *ia5); -ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, char *str); - -DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) -int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a); - -DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) -DECLARE_ASN1_FUNCTIONS(POLICYINFO) -DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) -DECLARE_ASN1_FUNCTIONS(USERNOTICE) -DECLARE_ASN1_FUNCTIONS(NOTICEREF) - -DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) -DECLARE_ASN1_FUNCTIONS(DIST_POINT) -DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) -DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) - -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); - -int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); - -DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) -DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) - -DECLARE_ASN1_ITEM(POLICY_MAPPING) -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) -DECLARE_ASN1_ITEM(POLICY_MAPPINGS) - -DECLARE_ASN1_ITEM(GENERAL_SUBTREE) -DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) - -DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) -DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) - -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) -DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) - -GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, int gen_type, char *value, - int is_nc); - -# ifdef HEADER_CONF_H -GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf); -GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf, - int is_nc); -void X509V3_conf_free(CONF_VALUE *val); - -X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, - char *value); -X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, - char *value); -int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, - STACK_OF(X509_EXTENSION) **sk); -int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, - X509 *cert); -int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, - X509_REQ *req); -int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, - X509_CRL *crl); - -X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, - X509V3_CTX *ctx, int ext_nid, - char *value); -X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *name, char *value); -int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *section, X509 *cert); -int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *section, X509_REQ *req); -int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - char *section, X509_CRL *crl); - -int X509V3_add_value_bool_nf(char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool); -int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint); -void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); -void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); -# endif - -char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section); -STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section); -void X509V3_string_free(X509V3_CTX *ctx, char *str); -void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); -void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, - X509_REQ *req, X509_CRL *crl, int flags); - -int X509V3_add_value(const char *name, const char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_uchar(const char *name, const unsigned char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_bool(const char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, - STACK_OF(CONF_VALUE) **extlist); -char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint); -ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value); -char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); -char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, - ASN1_ENUMERATED *aint); -int X509V3_EXT_add(X509V3_EXT_METHOD *ext); -int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); -int X509V3_EXT_add_alias(int nid_to, int nid_from); -void X509V3_EXT_cleanup(void); - -const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); -const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); -int X509V3_add_standard_extensions(void); -STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); -void *X509V3_EXT_d2i(X509_EXTENSION *ext); -void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, - int *idx); -int X509V3_EXT_free(int nid, void *ext_data); - -X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); -int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, - int crit, unsigned long flags); - -char *hex_to_string(const unsigned char *buffer, long len); -unsigned char *string_to_hex(const char *str, long *len); -int name_cmp(const char *name, const char *cmp); - -void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, - int ml); -int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, - int indent); -int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); - -int X509V3_extensions_print(BIO *out, char *title, - STACK_OF(X509_EXTENSION) *exts, - unsigned long flag, int indent); - -int X509_check_ca(X509 *x); -int X509_check_purpose(X509 *x, int id, int ca); -int X509_supported_extension(X509_EXTENSION *ex); -int X509_PURPOSE_set(int *p, int purpose); -int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); -int X509_PURPOSE_get_count(void); -X509_PURPOSE *X509_PURPOSE_get0(int idx); -int X509_PURPOSE_get_by_sname(char *sname); -int X509_PURPOSE_get_by_id(int id); -int X509_PURPOSE_add(int id, int trust, int flags, - int (*ck) (const X509_PURPOSE *, const X509 *, int), - char *name, char *sname, void *arg); -char *X509_PURPOSE_get0_name(X509_PURPOSE *xp); -char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp); -int X509_PURPOSE_get_trust(X509_PURPOSE *xp); -void X509_PURPOSE_cleanup(void); -int X509_PURPOSE_get_id(X509_PURPOSE *); - -STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); -STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); -void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); -STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); -/* Flags for X509_check_* functions */ - -/* - * Always check subject name for host match even if subject alt names present - */ -# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 -/* Disable wildcard matching for dnsName fields and common name. */ -# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 -/* Wildcards must not match a partial label. */ -# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 -/* Allow (non-partial) wildcards to match multiple labels. */ -# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 -/* Constraint verifier subdomain patterns to match a single labels. */ -# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 -/* - * Match reference identifiers starting with "." to any sub-domain. - * This is a non-public flag, turned on implicitly when the subject - * reference identity is a DNS name. - */ -# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 - -int X509_check_host(X509 *x, const char *chk, size_t chklen, - unsigned int flags, char **peername); -int X509_check_email(X509 *x, const char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); - -ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); -ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); -int a2i_ipadd(unsigned char *ipout, const char *ipasc); -int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, - unsigned long chtype); - -void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DECLARE_STACK_OF(X509_POLICY_NODE) - -# ifndef OPENSSL_NO_RFC3779 - -typedef struct ASRange_st { - ASN1_INTEGER *min, *max; -} ASRange; - -# define ASIdOrRange_id 0 -# define ASIdOrRange_range 1 - -typedef struct ASIdOrRange_st { - int type; - union { - ASN1_INTEGER *id; - ASRange *range; - } u; -} ASIdOrRange; - -typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DECLARE_STACK_OF(ASIdOrRange) - -# define ASIdentifierChoice_inherit 0 -# define ASIdentifierChoice_asIdsOrRanges 1 - -typedef struct ASIdentifierChoice_st { - int type; - union { - ASN1_NULL *inherit; - ASIdOrRanges *asIdsOrRanges; - } u; -} ASIdentifierChoice; - -typedef struct ASIdentifiers_st { - ASIdentifierChoice *asnum, *rdi; -} ASIdentifiers; - -DECLARE_ASN1_FUNCTIONS(ASRange) -DECLARE_ASN1_FUNCTIONS(ASIdOrRange) -DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) -DECLARE_ASN1_FUNCTIONS(ASIdentifiers) - -typedef struct IPAddressRange_st { - ASN1_BIT_STRING *min, *max; -} IPAddressRange; - -# define IPAddressOrRange_addressPrefix 0 -# define IPAddressOrRange_addressRange 1 - -typedef struct IPAddressOrRange_st { - int type; - union { - ASN1_BIT_STRING *addressPrefix; - IPAddressRange *addressRange; - } u; -} IPAddressOrRange; - -typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DECLARE_STACK_OF(IPAddressOrRange) - -# define IPAddressChoice_inherit 0 -# define IPAddressChoice_addressesOrRanges 1 - -typedef struct IPAddressChoice_st { - int type; - union { - ASN1_NULL *inherit; - IPAddressOrRanges *addressesOrRanges; - } u; -} IPAddressChoice; - -typedef struct IPAddressFamily_st { - ASN1_OCTET_STRING *addressFamily; - IPAddressChoice *ipAddressChoice; -} IPAddressFamily; - -typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DECLARE_STACK_OF(IPAddressFamily) - -DECLARE_ASN1_FUNCTIONS(IPAddressRange) -DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) -DECLARE_ASN1_FUNCTIONS(IPAddressChoice) -DECLARE_ASN1_FUNCTIONS(IPAddressFamily) - -/* - * API tag for elements of the ASIdentifer SEQUENCE. - */ -# define V3_ASID_ASNUM 0 -# define V3_ASID_RDI 1 - -/* - * AFI values, assigned by IANA. It'd be nice to make the AFI - * handling code totally generic, but there are too many little things - * that would need to be defined for other address families for it to - * be worth the trouble. - */ -# define IANA_AFI_IPV4 1 -# define IANA_AFI_IPV6 2 - -/* - * Utilities to construct and extract values from RFC3779 extensions, - * since some of the encodings (particularly for IP address prefixes - * and ranges) are a bit tedious to work with directly. - */ -int v3_asid_add_inherit(ASIdentifiers *asid, int which); -int v3_asid_add_id_or_range(ASIdentifiers *asid, int which, - ASN1_INTEGER *min, ASN1_INTEGER *max); -int v3_addr_add_inherit(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi); -int v3_addr_add_prefix(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *a, const int prefixlen); -int v3_addr_add_range(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *min, unsigned char *max); -unsigned v3_addr_get_afi(const IPAddressFamily *f); -int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, - unsigned char *min, unsigned char *max, - const int length); - -/* - * Canonical forms. - */ -int v3_asid_is_canonical(ASIdentifiers *asid); -int v3_addr_is_canonical(IPAddrBlocks *addr); -int v3_asid_canonize(ASIdentifiers *asid); -int v3_addr_canonize(IPAddrBlocks *addr); - -/* - * Tests for inheritance and containment. - */ -int v3_asid_inherits(ASIdentifiers *asid); -int v3_addr_inherits(IPAddrBlocks *addr); -int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); -int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); - -/* - * Check whether RFC 3779 extensions nest properly in chains. - */ -int v3_asid_validate_path(X509_STORE_CTX *); -int v3_addr_validate_path(X509_STORE_CTX *); -int v3_asid_validate_resource_set(STACK_OF(X509) *chain, - ASIdentifiers *ext, int allow_inheritance); -int v3_addr_validate_resource_set(STACK_OF(X509) *chain, - IPAddrBlocks *ext, int allow_inheritance); - -# endif /* OPENSSL_NO_RFC3779 */ - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_X509V3_strings(void); - -/* Error codes for the X509V3 functions. */ - -/* Function codes. */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_CONF 124 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_HEX_TO_STRING 111 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_ASN1_SKEY_ID 114 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_STRING_TO_HEX 113 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL 160 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_CONF 107 -# define X509V3_F_X509V3_EXT_FREE 165 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 - -/* Reason codes. */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# define X509V3_R_CANNOT_FIND_FREE_FUNCTION 168 -# define X509V3_R_DIRNAME_ERROR 149 -# define X509V3_R_DISTPOINT_ALREADY_SET 160 -# define X509V3_R_DUPLICATE_ZONE_ID 133 -# define X509V3_R_ERROR_CONVERTING_ZONE 131 -# define X509V3_R_ERROR_CREATING_EXTENSION 144 -# define X509V3_R_ERROR_IN_EXTENSION 128 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_ILLEGAL_HEX_DIGIT 113 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# define X509V3_R_INVALID_ASNUMBER 162 -# define X509V3_R_INVALID_ASRANGE 163 -# define X509V3_R_INVALID_BOOLEAN_STRING 104 -# define X509V3_R_INVALID_EXTENSION_STRING 105 -# define X509V3_R_INVALID_INHERITANCE 165 -# define X509V3_R_INVALID_IPADDRESS 166 -# define X509V3_R_INVALID_MULTIPLE_RDNS 161 -# define X509V3_R_INVALID_NAME 106 -# define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 -# define X509V3_R_INVALID_NULL_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# define X509V3_R_ISSUER_DECODE_ERROR 126 -# define X509V3_R_MISSING_VALUE 124 -# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 -# define X509V3_R_NO_CONFIG_DATABASE 136 -# define X509V3_R_NO_ISSUER_CERTIFICATE 121 -# define X509V3_R_NO_ISSUER_DETAILS 127 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_ODD_NUMBER_OF_DIGITS 112 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 158 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ext/openssl/windows/x64/lib/engines/4758cca.dll b/ext/openssl/windows/x64/lib/engines/4758cca.dll deleted file mode 100644 index 0df3784a94184ada8e873fb9ebd5b4721912ebaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20992 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 diff --git a/ext/openssl/windows/x64/lib/engines/atalla.dll b/ext/openssl/windows/x64/lib/engines/atalla.dll deleted file mode 100644 index 98899cdf45390f6d9a4bd46b9f54cf01def489eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHO3tU{)nLh(um^^Su0+B>xCt*;`tAt4{DW=W@h9rmNW6_EKU?Qa7)4o&A63oB`rv zpY8A0-*3IiJ>TPe=R4o|&N<(C%%$Rv9W0eGmWDTxV5}RE9v4sli^Rg%6`wkA1$$=F zk-6O#?~%DR&Hk`G7;0M|s&BP7)CU4>x_zBy4@ClYf52XLYqh<#tx;Q?nK{`ZRYxA# zbN`ZyM~)`n;*PtHIzdl<;_x8B+Pwl!e&UtEBF^t0Ea7l~!>1re{3RC;AKe7_)Dr`P zg&ZD{@Kp}0{0+@i#|K+fS{C*%VC))jt`*$6d4O3QZ%4BQ zp2AoKAEpIou$Zx0lv%h8_VCg&sbp*?>KS{2LXJ5Zs~KZ{ z7^y@4LlfDBjHwg#Ow0qmSl2e`fXC+`A(N@?vK_$qV`r>xaj3CguZK-=4}(rFOTL-# zxG;Pc3o%wW6&YY~M->51cwCId7YC(2vaJ#?)d^ord|ae&eUra2EWKBUT#~;L?}W!i zav`mytwH)Ih)k0E`~)GOF2+_|&iVgKb(62n4d_jE!H^nV{`=2>t}u>9N(^NPcxOB^ z#r#SpV=?6@$OFyD?kjWHbKqBRS7rrxMt@n?3X8cCLe97veX+RLW4H>`&bWS6g`wtF zbPnj#y++&{t8v)P2Qgu|jG=TS)nCKahbF3@4fSQlLDZ1SYcNfWBdPuH#7EfwEHrTY zUo0M;j~d1$)L5;WIzS!zsoCYg}@kGgqQ6 z)%c#{5eRvWUa#?>V+T;x_^HQum2}z7A1UM-y=p9vba;)ej%{4Do_G#a4bsB~9ij@KmGLQD+=d4c!q`jTT3!aIj2!JuUE!`%f`dV?r! zDDNO_@GjpD17gY>AfwAm7ehw(s$Ds+EJE)qg+${q`pq>EGcuop7;<-jZqS+iS6Nd$EAMM zrn?Pg6&T#Sk;!D}*`CXJy zF*g)*=Okb>vgUjfJo8&bcE;71@&HKN!@cmucpJugP9UQHo`rti`; zgnQIJr5JpAA~zbDR+8z;u^`KQ6jDa!IhYB~tHjw()pzCeqN|+)<`z(W%IA?mHew60s^zyzfeDEHnx=#MEIKpxPbn>z9d(FL6cFArl^gXa zNNQA2*z-$F5qCEY*2PEoNVAKCTK0`Kpg0d+qP~KS+jUn=42E$m-Flk$ktm?>Kc*t zJ9y2UM_J&nR=a8(g>cVX;5rA?*zzHo$uWiK#BoS0G?ae?&RboDQZeOmkksmjgkhhB zT6g!|sD5M#_xXrsDEB9ee2Nzd%OWvR28u#k%LR4zrLk;HL`vkc` zbnhtl*$WQpzjEh0-err9A=6_Fdl6QPRjg?)HRg4wk!6Om4>{Zk6|gL(>;idUJ<5|O z-Vn|DA)3XR}&Z)6y9Cl{rbjli5!vvuhkY|3%6_Y+jwr|8tSgm8+y&h4S~Y z)8op+$aNl5V~;utfVsPA*`-ym(k#!WRv$6{9-Q@&WRk1o2ds447o5==Lul|J@8zBBL`>9oo=W4#Z0jHwRu!5O4i8gw5gybhQ7Yn-&GZr7Mq z+@wKu!RsC)+o7f&H-7?=GKd7Z2P%v-hic4B_s(6g6ID;~z;vM8;bgbYinjp&u zF=k*R#Jq+anT8mtDrg$KUPFvj8l;zCgWLEK%|1STF#9^m(H$?+Jae!0tsUFGi1CSC&;wrM<^t7NV^@t^bIm5yf#y#a>w6(>l8OP`cHI($7Cv#smUzO}P1Uu`ZVE>b3_X+l_3xfT9$=)Z}E6xe_qmun? z!M_XB%szMY7dR0OxX-aPuW?kL;Wk{>iiXOx^C!Hi zN7aUYZ{AT)L+=-i>@3wN&7yuty~TRYoodr3+n#l&Mu$edsr_CjDjB$QIEq@tmKAAJ zQ*u7RmMm{9+u@~iT7~nJ7n_Y-?}EV!+lu3w*SI<#>oltLWs|$(=WMj1>#x{o zBH=!i%Gr_Mc@a6i*dJRl{j<)FN0zb5F0Zd7a{%MxY-GCH)05S7z9*458%a6atM&|J z4fkSFLYn;3c}!mx{f$L0pk!wBl0~09?j!RXSlLDtvjM>NY#bFA;LJNnaM(unA_hF% z!^wp-^2HexF-{ymZ$kxk)i~=l&S009p3d0TcqGFaA2w0e{2D^#_7mI694^;$mgw@y z2+~ZSyg!5Tn)q(~T|{Q6W#-Ee-5S@|o8P3}cUR^q0CO@nI_5h_z&J4sw3z8wV*1T0-WDB$=PHUX--10}>X0sn*-p zxT(`z9%IzFgl_9R7O^eM8FesrANAWmpnY8{6448mjq}ZCK^P}!UqUNE7bv)Zt`1%? z_xyVzk<8LJjIpnVQw2MkutXMMQNd-wA?GnF!jLycG@$$#u?m_y6S@*jq(2gi1 zV#XMI?wC;{>CRIakA>n;N!JN3_gy}CUY>R6S^{mxT?y|1)tIv%QxMCsaaJ{ku_{KC zu2Rd$bn4&d;AgMVXZ!?vsKjwPq{5LcSctLUNpFsieXfr5(5j9J6;aHMm_Jk=MPHGn zlgs$<#`hBm*yO4fljWpyAd&Mo2vw*zk@MF;5;@yA*?(YC8lyRAzf(=*w-65-azumE z#rv;Bv(1Yb`dHC3_R}ytay_QSuk*nEE-1P#!6sgL1wEx3)MW%H!@ceKjuxd zCz%$UY?dXNC|H3oV&XzRfp!&B-?*x8BL}*$Q%K}IhncAwKezy`&IHbibV93x4-+{L zQw|!tOpP`=ieZA6u8olEHTuadxT88m%peg3begMm*b_Oop;)3Xnn>C5Gz|#fUE=JE zIA}hF=0M?GO*PW;3#n-c^dpK|(ywPbCE7DxL5dXk%)u)EF(i1ReiDcn>$p5y zgTkEybQQ&HWxd;!n?ajZFv{$JnDj!nsS9EfeC7u_@|*2&A?1TIO0na&ILX z;9A?eUm;UBVcMW6v>xYrjh^m`I~Z$Prg%;!5|PbngR%t()~sb5OwH<8MnC36eBDz} zu4$P&H&WwWaM1RgJ6rAgVy>Dx2sB;on%eH|nu=S|Y=@`hsGe(lVXC*JCp6huVNLDv zmc&Dd90vfdfL`wkt?v6K7&>Qd>?=hR_eKAyvxbMSpt*Ycu95UT#16w zw{B98zobSlB_fk4_TG(BBQ~6B(P8H)o~;7IIY3uPWiP7+?LJ5!%_;K<3MA)GTopfm zBGHcw?DF`;m*c~(Mzvg~K3}x^%|+kFa*xRO9sCTWmh?v2)UJx$M9yz9yi}tc8}IV0 zM2-o{h^tEoe_P;P6?Q@YjOcPZie;%iLw3~(+*zKbI(yXpumTS><$-V}D=X=R#XShE zOQ=qa0aZOe2y#A=XvA6`7ihuA!adspY$;eIJ&{w5ipFB^i7 zdiaVoFuRm|;JsszeDZ6UqDHN0=C1^jBK^{(OyjZ?GjR3wJ%{VxAlPv_4)+=-#ftJo zDxX7X#>+>pkLI61+(sQ0qt0XQ?m^UNb|Ie_i5%K5sm5a_mw5OD8DqSRh@Hq8!Th2~ zePc3GcMb7eE;JskVRV;C85FNcCn0uP40n?PqqCnf>9$0Tby77Lw_ThmFH-n|*0~Ki z<~huZWC`p~>TuYv%t6=ztf5$genum)i=m|u`e?=LDj&5y)JwQZmCm6`QJX7~Gn)s9 z$mDaUu8Pl9UYkq0A9V~u0}lG+Eq==X!1}Lt&6!P0RM%%_0F2C3jS^hS>lo3mnsnKR zXdCUdswHoPe))k70Vdmrb-gi#>-s6c<+|us%>P_hBHu#;g>+`owmdgE8KRnrdE~^} z-aT7veQmqTjGjK_J0QtT9cLQc6=h|{OJ&9}cgGnmp!?k&XZ-=qf(}Dm9w9991UV(f+jj(VG&svY2uYG%k;)TbN$3ye>V3>2sF{3CvdZU3?E4 zQ2WNKRID5H51z5@=?zaoaSKX*7A4CO^k;Rv#cZRtj*HAz$3m2whTK`m?S?;CZ1oTf zdAsDo7Kd|yn?@E@T!2xrwWjUBFD7w~DJb(xtO;)0fw!{5fj(v1Ea9s@<$hoo8a(T& za5YI>9ri+*Wl-(;xm}$ysK!=jA(~`4(r-+U6d6hlN<{mueM%`1OdWQv+_cA(<)HK# z(SCcMG9M^L6z;hSfYHb(ri-5~VwXt+jk^-i8DFO4LI&H1-h=4hM1B=CCi36KG)d&Y z!Bd)OiTtxX75sA?zrfQ=JbjO+bVr%Ur>YbADLhR>y3a!Q2o(L3&-i&ZG2~iJD}rkL zW_yK;$FJcN7qOKcW1AM-r);mlRui#p_=T}NY@L6j8Wsbi5mTLhEX5_Kb zT*B=VZjf-Dgk=&INSH0*r4mukuOv)bxJe-Ge=cE%gguB=c-ntK0~v4~4Nkzd628Yt z)_z_>H$niOc3cZ^xPb%KK8Vdfp7sF=dnDW|;onNQPnQ3Ir2k36*Ci~G`EHyqNZ-vE z83ez@0c-EUj+5wK2@gu>m*syZ=^sl-rw@|1A#1zyJ(4^aU} zP5NGGv7f#Va(sr$p=}K6*y6&%hNkt5-42?j)8f)9oX|?$BvW@e4<`o3nlIydxLojZ z9+%s68LyJdwO`KTa@#KB)o{5T;BniyEj3(jCwR26N`5m%vrz0$X^ zlCdq|QJ+a3EM;s5coX^nqnoi4h~NF={eqhCxbR}hPk!^oR-*feUKb8iHdVHh%E)iM zSe^70|E9~analhai6zs*GFLD*D_>zVmQGHYVX>y92Qg1Ew&*8b%ZxPet!zeBdT^FQ zVbd+wGG#C|n1Z@VW)%A8=2=4{~yUF%SP-ei`i+gM)X6)dkNljSX)%JRN3bJSu>VYaH2LJo@nbJJOF zV+PAz3RpBHXi2fKltPqGv#_-3VuLv?$I5c_Nh}9)IgraKnl^NLp~(9iY`PZOF^4f< z=&@k;mtK@oIn9>NY>ifCgS-uTlk$h`jJ=K5FXbm;+dg}#jm-|t9Lf&Ps7uOu(9qxG z?SvdbuD2?s(lW`yCQ1w0L!s-vvktM+m|uc zKFjoUHeI)}=}R-%^r9)17IKDs#$qdP`}2P>+PP(l(q?@vZLw z@w{zqcSnLNBY_6p-xeqj=%LLRuat9}Kcq+MTUG})Vk$89x60~3bA6z(MQbeI)Sv}P ze5Jod*FuObO0}kcY<6zS&6-{s359S_t_-y`Xjl{;P-?VLt3Ob$Ye^RSYN{tJiMG&6 zt)6VH3~6B$WA3ysMzql8N-fmX7HX{zG@um`G$X`jeOSAvkIwLDe|?MpUai{e59=z_ zv5l~{Oj{ROzg`O^t-PhYYE`*6>GRLCR;@Lx>9n@{e5Jl{P;2lv`5Sz~jqqDO_+h=# zr*95wK7XL8&DW@f^-$YpUkj>X?6%UX)vIbe73E8o7K(nnfkDo%qv5UWv*Wl=V>dBh zSZnq*@hm(9the8-ZMHYGwFWUV13Gq}$l_18v=0NAKS8%> zZmiJ3~pUnTVq~nstHi18bl9uEcSQoH2=$q_K5emzAKx>jOfFRdsr$3+Zw+34@nw8W_#)y?{GtnXKo(O^lFHI5=ga=Mw)>Ho2 zBhSrav_!<7$1b-zj8)(2t8~|>tXf1XEo|4DHG8mLZ?@}g9KQ}l!v5>*;pX~~)@W}L zv69pYT|%*&9}Vs3H+!q5H@7AG;r5TQLz*)VvPA#HB^=NApJA?2Ij%pZ*if>bY5%$0 z#}sF>on;?vXOgc@Xg>TCPL3b1^uz5RV_*D#XwRV3BkM)qG;T!y$d0v#Bf(%>2$B6l zQm)$L!)mBXIcy5BQlOE!Wx@|`CNF4Kmbx*_jpZI|1@zw#Si<>QY>5ict@aY-24*(tqEY22u7vLOR z1d+TQ@co&%Gl$H?bMwSAHJz=Wo5k2v$P=u@*~|`{;6}WK!0Ei!b`@hm;6cFO;q2B7 zoX+;suED(<&UV>=t$5o>9`GpMZNNtXr{UbZ19&!IBVLjx_;ow(WWe76I34HSev$#4 zG!Nx~PX(mE{o4e2f{)>S68KKQ*YGw1C-|K_*bMwhz*!F5zW~1)a5Y}4>vq5gB~Eac z#Pz;B>pyFdA_JuC5V^w5PVSL1b>W|Y&Ze9>srQIfbRudj&t}@;4Z*MdVv%C zy2N(?zA5n`!1H)X{{_Ik1*n7c0QTV}{=0y->jj<*xOP5ckAPnX_+7l@lkWkZlQ>(z z*dg2x(BEg_PMF_U^aH1R3%ZMl!?y(KzJYLpbbpWw8G^_0)&T$H`Qv(krsd6ezkpZ# zl<>!`?-T8RVjd_&oPtT}?#kUy?%ucC+&#Lxd(YsW6MMjP@&C-aGk0gf&f=ZwPIKpl zoz`8sy9#y{?^1W&zRTPd-2KSzox6v2vpv>5oA$Ktd1O!jp3yy7dkgpeiM8_+b3W1o F{{fs$O`8A! diff --git a/ext/openssl/windows/x64/lib/engines/capi.dll b/ext/openssl/windows/x64/lib/engines/capi.dll deleted file mode 100644 index f618149dd0fb50f2f64a2c1a21815fbd2f630190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34304 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 diff --git a/ext/openssl/windows/x64/lib/engines/cswift.dll b/ext/openssl/windows/x64/lib/engines/cswift.dll deleted file mode 100644 index e37bc735756587e800735609ceede92c2b42c75b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23552 zcmeHv4R}<=_4jO&n*>7K09gqFvdE%Q1Y?3VfYe>c!d>0KnuHG}n9mJ~hGgAr1T5C1 z3F>lPr7cvfT2ZiSU#qEKM2eaaG>M=@uoa}OQQJB()&^=JsCD1pnYnk_ptgN{-jDzD z=;gU{=A1cm=FFKhXFl$R+-o+nSjJc!-f)<)RzP~}BK`MCqKUCHChk0gJu~dJNv$UL zYm*8ptLm&if9*Q10o|AR z7{=lS=@evbAdpe<#IjhMW016LgAW6YXeb@VeoOrB^6;JngwPn&qtObR{2b)GecE;vLpbGyu`=H?wT=P@_` z8acjyB4bT$33C!LtT($=?aFMvE1EPDBs+gBnshEmD*stDX*5V4-V{YzH;!)ss;+Mf zjC5jgb_C6fR9ZI&X1antTXzmyMd@yO9s#a)2Yt^=8 zsur*ntJ*qSrP{Q|?zpyNU(|D&y_dFTka_+}eVE$o(hj>cu4YmXXq zj&W%N!2;V1HJF=_73R-QAc2RVn7R2ZjK3Ok+cLtIAAujb&eW7jk%PHUfHSCE4Rohh zH}^EeJed16;KJMqd?%Rtb`v?c-Ik5O3PZSqkJ|=N!ySCa#s%DE>jmUa(e_?GPeQjg z$g_=XFP~;)IX_2c$q?Dx0>rHiK;!z0G^HCuExchF$U$W%P;!KsQnM?enWMD=jrE;? zYpB}%6wQ<9n7wqwEs9I)>`!!IX}?JtKaITo+$&a5$oMSt5kILPB2Wr3TB{f@NV!r}GhXg}Jmb zd=`~y3)6zmCtX?shH{5XOSSRIl57n+Uvg=2Hqbj=+G56&KzGB@vr#7_=-ltpoD79; zk*L3q!-!#^)zIQcg3foOxDUdXpTbl*+TffI4~4_#=4y-|oS;Ng%0L%ZK8A`xr2uHe z39go=PA}J;Af7)9CMPCc$g*PvR1W1P@E@H8WkSw`=g}=tETh29e+s_7>(L0TGy__u z1f6%Qnv=Tr0H1|I1f_eL-b;wxopqpnFgEDC&83}@qqXt23&o+#e^+;$Uz5WSGFK8x^kZAN)TwIE7!@cY%Ys*s= zb|4Z(cjXpv^Dgl9ZG{&6DdbdbP&m|GAV6hjR+}T_N#%7YLS79ffT%XLrwZx{st{a| z*k7(GpTR6bxeXu&m5+c%lq-O8IofW_w}(p^>xb{ZW^fk@?iYcQ?>l5KR)WjXiuoW# z!2c$IjqDY+{1&WkO-@6%rcX;vpQc)5=JF@eR|;jD1wwQ$Gz9q9h&G-CGDCaLoh|t2HGO~mG5hL5n?=!NT|Cq9fMs|uq7i-EqL%jni2r4t8)q4PX z$Z-pmK&^{`s@eh>hlb4k3KB|j=p9TFu*f(xBvj2aSawMk8HR?2s)+{A7Ri(T%>!GeA?tr?MibMnq~n3N*b5rd&XFf2kCYJlEw<}>-zRHiLL7`h#E5VLM0MU?v` z6;Wu5j3!$}aJp5J(}T`O_2ASZf>RCXdH`w&I$QPF)E2gkEJcA4fPRJXk+b$am`;vA zDq{SBM#ldoXom4$U96A4!e@XfM+BhfmP6T4ZZ9{TNleaOBLJ0vn~wrt-y>**0#H`B zs@>d+LB&QP2Wu;G*e$>|@UdcP7%}FRY7l!em0oPiRP4%BtE!oK5G_OkmZ}xlDiO2P zvMzP%8z@$rcBk?+V1elp`HFwXyC@ON>HJFYNE2ZVaY((P(;79DWAhn7&JDx^#D_^E zw9_Nr0W!uQY$i?)IGe7WQM1Z|19m1C>S)!uNU-Qrx@T)#?Qf$VOVc98a6%ljT1 z&RApzY0qE0w3UW}KV?WzIC>%?U$d>4BAa$nds~FJtiOdVNZ?NtT^k08)p+2 zb%DG@30oc~aab44>t8}sYGWsrH};EENWA%p^+(LjqiBYR-2yrf$ujc6^RlDbK=yR; zxrX@WHX1`^0&wAokB_E4o&hw{$8@xeara}xARIBwYr!O!-g>c%pmkz44zlF(sxggA zQN*tVXMeq>yZ}VVcMJJX0FB5WE9Jjk7?E#|$nRT<&SS+<`4Jq1hsfUze%_B(`zG{)NVb{&%3kpz<-$ra9a4z!Pv|2lDY%a0g{0;dtN%SA$JU?gSf3J^2u|02K3c z$}^I*qJXjX-n6Xlppu6y95%gg3OFbuR8d39W2KBm)Y8vC0b9z_Rx8>NJr_rxK^0z$ zbB~>>&rS%`xU~i8sMmvqAAu*xTT2g5w(<Eu*GUMU@N)bFM{P)OUN<1UtWDvzb9#PjH30$aZ7VK+bs)Oc<&13>}HOc&3+~}!Y z^$BXY0~&mcv+w#F!{IQUmCgnSEvFR%hhD8TVo}P`e7Azc5bK2qNF9lYb=1R|@s_@|y)YPzx>AWJ*q- zBo*?1nu$Q`S@QNgk;Sr>{GiNYbxZz*$l9%HP`MXb{_3d;b)u(sR8V~6e^dVz4ofRz z^p|(Q9|SZ4B>5M3t8Hnze`!!c82%((TxhTI9LUBZnsr3(`)Svo@aV)qN`-l14(>qP z!X1RyAIE|kviuRF;%LoHa{d$W#UKZ}cvnaYBz;gFl#8b9rV z?E?-?nGS-O&M%<7pfVBY&T^DdNPiClgK(FHu@~VkjyHfw&L7emCwg^#xE@mYGF{4Q zA>}a8h?KXalow!nA>|!D>vSoYJ$6mmW(dg?LN-MUIRYX2{#3}}$CFRjL`(h&YT#li zpzsQmA_}U(2|omluOM`N8yuh(sCjb-UGmWV#Hm|}i23%(c=t2tAO=18vWV0ah-sR$ zBbVH^Q?Y_hPyJ|6Wpx7J^bp&4(;?i=c8hUkI#Iseu&qi5ZS4 zV;yN>tnaB24R(?&(XTsk_o-^hjUZ$lLGQN85~!efkre~^33!6a5}=`9D?DP z7-9%w`3^7%$In>a!E=D1Duh@KAx{b+Bcp}9B8B|%DqV=e{ZT@oO#c$2JHZJbAP*9k zpihDi3DAZl63eN-k$8^zmH~zNI5HOkUDKQ`sK5d^MBa{!=-e2g*IJgMyPB@x$Vmpn%5R?Cimg0DBCWe?<~#LFN0z0g>lx%2Y%6P80=|@w)KMQg{e5 z`Vxd#%TbIVojfLz4E;WeCK7`0aZ!}~0cJaAqFA1;ACtu=WN{Z2zl+_ND(;5N%^PI# zfGmEDig!~nW`tj?_AuhTpsK++_X%*x{Q@Yz00VQ7dA+0*is4xeVGxLbdmcxO_^wjdP0aw(M4^QqV5r*u7jwZl}KQTT2fX^ z9zckIL&8T#@Z-Zs-3fmbD+WZv&4Lr&A}l!JkOYS%cw4ZXJ`e4S9R-fXj-{=%W#(s) zEyd|Phq&o>u-VoltoFFg1CCtnq#C@#)&^28Za(QuuHx99?acaf*iwu-un}$u=ZhS+ zuD^qNLFH1QJ8>y13>B8WD?{(}>9GY&eI8n_g7=9nJOyTKV+W~WoXH0OjhjL~nL3QS zwMi18gf1I@(vfXcS+7VsXPKPS``v@;^6t;*A#a zg@_Ikv6uhADEYH#=d(v1>b|a4kTW*xCGUP@tO!T@iN!I70IqK#QD<|1zuVZ)xWoPPr z1aeTB1(aNEqHO$WH@TW|^VviTgSc5|%i`cY~Ai zyTK=DSVo2mJjjXf27gyI=jyB@Zf#X9J~feBX6NFXQ*+*;eTHud@8oFj>k)!R7hyup z(f&aTkWUS+xC`$Cc%Q`kQrKdHR16?y>Tr=m?6?P-2bIqdC&+w0X_8c75{j>V_aS09 zUL>pYbHPfH;A{cqrC~k=l=Zl?z5*GS_ErwIe8r?sCBN;T;jjz~_d~kymJ3B=cj}F8 zkd3`{C5;u?zwaWFru`llN4Ie`QvF(^`rohz4=RiF>UYZOEvKpvfa21Ahw69pVUg++ zjp|Q`>M4443PG5L!Bf?L0}35BvmxLS-t~#0{+}@Cg!-$5fc-$pRzH&hicbk3>&eq< zD0c_HEh6B4L%@YXz@55)pGyIko)T~oQRoAcLqqVR8^}m(Y!`+`YDWWG`P>}noAw;aOoL#ew_FQ}Zv#M?>BAa(86QnSBY zftvI=&&00*le`odpMz#Xx$p4v1e5a}BQ)&?H_rxNUjU6DqSD8iFTfo1Rt-dqR1zF)#9Zq4})JcE?vQ$TcTf9<;y zbWLf;R1pn(Kn^NT0VNAQ3Jl(*xyZM@;Ot+bDVq&mS^|Q~tvc^7B<}*jOY?xP>8cFg zK`0hfuF-kd>TWUiy~_M7wJ#-bLN=QCLcGW7N{z z^sN;iOXapWj%v|P2sd-$^YBUj?#JP<_(n_P+_X2Wk~Luy3;_-}_!f&x+HR~y-RF?q z&1#1@@LW4||DDyglYZMU`&IM2-5vYFQ$~O}JmvT#O1Vhi7U@2bz9`Zbkv=5SO(MNj zq-#Waok$Bsx=^Hck!Fh2CekOMXLyQTq;o}@BhvXIRYiJ*NZle`C{m9|^F&%8(j_8Y zCekZ}g+VoL+uI9iw{Z*It22WnL&>HR^s*6ldX;@sLBfzb}lo|s$ai92z~9s35Z*WHufaFumjp{1ta z#{wyIj}d!i;&Df;IWXM(oFlfWcfcLn<<3GQ-OKwlv_c1?Ax{M^7n)HZbb@=N+T8TJ zi(D*rh+JvzsXe*oxd**&ZTyrJFy+oZc&u(rg`@F3Hjo>-mkor&j#pv@x&H5N4YhIp zg?H>pIX2`l7HKo8z1hj#m_f(tN2%@YDHSK$!{KA~F~>U8_U@Fv4umk&Av>)<5SZEY zp(&6~$(c=`ngYX59d7wg6iiixmjRfcYeU279WJehV4s=vg?nyp7wCm1^pW~TKefO` zjQBYT8nCL`G5R4%H;>24-`rN8kk!`5QJ3F}m14u8+p(nEcbJ;y(6)~ShCiP`W!DZv zj8Q&8h=W+h_ky*#EwGZ`IUKEok`Ds#;fYB8h6IG;ls}28a#_AD@*?$os%#%1DI8mWK}424x{1*dGGd9|M1OqN z5%^< zSfI7n!Uy$>=xVwMj94==o+&~c$)Q_qOsIN=ug3hL`l$N)Y1i0&tG@_`F&FLmaJD3;q>tO$-mv8fWWts$0`1y4ERN9}v@Tb}Q`Qj;D-EK-N7>JhLAUuyOd4!_2xweOD?J`zcflcQ%D%*8PSY0_!)miT2X@HgpF9CwWyZZb}Aq4FSJj zQD=7rQnT6yRP%3=eJDNW#byLhDbJ8~7x)k+snRI^BZ(yNwaD~;6jh&7o4gc>PNe!W{toeL zTp`nBhA;N~~Ozn3j2yd9b7zEW5hY%R!0U&qI!rKr5V`?usx=A4e(l?A~06;O%? z!KPawm9LY?FxZSv{QVzppe+$T0vLT>tZE;T(`bjAPMXZO{Sxx{K@0`Pb1EkCdC+s$ z0?8Ew}6&=r`uZ+{73SA*TOml1P zt-04QRxwk#`jv3Feyv)j+<^?%ESCTyQW|H{kCy9;T9Z((Vx}XlzQ8?ow|R#nRSjL0 zrpERl8?S~&G`K?}@Krh0=9>LRAWgesgnM?of4DX`F}B@3yUmZtu{*v0ovZ^YqCA-- zwdp1syP0ys;oR|nF~Zl=Y{Q~`JvKsYOnoDuIVlVN8}c6|TNvW!8+rgtw_55B54eHyMGPHXE8 zsMT*)5j#W4C!DZW0SH;$bU&Q4SJi0uLGox$@kc0-oH#VD?ZlyQ7rC2UXRW$_Sk)$P z8dHCp`OrJl?wLx>Di2={FuS83pRaP$!j>;miR#3sDQ8O9G6+m-Q!l3cCo&((wMzUW z!kt!BOHtcXccfU2J80eS(U=)?*U z7ihsq!6o|j6w>SC!@q zjN^ZWF37~__6R9s1rNoF#cJqroBcDCH-6NnphJh{O7bLj95hd~y|10$H02QDHDu=w zWF2s{_MjbpFUpA!woHK%s&+pY9Gef3653uw>aZo2N+9GiBSMFIMX6vq6{S1WP>53j z#c7gB87nP!}&|Ye*0sty`#7v5>959a$bnYUwqwFDb^k%40#e z0W6>x6Sl-dCU!64oJ~h;JATzSVBXY0d6gQygc?O__OK-rSwzd>$B&F_o20xsk7VCx z>w%eY3M6ZZ+pg2reKjMN8?d%O`yurc&w_%>vA*>)C9cM&ZM3k?MRNMbj-yGx$z&4`aq>K z>9BS%C+TqGu?60m`mAnkFemAN@LTgkLFYh@)}0f~9n`vlD?SM>{@jU>lczQ%JJDp= z(bN?;W#IC#IVY&x0Eu(j;!P}&KBpKL+<{4Rd<4!?T26kBji+_>I2G#!{ezXw+dAr! zP~C)@m!hT0aiDkRo$sdB)!?@gv!$&%l?}*Y%@9T7>hg(We4QJ@Og(D*dsa0G zlX@{ujLsBW{AKa=nVM3F8ckh^oywKSz(?6}C$|O_C$PZirY>uzl8G!l3b!B`$dPAc zW4D9zf?Y<2efxwd;UigXGZia%ux;qrEtd^iI&cF}iW6jb%7wUG3Qsvhq$wgDB~qJ6 z&lPF9NG}knP3ajR5vluiInpSHLX_bv-!@Jtd@euTO@M}by%pw8XexQ!(Zv}6&=2(!%uaXSZqj? zFkPn`)IFE81{zY2T|$HYO<|W_vBxjv9nzt6pZ{KJ#t&ru9vw#4H2y}AWESAHA+gPp z97fp)pjda=8kDU$t&CjcLR7v3Wq0Uhvi50zt7j1Z55Sh2zS_PGd6Is+4!_hC1}85+ zCx7sxOQwBvUWaSLz4^Olzw2wHF`GB5aB-d2UsssFw#MsUxwbIJTX%h+)>l~T^VZbW zRZqKkddBq3>cZOkKvrgXb#-A`-Ri1}0RGgkR5XJ<8KajTvXywSdf9R87Jr9mTP3EA z-7f#U(4g5eGFTpHji?}Lh!!3=J8U|=ivEt!b_vNs-^8CVPS40Ft60ex{jQOw+4OmN zIN{E75YLvOG@Q5?+d72i5`2#ir3t>4AvBNRYaL1xd~HK$1%j_@C{6J7fJPfs<8Ld; zuQpMi#NS%lZo28F@=|nzwJy>7;SZGATn-_xZ3yieA+IZ%Rv`I$hR`J6A<)tgFQ%`N ze}ifK4eE5S#OZHQ%h9fG+f1@i3utMlXjw$-0xfC`W)Mw9ydOcb<+yy0Xw1jh0Io`n zzYQI@34h0mt?e#ra}AF|ZTasu*kWq{JAOSiXt1 zj6;4r{9&22Pc$xMWX5F3@qz7UU>sn7Q;dm`EP70FCPu%Z#q?k!Es4w$7{)B+3Csds zOXkSl_b!)ZcfmWy!yEJLR13W3cxEn7WM=T0A=BV{4m@w-t+ER?X2R(rJ~PH+N=;;` z;7=_`V5z8+nwjDoc2+z)YlfMfg)vF>jV?B1%!G%(k9R#}5EL@`k4^vr)g9?8x=@oqu|Smy8$0TY z7`qhtd3cFa58sI7thB18yvSR#5~o3SV^LY9x9ob1?Q-Ii56$}q=tVKXcy`eq1GLsc zgTmOE*bfZgrzhD_`@&JhXg`m!-YC9I(9%Hry63xntguYOcl+3(9`gTcAM19_bvmxj z%A8KKgYAyX3slc5@dfJr-g&jSE5ZM%&`mUVZSD2-zWMbvWr3>N8fQ(wkJYS)N|sdl z1N9}Q`*5rz5rg`Q8%J)#LZpp&E0|)oo&jgsw*i4 zCYaq-rT!BC+Ic0_)pe{S)>Ts#s4A(hy2+dGuBr>D5XV+S+Z=Cc{mPYIzoF%o&b)ueah8&1GGyjDw!O+xzrS{MQHg)$jkwN~HD$Mr zB5%!&RsPzVRWu}Q#t@F$8ta8(uw&zmXRA*?A9^I-V&KIRZ!>V8#19#GgT%RkZZ)p1TCex6wIYJ}FiUF!b@E(A{LA$IV={}!s^42w=y-;X)A^4c zyN*{%lzDW#O2;d8dDrQSqm8+BYqBcQaTT}h5Q|2+mHzvus#U&fFGVo20%JrnY(n+@-W%!>dPQyG zs7ELj2qGl$8&BKU=qJa*s&7RZ%U@LFaTKU5U&efIoi$MDwfaf|mDWJ5$e$;xoM)}8 zEb)8Gt<`ez(Hm;0`|5iVLyrhdk$k?9|0RE<;?T@I|5{(5HlOZAtand-cvKDrT zro-7I^ewu6ILkFe@9A+S8-fpQ<-f<41-@F2Z`@bYzfSTH{nd#25q6yazEWR<-lE?N z&d~k1Mb|4@F2=8XHO5dMeQRC4&sXaYFmcO-mdL-jUaxMoqwI$ID!Vfh=prowwO7B`v3I6voQk2TmBjx$Rlk=p%GJAxc=dJdZ)SWJOdZBd5x_4c{yV#V(|X^war&lq`lj{%f7$n&>ibRW{on5A zH`VK#*895td{cQ8W9j)%^#v0W<2O66t*{=bcvJkqCQN0JAup!Ou*<9Wm$x-@qF{z8A0%caMKwBJUuJCgK|z=*56tR_KX* z58!Q+aJq*M8v)yKpZYoYdjQqRvaSbkhE29>2Xvjw*hk=rzL%%_`e_${4{``D#an=U zG2j)r`z%M^1NaPH`bI)`+9&aD$06f$z{MBCR?x=>*pBy6(jU;2iM}Eq2UviY_zB*E z`{rjrZvc#$0bb$(Jc-vvG6CuT7fnH)U_^0oUnyf@ZIBfkl7 z+AP=r`3%4Uyu?HB7CqkpxL?or0Dgd%_dP1~BjHG8YN zb=lU+t!uX4zV-G8w>0av(Qy7gHeT6aUe4FF50!Pk`2UlG6ie22;t%r1ycuYIkWgH2&lNDkj@ntK5#v+Vs;nd9&!X7~xBW$;? zzjNPPA+Xc@(@vYQpXT1*x#ymH?z!il`>|Iwk3Pd@Fvc>GG>x$yAbn1e|M%Ghs_$5G z^bU4p=9#5EChwW0_1pYWTR0MGi!`;{nwx^bkZjv3*&?x^%^$S6AF8vphgzi4{QO+I zq59fu*T)Z^eZD81dSA)yc@1SHd7zi@o$np!{RdHhpy%%e|F3#q75GB$QGqY^_5hbB zUljc1$>$CHfxr#^=53@qJ(5}vV=dp!Vl{tJ@~t#)f-SS$Kb8LUe*e0~u39J>Zjm*i|)1pJ8yhS&ub}3`^ z2J7?SFzWYDudp$uPA}g^m&(#k8NB9vWMndp-53Wb@!1&LQW|M#lA9P?mkSmcY!=cS zq-mcM;ZmxLu@v#kkl-tJClzjfPR3HDVO>y+5ey+`15W##q_3^j-x4*vM-C!=%cco| zbdp>|3WS=CY1;xO$)$q}Bz;bpFNiO*&v?L*>OVdGbEJ-v4=Ybvs*X_&k6$k78kX0@ zFPY>L%I3vCHp#g?CTQaE<0bv-JVed7S^W)m5zFf-!K+q=2*)fCs_9Bup6wIGd(em{ z8tpkeA=?XhVvpVC+K3KpT)FC1t~gGp-O$yUie)=eV-&nLJf@o(-Zc`V`L@&vFA3*&cmaF;%1i{!1P`^!#rv<}08(|NA z20)GHG1ire-L0NO{6LM3C#@G@KI(@7>SojrnCGH1iZ5rm)_qF-b2F$;&C<1A(=@e? zlqw@UzM9E)t_-Tb6l0N#xU!Hdr__b8$E*DOD7CLv-qg-&<`mY4?ntH4Ud9#KzM3n0 z>>SRrxgP63J>{#SN61Ug?kkGm3>$Lc!X~%N)brh75gxg+* zDCkV01Q#f8WBlq5|3lN#Rr2;J_DgW8&W>xQ*b2v0;OIF;@C1aM_>KDNnf zWm37yl`-CRA!bfina1bP{8nQAy~=>{ORk*J&Kiyk(2UA<<^!$n|SFoUB zX7v-y3$;hnH>ajywU~yn9sj9m##&Tg$)QMr3m}2RSTNYBWdPtrxP@CqRr}p4MLVfulZ(%wYZ&-&QL(D4^hvF?A5G#KeCk z{)s6D-@c{3o1S>`?b}?bw{KFs_S(;L^4QPNIBnyTLXlj6RUB9dPtl(APvEIppJ*C- zFspB%G<~eE8s)K{fN<8)va`Hy_Mvgti8pAUvAFx6GCzc}x&cP19S}3TP^ij!VJ3X$ z2RVMJ8!kL<`;)17YT(LcsB|jl<2Ou}eLsRe^#Y~>^SJ`SbQkPAz5u*@v<8oSyBoYg z;@uE(mi?*mHm+DVgH;_L)RberPH2gb-oIk-u&Mg&px1HCoA8Vxsg?qP6IU$-H4~QE zW{4-_Ug)C$VJLGW_c_7BDu=CoEd%I%2XtW$B&hazv~$0*lEZmh4I~X_HCka5!_k8 z3=!)^(=>Vsxck9%-*&8z+v6z<;>3E*d5r=kDv+Q z?*JlLY36iUcznEwJaS$+$sN`uXc)hEKRMtJO!GSqokzxDxxcNI$2}W%ZsS&!Esho!23pR+yUC*Dd3Ji z-U}=6LDL_g;7E5?*$<2Rc*1<+E7VCN&ZFx?C|;!^2C-S}3$$q!@c7zKpr6IEH0xQ! z?9E%jX?S53*{l^GLj__cnZFd}u^b#WJZUZl-9Lroli$D;9?!{C|4k<{48J7JvxO|} z#|=Dr$nM12p1G0G{ABc)kaPz{va$Kx&b)eujPidrG$RR(#&YcKQSq(~-Jsz9-XbP{26 zoY1USu|T=fHAt07+MNSq{3Dz5%lb zMRHTem1b9s+pU~*E5ojiD^gJQyE?A=gHpAtV8KL>iBn8Oy1_n zJFlE|=bi7k`k)kyIZh~(?z~|Uzm|gu&xBh!;ZD>{Duap5*Afk%da(6u;PL!-@as@> z#RoHsC+^oQ?u7XXXk44hGBLSi?Ut+zCNEtZCRkuTeB)DGf^0h$a-19V2QOQG*dNV9 za}!#A4J|#`^yhb6WR?j_#|>uL!Xi|giQ4(7?LkDcM8hZy`Pa(HJ$ADN3|u)@1P{ljSt!e%qKx2qFBN_2#O+O zwIfA$SEs&1oIWjFi5PLD)(9C~ANr4BezoFD(5Mw(6ZuCXpA>lp7LHb&De^3l(_Wz! z=Zbum$nOw&fyn2Gyb$?e6Gis)ueH^(q!ad`{iw5nPI0bW>aNkP8ymTS>(mrmHBD+- zca6AeZ65o_sXAQ9FLA}BAR4jM6ZLkRH<|yzRl0S0!b-z7uGDN%S6$b%XE5e6EG}pi zEgUC0R>L_d%l&P9M!E2Aol{|8y1v#ZHyZe-2JSKNIRkqPJZIp9fjP@{P4f&)>kTYodua`h8kpw) zZ(#auiPqo4NbY4wScUYZ>*yJUSO-vd;I=w?lDP+s525amQ3saz_NR&eVJs@s{d2oo z)u!_&47|ObHnt6Q?z+i)-rH9*__KBUEQ_xFV%g|n@^#hM8ylihB-&WFD=06TbHFdH z+JIjeRW6W>Exm<@8!yVY@T!Ge!L2+YS9A-nR>;|Ir$T`8w zG=XQl$x&SGN1W(o`|jPlTee~tY{YKZ9Fd#t)h?lL^cLQuLZ3RFSFg)W+``l4Cc!JA zes}6`cj>pwQb{k<8|HmvtM1!!kn9L}6uJh_LA*imrp-YG@o4|~K8-}J(I`Mv()(fhEs-8jg|Eb$p?#N-`5oD8YYwx@Gnus|n^`Nen6-TN=yt>m z)UsEgZ1rp=Vu;ktwq!9&OAfO@&QhKiPRk8LW&-I3+RKhcekG-eG_torVJCyz!(kvWv2X0mS2&} z@*`QbrotRn2-^zlvsoeRD=aSv>-95PemUw%_d2w-nla9!%xdakS)@yhDSK*6ra4(` zj-12hRAjR`<$1N_hxC`;vl=mf#K&}r#8IwA+JrmnjaUjKvML5NN0i#J~z%B;{7r9^Duaurtxgp)1LwF^S&?2Ip)fII3`7Q z)k=}pP^7&n*eq3rVz}f+*!+wKCAlgViQocU8woW_(P(uGTRe?hzbzs)wSbAA9+0iu z6_us-dVjm*iay{ENJOzaO>Td*X)8)X*z4aKX^QNsY6=9RtZ7Dd&@cO&0{-1no!1|g zIn=RZnH%IlRa01wMPLg|!T%Lb5YHP5Jst}`5DPZT{!q{plp|P~LsYZTACY5Cfrj7? zLiPr($-j8n-r;yNKp)cy=-m>Zfgp*1f&+v&Soi0DqtiHl=;ndlKfk%{|wrU z@rNQ0NKIr{TI)AG8`gWgj&c!}*z0}1Dql1#HTzrr%|5+5=r0C8D!2ILU17=R54MJU zEmBmDgm(D?7&Ky&wM*?$3Dm}_4Grt-t7|-~D#~=7_cFBb%doSZeeEXgli2;t7nQd8 zTE!rIv@VL6uQ?QK^|!%7U$7|>3GMJTMcTIGN2A_ScXhf-3U2pDLcw-&539IEA{3N% z`emO?6GwZoFCw+UR4L*!YFdq1z`sy@(oU&4CQIomz0sYpB_jKpFnxZR%|l5LtSRhY z*&bbqiCT&JmH1Ddj4)XlShaH1N@K{Mw;aFZ{hoM0e*wC=um6!vH$46JbY`<{xb+;p z66xRcb0N+95`TX^V8fXmMj9>F@dvoi(0%U(;GMXm*ul2}t+yRY9u7t-UcK;1U7F`F%d;zB8F1cKNpd=lT8q-{yI8 z-@BZ9?z!ild+xdGRQzb3E6e3_W#d1QaJd%Y%fEoQf8TLuxLn=)F7EDn^|1BFEy{?j zKW^ldsndPaZo1*Bn=Zf3H|g^0ufHMc`|*{&o2st&O}*Y196rK#-3?bxj84;FuHBVP0KpM_KB2$;FW_?3pEgYc zN*&2Au-$bwzG;5};=5|{)GMYt+?$4U@ZJ?X1l&zmUVFnN@R3R2mB0=D9^Ak*^#3cp zX6-n?+pN9T?=@?q{`@hEiogbS#BW_Lvv7x%W1pMhGOTT3Yp?aW)lySm)m82PmCIF| z6GcMAYDR8f&{}1^X*H@hkziWm`~lOt)^D0t)L&`FRuoNGzAo)=5#>ZJ{EdVERG<;8 z&j{9I5saNb>2ttDPc!Yj%XYb3t8*$D#vjU<2{0@7>#__NQg?p^EU^^@Etj)ocu*4S z;~h16j4{#}WsEk)ETW94!MZ%t%9+KiB`eI@YComStc~~s71sMZRvhuElQnO#2=k^M@w{fP@sOpCTF1CJ45Y z-mPj*(yLUJc-NVzhD%qY!dhusThs<5L@eNlSWRK;tq9uPXIjmwQfE+`@nsX1qUL~S zdO?NNY}U^5`$8r4>NyAQ1%Ydn{1IzIL}R}LvBn~w&^_P3gI{ZdI`_HsSgHWiTCej6aeNPkhu8dW!e)a*6Uk9B7gK`)7q$hj;NaY+b0-xz(HJId=2}eyY2EX)VgmHiI#1w zFi=u&6c}AMt`7QrG$M>TYGW1D2#z)C*xEqw^D#X;r$}vH`UrpP?ZDF}<-e zcQhY`uLYXLUV_=VpTVy#e6}6PvNoRy&Wj@KNn6szO*$q5UIg*ng%;)jC zJUy!YQ;^T&HNBo5_xNv4;xK_ETabK1B)v3}-b7OW42uU6v;?qNZj>EIKIk3wInu(` z2GiQA{w83JYADK#SoPEd^N1ZChLoZMFZO}i)CfM+3H(7njW~&veho~fglpKIRYw_h zM}rJ-WD!WRD<_k&2lgcrtvRnF9vF3Fm^E!tP_{wcC=@iSZLmj7BvNMB(eLq7Vomge zW~za?D>fns`5!l7{H4nSBhqy54kW0x>`5Z?t}|0IPh6prHp+adVc{F}2O?IBSqqU? zUg5%eh`&lajgGK}{3w|!9W(-^*M>+6yfw&6p$(fB*ih}CMyhIG^l#<2CK0_Jn$562 zQ-=i@uJ_cuhFThR_pz>a&SMxn?8;kgbEew67t-}5o2V@6FN!Wnsa|4K^HCbQ!?Q-+ zojPY3a-uu5+2!A;*O9fPzGW>k3llYli`3~3i4@VFAyM6g2(&P3k^!%^F=8#J=H34k zkdRlSV$rB+btjSqlA5hk-Rdo!I@(E{BdI<~ zJxtZ<#Il;5(OD6;mT3)hM?9gwnXv{p_^6IYbs_9fUVlUuwDa~a*v?n7oxNWt63CcK z;edoUtNVbBlK%B2E*I6A

  • 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%0A3I0HJU6Lpc}x8 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%0DJ`P$q1@U2Hidy@rwOD^f}c&$Zx$JqfTj1 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 z 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ⅈ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 z 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