From 0c0a969c5a1c1daf3b88ae55d39f5555ef9ec107 Mon Sep 17 00:00:00 2001 From: Andrew Nelless Date: Tue, 3 Jan 2017 22:40:46 +0000 Subject: [PATCH] Add MSVC14 builds of OpenSSL 1.0.2j for Win32 and Win64 --- ext/LICENSE (OpenSSL) | 2 +- ext/openssl/win32/bin/libeay32.dll | Bin 0 -> 1270272 bytes ext/openssl/win32/bin/openssl.exe | Bin 0 -> 448000 bytes ext/openssl/win32/bin/ssleay32.dll | Bin 0 -> 276992 bytes ext/openssl/win32/include/openssl/aes.h | 149 + ext/openssl/win32/include/openssl/applink.c | 129 + ext/openssl/win32/include/openssl/asn1.h | 1419 ++++++ ext/openssl/win32/include/openssl/asn1_mac.h | 579 +++ ext/openssl/win32/include/openssl/asn1t.h | 973 ++++ ext/openssl/win32/include/openssl/bio.h | 883 ++++ ext/openssl/win32/include/openssl/blowfish.h | 130 + ext/openssl/win32/include/openssl/bn.h | 951 ++++ ext/openssl/win32/include/openssl/buffer.h | 125 + ext/openssl/win32/include/openssl/camellia.h | 132 + ext/openssl/win32/include/openssl/cast.h | 107 + ext/openssl/win32/include/openssl/cmac.h | 82 + ext/openssl/win32/include/openssl/cms.h | 555 +++ ext/openssl/win32/include/openssl/comp.h | 83 + ext/openssl/win32/include/openssl/conf.h | 267 ++ ext/openssl/win32/include/openssl/conf_api.h | 89 + ext/openssl/win32/include/openssl/crypto.h | 661 +++ ext/openssl/win32/include/openssl/des.h | 257 + ext/openssl/win32/include/openssl/des_old.h | 497 ++ ext/openssl/win32/include/openssl/dh.h | 393 ++ ext/openssl/win32/include/openssl/dsa.h | 332 ++ ext/openssl/win32/include/openssl/dso.h | 451 ++ ext/openssl/win32/include/openssl/dtls1.h | 272 ++ ext/openssl/win32/include/openssl/e_os2.h | 328 ++ ext/openssl/win32/include/openssl/ebcdic.h | 26 + ext/openssl/win32/include/openssl/ec.h | 1282 +++++ ext/openssl/win32/include/openssl/ecdh.h | 134 + ext/openssl/win32/include/openssl/ecdsa.h | 335 ++ ext/openssl/win32/include/openssl/engine.h | 960 ++++ ext/openssl/win32/include/openssl/err.h | 389 ++ ext/openssl/win32/include/openssl/evp.h | 1534 ++++++ ext/openssl/win32/include/openssl/hmac.h | 109 + ext/openssl/win32/include/openssl/idea.h | 105 + ext/openssl/win32/include/openssl/krb5_asn.h | 240 + ext/openssl/win32/include/openssl/kssl.h | 197 + ext/openssl/win32/include/openssl/lhash.h | 240 + ext/openssl/win32/include/openssl/md4.h | 119 + ext/openssl/win32/include/openssl/md5.h | 119 + ext/openssl/win32/include/openssl/mdc2.h | 94 + ext/openssl/win32/include/openssl/modes.h | 163 + ext/openssl/win32/include/openssl/obj_mac.h | 4194 +++++++++++++++++ ext/openssl/win32/include/openssl/objects.h | 1143 +++++ ext/openssl/win32/include/openssl/ocsp.h | 637 +++ .../win32/include/openssl/opensslconf.h | 271 ++ ext/openssl/win32/include/openssl/opensslv.h | 97 + ext/openssl/win32/include/openssl/ossl_typ.h | 213 + ext/openssl/win32/include/openssl/pem.h | 617 +++ ext/openssl/win32/include/openssl/pem2.h | 70 + ext/openssl/win32/include/openssl/pkcs12.h | 342 ++ ext/openssl/win32/include/openssl/pkcs7.h | 481 ++ ext/openssl/win32/include/openssl/pqueue.h | 99 + ext/openssl/win32/include/openssl/rand.h | 150 + ext/openssl/win32/include/openssl/rc2.h | 103 + ext/openssl/win32/include/openssl/rc4.h | 88 + ext/openssl/win32/include/openssl/ripemd.h | 105 + ext/openssl/win32/include/openssl/rsa.h | 664 +++ ext/openssl/win32/include/openssl/safestack.h | 2672 +++++++++++ ext/openssl/win32/include/openssl/seed.h | 149 + ext/openssl/win32/include/openssl/sha.h | 214 + ext/openssl/win32/include/openssl/srp.h | 179 + ext/openssl/win32/include/openssl/srtp.h | 147 + ext/openssl/win32/include/openssl/ssl.h | 3163 +++++++++++++ ext/openssl/win32/include/openssl/ssl2.h | 265 ++ ext/openssl/win32/include/openssl/ssl23.h | 84 + ext/openssl/win32/include/openssl/ssl3.h | 774 +++ ext/openssl/win32/include/openssl/stack.h | 107 + ext/openssl/win32/include/openssl/symhacks.h | 516 ++ ext/openssl/win32/include/openssl/tls1.h | 810 ++++ ext/openssl/win32/include/openssl/ts.h | 865 ++++ ext/openssl/win32/include/openssl/txt_db.h | 112 + ext/openssl/win32/include/openssl/ui.h | 415 ++ ext/openssl/win32/include/openssl/ui_compat.h | 88 + ext/openssl/win32/include/openssl/whrlpool.h | 41 + ext/openssl/win32/include/openssl/x509.h | 1330 ++++++ ext/openssl/win32/include/openssl/x509_vfy.h | 652 +++ ext/openssl/win32/include/openssl/x509v3.h | 1055 +++++ ext/openssl/win32/lib/engines/4758cca.dll | Bin 0 -> 16384 bytes ext/openssl/win32/lib/engines/aep.dll | Bin 0 -> 14336 bytes ext/openssl/win32/lib/engines/atalla.dll | Bin 0 -> 12800 bytes ext/openssl/win32/lib/engines/capi.dll | Bin 0 -> 27136 bytes ext/openssl/win32/lib/engines/chil.dll | Bin 0 -> 18432 bytes ext/openssl/win32/lib/engines/cswift.dll | Bin 0 -> 16896 bytes ext/openssl/win32/lib/engines/gmp.dll | Bin 0 -> 8704 bytes ext/openssl/win32/lib/engines/gost.dll | Bin 0 -> 61952 bytes ext/openssl/win32/lib/engines/nuron.dll | Bin 0 -> 11776 bytes ext/openssl/win32/lib/engines/padlock.dll | Bin 0 -> 13312 bytes ext/openssl/win32/lib/engines/sureware.dll | Bin 0 -> 18432 bytes ext/openssl/win32/lib/engines/ubsec.dll | Bin 0 -> 15872 bytes ext/openssl/win32/lib/libeay32.lib | Bin 0 -> 821042 bytes ext/openssl/win32/lib/ssleay32.lib | Bin 0 -> 77144 bytes ext/openssl/win32/ssl/openssl.cnf | 350 ++ ext/openssl/win64/bin/libeay32.dll | Bin 0 -> 2097664 bytes ext/openssl/win64/bin/openssl.exe | Bin 0 -> 505856 bytes ext/openssl/win64/bin/ssleay32.dll | Bin 0 -> 354816 bytes ext/openssl/win64/include/openssl/aes.h | 149 + ext/openssl/win64/include/openssl/applink.c | 129 + ext/openssl/win64/include/openssl/asn1.h | 1419 ++++++ ext/openssl/win64/include/openssl/asn1_mac.h | 579 +++ ext/openssl/win64/include/openssl/asn1t.h | 973 ++++ ext/openssl/win64/include/openssl/bio.h | 883 ++++ ext/openssl/win64/include/openssl/blowfish.h | 130 + ext/openssl/win64/include/openssl/bn.h | 951 ++++ ext/openssl/win64/include/openssl/buffer.h | 125 + ext/openssl/win64/include/openssl/camellia.h | 132 + ext/openssl/win64/include/openssl/cast.h | 107 + ext/openssl/win64/include/openssl/cmac.h | 82 + ext/openssl/win64/include/openssl/cms.h | 555 +++ ext/openssl/win64/include/openssl/comp.h | 83 + ext/openssl/win64/include/openssl/conf.h | 267 ++ ext/openssl/win64/include/openssl/conf_api.h | 89 + ext/openssl/win64/include/openssl/crypto.h | 661 +++ ext/openssl/win64/include/openssl/des.h | 257 + ext/openssl/win64/include/openssl/des_old.h | 497 ++ ext/openssl/win64/include/openssl/dh.h | 393 ++ ext/openssl/win64/include/openssl/dsa.h | 332 ++ ext/openssl/win64/include/openssl/dso.h | 451 ++ ext/openssl/win64/include/openssl/dtls1.h | 272 ++ ext/openssl/win64/include/openssl/e_os2.h | 328 ++ ext/openssl/win64/include/openssl/ebcdic.h | 26 + ext/openssl/win64/include/openssl/ec.h | 1282 +++++ ext/openssl/win64/include/openssl/ecdh.h | 134 + ext/openssl/win64/include/openssl/ecdsa.h | 335 ++ ext/openssl/win64/include/openssl/engine.h | 960 ++++ ext/openssl/win64/include/openssl/err.h | 389 ++ ext/openssl/win64/include/openssl/evp.h | 1534 ++++++ ext/openssl/win64/include/openssl/hmac.h | 109 + ext/openssl/win64/include/openssl/idea.h | 105 + ext/openssl/win64/include/openssl/krb5_asn.h | 240 + ext/openssl/win64/include/openssl/kssl.h | 197 + ext/openssl/win64/include/openssl/lhash.h | 240 + ext/openssl/win64/include/openssl/md4.h | 119 + ext/openssl/win64/include/openssl/md5.h | 119 + ext/openssl/win64/include/openssl/mdc2.h | 94 + ext/openssl/win64/include/openssl/modes.h | 163 + ext/openssl/win64/include/openssl/obj_mac.h | 4194 +++++++++++++++++ ext/openssl/win64/include/openssl/objects.h | 1143 +++++ ext/openssl/win64/include/openssl/ocsp.h | 637 +++ .../win64/include/openssl/opensslconf.h | 271 ++ ext/openssl/win64/include/openssl/opensslv.h | 97 + ext/openssl/win64/include/openssl/ossl_typ.h | 213 + ext/openssl/win64/include/openssl/pem.h | 617 +++ ext/openssl/win64/include/openssl/pem2.h | 70 + ext/openssl/win64/include/openssl/pkcs12.h | 342 ++ ext/openssl/win64/include/openssl/pkcs7.h | 481 ++ ext/openssl/win64/include/openssl/pqueue.h | 99 + ext/openssl/win64/include/openssl/rand.h | 150 + ext/openssl/win64/include/openssl/rc2.h | 103 + ext/openssl/win64/include/openssl/rc4.h | 88 + ext/openssl/win64/include/openssl/ripemd.h | 105 + ext/openssl/win64/include/openssl/rsa.h | 664 +++ ext/openssl/win64/include/openssl/safestack.h | 2672 +++++++++++ ext/openssl/win64/include/openssl/seed.h | 149 + ext/openssl/win64/include/openssl/sha.h | 214 + ext/openssl/win64/include/openssl/srp.h | 179 + ext/openssl/win64/include/openssl/srtp.h | 147 + ext/openssl/win64/include/openssl/ssl.h | 3163 +++++++++++++ ext/openssl/win64/include/openssl/ssl2.h | 265 ++ ext/openssl/win64/include/openssl/ssl23.h | 84 + ext/openssl/win64/include/openssl/ssl3.h | 774 +++ ext/openssl/win64/include/openssl/stack.h | 107 + ext/openssl/win64/include/openssl/symhacks.h | 516 ++ ext/openssl/win64/include/openssl/tls1.h | 810 ++++ ext/openssl/win64/include/openssl/ts.h | 865 ++++ ext/openssl/win64/include/openssl/txt_db.h | 112 + ext/openssl/win64/include/openssl/ui.h | 415 ++ ext/openssl/win64/include/openssl/ui_compat.h | 88 + ext/openssl/win64/include/openssl/whrlpool.h | 41 + ext/openssl/win64/include/openssl/x509.h | 1330 ++++++ ext/openssl/win64/include/openssl/x509_vfy.h | 652 +++ ext/openssl/win64/include/openssl/x509v3.h | 1055 +++++ ext/openssl/win64/lib/engines/4758cca.dll | Bin 0 -> 20992 bytes ext/openssl/win64/lib/engines/aep.dll | Bin 0 -> 18944 bytes ext/openssl/win64/lib/engines/atalla.dll | Bin 0 -> 16384 bytes ext/openssl/win64/lib/engines/capi.dll | Bin 0 -> 34304 bytes ext/openssl/win64/lib/engines/chil.dll | Bin 0 -> 25088 bytes ext/openssl/win64/lib/engines/cswift.dll | Bin 0 -> 23552 bytes ext/openssl/win64/lib/engines/gmp.dll | Bin 0 -> 9728 bytes ext/openssl/win64/lib/engines/gost.dll | Bin 0 -> 83968 bytes ext/openssl/win64/lib/engines/nuron.dll | Bin 0 -> 14336 bytes ext/openssl/win64/lib/engines/padlock.dll | Bin 0 -> 9728 bytes ext/openssl/win64/lib/engines/sureware.dll | Bin 0 -> 24576 bytes ext/openssl/win64/lib/engines/ubsec.dll | Bin 0 -> 21504 bytes ext/openssl/win64/lib/libeay32.lib | Bin 0 -> 802648 bytes ext/openssl/win64/lib/ssleay32.lib | Bin 0 -> 75578 bytes ext/openssl/win64/ssl/openssl.cnf | 350 ++ 189 files changed, 78305 insertions(+), 1 deletion(-) create mode 100644 ext/openssl/win32/bin/libeay32.dll create mode 100644 ext/openssl/win32/bin/openssl.exe create mode 100644 ext/openssl/win32/bin/ssleay32.dll create mode 100644 ext/openssl/win32/include/openssl/aes.h create mode 100644 ext/openssl/win32/include/openssl/applink.c create mode 100644 ext/openssl/win32/include/openssl/asn1.h create mode 100644 ext/openssl/win32/include/openssl/asn1_mac.h create mode 100644 ext/openssl/win32/include/openssl/asn1t.h create mode 100644 ext/openssl/win32/include/openssl/bio.h create mode 100644 ext/openssl/win32/include/openssl/blowfish.h create mode 100644 ext/openssl/win32/include/openssl/bn.h create mode 100644 ext/openssl/win32/include/openssl/buffer.h create mode 100644 ext/openssl/win32/include/openssl/camellia.h create mode 100644 ext/openssl/win32/include/openssl/cast.h create mode 100644 ext/openssl/win32/include/openssl/cmac.h create mode 100644 ext/openssl/win32/include/openssl/cms.h create mode 100644 ext/openssl/win32/include/openssl/comp.h create mode 100644 ext/openssl/win32/include/openssl/conf.h create mode 100644 ext/openssl/win32/include/openssl/conf_api.h create mode 100644 ext/openssl/win32/include/openssl/crypto.h create mode 100644 ext/openssl/win32/include/openssl/des.h create mode 100644 ext/openssl/win32/include/openssl/des_old.h create mode 100644 ext/openssl/win32/include/openssl/dh.h create mode 100644 ext/openssl/win32/include/openssl/dsa.h create mode 100644 ext/openssl/win32/include/openssl/dso.h create mode 100644 ext/openssl/win32/include/openssl/dtls1.h create mode 100644 ext/openssl/win32/include/openssl/e_os2.h create mode 100644 ext/openssl/win32/include/openssl/ebcdic.h create mode 100644 ext/openssl/win32/include/openssl/ec.h create mode 100644 ext/openssl/win32/include/openssl/ecdh.h create mode 100644 ext/openssl/win32/include/openssl/ecdsa.h create mode 100644 ext/openssl/win32/include/openssl/engine.h create mode 100644 ext/openssl/win32/include/openssl/err.h create mode 100644 ext/openssl/win32/include/openssl/evp.h create mode 100644 ext/openssl/win32/include/openssl/hmac.h create mode 100644 ext/openssl/win32/include/openssl/idea.h create mode 100644 ext/openssl/win32/include/openssl/krb5_asn.h create mode 100644 ext/openssl/win32/include/openssl/kssl.h create mode 100644 ext/openssl/win32/include/openssl/lhash.h create mode 100644 ext/openssl/win32/include/openssl/md4.h create mode 100644 ext/openssl/win32/include/openssl/md5.h create mode 100644 ext/openssl/win32/include/openssl/mdc2.h create mode 100644 ext/openssl/win32/include/openssl/modes.h create mode 100644 ext/openssl/win32/include/openssl/obj_mac.h create mode 100644 ext/openssl/win32/include/openssl/objects.h create mode 100644 ext/openssl/win32/include/openssl/ocsp.h create mode 100644 ext/openssl/win32/include/openssl/opensslconf.h create mode 100644 ext/openssl/win32/include/openssl/opensslv.h create mode 100644 ext/openssl/win32/include/openssl/ossl_typ.h create mode 100644 ext/openssl/win32/include/openssl/pem.h create mode 100644 ext/openssl/win32/include/openssl/pem2.h create mode 100644 ext/openssl/win32/include/openssl/pkcs12.h create mode 100644 ext/openssl/win32/include/openssl/pkcs7.h create mode 100644 ext/openssl/win32/include/openssl/pqueue.h create mode 100644 ext/openssl/win32/include/openssl/rand.h create mode 100644 ext/openssl/win32/include/openssl/rc2.h create mode 100644 ext/openssl/win32/include/openssl/rc4.h create mode 100644 ext/openssl/win32/include/openssl/ripemd.h create mode 100644 ext/openssl/win32/include/openssl/rsa.h create mode 100644 ext/openssl/win32/include/openssl/safestack.h create mode 100644 ext/openssl/win32/include/openssl/seed.h create mode 100644 ext/openssl/win32/include/openssl/sha.h create mode 100644 ext/openssl/win32/include/openssl/srp.h create mode 100644 ext/openssl/win32/include/openssl/srtp.h create mode 100644 ext/openssl/win32/include/openssl/ssl.h create mode 100644 ext/openssl/win32/include/openssl/ssl2.h create mode 100644 ext/openssl/win32/include/openssl/ssl23.h create mode 100644 ext/openssl/win32/include/openssl/ssl3.h create mode 100644 ext/openssl/win32/include/openssl/stack.h create mode 100644 ext/openssl/win32/include/openssl/symhacks.h create mode 100644 ext/openssl/win32/include/openssl/tls1.h create mode 100644 ext/openssl/win32/include/openssl/ts.h create mode 100644 ext/openssl/win32/include/openssl/txt_db.h create mode 100644 ext/openssl/win32/include/openssl/ui.h create mode 100644 ext/openssl/win32/include/openssl/ui_compat.h create mode 100644 ext/openssl/win32/include/openssl/whrlpool.h create mode 100644 ext/openssl/win32/include/openssl/x509.h create mode 100644 ext/openssl/win32/include/openssl/x509_vfy.h create mode 100644 ext/openssl/win32/include/openssl/x509v3.h create mode 100644 ext/openssl/win32/lib/engines/4758cca.dll create mode 100644 ext/openssl/win32/lib/engines/aep.dll create mode 100644 ext/openssl/win32/lib/engines/atalla.dll create mode 100644 ext/openssl/win32/lib/engines/capi.dll create mode 100644 ext/openssl/win32/lib/engines/chil.dll create mode 100644 ext/openssl/win32/lib/engines/cswift.dll create mode 100644 ext/openssl/win32/lib/engines/gmp.dll create mode 100644 ext/openssl/win32/lib/engines/gost.dll create mode 100644 ext/openssl/win32/lib/engines/nuron.dll create mode 100644 ext/openssl/win32/lib/engines/padlock.dll create mode 100644 ext/openssl/win32/lib/engines/sureware.dll create mode 100644 ext/openssl/win32/lib/engines/ubsec.dll create mode 100644 ext/openssl/win32/lib/libeay32.lib create mode 100644 ext/openssl/win32/lib/ssleay32.lib create mode 100644 ext/openssl/win32/ssl/openssl.cnf create mode 100644 ext/openssl/win64/bin/libeay32.dll create mode 100644 ext/openssl/win64/bin/openssl.exe create mode 100644 ext/openssl/win64/bin/ssleay32.dll create mode 100644 ext/openssl/win64/include/openssl/aes.h create mode 100644 ext/openssl/win64/include/openssl/applink.c create mode 100644 ext/openssl/win64/include/openssl/asn1.h create mode 100644 ext/openssl/win64/include/openssl/asn1_mac.h create mode 100644 ext/openssl/win64/include/openssl/asn1t.h create mode 100644 ext/openssl/win64/include/openssl/bio.h create mode 100644 ext/openssl/win64/include/openssl/blowfish.h create mode 100644 ext/openssl/win64/include/openssl/bn.h create mode 100644 ext/openssl/win64/include/openssl/buffer.h create mode 100644 ext/openssl/win64/include/openssl/camellia.h create mode 100644 ext/openssl/win64/include/openssl/cast.h create mode 100644 ext/openssl/win64/include/openssl/cmac.h create mode 100644 ext/openssl/win64/include/openssl/cms.h create mode 100644 ext/openssl/win64/include/openssl/comp.h create mode 100644 ext/openssl/win64/include/openssl/conf.h create mode 100644 ext/openssl/win64/include/openssl/conf_api.h create mode 100644 ext/openssl/win64/include/openssl/crypto.h create mode 100644 ext/openssl/win64/include/openssl/des.h create mode 100644 ext/openssl/win64/include/openssl/des_old.h create mode 100644 ext/openssl/win64/include/openssl/dh.h create mode 100644 ext/openssl/win64/include/openssl/dsa.h create mode 100644 ext/openssl/win64/include/openssl/dso.h create mode 100644 ext/openssl/win64/include/openssl/dtls1.h create mode 100644 ext/openssl/win64/include/openssl/e_os2.h create mode 100644 ext/openssl/win64/include/openssl/ebcdic.h create mode 100644 ext/openssl/win64/include/openssl/ec.h create mode 100644 ext/openssl/win64/include/openssl/ecdh.h create mode 100644 ext/openssl/win64/include/openssl/ecdsa.h create mode 100644 ext/openssl/win64/include/openssl/engine.h create mode 100644 ext/openssl/win64/include/openssl/err.h create mode 100644 ext/openssl/win64/include/openssl/evp.h create mode 100644 ext/openssl/win64/include/openssl/hmac.h create mode 100644 ext/openssl/win64/include/openssl/idea.h create mode 100644 ext/openssl/win64/include/openssl/krb5_asn.h create mode 100644 ext/openssl/win64/include/openssl/kssl.h create mode 100644 ext/openssl/win64/include/openssl/lhash.h create mode 100644 ext/openssl/win64/include/openssl/md4.h create mode 100644 ext/openssl/win64/include/openssl/md5.h create mode 100644 ext/openssl/win64/include/openssl/mdc2.h create mode 100644 ext/openssl/win64/include/openssl/modes.h create mode 100644 ext/openssl/win64/include/openssl/obj_mac.h create mode 100644 ext/openssl/win64/include/openssl/objects.h create mode 100644 ext/openssl/win64/include/openssl/ocsp.h create mode 100644 ext/openssl/win64/include/openssl/opensslconf.h create mode 100644 ext/openssl/win64/include/openssl/opensslv.h create mode 100644 ext/openssl/win64/include/openssl/ossl_typ.h create mode 100644 ext/openssl/win64/include/openssl/pem.h create mode 100644 ext/openssl/win64/include/openssl/pem2.h create mode 100644 ext/openssl/win64/include/openssl/pkcs12.h create mode 100644 ext/openssl/win64/include/openssl/pkcs7.h create mode 100644 ext/openssl/win64/include/openssl/pqueue.h create mode 100644 ext/openssl/win64/include/openssl/rand.h create mode 100644 ext/openssl/win64/include/openssl/rc2.h create mode 100644 ext/openssl/win64/include/openssl/rc4.h create mode 100644 ext/openssl/win64/include/openssl/ripemd.h create mode 100644 ext/openssl/win64/include/openssl/rsa.h create mode 100644 ext/openssl/win64/include/openssl/safestack.h create mode 100644 ext/openssl/win64/include/openssl/seed.h create mode 100644 ext/openssl/win64/include/openssl/sha.h create mode 100644 ext/openssl/win64/include/openssl/srp.h create mode 100644 ext/openssl/win64/include/openssl/srtp.h create mode 100644 ext/openssl/win64/include/openssl/ssl.h create mode 100644 ext/openssl/win64/include/openssl/ssl2.h create mode 100644 ext/openssl/win64/include/openssl/ssl23.h create mode 100644 ext/openssl/win64/include/openssl/ssl3.h create mode 100644 ext/openssl/win64/include/openssl/stack.h create mode 100644 ext/openssl/win64/include/openssl/symhacks.h create mode 100644 ext/openssl/win64/include/openssl/tls1.h create mode 100644 ext/openssl/win64/include/openssl/ts.h create mode 100644 ext/openssl/win64/include/openssl/txt_db.h create mode 100644 ext/openssl/win64/include/openssl/ui.h create mode 100644 ext/openssl/win64/include/openssl/ui_compat.h create mode 100644 ext/openssl/win64/include/openssl/whrlpool.h create mode 100644 ext/openssl/win64/include/openssl/x509.h create mode 100644 ext/openssl/win64/include/openssl/x509_vfy.h create mode 100644 ext/openssl/win64/include/openssl/x509v3.h create mode 100644 ext/openssl/win64/lib/engines/4758cca.dll create mode 100644 ext/openssl/win64/lib/engines/aep.dll create mode 100644 ext/openssl/win64/lib/engines/atalla.dll create mode 100644 ext/openssl/win64/lib/engines/capi.dll create mode 100644 ext/openssl/win64/lib/engines/chil.dll create mode 100644 ext/openssl/win64/lib/engines/cswift.dll create mode 100644 ext/openssl/win64/lib/engines/gmp.dll create mode 100644 ext/openssl/win64/lib/engines/gost.dll create mode 100644 ext/openssl/win64/lib/engines/nuron.dll create mode 100644 ext/openssl/win64/lib/engines/padlock.dll create mode 100644 ext/openssl/win64/lib/engines/sureware.dll create mode 100644 ext/openssl/win64/lib/engines/ubsec.dll create mode 100644 ext/openssl/win64/lib/libeay32.lib create mode 100644 ext/openssl/win64/lib/ssleay32.lib create mode 100644 ext/openssl/win64/ssl/openssl.cnf diff --git a/ext/LICENSE (OpenSSL) b/ext/LICENSE (OpenSSL) index e47d101f1..fb03713dd 100644 --- a/ext/LICENSE (OpenSSL) +++ b/ext/LICENSE (OpenSSL) @@ -12,7 +12,7 @@ --------------- /* ==================================================================== - * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + * 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 diff --git a/ext/openssl/win32/bin/libeay32.dll b/ext/openssl/win32/bin/libeay32.dll new file mode 100644 index 0000000000000000000000000000000000000000..fa30c78c357c3fa17d74df6cd9b6b4d689606949 GIT binary patch literal 1270272 zcmeFa3w%`7wFf+t3}gZWXVg*0I@L*?+F)}vr^Mcfv5gj#S`d_nsJv8EY>~kPAGHDr zfm@E#+;UrcYj5qXwf5Fld#kOr)=O;$^57wlKuCDVTOI)<4?yyOGJyyb z_`cs4*fVGL-e>Q%|Ld{WI%l7=hu^=@mTI%v97vs=Hrspn=3l;ip8UgUx7qq%{eFMj zJLxMk-m?!|nK63mpdcW#RQ}kEw>IPVr?>8Wd$oLTf4f4y_q<&t-+SM##J78U=3D$; zdG*e>Cdv1%w>IGW{#*CH-TZle?|S<~{GN2H?=61cf9nqUeb3_$Pi0?;BO5uyW*cVj zZM*)eY2zYg+ifWseeL~iHeWxRZEA1HKKKP3yK$I}ZyxbD#b#5bv2R=1B??p&r`qy? z6e_ZA^jrOOzu~sc{EOW-Z}P>qsi+bLRnU6d>6NP=RG{?oUCiL&O*(P6KFy+CS587;3-O@{q{cHI43kK1q^C33Z zt7^9LdB~n|G0w#IM0{KR@@=-V>mPgc@hOEin@937Hq!V(mwNfv7Zesej3U7V*a*;N z$?82aEy#+%$Yx??tL#$mHkAJVe-;GBj2e5dzV_vDM)*eHW*hm7m&fU0y-a(5$E8{c zr*qQvRY+v+auFwKF+er;?{?69X?nNwfT>u8f{IH_UbL@rAV85FMb)7@5zr>(^nSn zwmZ>M2R=|Zh}GrrRqfrT+gZz|FVkMt-rwodO8yVO!Ux>NyI{aKGuqkYubDo0Oq)Dil#5|w~$cMY18IKPjG|KqISFXeK|oY z6z{fis5?53b#@xH=_>*Lm0HQQXaHo|*OYAUUDDE9n|BQ|N?KC1c`i1+`$T8wiQ+vV zzN2_|=ibhS(DMOL$z#rKMx(KR(!>WQELq4uy-Z(Q+V7Pk7rV9hGaOn8)lAb>8OyC@ zUq)H~h2s{MY){qZUxgnpkJH}Yp01TpjWqq9kw-NB%Z|X6qXUkTa_15@y(CiQE2t70 z9B_n&1)Nv?`v&wIx~LxD+1QEYFaPF?w0Rh3C-SaVO;}2;^oG(wv0W><9gP(4z(=p* zR(@*p{rGxRYbZlnhO`!GGt$RMpCEmT)Vc9c{J)=X-nFn4^ucmS2h7`saj`a;89hAR*n<2G1*h{qTlaE69>@#P8)@!`uI8sf*7 zCp090FK_1my9lb}{n@Z~QLuq%1COJYQoS}PN#_G`ZdR@l0(s`NB zzV_`pz0TfZYzvpAg{C{~8}!u~Ri!UpH}8LLZQ{_>$!e-G2CW9vyVS&&mXn);feNf zUFG-hu=L@L_HoJW*{@sr@J0Ku|K#=)mOlK^J~q5m^th#uK(voP9vd98^pP3u=mZoFaXBRks17cN@(9ZMfM(LR3s_`1fyo_kS#X0L(*CnbCS9~Ae@3;Pl>cb!3$0wfqhp0Ys;```Tzw39Z z4`+NIEx&F!uKMuB_pvc0_?YS=JHC$>hFw?M6)U|?r+VCWQ(LFKC0ynRP4^qyz>4Be zpZq@gt^?aF#frXUw@%gg!h^qf!rmGVyF=4+jXLnbmAm@{d9H(X4#kJdDNfS%;Qb%G zX148?wtu&J>$f6p`x4up{H_1{)NDIb+McoKA0I^8Π$a`w+NRomA~(`{e+)&5A+ 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

mtctuasD3Eqf#d<+tAthvyE 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ⅆ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%0A>QT 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%0ADTT<+U2GztM))TKoKltWGd` zq$|NEGF8y-Uv6Wmy1YKJLSai)JrMh^h>mD18Fm?O1N$^F+|pXczD1Xt7nDL(BM)WX z&}&6eBd<#hytj(J4d>wDLxO|%wm44?qO$=Vytl;}8d5rVZ^g;;f;I1nktkj9M`?&Z zqQ`PW7E$cj35Xk>u3e#!){hM#6lHP=0|0*gm#`#48I_2)xuexfI&JP^^^*0jzPt8b z80xm?2cJ4f*>rFt@4R1&4quYA zfNyehp=omS;C4EMI~}?Mou`MC4){Mfa466`_@v0Od(R^`R7wexMW%NoFY=onM z1LgRGgWJG|us?M<%)P9iV|N)~Dyurx=wfD0p`77pc$&e{nJ&+xGmXeOF1l6*r8&A& zjSDNS%h-k)n(RmMs{RrjF&xFKa5%;w!kw6?j>v|SoiA8GhrF_~+z^*qK~7;PkOq~>O&lE5!KtROLflXHZ`oh+#Fhg5*fqk294nE0lv|`(C%Dn zrwEg?uXlr&PvEy3zg^~j9Ph`>%}v2!bF-om&X2-+FpS?Ae&_J3<3~D_mypgc;`btc z!}t-OAAxSdFX6{RApWa&!Hy(;bYH`J7;oOoMcbLz@FSe|GQVYR+Q_6GOTuXvleR1A z{uO2f592-3#@q(xm%g!za(5H+;Guh5Ir5zJT98bMMES zHYy0GZHqZ`)1C#-M)M(WJm)%$H_w0aY%BSpo99`{58XV&N`C0(xmEH*H_xgvF3*Va zd@AG8%`>TtOE=G4qIh-@5cM5c#q?~2fxGkE#WtO4tBZl zOX05JcNV{O{64_%9sJH9>^1zZ!2K?MO}MY&_bS}C@aw|;UHo2$`^Wgbjo$?Pui&=} zzdrmP!fzjbrS*Oj8-=L&Bco&JV2+=tK6i5B)Z|p{%hNNnbEls_^TJme^9$%!&Mz&0 z{ldy>yVHGft+&2$@zUnyZww3$9X#~pQ%@g$<_k}tnB@7HKeulG>}UU{d$RYf%=x9C z{hOct9gTnFi_acKK*HZ$AG>?k$3Jn;?tAb1AffB%6e$clt7tZ(*z3CDNNuP>#~9!>Y5Cwi<0&A`s$ zJ_&+6hTTDfZ7GyT>tgpT0fk{V0uPcFga%l0 z_J3&}x(F9ExuZwZ!Stn<(jCGNe@Hk|hQ1tl9;?<)RHo}=vuEnd7wcMRETzXvOK$lh z%WQt7G;n@n@v&r{L0Z_#AE1b`6^=oQ+H7s8S;ysfvhqTGqB41W_C(s@<1;61xyr=KnKf0%{3pioFfgifB5a(`-Q+ss#IQ@k+KDdX?bZ&w(S~$coW94l&(BwlHx>xXj%VJJ$M5MIz>m%o`0wRL zKcBDR$8`^C*2{=!%-Z@MUf=6{rB|M z`Zb;R;4kLq^MJ+qx!dBLJFtD61BEyoznRX>9nyIOIB|ZMCgUVK#Q8!LNAmLk%HxT9 z`qDw=jrXDYa~*KHpT#eiAB&R=Z6D`Lg*dw`&Xs}f&%bGx!dCGlph?0&c$JVn9ff5`JC~@bokt5adyfN?X#Ehc72DkrtS8!I9CpC zU)In4uYbD#@{d0E@&5;WvCN&v2l{?N%kR+ExXc3|+G1tJ@ZZPaxc)TS#9@t-l9|Fo zyQ_}Rpt~&2%^l*<7AZ-2yj>P&;F;~yp%8j;K$(yHhC*?-FwQ-y~DL2}v&BZ~QA69O(M_U$W zr*fk$UzS0N-<_5l?e=;cM7yJMOVCl1w-i6dy_0gIUEes)os=7G_~zmutq&_V+UqTg zvs1a{=e2bgi^$aS<4BYAm`^_J18#m1?dn-=Te~>`6`ltCjKjEm?j#QFhIu+1qc84( zZI~+his$a>yZz;Ra`#u%EbX#5wc(xP(5@KMVV%Fzbjsp8p zQ9AraFYdW3xpER^Fk#;Z^}(Ooh{DR^+(g(;asI&483wUCO{Xl*hoy7H(qS6>K9}~u zbqaGl{NPPauu$!}J*u#>I9JAZj`Q~|9j^y>l1^Ei4@-x3=HhyAC+U>M`LJ~MARV6* z@jZm``Q|Zv(-T@o!h{!`y?@E#ung`r&M#Y>^drRKo#p&^{^NKyPyt`y4`3}Iab*9> z;`G(-!QDpN$Kjpno`#UMbOv@vrz{TBxw=C-ylb7`)YD@B&-|R*A)T@~OlPM!yt_S4 zhhqlQxw=C-WpN}wJH+{iHfDH!@QEdzE62Al>#{gZXQw#4%P5y0OJ{h8bjso|ot@&) zR%4tF$03&6?H$@eSsbRbQ=ET>L|A4%f4Y-;T^5Jw>{PG69i@Zh63&U4pPlM;SsbRb zQ@#EU(qXxIe(t1Rm&IW^JJsvID5P^I^|~yMsE{nr-cB#{gZXQz7o&rxWs*C~E{-$}hLi^Ftws@H!RrGsSds9u-F zVLCh2>+d2R{Du77Nxd$M!*q74*MC(==T7Q%SscmF4)vOM#l`u#lX_hihw1E8uYZ4= zbatwvWpS9!PH|`}H_p$U)a$Z1OlPNhU0CNpjZUTK_ac4PbN{ivUwh#m+*hOH-xY)v zpHCXk9*5tWafZLLeVqFWaaa!-r|+xV$Jrh6MjqJrGtTuL(y0ND^Esc_;WH+;kjB7S zP3J27MOoxtiv#i!_c^?81ON7KYn)y9KJ-deYMqj858FuMPRNSU z^s=J7`)UJq3_m!Nm+>op6KnzJ%9rwP#u=X9J`T^z#ovT$D8}hq*gg)=sm0|>c{k%+ z-yt2KLq;d(-hV49~d; zK-zJhNUsK3-Jg>l_p%!$#azkz>CdffA-Zoq)iy8?RG@Vjw`{9Qr3 zAL8c^_sywaFbsgy@qbHtkD#CBGc5nX=OW4vzjOE*XvY`heK*1wg_}Qq-;d!}_I+#r z#B~ez)TME?|UembW*ytw-?l zhdLtE6(N6onBTth7<2Gb2z0GKr2WSEy@tMkzn$`X{h?3vUH$b>^idb2_zVN!^m2W4 zx8A`PyL8e8I8R5E!R5RUH2mt)R-Fjhyhr&4TEx8*Jf>NuWMKr6*wGY&UY>4= zQikCR-uh}+@`9)b!PAy}TS?*!!(_EyovhB*p*DcNSNvyYXH2UBQ3;DM)IWPD12G&i z1TT&`GI6|qYHECLq9V9KhcJr?-7A>g)=;`9Ch9R^q&+@Vt=EJzxTl~Oa{M$@EyyqY zGb0QdqORLv;?9f+t^+D#MF{jY#;6^Ui>5jpq9VfMs&%TN74FdZpZ@z+PEr%qNTJ&jQ4_4ze5p=8XD! z9|m88MG-i+;2S&_Z@T*2Ts#62CQKr+q^DywKGoIC&>&Oje#x*yf(B zvlZh*Enk!mps`CyVd4(V#g_;MvgKbkJ z467n50u)<9JYK8zH3W_skJ>2Nib35*fvRoi9kC6wE{v*Gk_;AD#4HAL zF6dUnFj+H&k+YPFbbz62fHIxu0Dk5^UFnD+7L>4R(m5QTfd+9Uaw=MQQ0Gf=pGc}@ z!VWN^1^af05Bx?ug@QU+Bpj%NB(+*ej-s z8*TZlDU8`HE}sX_O@?W&R~nimN(=`ASh+)CYdw}bR4}hrjd&f7#Xt`70y}jwrzT@) zd%3z6hZXA~8Y3*;N`9CkY7g|^qeA!8wBBX<_#Lw<=;5rJ!JH%bk=ef(9mYqY*(|mx zm?mpCdm5$|iMPfvc$Qvh;bhXgksJ-pvlIZ2Qh2d%!I6oS^JeLE*A{blaanE2kHx|H zWHn3#TC@uH5S)L1~n{O@!=$3bNyuzsh&zIs07V{-5puN2CCU z+u@AtaJqZFm7)ICCQbt4yhd;3V9qTTkhxBn8Dw~~$CHORBfs2jtzwqAw%QzgY5?~L zalK_S%7y+fiNbbn{X{)#TjhSe1a}Sg@zn}t$-1j^K^CgBORW@FWGq}r(PnX$WwEoF zetl!LixGnJo)jjj(aC)S4Yzat(OxlQw`sOg}{A)R`ed?=@+{=FS!`I+u_|;{k@U zG%2drel@Gy>}a>}-sPz3ErD|!y(#H|_eJ{=Mt70+ z2F%8-g7n^jp=R0dD~RLIho$>b)5fI8(mu3p+HBLw4d+1LY}^BX_?f0<&` z2G@EkENqFR6SMNL)p@Ntdm&+3oWegi5n<%b_5e7M_j0f!h_orwh_@zhF#K$RsQ?@SE9T4+3<4;-o&DU_&(!QJIAL+&U--KVv6H;5J!?)wmT^r2j zm3;5}SD)&;{_PA-+AsYv&TAgYV0!?28L%5)*xmOZ!p-MF{9Xm@%E7Emu7L-Z)hl>& z5Abz_<0Wl{Y28Cl$@3l3iFhN8?*SHngWZ6=4OsjQ9)bUE!0#sU@UL) z|1Nm(vS;2m5sp`QUV)$OP%BpeC)b9u@_Z0DMH+Gv@PMwL%?-hWm@~HaG&?(89i5xS zVB+V&N!{tt{lPaM5MJIfo{C{?V+#P37c z#MGqJ#jltn-+yh^SFj9Y?MI)^DRb@#7GA9zYw*7!$`x^W`-U@xceDxKl}qv zYdvN^^^)<+Fg}M6PP+b_fIp4!zgxhsA)L4a&+P8Ifgjz&z`u2Pci-)&b_*>5G62sH zEq)X6d?DCW+fT&cYzQtV~a`Ckrs(70Z=pM7>vu z%LAwh2RyDP{3*77md6iphj-j3c-xEHBkS}}{%O9SVBUWU*p;YHW#3WkPuO>yz#Z=F zPksk();IPSyRT{cCX9Ti`0X(m*DP%7kKmUAcI9ugc5)5n%L?=g-iPqsk8r$%E**@Q z4rl!t!}uH~?Fi1i-$}po2J%RnFXO$0_ji^)-A8*A9Bo9}CO2!Tjf&P9t)T}S7~+A& zJiX1;$G|akNWh`Z3Ga})-4w^BC+8+6cryBNct59J;1$33CdOBOZ<%8voX@l0(*EUl z)hpf1xWQQ7eE3}_02}@bEla}qU1tH~Si`u)Wf`6YjNjk=n|dg}zBO0_U&B3DS$J)vig`!zDb{iFm;RZ~J3L?HsaV%u2ao*rd{~bM5QlEh2i?QZ z?UwP6`Sho(ot4$KVw>Xk7&g9~9uu4>@XBv+2Cyq9cK5NZ@F9Oi{&)ZBXZkn}-$p+6 z;eF2dCvB$n3H-X?AFtfg1>RNAcHo`1m3NRH%j-Jc6L_zK4!)7yiwP?&E&G3msrNdxW2@ffc-pZN*sdfno;cnNV}SZ;+v zR}@n+S(%-|jn$Rsk0|Dxdu-(_*}k7C$)r`ET09Dz>}9Z(0Hu$wMB#jFoK}zQ9ZH*Xx)wN|lL?{J$^KiZl^6*QP`idpEMb6_HS$GV@EIM*POWk%0k*!Hq0H z9`ErXjfaigFo)LomR(3sD`6lLzHpl%Z}wXu4d$4c+&lP`(0s1ZPL8$aafj1dGSXec z`*QN!MjO8s+&g|AcN4%y(ZYHH3#-X^E0SM{jA^~TX=7Ye?phXc8MB1T$`^amG-N9K zAV*NfB_AW*H`#(MV5lcNmfXjJ*xL)=LJdI4=LxXWyrT=_JoAXp6`o0K;^-ojUjsHJ zLI@lTlvQaefv6u!I@MbwaBrEz-3C@JfK~qD!Q9meiIevTa`zYwKZ8<8+bRpjP`zr* z!WnnQ*E?yh8YQFHH>T`KO^+at$4|{NKYM%W-l1kn5!;dQZ|{M}0dAtm%ELYE@t#~? zhMI$mJ9|g&+xxiG4ZJ2hxQhZen_18S7Ha~y-quryp!m5Ui2(QrrwgI(J>ENsELWQ- z3w&}Bq~zQGI^@1OHbnI*zU68H7QxefFe&~R+e)ZwsWfJsPFY?_oQ-v@!c0NteBy}yz4o8z{Nz_7m^;5~VO)O|pBolNTS3L=Jq!CO z*44$ZA6b}`Lm}`d2>Uo-zj9Q|&Vz}&>$-;3_BmAF4BKO2pOD>_ESzB}!U)MzR9Wl5 zHetja-X@H+Y8J+CntSl=&LJ#@Z^BRcDe)+0c>k}IACJfIxN5yxz~A%Nd3=U5ZXCyH zyB`vb)btBRNN`7|rY0&QRQps~vl&3bj}`n=W3$jMQwnu8w3*|fu8bKB%jAepijj_2 zWK}HT6^QvzFtb>GiGLIt$}w+oTFxIu6YhrbNMy*$ZT8sVIBqBd1A3gKcP}B_@%g4a?gr?BKhcs^`K^imlw zpC=yt;37`zm!GSEOoIv!?iJOrt?_6aSmWixIE~}Yc^cNwXS8y>I*HaNp8FDcRVK$X z2;?M7jegNv!kd=@(9g>N&f`vowS$KS2m7BnME-k1y8HAh+%O96H_|_WYx!Uu`00M) z#Bhgx3T=+}{q=`c|KNcE%v5oo0`Jo6=N#@x8m{nrf_qJ^<`r4EMudOy{Y=hnpskKFkc_n2*oNXP2OUi9cwd&O9NP4l4E34(T|a zlnWwq0&Rt5KCB6Hd`7H*lT-{(KI}!qgfo2JA_(o={tA_B(Uly54i%3AML00F-0k!r zAD}P<0)@uH5*36skBd-u-b$Y=Mm#dR0zzBIjgL^&Z1M{BhRDBAj<_3sp|y-Fnq&{p z11UG^^>^g5K7wKz!4awIF-eL6w?zvxX zf9gKgc=Y`NlAzr|=23V)Q+Ngn&(nox4pRuyeeJ*0{)+wH8*o!@P4~^`KP~;($Kiex zaE=F@D}Tpu=)P`o$>3XX^UdG)4WIMbci`rmzngHAKIf0`84le)g!?miQDZth=$ z`v%-BC%WH(oAe*R@226<{Ugk?Ic9SZxdk}s)BQf+bpHa~2LBko4}6iYam;(`1{lVhRlx(v!C=D61f=^3$Acd7|^{> zu3#pOedMEi`ypRmS~<$K5B?v*s|1d{yOeP5jlpa>W#+QP$;z0KsSs7UGf+^O2vjtH;bA23?n7woe`7F@gGa~v4FBTMO}bviq*y|R(u zNX8;Gd8E?f3@LA^vw9AF(8`(m*icp1)W@om<8@4CHT}VQp%cOZ)UP8*af@N9Dx_g( zQ9Ojzs$V=9@NtgOFOHCP_=(EMI8OcYe4O~X6^1E%z^8w)t6^4PJo*;G9k$-7k7B)` zG}c?Ib?(g}BAy5)hfc*`ovoabOi!H}txi^i0mt<)98k{3&zQ?-8iO7eSIDo{yHM$m z)8)LV=&xff62msy8Y_mWhHBtJlv2@W)-mtJnPuTY>l+2o=AWCb&CS-w<;FszMZ&h~ z4zy}KoT~>zg-&)jQEm|wSPu$o##Hbdo9dTrX}W0DLw5F1!nBpkr;7a|o{|&H#+%`B zzG&3k-?@gMhLp3$&u13Yv$L=qkf2J(Ct$R29FAI-d1mV^b3o7&Jm%;(2{ZF`~m(rm#$& z7+~|4*IO8zLcBs>!MYg2v>(X)5nq9x@fG}1Q_+Vz4^oLV(Eyvv2!*tKf`#-2Z)3e< zk{0aWDa`kr>U!i__zH3y!0JPaSB$4ypF&1x6BY3!zPTAy{FG;S8HjAd^s>m4_)T8K z9!AQTq7Bs0R%0~@Fe`)VkX9qt>u0!FNKjQ^!N;j`(+q~L7{X)T#V>pR$~*neySqIy z)hlJN0P~o)=IlV!My6*f_1Tf*kd7QjxOOWzEjT0xmX|NaFzd(z4*dgEixt(95cfiJ zQDU>KW+-cbRzyRK#Qa`v1xn(mJ1HdWl=1|8zy#lNB8LQeNp#M+4aV17=UZ!tl84(@i*S8D z7vqV}g2jd04yUwjg1EZeTWzc_Eak%RL8P!a*@faE1{{8>1h;=;(uo+%hxl=Q5RcJD z$D#FOD*$TD$uhLG&hxCPoN;3Qp^=CbNiT%y{4@B&rJ<-uj^nZ1ztq|cVLVnZd16J1 z=z5WPoHmq^xLwgWk4u1o8Q^j{JMVY>4#)Av5&Uw_7#YJQigB8H{Xl0MFAeA?

Lm;g|N!mbb9f;pO2{1cbxD0B*9z-B$CR=H<+MK~e})$vSukoTZa1 zN?JAueQ2ZHTE zneB%h9N$CFAVs7+4qH-W*^QlRYBy-6^Ey`N!clkZGWv*^LcUEhuO^%c$R0GNf%)z5-G|$>#{M^#yMUXD%U6&&u$!T=Xxj)pNUe>UIUs$X#hFrLX` zUYL(V@H3BmP$bDK@Y5~|{g{x+oCTJxu>2blIeVTj7(BodaBIrYZTs8&IfY%Iw`4F+ z`+6bmb%c9ZAKZ+?hkRazUp)4Yd2?Mkf`}XEjWFit3gUTw3FF?^tAOzg1r{Z=F+-gX z>)Wud9jy#`W)bewD2%y_2&2g^4J|8&i$i54fin(+I0GI%NKT1Ayy?&Uz)oC$(CMQ?(d0;(S?Rfoz1AUKL zvkG`HxpEdiT6@UZh6wOhgGwh`@a=#Mk9Aa!Rmaf1%9=Wj0pJmOOEXZk$$_~xPoZSY zJV0)dG6#sC@*FheAUS_!Ea&BX0^e^RhD^8~!^!rcgZ!61&J6?Fh!JC(Uq}ZJMm95G zkCSQDDyQy9I$w4+-*kM0La�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 -_RS#2MXJ!$^&*aRzr(Ijsr_9piGeYCBnDGY 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

U)06IVuN9JI;rl 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 Z@c)SeZvoqybSVm@C;|)W8z__g_kZzG1DyZ> literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/bin/openssl.exe b/ext/openssl/win32/bin/openssl.exe new file mode 100644 index 0000000000000000000000000000000000000000..91968b43d1de1a6ec1ff52b2873bcab9f58949b4 GIT binary patch literal 448000 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 I^(%HmE22uN+h|1|whWYM>hK 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�hthNpAZjw1m)^IBSEFL_KWR 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 z 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 $-T(S2ydX!6}d3!!5K6tenO!$dh>`T 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 Uh-8ov`Bl`A|No!=C%(Y{0`-H;XaE2J literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/bin/ssleay32.dll b/ext/openssl/win32/bin/ssleay32.dll new file mode 100644 index 0000000000000000000000000000000000000000..3d5109293ccc5da7ac8322684ba473d91e15f813 GIT binary patch literal 276992 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

?FU{M5*JJ}muozo>`{r{o^6Avf_0{2 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 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/include/openssl/aes.h b/ext/openssl/win32/include/openssl/aes.h new file mode 100644 index 000000000..faa66c491 --- /dev/null +++ b/ext/openssl/win32/include/openssl/aes.h @@ -0,0 +1,149 @@ +/* crypto/aes/aes.h */ +/* ==================================================================== + * 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. + * ==================================================================== + * + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include + +# 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/win32/include/openssl/applink.c b/ext/openssl/win32/include/openssl/applink.c new file mode 100644 index 000000000..2831b39e9 --- /dev/null +++ b/ext/openssl/win32/include/openssl/applink.c @@ -0,0 +1,129 @@ +#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/win32/include/openssl/asn1.h b/ext/openssl/win32/include/openssl/asn1.h new file mode 100644 index 000000000..68e791fcd --- /dev/null +++ b/ext/openssl/win32/include/openssl/asn1.h @@ -0,0 +1,1419 @@ +/* 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/win32/include/openssl/asn1_mac.h b/ext/openssl/win32/include/openssl/asn1_mac.h new file mode 100644 index 000000000..abc6dc35c --- /dev/null +++ b/ext/openssl/win32/include/openssl/asn1_mac.h @@ -0,0 +1,579 @@ +/* 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/win32/include/openssl/asn1t.h b/ext/openssl/win32/include/openssl/asn1t.h new file mode 100644 index 000000000..99bc0eecf --- /dev/null +++ b/ext/openssl/win32/include/openssl/asn1t.h @@ -0,0 +1,973 @@ +/* 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/win32/include/openssl/bio.h b/ext/openssl/win32/include/openssl/bio.h new file mode 100644 index 000000000..8f2438cda --- /dev/null +++ b/ext/openssl/win32/include/openssl/bio.h @@ -0,0 +1,883 @@ +/* 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/win32/include/openssl/blowfish.h b/ext/openssl/win32/include/openssl/blowfish.h new file mode 100644 index 000000000..832930272 --- /dev/null +++ b/ext/openssl/win32/include/openssl/blowfish.h @@ -0,0 +1,130 @@ +/* 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/win32/include/openssl/bn.h b/ext/openssl/win32/include/openssl/bn.h new file mode 100644 index 000000000..633d1b1f6 --- /dev/null +++ b/ext/openssl/win32/include/openssl/bn.h @@ -0,0 +1,951 @@ +/* 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/win32/include/openssl/buffer.h b/ext/openssl/win32/include/openssl/buffer.h new file mode 100644 index 000000000..efd240a5f --- /dev/null +++ b/ext/openssl/win32/include/openssl/buffer.h @@ -0,0 +1,125 @@ +/* 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/win32/include/openssl/camellia.h b/ext/openssl/win32/include/openssl/camellia.h new file mode 100644 index 000000000..45e8d25b1 --- /dev/null +++ b/ext/openssl/win32/include/openssl/camellia.h @@ -0,0 +1,132 @@ +/* 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/win32/include/openssl/cast.h b/ext/openssl/win32/include/openssl/cast.h new file mode 100644 index 000000000..0003ec9c7 --- /dev/null +++ b/ext/openssl/win32/include/openssl/cast.h @@ -0,0 +1,107 @@ +/* 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/win32/include/openssl/cmac.h b/ext/openssl/win32/include/openssl/cmac.h new file mode 100644 index 000000000..175be8348 --- /dev/null +++ b/ext/openssl/win32/include/openssl/cmac.h @@ -0,0 +1,82 @@ +/* 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/win32/include/openssl/cms.h b/ext/openssl/win32/include/openssl/cms.h new file mode 100644 index 000000000..e6c7f964b --- /dev/null +++ b/ext/openssl/win32/include/openssl/cms.h @@ -0,0 +1,555 @@ +/* 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/win32/include/openssl/comp.h b/ext/openssl/win32/include/openssl/comp.h new file mode 100644 index 000000000..df599ba33 --- /dev/null +++ b/ext/openssl/win32/include/openssl/comp.h @@ -0,0 +1,83 @@ + +#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/win32/include/openssl/conf.h b/ext/openssl/win32/include/openssl/conf.h new file mode 100644 index 000000000..8d926d5d8 --- /dev/null +++ b/ext/openssl/win32/include/openssl/conf.h @@ -0,0 +1,267 @@ +/* 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_HAS_NO_VALUE 104 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/ext/openssl/win32/include/openssl/conf_api.h b/ext/openssl/win32/include/openssl/conf_api.h new file mode 100644 index 000000000..e478f7df4 --- /dev/null +++ b/ext/openssl/win32/include/openssl/conf_api.h @@ -0,0 +1,89 @@ +/* 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/win32/include/openssl/crypto.h b/ext/openssl/win32/include/openssl/crypto.h new file mode 100644 index 000000000..6c644ce12 --- /dev/null +++ b/ext/openssl/win32/include/openssl/crypto.h @@ -0,0 +1,661 @@ +/* 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/win32/include/openssl/des.h b/ext/openssl/win32/include/openssl/des.h new file mode 100644 index 000000000..1b40144e1 --- /dev/null +++ b/ext/openssl/win32/include/openssl/des.h @@ -0,0 +1,257 @@ +/* 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/win32/include/openssl/des_old.h b/ext/openssl/win32/include/openssl/des_old.h new file mode 100644 index 000000000..ee7607a24 --- /dev/null +++ b/ext/openssl/win32/include/openssl/des_old.h @@ -0,0 +1,497 @@ +/* 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/win32/include/openssl/dh.h b/ext/openssl/win32/include/openssl/dh.h new file mode 100644 index 000000000..a5bd9016a --- /dev/null +++ b/ext/openssl/win32/include/openssl/dh.h @@ -0,0 +1,393 @@ +/* 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) + +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/win32/include/openssl/dsa.h b/ext/openssl/win32/include/openssl/dsa.h new file mode 100644 index 000000000..545358fd0 --- /dev/null +++ b/ext/openssl/win32/include/openssl/dsa.h @@ -0,0 +1,332 @@ +/* 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/win32/include/openssl/dso.h b/ext/openssl/win32/include/openssl/dso.h new file mode 100644 index 000000000..c9013f5ce --- /dev/null +++ b/ext/openssl/win32/include/openssl/dso.h @@ -0,0 +1,451 @@ +/* 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/win32/include/openssl/dtls1.h b/ext/openssl/win32/include/openssl/dtls1.h new file mode 100644 index 000000000..30bbcf278 --- /dev/null +++ b/ext/openssl/win32/include/openssl/dtls1.h @@ -0,0 +1,272 @@ +/* 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/win32/include/openssl/e_os2.h b/ext/openssl/win32/include/openssl/e_os2.h new file mode 100644 index 000000000..7be9989ac --- /dev/null +++ b/ext/openssl/win32/include/openssl/e_os2.h @@ -0,0 +1,328 @@ +/* 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/win32/include/openssl/ebcdic.h b/ext/openssl/win32/include/openssl/ebcdic.h new file mode 100644 index 000000000..4cbdfeb7a --- /dev/null +++ b/ext/openssl/win32/include/openssl/ebcdic.h @@ -0,0 +1,26 @@ +/* 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/win32/include/openssl/ec.h b/ext/openssl/win32/include/openssl/ec.h new file mode 100644 index 000000000..81e6faf6c --- /dev/null +++ b/ext/openssl/win32/include/openssl/ec.h @@ -0,0 +1,1282 @@ +/* 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/win32/include/openssl/ecdh.h b/ext/openssl/win32/include/openssl/ecdh.h new file mode 100644 index 000000000..25348b30f --- /dev/null +++ b/ext/openssl/win32/include/openssl/ecdh.h @@ -0,0 +1,134 @@ +/* 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/win32/include/openssl/ecdsa.h b/ext/openssl/win32/include/openssl/ecdsa.h new file mode 100644 index 000000000..a6f0930f8 --- /dev/null +++ b/ext/openssl/win32/include/openssl/ecdsa.h @@ -0,0 +1,335 @@ +/* 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/win32/include/openssl/engine.h b/ext/openssl/win32/include/openssl/engine.h new file mode 100644 index 000000000..bd7b59144 --- /dev/null +++ b/ext/openssl/win32/include/openssl/engine.h @@ -0,0 +1,960 @@ +/* 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/win32/include/openssl/err.h b/ext/openssl/win32/include/openssl/err.h new file mode 100644 index 000000000..585aa8ba3 --- /dev/null +++ b/ext/openssl/win32/include/openssl/err.h @@ -0,0 +1,389 @@ +/* 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 + +/* 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/win32/include/openssl/evp.h b/ext/openssl/win32/include/openssl/evp.h new file mode 100644 index 000000000..39ab7937d --- /dev/null +++ b/ext/openssl/win32/include/openssl/evp.h @@ -0,0 +1,1534 @@ +/* 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_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/win32/include/openssl/hmac.h b/ext/openssl/win32/include/openssl/hmac.h new file mode 100644 index 000000000..b8b55cda7 --- /dev/null +++ b/ext/openssl/win32/include/openssl/hmac.h @@ -0,0 +1,109 @@ +/* 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/win32/include/openssl/idea.h b/ext/openssl/win32/include/openssl/idea.h new file mode 100644 index 000000000..607598403 --- /dev/null +++ b/ext/openssl/win32/include/openssl/idea.h @@ -0,0 +1,105 @@ +/* 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/win32/include/openssl/krb5_asn.h b/ext/openssl/win32/include/openssl/krb5_asn.h new file mode 100644 index 000000000..9cf5a26dd --- /dev/null +++ b/ext/openssl/win32/include/openssl/krb5_asn.h @@ -0,0 +1,240 @@ +/* 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/win32/include/openssl/kssl.h b/ext/openssl/win32/include/openssl/kssl.h new file mode 100644 index 000000000..ae8a51f47 --- /dev/null +++ b/ext/openssl/win32/include/openssl/kssl.h @@ -0,0 +1,197 @@ +/* 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/win32/include/openssl/lhash.h b/ext/openssl/win32/include/openssl/lhash.h new file mode 100644 index 000000000..b6c328bff --- /dev/null +++ b/ext/openssl/win32/include/openssl/lhash.h @@ -0,0 +1,240 @@ +/* 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/win32/include/openssl/md4.h b/ext/openssl/win32/include/openssl/md4.h new file mode 100644 index 000000000..11fd71295 --- /dev/null +++ b/ext/openssl/win32/include/openssl/md4.h @@ -0,0 +1,119 @@ +/* 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/win32/include/openssl/md5.h b/ext/openssl/win32/include/openssl/md5.h new file mode 100644 index 000000000..2659038ab --- /dev/null +++ b/ext/openssl/win32/include/openssl/md5.h @@ -0,0 +1,119 @@ +/* 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/win32/include/openssl/mdc2.h b/ext/openssl/win32/include/openssl/mdc2.h new file mode 100644 index 000000000..7efe53bc2 --- /dev/null +++ b/ext/openssl/win32/include/openssl/mdc2.h @@ -0,0 +1,94 @@ +/* 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/win32/include/openssl/modes.h b/ext/openssl/win32/include/openssl/modes.h new file mode 100644 index 000000000..fd488499a --- /dev/null +++ b/ext/openssl/win32/include/openssl/modes.h @@ -0,0 +1,163 @@ +/* ==================================================================== + * 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/win32/include/openssl/obj_mac.h b/ext/openssl/win32/include/openssl/obj_mac.h new file mode 100644 index 000000000..779c309b8 --- /dev/null +++ b/ext/openssl/win32/include/openssl/obj_mac.h @@ -0,0 +1,4194 @@ +/* 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/win32/include/openssl/objects.h b/ext/openssl/win32/include/openssl/objects.h new file mode 100644 index 000000000..b8dafa89c --- /dev/null +++ b/ext/openssl/win32/include/openssl/objects.h @@ -0,0 +1,1143 @@ +/* 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/win32/include/openssl/ocsp.h b/ext/openssl/win32/include/openssl/ocsp.h new file mode 100644 index 000000000..ca2ee76dc --- /dev/null +++ b/ext/openssl/win32/include/openssl/ocsp.h @@ -0,0 +1,637 @@ +/* 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/win32/include/openssl/opensslconf.h b/ext/openssl/win32/include/openssl/opensslconf.h new file mode 100644 index 000000000..96a44649a --- /dev/null +++ b/ext/openssl/win32/include/openssl/opensslconf.h @@ -0,0 +1,271 @@ +/* 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:\\Users\\Andrew\\Desktop\\openssl-win32/lib/engines" +#define OPENSSLDIR "C:\\Users\\Andrew\\Desktop\\openssl-win32/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/win32/include/openssl/opensslv.h b/ext/openssl/win32/include/openssl/opensslv.h new file mode 100644 index 000000000..88faad652 --- /dev/null +++ b/ext/openssl/win32/include/openssl/opensslv.h @@ -0,0 +1,97 @@ +#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 0x100020afL +# ifdef OPENSSL_FIPS +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2j-fips 26 Sep 2016" +# else +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2j 26 Sep 2016" +# 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/win32/include/openssl/ossl_typ.h b/ext/openssl/win32/include/openssl/ossl_typ.h new file mode 100644 index 000000000..364d26238 --- /dev/null +++ b/ext/openssl/win32/include/openssl/ossl_typ.h @@ -0,0 +1,213 @@ +/* ==================================================================== + * 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/win32/include/openssl/pem.h b/ext/openssl/win32/include/openssl/pem.h new file mode 100644 index 000000000..aac72fb21 --- /dev/null +++ b/ext/openssl/win32/include/openssl/pem.h @@ -0,0 +1,617 @@ +/* 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/win32/include/openssl/pem2.h b/ext/openssl/win32/include/openssl/pem2.h new file mode 100644 index 000000000..84897d5ec --- /dev/null +++ b/ext/openssl/win32/include/openssl/pem2.h @@ -0,0 +1,70 @@ +/* ==================================================================== + * 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/win32/include/openssl/pkcs12.h b/ext/openssl/win32/include/openssl/pkcs12.h new file mode 100644 index 000000000..21f1f62b3 --- /dev/null +++ b/ext/openssl/win32/include/openssl/pkcs12.h @@ -0,0 +1,342 @@ +/* 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/win32/include/openssl/pkcs7.h b/ext/openssl/win32/include/openssl/pkcs7.h new file mode 100644 index 000000000..b51b3863e --- /dev/null +++ b/ext/openssl/win32/include/openssl/pkcs7.h @@ -0,0 +1,481 @@ +/* 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/win32/include/openssl/pqueue.h b/ext/openssl/win32/include/openssl/pqueue.h new file mode 100644 index 000000000..d40d9c7d8 --- /dev/null +++ b/ext/openssl/win32/include/openssl/pqueue.h @@ -0,0 +1,99 @@ +/* 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/win32/include/openssl/rand.h b/ext/openssl/win32/include/openssl/rand.h new file mode 100644 index 000000000..2553afda2 --- /dev/null +++ b/ext/openssl/win32/include/openssl/rand.h @@ -0,0 +1,150 @@ +/* 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/win32/include/openssl/rc2.h b/ext/openssl/win32/include/openssl/rc2.h new file mode 100644 index 000000000..29d02d732 --- /dev/null +++ b/ext/openssl/win32/include/openssl/rc2.h @@ -0,0 +1,103 @@ +/* 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/win32/include/openssl/rc4.h b/ext/openssl/win32/include/openssl/rc4.h new file mode 100644 index 000000000..39162b164 --- /dev/null +++ b/ext/openssl/win32/include/openssl/rc4.h @@ -0,0 +1,88 @@ +/* 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/win32/include/openssl/ripemd.h b/ext/openssl/win32/include/openssl/ripemd.h new file mode 100644 index 000000000..b88ef25e7 --- /dev/null +++ b/ext/openssl/win32/include/openssl/ripemd.h @@ -0,0 +1,105 @@ +/* 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/win32/include/openssl/rsa.h b/ext/openssl/win32/include/openssl/rsa.h new file mode 100644 index 000000000..d2ee37406 --- /dev/null +++ b/ext/openssl/win32/include/openssl/rsa.h @@ -0,0 +1,664 @@ +/* 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/win32/include/openssl/safestack.h b/ext/openssl/win32/include/openssl/safestack.h new file mode 100644 index 000000000..1d4f87eab --- /dev/null +++ b/ext/openssl/win32/include/openssl/safestack.h @@ -0,0 +1,2672 @@ +/* ==================================================================== + * 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/win32/include/openssl/seed.h b/ext/openssl/win32/include/openssl/seed.h new file mode 100644 index 000000000..8cbf0d928 --- /dev/null +++ b/ext/openssl/win32/include/openssl/seed.h @@ -0,0 +1,149 @@ +/* + * 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/win32/include/openssl/sha.h b/ext/openssl/win32/include/openssl/sha.h new file mode 100644 index 000000000..e5169e4fe --- /dev/null +++ b/ext/openssl/win32/include/openssl/sha.h @@ -0,0 +1,214 @@ +/* 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/win32/include/openssl/srp.h b/ext/openssl/win32/include/openssl/srp.h new file mode 100644 index 000000000..028892a1f --- /dev/null +++ b/ext/openssl/win32/include/openssl/srp.h @@ -0,0 +1,179 @@ +/* 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/win32/include/openssl/srtp.h b/ext/openssl/win32/include/openssl/srtp.h new file mode 100644 index 000000000..2279c32b8 --- /dev/null +++ b/ext/openssl/win32/include/openssl/srtp.h @@ -0,0 +1,147 @@ +/* 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/win32/include/openssl/ssl.h b/ext/openssl/win32/include/openssl/ssl.h new file mode 100644 index 000000000..90aeb0ce4 --- /dev/null +++ b/ext/openssl/win32/include/openssl/ssl.h @@ -0,0 +1,3163 @@ +/* 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/win32/include/openssl/ssl2.h b/ext/openssl/win32/include/openssl/ssl2.h new file mode 100644 index 000000000..03c7dd8ca --- /dev/null +++ b/ext/openssl/win32/include/openssl/ssl2.h @@ -0,0 +1,265 @@ +/* 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/win32/include/openssl/ssl23.h b/ext/openssl/win32/include/openssl/ssl23.h new file mode 100644 index 000000000..9de4685af --- /dev/null +++ b/ext/openssl/win32/include/openssl/ssl23.h @@ -0,0 +1,84 @@ +/* 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/win32/include/openssl/ssl3.h b/ext/openssl/win32/include/openssl/ssl3.h new file mode 100644 index 000000000..e681d50a9 --- /dev/null +++ b/ext/openssl/win32/include/openssl/ssl3.h @@ -0,0 +1,774 @@ +/* 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/win32/include/openssl/stack.h b/ext/openssl/win32/include/openssl/stack.h new file mode 100644 index 000000000..eb0721665 --- /dev/null +++ b/ext/openssl/win32/include/openssl/stack.h @@ -0,0 +1,107 @@ +/* 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/win32/include/openssl/symhacks.h b/ext/openssl/win32/include/openssl/symhacks.h new file mode 100644 index 000000000..239fa4fb1 --- /dev/null +++ b/ext/openssl/win32/include/openssl/symhacks.h @@ -0,0 +1,516 @@ +/* ==================================================================== + * 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/win32/include/openssl/tls1.h b/ext/openssl/win32/include/openssl/tls1.h new file mode 100644 index 000000000..7e237d063 --- /dev/null +++ b/ext/openssl/win32/include/openssl/tls1.h @@ -0,0 +1,810 @@ +/* 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/win32/include/openssl/ts.h b/ext/openssl/win32/include/openssl/ts.h new file mode 100644 index 000000000..2daa1b2fb --- /dev/null +++ b/ext/openssl/win32/include/openssl/ts.h @@ -0,0 +1,865 @@ +/* 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/win32/include/openssl/txt_db.h b/ext/openssl/win32/include/openssl/txt_db.h new file mode 100644 index 000000000..98e23a200 --- /dev/null +++ b/ext/openssl/win32/include/openssl/txt_db.h @@ -0,0 +1,112 @@ +/* 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/win32/include/openssl/ui.h b/ext/openssl/win32/include/openssl/ui.h new file mode 100644 index 000000000..0dc16330b --- /dev/null +++ b/ext/openssl/win32/include/openssl/ui.h @@ -0,0 +1,415 @@ +/* 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/win32/include/openssl/ui_compat.h b/ext/openssl/win32/include/openssl/ui_compat.h new file mode 100644 index 000000000..bf541542c --- /dev/null +++ b/ext/openssl/win32/include/openssl/ui_compat.h @@ -0,0 +1,88 @@ +/* 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/win32/include/openssl/whrlpool.h b/ext/openssl/win32/include/openssl/whrlpool.h new file mode 100644 index 000000000..73c749da8 --- /dev/null +++ b/ext/openssl/win32/include/openssl/whrlpool.h @@ -0,0 +1,41 @@ +#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/win32/include/openssl/x509.h b/ext/openssl/win32/include/openssl/x509.h new file mode 100644 index 000000000..6fa28ebad --- /dev/null +++ b/ext/openssl/win32/include/openssl/x509.h @@ -0,0 +1,1330 @@ +/* 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/win32/include/openssl/x509_vfy.h b/ext/openssl/win32/include/openssl/x509_vfy.h new file mode 100644 index 000000000..50626826e --- /dev/null +++ b/ext/openssl/win32/include/openssl/x509_vfy.h @@ -0,0 +1,652 @@ +/* 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/win32/include/openssl/x509v3.h b/ext/openssl/win32/include/openssl/x509v3.h new file mode 100644 index 000000000..f5c61560a --- /dev/null +++ b/ext/openssl/win32/include/openssl/x509v3.h @@ -0,0 +1,1055 @@ +/* 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/win32/lib/engines/4758cca.dll b/ext/openssl/win32/lib/engines/4758cca.dll new file mode 100644 index 0000000000000000000000000000000000000000..7bbb022154d52d491d934fc882670a387e78b89d GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/aep.dll b/ext/openssl/win32/lib/engines/aep.dll new file mode 100644 index 0000000000000000000000000000000000000000..459d60f4b4338aa6138869e5fefc82cc90cceb2b GIT binary patch literal 14336 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 A(EtDd literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/atalla.dll b/ext/openssl/win32/lib/engines/atalla.dll new file mode 100644 index 0000000000000000000000000000000000000000..88e297db5899fc2738ced20e09ca0dfd430e77f0 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/capi.dll b/ext/openssl/win32/lib/engines/capi.dll new file mode 100644 index 0000000000000000000000000000000000000000..fa83944ab30503871e4b735582d41dfaaef28462 GIT binary patch literal 27136 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 NkKutu!vECke*>q{g(Ls~ literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/nuron.dll b/ext/openssl/win32/lib/engines/nuron.dll new file mode 100644 index 0000000000000000000000000000000000000000..38adbb70fe5281501ac9d3baa2d62571f384ccb6 GIT binary patch literal 11776 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 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/padlock.dll b/ext/openssl/win32/lib/engines/padlock.dll new file mode 100644 index 0000000000000000000000000000000000000000..bc9a00daa40c86eff72277f4bb4383f16c482290 GIT binary patch literal 13312 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 C&be0r literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/sureware.dll b/ext/openssl/win32/lib/engines/sureware.dll new file mode 100644 index 0000000000000000000000000000000000000000..4c119fda39048d0ffd2d6cde8e3b814ca7c2aa5e GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/ubsec.dll b/ext/openssl/win32/lib/engines/ubsec.dll new file mode 100644 index 0000000000000000000000000000000000000000..bf98666c5378091eb95b501f8a91e6128ef9ad75 GIT binary patch literal 15872 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 BeLDaE literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/libeay32.lib b/ext/openssl/win32/lib/libeay32.lib new file mode 100644 index 0000000000000000000000000000000000000000..bffc8e56cdf5b4a765f069a49121aca51850079a GIT binary patch literal 821042 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 b2D*oq>b2)*JF6PLqKRQbUlw*QM(^^!%9YG0 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/ssl/openssl.cnf b/ext/openssl/win32/ssl/openssl.cnf new file mode 100644 index 000000000..1eb86c401 --- /dev/null +++ b/ext/openssl/win32/ssl/openssl.cnf @@ -0,0 +1,350 @@ +# +# 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/win64/bin/libeay32.dll b/ext/openssl/win64/bin/libeay32.dll new file mode 100644 index 0000000000000000000000000000000000000000..0c6862a1fdc99e27a7329cc4573d6d68d127b4b1 GIT binary patch literal 2097664 zcmeFa3w%`NnLj>o0z`>UtZ9o%bu?2OTxz3(-Kf}RaHdY$8HFkq+oA!4LVrLamll2& z4T7!NW43m;-F3HiKeVO0v~_oFSG%;eHj~V7za$Xu2)T$R1j$V#7YYCG_j%7bb7nFV z0#5qd&wl=XbW^$~~Ti&x0$ub;$zw(ORHe6>H);V?Tie;s8m z#Z)xW9K~p=ZZdxc9;-9;AB=M>du@c{q2FHXn9l)RE=PcqQ-8f<*)2R_{Fm=?{BVlH zQF_@p$3y11B)>Jd{=>NQS33$u#hr*dxOLgw70YmDX`?|WY3KO1|6C47@vTc9pS5h3 z!{MtMgDY1%91;9Bqpj_~LWt3=s+l8j1v;s@*5Nn?X?q#Jw*Szs^43z-P-q0Lj)|c4 zZ}4mT5A6zX{l>fnk1sX2m+f*mzi{l8X!d4u;iP4!0$ z)BKCn{oP{qmp^!aBUFFX-{$G5`#bz6liq^C`}++WZm!B?f1^_O_cvC5g@gAuOZ9gd z`+M!5Qu6OEtG~eD{avN{yPW;aP2Jzg*G+n-4&Gmw4L4VfWq%({-QPc3{mmG>zb90G zS?n+RVoG|yX!Tb-cz-vl{^+-wm#6Np_m3vM^9S#*mJK&o!5=!BKbg9}Us?T?4&L8t z)t{67?fb`+^nTUqZ^hvK-KP4ZpKX3Nb$^$e{jDoQ%R%f_!ykm+tJvQisr&l_o6#Pu zdv5UlexUlJk8D2i4=L&Wrq$mIgZJlE{lWLb{-y5kTC2Yo2k)=r_d;(D`}3#nZyTEl zz3T?=@29H2kFvirKT1jO|F!ztFnE8{RDU01f4@lG-z`>uub}0Q3;d^#2v%f_Z1*{T zGh+D}uU;8=v8#F>{&U{27I!-w&f5avMps~LRadq12E+z|^6$7a1Le!y*#SKg(0hV< zwWqTDzD(!OeELC8{jpUh7qu} z-qpR>mM!`0M*cW|7Igluw&;8n+c}&+bN-=mymQS<*bld6d+$2z{2qmBb>sQ-=i6GI z#jbZvUxxP&I6S{(;zqi@-{T){#8BSw$t%5R3I#>0F-x*G(p7l2I)7IFSfxLjEFmb2^w=kn1!%64%4r7ks|cTKNjnQD~{G-Z7wzCGHwvbwIj?-lPbAV@#XWp z(%Kp*N0Tpi2hLV?gE2Ulx%?FGUtT$&|9Q@~O8nc3e|zxn2>!i=fA0o7TLYdwAx~w< zvo*w>BY_H^J9EJOzX#opfOB*El97$wfi>OO_l42Qlt1%&cl`AWNcGS!C(3g`?<~@5 zra$O?$osJOD*?R?;y*f2G5KS<-=WXU&_kK}^sK<$XPs+*2IM{+g1+6Sclh*PpZ+nQ ze%R+ZG^Ju~_KNl2JmAYc;`1E#=?`akwd!!?7@vMftM+-0OsV+cM;`v~&CR~tgJ_NG znO<#gxGKx1AJJ-jo`X{=p1IM_wKXCA2)FPtG|%H!5V-3!0|`?=nLnp z@m&MQKlozV0&9Ht!14d{tWUSb&l@=YZ@vaaFzKH-aQrt8e7)QnKY!r(H(m9@|FOoO zG;sXCf8s^pH~3#LaQwf$cjdoY<4+zq{*9Th7MbIJ%sxD3n^K@Rde82qAk6;c_3!&~ zo7h%=c$|N16QsbaMSOZgxN?+MEv}M|nwkBX{T8geRInb*@r|@#O-==C_1ix^Xu^6pI~A@ieS6=raJf_AdV6QXjTWwg zRJit!`Ri&6S5_)q-@9VpdloKNDqQd8eARE^nv@FHsFtQ*TDUS(;p+Z*+Xoh|@u_ef z8d>rU3s-(BTz?b1rNYFeCfh!ZoLfi|C2Y!_z2|Z0qOI{jYG7(0f=9G!+L_hwKk+?^ z6b+3B(gHg(mUg6uM&_njKUsu}1++3A^bRAFO(U|67AC9U#5r8dpo#H7WMN@GP75Yu z`cA&F9v8Edj`_>o$G(J%kBfOp$1HvQ&u`%3q@-hRdg{k{w6V#^?ETbF zPvXX`q(eTN-v&*3cwEvUM}6WsaO+`r(jo7xsiWHFCmr*|KOK1+7bhnjv->+gy8#z7 zla4v};g?|mKuH2;anAckh9Ve`GwZu)!h624m>aOa8oiBISHqQ~aZ1haKc2tkUf)>s zgNfgZCIv>5s>^Xo&GNtH{_xknv5*Z+KU~$rIYyJP6Q|T%-?{GZKk$u(gg^*rf%1(e z)gQ$vHRIKfd~L2BOV&Uvf43v+`*tjO1F@`nuMP1{3`@p9EVVP&K5NI~8i?hAr#6(> zu}mI_rT*=S{dO$l24cy%cf`-_SSAg`^3$s_@3&*g9*E_crye|O$1-ssmODD{`jZ_? z=0Gfe+;iX-I~MmqEI-)$-BueGLsG)V6nV8uFO0jk%c~s-tl3n^2<4ea5lxo+9py7K z%0rpu)3bv5WOoozVrEc(obmhD-QxoKLbr?AOkxOW#$OMA<-zHQg{CtadI`y5VUb?A zqDX(S8(~|p;-g32KYzaH?!!y&FVf4HUg6YlA;37b^zJ}KA-bL49nfdA2le9Spk7)Z z)K?rVDu0ndcv1O=b@&ODuRAC|uQbcg#&-M!^c9F_OS6m0rPreJS2o~mQTaxuG)4N# zydu5*_y3Ij54r-sDAGF^Z9?0E`skp3e|8Y|C0OxjL9k-pxFE`Uu3-7s-Fdl)aYzIY(hGm$ea!o)cc%C2Gr#uOqg~ZQj~)Lvv`ilV`t&Qbjn^Z*9p#Xp zkDmMQ>mA;+m8>=|3wqC1f%Puuvp>pa{?(X=TnlL!f1GPOKEs20G{{DVhMz+J*syms z`ZC^y|f0 zetmv+>*cZh)T>|R+~(C6WO(&Rd5&A(<=pA@RENW(ayNgW;^kZZY2`Ct^=U0$Pb9qg zdY{(p*PqDr>eb~7-MC?=*SX8HnQb?HpeHAZVui75+Z1#quXnPO{vh_`nwJfi`oe-kZHd68WU2LlLcs6;%k?XZ?0Lby` zQ2@x+cVm1aW3SZ}uihaoJ8-WzTz$RPj`7EVDgwv>UE55$?yGqDRyBT%E{s2(bUoz8 zEjyh%V`SZ=n#RZi0++rS0C2+&a=;+#3l%SYLbbJ%HO;MWA_5ob0tACDZ^i4M6Sx*( zK#)hm9&)?&-Q<8p*X`0UMi&4~ z2RUjgu{Y71YlYzv<_g?+JPZQLCXdY z9)gSszpyunV*At9LyLuy7Nw50RRAzfa6v0};=pAwtpGZC6K^094N4`!G>i_xr2;|H zcks|{v1~GBSZ)EE4w=CNDn+YrQX>|uC&>$PE0)~l7v!FFQ$sdDom=FrL zP+=pSjDlQKzn};^a8w{PyKouC; zHVK4-JBn^v6^OgKAx1bcO%{zS5P{DyCL5-OwpTTeQB6pbU`_xCDkaixs0b0cXo7`` z7}W|AgdF-e2{S@jR|;TDtEII`%DTuZ}l9PJL_w!a*vt%-UJp+6amZA zkCR=wo0RNlQRL;WV{+HQ+Nd}8O-tvIGQmcPq)pV1@t^>P(NKbHh`z%5Chpa`0o9v( z)KLCDV1v?#y@%GkiNndTk6;iC8+Ab4d6ajy*H(FRj~Hg43-F*jlsnvil&*l>!P#-t z1$CRjoZ6_3H$(?@pa9~2L7pMZ;RWc?`cDd-26xC;8+#D&NPsdK?158I?19yyYRGLS zdw|r&9-ztqcX0PH>}Dz6V9yN=QAibQ$W@Co!~@NuR6?`fI4~*}bW$l+_JtJ72hl;g7 zJez^BX=<94MYn=Gco{ejF}LJ1baDMBd5b5}$v_2Fkf*#%hH|d3jZ`JMBi_qcp`LOw znab9}I6{RKrUWMgone@#d`yzC(%`LJOsPUq;ZUAG-D`uu$Qitwl<0tAb75b;X3lI_$d>zuE1E- zDlCxgYVj6`=Y&*RF8B@AI7TaRw&U5zf zD02GS*{IT4u=NB+sBzx4BkXV%Y}tngqHp8mX=lN!WtE?j8C$y2y^)_%tU zTzC&BKfuK^_B(dq!a1DmAJP~jQjNh2Nyp%Yq+{?xQaVzOF*4N{ypVJZUPw9yFC^tv z$}u$i7;2W)eDK0PW41BJCU1Fqmo@d6@L1~umK=0ht-WZjWMQ7y*tNm`6Fx3qZ{46UE!Ahb6pUp`J(Es$_wR_3mPnSe+AISs_0w zo}+-jNCDq~&D4$9%-9mt+f@~9b5P%fT3QhvV~4cbV8tiC_*oR_bo@U9E-8R`Y-*O? zRWoR7IbIgcuCC-p5}1XC~X%h-j;jL)6BDbuGhAOw~fJW zYrUsi@6f*P&f@uwk=V91diJsPgO#v=+VR{@o@?;z(+-8VV#Z5bPJ7O9#2wi5*Xezl z541ZMp7d-BSC7&*q4m;38M!^4ZJ?$_s}64$YPNfN^>z)8o4vIN<)kLZt+nNf?TO-< zk3o9LPEQBB=_WDn>gT|OaX4O5dxLO6+fR5kx!s;>o~^lFF#*K1c>45CkUpO0JB65L zP>k01){_gnbI;&P+euHeqTgBCdD$tGXvya4cwwE5x$n6D3oNb+o z1DKjR&pEvdbaVRKI)!i&14d|@b33qGvdgp0B)w!mCLjIukec@~`3Np?ykyS}=KKR+ zSf-yeUaz!r*L+csd{fIc}U^xLav~ zvn{Oc&+X>DRbU8cJ)rI5&0#2mAp#jVU9v?8#~ze2pR-TO!Aev5!EH~wOgfdNHEhye zdf>EnjI*vC!YpTTwkg}2J)KYi4R7zX?Zhl*LrMXvM(+lGoZF_I_Vf_c7A5ojl^V4T z=Mf(Q))}S2CAHcCnI@PIsJgZf0y_?{Iz|FZFKz(WL}fkQ)NSC}rfq{ll7m8Suw zLlo0<1}d!4X6y$@mspsEVZ9GXac-}+$F0>1=6VX-eor6m642BL;)z7F^)y7MQ#8xd4zL<^{y4Dai-}mc zP459zoI9!=^PH3UqS*nOJpc|gWbY&h2H8tA+sR|>(1;4Ffwll>x<*0@x{0Rtda;?F z9`YDyU^IYuGSTcgZ7`Yq70zPhdM(Q>D!y>9-V3BSbwb+ zljS*QSoUTSUXhv|rvXs!0#1?Q4jLy6-3hR+TpTHRUAR;4hAcSS&I*fVx&RHcwGWC4 z26YIp-85ASYsoJCjI_XfWs6AyMCX$CN75t_6RcU#otFy}MfP+6xZVp%!8CwH`%Ysb zV2nh%C(r_CD>$zP*W@|5q)6YSK#Nn21;tavph}ci2 z*C835&`x?34{VBveMB4Yrh!oczHl?b4TQEZN#aL1ztBg3+znp>kd-n!;#w44C6$~Y zw4jGK<_RF%N6KW${9?K?IbGysB}n6RDK#$LeHz9G^CB~pWy}yK$CwqF5SlHhIj2KO z{=zMs4xrpdS|moOf}R3pjRXp9TV-x?jJd&ulC7K|qRep{(*%$(U7Ra5;XV|xFk1w< zm12k40y(&)wB|H)1+yaaGv1gVPK_}qG95H$(0)#a60(K0oD6{6OIpPDZ-M>-WLU(i zZI8^1+n5=G+{5W1NO)vpmVgo_jZ>xO8&Ax|9RTGXiXCPP^blnjw%=pg{)zMgamv#v zs&gE3k+1B3m1+Nvn)bg|iCzCTW&aO?o=G80+A{FOBwWfD_s57o#wzsEUn~5YM1HAQU&$A} z9|x%w307QJM+HqA~yGLz~Be*Hb=60Hk+eh*v zjVm3SsC1FWCmg#XjSC$6BaO2h$8c+ZQzZOEe`_SXpua2H^R(NI4WdS=ba-!m!_z6~xH zx3|`7yXafAZISQ<*k|_G;Cy+{7^s&dr96Rj)VY4EWTNyk&X>22@tlb?EpWDEs^k-p zcX+lr*B>F|qZ!(!+@5GHa!mLcK&}RfV~pG*Cla34)@+cs5|I?M4j|r#R7`6Y+B$&v zTvoK!%sUl*CgN$W&CEPVpNV){TZ@otWS$%W`K6G_`KwoHhqg_~YL7I{a&|(wp~o)Z z-l=E;$CxG{7MYozMrlQgW zUewyosU(>u@S?U3+iXtc5S@xzW|pxjj5Iys?8{WiBp~ln!~ycL49;FO+}6h#1mvh~ z>Lx|PUM7>AI*|@ZCIR`t4Y64SXEorN?NbCcwn(LJeOZ_0jps|O!qNI)H z{HbISx3^XrVwsR9QVf~IaP|Ov&PwOz%xH(1FY4W*Ssf}@1UI*k9?r=VZCl`*B~28d zzens0L=aIVGo(e^7wtfx1^+jW{*MC22!XOk^?9Oo3uJ0MouASc&l%2!b|^CE31?+y zw8hL4^*+&*7L_3a!dBXu>kPc%1+ffK83Aaja3-6Hj6xf2fvy5=9(^RyGKEnXVRVon z2Jz$p4pJ~8YcVj+S>Oz3MjOloQSTAiXi&)^fQX6!aClbRK{GE@TD@ei!r+Q=Hrjxs z5J6Z0g9ecRBwQvlXSFisn#|Zi;8`q;%$en^%A`S)v{11ThmsNk!giCLuxwzbWP^ed zR?QF)CWVT#(L+cDnG-Ukka^CEK|aaL#2Kmj6>LB&BFOCksi zJ4{Z(RDqL{1Co=pQ-(-bJdM^O0R+%-3^-)ok^dR<9;UJKxyKU`Qwu{fCHafYndXdS z(%Jx|q<~}{j?Xfu0EnH6rONJ@d4-!6$B+iv5(3rFM7J{G0|Ouj2Rvdp02@gkZf?aP zS;{oSkl46{k5HLV7$PgSFEXdd8O@|wF%v&hfa7ka62P`g9HUEdT$vd&shC6qW5^0k z2dUEAqhaQH;EziEXeYpXgE;5pxqiHJA|Oc4BM{0x%I^GQ%LJnWWHJr3(zHxQGDon$W?3f7#wg1agk?%%rfHdsOwN#b!pOJGGtCn2V?FSxnC ziA5%5WF)+VR7n0|7#PF#0kI@>hU6Ny8HgpN6T}wFfEY=g1hL8_L&W-9WA04_umB^; zT>|5L@IwO(Fh-ZGZUDcK*GZhL%&x@9G4G{9WT27!E}nlFUD7&3qzndtc1i3M?G!D1 z^mcKn-OBg)Sk3qzSus4(mZyuuiD5&!IGPv*d{_=5xw12H*i*k)K9u5ld+aTKK;zT* zbwf%1@W#J-I?0EcWq5ijPbn)F6yniknR;6J(lwF@hVDKYa^Bm5$CTDXOE10;iG-h` zswU3>`JO?fdR2knF(OjEydac4BGS0Zu_;o$s9?Ga`^%9QR?jV%nUDQN$PT?vF`I0h z%N%hPbHwHStHLzi0#5=Qpd-SQNpLdtx6NyOE zBBX8T?r27IUt0^hLu^02tr^|zyFn1vqf_Kx`}*HCJDuJN!>c---qynACnMhJMyKnf z)49m0(CM2Q(VcCb=rj@uhuYfF>3(8FRd{@W;$?Rk zep_=S@s5d_)EgpAPqx1~GSWD;vp2WJ)7I)tXcU>_XFhYTE#lRdmqi*^boSsNteuI> zd9uC!I^N!lw0TuqWiIT_d!EfeiB#qsq6)7zeQl&M(AlTeu<_f{c+*Jw$W^WQoT|=q z)~kh{i!{#fJQwk<>ff&IV!K9Z*Euq`MrO?ckAbgnJqNtn%;zJGrJdc{VK!@!X0;=8 z@k!QE&u*`_XkDbSxU*kt;ngO&x_x9WzPLN(IUbp_ifPc9ww+$hzh0=t0TVm4Jt1wu zgz)mVEx9dTE#hed6^KX9Am0Jm8-(n5l5-(9%Uiby$sqJ)AvEG$4k{9;6)Idpg`yZb z0E!cdHEE2brZF;SIWwtu+xCOnEkZ30_EK!Gizgcz)mCHB4pI=mybGlO?K_0_c)D{T z(~DYbglj$>L+3CTD( z8b7r#25kq8`2`h-bWR}W0_~2ZGmYl0_y!Zx4MH=7(1>>~sEC{8+!mptSg62EgW}Aj z^J`9RRz=Q8iis(|o-?GcD>7#;Gdb8K2(hao>o)A3U^`QOJvCyeIIsIaq#G0!B=;of zDXf@uE3cU9=@HEgN9N3A;s>*bne%}v?4D-37-eD$g**@y0AeJ3`;g&*JT{DxCRCwy zYcog-CJ-dn(Vz+h6$|2ZL>y09jHt(x(-N68omnDmDyW(ds<3-Do-#4CoT@O0S{SPM zcL&A+aHNSlkrt+yyD*F}C@f2$OYE=*nxLj^tpKki@T4;a+MY{JQe;kuDI}~nX6$(o zhuv;*FD}B5O_>;WY98lp9dILgj3QY~F@s@Pd(gQ)fh;ljhFpTI4T8I#xRcHsrtD?C z-_xCps@&bJS@!y@-Tp7C^z5SXM<&-#x@q-Ejwz|0!yv#i{-<)OhY`2Zo514zg|4>w+{1n*1u){@qz=8qPn}j<& zErZgVF&MpepAgDK_78_(Qcov9dSYq|dMsbCBbP2U%Tq)0#RCkG2XO*$uR^&ClTUgI zNsl1`ag%Qn?p9NtlHR<*=(RhB=@UKG^a|!|(;bkWn7sl$mRG2g$uCrsFTP-a1c*C; zb_?Y`Og`x;COs*&0aG4OQ$Ap}O?rc#!^vnBl`c*u#bT=-PbR;fF39iv0k}= zTRtO8KaB^C*?I?Fr6oI8pP6z(vNHy6tfD{ z6JvBUV!hmqH^$2GUdc3X?v(nO7!$`L$B8NRGgTC9lp#>5Fv8$?mtsY~DPbmtyS7L- zr5Q;T;7XAMxi2Dg32=!eA#AtBwU%9>wr;|UcP7}xK-Lz+rsQdg&=o#0!)+97kj)zL zD{;l5R*HZGtSL=kVuTulx*;WB2Z>1m3Kd$Tc7$RP)D5xdpizhscqS7MGu#|B>iSSo zW-FE|R_i;eT9%Zxpp6JP2Mslh=rWlYnK9+?g_5e^1`S0RX@-!P_E_|2Movb|m`t+F zNO91q`EUWE6a=9Z2o4z-N@*}bF_@LJQYcabycIfGeiGy~^LjvrOA5|$w`ij?}Lk<~MwXBiV5k&qJQ z$>sqT4MdyeO)JEV)j4gGY!Z*eUTla-JPMyu#V{jKse&d5fIaP($a)>(iqt`Aq={8i z*q6l6R0^p^HG{c7>#1OZ#Hpy3whyq8pbqb$umHe_HCAv1U1q9a(uKU=5DKdTD-2mD zb=U;cWG@E@L6t(#%oH(hq=|J~5S$q4N-5WHS*!`Lq6@ku>_xq{dw_8TL3m4r7M1~U ztmF%VOy^({go1zwf;myB0ShNkfkq`bK`-oe0wJhg2nziV3z^M|wf7REcUpWKIz7+>5a{hr|tP)Tm7Z?xlFLF%f(tR`ZG5TW}`U9Ez zSFlL(eW*Y@fW=S0GR~(zHoo;rW$#S+*82h#pZ*5ctoQWz^qc*9vrljLI(K-(JFoQX zJ$_HKH@xdIzo*w%?#7y*?f%?uTpH!qns5%6#-fE^d&j4D`?R?ZH1K))&|owcRQ2Yb zM}v`m?SzjRbDdv18mL%=58jXY^m$lA^rRo3(W;TWxE<~hBY6P>>kel4JzcrzpCdKm z97jS6pZ1Pd@8d|g?jaHkRO7P-^7E5X2HKB-GJSfBU+**q; zr+51eg8E2Mj?dHSRTTNO26BkPK#COKcv(%6SKksN$m`jS`N1ryVaT^}ejSU^ntb!? zeSReiK95Y%IG?A(uY|#;HQ}Th>7e0l(^k`z*^eBIDJ<3m?9!(ldkFa=in)C>9$Y6R@kTyM*hhQ1I0hs6;R zAAHkf@WQ~ie~28MNQB}+iLjFhhslEyV>Wn**vY^M&oBfY<`W?uuka8nOzymL7#uIr zA%emm4YA-2RR|{$ptx+ZP^55pTsAR|14OL&Yv>7F_z*Z)K!D=u8OF&R4}+&Cy7A;- zwgqq35QT6u0WwAqJ(ejRmKcE$T|fw47z{+ra6tyr$~^9t$b$Scv^f2d1<}FTe}|kf z;0;v-Gl-BeNlHVQu9$=%^MDcTFtm6mEToA6LWVMfSi*FKGQ@}I;ydJq0dT0MFpCf+ z2uf`V(-Q;{WIiy)%=OSrVKxymc1mdq(-Aun-6XOw&tlXklJOMJy8^jc*Bh2&ZSa|U}WW_~TLK+dk zli)D5DNI9fShh+-VWjB{*TX~Y0|8;6;#-B<811nP?SV`UH4hCn4-GXB4K)w#vGIYs zm$|2wk12mFqx^x)a$GOR^>SP<$My2Z#yg*R|Fl|MZ$?o69KP(vA4XV=zltyqf9_$i z3+wCU1uEv{C$2zdD-x=bid8dAc4*dHUi{48O!J}hhwtpT zs^gLM&wT#x_B}fO*NMk3{%Xv@5no&LkvE>b&0W1JYkK1GvYBrz>Hp2KvVR+W^vBCO zejH9b4lnreTi?C!jkZlc2|IWE6idG(9G6UN`Sh>WF8kuqU%vA7!_W16EAjZt(?0j& zqD{AL*zzgumCa8-^5?|kuCeu-?)$;N?VC1d+vsmhn2?ir{Oslb{i%W*ueo{_5cU4{Uqs zYh5L`&QCl({ml25mCX6YikuZ&)@F{}{CwhZ@A)@gXk9pU{n?-QywSPhiA{;eiS_!# zW5@?YX{s`F+$)cbG0u3z=lNBeg$8Gbnv03cmih0Me_bseKR^lzg`e#^nsKD_KZ{Fi9*p4;yN-M8? zfrndhh}EM?yz9^^!d6&0(r7??;Vjs3)NE3TCQ&vyYc;{0{X}yv;{{wij@Bp4*7Z2C z$yu=Tn7wfy8~01&chDG1SIX$1t-l&=o9t~rVB0=v3rst@%#K}X96@6&Z)pGpigRrI zfiwoX80JDWj-v4yd*f7)i!TE5>N3=&F9P=Jb*lYPk*}^)?S~3p{x-_R;CF~{4Vmq$ zU8;R5{Azakx!&mNLe&(|jS1oeV40SZZq=$}b+Kx(=>@9^Ry^ea*9q$1!_8Lbvp1`i zFZWRNdrT!*1aZB~c_6dP`7|`;>924h%neuw6AG0_h03EsyVyD5JML1b`C4}wnq%jAdHZm%2N3b=g@CK~H1~>m7!Ad~ zpL+f<6rsSe8GDcBI*z?n#W>Z1e^^PU z9}0<2(eN|_zpO3r7|WGl*)Au(LqqJHXeF3`#p`g zhLwZS$z9I+41aDt&T_vON!57tj+!`{>>7)kPT|o9D(KjI4>yfQAsS0W)oCpDYHwmu zGiU#1w8ZBwdvSjM7@u|=2@mGKuh*|h+KAI+r)rp9)3>)G4LML*ST!f z3H~uW4{lv@W~>k2zv2r&^xpQiv=k_3J>4j>vni3FRxLL!IdHjO+lK-=phOfDNZiu> zSNXLAtnO-D1PygG*2xesldj8neI%cUc!-G?M@gj@Tq-?Zh6_G?nu)4NFB%@l!<2g5 z1ejn1A0fepgJ=%l>DPARmhP#ltPU<+J-(GDe9(Mr|1d3O<&>LnS2%yCDghfC zJ9?(dLof`yor0hpM@<=29Jt(PDg)6_8PLCy13azqD+ZvzEOOw_#Ur~Gh{1Ta;e#V0 z9ZNu&oB$C5mqEA)0ZY?b6i>xsGf?RjA?V;k8xewK_!A0B3Ysj7z^7;fEkdKsB6Pzd zU=5y&GzkaL??98#^I=Vb`w~n-or01clYr_#YLjrlZW4OaZ4xGmyreP-g?4GMn*?Jf z43p4lnFRO@LmKKWo4_aE18qW+%_j8FCcw#DoJ}~+DM+*ly&uvhOu7V{0F_OfO(+=5 zCLFihgub-egvo>0gkrlC*lmI_1BOlLve|_EvOldsh=a<*R{WVrii9!_6ot4@K?Mo% z;eiSbIH=I8A_DRl(SQmBj2J+a^0lwQ((wNIu?%MFwesR(Ys?9s{3HQ1zcwyv(h}tO7qODG*4xvAEvlFc>OEg`7>U29wdd1t}Gc< z*NRu7SC(9H3cvQhuM+Jkx#vY*>n$0LfA?o&^RNq>M`eZ2&B&)$;%#cKz_gp|BOQqL z^v}g-W3wE`qaFQ=T+x>P<%Q9P{#C`Y6ch4iwN{eer`9sU@>M;F`LnF{nc>GuT82;L zqLjTn@xI|2v7}qw7&c%o4eNtJH^XTfP7=$h)oDnic>_|0J}g4_-jztDc>`^GG|ZGn zIn8Jf6J|6tTqk-)F2pAyU2J|O*WOc3l#MRqdUoiNSu`(?!e!*ihCju<%r{g9jTUk* zF^Ff4hL;|=iZ>YvG%({uJm$~rc_i1i^J<2pWm~-I*vaN}x4ei9nhoK|TOw6O4!m<$ z&&%|@=xUQMx54zjps9PRGH<+Ntl&~fH18NKNGx|O10%yG2&B<6wB?w2k@o-uQ)mv{ z!InTlAI*Vz86Y~~sByR)FKwz!T3JFi9;-|t8!Fljf6Z$cGUl)$3X|MiIkiE}z6y{d zO)F8|WMd;nj?KQjQ&kT^!yicHl6lOUW%iLe%gC^oGW&dAl*1ddZzaxTm70F>@iO~- zyUJiaXHa>28D3^z`F!>!vu`VzOm$i7RAS)QqgK*cdJrS%@XbrjjE8Rzx$* zpc&{MRO?&%4~W*QxZ@(#9!W9jRuQvI{D)P0BTliVKDpYr^yAg#^r(GH|NfZT=V9u5 z|3YeyfjLp8+SA4xYHtKUWbMVMJ+fk|c~iXJFL3q@s`m~3_}h}ydqzkXtM|R8+#|M6 zhu*7*%9{KXdf(8GccRmy_YM8WEWIzl04>9Z%p-5Uea)5pBL&B5DzyXn_?x1rlMwYGV3n-jMjxXpL-e&x40xZ$#GdTY6A zo0qnEXq$76X(;R3>caa*O+t^riR`QU-mw zkWABI*kZ&q%CvF=!jCk|w2@v**J+jMi?`fq%d>xC=Gn+lhbz^#-Ze>hls(Ab(}>T% zSDz}zw{!BL-0HU+AD}Y8Z{=1;D)DSS+2?YDJ;~SKcX+xVz1aCaxZs|z}P zZzcJ*F1o5@)a0Ycy;qf7@eqDnN6vd8damT2OrGm4`2tt=xt}ZhJj|7S9+j1SGTgG* zD%RGP)mAr0u)YsgvzFyncXPQ_{Oz+5NZKQZn6xiKzJ5;f^|{E`&oEzqm-+e$=IiJ1 zyxZ@2AHR5!nQ!D&B56N|3=KKeIppkk>9v86yIaTFUKfydvM4K_U%limLxme&J900U z0lkJ_^!H|PzkBSIij4gGD#qtx6~4MLktqe8sB^aQQu}Bi+RRIS&uKjU!g6rt|xd&ht$B72GzDoKlfz2}U-V*K5B_>Ccu(rZ6-bHxo* zzIoHhYh*dbrYGBb$D&)$eHA%3aV5jCkty>#kw~|(QRiqhdYhL31vN-?bl`GgYyy;= zTRh#;2adb0;MrCH$+{{UMVc><$lpV14_YEXg64N2I^gnzKJ9t;a{{D+W3*hu8)N~= z9w5oN{l1E<8)X^8DW#o=b_7Vr=txz_(auXif+zyrZsL%Q0FpHUb{8afPvx0TfpQX1 z#*Y=eiYW*!1ekCo>rSNd3d>se^Ma*`SXvD%O;5J>0ZZ0x_f=%L1k3E=PP`%@Sh@sD z2QLX%APWjh1F&S^k3SRKatE<=2$mLL$pGK+)c!p@Ef;QNz?LAv- z9F&w*Ncp+n4Iml$nBkk0q|9E?iD$He1d?*5e>X1)Qw&MLxb+{y$y=EEi=^NTBn8{% zk&uY1W0Hag=j0n9$^0lu!Tj)>ZB+Al4|u|LJFCeO^m;p{_(mltvt6BdYd~bSO9X|N zfCRH6ax#b0gL4z$2BZ(1!0cdq5;$@$w+RZ$03c-taG?F22yMu8XwL@0(MTK+SdkO# z_5w)OZJ1yv50<-}ou}jkS2~rP@DhNa3V>c^&D;h6q3&RAP#z!#%ni0JK$3NhO-|5) z@=K0TcSK^fweFV%NCSbG0$crLdk=t&_h5FFkW9(97@`EWgO|vWJ`+b1aAf3x?PpLf zAOL6%wyl6+iU^*i3m-D@UUCCO1eu{>Q|6*Pki@1eN0ETQ2Dd5i_8<7LHU$NP{~0#r zT~rW;!KS?1zn^@x+mzn_S2o4K60<3EOGGy`o3aX(gn>3?5y}Y^x4~`7iT>js+NPkk z@IS$(oajF)x|CjfQhQ@C2T3+Z4t^ z6^L5Qpv1=~F+0N1>dml(2lj}>j7DNcgXIOE6@YM!wpj2HA9uuJ4$8b4ZgAfoYFJT5 z%o_0Zxd18-1k-X2x3Q=q5*Ja#f{8e#=Yc(ju)+r+Lm~&hCl^GupS`!jRokP5NL-{4 z3li9^rOZ6IfF6TW#V9~<2t)(e#&k9k7XrjomAzV?p9glQZ<0aZqI^9V^|uS40j>I`*%MY_lQ(w4$0r$)2X~VA)c+JU($%joPGXDZ9kv04(;Tm?8 zz;qj7?{KL^-f*kL#9>v5fd0ChE9uBrVlTT{0vO~=u|Yl(3*5bYs&no08Zr&f`&?-f z;cn}Q7kt{x?BQ0q={du#aiMX;u5kYG!>w=A^M_g8LX(DB+h!IFud?|k53jCOEUFCL zeagA!9oF3Jinl(M;sq*x$FPoHYNEhq`&g4Dw$vYNe)kurSk;^84phv=dUDI$GtyL# zd||Nl?FO#*=6vQSKtFKJH|LsXaUSc<&B3cUTo*1Y@JT5|j*=Rr-i|f!W&|n<@lol( zb?}1vikhPG7rBaeQTc{-_z9J-J19T)weUja8{2UbgUnWo+%3t$OH{??@^YEDrk0mm zkr}|Bekv+2dl9FK%3ooXqNsf1EBw({<`wDfzyD{Wagp8;@N5m}5915i(Lw!wd<6S& zUa;cPf?&nGaY3vv=HmKdc|olIlpiR^pQJng(Yp&%uM_9I!7&&=0sXkK9^W(5@nIv5 zbGIAo^Z9X%_4ziKzFZKad^3%5Opa zK37nGATOwYB|oS?RuEfXCm;*J{VNuL3wU~h`pqG|IjFZ6Id>F=cYZvi_k=vnMd4ke zLZ03rR)7n7+C#bBxRepnns5%6Mx#YYdnc%O2eDcj8U#IkXmDjvKT?#7KTx)7d`LSH z^c*k3()qF&S7t~%hHtAOVJAa+moZWiZugwzNJW6bh1o)$u0SpZ;82Y?$)V6BsJ&C9 z_i-pT@DK}zstH;{g**p}v>hQ?$820k+mE3j#VsMd(-Ml4^v)}b^x7Cz0nY(U6s8Lcnq?LV1M@<9YtUj~ zK<^HjRP~Xnyr8GENKqBk8Uo}L#e!4?6a(2n%~g@UB}P?|XE!Da(}khN6$u0LL;A^} z#lVo>7gAyoRCARd^mK%jSOm2uoK!=d6bTdtqCrqGFrXi{Q*|5@h3QgMQ34A>dP~qI zfxRIm7DXPRsvzj;DpFz*)ar3k4b>u4i3Fknl!gop=wUlmn=w(CE=3jRs&Fv1dfZ)@ zM!gCQu2+FH>ebZ2^=fJw^$H6!45n8z(x_L(gX>js8ue=a;CeMbje1o&xL%c}QLk1E zu2(D4qF3hn070y#0#}0fy+is5sN$F+ZBs};TNK`XOUQGoD12&6QSHu59;Q%$ z7z@ZpmxXcH(ByFiF*1e_t(LhSrWk@43&}@t#4tPvDlW`N1kr#fu?N{`X!Wqf9)yT+ z0IMBX5Qiv^nZ(GTC8cppSI|O?Q^`hf3@ z!lcyZF+E`tF&2}L0Sn_0&7+GLLEd2IF+K4WG0rC+r&<_?D35u>D1ljO^O&B%j2KJF z#~B93A)Cj1Vw}&2F12|~PeezIE6B%U3*!*YV*xRi4sIUP6AA{ggdEujhFpwwq*(#P z6$~L$o5%EokY%gJpg!|QSw~J)QxH2E1<3%uNYqe2(NI5OZBj%1L__^VL;Xa1tRQgr zt5R+Wl#dCNqggqcVKKR2IhvKDSvi`OKURS9pe!u+s?=mY%;$&JJCQg2N8SOh8Mkw8 zTQ1j;OFaI}-Jw%lTkiEE<*T{AT;g%TYk@AVDR)iHsNZp&xy0iiKXA=|a_zZss}~*S z`g4iLQ$}h(=bCeGl$83p4qf8$^S^!Tey&Z|`0Dw6T%RuSxTO5aPOeG!n}7J&-CUU+nl7u36Xg$p;F!j$PvMYx|zpxwhThmtOuh*SAYN zUOw`#9^smHYu@_T#a!nu@wl$f`zNk__u7M3t>OB2iO0V_KJPTwyvx4*)lYLByu{t=H7_>DX()KzQp4n{9|_w*XGNACI#&!G>kN>IlZ;x|r zzYT#OH*kHw#N#<%-5TYZe%t@X+r)ML5|5WQ&G|Oh{`>jH-|px7e~HH*{I+c-*ZeE~ z%*XHLI)I7COMcz{Q?3no>dwcn<@$h$$9dP!$>o}WEq{9E7}p6*JpSm)O~2*Zfq(Vj zk|wSnn0Wlstea2n`rN0sjj5`xB_6L`m63bq+eh;L-o3f- z$zN}~J@NSUH@1HC@;Clva`1}mmm=Tz#J!2fznk*8?QhgYgSR|2_k))vJpD-G@u}YZ zcm29#`(q!Uao-o8zs9#P@!0&kMu~st$UMgShj-j|`(Jwf!(`=p2j4cY$Qe?(-Z|k_ zd7;)h;dM8k%gBmqm1^gCca7Tlp}St~yyWJCAHJD>fhs@WKVMn$i7ox=dvLr)eh-#f z<6G$Jv+zjON=G$cMbD2^J>l4ny?KR^ss)a{*jqd`QZ>tQ1bg2qj#NG3Xu{r8rID&> zj@IbPI)52IFzt#yQ5RYlsq#Adq6_M#S4L;m&8&~E#2=iDK2qm*U=Q!LN2k?=T-e3K zqi9jx^g`_7o%X1=Ze}rdeQ@~r#+)sY2J}h0VpLV76(W`9*7)_}0;{8BY-G+8&dN+x z5!n=(GtGH4Go&}5LObgFffdzT3iwdM(-;ZgxwK{sT4kWX8VRqgs}AMX<5Cds$>4zn zo7Rp&J63ih-aFgEcy__sH%sEV=f6LHMfGuwrCIGwUaeAVR!kf(uX4iO3Jufbf@<4+2nAYPox!~+eqAP8`F zdKsQ-uqqA^s41g)NZY3h-Q$b2Z6WOdtFBrn7?k6V%vsYpn=bM>9o#Ys7 zz=MvEr#{98RAeLJC+fBba~p6eh8@rc9Z1K}z@;Asb|h=b6>+#qmfLTDP!4L>Ev@xOwPeN>rI0Qzt7is$pM)0W$8Bsers2vVy2iR$i93#3y zxp@B8B7g#rhyqvyv=Bzjs+*1nW|$3AB3MS&qUymG7*ScIZRS%JLn88N6e2MT@r3i> z5G=$abxo#)z}uxmGZ9CUn~1%ZiFl;0{*p}u0MSGQY$oE7y6KJ~n}~pJgM8>e?^aMgS0P#C)5LpjW*J8&OQNusLQU9&sKS zf{pOj^~G#N>CkM%vE(*lzhxu5b={Y2BLIjtVuj5{c-2=K3X zp&UjYk5^ETk}yIA5ID!s!L$hyH5la>Iu!_pP*2^@^&YFhIF$)vMvDsem>oJv7}@ zz2YIbI3YM&aj)b6UQaL;i_X_@yL=_V^0>;^s<%I2h^)i{qztd=uP@S{Uh z57jGbX@XU`O4Tb~I3<}lJIuXF_ImsgujPouojR;OQHZDx09^2+x?%V2C_Vp&{O z?|r7F#(Ir>ldfv4@*1d-OXr!nG}eKu#K>4Y-OQ!)%v?H8<$l)FALu)f&hburF3@U~7wgs@i~jp3NBRnCxT3qu6H_9fW;wCcNKb zA7h}T?6cP%cn5{gDn5{XDn0`HIu!d@d|*)mp^_j3`)cuyky(OJ>_gb3*k@EC$UZZI zGTGOp08;prcS>L%t0_{OkeUSw6ap_*g#s6;y0H?4fFlU1uBuV6EJ5~3jY6p|gD{hQ zs#IaH&n|r`EK9<^_=<(#1N*F!g<>DdVqIWgr^&u!MkzzYhtjtP>@y1&Ci@KCHR>0N zeX4$;*oP_xhck7TDM|wSK&+~0polshQqm*vQq?uc7iIa3!UkI>SUwgr6#ES6i?@6# zIu!PODAQ*ZI^s-Umtr4lpVGJPagnLgG>QkXug8Y1iy+h>$R zZ0s{_A1V&QzLd6)0jt42yYyY8?X$`waklS0lYOv#QZ}({U)_*xA46YLc`s!9NUXAb ztg586eMSw%U>|IsQACMjpR#?ZQyA<^Vfz?E8_N43Y@bzBiL-rY6#K;Xq1a-xefx%N z`xuRz?4u%Cu7kzc1m$IwNZCHtVp7^Zqw*r`6WeE$UTo|$Z6C`mgW5iZ^#=Rw(sz-z z&nm^l*}nHp_Ca~2L}S^${X@2WOb|@vwXshn3kmE4v4-tq1t+ELi`8r1$4eUq7nuPI z|5U(dFl|7|hE4GO2p{jT3FA4dXv1rWlK4PJRc+XUQJZPCRIJ9c4AWGAX2xb_RHgzl z>D&I;#^^it+{Wme#T#D3;~_qx;aNsm1IjmSW7KchhPYJ>g#r$*0XHAOs0t2S05?lG zyoSCRCGjl!9$3U-o6#y1VjK0i$#~4dYjMw6*n;s63OT%nzNzOt%kXAEDTi%T zD+ZKx*amXKhaGIAiE+>07x>Qk)+7Hi|ydce>@lc=d!n-5#)#qCd ztgYF5MPM6_r5`2R#pN-z#$uCFw4R+G6M=y{4K|$1&zEFnE z{V!ni@H&*34j+&b)1$B8#5^u}xR^^Gev3;UKGlw;5r0H7BGs!3>`Nb3t#VXZOCMG( zcWg74K8#c?a_osz&n&>3p(7$ya~+2x)zb^`&NvQcIvOL@p#uED2OLayoQzca3-BS( zi0CSLKPBYoj4qe=Q~ZwJ=pw$KGMDeCtm6AAGx>hXD!g^#icaVIDXZ`nL18q+_fuBk z{gh&^VOAFP^CcCw4`E$JY0Y<3q%GuJwS<8-UP|G5k8)pR&T_n+62yvdd{+f&SLEKl z_T~wZIn(i;3irD|@6< zoW_&rNcavEtRmh|wpB&u^tIQ23YY#02A>`5858l|(-!9W_M5nE9{H@|+1_(Ky67(SJv!ii1`Lu?SZtAS1+KHzy}VUqh*igC34F^|kkY z1cQ1WzzTjGweuEUI24)E+=*vSSmLj*y%X5)K&eXZU^`%E5-08M?Q3rW>YQ8PN)(AW z({&SRZUtT}#kdM@zew=(9uqjv88p5NaT55>?=k^D%sGrHx_D;O)Be*(%YkA#vlc!lX0vEG48&83v5$Liez!}+jiu0X<@gy*g zA3K1jh{M3s8XHfu?nL|rp0`sKF`o7TcGhhVVC6kKPiNP6 z;vFHu-WAW&3}k2EDPn)}9_Si?IwKEmPLYT+9fG$7crzT(fa&WLPnp$`ry2OPrb&bt zZ;Q;uYcm1NdZ8e!CqfFUA1}~wzZ>W>@*zwz;}F!@-JN(vLx53G7uD@mOl1>cYMh_~ zO#P>D3AIb4qA@|mc?c@D&Ep}1S0`a=513kOF%fh-Phg+{mQu=G9|KL3hL~2ohS~9lEpEV?SP&6o-lO|MFA%#AjVWA;tYfU+mpbH zr66fcOr}y$(fCdTn94Fl=FG$^I00yXu^?ujj7cBMliJ#Or2YI zFaSxNFOacD6_pE2-4kPK4`7e?K&av*b;>IiQ>kT^_OqQZ)zE(6Y69wvJQz+zBF;ej zv26ujNa|eHy_nuW`?2l-n3_=l<0?#5_Lv4VlFY6y$J;%Gd?C9!v#!as0qM7^do9k! z>}nS{I}`8!B(bY|V>Te2c9kT86LEHRCQD)lX9wEV5MB>TVpkX8MIp}4h3x9|I=s22 zd{z4GYMqUzrd@pxJe`hLiIUjWx)@K>X;(=icp7I{r=w10nt&vB)sI(=lGxR`c?REsiC^|WOj95%mk#BF?Td{xX@G#ICNwYfDM& z>P)=A#QC|9UG>+&vn!^i->&YrG1auI?}MrSy6$9lb$^Vh>9ngP5loGU($%>hmb8F={Qt)ACr<3eMW>YFwmh3r{g>EGET)JrK2`Pgr%sHqs(KhheNp zGa=i;5U6foUvyqvu%sg9CfeV@evC7Le?wk=oZR!x&Kwsj=x?TmWN>TF`SW zV8MZ1r%Xw+g(-ZMVAypA9}5h-!UVAnK`gr(9&PbqnS|k173A}%N>f^x&^i3*py`JdFnWi^(h~0j;-g(!u%*PWL(cvR@Y41lAf)9 zR^xme3|~h`6&tyV@$a*+|Cdg>BHCkL}dwu$l29HpLsTnZFU6(k8 zKNf|0_$WJPQLl<9_QK*CO8~jK4%F8a;>`zwDI6E7q{Oi z6D zVRPg?Y-Vp|>uvL#PZySg~EuOjs+ajc*YL4jDhJz8w1P^3(RS@*&|?@31%M}EuON2U=Fa8C)vsDgX}(vP5(OE6JZS3Spb~3w?-B)ANf4~C6X(^$M7+}b$BLp{_qENCOV2UdV zhCM6}9AwKFm=Dm#0E2N2nc2@abpi(LqSO-1L4tXQojl1-E?I!dVMBnA#)Gj5@KFm) zasfU{FiL>g$t4SLJ;5jeu8#*}6JUsk!I|U&%uWmeW+#^{!0iO11o*9ZFg5{x%L0>J zfZrk*CBW?DQU!P%u_*a%j>lq?UnsG`nB?-?Oe{)%*~ul#Z#Kaw`8^d6#wNd~EHKIC z_Y}b>`DG`UEWa*-Q3jY>n=;wt7q)g#1I(#5aXvi#-~jFMlm0WrnB?;N z9>FLB%uX&@ehUdk$!~W&XKeD@ZGlNHzug3*aXs{GEFN-#=*X(DaYWE0>IEHKFh z_ydAzLtGFjLm!KuWKS2AVy|;t;PYsBJeesjCM=4w4bTU;qv-R>5}RVPALqWvUg8Wf zPJZe0#Pkj@O??5LANIXu#yVR1Dja2E2k`_v0v#kh0$bpaejDM0vxKsOkOJ)yO)S}W z!#rpIR=9}5QsPQ3&nBdJOWeAXIF4fgc(Ib=SJ>qy98Jw81}c3C{i4D^f+dzX4vv?c zB!({DfFMF)*aHmUF)$FIjW>oEn;7B+xOE>f9Kfh>UL}R%9-}y#;UWg=dI{%1VW88J z5aM_r8n@yI0R%80c2F3O00Vdm43uFT219yH4DoW?`X(`)#i$MFHXxA{V!gKFd}5%B zDq*~!Ff{Ox&iQyR8q*9RZU6>`NHQ0&?oVSnfq|lH!(a%li6LHGTTc)J{VmNIi#qI!kDm5iZ~cNRq-(2@IG|U`UixG()gpVu&}htx;lN z#8$G(fw4s}+u5-Ucm}5eQwfLSNp5(ZZ6X5_)mCyi7)_B@l8vjx2sxJFD7ePp;1k-u zFM^Antk^bQASnTmMGfkRXBjG@KkFc@`lWS9(ysx>k-0upMB+#EmhevDknwpK)Hikcy0g&a91Wa~I` zQX$Lc(CHMi;;9@uCS|X1=%i96RHs$SiaB&l$|^Z@QYp(%yOfo3=$Mq%aOk8`R+x4v zE91~HDXZtu$)pT3lWsA4fkVf{terzA6|>^Bi`hC3ZHZYnM@}kbr5rh}QuYc*j!Bse zom9%oICNTV870~#WiC>kRLWl9&}p@0H5@u7W%(RBsg$kb&}lVhlxUlj6>{jLQuYdm zPOC9%=g^jvO`Xc2lZsg-hfb%MIXH4m%8EI1QYow9$Z3_bYz`f>Wu+WCsg%`o=(I|i zi$lkxtc*h^m9lmYogOJ;bmoHdmFO&=0K}rf>$jnp$MXPT${Vh3gX2BI*bz~yN*)-e z01n$ALUTUt;88nnlgJRk8E#;>w4sp4XbeD1>BH4s?3YOm zLRXbR7(mztfh5w0Y>s0O6LE)xQ)VQGunjE+O(CWdiAW*>&o)%?7@Pr#DUG#oM?cR)I_i<){QoFaf^}B|OGzKw=6f zuCiKsgb5C#J;^2vBy7`$Fzo3W`5fm+JQ9hv%s3B09a;>UPEaS5oC1DZVGTA_L}JS7 z|Hs~&fJaem@59-E0D%b-G)RyEf(BU(4rmaR8A!+kCK5yz1!V-qD3F8z3SK2)6T{qS z+^)OEeb;zZ+;xUzSOg?2VGGExCj>~?7h(9`w|cr~pNmZV{qcS`&vUway1VMssqleNmi^sD0JexF2@{C$l zjAD*W!YLfnS~2&k_^rYp1Zy$Tm_gR{IcgGfY!WiXL}MMLmK{~$0D`rcXf%>_y$+j- zS>ejCiM@v6mbn5^p+Wj3;Q4$ie??Gt4sWL>W)t0QX# zWn#9~H_XgrU7s)`tXxoLq|iQ5R!+|KiZa34iLxBB_K7kZS=TGdh-ep-<&(8fl+}@S zy`n6Uteq$;B5QAyfor`2j9_*FSTVWE18iqM2CnsqEitp^03S8?IQiQJyq{_+F8&cp}uV~6AS0|cmp_*I6Me0q{;-in2iU?8p|26!@*Van}?V6o(3~gba))_}D z1<;}{+Wwp#5)vSgw#-)`?MjBnevjz+qpDe{W*qK^MrK_HdRUD^9-QlO2xJ&{2&%}2 zhd+rQ_$MR0B4;&2P;yr1;nLg&I>WK1ooBqP^jof;qNBj5`Y0gVnpc_8yu2rx*Ewp& z81CYY2dMU>kV@X3ktm{V@w0}Hrr;-HZuxi@ygTf=1Nbp=6qoE{?DYAtDGzFcCK;Ea zzbjYWw9*oyN?KNtBCb+!iC#4+1T13pd8(x444nWEhT!Dk>GG|7ipk$>#>nD5-}U5FHZ+?l{Syf< z#6OXgmCo!C7Rvu3DJy-TLrYwZ*7Bjg%zAp<;xgS#{0m9h&Y20HIf+%8x1YsI*Of=X zNnd1bVaJYF4~$zwP8$?XqgImB5f@G?@#Z0g22L%uV=JEWRJB)O>G$z+JC*o2`61=JN8!VoqH6V zT5q@GP6i)h0q@G=Y2JQ{&=Yb5|8{ALn zFTggV$a=VT1ujMv`-Mji;epp8*)d55go#|RK~z}R=zS7!~|X& zg=ODlv%yp@h#(fgWL-P!4)*(s-LUSc5oW`>xpoJb=*#`Wp_p*MYsN$}kt_yNxqyK% z0F(9YtefrVpA?f}-CQFqhV^vqVlc_D`RyA@sDHesg=-)i3#K9yN6$dbgGqTi>uI~$ z#adWT*H~#R=zfIA%11*No`cjww5X*$*P0!A*JqH)+BRjDwAy1Ar+HMk@E4?hp>-{- zxV~K0xsmyA5cwayNTmZd!cCC6gZ8yF-WfJo-#KJZAs8IFNQDat;2lW4K<8T8>``^H zuJg%YyiTuI%&*|CGzO}wo94)K3m<)nau`$D! zj@7b`OUNKN9UFb=I8oNInGAx{aSj=H>R2o5xSR}v({Vl-!0~g{u`xqdvW*OaQ*sd* zU&PHDB^Q$c9Dlcloa0b(H1iKm$0f`k?!H?)&X;v87zC$dz{Fd}MY4|7 z!Rxr33_NvQEbBNicpU>K-a0Okb*v3u$8}`jsbjO;kTZf-atQPH)G-HY!ZsV3e{edE zCIioQY?F1ILk7XMV>KCg>bOqUaXuMbWIKjYR?9{?(aj@kQF#^*Fvu3;e5oC`knFMb zOkN1}FNX54`D@z2RAWpooH07^c<4H?_jJp&Zf;rY%0K9c6+__|=1UE_H9P|PaAy!x zO(4je)(TEXB#(>^JRZ6Z<2-${3^(7bedQT?Vp{D+d@b%$IP`nBD?hx-*D*CP-vX<$@CoJsmVUZg}WAuvc6)hY8R3 z1qhpOKxi|9K}3-+MAZ2~gfSRI6#GC#tRFz+1Otc?Ux0}A1Bm=!0Acn82)c5<08tbS zAj*9KBGC^Zih}`!%@-iFegIJt3?S-!00Lud-(7?`2t-8s0)){IAj*RQM6@qJ(0(js!d&Z;w$+?bD+urj;uecWT}+;zqrv*nH$NCcKJ{1GRHKH|ivN1V3d z^S%bdx>_^l?eR@lH{q0Zx&5TIbLB>B`^xQLa)q^ZiV=7u?+WW92zA7P;RA?q#K93hkf#wL1Pt_8yj=+*aSd*4iQ95;BjO(Zs!$L) ze!)-t2UiHy-L4z18=)KdpH>RR!sb{ObWD5(jz&aVcFyFgp*e`Q>^$RJtQD%oLa}n3 zBi0I4^JihV@$n%cYxYZ#9SOLlSu0i!#g)Nywa0>?dkm&5uLVO78cYv)Ef{*-V4CH% zVCXr6X`t40t6o_}6g$a@MMyJDw~kV7#yA!sHJWbCRBpyP79q_s-8w_L8OKFPt@i9j zddJ$MxE`Wr@$(U6iytGkIE*#o@P0nRXRNcb(~UK)Jfde1LXwPUk1>7(@gOnr>Db~8 ze)7yLH6tV$-SHS!CY>yJ=Wv7Yr=4`udIKkkj>WPHNS~+Ab$w`phx$Nx3(B#wY(R?+S&UslIdEb* zR)$(zjY9wk%7IH!j>-0oD96zT)@|DlTenqKp&Ujtw&p@FG@w;d70ZE6$x)7J@#QE7 zKIkd+QEokGudr@I=m#z~mi2EHQf=KEnafgQ(*@AN5#B!8}TAPhS z$P3DWOHq#L_SGoIkp|X1+v}`*Di5F>nKtaZW?xk{pjlEK%Yje5j&j@{zaHg4WQbCZ z_15F|Rn|QS6~e{pvi{9N4qNxs{4UDDD3+`#kf(Ep5kL>iffLKIK2(O%kh#p`kkPSr^6FR7RLGCDB-+MN|#Su~op7 zAu}ikPAtb(CroiE%Ha#9TK_P$p&YI-wFQ7Fw2N|J14qD=0W~NGPAmt|FT)gDZY549J>Wf8E%7e;KXw5cES{wq8vV8Ix*irOsh~1SD01>fGGlY zP>w1AQ-tBL95}HYXoZd*aVjoFIefr$YO#Nu9zZ!r z9B|?km!cd#a5~KFAE$LFhbvC&0^k&`70OX3aLPy?lmjQ01HFOVo#IlI!v{`B+x+A7 z7|P*_(_;Z}iclbwiap&{4k@yrL|M-=zMhJvXw_dyoG2b1)0PoZVl>(Jr@yqgS;^!r^(07!Tp5Y z*LA9q?7psT?OyQBu@P(D7Cm1;(Au_kd@)$c2AydX{1JI%gwH&>w)Wjlo33kHBiVFa zt6I1z+0n$2x3Ml3@Uph5ooEIN*;X@&f-RzoEGodFmHnX8TT{SV{ zZHUbRI@V^jQ*GcO+hL|ra6`n9#|H3dhUhEB6ziJRNTyiV4Ik{FEG?DpWn@`{u(H-} zwJpIywy{j2Ab}tt3w-3$b+fN^nps`9nl&`D$o;Vp1qw#Mtqwu0?4tJ6(!oLv!p|cB z)ZifiuwQ!JP50#Cs&=0mpPG;CF(MRdKUhn@iM0p+joQ{Cf1z!BnY=h{4=YCg7#<3p zAFri9#F~R&MpYY;zfg4*G)Pw7}zZx>|muH9k9vU*3Ek$sTrRU?0Q^^P{n>NVPs ze~{|cB7b-Fj0AQLY-<2d7+PKC<^vu3Ay97WsDkNktvE+YLrwQJ0mwL7sG`3I-oSY+?6-OOTHy;IG| zK1lVdk-xiobIh`OhuM&Skm}VUe|Porqm0xyw?XznYS)PD-L)I5C|8Z_gH!IXd}Qz5 zbd737xmx5OoN`AOBYzL=Y8CAok$-U79dAbd9@;g^+ReyE{uifRT3@x?Jx>(+bWFAE z!GFngsvT7fL%J8)L%Vxw9fo&S-mrY3d1(wSEU&eq5@wT57tJyfxlFitI$jzo*5P*@ ztUL_ci=di42xk^rK3MCpzq9g27Yhg|Y!K{RQ3>lwmy5m_61mK$c=}$$)Ksv;`8r-% z2OFGegIl!$e4y>)wGKNxD{s76KtbVCK|Zje^t*%>><)MB#_aU=EuzN)%R7dxVei_oZOn1nBm<)o4j^@2f1pD1Aca-vmc^XK}445K#+)IL$54h96H^Swc! z^$h~>xp)waFZM=((KiaT!JuHG*$V}u@_nPg7z_%g+PqL;EcOWl*6_u{prscIGR;0w zzzXJcx{S6zX%W<3Fvzj_gaIo!2pDL+U=ZyS1+3pc-xtt1z!xEDmIlLDPyY|KDY<{6 z=%5AZ|ItBn_y0zt7Nwy%B3^@a05N*?bO6Vr_N1YCCLOfk96$_TJsrS_Mxk5Iz|cVp z&H=>m)yo0Q7fOX6fO&_DbpU1cCLntc@4i@8FQy%WR<9cQyQ_DUSynHm9fDS`7WsSl z_cmF*U66f{+BG73clSO)QLY-<2d7+&UcHp7R+Otn{uk%n%gV**)l0itMY~4iA6(h9D>zs8|3VwSXrrnyQehoz7VWA<7 z8a9Y%+N5!$s(G_0&)>YqXMBgxhUs-Z)RU)An)X1qag(ygPgGCKy(eqxgzVhOY8=!v zl5QA#L(i`20k_?ear=-|UHUNfxS8s{_vGZ{W^1!^?#r4wbyD~2-1~0{QMF@eQOKX$ zPdr!ey_fjZp4cp0Y~akL@USFaTEUA&$T_XxgJPWYg<^p{dBg7*-1@)R@OxU0{| zLs|cSPJY##WV9piI#A8+D%}^sX^whevyqw)o6(GN_j*Y$DBgs+NH6%nCQc<);`D7D zPN*|BU(Y(LUTQyozMeM`_ZPp{tdT+4|NF@V=ld##P}4_qt08;YKvsSd1`tV?$nHO|je~ zjj)PgCifb}BB|ICuql>9Skp|@~9KXLE<45;V5KXQCz)6yC3lj&{CrU=KxS1qcLiU0Sivq*MV|mC{EA zcq4$QbRvLTD%-gbra-_!{^HucS(#Bh>cnx7I1Y>QtN>BKHSP$&I(Uu>C_x7H11z!_A~B%z&2I@IwD5}uotptEsSfIz@*^2bWAjtXEe;#~pW2w+V*5wMOTbFEZ?0PaUDmh#TZ zj79EQI&mB%j>BR-D*(F_IS|11DIow&)=>fMqPQxyX9Z~8Dqx8$A6u|g0fbH^H)a-1 z0G*0d0qkeo5m3nr5ava6g6u`SE5N%CK$W^w0N3DUS0z;dH-)yZrs$b*JnF=8kT?#D z^Q-`|V;GvID+17D9TiZA41_iEK!8z*CL=&yO$6@iF@(1CF-RzP5HAcGa~H}(dSLXV!(EK3au4&ORQiEhM)hzR^#8iq3ecu`bp4y&&@YC@@08-93KDn?ql>)k393&huAk_P|1C)J}=skp-$ z#x6UkPucNtIRC=42G=~O8tBGex*q7Bj?zj65u+a}NDTkrq&s}y|1<+46$-3vkAEyp`U*uXxl{lmb&gVg>{NlziV4^nJk~JEw$5O~e&CHD5^0Cj+-itw*Ga8u@RV zRRL1XM5-1Q>IbPsUX^MSnn6`d3Uf67i$bdGpgE9=&QcnsLDfL&G5mDzho_UbXfgt+ zK)i%hj~=s)j%qCO7}#n+6}2oWuyWg4y694 z86^d&yQxns*y+q`1~O?(W_GH z5vhKC)eKhZ-`7{oAyVu7BUS5Fsr86dzrL!Gm0Atf?tax|l*VPKDh(3Rr(RNDRDsld zR4UNu52zVlby|-=_3NwVuuh?Ak2;-hbgR=#*;hTkTs8mo{pZg+B7(c!HWVLjRoQ*8 z2eR81$S0)$;7DupqZ{-qP4Jqc;Z@3z1=G6vVVYUrdzvE!X zPP^HS_)E+|EN22We{!2$`&y>b@~4 z%M*cYc?@LB6M<}bB9JXF4;snq1HpP79vKqCSmLzJJ{K0u-Q-+Y@UL1`aDoz-DbH{F zi%+cY{gXwoq30ILSZ451R7!vtME^S|M@Ndt!dds{V-M2%i&5>fvZ3Qy*^DQg)rf~7 zj3=BmlJSJI#!{W*cJpu$A$8*{JRmkDyX}J`fI9@)iS4`3;c61MEuXX>hsoSZeDWC_ za(0Uimk)~L32{8%rY3BHbARPf=l;rRp8G2gRfBI*NU3vwWp1r}hqSe_Dmx{gaR@a) zbs1W9E#l}HLzq20U!+>WmM->Io)n*ftzTChKzVA>TVhjrVC~WP9Nxr)Z;pjien^hH zSgDYA@!=(BadYW?+?|Gd+j+-PY}HMw-y@K4 z7hcU~c+5?zEfIM45Z`eKfxJub%4*&^$&3(TBNe;^1+;To)4ooXw2HeuqmCpdm`J}# zwLOBjxV!Qy%-pk@=s1DXCc&waoS35vCo^8bezXow#EGaPGdW2LL1qW|g3Jl=SvRS+ zIypgu5~ri&v{`W4L{4YjIhBLcDuolwvBZfAx35Dg`xE21 zs3=Kpu|{|Oi1$V3An&hz!mAx+r{_=uuv&fGvmY+pyLC(;x@T!;ZpWV6;FGgDgwLeD z2R}Cs$4$2$6+3MIhIxD*>d(RXCGoiQXtBtHqmP+83bO?f<4Q=Shgq~LX7^L)RA9Q-WbOZN)I056{D3OJjtBy&&TD|t?=$P zT!&q^w?&GZ#rT=6=4G~-&v6@@aRWr$pqqDX{B3mIm;0NOf62bwe*7cP{kKj3=lgGW zblHFV|K@)=u2JKE-yVU-E&nSAehewbVWb&{u{Ip80cERkcvy==o)L>__c~)hP(`fg z|8U6uC$<=^#jc$*v+(c2GqbST;?NG);yANIc&K&FIP6(HGz42+>2lXM#Gco=$F9Wo zPFx;jD0j`8lDodC)l!Rnr17Mcbq)Sg13yoT2d$L{jj+i0b}aVNx^kQJG?eQLi)2%{ zM9%5jQY=!A&9FjiPa_YJZ+SE3S=SQ3tE`(VcUfmk*_K}}XIt0A+N1U?mKqnC@~$=1 zehze=a%4vEsEeRD4@L-i21K|Ev`z?gR0vc=fgt9T+;xgTM}QD&O*nS*~ri*>dGb4pSkwTzINuWq~fz}FvjtGH@DbPU*v{n)5h!Dsu3$#`d=m-Sr zyd7okTv;hSZGnx%SpsH&J;;QHLTi7ww!ngi4h?M(0-bPb=xIry4T?Y~nn0rmtUa(~ zkStIOELSAJ7j?>gh0og8hS|*s6r9wcoS%Jm$f(k zqgEEEHCB-ldp1EJtOE(iMGJwVC4r*d1u7Q;)d_*j6sU#*l`8_(34uanfyxzu>L5_> z?Tc}!+$=q9&$Y1~8p85VLPITTw_4lRZk7dFF9bT~)Xj1k8-+k8g+S#LXg>wos0egY2&9$;+NcP05(0&8#~$#Zl@9%N z<|5k;fw0h&&`@jCcIVnPvOw#EKu4V#`cM*Rog&cDCeY|Qw3*{%$?QaX5_^(CAgtF0 z4aEw9VkLoM-38hp1UexEvQeOF3ba8H=!6hRD+{zi5$FU2YP=mvZH#>oz?<7HV7YFG zKv>dBXsCVd7W7)nWr5ZTfsQye^o1nQT1B8EO`y@0Xfp?yDYFypsRtG#XD=5g1d0;^ z#YqCixeHVw1UfDRs-r+y4|+;&g(A>#A&^ljG9D-b9fv?IwlBp2|G6y$>WzOQU%eR)|8+pfr519j zgr%Hy@j{+>Ay2#{PrSQ4uGR=0$)#?MgtMSa5CSDg0wuT$LZBo`pd@#JT&oQ>kai=+6)f%lk5UcKZR^Gz# ztWJd-YOOm&it?87-DcuF+EC$?|D6VDth8cm9+d;u$Qo(9DE>}y1TrI~%wd7bg z`>qylKegF!wcshot}ezkrwH3%ahqt5q26-)^kUYgc%V2ze{QHJxWWAuP7sEA%dul! z;Gy0IMSBuQ3T8bs~fdEZ4#u$V6hEYU%M#npF7yyShC41%TnLcpR`2Za__ z-$i@L`z}VJ#dbkxNel`tuD(mgCGWfB5G{2Vgcfa3XmRyjjF-Cal9>;*Bwi3$GJ*n& ztM8KYcko>p-#Y7%Grl$V>W~l-$Khvh>(kkN@KM8zt*uX5mrnrD>~4itZaLR zU)p%I6mvz)JT_v=IOx!3Y_?tpzle5ghe zqcybBj8}Pf9$uhKejXO;%~V__AJ*}j#)sM%d*FS z!7Rpf%tB1ZEXH)qVob*@#&p=TdtKcHF&z=AcG{3KOE)QgqpSGHgx@o>(#5d_Ct$ma ziRCaHr*u$-S}Vp?mz6%yp=GG`+_=SMyM|*c=CYl`8R3y4B0MHD!ow~iJcct8V>%-| zto-JOC#|r~Ga@{!9Gu`mYvlnx6}DxBM_WXAh^Gx0;USVuXN1Q&MtJl>ghvC+)Ky6N zGQwjrBRnb);js-79`mJa5#izBhX{{ei16ryFVe`AcdZT3LK;XB9+ToDD5_Q*)5US9 z2=~a6!ae%)G^N83M144f9)?SAsp(!%&P5mqq%JPA3}+a~bcTUAN`WvCNR8#YrQ#tB zM1BCNJ24ET6T(2m(`F0<5l^S*A`Ijl!$59E7)UdOfjFe*+~DL~%nefNJqQCSl(Iz_ zh$CBsf!vHRkZuSAk)>{i&)LnSFpx>{kwR*5Oc%$YA|@nDiV5k@6Qo9Hh%7ZOy``r6 zJUJJ!B9PilsWJ68ol}2~QXp0YQkz)>@j#K9u_E0VE7A?IBI0Q)#)>$kMy!a?bpynT zv_h4jJkS!!-=)rwe|nKdb11dC|JFl zB1_#CAI95a3wR+lhI>G`IHrr^P!U~{B}JF?=Lu3H$V8SJm)=s-`9({k)Cm+C^LEo2 zbmAxkf=(cG2umOyC_*#nD?T@w5|zP8>ob=tQWx6#_^)A?U;*G=omiRXA1s zu9Pi;P8|FYbiy=j%CgXG;+?SHybxMMooK}|T^xss2$U=-0;NAs5E_9fve3Bn7MiXt z8k$hGno{Fi;B-#QIZA=Z6iBUR5yS&UYDT6sU}Q=IM5c(R-58nTkQ$LGLe*`dwr+?_ zaY)T+IdmdURevgFi^voQKSZXqMPv$_vMe>5csJ~BFQgWsDOzz%7ssI@OeISSQ|ZqW zq(-!gEHy5@rKabKh9;!eQfhoKoX+qSM=21#0;#nuf_R`v&G40G3}0!6@D=eC8{#Tb zb4NCI;hhk^(hK1$4yhTwf=#wD35x(N!hwzn72w!1SmZfGB?^cB2HcZBuR}J7Y9GYxO78|3!AbmHJkX& z%B-5Ca=;R;TO8BHai|D*$&vzI`ttO!+>Py^eqvM6H#W7tRhl<#ltOSTVvqOKLAa#OM zYFv6t?P9gLE!QP)wYv(b#W7tRhl&83EGfXIKTnVvaW=B9ap^6!i`AZJqtutU)lL*r zi(|St4i!;2SyB{Ef1V&Uf^lT2ap^6!i`DKzp)YZ(-BSoHj_Kk!R7C1zNs&7Jd4kXg z*pY?CrMJ*7R(qnFQeWa$TZHgv#W7tRhl+5XEGe9)KTnVvQ9ZKMxb&9V#cEH~QtC_G zY9qP_|BWIPu7v!g<7%?FH&hA!$zsIMLt4?p$#Foa4qoPIl`3(B1$kGCi&^JJbr)vV z5#VEpN7N7e0T<(ryXpPhEj(`Biuc^iJnjwY=Wgq9i@`>&1|PQ&YUF11af_iwcuO(; zxP?d~-}WCPcsXJy1lRbCRAHZ3j18R-A9S4YK?fNh#I*Qz87|K7PIJ6EKx^H@Kp5#6 z;)A4Th!28KhW(G30`WnPyUoOV{2@HHzta$(Rb;lVvQIUmS`Z&}obf>i86PBxj`$!+ zNW=%BTClH_?`m0vn3`>Vs|8Ov^Wox6a8KHF#s_)K0jy$t5Lk-`iUY~`pbMV^5Zo{b z5e_8g09GMBDDWJ>21S9~ff;iEM2n4Rv0VsSwE01y#l_vY#3u<*EeWVj&4pk^TO1Tt zT)dGS8?kbXkZ_wr09K$L$EZNT%AcD)W+7y-_@9M1p@5|uf`c#%L9iGJ7UPA0B_t@UxcEDn+DqEsL9Jjb_EiiHx&SML zkJQ0fAs2rq$4Ic$5iD-g7yt|OBZ1{&r!gF0QKm6uu(&xiZoZ6|8zC|=g|WnC8UwX6 zm97f{c`v|q(bk*ma*5A#5HxgM5b$v!ps6?4Woq%I?z&8+>w?hC3qZ?&dUIVa@tG2! zr3=84cp+FBP;agaw_CroU6-kJT@Yn=Ay}z5*X7clX<^4g*9B4V7tpZ`s5jSTs`^rQ zU8d4?$uwRFSih>=vk*Tti}6FV7(XzE z>>r4pPQGzUAX@#0`RhRRZsph2foSyN5xoP^;TDJQ2t@D9>Gw<^s<=Du<3RM{M~yZG zqR`QEFAGFJ&+ic*h)N%e8XkzI-Su;BAhLh)dww8#zv0$b0@1X?uUG<+<$+gr2cpMQ zf36KgOJ1|60@2Dhqv8WmcGv1|f#{=o(*^~itsj<*2}E0-IQ>u{x^3t!F9xE?OL}|| zh?ZRwUJ{6w=H2m2AUfLAwj>axKK*`0AR0RU*M@=U{?46a0@3^?-&_-jlG?ZF9*E9P z?wTHmS~g1>7Km=2+T^}K^h1*e9|}a>moJ_jh~{_AeI^jSS@p|XfoSlAD?bQCIi|sj z1JT<gYgpG`o9dAUZVXscC^Id;GgI0#VG2W%B}2WZ2Sw z2BI_Pe=Z6{HIp*l2}CE~KK*kbIx=I*l0Xz578=s1VS|XKO&Uk4nm3E`{7v70_MbMM zcAU1F_Lw%8c9pi1_K`M_c8<1;_KG%%c89iw_JcNpc7T07`*Zf$?3da1vVUbC%6^i4 zA^SV_Y3#SyH?jX=AH#lxeFggiwt2Q|wq3SQwn4Ttwk5U~wh7{%*d~67QR0wTBc6yE z;)1%TeyKz1iMn8YvrbuW!}PlAd)=U(Jblu%2fB@$ls$f;dRp#1SyLxu=T27Rpq`O* z!`K^oc2y6!?T(DwhotJ#hpETSRQJ6nCnq;so1JrC*3_w!x@YI!e@lp}U2;gsh>^pF z>u%Q#*NxDPd{sa9fHuvfosnjG@f5c9OEXQ0OgG(;lwxXmYhldgX??cj>eEd5FXB;( zX;_5g-qfCYQ+_m-0@9mCozj~!>(UBdEMn?{4~lWp7nbPHpFf{g_$__*?_zN4>{0!@ zdee+Zy(uR;tw7|LR#5VRNb_w8Po|j(X{NgGUUs~kW;(3bEZ3VxL>f#D4W?V84Wl|=UYV_j1Ku0g$mKnEz`cH8>_opcb9I= zU8Bd|eYBLTKFI#&pOarTCz-N%)q!emSLwc*;}S#)1&c#&9wOF zqouJ(l^RA5u2}w3JC|w#CqSsXF z?2FU7Y)S8OpuZ{Ng|w5Ub*N|6ybajNQm6Xfc9m+*Xd-#;u10BvxuMf^hAx$1%SDU~*VNu*0D&&rSEq?Ee+#iDd+b88~gH4*Vc3L->ZM50ztu~z4Y5W{o- z2vN;{2+gAUX(*xy5Akm>sPge_DRXzJruF($b*wjShMpI$7*yEv1yQ$L{2tl~TWq>J zLbb?TaCz8@397P)1tB#z@&7I4cgnFA>S3&k>hUsetdSEO9iYmS)EN!c;K_2RCv1yp zV5DkMWxd_^x@Ave|eUC;;0x`a||*SM&SV4L2on*Utn+5Q5y-ZZw}>ceRHMJQKjf7POh zD`XVUdl|QDBIW#2OcC)ZCPO^Xz~-)66r<9r7M)Nnio5ZN2$jCiZ~dQ$xng>_-n0pg z==z8&bZGQpD-4Ar#H%T)MQcUwPsFLx`uzGt%#D1t6b(v#_5WS2Q7G&33oEPR)e9-> zpUxGFPMu0ANC{!L8ktg%9)UnLXP5FAv@f*Ws3t}DFJa46ifnx*QbOn*3VrMI?xoiK(9(ZJg^{U!9a9Bx_nFM)XJJP#b0?MqLF+0g)u7E z^b6w}5mJW-J`vMsAW$YU*s^qiFox)OHRgiUQw6DKT}5;ChxCOFdP7W8t7pw|A*%0p z#^grfc-7P<`nl%TM@w;xk{l=(AIdd-?)aVwNi(`WkTtDyh~s*E<~_O6j~+KTp4>K| z=bv;|C9A4bgV#^FeFpO9427*$V%2Nxz8v7Y?p7T|GOxZFc&1bpM8~qVM(v|Ic7bhKG-yH!*GQ=@8YtX3-%b z&Y=rNE_k>(-L%7CI%F^%NjII+YYsX*LhZtAdW2fLHNDGmQ^egj%u&auXm$t_8<`Tmo?I8VNHN(Y$0Q|uok+P$u-usvJ|s$bDZ1H~L%;oGNzvE@ z%czv_m1JqT9C8XH9GVjTtGk@3(c~EeK|fbLdfXxCh-i07;eLfdR1Yy@$TJpVUb|#L zsw`%VyO{8=kkV7mSn`a6oGk|?ejv*k>m_Hnx14e0sfL`P&ksB&%Nge-CsKOKsV2{O z$hqmo{0C$?)n0N!O`dYblV<|t{QP9HNtQF-OHQQplrw=myF$({MxQ?~%bDOMX9I6J zyOL)jfawd7n*$8rS3!ve2xluF)y?x193u)U&ew8Lm+t)=}v^F3K z>9OaHcj_l9ee%P}^V<4d*9q7i#f_mOr_l_Vh)KWPb1`9_Q$$?vYcbQ+PNm&CaOvt&R(T%0DocDUkskB?CoKfUC334uIR&h+0Gt)~> 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≪%Z^m=j{s4}|6Lv;YAdneL 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∾Y7kz{#QTS&}hQ4lTPOw8a|7>L^ z3LhuO9O{xza!HRUX%Cn5Ly}BCiJG>+{yf`mQ3YKHb?HAEH>psRWt228H(MmR39;IH zkGR0>X$;%U>ATpnB=I5MHt!O|#xrtJB!Iw!e8HGOk?{4O!ds6ZK=ev;gILU}@X-Td z%4bLwj}D@wy>vYfx5tpVgoPcG+W7)b)FE!;V6U-(3RrE^Nk8%e@8C{U7oZr%8kPGiD`e<=kCDcF<)*q6&I1i;*`I3N)>TF9k$tgvYTB3-X>{d<85NRYA1-5 z3I<~blDafJpop*e>Z49-7A4lT*TcAF6WoWk|z;1p!{HRp30<_VY42k)2iKG9DaewfVFYYg%51l=F0Npu&He6>^*F=PQW)n{;Ya}HY~MEN-0Ip z5`Pv<_RXM&&bhs4-p;qwxP3FzsoWjrSh7i+oCQsFNRfrJ1xEb1gs}#-O8yZ{8b}$t+b;d6w}7GyAyJXn?4RC=4

rnRFkXX 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

>Bn5!I@|nh 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 Z-Q&7_x@UDqb;ot5Fqce^ZvU^I{{`=JoW%eD literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/chil.dll b/ext/openssl/win32/lib/engines/chil.dll new file mode 100644 index 0000000000000000000000000000000000000000..3a08a00b4a40a2c3a0b6d0ea85cc447edcec568c GIT binary patch literal 18432 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 PPn*!qKR^GMYT$nWqne{H literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/cswift.dll b/ext/openssl/win32/lib/engines/cswift.dll new file mode 100644 index 0000000000000000000000000000000000000000..2e5f23821430f55554117359d7138a2d7ca73d1e GIT binary patch literal 16896 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 RT1{?~FY+1!f&We4e*pL2cI5y7 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/gmp.dll b/ext/openssl/win32/lib/engines/gmp.dll new file mode 100644 index 0000000000000000000000000000000000000000..9b8669a3d08d5a923ed62afeedf6336e7452a4eb GIT binary patch literal 8704 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 literal 0 HcmV?d00001 diff --git a/ext/openssl/win32/lib/engines/gost.dll b/ext/openssl/win32/lib/engines/gost.dll new file mode 100644 index 0000000000000000000000000000000000000000..dbd796a4eef212cef068e7630b04a628bb1610e0 GIT binary patch literal 61952 zcmeFae|(eG6+ix@N!tK{1PmCUK-4hnsIImJiiO$QHm%5yKxjgTv^W7DA}T@xsDQ<^ znD7u~Q#ZGo06+p`fVv8;5ReI=!W$9Xc$6iGAK`n;c}=^%hxfGGrnl33%Xzo+_m=b4?vmjRyY2iFZ44KO1BNxw3gdI{c&go|upePRj z;*rn=kKk>?)5702_Gc(c7JsJRNd{Kj(di_A5ow7fCc_lZ671?Y?;ZiTtTwDJWcY&B8_Vmnn*!z&7AP zhKit%)UTB2EnTqqhN~6My8;;~W`rY;>AzA%xh(zrfByem0-Mc!47R40P+xKGMn!p$ zzT!bwug4=!+^Hzxc6-~tefv`QM*(E~@T8R)2AdMhRZ;LZPe&$yf)%kBDC#@|NRB1K z;t8f>BRYv+vjb%-etwstZ2r`2uobpP8(nsQv_@ABUS4gJD-Z7)pFdjR$_2EDpyZEU z>BkJAw7Xr^MCyPSxK8W#zSixRnIaopzXxyD?UN0WM%QoH zds!x+zmw1mKz}WvS%CglLXCj_N=)aBuE7^>cLHGZ!^sN} zlFKK~O~mUDkG9H{8*X>_y)_7Q`b1_T@GvL@oZ#_k@ayr4NKF5xdgrMTEAbs}&x_sd zIuGJ1Y+1j-^bkT~GvlR^$%b%G>8c~K3Rj-07*V`p{f!8!a20t(3w(i6(EXI?09NV| zA70BDD8*N`M@$Pa?i7zGf)8w!iY_GP7jLoK3Kzf%aT(=tgKIXD54RUJJ3+6$Ztk4I zePYS?6lHBYDT&mY=2bSxd^w;geOU>R*63=)i}dAgylZ^gHum_nr(GKXfKu3ivk6|( zB!~DV(k?s#Zw>@MVX?~=8qkqN3CAi8okg%pUSz@H2`J(%FUWU?+bvDULL=2~ps2H+ zQ)~e>uv|QIG9C}N+roR|on*;0w<*5FBpw89?EvUD9Sr7q{o)FIhuh6fEw_5r_prx6n9WE?p}>jwNN-BTWyMUV56%7 zF|4*y8~JC+*rld$u?f*%qv&J_WYX)C(MvgT1?kO43}_!Q;DH+Dh~G1k$>SHlfX^eW z%&*x4q#%$2$mE6-@i=f@08xSzM0!KoJJBP4wv?E3!5%u);fb^Z3n9kWKIek&%6tZ3 z1?AeuD?BnepQxI_64iD=ha;e->n_#Ywe6&^DT~*<0iR+!LQ?umQJ|Zox852bRMJv- z5Z@2so7DGyya99q^caDnt6WafTOrmHf)Ibi+pBd84>}a2+%EANAlfuDG*jzo+8eCo zf+Atdf~tnEDIUDWUwBMBH6fu5O%IT2!e~g52W|?i5bqr4Y zYW(5^UViZ|T#uMwrNA80*8;>rjr1opIONc#xa?1D$THa09&dnat$Yi%-ri->;D%SZ z&@5e}a}45l>B-cHC{zBJzga&TDNoRk#o#=?jA{hb;l4qvU@F2$!HPkN{diNMkkWWO zqH_uHmoKiGj;tMMI%sV~6QF2Um{OvO-)I)6B7|mXY6)H&pdhkZ9?eMh;@xDBhwb!i zJt$x7O@@qXIu=wpM_RebTKRFf#Z==Fg)#?F*eNPmcWIdxpa{sK537PW4=Mm5Fw;9Fc6J;QR zZ04b7R9_c0G*ceuq-wh4uQ>-$u^VcRF3b)ax;PybF7Eu|O-U(uL*)Fn=x>Tca0k7` zJ*Zn+58A55E*A`ZPT)edhuWXAzydMp7z;+*g)&4PX+vYP6zICkwt%XpvF|hKQ}8hiHv?|>h-*^tvjC^Ak{wSD9+wCrkQ!xM)4@=7U~1^?~H)@?z-H=2r1L|Uls&&*QaW@0kD<(;vpq>yTdO6=qMng|bjFr(k z8^B$SI6~C*{*XicVG@%P=qE9|YJD(3)cbV$Ys8C)zYMpR10}f%ZBDz%Cr&`Wed1lX$ZaYsB*o@jlHYdd6q9KLREM|=lt^0E##fEplIB?(_rm8BO`L`a?LsN_x$MuQ z(}cc-l)b3oP>YxY=0J}0Dn~`vSudL9fkoov-(kcsI_kUw^q?jcHR1(H6A_$yg`oYG?|BdaRpQ2%q^m@8W?fP3z;fV zp9Wa?R+D0Fyb7%!O4_A_`uoK9ByGwpU=D_@PQo0>Hrii8RFlA57-d(}URZVoBq@@$ zaX-A23N^XD8dAv88KR7%Fh?614sbCZ%6+alFA*ACj#OM+N>1({i5HVWbC6ap$v%7& zvHs|(czlLvMKE>D{Lylg*v7c#s4;wtNeNm}KK)P-cI`x`897!zQW9!P#Z>dLET+y6 z2>iEX7-{4LJ&cR6gMw(@DPi0eiJ|G?k5JIdaJqJ=`;urjkU9EMnkF<*5O+iLrgo8d zB`v(`YPF?Tcr=$VzR5zEqzXF+s%HfODwXg`($(?! z@Xrtfn2b5xW3a|t1d4|gah!=rpcOzQI8pT6%te6&xx&6hmDo=e!U@y$8;-$ssRaQj zFFPd@Dk9tUkR*qSdXD;S(t6gJiazwE?VQ@EO03~b*?>2`&HiZ6y4!Q%-7SuZSqGxW(g!HJbZMUOkD~?ujeZ;u0(!}$W zdsq|m+F(^_JgL3ddfXU(KRY;phlM4(haddx;1yjNg$E0dH0@oJqs?+Tv`#zN9n!}?nIYcex5okwg4gs0K zznT8)XfIL%O-sL-D2nY+o>cjeM4e!aq>>voxikZnRX(hnndYl1XiQ@2p0m$bPa&BbW z2|$JdazaARi%dHS$S^=o7Ve2m`vM=s!$%C(rpd5An0BDjor?)>S!W#yJw`6f^oVj~ zm$IZkc5xfD5!#nP)b$=>Ge6OQ^%t~jm3z?9HFr)x*(GZQL~7zG66^M9#@4?;D(;Ma z$h_Nt5AtO3JBqcDY1uM7i^DVZaJNY!Of~_dA0qZm1oTOG%sK{$PqPAJKq8=j!eh}f zP!7}10>+?3z`%sZreoNE0a3e$BmxE}Ja!!ePSS2jef$OtN^gC1L9qFxkEC+>q>nD1nbiz5my%N$C(WGYvg5-UK4D&Z!49fM z3pd6t>mkEJlL0m2(z9SRW&r_q1=gj*T=L2CKb4$VmOtjtG1DbpLd&uGTRaP`Zy9c-{Dd*hhBNiScXgl>e!N0Fy7E(&5kN*Ld28fN1 zc9tI^H$vnY2}$=>FXPM5OsBT9RX|7f&>Q94qCKrSAvHwJ?)P-q33EgtT#Bp0Sg+ej zP?#mqg-*71koNUbOYM_>dr&;i!sD9HWPI}s`Wx;b`u#SnOVaK)WgQXLd}e}zc57?D z!ncgC{`*l=@id>M@HkSv-lpx0q6c$Y=DsrV6oo>XtairiW3)Q^*WsY>IHn40F?)%& z#_=D=hk`pP_pPMDF?;scAz;&%=Ok!=kE|pOObn8rOL;>~mO@inDKv2@ybi^5_S}4X`+i^2-~Z}@ z`f@J*r!hOVUPGAlp~wFLjnT(bG=TUgW1%lEtN-uh*lu7#{{DHO7y4{|I3DaU*>t9X%UT*!XBYM|KY^tlR>w z028K|UAJyG(0n(|L%Z^`t=r2C`BetIGV-f3@G|CCVIHc?lwXDU%CgM-s!Y7H@~gmd zS$2LEB1}hkm7J&2FwI+)n5m-K&whJ&rYg-!>vis*XiTD;3sPC=aME4_BqFH+mYA@r zGSOr|r@^yEXSCPcpncsQnW@EomKUnzs5H4Dfsv<_-R<`6~O@ zpRf9g9*-t-oivZ=Q=Bp5mlzXZ4mGV02VVZ8rW9>Jj~igpv%U&sU{1SSR?e`Wd}AO6!XK#~dZHMGIJ1)e! zK@=9p$7~f!>ObgiqzHV4$|S0F?;=74!z`|&zTXs{pVX-k3vb2jBTp}vx_{CN&vIdc znKMDLUxw|HlYVn)7)tr4K`4f!W*UIDMFwK*8L2e^j&W(EHajwdhM^dPT9SrPU(spC z#68YG%uB6TG`bo9(i&Z~RR=qIH{j*tV-N6nW?;e}hc-6PMOZiJVawgw_2AsqfKV(y z+2+xvUn1J35(ulmV$EV+Qz+cqbZpJQ*sP-L^%*z|5;0lJN?u&`3GHzQqPDxf4)OQb zC*w1R&2$z-ya8xpJ*Cmr4GX0b_0@<2c1PgdC|6i5(^zqA+gXmiG{wY z{AedOEjHOj{5zZ_@?&>pzvMZUuGMr%#ZEiqip~K|y?}?Q0%@zISlh-Sm79g*Ik^p? zrE98wKqUh*N*qv`iS1^OaspV)zjd+taU!l7h7Zx-+RM?sVji%3;yX@a#w@pw)3$j% z*Sn!&YuhQiZKE6*MojB2BC?angi66iSWS6u66RT%BnG( zb=tK<+cxB36>JSQy^Eb0ZrYIE`>;wDih+|5vui2lX@^yc!Ja$=!N*p5A6DUgXCyU| zqsQ%aScR6x6NgniL?=t@by%fuGU<0_%cKc`PRh_>m3fE(eVmV%hqmM7h%&5AK~X(o z4|agnAgr3g@Fp3O=0VB&ml6)`ogS!K6Z8WMI~PEqz2YUL;}d&F5{{V_u~S7ra`Bhu zuSlDO8+xD8KT<5{-@SOzc7<(;6DAe_w*W{==fnzUqiZXFVbdQ$ME3=Vcff}=s~kb6 zWqmk%Qb%uuVz(!JRL7poBX+R+C^Ts82|AO}Ovf{?A zNlm?}a|Z2ln&PrOg^VgVwh|D+4+w93bs|js1xaA>vIS5QoKHLrUyV<^fR|7F0j@_3 zuc1KRirP=72U4RTRyv5|0ruW38C`hLZ6(W0T0;9VW}2H`2@cjWP+C+J+GTX8X$pK@ z-vWt6dI{0Vmj>p5>dQd6pO)*|s?IyXIpqN8muRS&QeE>rqUKOMj`*{Q1r&a6!jCr< z5S4Z*&YQsefOm2B2$11JGNXy$bUH3V93g2sNwUpHXuOXr6XATCgfpjQ(`k}>Qo-*- zkbI)#N=gL5`C>&XbPtL7U~m$)g4z@f9p=i9D-u3{)Qjk}RMFom=5&c!~@mg_|UKm1Ku3+PB%pjg?n)%g!aWd=vatf{5^-*#zuu(2dIxHsb14H7ZP*g zSjoZAH@%7DZ;(;3ILSpRO~*ti#|0U3^%ukvKC} zW~j#z5s$zIS7O8?6h8H2(RbR&TG$Mtu>VvyK#UiYKrVFJ#cv_IMjC(<3by>Fv59uSa;BR%ND5cNWwuhiHJ*=_#m5Jkp@@xTfhxdM@2Y-0xI z)L|<>v9R`|F&NDS%flZTLO1zE;Vck9BV66U|L~^AE@N6gl@joaR}m&-hY|aceZ&T0V=E_QH>Zx3K<0;bwHi2OasNCTNdJ3N_uj!@fiL6tNJ+#kv4>LaPGE zmYH(<5Nm`5YJy`k?}0N}sK&b5Hrk_U7S%|GlnBM|M-;S=-F(8}77$AE@6T2^QqQn90rovQERlE!}qkqKw{~QH| za$7;clQw1JH2IE=aG}}e;Kis9HhCn-;t_U4jIXePoLwwtYEaT3&KKFjYb;9WO&B4h zvrZn!r1M?1ZIrYK0-|L>iUdg$p-lf9ls@pNI!gJezz4vQF29Eo>4j4AGZQ~jerI!{ zQhwusn$UeBBL;C`y8LEVv$(%ZeqA1t-(S#_qdX8DIob^nxc7*m%mgGSf3*JwXCHng zgQYSLCuPRY|A!=y%B--Zu1zb&wkMysBLNK_u7iM0o$msWlnB#9FZ#-Kf^$L8+O!3F zf!}C83a3n8kOHzDI0h_Y^RwNYT|P zXTVR{{Q%&?y%>d*bX)Ik)mrr(W-|UTppZZi$4cHMP-vTY3|`bn(ty&$hBPm2HM96| zCh7fY947~D&_Q@>P(wQ;$OSS_!;82jyMrUt(a4N6ABzG(@y#7PHAKa(|4k1a=d z_`{-AA-{Cq;#?URUuF@V@M2gBUDc|{93j+{2(^jlIn>6XtY|o0G=()gzRWIuB@v@l z_VBGa3dx|hk^@sRNLEgGz=}ycFQY^5SuCbDk8nsbtV`+o%lJP5J{^Xl15kR5!j=hT zHtXFj>9~{*@4lx)lgUTi1bLxDFEQClipe185v4d2uQs3}k$kjnxDJ+*Pkab&JnB~T zTL8=zWz3u$Dkl_O&r~ywo70$(_V@>=8K{|-YM(#clV!a<2&A~HDc7e^w+M%wmV+*J zq|h?*Nm&cM#UtodNP|t?De4CSEl>QIlec43nyFrZ$}eu>-UpYfQ$#ova{{64dh`s@ zJP@K!%t|5I#nlo?H!HPmk_*c6nOvN61{cgnzNls*j?QJUMUud8pwKqlA3!IGrTw!u zu0SYv20`2@-h-sk2>1iG_&CuznKgs-(JA(Gh)s5Vz%^5}Hq|0JQ%y)mbmEL~lKRjD zb^Y{Xu6Rt+>DmN==hWAAC?q1bkF{;}Y&SuC<8Nmvwv{!CtsjbDB%bl`)B8ER^`hk0 z>Gt$(2qUd{_njX8=xO22r6|a>2vQ%`L2`(R`F~gg2enZSS^#i_don^Z)dobtodK`2 zbf|VNRvVytez6x2oL=CQ@MNX>tL+T`E#O_*utzN%#jI{(@Q>wJS06g_v*A+coEUmJ z62_T+9DpG~>zy<;j1)y{Gg}VSQyf@8mq_%WUDI8(B}L*ReAC$2DTaXzMvZV$bonq? zeHd^xTH3;|r}Nar`72XP;;WK-vtyuyJ5Q zx938-2_1tL*yYY+*)Gtc3Tc6#^NFdfmzWPK?M!X}bye5_FwXh%ae1i<8#zZm2b@*m z4;(L{3U|t{u1u)HsQ0R6gix`Vjzc53nTdz|M=2KX< zhGIHMV}qHsHa$TEcTv&rr*YaV!8PGaoS~a=HAK+$ZS691Y&jMKO@@d&6CXHxVTRYF zdov<#qwY0^TTKynM)emlolF8CDW`GEgYh~7C_nK~M5Tkcy(qS9 zV~P-5Db+{1uBeqoTAWl@eSEVUV0kjg;S&aM?GgW|pcI6-g3eRZL2_=&D6NB`O!VAp z(Jy`zIH*Rwd-X3$AQT+E`mW*V)prd+?MXm`hdpAT>_Om!oJUNeto1;O4%oXv_#nZZ z0s^(Mu~A(ISR| zJ&FvG4q#5rbQBHuh#U)Eib}f>FdsU&butW-Ip;yuMuC3>PGTU2KI=JKvcF6x#OBn~ zu!fyvoss?RN6R@m>Tll%FKOmW_p=mNjR`YU0NI z8!_pGwV?GTLs{f9Ly2|O$6EG}d}DTM-Ts$PiDyCCS0kz~LAAA9r1kh_h>7smfb)qW zUuL67Oh>L@yi2uiEH>3pfmMrl0Fy1>Sao-jBb&_4Y;fcgBY{#Q9xJ2ipr6AHx96aw zbS7)WT^tbO05i@fKEgg|&D~6zhKm=dFP%>Mi>*Yujd9VaCdm23RvBHYgq{c~g`Cej z2JwS$n%wNA52ONLsSi|+RAQ_Twl;at)hu>{KfS%gNcV85)CZr~$!BBF z-{^5s#VB&J{JmdV{ys4YEJL?3`REl_gSJ2Fc8G28c*R7PqJyQVlS|et>5=mMIVlc= zkmL6yB$%j7;!l@SSP#A(=(NPePJDaBcDTp_G|L`d<4}TwVOMcv8kLILD?QVut(w^P)={<^meYs3LWfyI8AUI%a_u~9Y9 z1iH0x9^Saofv>CZix^WzLQC00B{)_+nIvB!$%jF{M!bU=f3J8Gu1~xyXa5UZa9EQi z?-K*Sez+z3N8!I_`(hI_aJ0)97ry|WYBK88*3bMvuaJ{mBz2yel?XzKa!wqHoFoWy z!*DN+a?$2%9Y3P_`|>HD@x>W6;##z`R3|I2-Un}uxP)0Of-BxahA>f#tcpkBm2S9w zV&Pu0=4;YC5*^DoQSSPY?Wg zc#4IY^4{)9@T`8Cl%SrivR`ol$?FjA=I#MqxQC0`ZkHc89W6befx1n~yie{Y8V9}P zgSt}TxRaEocv8_8ATsp zC-8!Njd&fr>Ef-XI1uj;yphTr$oEGiUmA$hSyCq+8gAr^EsWtndrurBs%5}{z~1fs zO?(B8-rlplwu#FpA{&^P;f^h0Ip*K;u|2w)+6Rn zcROS(-hIw$D za~UZNq;R`O-3VgfYy*FqlXIg~=FPMADd`uoHa~XSx2^ZLTKxiO(VXbLl3G%8qy}-g zSk7T4gsG+kzWU|(6fWE;d`ge$7k@cEg^M96e4QVP!;i?~utc5`>8HZqFX5V@^R4RX zrNVdj4%g|^+_Ob&<*-z3N##$5Z#*+xr!T{ooDq%%Pwq*8eB!9LL!94_SmZO|UTo#T z`iH8R3^r}WyjYzD_v>MS2%|785}G^Qv}r-Xq7qzOgA(kEJ|%@CjAlvD?X_d=4as_9 zRW?j9Y~le5=0?6i$BbZjoLH-oV6JC$CtkuF?4x0(g-s={u^?7*v}qpnpgrN^=4Ayi z_|B5U%gzt4F)N|0_1Te%i;LG+T%2E!9WfFtXd*~iWmP%Qm%a|i+Vlb#*4)KWw^MUZ zjJjPNZV&N}3^`*{&DcKaDA{8T{}rIvH0MUmJr5=~C%h8GMyy?FQjpP*eMYziYe6*Ia+2SMB=osmK`-<;Tj+uDQ0eI zBWQv9;z&96l2&CDxCdJ%W0I$84yzrVj#2Ek}`Z*W;v&JN_xyLPt0A6mFoNC zXqHN?@Yt9W+Vf**`#LU}xF~kHp`gMVcSp+N;lqZ|ktmsT8m~e2QMYG;&m7G2c*DDk zvHwRB(NzUY4E51z9^F9CY12y+tqOzEG)bzIzPFfY7aq~B@UTijpDrSOq6;8Mp9Ze4 z7@A*MkX;tZs&bR&bg}0A36kn4KTTV5NL#|BEna8riu@Tf*v7o#V0?ffAM7WiZOa#DkvWp zadSzd6bs77N8H)r-CVFGbn8M6l3p4v5z8jW%JV(3a@>anHtN9!NaN~2OW`YHPK|kC z;l}l*@v-HQ^;!9sMcjPh#}UXXin{>H3=k!}S4d&Rx|End4Yb-1yJ zi#c1e1ZhK87Py>0bz>GuT9V`-RjZ#Treh>e+iS3VvyIxuEiYoD!ScX$;{6AceP2ul z(6$l_nF&lm7Z;Ifq8T*ITYroV4=Ua5+4(ah9baw|XCXLVC>(g9(;ao2#8b3L&_Z?o z0Mqx1bH?HWW0xGhEfCjL`S`wAwGBvJv(b;SU>wwlXjrS1J1WFHiULN17kRNRxUEp< zAvg*%pGeAw*>Sq!al|+ZNK6}obH8{J!77=YROb3{=6DJ7Xb+HR?VvQ53@r(*9X!Hp|0Oda+JQcCH)2w{I+~VM6JKH`b1nXO8TFHb94@oU zgmjCI3TqCFtl$JJ*B4GW4MmG#=}^823(4Apxeo&466@Iz zs9oG!KrCVGeCr|go&>4DEuhoBnKgvy=qbw=#l|HSvb`#`c&q~(oah*LG~`qF7{88& z;-s$#K2TM}xTlDk+``tIp1%JdrI4Ecq-tj)LxPonB^D|xS9r%nqKb>AhEtE56*(AK zCPqj$d3p{t(Tpj&kzAsdHth~#1g2*tnVwPBQ4JtK*CG#GZ=4=!yf_!3&JQ(419XkO?QzaSY#l|UtA*(06D2P}G1d__s!g&jl7P5*`J$TG4WG3h zF-rW(jfoVTX(^DJ*+9yfNP$Ru0r>NaXV7jlqp1sjY>sjYk}9s92|Y5Ga^{!ZVIS+= zrOZ%t2MGa^v2*#$Nz9Y7eziqeLS27JFJM_7$AIxw<&h|gJas~GX(e|&k37PFSFZUI76=JKd?l- zQlvB^J#ag)ndT9c;zH(60Tif^X`WWM*TL{!o zc#xKcO7t!?f?jYc?eZ9bRX>X}I8?1k%KC=DQt^$S>4I+K_JZm%cF>5Ap+K4&>(u6s z2C6Sq_w-hSs+7F@SQ>&vnFCHcD`tAcUy%Y$?wc^VKS_Je7rW7b`@pI9>Up+s`x{YmsRoFz%}CgKTYt&8$z*Wz3*G3gC<0n)QByjN;B;i4fda4 z4)#Iw#<%2s!mdNTKS?S8QdLP(`gkzBW|pF@nHQ=6yV&|k3-I?`$izM367;i(qn6-u z%^bDjLg?spb4L|-m}!4z6?&4}sVLE?;(BZMED{B<`=e)!pr;T7IE)PDT7!0L)qyRL5>KaVu4gNn`wgw+J6UF4Q0tAs#)zZ32z}om$bod+Gc_( z+n?1?ud-ZU&?B0rnf_pre~mKHA20fY8Qam~gS&SsxKW?9DUK_yEfQmIu+I!JQ`6()FV5=4S3)Jyb@1?zG5 zH8w7hDfx)=OZ`CJTZRj;#WMiKm*CMV%IGYIPTj@C6HxbUKTs|_fX2R*0j#GLI z;k=!O^BUoNKqFe6Y4s4NwIdDZQ^ILW$Jv99y-(bq#2KkN_M@wx5g(l2hAlO;uaItW zhaR#Z)FmOppP7bVd^&zO9e*S9U`yaz8|NZaRlY}5loYfo1?~POCr8Ww7ZY?g=&LF@ zR64w8SlD<%ABt>k>`ypLC>S>uV}6TpXm6_cP~Id;IGs=$bt45oM2?GaXs@5xlfu~r zoB(Fml4)2*5FgNEYvV6um_13mJ0}?ylVOe|&DRoP!H`cJzkm=)g;k$8n*5mK6J5!V zY3dZTZenK=FiCxl0KZKF^3+nOmiT!RFkDp#4DW&8GC6@Sr5WXgT%0`09X3A{x!=Cm5`fTqpDW9mQ)G3~U zp|wZMgrIttG#SdZI5j|jsy4i3w4$7fV@R2iCXK}U<+$AR{sMJO?fgd?POaLcIWU3< zI6QRD$3dr=X?i0*_z;>t+!l$tQb2tabHt5n7Ttz|j))uAUb-_1DqI61Zrpe2Ho|L- zxap2YQ$cIQodZv1!7gfhBkmFS$O6Kkhp_G%_>SrEC*()zcZh=g{|b7(p7ZJn$=ci!#+)PTvnK@11ns!0C19LK0Nv4DT1ez zJQY;)?*mQr_B{ISia8jyV%m(Hd~q#CD5zvk+G;c36JKE#o#+VDg3K$0M;2~GmnRSB zy{F_A8F%8ed){Cp^@8%oMgVC&ZZ^J5VMC1j2{kyx{n<7zs#>fBrVV%aN4-v1hL z#7Yg;$38K)p2D7oTf0|bNi1}jqEQBBa|Uve0eqCEvNQw`tF6Md7zY_QKp4m#_Ykbu zNkZ`X^>y&t_@>)GL9xQ^s$RvK?NlD`14aXK7xg?{q_ZwR1{x&WT?l{H31>`C$q8%K ziExX@Z`_R=_6K34WLSg2hy^?Moz@KvsC+TE$M`XIu2G71Pkgy~%%ACoM6n!UK#aL( z6dsJNxfpvquQkj3LWkn9<(RDV$78pejBOC2{{(<1NzRaZ)k${0i1@MpXxbMneG+`t zsmSy%tlR5Ok?7wt9*ESRYCU15k@By=eJ=814`(@}*INc&Z=yozGJ_F2DOdP}(|X$u zWGJ>KzqKoqn8oT7LUZW~A@ob;8O-T?gEjCK_L-FM zE@!yQ$$Vo>V4zG`oBXgGP?>?=XdUi6rZaI(`7Ge%v~4)C-?w=S7#CTtRDHuAQvpN= zSDW#M9;tMAmHc#+kly})(_7==f|~?m6q7Mhr*Zed0wW%-I7QGlMDX~8=@-1~^-An2 zuf?%E1T<2BS6m^#NGm}YKq$hXJ z7CkwSI1D>_>~2>WH1t&QwH9A^HPCC8YZabb@T|nM98U<(QanrWT#silo@?p29kOe)R?77TCd>6XqD(f0EpzMEP_v zjg`q&AUQrZt&8b;B&SUx(;sfnT|dQDxWfX8tiRG#U>!vX(=2<1YcP!X*?5NH8II?| zf>zu~K_Pa04Z-8UGYn5&LEAzeEVeA{w+E#+BruW+F~|D&Tb}rv+VhbsUEgl)G^5T$ zkQkjRyDva1)-(f_1EGEdJ3w?tgVyv^b6X*EyP1rw9Y&bsPYcpyfa?gDleE8ePCBee)sjrG z>>n(lJ&PTA=>O8xV0`dNE-_owZLUK<&%j5ZJYxUDJe83)d!WbXr6L~3;qM&XHrh6L zGl-Gt%0fDc$&mxm? zJxp~^WHJ`gs*gt|;}(|c&m)s@pKtYv$Yfj@U41e#8TUe0e-W8{HkJA_$uVCu_2z|?E1KIr}1z}_X=}Kmo>Z&;8+zv z0GLWXUUrkVGluI^-V7f)H0D)WbHlubO>5KMz!%MMyh(FCW8MI5n(=TT-FzhG(AyiE z5^iOM0@I>nn$s}l9pO6W zzyzjE$F!wko(=YfBoGECJa!$^nT9Fv4A*H6O<+27%+fSWd3U&uIU<3X!=A>2H|beN zfnxk3C$|QZho+*2(B&R9-8EF(2@__IK!N167jF3Qc>x-Qz;gjUPh5qi7;Iqi!TjW+ zq5JFo@pxspJtzEy*}9>U<^-WXXpm`EIl!Y$>KV)bZ&{A-RR7mSm7y49Ff)Sx@1X^e zVh^1wsPK!YF=>tvCpQ279cv*-FIG+mQ@7p6aQwTH)8`F1u^)~XhDvFCq4g^G(oDm`p#Bj0)xoyoZs*lI;l}g`9=@%gttc&5^eqy46n5d9U)QIs3CThfDFoE^) zELtCT(;?Xa{;sn|JWTAkbHR-t+|-B#;0Eb0L7S;hRk0kt%Urnhz9)@A$@cjCfhF2X z3te5(hJitB#S*^Q1M4FYDS9%|6>?<>Q#|`FPsCPo*tsM{qK7auO}=mB zzY0qpwWQ=^dRTSBTBH-W7OfP$+~8n!BkUBqF_S2LH`uno_A=*5OUBVTzKnyNJ%~fL zb^woi(kA&OD!a6I3;!L72{B039>yfYF*)N#6aSdZ?Z_%cf#@mWKU{(6K@@5JhVo;M9&s$j8sC|Xz5br>^HEBK#}#PTL) z6w7qj^&P9MOs>?Pk@&SKb^^1TF65i=oQFUsLd zwQ(EV>TpkA>+KKF_x6TQW7vM?YC41$ESLjl(xq4?(L7er5tu3Uc5z^}XuXYv z%9F~`HOb@5h-MF5$7p^rR*DbC0NH+>c){H@j`JvcQl_v;FeBI_9Gr}!M!`xt%anzo zGvMJKW5`;M{uW9zQN#5Ec@)QieF*sf8GX@w5>0%C4iT+rR$_-A*5`&JBVjzR)M@LG&sE47JWEgNu5XfrDmTxgf6E;U+S7?5L#I?K>*y z)!=)UE`Ja;PzA2DTpk2MEz!%v7Vf}TvOMTNb=2QOtz_+761Y{Ick3DDVMPYNiRWTG z#dt{WNkgR<0yl>i5rf?g43pI86w!5%1{qkoPDL&wVKUA-FdM8*#vTv0(y&*-Nw^n7 ze#pt?A*60E!O8)M|092fcrth4u!5NZ-(~kP7PTds%}ud5o2x*o%aX1h)V`TSC$~E$ z3;;}>Z-GP_hPo+f`*X$P2%{F9{>6*tHmP7?G_3&tnN&jm#JZ-6{&c3)DeEO|6yj8Q($(S@KE$FKUZ~9FD751i>+Lz<#JWAY z=`O0~G2FbOTh!6qM3^SgLO^h&{5vqNMmV;MA{2{ObIH-3oi^CjgfTnA*-cY*-@ z`o<~M*{ONqDt%EKIlh)Ka(CvVg{k9UC?H8N+v${j4Myh{F5)4X$ zZ>~ylgmYa$)%6nRMm{(l`O!3Fxkb?73piC1X^`2Yl~u=K2yMt)!j^Bm?)!@E0X$FP zF+fa@;(ZI=N+#C5GmM$^GwEe4_wy|$V(6(q>4D|;YOTKYj!TAN3G^VAKxZ2+`HsE> zx-+BkV6P?6&^55w4&8c^u+#0QGdM~;p3Kb+ykktfeT$y;I_#B$hSIcoeeP8OrCBkD|MRlzoYGQ^|@~!4zV!auTO%CML8JO0gEqiL;OqpZF!?(Mc~L z)v=xKy$7&Y{aL}-s6UuO(d!R&I;cX(`m>lTqTU3{`T$OGs}4A26(Q{!q0;oaWG2Xe zeJ$4AoRDgpIy4#R6j_M`gYQAGW)H7lf+FVnk#nrLAZ5|fmut1mYwzBUoX@doSuhQ} z>1x$>MGE5(VYGli*HTqMd#$JW5`piJ>JfiRU&?y@>mK^rpZL0kzLpG5 zQM`=+TLsjy@?6?KdhAWa#hDULvoprJg)$}V-OIafW3&qhDNu8weyhSUw z_+z(Fyn2>=qlpAMDNn(WdFwp$sFPJ^W=#5)4KX%PvcMNvWU~d{~Fy<;a^t2+B`?-Dq z1e_Nqb69w+@QC<<91x*aTf{m<<0~l~xS34nYl$e5e09!4v3kYzOxh&AOWB|e-i|=I z#9ba(BFs8&5pZ$JxC+Q#oNK(42={oSSj`fJOn|SJql1o=Il4XVLwaLT?>)R>BXYg+ zDlSJ2c0ljuDE9Db{JHH=d5lc7Gt9hjAtp~75eK@%cXv5B7l>^^7G3cbxQ=ZtYe5bv zXFukjOipk)rBD+e2l@+%Jv2M~_qoBxDFCaPIXL;73H~Krnv^KQGf}Jo5c5^Ey)9%B zBM}$VO(1xIj_ItSy+;J+TSS?twXqKUNbRGp5rHeavI2{`G6IuR5`HBp_2WoA60nH# zH~~6vX!VM|#DX}=rG)=t#Xm6PAN72qQ{vQVyXX&?d6KEw2_cB>&`!EwT|9v(TtFk` zMT>fQ-YDkF)U;i6JkQxi+unafxR_N#Ho^TXlCe$eJ!Zar6f6Gy6$s{O5Hb6l<2;Eak1_z7U%1}QZYjJRg1IWqm7;})J+>U z2;`AgT!ysdzc?35U#_+BBI(0_H@l<{|K~hR`kdBAoAlxToT*zze@%W0;_)FHUJr_V z8Kr_nZWQ_imH+PDD{ce~)&eM)Ys|wPR8a9iMvW-Jnvw@FU?}2K*)c>&UcJv^DhqxXG`wz>Q+gQdT?Y z**RYEYZM}kXV(z*cS)pMfizAc`NUc(WwD6S%-SxPQ&yj3^ML()gOENM!Kj-?v?J79 zNM6@+^$t)Koi`>8AvXJA#*k^Y@sgtDG;_L7&Ii8_jZ2#kCL@~{!yI?v-u0%7abEyk z7C?7;{Jnv;r=SmF;(8D&+K4LIFKN$1E)hgx(t=0yOzf^h8{otg^a56E7p`Z5&8L41 z2Rt9uimsu)To0r1vrWHggQlPzG0Ua2T_$Q4TQKZ^$~d)3lLz{rD}GA}w9r6@&R55B zGFndZYJ!GF>S`()LF_E8<`usR;d_2qv$zeX(GC*SM*^Vy#&$6d}92J zOn5HWJ?Jn_kVDoeKkmBG)PCDOubiKvE8K`(J~xbMk`zB{Xt+6t_a@qz^da>96QrG@ zhbhY4`*roWFHKwz2)7R-~3OLZ6#_&E#wxn zJCWT|b}QJeW_Jp^9(HH3JDc4r*`3Gke0EW5Ky5L*OV|yvyOP~i>^895$Zmw)4eV}Y z_ilFYWp@+1_p|#DyIa_OjNPs5ZezEZ-KW`YVYi*#J?!pdcR#zYv3r2sx7j_!?tAPC zc0Xjdo83>@?P2#My9&$A#IBiL3%fRU?d&?(&0*Kcu8ZAVcJtWHXSaymVs|ereklmH+u41==-9~mJ>~3IpBfEFAdoR12 z*u9_KhuGc1?qlq3Wp^99&FntSZVS8Z?CxQAAG`b6eU04%?7q$JA$H$mSFrmbyWQ-5 z%5D$4C)rgvk0y4_>{{5hv1@17!EO$_PIg`F=CYf|Za%w3>=v^-k=;^uE7+}OcM7{6 zc4x6Wo82qfoyYEcc2#y4v%7@dAiFEsUBzw#yN&Ed*xkVHMt1LJ_g=Uq{XfNg=+RKd z(YB+V8k&n#^RaIR8SgQBaOdm(^Y&=%qm^!)V%>9eX+N#C_HJBsZgL%MyAV?sN|Vy{ zL5=pIR*8u|C0IyPeok@*l9O53QreX-PN4nm$`r5Tg^dzjqv9c3JY*IQn5x=bNhSAyArY;hP}f{sl31~o-^fZEs+Tp*61H>Ns&4XWF+0KbjUOsdd z+$jOGFt4n7;D`_gU$wPpJueW4ARZ8Ls#7SmnnGuAs7xpW2^Aa!FCCR9X;N5J0MK~Q z+BAheydaEef^TCQ%qK3ASqYvM4_UA?J7m_zX)lULz+3!{cxEoPg+gfJD8Ad)&;1}C zdRMHY7;OQIs(gfGzmJg3ghp2lW83@m>Idmd^Z|#F%J)*j$Y5c-LpggAVd2p%p#+0i zVTE9+7%GT-ZQ>G|}1T(d{wyulepxHwTPa<6Fj)vZ&8=8NH4+-9d<>Dmx_9S=@Qe<#AZU~)= zLCr|7hp21?-0LIX21Jy;d5DDt%gk`x7^;?3Z%9!Mj+LNGfTeYJxwNStYK9r{e0AwGOc0eW2fzeSQ^})Gh=tJ1SI4_zpO zz}ezC2p#>W%s@u%3l}_?-xs@x`{$86IG5ZJE^@~@$(@t~cj1P?)%@x|kzXSm{K~ZR zYqX7D7h3SzbZ2HMUg+&SSj2DBgT;7b58Z^qb6P=RTgYVWuiq^jy=7+x31_+n$LDv4p zS=TDD#i4p4woE==W{=HqU~lK+Wm(sD=NgZeyb&C#O|_Ivwk++7vs1>)EG2uETEaVX zOWp__#(dx0Hf?9uaS=huq2d|~TH5AsCPU-f;ekQWJf<#F$^IbfnD$(^^|u3n(_Mf= zJ6jDH=Tkj}ptHqeP_-_HxD?;GLj*32K#*vOAU?Jl&^Hw?foNk(Ei6|Xn-W+j##jyv zvQ*+ac)E@NSzHaDsFN{Ku%ZhpgM=NdEUZjZu?rTOxS7fCBz$%j9*__PpB$!3O68A7Xgwg8#`CUpNBGW``40U%K7@~iWRrTGAT zcA$1x%c+*G3LYTDLZAA>hekb190#1WWA@kw}rk9RiZl!ZDU$7n%E56Kn6W{et4xzS#^$H)3+MBMroBFYPi^W zZ86BU@XgL-4|Ifr7I764r&`JO8x*V!t07|Spm~Dy>UJr;hDjuFC79K)8k;syvSx7& z=+V0#@7h{j$}A!c;vn&a|AGe5{OX=?5B?iRi~(L(KPl<6C=TSxt#GB83y5eviAF_& z4^-==W)Cm;6vF9|!!w`%*=g^WKD7f$$4feb{hM|N`+TWae^^ECGb`aP+;GoB{EFSn zub&3_)wG0P4=?7|uT;D?-PyDWFAO@PO?Sf+BhUTtbT9{GJ+;!40Z+7PBZqFm$&ORt z3K76dN97i5k0|Y^e2jW5(aLS{!3qT8i_MOIb}&}C1=U67WY|HJ)~PnxfW#_$P)5{( zz?k&M$xJ#&cTOf{5(lqQfxNyQub~t56gefIEW;_$Z=#sI!4>i_<0utyJOrDlH`l5ijkij6MC^sM z!nit&P{N}dk#8mZVXn9EV0oVr3fi7PUvURe$Vy&Es0+Gr=qKEtf-(yC`ux!m6eqU& zfYbGZhK&d?=W~dx-M|WQuw@zxwGAP0GCe6#rP=Yy=me6bPBu|!62@U`duWSH~N@$=q zDFQyiFBzij>B7P~16KEBYn9+aAbpg3wDQAM1%d3@g?nYHvAGAL#^^Fr^a^v-3zpyh z1r7m0d%7WB9IbvSLz1hn`-Ot47raj990yG)*T7T&SIog0df9^0uzl39pG8P5p7Z^RS9vmfwSU!`GjKfv(J#bd>Tt#b{Z^+!Cs@5OsohSD$-&jWpw zh94+O11f&Q8ax*v?i+YE!@mko1D+6`jd;dpDh=cCOai@!fb#42h>xS=w z{tLi;4$odZm}+f!8qXi_JZe$sZ*v-OPeH?SJS*}17*D5BX&8^^1@MD;yatSB8_vQr z+^jS>@mz`rEl0yR;LL>oP`1+WBEF09{Sff_;CUI(4M;l*e(JzS0CHH22RkkrhT)An zEE=xB^BSH$fX&4FcX&JS+y?(_E98r3Km42Vgz%UUb_-xP;K90K!yr5>kk@&5UyAo( zq*agi-QeRMJl7)~Y)xr+6ub;Y*e<+L4H|BMjF;e9jAu8#oe0D1e8Xrw6A}M%e4m5# z_9J{Ro~`))J>EO;{1HzOI5z=?y?zZ7@RYz`hCF_O{H}z59$-Gi--72i@c#hM!+0LR za~ELm;F%16Up(i-zYWg@JbO$^!)ov&!21TgdmvYgr5o1b`5vBD$hr;BPCVD+`vyFZ zA@93^{~7#?!2e0SNk>10-k!o^#?sXwJO#9bgL)PvdzG&)ay8;c@&! zQHt<*@Tho}n^HA>X1%9uX4zCP z#jc$8)nV?-r%d5k1^M|Gr^QLaCln>2Rh6^qL2G8MXV&G@rzOD(CCbsur%(0N%&M&S z)Lb^@^70hCVtT#z@~UaXOA;3_U**ip-L+}3D=KTNDyK0{@q~IxuFN}4=c;m6xaRbgQFG%jSE`tr*?)s-{r%V$kt8uh2~MBnNB)L%aJ@>#&1IYp1p-|ow&mFe;M zyT(&dHmfp`FV1AWo(TZC1i+4`mL;5j@tLp*MFc|>9i!Y+kCG$_p8?k;e+E1)y%Zf; zI3&z;d@iI4NZrRgC)1r!^yTR?{7ceh_?M)c(3R8E)#aE>kH4XA-dQty@yBowIRiem zto#fb3E2PB-nmD~U6y(Nt^2*JaWfF+uv*MSCu)-U-7no$ope`MK_tXBG#IqcbgH|n z(*=Dgt1A$YGn-{H%DSl0Wt`|?*&HWo)XZ*}WnGV=W?6I)8I3y;bAWLpBAdae8D%wR zM0Y>Wuew4d2Are&&+htzU!MBC*XMnn?{j&p-s$i>#m#>*DmjmSwk6*v7qPk^cJ!Mn1nZnKW+X~HE ztF};Y*IUbl*`?M(tqlWG*L;b}>DuDrQk!nmHy7&7x%xuARhyTQ=r`SN%@?L?^Yew- zT4TOGBWtO*T1&0M^wL6eSG%#ev#>l@Yt@6PyLB>@)X0SGR&8;)xzuVG8jG{Iy%*cG zmS4I}V^PMhwHs6O^+Iia=TfWDo?BQ}=ao0>_0|fXjm2AP^NpFpbb|%7IwDwRu8Wly zmKwo2x^**+o%Q8*p?zDkey;t_rRBD7$v6wkbp+UL+qk7LUtiqWp6eNVp*9_?v|G__ z8|WeEt&~Wjv0M;2Hx?Uhc)dLk<^|=AZiSTh=y9R3EW%Q%JC_V3LocA3rRhL9yIOUn z7MBVO^@XLD=#JMtLv$FCvaZzRb*phptzDOP?ZVP5{4Jgjfo84IVkp(zH8tPpEOXc5 zOnsIeL?Ac$jX3;-!TJxTS4R z{W$>z(o|~01lnbB%M;Vnf`JM7C-7-#WcP+?k;TrN+v|sToUFkG*0R{16lkv>!gwYd zx2zxP0HIJS6=YBPV*8a=i_@*!nlLxX7`=^6-T299R2-w4?OvS>fgWa;nlx5e2@Bm;uS~V@zg^<-170)Uv#aw#_mclT0beSWiAlJ z*a~=PKTv?L;yGjtsWi`H=P(mgtFf+M5?K!vUcF4C7yG=nx4m>%+j)=sM(*D0p1&bq znN|IFtrSL~2Po^Oj5q9pWaiXYRInA4CcMq89*{mg*CRYX{NWeNWQ-FlW!*8>J$C*W zCodS|49}lujDNKDXl|CGgQ(5X)9s{z5XBoF!CgW-= zWo-9@OU5m(ly%2_*Rc3&z;XbD>AhGqmsWBz)dQ zy_iMU&&%ucO=Km{ksM-t+wj)w#@@J%B&6PJ5R4A#ZFHrQ0bSEs>b$9D#a?@Er> z&3y3%9X`ujHp`^KZe@G<>fx#+!f?%-N7h* z)WBA($~O;33zypoFq2?U*b z>N;w;c%7sxlj3Z8s(bqe^|j?i{lZ4Q<1friBB#aPA$rG<^k#B)*J3Av%0jsUnQSYV z)&^Z$PgW++lAN7aE-_)H?aIqe{W(RDBd*l1@4QsHrun|>YmRH%nr)k!<+_IE>7LGm z?HjgXSf1m1mach*O_gn0w(Gf;XPCBbdvtSM)a?73ZTN<3xb(Ly-8MYiaD3nJJ=b?E z&opg^N5?Zf%g_whcMZ>X=;K68r!ybVtT~l8n)+|hT*wzqWPBNS`2CW4q;5`Ok?QCMuspAONU?BcQs2S zpu3J`nKlBWGjh~CUl;1>sKT{17mi)c)=b@SG+##dEZ?Gpv_|neS9nVLPx~|!-Z|cG}oH+bl zaf2Z|RO*->GdlDZ-~@8w0vxP1l1T&qQtx