From 84c8c891af141761363ca43df4f7e2908d7eef55 Mon Sep 17 00:00:00 2001 From: "Jerry (Xinyu Hou)" Date: Thu, 29 Dec 2016 14:55:39 +0000 Subject: [PATCH] Restructure the openssl lib for both 32 and 64 bit on Mac --- ext/openssl-osx/{ => i386}/include/nope/aes.h | 0 .../{ => i386}/include/nope/asn1t.h | 0 .../{ => i386}/include/nope/blowfish.h | 0 .../{ => i386}/include/nope/camellia.h | 0 .../{ => i386}/include/nope/cast.h | 0 .../{ => i386}/include/nope/cmac.h | 0 ext/openssl-osx/{ => i386}/include/nope/cms.h | 0 .../{ => i386}/include/nope/conf.h | 0 .../{ => i386}/include/nope/conf_api.h | 0 ext/openssl-osx/{ => i386}/include/nope/des.h | 0 .../{ => i386}/include/nope/des_old.h | 0 ext/openssl-osx/{ => i386}/include/nope/dso.h | 0 .../{ => i386}/include/nope/ebcdic.h | 0 .../{ => i386}/include/nope/engine.h | 0 .../{ => i386}/include/nope/idea.h | 0 .../{ => i386}/include/nope/krb5_asn.h | 0 ext/openssl-osx/{ => i386}/include/nope/md4.h | 0 ext/openssl-osx/{ => i386}/include/nope/md5.h | 0 .../{ => i386}/include/nope/mdc2.h | 0 .../{ => i386}/include/nope/modes.h | 0 .../{ => i386}/include/nope/ocsp.h | 0 .../{ => i386}/include/nope/pkcs12.h | 0 .../{ => i386}/include/nope/rand.h | 0 ext/openssl-osx/{ => i386}/include/nope/rc2.h | 0 ext/openssl-osx/{ => i386}/include/nope/rc4.h | 0 .../{ => i386}/include/nope/ripemd.h | 0 .../{ => i386}/include/nope/seed.h | 0 ext/openssl-osx/{ => i386}/include/nope/srp.h | 0 ext/openssl-osx/{ => i386}/include/nope/ts.h | 0 .../{ => i386}/include/nope/txt_db.h | 0 ext/openssl-osx/{ => i386}/include/nope/ui.h | 0 .../{ => i386}/include/nope/ui_compat.h | 0 .../{ => i386}/include/nope/whrlpool.h | 0 .../{ => i386}/include/nope/x509v3.h | 0 .../{ => i386}/include/openssl/asn1.h | 0 .../{ => i386}/include/openssl/asn1_mac.h | 0 .../{ => i386}/include/openssl/bio.h | 0 .../{ => i386}/include/openssl/bn.h | 0 .../{ => i386}/include/openssl/buffer.h | 0 .../{ => i386}/include/openssl/comp.h | 0 .../{ => i386}/include/openssl/crypto.h | 0 .../{ => i386}/include/openssl/dh.h | 0 .../{ => i386}/include/openssl/dsa.h | 0 .../{ => i386}/include/openssl/dtls1.h | 0 .../{ => i386}/include/openssl/e_os2.h | 0 .../{ => i386}/include/openssl/ec.h | 0 .../{ => i386}/include/openssl/ecdh.h | 0 .../{ => i386}/include/openssl/ecdsa.h | 0 .../{ => i386}/include/openssl/err.h | 0 .../{ => i386}/include/openssl/evp.h | 0 .../{ => i386}/include/openssl/hmac.h | 0 .../{ => i386}/include/openssl/kssl.h | 0 .../{ => i386}/include/openssl/lhash.h | 0 .../{ => i386}/include/openssl/obj_mac.h | 0 .../{ => i386}/include/openssl/objects.h | 0 .../{ => i386}/include/openssl/opensslconf.h | 0 .../{ => i386}/include/openssl/opensslv.h | 0 .../{ => i386}/include/openssl/ossl_typ.h | 0 .../{ => i386}/include/openssl/pem.h | 0 .../{ => i386}/include/openssl/pem2.h | 0 .../{ => i386}/include/openssl/pkcs7.h | 0 .../{ => i386}/include/openssl/pqueue.h | 0 .../{ => i386}/include/openssl/rsa.h | 0 .../{ => i386}/include/openssl/safestack.h | 0 .../{ => i386}/include/openssl/sha.h | 0 .../{ => i386}/include/openssl/srtp.h | 0 .../{ => i386}/include/openssl/ssl.h | 0 .../{ => i386}/include/openssl/ssl2.h | 0 .../{ => i386}/include/openssl/ssl23.h | 0 .../{ => i386}/include/openssl/ssl3.h | 0 .../{ => i386}/include/openssl/stack.h | 0 .../{ => i386}/include/openssl/symhacks.h | 0 .../{ => i386}/include/openssl/tls1.h | 0 .../{ => i386}/include/openssl/x509.h | 0 .../{ => i386}/include/openssl/x509_vfy.h | 0 ext/openssl-osx/{ => i386}/libcrypto.a | Bin ext/openssl-osx/{ => i386}/libssl.a | Bin ext/openssl-osx/x86_64/include/nope/aes.h | 149 + ext/openssl-osx/x86_64/include/nope/asn1t.h | 973 ++++ .../x86_64/include/nope/blowfish.h | 130 + .../x86_64/include/nope/camellia.h | 132 + ext/openssl-osx/x86_64/include/nope/cast.h | 107 + ext/openssl-osx/x86_64/include/nope/cmac.h | 82 + ext/openssl-osx/x86_64/include/nope/cms.h | 555 +++ ext/openssl-osx/x86_64/include/nope/conf.h | 267 ++ .../x86_64/include/nope/conf_api.h | 89 + ext/openssl-osx/x86_64/include/nope/des.h | 257 + ext/openssl-osx/x86_64/include/nope/des_old.h | 497 ++ ext/openssl-osx/x86_64/include/nope/dso.h | 451 ++ ext/openssl-osx/x86_64/include/nope/ebcdic.h | 26 + ext/openssl-osx/x86_64/include/nope/engine.h | 960 ++++ ext/openssl-osx/x86_64/include/nope/idea.h | 105 + .../x86_64/include/nope/krb5_asn.h | 240 + ext/openssl-osx/x86_64/include/nope/md4.h | 119 + ext/openssl-osx/x86_64/include/nope/md5.h | 119 + ext/openssl-osx/x86_64/include/nope/mdc2.h | 94 + ext/openssl-osx/x86_64/include/nope/modes.h | 163 + ext/openssl-osx/x86_64/include/nope/ocsp.h | 637 +++ ext/openssl-osx/x86_64/include/nope/pkcs12.h | 342 ++ ext/openssl-osx/x86_64/include/nope/rand.h | 150 + ext/openssl-osx/x86_64/include/nope/rc2.h | 103 + ext/openssl-osx/x86_64/include/nope/rc4.h | 88 + ext/openssl-osx/x86_64/include/nope/ripemd.h | 105 + ext/openssl-osx/x86_64/include/nope/seed.h | 149 + ext/openssl-osx/x86_64/include/nope/srp.h | 169 + ext/openssl-osx/x86_64/include/nope/ts.h | 862 ++++ ext/openssl-osx/x86_64/include/nope/txt_db.h | 112 + ext/openssl-osx/x86_64/include/nope/ui.h | 415 ++ .../x86_64/include/nope/ui_compat.h | 88 + .../x86_64/include/nope/whrlpool.h | 41 + ext/openssl-osx/x86_64/include/nope/x509v3.h | 1055 +++++ ext/openssl-osx/x86_64/include/openssl/asn1.h | 1418 ++++++ .../x86_64/include/openssl/asn1_mac.h | 579 +++ ext/openssl-osx/x86_64/include/openssl/bio.h | 878 ++++ ext/openssl-osx/x86_64/include/openssl/bn.h | 934 ++++ .../x86_64/include/openssl/buffer.h | 119 + ext/openssl-osx/x86_64/include/openssl/comp.h | 79 + .../x86_64/include/openssl/crypto.h | 661 +++ ext/openssl-osx/x86_64/include/openssl/dh.h | 392 ++ ext/openssl-osx/x86_64/include/openssl/dsa.h | 332 ++ .../x86_64/include/openssl/dtls1.h | 271 ++ .../x86_64/include/openssl/e_os2.h | 322 ++ ext/openssl-osx/x86_64/include/openssl/ec.h | 1281 +++++ ext/openssl-osx/x86_64/include/openssl/ecdh.h | 134 + .../x86_64/include/openssl/ecdsa.h | 335 ++ ext/openssl-osx/x86_64/include/openssl/err.h | 389 ++ ext/openssl-osx/x86_64/include/openssl/evp.h | 1519 ++++++ ext/openssl-osx/x86_64/include/openssl/hmac.h | 109 + ext/openssl-osx/x86_64/include/openssl/kssl.h | 197 + .../x86_64/include/openssl/lhash.h | 240 + .../x86_64/include/openssl/obj_mac.h | 4194 +++++++++++++++++ .../x86_64/include/openssl/objects.h | 1143 +++++ .../x86_64/include/openssl/opensslconf.h | 261 + .../x86_64/include/openssl/opensslv.h | 97 + .../x86_64/include/openssl/ossl_typ.h | 211 + ext/openssl-osx/x86_64/include/openssl/pem.h | 615 +++ ext/openssl-osx/x86_64/include/openssl/pem2.h | 70 + .../x86_64/include/openssl/pkcs7.h | 481 ++ .../x86_64/include/openssl/pqueue.h | 99 + ext/openssl-osx/x86_64/include/openssl/rsa.h | 664 +++ .../x86_64/include/openssl/safestack.h | 2672 +++++++++++ ext/openssl-osx/x86_64/include/openssl/sha.h | 214 + ext/openssl-osx/x86_64/include/openssl/srtp.h | 147 + ext/openssl-osx/x86_64/include/openssl/ssl.h | 3159 +++++++++++++ ext/openssl-osx/x86_64/include/openssl/ssl2.h | 265 ++ .../x86_64/include/openssl/ssl23.h | 84 + ext/openssl-osx/x86_64/include/openssl/ssl3.h | 774 +++ .../x86_64/include/openssl/stack.h | 107 + .../x86_64/include/openssl/symhacks.h | 516 ++ ext/openssl-osx/x86_64/include/openssl/tls1.h | 813 ++++ ext/openssl-osx/x86_64/include/openssl/x509.h | 1327 ++++++ .../x86_64/include/openssl/x509_vfy.h | 641 +++ ext/openssl-osx/x86_64/libcrypto.a | Bin 0 -> 3492776 bytes ext/openssl-osx/x86_64/libssl.a | Bin 0 -> 605104 bytes 154 files changed, 38574 insertions(+) rename ext/openssl-osx/{ => i386}/include/nope/aes.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/asn1t.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/blowfish.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/camellia.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/cast.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/cmac.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/cms.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/conf.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/conf_api.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/des.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/des_old.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/dso.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/ebcdic.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/engine.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/idea.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/krb5_asn.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/md4.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/md5.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/mdc2.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/modes.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/ocsp.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/pkcs12.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/rand.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/rc2.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/rc4.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/ripemd.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/seed.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/srp.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/ts.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/txt_db.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/ui.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/ui_compat.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/whrlpool.h (100%) rename ext/openssl-osx/{ => i386}/include/nope/x509v3.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/asn1.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/asn1_mac.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/bio.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/bn.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/buffer.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/comp.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/crypto.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/dh.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/dsa.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/dtls1.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/e_os2.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ec.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ecdh.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ecdsa.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/err.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/evp.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/hmac.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/kssl.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/lhash.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/obj_mac.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/objects.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/opensslconf.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/opensslv.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ossl_typ.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/pem.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/pem2.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/pkcs7.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/pqueue.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/rsa.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/safestack.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/sha.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/srtp.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ssl.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ssl2.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ssl23.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/ssl3.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/stack.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/symhacks.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/tls1.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/x509.h (100%) rename ext/openssl-osx/{ => i386}/include/openssl/x509_vfy.h (100%) rename ext/openssl-osx/{ => i386}/libcrypto.a (100%) rename ext/openssl-osx/{ => i386}/libssl.a (100%) create mode 100644 ext/openssl-osx/x86_64/include/nope/aes.h create mode 100644 ext/openssl-osx/x86_64/include/nope/asn1t.h create mode 100644 ext/openssl-osx/x86_64/include/nope/blowfish.h create mode 100644 ext/openssl-osx/x86_64/include/nope/camellia.h create mode 100644 ext/openssl-osx/x86_64/include/nope/cast.h create mode 100644 ext/openssl-osx/x86_64/include/nope/cmac.h create mode 100644 ext/openssl-osx/x86_64/include/nope/cms.h create mode 100644 ext/openssl-osx/x86_64/include/nope/conf.h create mode 100644 ext/openssl-osx/x86_64/include/nope/conf_api.h create mode 100644 ext/openssl-osx/x86_64/include/nope/des.h create mode 100644 ext/openssl-osx/x86_64/include/nope/des_old.h create mode 100644 ext/openssl-osx/x86_64/include/nope/dso.h create mode 100644 ext/openssl-osx/x86_64/include/nope/ebcdic.h create mode 100644 ext/openssl-osx/x86_64/include/nope/engine.h create mode 100644 ext/openssl-osx/x86_64/include/nope/idea.h create mode 100644 ext/openssl-osx/x86_64/include/nope/krb5_asn.h create mode 100644 ext/openssl-osx/x86_64/include/nope/md4.h create mode 100644 ext/openssl-osx/x86_64/include/nope/md5.h create mode 100644 ext/openssl-osx/x86_64/include/nope/mdc2.h create mode 100644 ext/openssl-osx/x86_64/include/nope/modes.h create mode 100644 ext/openssl-osx/x86_64/include/nope/ocsp.h create mode 100644 ext/openssl-osx/x86_64/include/nope/pkcs12.h create mode 100644 ext/openssl-osx/x86_64/include/nope/rand.h create mode 100644 ext/openssl-osx/x86_64/include/nope/rc2.h create mode 100644 ext/openssl-osx/x86_64/include/nope/rc4.h create mode 100644 ext/openssl-osx/x86_64/include/nope/ripemd.h create mode 100644 ext/openssl-osx/x86_64/include/nope/seed.h create mode 100644 ext/openssl-osx/x86_64/include/nope/srp.h create mode 100644 ext/openssl-osx/x86_64/include/nope/ts.h create mode 100644 ext/openssl-osx/x86_64/include/nope/txt_db.h create mode 100644 ext/openssl-osx/x86_64/include/nope/ui.h create mode 100644 ext/openssl-osx/x86_64/include/nope/ui_compat.h create mode 100644 ext/openssl-osx/x86_64/include/nope/whrlpool.h create mode 100644 ext/openssl-osx/x86_64/include/nope/x509v3.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/asn1.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/asn1_mac.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/bio.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/bn.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/buffer.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/comp.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/crypto.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/dh.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/dsa.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/dtls1.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/e_os2.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ec.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ecdh.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ecdsa.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/err.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/evp.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/hmac.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/kssl.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/lhash.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/obj_mac.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/objects.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/opensslconf.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/opensslv.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ossl_typ.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/pem.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/pem2.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/pkcs7.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/pqueue.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/rsa.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/safestack.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/sha.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/srtp.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ssl.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ssl2.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ssl23.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/ssl3.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/stack.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/symhacks.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/tls1.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/x509.h create mode 100644 ext/openssl-osx/x86_64/include/openssl/x509_vfy.h create mode 100644 ext/openssl-osx/x86_64/libcrypto.a create mode 100644 ext/openssl-osx/x86_64/libssl.a diff --git a/ext/openssl-osx/include/nope/aes.h b/ext/openssl-osx/i386/include/nope/aes.h similarity index 100% rename from ext/openssl-osx/include/nope/aes.h rename to ext/openssl-osx/i386/include/nope/aes.h diff --git a/ext/openssl-osx/include/nope/asn1t.h b/ext/openssl-osx/i386/include/nope/asn1t.h similarity index 100% rename from ext/openssl-osx/include/nope/asn1t.h rename to ext/openssl-osx/i386/include/nope/asn1t.h diff --git a/ext/openssl-osx/include/nope/blowfish.h b/ext/openssl-osx/i386/include/nope/blowfish.h similarity index 100% rename from ext/openssl-osx/include/nope/blowfish.h rename to ext/openssl-osx/i386/include/nope/blowfish.h diff --git a/ext/openssl-osx/include/nope/camellia.h b/ext/openssl-osx/i386/include/nope/camellia.h similarity index 100% rename from ext/openssl-osx/include/nope/camellia.h rename to ext/openssl-osx/i386/include/nope/camellia.h diff --git a/ext/openssl-osx/include/nope/cast.h b/ext/openssl-osx/i386/include/nope/cast.h similarity index 100% rename from ext/openssl-osx/include/nope/cast.h rename to ext/openssl-osx/i386/include/nope/cast.h diff --git a/ext/openssl-osx/include/nope/cmac.h b/ext/openssl-osx/i386/include/nope/cmac.h similarity index 100% rename from ext/openssl-osx/include/nope/cmac.h rename to ext/openssl-osx/i386/include/nope/cmac.h diff --git a/ext/openssl-osx/include/nope/cms.h b/ext/openssl-osx/i386/include/nope/cms.h similarity index 100% rename from ext/openssl-osx/include/nope/cms.h rename to ext/openssl-osx/i386/include/nope/cms.h diff --git a/ext/openssl-osx/include/nope/conf.h b/ext/openssl-osx/i386/include/nope/conf.h similarity index 100% rename from ext/openssl-osx/include/nope/conf.h rename to ext/openssl-osx/i386/include/nope/conf.h diff --git a/ext/openssl-osx/include/nope/conf_api.h b/ext/openssl-osx/i386/include/nope/conf_api.h similarity index 100% rename from ext/openssl-osx/include/nope/conf_api.h rename to ext/openssl-osx/i386/include/nope/conf_api.h diff --git a/ext/openssl-osx/include/nope/des.h b/ext/openssl-osx/i386/include/nope/des.h similarity index 100% rename from ext/openssl-osx/include/nope/des.h rename to ext/openssl-osx/i386/include/nope/des.h diff --git a/ext/openssl-osx/include/nope/des_old.h b/ext/openssl-osx/i386/include/nope/des_old.h similarity index 100% rename from ext/openssl-osx/include/nope/des_old.h rename to ext/openssl-osx/i386/include/nope/des_old.h diff --git a/ext/openssl-osx/include/nope/dso.h b/ext/openssl-osx/i386/include/nope/dso.h similarity index 100% rename from ext/openssl-osx/include/nope/dso.h rename to ext/openssl-osx/i386/include/nope/dso.h diff --git a/ext/openssl-osx/include/nope/ebcdic.h b/ext/openssl-osx/i386/include/nope/ebcdic.h similarity index 100% rename from ext/openssl-osx/include/nope/ebcdic.h rename to ext/openssl-osx/i386/include/nope/ebcdic.h diff --git a/ext/openssl-osx/include/nope/engine.h b/ext/openssl-osx/i386/include/nope/engine.h similarity index 100% rename from ext/openssl-osx/include/nope/engine.h rename to ext/openssl-osx/i386/include/nope/engine.h diff --git a/ext/openssl-osx/include/nope/idea.h b/ext/openssl-osx/i386/include/nope/idea.h similarity index 100% rename from ext/openssl-osx/include/nope/idea.h rename to ext/openssl-osx/i386/include/nope/idea.h diff --git a/ext/openssl-osx/include/nope/krb5_asn.h b/ext/openssl-osx/i386/include/nope/krb5_asn.h similarity index 100% rename from ext/openssl-osx/include/nope/krb5_asn.h rename to ext/openssl-osx/i386/include/nope/krb5_asn.h diff --git a/ext/openssl-osx/include/nope/md4.h b/ext/openssl-osx/i386/include/nope/md4.h similarity index 100% rename from ext/openssl-osx/include/nope/md4.h rename to ext/openssl-osx/i386/include/nope/md4.h diff --git a/ext/openssl-osx/include/nope/md5.h b/ext/openssl-osx/i386/include/nope/md5.h similarity index 100% rename from ext/openssl-osx/include/nope/md5.h rename to ext/openssl-osx/i386/include/nope/md5.h diff --git a/ext/openssl-osx/include/nope/mdc2.h b/ext/openssl-osx/i386/include/nope/mdc2.h similarity index 100% rename from ext/openssl-osx/include/nope/mdc2.h rename to ext/openssl-osx/i386/include/nope/mdc2.h diff --git a/ext/openssl-osx/include/nope/modes.h b/ext/openssl-osx/i386/include/nope/modes.h similarity index 100% rename from ext/openssl-osx/include/nope/modes.h rename to ext/openssl-osx/i386/include/nope/modes.h diff --git a/ext/openssl-osx/include/nope/ocsp.h b/ext/openssl-osx/i386/include/nope/ocsp.h similarity index 100% rename from ext/openssl-osx/include/nope/ocsp.h rename to ext/openssl-osx/i386/include/nope/ocsp.h diff --git a/ext/openssl-osx/include/nope/pkcs12.h b/ext/openssl-osx/i386/include/nope/pkcs12.h similarity index 100% rename from ext/openssl-osx/include/nope/pkcs12.h rename to ext/openssl-osx/i386/include/nope/pkcs12.h diff --git a/ext/openssl-osx/include/nope/rand.h b/ext/openssl-osx/i386/include/nope/rand.h similarity index 100% rename from ext/openssl-osx/include/nope/rand.h rename to ext/openssl-osx/i386/include/nope/rand.h diff --git a/ext/openssl-osx/include/nope/rc2.h b/ext/openssl-osx/i386/include/nope/rc2.h similarity index 100% rename from ext/openssl-osx/include/nope/rc2.h rename to ext/openssl-osx/i386/include/nope/rc2.h diff --git a/ext/openssl-osx/include/nope/rc4.h b/ext/openssl-osx/i386/include/nope/rc4.h similarity index 100% rename from ext/openssl-osx/include/nope/rc4.h rename to ext/openssl-osx/i386/include/nope/rc4.h diff --git a/ext/openssl-osx/include/nope/ripemd.h b/ext/openssl-osx/i386/include/nope/ripemd.h similarity index 100% rename from ext/openssl-osx/include/nope/ripemd.h rename to ext/openssl-osx/i386/include/nope/ripemd.h diff --git a/ext/openssl-osx/include/nope/seed.h b/ext/openssl-osx/i386/include/nope/seed.h similarity index 100% rename from ext/openssl-osx/include/nope/seed.h rename to ext/openssl-osx/i386/include/nope/seed.h diff --git a/ext/openssl-osx/include/nope/srp.h b/ext/openssl-osx/i386/include/nope/srp.h similarity index 100% rename from ext/openssl-osx/include/nope/srp.h rename to ext/openssl-osx/i386/include/nope/srp.h diff --git a/ext/openssl-osx/include/nope/ts.h b/ext/openssl-osx/i386/include/nope/ts.h similarity index 100% rename from ext/openssl-osx/include/nope/ts.h rename to ext/openssl-osx/i386/include/nope/ts.h diff --git a/ext/openssl-osx/include/nope/txt_db.h b/ext/openssl-osx/i386/include/nope/txt_db.h similarity index 100% rename from ext/openssl-osx/include/nope/txt_db.h rename to ext/openssl-osx/i386/include/nope/txt_db.h diff --git a/ext/openssl-osx/include/nope/ui.h b/ext/openssl-osx/i386/include/nope/ui.h similarity index 100% rename from ext/openssl-osx/include/nope/ui.h rename to ext/openssl-osx/i386/include/nope/ui.h diff --git a/ext/openssl-osx/include/nope/ui_compat.h b/ext/openssl-osx/i386/include/nope/ui_compat.h similarity index 100% rename from ext/openssl-osx/include/nope/ui_compat.h rename to ext/openssl-osx/i386/include/nope/ui_compat.h diff --git a/ext/openssl-osx/include/nope/whrlpool.h b/ext/openssl-osx/i386/include/nope/whrlpool.h similarity index 100% rename from ext/openssl-osx/include/nope/whrlpool.h rename to ext/openssl-osx/i386/include/nope/whrlpool.h diff --git a/ext/openssl-osx/include/nope/x509v3.h b/ext/openssl-osx/i386/include/nope/x509v3.h similarity index 100% rename from ext/openssl-osx/include/nope/x509v3.h rename to ext/openssl-osx/i386/include/nope/x509v3.h diff --git a/ext/openssl-osx/include/openssl/asn1.h b/ext/openssl-osx/i386/include/openssl/asn1.h similarity index 100% rename from ext/openssl-osx/include/openssl/asn1.h rename to ext/openssl-osx/i386/include/openssl/asn1.h diff --git a/ext/openssl-osx/include/openssl/asn1_mac.h b/ext/openssl-osx/i386/include/openssl/asn1_mac.h similarity index 100% rename from ext/openssl-osx/include/openssl/asn1_mac.h rename to ext/openssl-osx/i386/include/openssl/asn1_mac.h diff --git a/ext/openssl-osx/include/openssl/bio.h b/ext/openssl-osx/i386/include/openssl/bio.h similarity index 100% rename from ext/openssl-osx/include/openssl/bio.h rename to ext/openssl-osx/i386/include/openssl/bio.h diff --git a/ext/openssl-osx/include/openssl/bn.h b/ext/openssl-osx/i386/include/openssl/bn.h similarity index 100% rename from ext/openssl-osx/include/openssl/bn.h rename to ext/openssl-osx/i386/include/openssl/bn.h diff --git a/ext/openssl-osx/include/openssl/buffer.h b/ext/openssl-osx/i386/include/openssl/buffer.h similarity index 100% rename from ext/openssl-osx/include/openssl/buffer.h rename to ext/openssl-osx/i386/include/openssl/buffer.h diff --git a/ext/openssl-osx/include/openssl/comp.h b/ext/openssl-osx/i386/include/openssl/comp.h similarity index 100% rename from ext/openssl-osx/include/openssl/comp.h rename to ext/openssl-osx/i386/include/openssl/comp.h diff --git a/ext/openssl-osx/include/openssl/crypto.h b/ext/openssl-osx/i386/include/openssl/crypto.h similarity index 100% rename from ext/openssl-osx/include/openssl/crypto.h rename to ext/openssl-osx/i386/include/openssl/crypto.h diff --git a/ext/openssl-osx/include/openssl/dh.h b/ext/openssl-osx/i386/include/openssl/dh.h similarity index 100% rename from ext/openssl-osx/include/openssl/dh.h rename to ext/openssl-osx/i386/include/openssl/dh.h diff --git a/ext/openssl-osx/include/openssl/dsa.h b/ext/openssl-osx/i386/include/openssl/dsa.h similarity index 100% rename from ext/openssl-osx/include/openssl/dsa.h rename to ext/openssl-osx/i386/include/openssl/dsa.h diff --git a/ext/openssl-osx/include/openssl/dtls1.h b/ext/openssl-osx/i386/include/openssl/dtls1.h similarity index 100% rename from ext/openssl-osx/include/openssl/dtls1.h rename to ext/openssl-osx/i386/include/openssl/dtls1.h diff --git a/ext/openssl-osx/include/openssl/e_os2.h b/ext/openssl-osx/i386/include/openssl/e_os2.h similarity index 100% rename from ext/openssl-osx/include/openssl/e_os2.h rename to ext/openssl-osx/i386/include/openssl/e_os2.h diff --git a/ext/openssl-osx/include/openssl/ec.h b/ext/openssl-osx/i386/include/openssl/ec.h similarity index 100% rename from ext/openssl-osx/include/openssl/ec.h rename to ext/openssl-osx/i386/include/openssl/ec.h diff --git a/ext/openssl-osx/include/openssl/ecdh.h b/ext/openssl-osx/i386/include/openssl/ecdh.h similarity index 100% rename from ext/openssl-osx/include/openssl/ecdh.h rename to ext/openssl-osx/i386/include/openssl/ecdh.h diff --git a/ext/openssl-osx/include/openssl/ecdsa.h b/ext/openssl-osx/i386/include/openssl/ecdsa.h similarity index 100% rename from ext/openssl-osx/include/openssl/ecdsa.h rename to ext/openssl-osx/i386/include/openssl/ecdsa.h diff --git a/ext/openssl-osx/include/openssl/err.h b/ext/openssl-osx/i386/include/openssl/err.h similarity index 100% rename from ext/openssl-osx/include/openssl/err.h rename to ext/openssl-osx/i386/include/openssl/err.h diff --git a/ext/openssl-osx/include/openssl/evp.h b/ext/openssl-osx/i386/include/openssl/evp.h similarity index 100% rename from ext/openssl-osx/include/openssl/evp.h rename to ext/openssl-osx/i386/include/openssl/evp.h diff --git a/ext/openssl-osx/include/openssl/hmac.h b/ext/openssl-osx/i386/include/openssl/hmac.h similarity index 100% rename from ext/openssl-osx/include/openssl/hmac.h rename to ext/openssl-osx/i386/include/openssl/hmac.h diff --git a/ext/openssl-osx/include/openssl/kssl.h b/ext/openssl-osx/i386/include/openssl/kssl.h similarity index 100% rename from ext/openssl-osx/include/openssl/kssl.h rename to ext/openssl-osx/i386/include/openssl/kssl.h diff --git a/ext/openssl-osx/include/openssl/lhash.h b/ext/openssl-osx/i386/include/openssl/lhash.h similarity index 100% rename from ext/openssl-osx/include/openssl/lhash.h rename to ext/openssl-osx/i386/include/openssl/lhash.h diff --git a/ext/openssl-osx/include/openssl/obj_mac.h b/ext/openssl-osx/i386/include/openssl/obj_mac.h similarity index 100% rename from ext/openssl-osx/include/openssl/obj_mac.h rename to ext/openssl-osx/i386/include/openssl/obj_mac.h diff --git a/ext/openssl-osx/include/openssl/objects.h b/ext/openssl-osx/i386/include/openssl/objects.h similarity index 100% rename from ext/openssl-osx/include/openssl/objects.h rename to ext/openssl-osx/i386/include/openssl/objects.h diff --git a/ext/openssl-osx/include/openssl/opensslconf.h b/ext/openssl-osx/i386/include/openssl/opensslconf.h similarity index 100% rename from ext/openssl-osx/include/openssl/opensslconf.h rename to ext/openssl-osx/i386/include/openssl/opensslconf.h diff --git a/ext/openssl-osx/include/openssl/opensslv.h b/ext/openssl-osx/i386/include/openssl/opensslv.h similarity index 100% rename from ext/openssl-osx/include/openssl/opensslv.h rename to ext/openssl-osx/i386/include/openssl/opensslv.h diff --git a/ext/openssl-osx/include/openssl/ossl_typ.h b/ext/openssl-osx/i386/include/openssl/ossl_typ.h similarity index 100% rename from ext/openssl-osx/include/openssl/ossl_typ.h rename to ext/openssl-osx/i386/include/openssl/ossl_typ.h diff --git a/ext/openssl-osx/include/openssl/pem.h b/ext/openssl-osx/i386/include/openssl/pem.h similarity index 100% rename from ext/openssl-osx/include/openssl/pem.h rename to ext/openssl-osx/i386/include/openssl/pem.h diff --git a/ext/openssl-osx/include/openssl/pem2.h b/ext/openssl-osx/i386/include/openssl/pem2.h similarity index 100% rename from ext/openssl-osx/include/openssl/pem2.h rename to ext/openssl-osx/i386/include/openssl/pem2.h diff --git a/ext/openssl-osx/include/openssl/pkcs7.h b/ext/openssl-osx/i386/include/openssl/pkcs7.h similarity index 100% rename from ext/openssl-osx/include/openssl/pkcs7.h rename to ext/openssl-osx/i386/include/openssl/pkcs7.h diff --git a/ext/openssl-osx/include/openssl/pqueue.h b/ext/openssl-osx/i386/include/openssl/pqueue.h similarity index 100% rename from ext/openssl-osx/include/openssl/pqueue.h rename to ext/openssl-osx/i386/include/openssl/pqueue.h diff --git a/ext/openssl-osx/include/openssl/rsa.h b/ext/openssl-osx/i386/include/openssl/rsa.h similarity index 100% rename from ext/openssl-osx/include/openssl/rsa.h rename to ext/openssl-osx/i386/include/openssl/rsa.h diff --git a/ext/openssl-osx/include/openssl/safestack.h b/ext/openssl-osx/i386/include/openssl/safestack.h similarity index 100% rename from ext/openssl-osx/include/openssl/safestack.h rename to ext/openssl-osx/i386/include/openssl/safestack.h diff --git a/ext/openssl-osx/include/openssl/sha.h b/ext/openssl-osx/i386/include/openssl/sha.h similarity index 100% rename from ext/openssl-osx/include/openssl/sha.h rename to ext/openssl-osx/i386/include/openssl/sha.h diff --git a/ext/openssl-osx/include/openssl/srtp.h b/ext/openssl-osx/i386/include/openssl/srtp.h similarity index 100% rename from ext/openssl-osx/include/openssl/srtp.h rename to ext/openssl-osx/i386/include/openssl/srtp.h diff --git a/ext/openssl-osx/include/openssl/ssl.h b/ext/openssl-osx/i386/include/openssl/ssl.h similarity index 100% rename from ext/openssl-osx/include/openssl/ssl.h rename to ext/openssl-osx/i386/include/openssl/ssl.h diff --git a/ext/openssl-osx/include/openssl/ssl2.h b/ext/openssl-osx/i386/include/openssl/ssl2.h similarity index 100% rename from ext/openssl-osx/include/openssl/ssl2.h rename to ext/openssl-osx/i386/include/openssl/ssl2.h diff --git a/ext/openssl-osx/include/openssl/ssl23.h b/ext/openssl-osx/i386/include/openssl/ssl23.h similarity index 100% rename from ext/openssl-osx/include/openssl/ssl23.h rename to ext/openssl-osx/i386/include/openssl/ssl23.h diff --git a/ext/openssl-osx/include/openssl/ssl3.h b/ext/openssl-osx/i386/include/openssl/ssl3.h similarity index 100% rename from ext/openssl-osx/include/openssl/ssl3.h rename to ext/openssl-osx/i386/include/openssl/ssl3.h diff --git a/ext/openssl-osx/include/openssl/stack.h b/ext/openssl-osx/i386/include/openssl/stack.h similarity index 100% rename from ext/openssl-osx/include/openssl/stack.h rename to ext/openssl-osx/i386/include/openssl/stack.h diff --git a/ext/openssl-osx/include/openssl/symhacks.h b/ext/openssl-osx/i386/include/openssl/symhacks.h similarity index 100% rename from ext/openssl-osx/include/openssl/symhacks.h rename to ext/openssl-osx/i386/include/openssl/symhacks.h diff --git a/ext/openssl-osx/include/openssl/tls1.h b/ext/openssl-osx/i386/include/openssl/tls1.h similarity index 100% rename from ext/openssl-osx/include/openssl/tls1.h rename to ext/openssl-osx/i386/include/openssl/tls1.h diff --git a/ext/openssl-osx/include/openssl/x509.h b/ext/openssl-osx/i386/include/openssl/x509.h similarity index 100% rename from ext/openssl-osx/include/openssl/x509.h rename to ext/openssl-osx/i386/include/openssl/x509.h diff --git a/ext/openssl-osx/include/openssl/x509_vfy.h b/ext/openssl-osx/i386/include/openssl/x509_vfy.h similarity index 100% rename from ext/openssl-osx/include/openssl/x509_vfy.h rename to ext/openssl-osx/i386/include/openssl/x509_vfy.h diff --git a/ext/openssl-osx/libcrypto.a b/ext/openssl-osx/i386/libcrypto.a similarity index 100% rename from ext/openssl-osx/libcrypto.a rename to ext/openssl-osx/i386/libcrypto.a diff --git a/ext/openssl-osx/libssl.a b/ext/openssl-osx/i386/libssl.a similarity index 100% rename from ext/openssl-osx/libssl.a rename to ext/openssl-osx/i386/libssl.a diff --git a/ext/openssl-osx/x86_64/include/nope/aes.h b/ext/openssl-osx/x86_64/include/nope/aes.h new file mode 100644 index 00000000..87bf60f6 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/aes.h @@ -0,0 +1,149 @@ +/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */ +/* ==================================================================== + * 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-osx/x86_64/include/nope/asn1t.h b/ext/openssl-osx/x86_64/include/nope/asn1t.h new file mode 100644 index 00000000..99bc0eec --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/blowfish.h b/ext/openssl-osx/x86_64/include/nope/blowfish.h new file mode 100644 index 00000000..83293027 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/camellia.h b/ext/openssl-osx/x86_64/include/nope/camellia.h new file mode 100644 index 00000000..9be7c0fd --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/camellia.h @@ -0,0 +1,132 @@ +/* crypto/camellia/camellia.h -*- mode:C; c-file-style: "eay" -*- */ +/* ==================================================================== + * 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-osx/x86_64/include/nope/cast.h b/ext/openssl-osx/x86_64/include/nope/cast.h new file mode 100644 index 00000000..0003ec9c --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/cmac.h b/ext/openssl-osx/x86_64/include/nope/cmac.h new file mode 100644 index 00000000..175be834 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/cms.h b/ext/openssl-osx/x86_64/include/nope/cms.h new file mode 100644 index 00000000..e6c7f964 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/conf.h b/ext/openssl-osx/x86_64/include/nope/conf.h new file mode 100644 index 00000000..8d926d5d --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/conf_api.h b/ext/openssl-osx/x86_64/include/nope/conf_api.h new file mode 100644 index 00000000..e478f7df --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/des.h b/ext/openssl-osx/x86_64/include/nope/des.h new file mode 100644 index 00000000..1b40144e --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/des_old.h b/ext/openssl-osx/x86_64/include/nope/des_old.h new file mode 100644 index 00000000..f1e1e2cb --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/des_old.h @@ -0,0 +1,497 @@ +/* crypto/des/des_old.h -*- mode:C; c-file-style: "eay" -*- */ + +/*- + * 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-osx/x86_64/include/nope/dso.h b/ext/openssl-osx/x86_64/include/nope/dso.h new file mode 100644 index 00000000..7c4a1dc4 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/dso.h @@ -0,0 +1,451 @@ +/* dso.h -*- mode:C; c-file-style: "eay" -*- */ +/* + * 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-osx/x86_64/include/nope/ebcdic.h b/ext/openssl-osx/x86_64/include/nope/ebcdic.h new file mode 100644 index 00000000..4cbdfeb7 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/engine.h b/ext/openssl-osx/x86_64/include/nope/engine.h new file mode 100644 index 00000000..bd7b5914 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/idea.h b/ext/openssl-osx/x86_64/include/nope/idea.h new file mode 100644 index 00000000..60759840 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/krb5_asn.h b/ext/openssl-osx/x86_64/include/nope/krb5_asn.h new file mode 100644 index 00000000..9cf5a26d --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/md4.h b/ext/openssl-osx/x86_64/include/nope/md4.h new file mode 100644 index 00000000..11fd7129 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/md5.h b/ext/openssl-osx/x86_64/include/nope/md5.h new file mode 100644 index 00000000..2659038a --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/mdc2.h b/ext/openssl-osx/x86_64/include/nope/mdc2.h new file mode 100644 index 00000000..7efe53bc --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/modes.h b/ext/openssl-osx/x86_64/include/nope/modes.h new file mode 100644 index 00000000..fd488499 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/ocsp.h b/ext/openssl-osx/x86_64/include/nope/ocsp.h new file mode 100644 index 00000000..ca2ee76d --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/pkcs12.h b/ext/openssl-osx/x86_64/include/nope/pkcs12.h new file mode 100644 index 00000000..a39adf5e --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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, char *oldpass, 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-osx/x86_64/include/nope/rand.h b/ext/openssl-osx/x86_64/include/nope/rand.h new file mode 100644 index 00000000..2553afda --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/rc2.h b/ext/openssl-osx/x86_64/include/nope/rc2.h new file mode 100644 index 00000000..29d02d73 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/rc4.h b/ext/openssl-osx/x86_64/include/nope/rc4.h new file mode 100644 index 00000000..39162b16 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/ripemd.h b/ext/openssl-osx/x86_64/include/nope/ripemd.h new file mode 100644 index 00000000..b88ef25e --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/seed.h b/ext/openssl-osx/x86_64/include/nope/seed.h new file mode 100644 index 00000000..8cbf0d92 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/srp.h b/ext/openssl-osx/x86_64/include/nope/srp.h new file mode 100644 index 00000000..d072536f --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/srp.h @@ -0,0 +1,169 @@ +/* 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 { + char *id; + BIGNUM *s; + BIGNUM *v; + const BIGNUM *g; + const BIGNUM *N; + char *info; +} SRP_user_pwd; + +DECLARE_STACK_OF(SRP_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); +SRP_user_pwd *SRP_VBASE_get_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-osx/x86_64/include/nope/ts.h b/ext/openssl-osx/x86_64/include/nope/ts.h new file mode 100644 index 00000000..16eccbb3 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/ts.h @@ -0,0 +1,862 @@ +/* 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 + +/* 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-osx/x86_64/include/nope/txt_db.h b/ext/openssl-osx/x86_64/include/nope/txt_db.h new file mode 100644 index 00000000..98e23a20 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/ui.h b/ext/openssl-osx/x86_64/include/nope/ui.h new file mode 100644 index 00000000..b917edab --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/ui.h @@ -0,0 +1,415 @@ +/* crypto/ui/ui.h -*- mode:C; c-file-style: "eay" -*- */ +/* + * 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-osx/x86_64/include/nope/ui_compat.h b/ext/openssl-osx/x86_64/include/nope/ui_compat.h new file mode 100644 index 00000000..42fb9ff6 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/ui_compat.h @@ -0,0 +1,88 @@ +/* crypto/ui/ui.h -*- mode:C; c-file-style: "eay" -*- */ +/* + * 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-osx/x86_64/include/nope/whrlpool.h b/ext/openssl-osx/x86_64/include/nope/whrlpool.h new file mode 100644 index 00000000..73c749da --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/nope/x509v3.h b/ext/openssl-osx/x86_64/include/nope/x509v3.h new file mode 100644 index 00000000..f5c61560 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/nope/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-osx/x86_64/include/openssl/asn1.h b/ext/openssl-osx/x86_64/include/openssl/asn1.h new file mode 100644 index 00000000..bb6ac95b --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/asn1.h @@ -0,0 +1,1418 @@ +/* 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); +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-osx/x86_64/include/openssl/asn1_mac.h b/ext/openssl-osx/x86_64/include/openssl/asn1_mac.h new file mode 100644 index 00000000..abc6dc35 --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/bio.h b/ext/openssl-osx/x86_64/include/openssl/bio.h new file mode 100644 index 00000000..60083bfd --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/bio.h @@ -0,0 +1,878 @@ +/* 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_int_ctrl(b,BIO_C_GET_CONNECT,3,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +/* BIO_s_accept_socket() */ +# 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) + +# 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) + +# 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) + +# 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) + +# 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(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_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-osx/x86_64/include/openssl/bn.h b/ext/openssl-osx/x86_64/include/openssl/bn.h new file mode 100644 index 00000000..78709d38 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/bn.h @@ -0,0 +1,934 @@ +/* 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 +# 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+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*)); \ + 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; \ + } \ + 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_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_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_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_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-osx/x86_64/include/openssl/buffer.h b/ext/openssl-osx/x86_64/include/openssl/buffer.h new file mode 100644 index 00000000..c343dd77 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/buffer.h @@ -0,0 +1,119 @@ +/* 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); +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-osx/x86_64/include/openssl/comp.h b/ext/openssl-osx/x86_64/include/openssl/comp.h new file mode 100644 index 00000000..406c428a --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/comp.h @@ -0,0 +1,79 @@ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct comp_ctx_st COMP_CTX; + +typedef 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); +} COMP_METHOD; + +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-osx/x86_64/include/openssl/crypto.h b/ext/openssl-osx/x86_64/include/openssl/crypto.h new file mode 100644 index 00000000..c450d7a3 --- /dev/null +++ b/ext/openssl-osx/x86_64/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 void *a, const 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-osx/x86_64/include/openssl/dh.h b/ext/openssl-osx/x86_64/include/openssl/dh.h new file mode 100644 index 00000000..0502f1a9 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/dh.h @@ -0,0 +1,392 @@ +/* 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 */ + 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 + +/* + * 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-osx/x86_64/include/openssl/dsa.h b/ext/openssl-osx/x86_64/include/openssl/dsa.h new file mode 100644 index 00000000..545358fd --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/dtls1.h b/ext/openssl-osx/x86_64/include/openssl/dtls1.h new file mode 100644 index 00000000..4af7e4a7 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/dtls1.h @@ -0,0 +1,271 @@ +/* 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_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-osx/x86_64/include/openssl/e_os2.h b/ext/openssl-osx/x86_64/include/openssl/e_os2.h new file mode 100644 index 00000000..613607f8 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/e_os2.h @@ -0,0 +1,322 @@ +/* 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(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_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-osx/x86_64/include/openssl/ec.h b/ext/openssl-osx/x86_64/include/openssl/ec.h new file mode 100644 index 00000000..98edfdf8 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/ec.h @@ -0,0 +1,1281 @@ +/* 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 0x02 */ + 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_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_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# 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-osx/x86_64/include/openssl/ecdh.h b/ext/openssl-osx/x86_64/include/openssl/ecdh.h new file mode 100644 index 00000000..25348b30 --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/ecdsa.h b/ext/openssl-osx/x86_64/include/openssl/ecdsa.h new file mode 100644 index 00000000..c4016ac3 --- /dev/null +++ b/ext/openssl-osx/x86_64/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(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-osx/x86_64/include/openssl/err.h b/ext/openssl-osx/x86_64/include/openssl/err.h new file mode 100644 index 00000000..585aa8ba --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/evp.h b/ext/openssl-osx/x86_64/include/openssl/evp.h new file mode 100644 index 00000000..47abbac4 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/evp.h @@ -0,0 +1,1519 @@ +/* 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_PKT_EXP 0x1000 /* <= 512 bit key */ + +# 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 + +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)); + +# 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-osx/x86_64/include/openssl/hmac.h b/ext/openssl-osx/x86_64/include/openssl/hmac.h new file mode 100644 index 00000000..b8b55cda --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/kssl.h b/ext/openssl-osx/x86_64/include/openssl/kssl.h new file mode 100644 index 00000000..9a576728 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/kssl.h @@ -0,0 +1,197 @@ +/* ssl/kssl.h -*- mode: C; c-file-style: "eay" -*- */ +/* + * 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-osx/x86_64/include/openssl/lhash.h b/ext/openssl-osx/x86_64/include/openssl/lhash.h new file mode 100644 index 00000000..b6c328bf --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/obj_mac.h b/ext/openssl-osx/x86_64/include/openssl/obj_mac.h new file mode 100644 index 00000000..779c309b --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/objects.h b/ext/openssl-osx/x86_64/include/openssl/objects.h new file mode 100644 index 00000000..b8dafa89 --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/opensslconf.h b/ext/openssl-osx/x86_64/include/openssl/opensslconf.h new file mode 100644 index 00000000..96ef885f --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/opensslconf.h @@ -0,0 +1,261 @@ +/* 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_MACOSX +# define OPENSSL_SYSNAME_MACOSX +#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_STORE +# define OPENSSL_NO_STORE +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif + +#endif /* OPENSSL_DOING_MAKEDEPEND */ + +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +#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_STORE) && !defined(NO_STORE) +# define NO_STORE +# endif +# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST) +# define NO_UNIT_TEST +# 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 "/usr/local/ssl/lib/engines" +#define OPENSSLDIR "/usr/local/ssl" +#endif +#endif + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) +#define IDEA_INT unsigned int +#endif + +#if defined(HEADER_MD2_H) && !defined(MD2_INT) +#define MD2_INT unsigned int +#endif + +#if defined(HEADER_RC2_H) && !defined(RC2_INT) +/* I need to put in a mod for the alpha - eay */ +#define RC2_INT unsigned int +#endif + +#if defined(HEADER_RC4_H) +#if !defined(RC4_INT) +/* using int types make the structure larger but make the code faster + * on most boxes I have tested - up to %20 faster. */ +/* + * I don't know what does "most" mean, but declaring "int" is a must on: + * - Intel P6 because partial register stalls are very expensive; + * - elder Alpha because it lacks byte load/store instructions; + */ +#define RC4_INT unsigned int +#endif +#if !defined(RC4_CHUNK) +/* + * This enables code handling data aligned at natural CPU word + * boundary. See crypto/rc4/rc4_enc.c for further details. + */ +#define RC4_CHUNK unsigned long +#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 */ +#undef RC4_INDEX +#endif + +#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) +#define CONFIG_HEADER_BF_LOCL_H +#define 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) +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 +#define 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 ) /* 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-osx/x86_64/include/openssl/opensslv.h b/ext/openssl-osx/x86_64/include/openssl/opensslv.h new file mode 100644 index 00000000..e277caee --- /dev/null +++ b/ext/openssl-osx/x86_64/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 0x1000200fL +# ifdef OPENSSL_FIPS +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2-fips 22 Jan 2015" +# else +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2 22 Jan 2015" +# 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-osx/x86_64/include/openssl/ossl_typ.h b/ext/openssl-osx/x86_64/include/openssl/ossl_typ.h new file mode 100644 index 00000000..9144ea2c --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/ossl_typ.h @@ -0,0 +1,211 @@ +/* ==================================================================== + * 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 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-osx/x86_64/include/openssl/pem.h b/ext/openssl-osx/x86_64/include/openssl/pem.h new file mode 100644 index 00000000..d3b23fc9 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/pem.h @@ -0,0 +1,615 @@ +/* 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_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-osx/x86_64/include/openssl/pem2.h b/ext/openssl-osx/x86_64/include/openssl/pem2.h new file mode 100644 index 00000000..84897d5e --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/pkcs7.h b/ext/openssl-osx/x86_64/include/openssl/pkcs7.h new file mode 100644 index 00000000..b51b3863 --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/pqueue.h b/ext/openssl-osx/x86_64/include/openssl/pqueue.h new file mode 100644 index 00000000..d40d9c7d --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/rsa.h b/ext/openssl-osx/x86_64/include/openssl/rsa.h new file mode 100644 index 00000000..d2ee3740 --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/safestack.h b/ext/openssl-osx/x86_64/include/openssl/safestack.h new file mode 100644 index 00000000..1d4f87ea --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/sha.h b/ext/openssl-osx/x86_64/include/openssl/sha.h new file mode 100644 index 00000000..e5169e4f --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/srtp.h b/ext/openssl-osx/x86_64/include/openssl/srtp.h new file mode 100644 index 00000000..2279c32b --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/ssl.h b/ext/openssl-osx/x86_64/include/openssl/ssl.h new file mode 100644 index 00000000..2b0f6628 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/ssl.h @@ -0,0 +1,3159 @@ +/* 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:!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 +/* If set, always create a new key when using tmp_dh parameters */ +# 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_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,clistlen,(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 +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 + +# ifndef OPENSSL_NO_COMP +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); +# else +const void *SSL_get_current_compression(SSL *s); +const void *SSL_get_current_expansion(SSL *s); +const char *SSL_COMP_get_name(const void *comp); +void *SSL_COMP_get_compression_methods(void); +int SSL_COMP_add_compression_method(int id, void *cm); +# endif + +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_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_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_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_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_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_PUB_KEY_LENGTH 109 +# define SSL_R_BAD_DH_P_LENGTH 110 +# 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_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_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_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-osx/x86_64/include/openssl/ssl2.h b/ext/openssl-osx/x86_64/include/openssl/ssl2.h new file mode 100644 index 00000000..03c7dd8c --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/ssl23.h b/ext/openssl-osx/x86_64/include/openssl/ssl23.h new file mode 100644 index 00000000..9de4685a --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/ssl3.h b/ext/openssl-osx/x86_64/include/openssl/ssl3.h new file mode 100644 index 00000000..e681d50a --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/stack.h b/ext/openssl-osx/x86_64/include/openssl/stack.h new file mode 100644 index 00000000..eb072166 --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/symhacks.h b/ext/openssl-osx/x86_64/include/openssl/symhacks.h new file mode 100644 index 00000000..239fa4fb --- /dev/null +++ b/ext/openssl-osx/x86_64/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-osx/x86_64/include/openssl/tls1.h b/ext/openssl-osx/x86_64/include/openssl/tls1.h new file mode 100644 index 00000000..5929607f --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/tls1.h @@ -0,0 +1,813 @@ +/* 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 draft-ietf-tls-applayerprotoneg-00 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * ExtensionType value for TLS padding extension. + * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml + * http://tools.ietf.org/html/draft-agl-tls-padding-03 + */ +# 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 RFC 3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC 3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from draft-ietf-tls-ecc-12 */ +# 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 RFC 5246 */ + +# 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 draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */ +# 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-osx/x86_64/include/openssl/x509.h b/ext/openssl-osx/x86_64/include/openssl/x509.h new file mode 100644 index 00000000..99337b84 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/x509.h @@ -0,0 +1,1327 @@ +/* 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_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_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-osx/x86_64/include/openssl/x509_vfy.h b/ext/openssl-osx/x86_64/include/openssl/x509_vfy.h new file mode 100644 index 00000000..a6f0df54 --- /dev/null +++ b/ext/openssl-osx/x86_64/include/openssl/x509_vfy.h @@ -0,0 +1,641 @@ +/* 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 +/* illegal error (for uninitialized values, to avoid X509_V_OK): 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_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 + +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 + +/* 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 + +# 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-osx/x86_64/libcrypto.a b/ext/openssl-osx/x86_64/libcrypto.a new file mode 100644 index 0000000000000000000000000000000000000000..efad9356379c37c7a396b2015173d4ef22c811e5 GIT binary patch literal 3492776 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℞`;I!+Z@7 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

P)!){yO8FRf)@gj!ze@QS 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 z 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≀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�}hG^iunSn}=SuGnikr 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 @>?^WOXznTM1)&Vt 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�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

S#LZDEsi%k|b59N@VU1nLkEX`G(Bp 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�g1OFbIeZx`dlft+>t=gFEj;2k4KqL4R}4t&jSzXE$fUF7oEgjBh$C>+ zs6@FDk^u`gvkQchrt&0v`e~-zJ2iX&!^z(K)*#v!PdcG5zF%S}bHUphwy~liR#Bfr4q634qSV5xyzeU<0{Q7rSzh)k<2I zF&Qkt+rghm^`a}_>yYHT?&N>K5w3sDq@WTvx&!Hf&zEu7Z5-aHN`22vXw^UTYp;@_ z3O0bx?j|dOYE%F)50<_D*qZf2JbOU8f}AA&<;sRkbYmpPt`DAaVv&^SQT2xv2J37@ zlRpE5F6fKVuwEYTFIajGf0l{*A?c>ohxWX>33}7>Ozz)h#FMmTY4DUVz%_Opnu}wf zUhrmQcxHAbr%k{JXs^ut%#U`Ewl2zIvo*MV(*pF){Qct4!1@l5**LcE&B^bJnr6{* zEAcA5%yd`0HpMdzhcx>M8L}|STJnAOqL0J%^MSuB@Wph2MSicYr6mQfR6Ikvs?vzX zR%(FTb(igZv+cl&b0E`EAIxU%w*4h`4PX!#9cHX{?a{sS!5)+GL+%-39l>Rnoq}LK zeAQg&=1Z8Pk!;evQw)m+j#FqFL4z=_D1qqla08c1!QPSE!(3tqF{}Y>X8HcZdIi;Y)u^)fUA~f; zV)C#gIW+*~$a(d8?LiZhJ^HvwowcVdCnG|n#JGb;8OuH70u${4JV8#*M1J8Xk(q7# zt+O+AzlQG0mZ~M@FOc?q9e^@vqv9u?$#LbE@!1f-cFRDnz-KXu z!U)6iSb6Kyo$scxc?dB4Z6c>O2H$>Sv(Rkqe#3ig&ihUwkZFwtD*1KeW+iudOl?>? z(i(R0rHnVMsAUxVh7Dy=qAP?~)J}RcNh3n$<7I1C)~YeLLlv)S!~V;d{?4TPzDJ*s z+K06hEipm+>0)L6&hhVA>XD}QO#B6UM=;Di{SOOaBx9jgSv6ZbZ}Fid>?A@{jTBod z0eAU(PJ`UMoyM|tUi^D(+QS1WdZ#*Z0+Gr*@D1Ko+y;0`%GJxucC>8=SjyoZqc>k- zUE%!}^cwUa^_ujxEi`?x#l@DJ>rCsnLtGUaH+N1DFqtl|LtSUuhbbL${h5Wp!7J~w z_Ck|;ONo~7agKcQtsWr!J|9Y-ok#Nomnv{Vr}*Fur0cV`ME&Z};K9KupL6+MP@Q2K zN09(NCVZWioL|8+zORFYa^zc*;PC{n*0!S&of>tyCS~W+e`S-FXW{s>mFP9}d!RQcl zcU1UbN-KwK?@-JeQWHj`G%Bmn6+W1d!NoZeRghWV<=tWPbt0c3_7~(!i5*3@$WRBW zy|8$>O0adkiG@YfpZziM|CZ`99g1nb4cu|0%zy#X zVo8x>iB`jR2Id+>#Ct=rC-RJXESAYT$WX?_&wT#f$HF5>ost`!$R+tRJa`66_h3X? zN06mSjV!F7y9c-jv_ShhkN;^cHXfa%Wbey?mOi7hv@bLI1fo}V{yd{IEk_6`$YWo0ivQ1kJKL~c@cspNhay=R2c zV-u1S$(O&~Srjc(YA&AC9!FcYEUiTLN%Ktt7AK$UT&W3eXm;6^gk8utO)hINUn!6+|=l^vAJU z&|)5s-$UxQqjsGIiD5EE4?3c?3%xIlkpXJkamibhKXkN8*#USf;%aAJ_D#7=iIuOb zzx=8}B5NlH+?#ugq}^L$gZb*;wEUy;`gd7dODqNNLeReOk#z=ff9RjbPVyqkbDYQ< zpGxMQ`Zs+iCRP<1gb*h*utUNVrU5JohQ=#aToWDk@dJw$7s|qd9k@O%Y?jGB@okSv zzbe2xv~rKvOS5;df($l~A@;A*xmAs9a-|CUzv-Fj+X~z&=eh5kRF{wuG5ehoS9KQo zM`-ed`HS7R471;d?{QJ5GX23nHk&xdKYy2?y}I-(uWk{JJQ4T3XsiAv_1?E+ z@Z-?}`m^AL2*VnkEfhd|Zdx1*9Fi~tR-1#P7NIu!0rN<0?%B@=5e_)vONCh2>P2~- z)YQu^!4X04!YMlJvE%IZ7B-Cp)K+5-GEG^JY7L*#%u)7jF^LJ}-H#7?5i)GNn`)xP zT)vud_9K`3VD-;DSv`L(p|T;C2D&8L7|Y~@GgQMMB5oKdEHQ}SWG`}3cib15DkzkR z?uA;vdq!fQb^!5E#x?W{rL#jh75~Y+?^7BK6EbnP#jy8d;J-14aR-=BXIe_o!t8q8m8w_aBGzqMINC1dLP)3&OIz=u^Eoa1cjIku8q6FZfH=LQGw zXi`EhkqC2XbPfr}lAc+0Uc;MG54nT0bx9=9vrtEJU6v78L!|Rj$BmqHXPg)CpFPt4 z%^3ej;wT_9I03|Yyub6}fZ~>f3W(6X7X6}~nh9Vz(2z-@%v z&!2e94*Fc0TT|EVzMw_%n%0&FpN{O@wwhVE#iuc!;Nto3MQzhdmG0c}p7cDM|7-~J zOyg@0HlsO_)Z2(1y}u32xRxGLC4S4l_vOKuoq;G6vPT8Wo$7j=-EhaqXdMK{)bOsT zo68dzm@CW&#)kfOyvKi)nkrB?lY47pt4+}-+(;R|N8s9+(VZj$qJgP|Wi{xBGl@DF z-7z%@a$LxeAK@EXE2ZKd{?e0|Yi;b}za@g+r3$_D*7lrVpLbNtSrn1;v95;O%}G{T z&L%&3H4`!(Ll0E~p^3t8Ot^E}&z)7*#5(R7IG2QiYGCr_RUWlh`|^-sa9`qlWbLD&(Yo13vvX(jkC95p=ZSjs`m`LrlSU2yCQ&u1WFNvY9RYIfd~x`$&*#~xD1i(n(v#E53sBBd6+IyVP` zLTjC)`YyDr2QQ|80lDM%06zCV970L#Ul%rbCeJ;aPvpd(@E~$)L*I7Kwx~M$RVNqB zIblRsow&M>AmCpDZVC#S)8!H3W4p}@f0w8ds_ZjlCdBt4i&)DPS@=*aJ=U@Rcm&@E&2bgIXn>2&aF*9ks>3jU-Wrrk{pckT z0C_Up>m5DtpFcXi+_q($<~@0&HYX_4I~~-+plR>kYoZ6qxHGk%-!9vi9f0ESdWYd@ zf=b-J4Ou-=SR8CulTPkyFJpvsGqZWOHf_`9qP&~qGibDi1^o9DIf*wJN55wG6;n9e zRT#6AV#RX)VUUDQZ9&l!as*L$tFykA$w2U7Zhu4!9gAZPF>TN;Qqj6UL5kvrKLCQu zc3Nnoyv+;u2Mu9W#H5@dVD@k94x!G6oAZ4bvMu74UnRLjOrr?v*~W}^lAnc!`%ld^ zbI?$-UZIb*BrMNGI91=e!}(I5YW9h<&Zp$LwIYv(MiUMR`2MfL`nZn9;Zr`2$*w5t z zO(r4dO!?F+Q)hGOW&8b|qeTg^=o?!*uZt_3c%LF&@kwt!AN1Ig2Y-+#=!|D)=%)OF z&YH%F%pK6KQDhL(GW;3v_p}?*QVg*CJ!51=q@JysR1=Q{H!}NBzoVJFO-)mxC6)}M z{-VOs@wi1A{4k}VA?$WE*IS+{oUBWSHBNhK*Opo1*@6-7%|!q`@dpyQB<>nPS~QoJ zE=6Y043(c$u;mtY(EZo3FUOo?mLz89Vcl-a%tP=^s!ZM&tjAS)^|296;)NPSy_|RF zfnel@4+D5Z_8^WjU`qWD40Q^KWO~elj#N(L&$>AU4-pJ@j6pq!74fl5s!cxsY5ZTc z=QAfKF$I#mNAX6K-y+vEBwL7lYy9SAPef{{Zt=rfMjCn?(ebh!Mp_Yap=fNC-DgLb zMmo{!@{%*h%_il|oTfqCmAmj*$U1aQgqZ zQ{&X}9;W#xhP-Vq8i~eyMGn;E6 z7TFwgk2t#vU4pF{Vz(Sy;KEjZepYdjzrYR<$;4rXZwKeu1iZRi2z%CQsgqt=1i7D@ zB;5Pz!6tRL3*GEz(?kuG*1(+?nK_jh4J4lF4mM$CM7gxA+piZm&(p(k@SP0IeAO=ENw!+&_8lj<5eZ%MDfH1ZEmSy4v2@{sAxykm22DSF zT95Yuu7eE+?M{5Y|EN%d58-wOiBHGj_}ZOj2?%}61deIp_#Lsx1&|g4;(LdAVLVTa zo^&z={8M-eoxCkK*;JI1Pkk604uG_s&VuIXXkHfBni8p7cz?b%m*Nk%0-jq8^aE4q z1nxDGmVBctW7aev%tl{ZRIHY=a_?1Qu#tNoT^e>blSGG$_v4{2AH+{(gHh2Z{DGaUKoYc#I_C} zljb=DTl&N zOZC|Dd2V!@K37XN$A4}>P)q$rKhSl1*q94#!yH_pEk_^mqdQUEcd@G`uh4m9)sc8; zwJP{?AtQ3BXlE-KW*>~OJG<{#gVCnj5uCC*ZIQ5-C!SG|;)s#(7~Ir<%CMN@hK^*l zI6Rm|F`b2ryn1777f-R~d;iLv`;#YHYNj<`rRD2c+=rjd9qfEy_1pW?Tv>cqGV3NH zJ5*c!HOa(A1_){6?dgF7L@s{{-}cIsI6Nc~I|m%GTVQ-*N@}`6r3TIA;?zk=i54k< zX!c46on$jLP^jsJ$iTl#4?+ABA?36?QKonXx1-!c8QY#JO6ro>EpFQuB4h%Tc-5b@ z&_$cB5uL`{a840lSyxOM-FFmn!guVn2qL_k^=RAIw8fRTGUY;J{KUABQsbH;q-!|5 z>;ck3+FkqBkK>?=+*2cX>Gx>rg$tS=(bg)0R_vB-i1y`dohM#Rk+D3@1OC%@e5QV+ zA5{Jff$HP0(kqp8(*ccE?;m+?GZ7CV#-XEmZS2RX)zDf(!zD7WIB@?PU}?OGW;_6W zbm&FLn*}AmZwT_TWl8#YV3CHV4utk>9SCqBcC6P$hBCD=+5qN&iknhnZ;=5$Z+$IT zNDkdo`O5XvjZi;nt-L`c@JX>;7^GoVzD3OOO9|RD3DGBeDzOk_ihV!Y#Bd!@s&s|YD z`0&JPF!qQZfCY4`}+Q{k@#4ew~EM zcDS8!GABGscH-;m+z9gHS2JdC8(UU0*jtPZ{5P2Ow8P8~@SLZp8)Tc1Ip5zsBq(&T zh6e(~l%<0LMQlM+x@Z?%UL_M8aWo zg*W{(Yk7gbY-%fuf9P2DP}O3z0ULiDK6V=tUK<KKQZ%_~-pz;r93WT6 zuZEgYBI(_z&NaQ2I0WMjmsN$~!3cI~Fv* zs|^~RwC9u_nFZ7+t8H-7wnD}G7#69cjUvnH9DNXEK~5s^*!9q}+MnyqL2eC(qbtBh zaUYw-a%yJ_uxw43-PZqnjV|8G#re)Qc^qWd^}C@icaQEcvXvXLC9LQ!sb%-Zw-`G7 zOt8*oiOdS`Oq3@C5KKc?$+OEm`9GwgahaT{SmU7=+rnFdyxFKOhO|Xe-~l50`|EI# z6^D|?WZ$nD0xh)W%3JC@@YpIevto~EMo_u1RWSb~TYHct@r0T+ zUYRcYyqkV$&)SFMmTlA`#TSFgrdl{&K)Yp+mQ|;4wjB ztZPy-w+ezIL~$tjo~*L646&{H|Lj!Eq=xuzM}db)jW64^hb&87DMSh&%~$9|u*O&+ zeSL6zb(Zz{A%(6Kx3Xsgk3@%!)x2Isyr~nx(;|`C&b)a-W(S@}LS#IBcJwWHC-Mxo zMAUKQu3=ssN(jZjHWDHB>eEk}ycK@+D`KlOEZ=B0Prq3YPiLNUP4m~AW`p=0dr2|4 z!HUE?a0XFbk~=a8AP96qZxtfTD@e#1QvC0EG#3)TF=$+nlyk(7QliRDJR6TH5YmJV z?3*pY-(=74Mx}VI>pw&B&U1Ui9%3IAhBG%O*6eEb?brdUf*=-VYv>snfjWcRwVBdU zq9b65OYplo47>G2nslyd>osRP-V;Z~Sm4mjOg$_JxwJ|=7k+qF2GRa<)Qg5k+taH3-W}sp7TdIOWtO&mlSanJK?Hq~K-yG5qzW8T* zwTzJ_r~g)b8eKM%-ZEtb#Wf@X&2%OZUi`p9vAdl3{84U_2F0&hZbKa+uDn10|7&)* z(^dWb!bmatA~GY%{l`*k`x)et5dVpHNhKwj+txg%Eb$y+p@lBV3xV8xRMM>?d?lTa zML+7BvDPQPA1q|1fdmw_<_GQg;L?Ud9olNupNbA50g~lO8;o$THpv42`b#VB5A$GQ zYL0~ltv6=Sbkjd)cTCRv-iUE6OVv4MYijjS(#fdY;ZL$&5Byk6@^fqMov)q+2W2yh zSPiKu$1bnMVq4yBv%=G^&vIPaHADl|8H|QS;eO$hUtox_)ungt#9*p %wpzxBLH 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/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�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 z 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

9nRt%A9FWuUo5MWD~28K|wNN8MUk*y?I( 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 HySkOi!wm{_J_m zUP^V6pnZ2FS@bu&{={EicOWcXUKp}aUQNIUDX-Tsf~%CS0kJMGs_1=A<;6I8<%L-7 zcX?S}1Q#%Zs=Rtl1a)~Gl}V(^>s>=MKzY51!CWO>IIHrakV7SXfbxRz{{doMUR2#vk)}?O=>>!BYu3z|^FhpkJ}NH0;H7p-;W1oKp&OdJ zM5i|2G<-aVoNQ)lp)vS2{@ZR{3juWnU&4pwo*P;DA$x|JF@PxBn$dtrNx0!1xNm_C zt`vf%RNQ&Dufy4fi!W~44!h*X!{my9aQ%J2aIprTNeR|e>GGd^anwZcJ%|~*CuLQgaB-GMk*lSzxjUaB~ZmiZ7<)w*!b;THP6QoQew!=cz z4pupx(PLmK8GRo!S}tP28#MAbGNutcknZ!MD%6)@DNi!5$aH1#S$g8EDBUs?V>^|pn&SDlMql||21I-9*J zO0f1?H81-E?fpF}YR+od#Y#tplZ|vt9nu7#V!;UL20F*YTsP3GGl^6K<;CcdJYNGf zdHKyu4=OKtVqJNV{CFHM7)f*K-X=4$I!T7n##7TVrHrSRa9CDVfvqu|I%d=7snZ1c z2rZjFQ4{QG2J+8!5zTT1G_^wbze&3f=wB}~1`59n1w?Zte%a#RqTR<25Pu^dAIN{T zUW5$fzX`Junt}Ywf&=dFBm8XoVi8QyX?R~iHg~gcInX)DJguj|{1apL;kEw3NwAFK zw?NY|AH^8DEbpMyfMCx1tW|w|1M!^znxEpgLDT8-MKkWNZ}K4Ma`isvK>Qd__H>n+ zZYc3Q3Tc_C_s5z4Vodn{^n=dm7qA>N=(44s^m|nL_r>?8G&YjrXD*()|@c(r*Q1JTKJtQ?>msG4CW@BOvLhSWkSG#%+zCtntGE$>+aE zD7q9N{c&HI{$2wl-lp-pH2zDC^PT{@F9IZ=9Buz5ENS0}f8?`7n-SxV`apxU2)*gI;~F>pJV$i$tAjnwdi;nR!%qnhnL~3Le#DzJ z&4Ga8j&h>;0e<4H={fb$q~hL-|9*UH0RKUN{>6Yhr!s#3K5=xvEuH>*BmK8TlqbCh z;)#v5&!DyT9<{!sddIW(CGzP44)hqh9aMq^{+nL zbCDKvori!67-kG2>0z}itOq!^;bEMLn0p!yuht$e>~YIy%n{iw=_x+9oVN0YzUy&< z^BY1DYm>a`J^@RjS`>qd>W|Y=y~sq>dVq^Z-mfYzn3@$&S*E9-fZS@XNPA+$y0`1| zIiCE-FHfGV@{`pJ$toTsKRb}`Dw02f2c4f+nDEj|G9}H;BJUq4KPQ{~95J-~RK>lo z{5;N!>JQUVZ8T9GAU}IhomBe7lgiH<)1ET&6X%_HmdJPhZAJ#(cA(T!oLaI|((G(! z1`aIw=+DBU2Ndv2LKV&x^< z+!;K!lqoOQ=g}R?M~h zArNQC;nth(g{?YGM)!MJPvKVXbS9h+g*P9MxegUxPEmeO@tbEQuZ!S%(i=c6M0iRX z6!0iVFDGOBs0a-~oaEeO9S8@mPrSZ%kLI((9AV?ZKDJfQ`u zcH=(cK$&*`hg#=jc&efoZMgo*wob0o?vDdzTZdA=h-M)F9ol^$|4pniFuHHo)XI+k zHw@z5qTRo&y!7+msonDja5sa&aRa!U_W-AWbGCCugRR30^nITLt#2nF+$er^nvVG- zCd;~R5gZEix^7?m*q@sBUG~L~lD-1mjZLHTKkGXE4bbHcfsW@cdUgDCd1U1`33NT0 zPM1qoI<9$kYdT#%{pe0Y+<0G+;m2|kWAZO>o`LU^BCSPd1EOk-oviVrHGVMQXt?KS zd&<8__X;4_QQH8yUZvg}<^V-!0UiR#hqqwH-2zDdyoZzicy@yLSsFL*i{=3*pFbkL zbpHt;=`D?OeMg*mO80+&Iq}y38IKk~`kxC(ceB2WfF6IJ+dWFWAC#i+P6STF`=hxo zGVStG*bz7FXq0wu()4xO-Sh)2N79>qgIi}t{;3xbA3x)2{c#Gyg3pjZg z^J{$g@mB-*`vLsv0RF`Q?pt0^*M^EmnaXpSs&1az);JXF@9R*uIc zL-$MB`r>1_`mD%7>1E0Dk?UwZ9r$_b`51XbMAsjKf7W#r&l}K?A3xXT z>U(?ka~);)a9u(3x4YK8Vh zxd+Yq&$y22MEGBV|7s+(6AhK=4X&dYbp~g~R(uZGa2-`%vRz#aq1OT4zPWyXK^|C4 zwB!8++o^4lD?qM}K>4Hg7*5>W+IBq!!vzsn<4zXbMS~rkuOYI~4Z-~ewWquGh~%py zYH__w?K5V^hRI>Vz4jU7RUqzw;e80FVs|J4zvT^otHD~Tt`4c;Uc zh?j14nT7;;T_vN1Pc`dh!J0c163(kajxR%@V!JTy25dcuKa*UNHws#7=focgZ~$ zU5b+-wWnOt5pLjiWYp>D;!jI2+}+l{hL7mOFZl-`NXGmQtS8xfQh5C&3rYynD(k; zRx>k(5{SAD>d}A%-T>Ow{Z-hh>X;d2?PtX?@v0WQvasFoCDnBYNd@S}6*ccNEwy9t z+)*(4>Q%;m_egp5L!LNEKgWW%pLlCg#CGv8(;cMBRvUKhhC}E+q!?|k=1M*URcO0X z72>JenJMbgk+}0}-&!(ZhP)}Bx?_f6I@?Sov7Cp@XUU6f<>O-RH4`$kig%v~BM1Ai z(wQQvHeZn$BhOYcv~=OA)O!P96{9T%b4?o5o=lUc(VO71ul-m}*U$e3ZF39;nr!|% zIC#K(ieEN&(^n6)AGtuUZ*=^#&f}xtZQe&eZHeBeEW32>~zZ-ZVRnDhtt8M!|A zDSqZ%Or}qa;Tt#)PWs32GxxJHyyla8J`PBKhXXQvifR}>=jHTwr^;`6Cjdjcyno4c5ce++2RsrGWnA80!Fz1-=sS3xKtNC=0pwmFp9PMN?FVe_%1PQo}M0BN_sTJN^&{H=Cxf*s8>_~}o}LHlZ?J@k|GJfgFlr zOjK-DG-hD~OWXBdfSClDM*=cdJ92)<|7?KgsyPtL@I*d>RKNzk7 zcK9oz*rxwg9;?2q=?BK(W}PM@DC~!N9-}8hE?9SfAG+R9$8n)h6)pO$(-tknuI1cC z`oZRkiu23ooKHe!44-0+GhXCp4Eo*-Q=tyhcy_`2ZX@HB(*{kk7W{_edv}5K@18&N zG1$7VL-T9W9?B*te))x;ZQWP>6~(AW^Xt_7G|I7Qf%ztcv+BD8?}nBk{3GGk`Bmf> z%D}(wV_EXYqGtJG{M>IN_m8v_agJ{$Jd^a)mo% zL2Ku58_)1PjAIE zoOrf&ACr79Cqpf=-#T^W+joFf%y}A`sByOl-=T!N7`zwrs?8O)`*U)0SLflswWSQs zR^h{T+iDXA?iBr?H5_hOg6bGg-ORXH$?JKoB|CrKIGX&pFXlXIJE>|!spb?rbvCY? ze6n|M*Uyb!&;-uV8{gF*dwIO#t(*Ndr zw_9$C*#!ARxPAh<**Km7hG**mR*qQVld;mB@$d}fF&>M=8u}v%FOjo1Uifj>$0$O) zQp;RIMrr2=Ms>Th!Sz;&u?bg>vxvLqwoE^BW8L)H*;@0YjE0@<`&UnRL zXX4uv&x3UXR4hjmM>Z4A^=ou~b(Y4;a0y{e3_ zZA{nQgs<+xyDl?Rar+m*8(smtY6{@hbOG?}TsY8ROfTl9q?;*yssd4Hj+h-R{<@I^JS!9)oI~aNe&eF`137YK*c* zzwmP0X;b-~aO9F>&~_$L6OKkt=XH6thxn>w_qV+k0G~?wk;r-b^Qi0PbI z-IdG&br$K4>)Y9pZBhiOtH+=UOMg-NFs4)Ox(?F^(?>Wvt>l|$q9>?5AmQxpJ_m7BeF6IlRUj~2tyNd=!=p=Xx<-TG}Mh{CnCV$6FKk2UCD(+A^IxS zI~MlDol6=`?xZ$QM1kh?5TY0=AHIQQVuhawUkCxI%rC-)Ic*l_D4}wTY^`yEUqAG-9#|F+e$^ z(K{dGsBgki`vVD{hQ;ghJLBjNm=9;CqF-;ekM;PV>T%9CzSVR)?h&J&at?+y^_5`V z`c`DrBhIW5u(@9o&dLSJ*}1T3$)Fi+9b5MxY(`DX(|OJLTVGqO?}b&RJ#aS5kf)+!r{?5JMMit=Ju^DK$DhLq zrwuiqQ^538D8WO=Z=z?2wYA*?_VE)p%h;<1(z8<|!uELK^?#JtcH8vHDEts$v4#a2 zMl|Gdf$maw0do}&u^uZ;yS&8iG%ypozZzG$k(n4TA9YtF`6$)RRaNOk>3np)mOC4~ zI*B%E`U;F8@!^uyvDUsbEw_O+FFL*#C!a>OJLm=1vCc)ue}tA1VHHEATgOUAD|dPB zsDC)KQ0q3c)6vQ2sYwS$b6zPA z-~AVKW>)I_iQUmu{7ZdS;ZyNcG~8#U;uD{X7CtX;P-D`^X|EiRJ=y5nOqo~}6Gwaldw8AJ_-Cw9?mwfoGXCE7;pe|M zsQLi0nTc3(%I?h>y(mC*a67$md(#Ua>qxOg9Lk;dt>hbLCJJ}eV4ld~4l5U=UB;czeB`f?}Tso5JhaI&iz92)iYDm`${qDuVdih zBu@)jeGh@I>m`0BAD)1C_5hA8$0qV=2r5?ftd7LJWeiR)Ho^r5bRi|-f)q13d|`XI zP<<7oq=t!wd=;dm=81*+GBuJFGok9g(Q?rB4ZY@iu%#dgy)?tExyIT|Xxaf5E@fP@ z*r|=Gl%Wx;nm{~t|2SG<(NgZb%?cQIAQ*T(T%UsfZoH(l_mE~p9h1Cs9*(6pvy~!M zcGV8UA?Do125m`~*i`~iB6hUN5(KIeWBs9O722Dgz#>l><>9MXc^&!BzS~{H3Y+u1 zBM?2etn5jXaQ@2u;X`FLvlr_qDdfw-OAly5wgXCjUKW0*{j%`&`g^HluCZhGl8(7* z?DV%}G5iTci(}N{ssH6zXtLT(a?i`3#nFE?i)+5sec=9N)gnZ|S;hY@vn3QFEtoJgSi_WJj(T6UnSvZEhmoliKQ*n4(D?1@f?Lm$9eJVj}z&Kip* zxt^bHgOs(K+5vjo`Q{{{wBW!0Tq^Ec_=KHzdbZU<1{ibvN5yrxHsv%a(>wB`c`J1WwsXgcq5Vb}o*KL&L zjUyGPya7V2jdhG@J)Z`Og|{PCj5sFOPJ{HGsm(jMR7`E0!`w-2ei^QeEc=+wJbTZM zc?f8wgs4OM;-HC6`<}7FQ z4YAbd96P){o~ppeaPE6>*#Vcvb3ble`ib*sYj<9(6icNpD;#~SvEtLlrF)}|uh$HZ zHg-2wpzyxayJptJ#tSE2=FTd<%()PPnOQh1a$x~r1TX>!g`x}d0rLR!Y!?q}eH+OCbNsPhxH`*qv7s<$mCg4nl(>hRz0 zdziJ1)eExZym;x~mpu<|D$?6ZcZ6qbOSU}Tx_jik$AG%9HTmJrO*@gk@QkN&wzj@? zfU~X!ak1{_KL1+G6PYlb%&68qL4A?dDK&r3;g5Rrplc7!(_4mR{&)R*N9sc?k+Hx)nKhyeN`1-SUx1H51337klL$>Y% zy#&q=P=ZHFD!1xXwn!>}g$(Y*n{biv>T-ndHZUEnow(W=DS-e3>R6b`FgaacL1F8O zm7aK&J9{YSNfhp_xlm7HkalS*(6rH`Ato^*mogKW$D}ID{9I39+F_$6F!JS1U`WZ? zI_`tgOdrOKeK!gK>5>j3nkqv#(%EAbwshSN8MQ95()RF-)*+NvJav~;#MDMrGBOlg zww8B-Kv1RB*NE^$i3Dph>&lm+?nWu`)?Ei%D<5WN=}L@FlXV$|&n^^ds1y_>>o7huf1MpMK?N%PBuYhLrAu*5dn`W;h`WBp_#4-1%;Aj7@55UM%@H z?8rQr7oQ@dfR46lysIji6w@C_J)`{0T~~*gsFF_I=H;7F^a2xULvAAn?WntUj)3(% zv=DVSR0?RG2Vg-^G^`1YOLYS&>8f8vSN*)5y73Tp)hJ*0E@m%MtlxihYi_B-Liv=a z6ThVnNE27hBcjgvw=@B3A(k6;F21D&Sf{M0qYl2@Nw*Nmi#liA^6<1V5X?+F1EW-L zTL=+B53?0L40@ODI=l3vW&ddsotawHNY!uo1{FJ1FM|q7d99T48&c4>tpE~rH?taM zmN&*RRo=I=R-l_@KbbD~o|s#U-?h*Y{YSJ=wWpX{-Wzkud#u#-vB-UfbCw(bWgR33 zqlfdW319KyBly`OpSk?(l+V#;xubt6UwN1vj{(~~Pdm>hcZHL$h3(X6OaM}>Sa#}~ z;bV{uQmoL!Otz!lK8%lOVQ=g15vWC&h)>6$Ba_87Yh+|Qc+HyUk$sJ4=d4-tf_w~X ztQy`pZ3NPzm|i@5EJ7U{&rykX1;qLuj3pl`h)=nlMH^n#g@)682DAv--jRLM#7(O< zlO;AyiJa~Lq&oVDeBF0u4V4M7v~2OdrAgX?3<6@|n|47;5}z_3%BVj=Vxnl>NMki@wAJ@oLhdQ9(W+|Q|e%_+Wh z!6BB|$wsI1obJZe&aT8Xmh&>UJ1K~i2~2w9XqLBev{@>Z?i~|3f7P3wy4W)J@AkcY z=oX^|7}Xqv2@*^WA{qJ=Byln%}Uz zO67lm|HbS}hhT2id?TPG@6U^`3HoUD!QLywL^L*#dzp5>7BJhn#TMQDUG8UNZ+;kWfU=tjvq#W{`cQR;eWvp=oW#lQqwU#Vhlfh@5@QB{4svb znvUrbW9YKzxjqPj72Jt~VLJCk|9Aw$F7!Ar0L1dQXbK?8d+Hv{MIpy7Y6GPG1VGx4 z14N%vG+M)tkrC93eHHLafR6*BXDGT~&GDY|a~5`Pf~3#n&% zDj@xj2c-QjC>N3c^MJ&c0x~{F0y2JOutb#}I~kC4UjZcD*>EJh3pzuLcM~AveKR2a ze*=*IM``>C6g&hDMT-E*Zyq4&jsPUxZZK#3{tJ-yRe+>F0+95h0Z}wX*F&)si{GMC z0nvn~Zbtr7ANTiw^fw!j{EpRl40!X?!faEhw z% zfc8H@Kg9T)14z6NnN9Z{fW+?vq&rnj=>J{xD71eWm7e%jfXv?ofGEnMxqvA0qLTqZ zI_?BOBzY>bk%re03El*VC>**15J4YW4TvBPwY7aj+aoSwUk3<&BP%s5(=ehTfVkfe z$ag`Ee&9BqQ^@#{^$squ)WUkMz4p5X}% zKmKF5_;EYnzB1rm6L3EwfOFD}KhK;Nz<(IPmjw9p?N-14*#Y-R07o^>pr>EI{~H7N zCjtD@KzJcsX1}Qt%XwHQje3q`Ni zyZJ{s(3@v9%eG1?Vxr@WsNg_msNy{9oM^?RSJlkNr8{XKo^ozQ)xzopyfH_)l}wzR zsk|F-pLptN1GrPux8hP>?l0P{6-$@lE*+@in&%9%hK*+yNP^cG;H_!_uDGAO5H^ww zt@d1@GnLM`g`c6QypXUo?d)n?O%Da=b7z*HGiz47LY`b$4huhTt^S;jh%iImrTs0O zd&mfboFtFAWStn zBY_%czs27HVmoyG>E5p>59EjbF4Tz*@lsmtr~Y*4SjDGUfe_RKnD^;G6!vl4 zUA_W(*^w>GSZ~W@`2uW5Vyh8?K#61bVQ$bWoANfLH1}eH2}VkJ`+&g>4zQCGy>d&n>9-h2jtQf(+Nd=mQGCK&Ac zi2n9e%So&6r5{4g zAl&di+Lck{o(a#MBDbiOVFD;yrcjvAyO-bL`W6HUb*M8$o7<=1eFyAeN7Zy}7i(h5 z5g?Thb$B+r^ zM9i5`rRXT77)wn$8pL)XGz&Ktz|GkPHE5uCG{M=*9Y5^{yF3vF?h1f{mw4A`JO`UA zA^?V%fFi%)t9lV{NB&a^?5=qqIE28C`hW~rHUmiop@3GN%A(#2F%T0QPn8uw(8UN+ z1=*Pd{e^cBIMWP!<_-naM%DLu6*&hA0X<5~7doja$vn~WmB`)9|A-v4d{yLn9Q9G! zqx5{~j+Yg5FknuJuZ|F^j9`xBzG(W+I|Q|ICp4#3-J=d1HRZ~Li!L&WuoQ~jzfk;| z1kmZ~8pF)Nt_5nNsDC4g5ZVe0(Rqi;{)aKAMU^9}D>k;!Jww~B{u?}!2z?BE-}sFL zzDKpL{E+oB{F9dO-7R)&=LkDxkB^sjLEs)m&JiVq^W0=K|QN|9KzPO zE}=)74_Bpz87q7uR{9EbjtQP+l8 z&O@e_h}tu&9SY8``HZsb;{Dw4AsJlyP!0Cwl(JvyjN(|%KSlBRAGp^*1Y|zl=T3d} z0-`{Aji)9+{TUk=Y8xI5+2Wx3?CWa#sQS!YhYkS}VLcE*!C))7ra)Idj4B^Tlr=jB zUn&!+la4~|+eap=jgv$Ujw5_-nGB6ht-|0>nQCJx-tZvZunh(06Pi1bT%UroR8#0U zcLsHwm4oU)sFhyWnx$Nfrn9KKN>l3k5*9R;yPDa@EpzDqoMv(@UfM017rGzS9Z>o> z2?Vz6T%r72xTE_Z(?LN4+G$f7)4eqpW%jFbfJN!3X`f1M+8SOzfgOI<3z2l1GRqTyy5^!0TguO$Eas7ZNly45+aK+)w)v@L3HcXywsRXaS7yHtXJY34#WI}^KzQ4*RY*#XmPjTyiaFrWiR{3@TwHY zDW`!QJi1ot@*NpvW2u{)AeUA8+ewxQPB^i`tFayGJF%Q6QAP>pQ}oc%w47IJPO|PV z1IJk5gNf2lpvH|YC&?8^`yuF-^qrHMbSyk23b7k4sxtVhJr)XmWZu0D-5(n}Mkew^ zBV&Kpb*n^E4!(HlGN&w{EGfraG>gnE<5?HWm7I#^bXku2!f6*dB_x?fU9OA_!5Vx`p&LqjZRmZN1(2OnpSuJTn2Bk9ZuY_f zeeT^*t`dFjPodBKDGMVt!ze&g&sY!0)aOo4Mntqew`9N0TO7rJW_R5Av#O9h_w#qE z)T%PlMFairiPZ0w;TU|8%g-P!qTkJW1SJQh-|g;D)@l82_a#l}>36%G88oB8>t@;B_3#`>O2l=g%hHlsQtWf*Ch z#iA6>jMcRty7^M!nj_!FR?HicB!a=WdFWuP$b#6aKm=cu^<3*I!Brwjy0Y_Fz;o z>dqLF(8DI2T?yyyv^F&p2c7T}(mLU)e6TOe@`<^#L!)q;X##z&XuB8{e9M_l9ehruA5}`Q3;*e zv07oR zN0Fj4ldw<;)ev(VD~af%M-X4pN9TCx>7zfV_0f0s(?@^6r;nZwFPZuR|Dry6BtswF zx8$BO+fzqxM}&QQ+>$OV-s@o<3K{u=xreG9f|McXqkoD8y4FX(7269#)ko(#zrQ{@ z*EajoM`wdF`shkpq4d%996DV8D@+Qp0I%#FKp%Yp90t-yrz)n>M{fcZ6w%izP^UmO zK!!fL@XDr-elcRn`Dk{1bb9km?mmp(e(jShs;M^|i&I#)h|gg!cfR_7Xn zPo>T!U!FP_NqqX~ijA7UKm&t`G)oqrK6*ZcCrTgvP<#!jkNz&iDB1MUdtnceiKmag z9e6+=ovPaUR;Zvp`V-#gl_@spqyGk(2YqxpDSdSLDo9BU6ZLcXDoCyMDAboI*`P)? z!M?vfI_n!$Jj>vSc_M0_tb_KUkIrDxwRwv<=%dprHbi}Nwo;@jQy-lT+G>ss2i8Yt=tIb2t&dLXA!St~BH*mz zf0b4B_+nNOnyjMhfcoeRN#>r?K&)oaqWi{{0sP>+QP;`Xl7<9DwKM@k(npsB;IO%* z!_!C4uM`zJMA04g9ua8~{+y58z(bp<{^a6wiee_R|DVX3h_DUZ;g0FD> za#$;UbVghhLZ$aiZOqh1zZS00b(B6v>!aUq^wF7~f%Va!K?sl;td`lXnr0K_Oa#+n zP7;Y$DwOj>D5kHjgVP)Oy9wW%P}9Bz-<(PFyA$7>0z!Fxb${h`-bSO9*B@zp%dfnC zp;BIdjmqn9HC~8zaY65zizYT!KzaQlD6dx(+wMgL&`gJr?4k%DL_ilodA$O2_KTpr zUI9HqyeE4el;SSL@0ft{`gfqbJ`&MV%Imy9gg;SUXU>LK?ZzSuJ=+{07$j#3Xea|P zdYce7izSuUSxOno>uJsPH$2VtjqIjGb3I%?7T-!=odx>&>8mrIoGtZj5E7ZJ!y^U#XzofH~?H0ns{aM=aS>&I{rYNld4bH*sP^IIvlvsSC~ z5Y9UKj~jh<=2&)pb_V({>9eO;Y?SL0;LZqutlI4{YM(YRuDa;Lt1duh=_UlZOo8IV zjFj;Ys>ojE`PACW;2w4BIQB=~#svb_E)uYzT0nD+fTk4!?zjfPU0a9$)_vS9M~G@n z@Qnhv8$d<@oI{fQb5%bNjqQV@PQCQ`uwq{itFxi#t`OL1k8-G3~Ii(a1=qoMJ> zx(-+qF{r#>v$_db3o$5w&s*IBtdm%N)LFE;(;dB<$WhLi)eldLKsEl`P>ugiuh$2w z{uiq8QyQ4Z;Z<|?nR{t9`Tk=awYyt%g+o2gmmHPaZPuId(v2)BG!RxP-Q-Y#I@5~r zuSE;DN;#z!30K72GknMv{CdHiG! z#fOjKC$lF$Jb#)y`X2c@%1S;Mi8`+ zADuugde)^iYh;Lp7X1MnYN{q;_F?tD?)`AyTZW=R>_4%31F$8h+wFjBCr@e0pp-$_DBPHRRD?-f8SOyj8 zDL3#583s_K=TyhPlJ_anGsmlFGdaedJjez{P_JX=+krRFD5q=2Gr?K3#ik7_fHsLsHbCogXz6jqQ(!!+^zXW zKuq4B7hetgJJx{%+&hy`aM_bDMj&X90J`U&~4CkOph3&Cm+zKFL+6X%XDSX4WLio%%dGJ zOy|DnpZyAiA(_q|knU{|DAN9a0ZDfSAo(xUcn|dK z8K3_IWc*s7j5Z7^(#?RR`z0X#wc{V*r(nu>_W&~9I|1qcCP4cCmd1|;gutZeeke(i z-=6?UR|QDA$$%g!`T!M#_Wuh=`YJ%uUknJjQqhx$1SFV64S;CMQx5^8e)(P~kJI1n zfaJGa<7I&4^B&5H?&AO%-}ms3<8zWsXieHx!h&oJwNliZjm1NeG4 z_}woExF-YdHw4^|3E-TiNQ@!7qw*}SGHsUhb{z#aN`)2Hai^8c#3hls zhnytz`ZvY%p13=|*|&Rar><==+7PkSJ-(dU^WN>7SgaHdq{<Bn4>>Psk~i&C ztx{>AdLriJ;}pG28+?MwEYfFSpSxr$%`Wq_jJsC}Hd}WAcs{6X->&8$1-b zDsEBUm6X3L7TsY+*{ww~^|rKkd?41g+7zy}nWbw}x#4i!B!<%$1wNsJFw*x(1k2mT zE$YsneT(%t?%3m%_sP9qsF~f&nv>l7#c;!71R&}F<+!4*d;@+>_^nNTj2r20McB9j zU)57BO04>`6r$D^N#SB?t@_)2y-m07@ZIqv_sSh^(IfjtwX^2b9-M6HX`FY&-p1$= zki^EE8<@UW>IRm3EOj>nkcv(XZ5uc5-Nc%1IX6jFr?#KU&t{f%7etTHzxXri#M*ny z@NHCAu=CsoG+dBaE8ETh1&Jp0*@Vvx>Jvbc+7e6si~$>gXdL`Dk)M>B+QkLS`u$?L z@?q9Z)2M|V5R*mHR4GWR#Whn8+QE`UNNF>eT;fOQR9QEquLH~tMbe(Ld=((a_s3vv zPs1QGj0tZ!Y{!R&^>bgVsk`8kZT(-Td;e_%xMPhWW+3^%`a#~8ngHKX{LDMMjHej0 z?w^(%aTD_HBv>xOZ-?f`_=+)ffp@4#|5NJr0Dmb!C!-$3ebRT&-AlG+h zzJjo2y=Lm;*%~+XZ-K^5ed`47U(fv)aPaj^Du5RS@YVqSj{qJC;OhhU)dBqR0A3lu z88?6Y((5PxT-Ub{I&az}Ih-u3qD1smz06sbo)~+_els|jv%);)ytq1)F_qSD%=!=9 zs>8hGpLNZ_$B(APX4>WFRq(wcM5bcV{3VyyEC^N5k6Cy4Ir?5O@<$A(oTp8~9J%Cc zYU0nSKFnb2g3~5VR?ik;T`;#|>80PDUsa=z+9F3op?`HoB+`7QJCZ_^qE*8F|^7tdWcfF-CFWK#V=s1|utl@jnnd&4(fK>Fm?4ro+VV+^)a zmu#@YTdvQ+m5{jjs{=;~hyOp^y$g6$)wwr5LxvC(*ik_7f((il)KLPWM7(6f1or3z zseq!D1`I){+zK-Wl}m7vn$0jmTRo+xw#_-Um7a6jLr*JTjEV^$30~tJ#cI4%NyiJV zEe5pA_xr8O%$}VI0Z*Uj|9`&qWb*EJt#`fave#OBz3*D~#h9F0eAGia$@h5!5#VTZ}!Ml=Dyp*sMr?ce{gaHlnp6{@1+KhdiI z_4+Q)L!x%>qrMJ#xjF{xhBcpow#3-h66?IksCkb_U8ky@6O7n4a4=KP!8E^B(SoBZ z+ro*6)fOr~xcq#bC$Ei~?G?1OfYnPeJy!BN1#$!UagPH%BLT+=j}-(m3BK_O7oz z0q31Z8ZjT(g4U?H0Kp*U9ZNVnCGKhw8L;2s<+-yr8#P{#vaI&(&5(1dK_>`cP!d+& z^6~l?HvMo!=m$JMFfnn<=zM!`^ZsGYU-t6uobXe=`!&VrRGT3|ZncVABJ%QNobcVGAmP6|e}A zSOF2h4o)D|SuUK;Ey7XbXf;IL&5r)Ly;{)7GZto@?@TMT(=2```ccrvQRDYr+y^M` zrvPH7KhF;&FAwKE!scIugHob`v-VpB>kf=qTjv`K^PHjPPy0l19H6pVb47kO!3^4^ zWo#z*AtS-!c4OmA49qaCYix+a$EtW9JAZ?T8?bFOlnTWT4ZCAp84RMv+S?-+;uVAv zzJV~lcOp)tcN+JuV~m9FBr8w#xx2ln;Ht%_oJ`jWd*96L2U{OR)YP7S)pfmu6~jZ` zwI7#yaaiQFd!#p78%7FJDzr?umM__PD_jpWnwjq#pm@UVjqxW9Mx7T7uMcPjn`Pc1Yb z^RqY@pJA4M8BPIy*d8ABb{J2>Y7slZ?@hP##~oVzYT$7_miDJyPPZ7WlFqvkE{AN1}Bk81ANipT8tZC7rP-2#_D z<2*fwrz^iiKTBO?ie6~c6a&R5{2m5Z$5%jmy2o7e4v*OQtT`bKqfB$Aw*P4+`U_7hE} z+PO*)$wf~}4&nx8W(7CLRaO^C?FGhd9tz-zW!aI_H*bsUsd1gb0oX|7C($jNXPqC( zTsvRlI!_Y&c$Q_u1nm*W)z7%GS`53aC;8RC8z1%R?bCqs<~X^BLmbLYO*1yI+woXX zY8Qr_shCbSz7LmIUn+s^1kN7oBD~lQ<Fuf&B@@wQ>WCoRR6G$5;ASkFBE)=e;uWQWe>-+_widSJ@r4^ah zYC$V+b}L#1dKnI0SK&j$7>Fl@?<1;e!ITCP`Qf6qH&Jgt0;I}7o zVo_7LxY(#EKqNDMo&R97FLF^Rel-R%HBG=hodpie^+rULg2>sR8bYeRqHU6selfb> zu*lQw#dM2fxh;pQj!kMbceF3g-%&^7nEUL8!n0T-t(FqeLI6bz0TeC7YC(m=0C|aM zAhUO(0;s`|6_D$V6g6=fLym7S5M+Oe9uT=DKFPnu7YSJL37H~W@w*)rV6{wA38E=u zyC@1PYE*N$$TjE|v1 z?cZ|jw+bR`rJ`d!3a9B@`>jSGFoItl_5{+Y>}UAO*g~Jn=`}Yx)1`HNny*WrOTN$I zHw|~6(A}^2r1Lu^qbL3w!dev_>s`2`@Ew6#o2B%`>OFMHFVhc$u3pjceF&%dI`+G9 z65FZh)O+c|Z$91|R2YE?fOtoNLIpoYg%N*S!9M_=0{mYA(L)E%2ZRbFaHGP<1CstE z1(T41iT_c--vcuKj{zCK9PkX_C4l5JR{5U|NV)=rryu|l{}UkNJ*V*BEBs+Vro(+y zh^7$e14w$>OC{vKFZw?Uh%ZIpXMh6%?*-&OG+MyGSzmJi*)FaFL=y;{4~SP9;E063{C41kO$yd4Sgqh31xpn4D+nOs z{RWVIT#r}H3fJQs+J*?%<6#W6q}Sv3T#b_uj$eL;r^jD~>+zcVnbKnl=&x3|9`8%w z2d}haI!^pz7yj=qyb#1r`VLoky9>{A(WB0@;(ybHA9UfIj5^aB?c(=sSNLKVezpr= zPWoZq!aK^VU`$n% z4HjK92sUeFkh$~bDI~{wiDJHZ?jqP{^^`9h6LIFsQ$BCZ!fcNUx5vUU^Rg-Cx;++- znVUs{cXqt%F=I!Mk!DcEdJJDiWO+~PF&ub2e*EAt)_Urk4M+H9{=Vw%%s8CNZrZ1(^^*fCUrj1T zA^2h3_0(bfQdN+}vZwWvt!kmluj-cL82M?3d@st~P zXA8Usffvg=4L_%2{`gZvtuv^{XUaRXIT%8VIxL8_G2m(Yo71pQ34(}G!_m;H7$z52 zjQh5L+=@>r+)@x7>5|VO#;iFLVFlHzhNPhA#@#I6N<})7My$OLbTG+f41+grT5f*V zZ#6Py&JQi`(^m6gKdem^LRh)Re3JFHrB}4Xe3DhM#TUKQe3BK2G%qxt-+n7T7HY&cT)=o0 zZgA?;_!cOPdnrRwlN{$MFdQv~(XQB@0^H#kvcn^AlgR26Oo(DJXw?Fw39VJe*wMv`Jx^Qo( z+saxkT%T>juFn-CLh)52D3U_|*A_Vmc4VP76O4pKJScjg84r#qFk6Bne0*h*yfXVd z%N~o{MUpci885;cm6Guj2yNVqe`dq)@n0}Wjs{66i^LJi%It%BD?TrBf>twjQJJ{p z`AmC;oNfQ*ix;ck?W4>!zWhP$OQrUoaA5Gy)PF%O&rW9A2Tk1O3UeSsO)nqwsw)Z) z#K#7U53Vu7kjJT3!kv}Z79{UzU_-5a$*AEB4XYtuEw7)3V%$S!4V(+uJM2<c%iCP7l~PEPoXm4b*a0MKij2er=oaKoeFp#S&_k{!rweOoCwy7O+?snP62=CA4O& zRk5S!C8s{{cUTD7vAXyAey1FK(LB3fVYGnD8pVfKeOR*xn=J+Zxnh!n?_vdtqnsRN zv!+ZUM2x|Bx)?7gm;7JC*A2(>3Aw`CIaL$EIeP=M#(kX5d;r~r4e1`Pu5)Roz zxbE}=qt$*ZRX#Mo?E6wKL~N!#MA5OF!fCo|VtqE`CwkxK+sLjfU%{{8ACf=wCY+{MDCxe!uU*lp`sq@>b9_=h?F)!k zG5A*~1?8~s0isR)d|33U99#J?4CVXcD45YmH z7RpDy&jZ41@Ew2!zyzNw;#$M zPI+mV!rPGvxs9 z^2ziW*N3J~DUaN_tWpXmV)j2VG^1RFa8{4mt`Zd-0TfYk28f#-1e*+tE`m$?>IF6Z zhwQ=mzq}lwYho1(Dl2fqLY5%nOd?B8(V|3JP{`z(@)gg=myN+TE;#Pb zibg6Ti=E=Y|9XGc7Bp@;y+2FioNn=_roE8(B9)LM)6TvBNe6KA37tN-F$A5GGD!}3 zVCj+-8HR3tnokMi!nGlv7y`O=J;@jKDqkFT=nB~(98Pt!v`QwxsuNd1F=x0KfL-c)@d{KzOjq(@uJoCWIDPJ%{{4sxg z?F>6!=awf@u{Azyi?>kraK)wAh;pK_VFHo({DPuAp$5@@sxecg*x^Nn!U?F~2#`U7 zq344datUM+uAfXYwqJ6g6+6^BdTL4C0pF`)i`2zcCxnb&G#U4N2Mo%J|86Aqq8tpD zTd1&)rv)Cg;Tvo9V&~5wUwV5L!u}Is3EwtYP3XnQ8-GIl4-*gI(_>D!WWBM0*9PFp zHa1q{$$kdOS4~dTO!Q+tDO54&C)jb3dN0;=N$kiNqinZ5Wl(Zttmy@NN@3D(SM^Jt zVOJF-PqC|f$&>8M-11YZ8KucLHk^a+VaFpVGG>di7l z{_>@w=zl~VI7{~&D>YqmpRaCb^-fgFzSx&2`c?!c2K^vi^m^ho(^&KgzWa;~n}C}W zd?+~&R9ZT-cObLL6FFteZxIbMRPhuhraoV+^MVM3y4KjCKx9bl(9Kbw8GFuKidwzD z39?RShtTtJTU$V^yK}p=#|XBXiPGM9!$H{4-N>!bjD?j+ysAqE>Gvp_$S*)2>qO3} zfSYJ+51#GKD$qOdPF%7r@rPwBL+nUDKqhj!z+v|Jzc#6kzR@&?ptMu?3gM$ci`Yk zr&!U;NTtkE$B($Ux#=#Hx(>fh_&tE%zvB0E{G9W5T&{s#llE?<2VjfLnvV=ZY6ue1R<$1lGxu{Tu$?YflVJ}_81yn3a|YZcp@NLE$bLQ*H{U$+Yd&KR)PkbR2r~JMTR5zg1Fcu`WP~V zZnO5x$3T->IXGTRV!Ii#Bn(nA(3tuLjOMS~#SCCM8~?>Tl0ms#1w8SI^KgF5MlnJC z=*MS0N2>6gJ9^B#T)&$^m2o^jl1uKZhd&+Ggy_0tr%8oVFMraBzAoWdRdEewKIB@e3dqHA@P zGdWvpQgkf0aGLJgSpJ5zlqu&Y4}qXi$&IQWa`Jr^be)PX>q9ur*Cmf~-b1<3!k9twHAm&AZZz=zQ zfM{ERf8c$gw*@{0Bz-d==3jxI0+K)X^ipoT1`u-yaefI?xWFM0Gu?JT^8c;E4}pmB zxu%W3p{26iL$5_)hzDhya+xf_Zhs{T*X^18pW#i4{$CXiAe@OX{H5K+cyi*D1)MlrwiCa^g->_k zx4YtVebpI%hbx?Ub%y`I6^={)RxBwJg4M#smF1D8%#*KEYgWXoSmpk2*u$K z;OBH08nRqZa_<7guU^I43w|65DCeuJXR+)_?k!+t!*xpFS@|{P-V&sb@zhg-!J6A7 zfu`5hm?8d{KPHDHj@!BA-cKO+4l!!Q1y@4u?Qd)-K}86;_a!09oPlg~k#;wM1_zTc zu@!=1dR|Pq*9Y}|ess7~?j2-3Dr&VFUp(U%&Bi?|z?3(UBwj{|wB#fNrXBDI!)~XP zfL(InFA)f_2^U*I1cnUu0PzQf3}sF@^9RNT?l;BL_l=Er@yUK2S*g0_+KPUUg}ra2 z-o1V2yx#X?N$ zXG)e`NwRh_^)b*{ANj0><=+)G@FJ=rs|K1_;oa51FA(UgfgcjDQ8nO04T!a!2|m=o zN(70+6wL1m77 zwzs72^R%Q~6%}IXWG&0i7bLy1NUn!pwtQW6HHGv0my1}3Csd7IctFV2JFf5^h@7V7 z=}*$~bhLM}Kgz+p3I)Rcu1m7UHt1veR(&W0XK&pzB8SX*)ypD>N^tI1wF?x%v$Le_ z--$?B()Q1sktS4aOvW~ygSq5r{KnxI#4m*3RQ#sn_rH~^hoEx*w{kUkd~LZ}$oX@e zQuSVn)I**mSGFuHTx*f~@4&b}7=m8C2!b%JmQg8Wrp4*gv&CtiHQ?=l+dz{oLyv|G z&6N`=L!XN$l_K}(N9K2xp&wm@0Xh$6YI_ov8SamiOXG3CrKm z*%6DObJEHRP-GlvvgVJOknE=lp#0(Ua}?QB&SNN>UebeXx)0xpTymkF3_zBkWA?I~ zUriRelS}JWcz1H?Ruw)0oO8*wJ;|MWmE6hv3#a9>Zsg7_N6Te*M zerUDC^XDj7qM%`_LgPm(N{<{fhIX zl=k)HzbU0tORvYVh?`4;89C6khf;`h-K5t=?8`}~#5#9kYSFS=G0;t)5eMBN$0`=O zB*5&gm1%jeXpBGOda^@t2@KUqYOZtgUC3q5|E>LrdQSM^w4A4Ldh>^FDcrHjc~e#U z)^c7UI{O9W&{fVm>V8MfN34w^`gYatL}u_0T`|j1F3Vmo&A#t_fy&o-6>Bf}aR^?3 zLCD!}G}E5sJl(HLRAjw>avAuc$aGm*>`BgRR~6l)_)Wv$r#}&72DS?bwHtv4%5(1h zlT9G>!@CKCD6iQAnwInMC>;Ix6Y{t8I_CeB^Dto`y<_<#d;J8u`X0is>>+&IQNy`1 zWAO-?RK`>9-msrBcw}v8ykt0t zKeJ&4{tJ?#rlef4z=D7UeS2E274yWBkd6EPu=;}KqbR0<*;7FtX}elY0uN@^ROF4% zauOH`VHHGX56917TK&DS{TEjTX`1QSGFXzHlVz<}#HT>`IyG`)taC`TpL|R5KM&!# zYZh2qKp1Hb<`#lrmTJV4x)#sl@Dh{0Y)!Tb>*O#f! z7mJhD>U6nXx)%$4?N&>vC{s)6TU<`zD;IceQ*;RYIEhaCsaJd!iVl;1i74K%EQAW^ z-N4R`h9!>?XYW5o`&##LHNu5qMeHcW;r5pz!{Zb2E{8;}5O2h&eN?7bZ`rSjY$Pv+ z(Gq0z9f46UNk8NLi2a7ie#l@tLJ=xEatF5IM*QMU3+8y)(Oa=zMUy5llPEcl3nwa3 z0{ObJiX{UTnr3deqJjGmtaa5}iG+**hH`P(-YM3xSj6;e5XxcB2(T_CzG)SnqGHdO z(V6d#rwQ~&aeM)E`gt-_Z9=CYT6K!raH zm`i@BS2-Fk>AK{vP5FG$P5d_X)wvttxz2k|Qy-Nh-Nf%se&P3q>t-Ick5biN7kPwq zLHs(^`NpHsEdt$vW1zbqbo-Bij(hgn6&>qeI4v)g%5|>`;rRi6BUL&09)#0$F1d!~ zp)P8RqF3*wOS#GS3eas;bbLR;X}(jsuK)3FoNBeM$M@x;Pumr|A9Q;a9p76P-PCNp zm-^&6xibOrz5=}fF^39#j`xl=;lQ5&hXOth$nakRGW^FXJg&lv04Yxm0i;~VjqP}s zfj^;rodx&@z*7Jp0>r>5><8j;@Fx5tZ|0}S!sE1cVG zFgFRT21MTuQ~)B%VA?Mz1kQu%rvnZKWWFhfk^U_}((eEyJqJqC{}_;Tivh9kD{vbi zs$^&xAZ96nDGCn&qU{I1p>X6?tVi}y_-H`z&G#c+{N?i>VLSW@n-r{9uv)=63YIA7 zR}etNyBLuv2OgjY9Q8=V>+z#|NQLWu+o|w5A{6V`fCk=;p5Jmkk?~7Zc$LDd6@I6R zug8g98V9616@_Gc?aouUUwOFY&LsRD^k{lNzmOyS563` z`y@9$ zm!s}X!8CZz6rWXL&{ocH9-Ul2q!hBo{X1&*l^C0M<2iatiT|%f`;2XWP0od#JaKNa zXkYRsW82H?4p*Z{Rg;Pi$|s|CAo#`(^?HmYT{T7=*mB9g)mOlt_(@pJEIMcvKP?H9 z$v)fpT7Hi!F0U9M1XQZ+9{23p=D$@8<{fq%eti+w9OInG@fRugc;G1=Y$i1=Q za`3bgHyjBj<{l|agh#+Y+xuBGSHHvGE*w(HVC(_zwX?X_(X{jqAl8wWpkHANqX z$+}1&JPOw7nu4R6QE}PzncB1d^n)++9X*Y(7|i{B5~^qkd1=KoEp`^|>o^;=q3sc+ z&r3qDg!8Pg=<}@N80$qi*BbSUL%HGwymq73!qhc z9)5zHDybRb)N34GX7$yu_O+Q$Dx&bYe@7_xmDhNnIh3gK`d`F-2wz|^9G3j8QD|71 zBdn!uvW;y(lF(!Yk&;vt?EuF{lWZGKL|YJ4)Iz}AR9P`>hH?YHHrrOz)NwcC!;YNJ z1Qz)0($G{dl^RI#O>;~u=j;B zZ!2#4oS)Gr?#4lPbNwxzRH9#gIB`oKT;x8(1B;HWsXd87`Q+BGW?$ruWWMBBvnS#| zxX-LRBX+pgs&R>Hj=-v<=q)RXaC*0?VALpg+5nCl7|d zVU7BW>R{HW&ykHY!rqrvzY<+&priAgg1#d<+qLXh)1Ce52KK9|=vTYZuh_SmWxry! zBV)@(?I;_y6L*M)Qcs6c&$!0R)YInrUI*LEx;z=o1GULee6@40xA!BoJ=Su_E-e7W z{hp=bQ1nG%dxAKMvCC=jjVYw}`J}%OGfkm!9b(xp3&kXlSyRv0eShTUZr!3o@jh&N z(0t(+g=N8+Fn?Iq6tboEPMHWa>K;M`H?F|H*y>%qjM@kA6kpv6OS*}1A7c8^I37Gj zZ^E8`(ZQ%WTdq@K*`Q)Z7f0)gqCz{pkwNPR)a;24z$tc~zDGl4L&qtJv?fg)EiY@+ zbtWyiu`!~6Wp-tOX_v{$k~P=|6(%;c-+=tc-u^GhrP(k|XN?sjj)-5x4eg(a?209O zXC*uLX>h!w4jpw%jb}J6)bVBUtHbu{cJ8CcIDp+cR~4)spS=SCwL<$qPjWKRc&ko7 zWKYK1Z;G6_y9B+d1!4HG#BYEfPKkdC1bXp1Pqe<+Cs-pEs|+X4_aI1gcIW%AyQTN* z_`ael`&8vy&0iKoKe2bGo;T`#LPizOufL`L>vgB2qK%q+;geXI7fh5K5nuL_gDrWH zK;4e&9eKvK!?BO@iuTRl#5-5wcN8GnYcK;_cgralqHp%X0Pcq{{M^fob>=O{-LTQu ztwfjytdMaKpH_F~DdOR#6l2K8BY5m3AOC^JJjBO_wC1mh+oDg~&89t|0Y&qO?G!vv zC0`YnNG@nc|Glx5P1@ z)fcub-otY^zn9gQ9|JtE%FiQ@Sd%YY+_nn6pws$dZ)xow3!e_GLg@5#e;4-5q4Y*$ zhN?b#O6G&B53KwWxoeOuleY);ZeWGjlYCI}i|X5s{(++ukwSYnY#G3mffq0@w!625 z<0QpnR}aOq)X9kQ=x^{(PuJLPFSP7QSl8f*Ai>DagJ*B7794S-q!2MISHm<`-vCrGfq0V|N7M^4bXdeK|646J95hv==a zB#ZeOOfk@IhPvKanz0@*?~+Kh~#kn$D$9CjEo>jsCk#UuwJIq3K=cL`eTEew);OB-XcZ-Ow}N zU*XrJ^y{pD;WT|HCQi4Ij%N^PFnF|4l_XUKA9{8}2(34;Jdq5-=_&Ffs ztp_As1t96l0IA2OeJ69Yzmmhts?#IFa?w7bWJvu!)WQ72jWBp2T7!ne8b87};7 z7yg+GACAPG>5q2db6xc8yH5H6E_#MJ!;i_{L}==a(kZxVCv!|k`@qVCQehseNj#z7 z)X{})JmI5s&>0U+A}$MZk_Zo2xx01Am|MC3i;oNOoYT4<0=YSBN#$*GBMa|v+sbpY zmD<*x4d7)P#1P3tx$7*Ir#x-hLKVVc)*|hbwwpII?d4>`6IBzZ9={#DqS3syluq1B zR1vAv8eP12xLkVOt!xl}hDx2`_^bvZ{q=vp3e)S&8pp6C^tu>EggaKf?)i$I{Cs#m zfPO1@bk*xFUA$~=MWj5sq-x=kdFAEdpo%KMXobwto{CQan5jIe5kV64q=((4_-Hss z=S%rxY+ay}BINg|kPj}q5`H9(A=y(6xC#*Q(qj)Eg=7BoPk9|P$fbvM>t!XL%@Sie zU6(g4%7B3G!u^Z|*Ijr|^B~?@L8s#9{QmRBj+bOdrCS6#e-Cu$fu=XUU-%}oj>Y#3 z?JQ6N9EH#KD+nO)Zvr~MPoosha5`2P!~I0y*a+yST?rnXIKHJ>xEd|5n>3@;X~Rc( zcUg(cqRR}9T}I0+x|~BM^6_=f6Bb>fuSMf{B2GK@Xh-LG#*-2@d^kOxX#DGrC$v|k z`Qbfh+;NU4yr-V7MEu8l1~X>05RFL%DIf`Y8c%3=g-#C|TNFR(E5-#KB)mr8f6nnl zrC$O#9yGbe6DF0FIl=MR{t3DJhUpEMV^YIt)VzR)^#%@?!H!(bBS2~onvLvqLE}28 zPFk?mA`}szpxzw%1f!-FWOc2+pNkV#r!TL7g_FPF<|2ROCfe_KQrPb}eR)_I^FY{} ze0YN=lwPfC?FZ${mnYCyC~r(-VjDc5x!K3Z*q6Pf&ymZ)+%$r1vCgZ5M(GYS^>oc1 z)3E-s-aw|1*V^UCV*`gH>_6J2t1DPvD z7@nl-0LUeOA5h^BBT_E;y{GR|0nV(^k-u>BtX5q^BPL3g~gXd#8}{sOyTzKiO`+`%a1PE&w^wQOl|@u zc2URfRw?81NkN0PruLRRcAv1lq99q>Jyp;i%ao#5F^8#i4q=OSv`Vc-ghXI+7yGqy zrUV|eBP&K4u^mB~UCLf}YT&@Y<+gKax78mvCJcz4F6x%&iu0p|7VqZ40)d=p<8GNO zoJCJN?6IU%ty3cW?^lo00CSCR%T)NQfVsxEX^P_{N!NvcPvc*!8rM|*x}BFdDLUp; zI6eNUdrU^alk@WZijMgePSZK`clRTpp1Tj=RKB~UyAdTpUkI!P#F!E|4-lMn#}z>u6Xf2o`hEHdGk$uC|=m5916 zK(N!PLJ4=g-5f(3z;mT^{$6s7 zU4X`N5k0zoUygbXP4hu?;cjMz91iTWTu=MRES0Z0D%Jw<P1xSms9){dd%Oe14y4^$7p=0`k|pZzgKLx{4rz9BlPOW?ezCU+l?P-+Am2<@z3S3{R&JW>Zgv(-IF}+Wvp24?l z?fYU=SkO*iT?mtRSgFTapHXuflCk3WD9OzMV#zFM{~3nngYnXa{VZ2(b(1I3UvuXL zvNxFaA2nXvwB{1rw2F-dS^E|cY`-m{BQs(92=bHKspAyyT=foD^MzS?n$=Hsd><7m zyijCK*4*yH3VS~^^+u|Y)Q&P_6$`mdk#A|TaC~taa4rgWNiA6)#ZIar&?1GgL(TFBb2B&_T8e*kY*E?IJjZ8Y)EY*>T;9q%wN zA}zd>k>Lv#r!!2W?eZ*OBga$BCYodwB*sk!yT(oM%v`!BY#Q8&JqFkdp$~Vh33Ag3 zcA*rw?kVPeAY4k_X;loAEGzOXFLsoqcIn8tg*UddFjTy2)yurYFTNVtIwENGif}qV z@!5Y6%d)&|t4kTbk4%baMf=2F#gW`5rmj24o*&@eI&3S64}d6#Nr3(GsLze5f3+%J z5`MI3DE}QdwW2G7x@FUNm)JoVmH>|pV_br{{_F~Z6H~i zO;RaH*kB|{5F}jHb8wLj>A%w?T$Ub{O|n36Y0@NE6~`V#RK+>0k3L2FLd91{PQ?bB zI!?>_$du$EP0)#VHp}tOVx7aI1IqF)84()wJZ`Pr8n*vxd0#|5H()~w+I{t!dErEK zlS{s5g&Zuc=e>coFRdMtEI~8VhwSXq&Di955lM=8oXt$V$__aO8P$6RIJ5*Yy+McE zWKAe-SpMJ4dtS&MMxPK2Saw{`;6(obis`7H?~1a&q01hMUoirgCXbR0x#KUGHO=M9 zhHG`+5=o$nX}0Z&&z33a9;iL(Jwi{EFSW(BmD^)(AL1IvAOY8|wF4oTp$SD6LFjZnvLjXU<`U?6P)bs-1I|zliK` zDS>-aOX-WqUpPH) zaLotUj`)7|Dte|ToTgX$DsKGecaGmIw4K4d0nx+){5}E?>;pu54I}_bw?g_4{th7N ziUHBy0v9WPKcHkOA@w`r`v*wJwoP2u!zkcD)2`HobB)g#KEs7G%o*P0l%`PZ$kUCy zh*F@Lh2+e!M>Q-vhVaax!|WkjkIQ;tm`Wdi+D;L)K;uRi!AAzeJkh1xkutXUQpdg& zZho1shh~%@_r4U-nf)TT$Mc4B_@RdLa{z$T_}3kuf6a(+F_kWSTrM0y&ZXB9}g0@a9C;v@8R#^(~G zk9oFd4kp*+Ya}dM0BbTp>oJ0Rn+XQ9E z-jz63cx|qH?qZn{AZ@+ia>1-bUF+Oh&$fUUCEBa2W$i#}g>A~8E~6+4<%94P#&&TK zGkFPW;XI6evKDS6I1frmLvp1F5on=T7x(~ehty&!-*x1yA+qCr4KQ)7YhF` z!=sXA_J^TSZ{M*fw2mL2wZ^?`M9@JL!?3TC$Befh9--p5m{R1*v>sF1DU#(5 zs*gCR@1qsBx;QWy><|;rB7C#(6hgS@DOW#wV!y zaMrhKXDH7aQPpUr(RY$3W$Sgb>YKYmEO|!(E1MvWZMV z^e~BD#6J*JWD~Hhn+@-ffO8QL@TEDDkpxVkVh)h(OK?Myhi&ERS$Uq32@G0!7dAWzoCj8S-Zznx)p&Szh6e!v8H0Y*F+q zzi{2qKY)o%0p%RPet;_hPXhclAbR`Y>j5eMTnq>oI0F!W0Wbdb1w4d6%=rRO05bk> z07+kmf21!4B%jj(8GaHV`G0|O(|?bG|EXX?!3qT@DmYxhuQ20ayrqDcvIc^Hm{$f4 zz1SB0Nxx`-r6XMj%GTzOAj7PmJ=r28=- z^UeJT2pYTuknwH;#MC!HTiq<*-$k)K0gkP#*DZkb{~;jbQ?JVS*8#!>Cg30Ib2uRD z^E5!#XEh*L=Fd^EL_xoT03v)dAZ1wHU)BSsoT>ZQcN7jFoZiQv`_C-+l3w?hQ-K3b zJGLJuPQ8E=|G~JS8k`?lg^LMK&Nr^1)=X#!NqQ>N`B?^XW))K;_U|iIcw(F8h?#|eenAs{6yMatZoG@7KE|EK*_*nl!> zXQ<-ulyk8iL`t!+j`Y6yIEO&JEkSIzSO*_jCa!)eLHib6Ca?|)`951KoU42@rvKCH z`%lP*%v&?_#x80$a6)}7^{waCsNqhRo6Q*<>bkTNc_zACOuZSz^G?31B6P{F^ZqWG#UwQ2&)Y(c= zgM;sKpsN6pbhQAv=9imP_{)H~=BLZ}hT*!4?@_(}5zyq~-_!h5-|s;F!s+>4j&tB) z5~%qg^DCUD&oSTR{B*0LKNkM~1^PmzZ)bUg)BIiY<)5M4oDWfK#ou6>9>T~JxD62F zOyFt-M*?E(34DlpB>l61@EY6%h@n03h{OZjkKY@30uT)|PzzW9cnu)qjRs`AZvZl# z!GKIBiA)l<0AlP5JO)U*I{+DvU5_}&M5b2?2p8b|gXwX;Y(aNTevgay*^#< z3U|-L9P=vI%qcTZk)27;Ttv^(2<=xgI5ROyW0@HbpQ@H)5|usM$y%|3o>1)k<{-!?u zFIsoEzJMY0baNJJMdyZ;P ziJhq%drDhTNz$IuH$k+Y=^vLpB^tf@f8L%_98E_~NS2{~)Q5eht}htV`8xKLSaaF- zlupR9rzB2;7#r)6jKi7|$7N|vX|>y$(l;{Jlrr4)kL@Y34T|Qa?I~@9M}usc z(w-74*W*dO#Gm0&T;lF z!w)nSZkpd0F8)Go0@b@ewdJI=J;xsHC9$YSx0m!?B&qBr{Z6Nzv6m#i5B#L2U3d0~ z>X8!NM-nJZBK*Hejf!94IoEj~u6@zX!*95Uy7z3?-Mo?G;hFf&QFeHaX0Im*I(^TV z$|q_)`<^lKTZCV|nkO>9!f86!d7qVPe#m@h(W!HmJXc3O8|~Mi3I;y~$objBfEen9 z{>}&Z9Yr@y(FGNLzQTtA;u9D+5s>q^BVa~;ui+nt{=jbmIe+^RYL0q4>hqXxB_Qdj zm%}$9Py$H27!aL8*by*1o-5}72WftZf_?=7g#U$roVV%sOnsV|*O35@^+{a6N4+mn zzxQ7t9KmVFXD7bEh0k{3rVFoi;s4^oTV43;E_|vBU*WdUo%RB4wEttPjS)-rdu%E!ptzTqRXb1|NoeO5wlH4)}`4N8l}-zVKRZJqT`=` zj?vp}IRA`B=8x}w{<)Pez|T~Aw&SAo@@cyZ8b_ZI^G|de;f{4b;~Q!|+lD-#e`Z|Q z`R7sXxU?%iC5ppVWQcj;J{9ysIt3)s(|nQhO*-}$x&w-z#6%z0LBeYU{^y!6@|+kG zt^=grEZ2OI;aQmjeyoo3Mc5fQxaL$C*R9#J^5odNYsGOToFK96F?Q$dop$TF?O=Ch z6aGbmVj2=V(reX+#C+3?f4gsD2{on?#I#oDUxN--o5U_CIrh!Mr{-vkYKOuw2a!>@Q=M~ zG{4&~6l=da)ZCsQ>f4H>!+m!@$@iy|=HP3@&Ife|{~-sR2)&ZoFlzbLSGn*R8%{v@ zQF4;RmjuDr^$Ob0XXo)ngdmT3?mRvU|Jb{IV2AQ#mC1g{WGMD7^80RnS>I-n-{+rX z`%UK;qnZ)B3o$$R5BcR6?n-9bsNI>#Z*OD6%?LkAekaJ_9QhqCLvF-<#;;|Uqz^(+ z5}&&ypW$`K-pxZvhNzO9oGD2^lq3{;4~2RUg?d^P>a{1?uQG-5qfoyDlMenf?N)PL zJHJ2;NH1ls>tq>?S{q^Nb>tfx?gn<0;@u*Ha};l)49QWvkus#*7qs8bF8Bb1py0jT z1wV)u9DCP`f}f=dJ|t7{lQRWJ9XuV1y^lJ0A9e7usDrnk%+IO=kI%U0SK!z2ApWuc zJ<4z%Ffv4`YY*CgG4A8R6WqYPw(8^t4zCC{YIylc-KjX|z3y-d<4KhT-xA~g-7vlS zC@L`3z)`>mHyaziLY$JCgGTM=c(B`=_vgpjhxKnla9tm~qIFMK^YKQnh#?uKz;ITY zVV-2jE+iQKr)K!?iebN4yV1X$T>2>fSNE?bI>qZqpjQJqs04<2surXZ@W}+&=0yV6 z=mboaz{#=pKK0B+fgFd# z+VlFegUJMuepZ5x4D@nkAkUEjUjtJ>2K1}Rm+A5yBi&V%NHaQz49<$Rd;7D+%k+?Z zR(g)~MS70(^IYls9O?INU`n$&L^xeF--BzaL=WZfxrt3DM|e;3d2N4F^T{<&4}$R! zbSyfRPM7(-Unb7Hb3T_(-G_7D3O|9T(DlTzp@H+udi7|W-u$tZ(jDtOXT7Ky$&YcHAe@+F&~=`3 zR6U#KgXqHj2fm9=r?Q*&>PgSGS>HBWfkp3-`3K*XJ z1_q5t@7UG7BSS@i423mlaa5dFOSVvWg#KrO3<96{N}nRj6I2U86i7GEt3nnPf}_8jGCL%NrvKAbxAU0=Zhr&4o))3zM#i4WwkoA@`_!$!AcCh z8F_B}Er@t7`E9`lYnoUq(+7j=?9vAtx4H;+wb1tv2 zUa{Fa9xW6sxm)x-5Lp#7k?86z`t&vZpQb3@E9EK|h#y^fU}nW5w`;z*r+$86ZHDbo#)XMYFA zqZ{;!uZCuXst+4$Jw)-}ev5l1>TR2Z{N4JFRe_+v|8|dPDK4h4GV6S-aHkP`2~)LBQ;Md*nL*lD<$;9zmXkK2gU|X@(TRoA}GQlV>sxK4HT?ahW@MjU-w4c%qC0x;o zPKo<0#zm2I<4F7q+9^S$4yWBNZlXZF-YTpj%x=)TDVX1%ptR_dt%A9{=at?y@Wv+V z`s~{t%Ix{*j<~!dU%VmJA2C*;KYq}`UX^~uiT)fn9JOx(H5)EK_C(%ruAw1$7hV## zlR3zC3$j5V>$m|TiGv^YRt`eh)5d6i;=~43Q(Z`SU{558JYu5 zf^iU)vDIzjfz5FsI*%U3bg!b_5Z(lxu?d0m_?)#=Aa#d3fX0<;UjY5-SjD-*tJTN$ z1i)P3-OUH7cRUln{he~2r_)K#2Xn0Rhe5wZ>4TXc;k5oX2mLA#6i}4_$NU|QK7u!d zc~)Q%AatOCTNFNB;S&J|z@LU$F~tZB1Vq&gK0)CJ@XaFLqF^H+>FO1}6p;L90%C3v zxC)SZ+_L}+08avB{5-&cz&kNggLR+-5PF=zUO>z{0(%txsKW09#QJGqHQ-5rR{%2I zvjNHPX_Oo1odUE6PzYEK$Z}i{h^8j&0buSNI14!R#ep{wiTUJyQ`SSX!XH&Q_xLk@ zJs{Kh9w7b(-=XkZ6dnR3U5WCiD2l(qyzi2b+v}Om4nVY#0MBu-KJEjg{`wX`*2@$? z*2e^eUkJ$f%slJkZ+NN5dVs?vsxI&fAc`*bM-V1}lWv`&o3H5RDmqKS(SR&}2_RVK z`xOKb_NIb4B91{c~V&${&{_41a0IeYZ}$1R+j*r7Jw_!tZtAoB=rF2V6L3 zFwXEfE}Sb!&Tx*bPW(C-zR*P&1}xs?S4 zFWLZbMwt#ajOHn)=`xrIn8y)xAvS~DSw45sZC$ng4qn`nyCi*{RqU^2u2k~!k>oOS zOlk7MC36?a7*HI7jD)Ll}yFRO}UQJEQVQxqi$O%pEYiDak&|ua-A^3k4|;G`*>Y;5yU%_5;htL zTrRut91uKyhW0FHcdAC@XB;?kpk28#3)&3uA2C2lWz z2oG|C*T57^{4*P->^)xPv}5AD%YfRBdamBq5B zahY-gogSBmpq%8V-La0#)SI%cTbO)XXuwAsmmy~yw{wrnv!MH=E=XTj3)6C1>#3BL z>2nt?V&D=g7wGlayUf_C5x%_WD53c1gNv3E{Vmjk9BXalt?@1VGaJ5*{~eSV#EElz z@g|&`h|h*f<{g;5kz;=$;x$%)PLKV#A6MLtOMwFVn|kUGWdsbe$Yaqz2fC`t+M*~kwjVRwdGelsw#?%CznF8Z@~ zbg7g#;n}fG5^%=jAYe4Jfnmv6r~)ds9ig%ce#y|w5xOcnv=yk?zzKuUk+V}f;+i7# z8T^+S?b>ji$}ey~D?7e?pKUrmx>xhua`khq#Z3?k%+CT;YRcaJTj- z_bYpprX!H+ZTB0b z`WF;@46p$4ehrAfKt29ZpOgT^rzWr*5cFdIBI6y#Kc?FbNcxW9nu&<-*E>lDsDMtqurrOKbG zT>761NIla(PXS4*^-87XZ;D0&I+^lE7v_#+#$ym4M9eI6&t2B0%QzJV55t z4~Qh#sszNdm@n#f;+{`Z15O(42DtFcT=-HDI_do`e76h#nF|lP@HH-ctPAgO;g7iR zP8WW&3;%%&Kf_g?y{>TQ{8#ou<)e|z{5P%2acC&qx|GbZ{K3_+!SHM~sih?KmIgWi3{Vk6G|Q z3$dRNDvm;2m)&K)xU$TCHf--S?dM?KYg5>Hg*%oGXV=FLr=lmpmJNkvlP#so9YsmY8nc8iRdMf%>M>Uun+~JL0 zj|9vYk92TwL&~!Y^o-;#cr@1IpPc)3aJ2(hbVVvbby+r5t)QYhqT@Zh4-lM^O|VW7 zQ18*f6<=nTId@c5Toe#9JnTi7S(og?Ts0r*6{_Ik^qL#O#qF!V3BKFW$K-@bWRG7o zvw_oWQB>S2{xAqoH(R&+;fcGv9p>l~ zvObsH6#}8z{IL%!;Qg@wu|K;J_7|)`9#)}uIBM{FWYoZPMJ7y{-!suIK|3v*mUCIN zfk``Pao(%Vs2z_8L2*icr9%nGywU>dJ}d5p9Dv*1)jpFmTEGNJz=FPDg)(olT1pD& z8MNp4iuNQ=*FvliAUM?#+-&dfyusq6ZYWXcDq92#R9~&IVwLFsWAq+J5lt{P8(zl$ z4w{8e_a$_vPuA@e-R?`DaqnqJ!d8Z`kefvB)uPk%+iZE8Q}2q!>(V+(8ovgiK!q)_ zEBUI7nm>d6mA&wYT#6=a)bs+~l|F{nUW7+TlxWn(HtZm7AA*u^F}7XHO|^wq-)3kJ zfKKX#paQEebi53mo@e#lffll*D7BrfNLISH1y?QL#qRzp`umQv$T!h{3%(j%3j7QU zJRK^>$CxeiamorEOMr(H0X%w2?Jqk1MCd)}@L@HX%^&u1cs0Q*Q!yRC1B#A=LYCIS zK!mYvAa1kBkxeu8eDuBKT4%8fRKdL677VxC?LHEHF=?TbZL#dc0+gHMTl@(=VN}x{ z%idYLZ{^um#ZJpx%OH#z?s_su{V}>*mBUP|^+G$o7R|Kr016;m9WE1Kvn*lD3fjfk z-ULYzo3qL`@Ai4wQ#V7RL_u-eLHq#@z+t;X#LNs_9bZ9+iHnw3)0FX!^rhS_Q%UqM zK(bxl&*#WS$L|qaP@M(Y=~V0ohyvE)_bdE1VBhGCcwzJLyB4YQ99NcJo%?^LNwqpE z$+V$a|FX391Eb~;c$@3~!KN84+QiLd+a}=K)D{^au1t6x&G^1I`5sd{&D68ew}sWb zv>immWV4N2h6lEt=n~m#`TE*KtBvjKC0i}-iQIK0`CVaHEp2}z)5axrx{U*MwsD5$ zu{CFSeU&_S{w56CP&z?9(k80LZkAia_pChM9QCYK(QJ8la!U^v0$?~4S3saVYX-33 zwI-^m0iA;1>H^0|#0;kMXT?uBxT9BOk`+s>ttyVC{E_jA>)K+6PFOzLJ`{WRomlge zu|uaXKgT{KS-lLKjfbwTGAs&gp6V|>4_U)oqdqJ4-aj~1m~Ouqd$+K;!)MuT*eUl} z?H?GA8c`@@F^4-t{$i^y1e)_THDZd+e8aRU_!ytaYgrvu#XnGmXi6 zE&D}l-Mc9mLOa+}fbgdo4g!QfEouY9>bGXo0_gye$DPjdiTO)Bzoc%wmC6^vn6)^{ zFT!CFBtD>Sc%A9BV)?x^mAD@>6V8k_|9J>*$`lWUb>H;X&FxiZ;;rS&yCU^`2=}qj zxG9)U*e(iU?~tt@!)KnXM!u2RJLi_m33-L*+(q*|ix)28!ta%y#dBB62ULP~9I@b7 z=~>RNuo?I~<H$>^E*&G|dp0-UNJboK1>p%;QCh~F$l$9fV@)8){| zL_nbTBeCAH=&ye+W<Pwg*&wpdAoV@|zT_SFl>aISQ62 z=vNRx#QPQ?bxpcobJ|W^j{`>(uKRUF)2n`5qHx`Bxs#OfbwB0A+qoYKK?3&!((S~L ze%f7w2Pb~M3*X|xsY-UzbKj&BKgESty68ERaMJI0;k7RORToad%^6=QWW+eVaLH}u zODdKw)0>gfo({h*2aYS2-B})8vhWVYNQL9-B#+p(!)tcCEci0ct>T^(Slp|Gda4{` zb1QDgeI~f^WbQ)jBZ@4a3(eVz%Jen8G(fXriMSwrzDvI(w)UumrN+t0@3!dN<`t2N5wtuY{I%@!UnZ>db0wPRj8Q3-D|^&aO+$zB z`0;}~4ZpovFHU%;{~bUlqg%!}a2n_5k3S4U!X2xg>PP7GbmWI2$}J`5^s%{HW zj~HS-4MU`^36EJUd(wOHqe6E;@mq$0kNmX5*t$SJ6OO=7WWi-Wrw}jvJcKPf1AD5F z1H?<~y*Q=dkM9&?yf`lna9mE#`&u#e#5HYLnS*FlXeGEx06REM@}ga#x_HfgT4J15 zXXe$6Z*sqnIG3>Q;~^+7mQqdoS<8N44kikg{RpKf%YH&g>T%Hk)eVr?>{I(e(6HVI zSW_HMjC%^L#C#Iuka=oEIT~4i5Cx?qb};n-xlkhiH?*GA&S3HTtKPy+q;vUoYN@5H z&sv6jTnSbXCWpXBa;*Y}78sdALj?K%GQ>*W&Y(O`J;++y{+pr!T}{HJTFU4;M4nH772iFu*}Res}-FerH{<=FTmjD3OdaTW(F-EqMy z)``XNUxJM}VRB&n(%;WMw)gPh=%vgPYY*8gSiUEt%a%KY)S z7t)kV5|L_E3R5Uhkb$JM(2B(wnxQkAl+X(np(Z6wNwt^QP9!e03?^MN48f|n+ue0{ zvtHJ^qW`Wx7ix83N|CfE+GSa-;w1to` zOu}ojP~BafIMh9j3NY_}oOPr#Pa(y`)_1H=m$hX7-3*^G<56q%m>!le=Vg+ESIqYz zf}UsVUyjAOZXhG_mspLTr`5P9w)kFS_Lr#7%?!!A;3hkyG|Cz6A*g0`f0~yI1U-31)pSG2u_Pe@|}qZQ|)Pvm}xIZgRnaP!!;v z{7I4F26vwcAM}vg`1$8fWs?rh-ir zU0eR~H(b*73lllHH0&4VG6Pm1+)ISQmqKGID#;KAs>BkUl5Y#(`kjc>p9p?!@L zjx}dr=4RX+{J{hyCZw<-E3qrl_d?IR;u7oQk40*?{~Vb-aJ}kvcxlG%r=eD7hSfeY zdCKu8Py>Iv_JPM(**&l?R{OD`$iEr4m_s_&cd&N*gK!?}LuUM{cKavs&V6PB^FCMY zhmbd)#UEjoY|rl{sO{rz7r2(@_~TeUxC>q-ac6Hffz&vRT}-$iCXL09=0W7r3b`+2 z0F5Rb;835_p36Mmk;&KIJ2}#y;LJ7D9vI|1+yVjlzrhBbZ_E6f6bMYojqXp4KGpp- zE@Di`4`6aOfAs5M%`KYDtCO>r|VLqPb5db-u+lEv2#K`?wr+)4_rSXv3=A8E`>Z|N+T6_P58I% zPseMM-^2poQSJdiM#VEP)EFn8xX}DbXt_i=oxB20|g9EqJPpobH9!@YK30nIO;$q%` zc^|>#gjS?mcS_cz7c)1w^pdN`8%pTpS&4>x(2MQ)o=9fv!=A`kGFHYUT)S;{dAlcL zgY7{j-!FAD&c-x#av(8`JUwhG60~sb$@V3fQhn*1+i%)C`iqM$N!EVy$<0gr59Ra; zcOPV@cqlQ96y|BiV+u{7$z4~SdmReM;rJde!Yp_~>=CU~5$7Yx?4%q#hC%GJ0;uv zK<{(asB*9{)cX>amztJ?%HM!~P?%j?3 z&vj4yVyy4k+J~yslUS8O%?wtBFh$;iMWW}hNc1FXG@!|eAYqXRophmMk?6_Zt-BE8 z6^FVPB3$w6$5GO;6o6`J#U7MTEK4NnOgZ{0i!5re{+}Xv@d-mCcLu_T*gk@+NBy_; zNlm_O&ADcX#I*ZiG}giVzP9$EJEKpEXJMb{#|Pm@Wch!QQqj6w5{Q&7SjCA^%S(ik0b#?Dc6Vf+A z=}YZ)ZZ|TYI2O&YGJ*Fc6H>iT*rkb)w@7fE^k;pgiwX?ji;ODnv3g>pPTDUDVTOE-Y23Y#OAeC8Ujy@hk4a!&ZzfU8b??kIKTzAxhMDR79`<*^erQbk zE|Tu;jXVZD-wAlipi7ee3zBrC%A}lGn{{^&y6vgx z39rZT@e~zbz0{PG)}T2zYZf*eA4X>awP-~4eb#PYj#N+HjRmF&-sX8&a8L5P7+95m zgp&=j;4UR+FZ-UR2Z6IGI3)gtXM4YX>QPQ*(KUd$Hs{61x@IX1yRMSTwZHjMD1^#@ zo?OWP%~N9i$7W4N7Cy93yAAhFo*#=G+qF7<@viFbccV`H61>yKoF`?F_k9BtFwp&| zSdXN4Ri$sNedr+Kb1y^4_;7UX#0TAiF(H~XlEMw;=}Ava#NwjLLZ}N7o-i^ycKnIj z^p6p^-V?WUe;0wdoPjaTr^7k1>FSQd-L_n`0-l9?k>!P3Had| zos9A9#4@JGn=l)a>gwveH@pG=j+r{OZfYGVB@8o6T$ZAPI`LF5^5%$lsrP2@(uj9; z#EUG9crsFXi+7%PzGtVn+9`^rzG2Q4bLU-o)%*qVYZo;puJdkr=LPli*RS+$S#d%A zTte@b3+m?p+L;~WZjJ#GB=c(iV~Qlvxhl5qvqL&vxGxBN#nxT&O1}g2V){R0ER`@< z<0y7ja=r77|XBgH1z-Dcp}Qj z{1IdM9DS#cgV3XV%qKB7XgD2tKLufj@@aY(jn7#~tA6EUzKOB^hSt#-POdwhIBw!o zN-p`hW^zpVn4e;-+=MKj;Y;$o2f(*d@55rg2KYk$lmBt>&&J*X8s>9=KXlIQqnN## ziS?JYfQZ_(>42E3jGm(ScQNBc`^N#RQ7r!)kn}BTpHzIF;->+ghjpEQL^(sJKDrU` zO@P-ZegqQ~Slf#(1|+=(kn|s*swMs{lwXL5{srJ<_;(W^q8x1oL^x(lHE`MqjLq<= zMZX5f@O@12HvwX5HToC=i=sE@~y%jrldvx0lv@Z zV&Euq(Q}o~dmhdO&h3x;yZ*42I3m`C%%k};;&^O5Is!YvQGRK@pziZ13^Z5aVH(+b|AgYU z9=`^Dk#6hlW~Bp&c@1c!+jfWRj6i+!gAo1%h%P<6-<}YJ_>$?AN2wxtOe<*}=ecE+@dC32!5ZyCJ z{+Gm?6S951V`F-AiFMC4n_6Yrv7mlI*BT49qCP-m73|=Qd*Q{E-2tEO!Ln$9Sv+lR z-_*S^U@bCSzQmH{OK*~3VjF!&JD9h0K%2wbE-aX?-V8+!g5r)3i_3~=di8B{Wc3vx z>DbaPwBRbO4J;(N-UY0=?g~v4!s4DNus&^nuZ*Xvfe4%yri_wHzBbk6+(Gg6-_WveA!`arZWe!e zZHlj9BAAL$L`~t?uK{zidLyp5YW{q#3Ugh!hiW-Cl|R35GV8*1Xy0h;y0FD*%?Hhq zm`c}$AH;V>W7mZ zS$L$W3atyDfdAYJb{PGs??V>D(t?ME0pi0ZjLnudU3jb9$h@A}z3wdg7Uoq9ohLH9 zap()n(C3w*OCvmv{4)MywZ$xDV`@;Pgx5`E9M=~DYwK|nSnoNg8X?yNnbds;x_v16yDYL2B>8e|If@-XKOeKfyJvBrokqz+CNmq z&ObJ0j)@=dr~7>}_iiY3e7;(A^_od+E;L|aU&5rb@UjT>0#*rdO6Bz_oOeddYlR_| zZJZ@u$5Xkt&ML$moXy#{&PwIL+kIxk(~a5Vb{^v>vzDAD?NURKKr2h>`hn##Sunlm#mC8z$f`;?pG?_RZ^f8q+~9Ss zrn1>|$L50F7Dp(?C^X?@@FHR@W0<1!SQ&a-8G5D+eXtBYuXG)6j0yj+(mx7VY#t<| zF4%vE8RI^$HlF~o*gT1CH{S~SOpnJrf(BzyF{SqJ?$+_SrvI3E2iEhAcy?95w;p_h z74SU(zMU2DeHDB=D&TtoeEk*hosQJWD4*unnD|}_SsZKhC?E4pjGYfDvj3RtoA$i9 z=3`O0_c3>Hu7Za7DaOhT-Pg!;=N{LL@-u(MSbn`PXBR$v&Vz7#&2e`VAjkFB0&Ip47Yko+k?@?Qu@{yISN|2sTIT1B4(M3-R3=K(qX{|q2R z&KLmXyudw*Zvf;xz-@r!Zw8ck7R950bbpcJX8_VYc!hr$5LHT59uPsO*#!t%%^)D{ zGYZ=PVQP~2LqDP>21t4Y5M{XrVGuk9A^82l$N!f@KF9C2pLng}JbXrz##0M=o8tS3 zBOvyB{b$AVfHW*~GCnt`_oU((K$<>0l*dTXuzn|hj0g!AoqXOf*fInKsvyW z`hW%1S^DGPhB-2>HGd6r=U-9ZaMgkCx(WuR^GV#qO0}eLK`KfN9!>~JxvCSmfaW4`9_+I{G&esc@!Db zaXMZDBFl|`cd5KRDsMU>>jtsX@oyXa=a{z+iS#Kzcl=8)_;9GrG$cG(^G6^5Rv19e zACG73c!qjPTw_tTXRZlk9tf6h%aK$GH^!U1jhoWfcC6jBxr1-y5$i zAJMl`^jH~sTNyg~PGU;+yXRv=1daMXroT7~t{d^xSHQ=9_v{Mz9spmY3?KV%$Sdi; zArGYghAExsV%QUB{|!@W(tjh){u}Bl>Aw-r0LOPz)dmP7{WFyHK>v)m?Vq)Q37JzB zQy5VQAoiR~Vm~WG3z&6y+%Mru0R`3c8f>w}jJVTDAldH^EKgy|-^Wb*&bGMFG&^l6T{=yzaEsm=zm?=S zQfNepy{dWOD;+(RJy4E$D|A9@6NnTju0Qx>+QE9A47BZ_#b0eZcqs}g4dqP+9K?rq z8!b+<9kl1}cGE4)AS!gqJB$z9)@ee}zjE`y!y2yH%HMLj>pIkEfmCiDxEdcPO$70z z>47}9ThlR^)4D||LWaEY@BNvr;h~xUnw?k#e>LskApE}+?%VL8A3_M+c98P;Fnp{h zSr?qF`J=akGA$UK2bJ?hoW~Sh2e?sU`?IPK(9G^0VWh08#DC&@4i}1WrgknSNN4jU zg?-CS*`JIa!u!oSeS11KX3?cMZ^~X_4)TnwPY#^%D-^j$nUs&P9@@JJfAKy17yW+E z1gUol^}VF>4xERA)NMlLCn5f*pZ1^#_D1>>qW(F2%!B&#(6xQsHG&yX#Ag)K%e_zy zFmT3F_#s=(Wy@WB4{Ki$-;~=@Cu$fui_NL)+P+KSUT8Ljc7QpVo0QDWH%_v@@i)%m zEDea}LYP%Byt(C3!}U+( zB7@=jwB@qVm*9R;c+c2IUP<%YVX-%kzxbXHSr;QzL3DGF#bgUxTgjG%L8{4?zay2| za&C~iRmA_b6>kHCWV5$SH)XfrB;2$Y(TX}zVDU1kIk1g6aR6jDCmyu)k%tTUY4l-3 zbvGP<4oxyIG?;T0<}&c~yuvAkAuS=+2E0^!@mgNhbDC8p+MK+$SA0_+e zC6-}L15@cIuxWaj_SCS=?_pr;aABWxdKUJ!4&xXRIiOVodbcHRRJ#fL>?;O4>>T=F zeNZ^>*Zb4yqL6CqfmCh^_t5$gJdVwghk}v3*+vNmrN%_^IQI6Z7g%MpxJ$>rB1d>P z%sJT6eJF*6kQ|N^V0q>=e8dvErtJC6)K<&Yl<7=jUjwW+hfmMBC zQ-y~%P1&C6#w^acB(cc(V^jnOu_&6X!~S=_dJL?KvL&6G%Apa&2?|+SeQk;hsj`@g z%eG?GIWIerO3Z+OWr7^W;~A2e*E>3?`!&)j%3*1?$DFZPB@Fu!%97?c+8-^&P_2ZQ z%kY(Q&m^MZxXd+yPALes4`}207F+XqfP>olLmQ*3=P zuk*V!Lahb z%)AoITYz8J3n}+3(saK!%bl2UT*O!?cC-QRDo``sy*BZ3~~V|fr`=ZoyuQ{eBQ}6{iVv~-v|C(%FpsH z#->k^{QN5Tk0`&E|Dxsd1@L*gUajAO=Uo>(4>1$p3HM)r9N!byV|xJK3>X8%99#54 zKvXr;W&o0J8X(tYs{pzF`#XHc_|#_{1%y@fKL9TPd<^h>z^#Djc}7< zQqEfd>AoHiRZ=tph$({TnQDIsM26!bK!)SQqGfrU=h7o499NZ496$bz73G!xDJrvSO`ct^8o4o zLO_P&O@Nd$6_DZhZwR{(@Hs$+<8J{k2IT#LbWc6;=Kqb- z_z21nN*Nd6xIlK<0y=u1Qg73X|5 z>9;A~3`qK7#iM{sUxZEEa~#Zco1*wGK=@O&6A)3U=?6p*YB~X7WPTfMOic_3`67Uq z0B3)OI2|!6!}uf2D;!jqQP`$1rZA$=Q#cHHc&*AS98{Q5*rqV1FrpAZ+;RUs&kxx4 zG6s9jtK0cakjy+g>Is_VuyE(u8GqtkWP~|{hq!H@mlKD)UF!aFrN;ni?!iO;3=x<; zctn1+pk6)P3LW1Q&9A^q-1aZNr+5sBN>iu&w*S+jxS^uGQrz}mCMa(EBR^4jwtp2- zdLADS&1%IXf_dH+KsfPD6%ZHadZdd#5W=xXCqO?E!q;r$l; zj^V^NJe%d>+e7r3A$dDPbe=zP-K%~-U;eZZ{hkoMC4{dD`S(c3KV8N*BZAh|-S(zQ zS@H01niReNh3y*3J;oxi_@Ydu_FG(=THdPXDSQ@nBD*l0feKGRjL{|M(zzd@RW?Ef zqhoH_4uCUf;qXg+(AN@R5@+tFaBiV=c4;IQwem7gvq;3t5QN`Z zLej_>o510PrOV>#uF-$vZjn-VC74yA*7jS20c&VAVQ_2_;esufs!SlvLX~}|JzQFp zCmbA99b?@n-GReFz6tBmvxN8Q3+1sYJ%B%{;!kqj zEu(V!6&_Q0)d&#U`7x&4x|`iMfWCm3|LOjdh*o|XmA3=!5}T&^2%k0~nxclG+`8MK z%454o!*)%ZI>E63(J3$bH;X)c51qeQ3I9)r^>ic>$B%I5pTD3Ne3++9!(!v4@t zG5s;mUyK`?0qBGCHqqz0AIQNDeR}Cp7?)t-wD12zhB-4|B&}pF@+I@ z0Ai0ZM_}Jc2DtQB0cmW1m;GQGmJiZnL}3074{>WAR6L><*8nUo3gKLEbou%2 z;_Pp`xVvAZ(EmY!b@rhU3v`7{1Lf~Mxqi{|#MsUcUHL3!wx^JH{Ou{=aGG9X{{EEW z?c;*t`!lb&^2+)``?$H|edDx`gRGe&cwjL0^kxTYYO(hJI<=C_E04u(`)KRXO54XJ znn{#5nSNuug#GtKG6dF?+n?E@a&{|ZdqH`5$iw(`j49VX+Qx?EnkLUi!ZG0_8XLal ziIvtd+^y8cYqrW@d*rrfj%azMybWEe+tX0id^@j#Z*6LHc{1uartyubyiTm*b0Hrl z5X5rrZJvn*vrFY=kfCn)Ds6A~z;n*Iao-KcRBn6AB;-Ro)(>o#PuBd=+uI`hTy*jL z)t`4X3;E-?pT}e=O&{mHWbf#N?(>;QP&Ao4=LqE_v-^_Schuul-gYQaS~CkbJ)}=5 zwGzg88XBrv9M43QNPQOL8C%{j3i0Jaj_MV^EW~Ho0)^RHI#7%4m~}NR);{Na`&Pmq zOI}chj<#9MwPpBN&S~Br;wu&25Stef*Jyi{ApNYRi5pr|ORl@#94!RqQTO_~O&h%} z-A3Vn8G3rF)9KCYZtYHYZ1Kd-^M}VO;G2sywdV=P^Y<3;4XZrO zpQ7p42fo9~$9xiF*N0RO)#c#feEn+y(I1JP3W%m{#?QcvJdC~wNc<^4&ZiG4{&_&o zmw!g_0YIKdyhrg3fOLNwAewC1PfquX6^{ba{Y8qO0Z8{#6leR4s-S8oAnLZ7euLL= z9vXE`O{db6fJlRynBpv#@ULdN;wK=Fa@azkZml^C2vW@+K$x1H_?r&61CV@OfLJG! zd4A$a;OHyX#FQQZMBe!03Hm2qDjWu#cwXV4!i>T;g)xN@g#hBN2aY*kAHhS@j)(L0 zw%=E)_%Wp~wRCMbXwAEaZ9mMO2W*2q%|m!NU(fX!nz!L`$1kTtfQ(;M{&k8ElNpBd z&2)c2-8T>iPacrwZspGi=6SrFTjVMJA;kw3XFrzoh~ftTf%=B|-) z&^PI9jDJpILGf|uocZoJ)bvOGkmn>i@lDg%`C5y!zT{(vZIzBkoAo2I^R#C*Q@-i5=bIs5lKQcgkz#?N@ zwv8ui{v^haRaJ9@i2>y|a-^bO zFl^A~hUxQpFv0GQ#$HY64t}vQ`-;7=6Po8oE(vY*9-+c=Bk)He%5Icy$osoBK@JoW z;F70+w}%N71&{;+`1_fyK97H2SW(A&z;GfFQtt{GJN=K+iD zODs38>Bm(YG#dV*{qjc0&Q!q1aZOJJd>q$wRlvt_O{eme8aG@Do)_@6DIe28Oo{z! z*B}Q^N57r@F2p%{86fJ_85bx%LvgOt;7D0?6v8+T7y(4R7X1Mr#{u62--*+=FxNFvNZJj63ZV3_{I+XTaYMnJl+$3w$4i&^Ms7y7bdC%Y`d zx;<>&7VLf(TrR^}NqeVg{t)+8$w#neY$coDMON(@e$Trg&1Wg2@52w(*sk?>iapQ= z@9N&tX_aI6Qrb6ntfq>~!aftH<6Q`yv!>%{_b50D9zpiqIo7^{y&#s^E z?1#7&b9>zz%Js7c`3*$yz?56}N#bLs$?JDxadc;;pRIkyiuXm>em3Pzh79U|M7=>I zLtss-xy;d`kRQ~`(V~SrrW|&kz)HxY+^{Lv&)%W(7%!TZkPwZ&A>yC??D6!5>{NMO z>Vmh}F)4dWhi}|{y<)n8^`wn1X=HyVeNkK)!$Yqh!{uQ1qOBt9G`wqzhm?4Z=ncoOn?0d>inty* z#RwUaGA)ND~2?Uysw0P$4N6Utwk= zVBOHP_%@#898JG5KGx&Zkd&_MVZS52c8BfvoAaQ#bM@|>XL0|bUX0Z{JOww@G}b=! z5|5a^4!%r@KT+k$r6@nbp->Hy>8uYVr|f&_+_?R?s{}0436gq2J1lsS*lFGT$&&Lb9n+XBM=GW_0a6<{Y{SG&RUaTKGtnN1e7CT>5 zuAjS7@4sgF#Mu6!bH70&2=<(bbWUm$hvGwxViXWm!Ffly(O4Q>J*u~!+!rvdlk%j?&ri<&|YrS=& znZCSsi9-33qz|;nd{y#Ja`%STTi2zbFC56N8|U1*4!XPfx(@Gng`{>)5}MY&wTn8s zm$bI8?||-Y(<1?gd4auevu;j1&Kfjaep35M=FFYr=)GRQX`^nqET->kkRNpf4@|j! zg`LM@KY+&KtReZ>wxZJcyFXVsl!t8gc0!2AILUs6Z5LyZL1Wv+16H1~_W#TED-LM5 zm>x9!Y!n@%WZ$M-zv75Gu;qT2w%aEVKE^w2C~v&|BzFF8P#sQ3qOp0LUhU7J27*|w zUvWa(R?iz&dF&skmDr%}=v0z`S@^HxTWCHo2LHk99Rth&^1THQ4fB-`0|s(HKG2Gc z%m?PKn~ej;d-$DdMxg8o{%4YUPxE_(8`ySQ@@@RQOQ>*%Gi$jwz#zJyUB)MCVTUfdmsCK_ra0(`XP!G zLUeHL4&(A{36BJ%`)3Tr=BqUXhTaALzM0(j6L?MkeyO(bPi^6!@7Xuv`-abr?>ljB zsy&}CiU;{n#e+3SBur{>A%MSKl-{ z{q9uuN2z_IZ)}_hp~#eGc6$_A7h$p$j#MeXTj@@l_@IuR&L9`@wCqlI{PN z9DPjnR^SrWhF9YK>DRrI+&5C49DOp```Zb39i4E%>2A6CVagkBL!8H!q(N`)W@P?n zrs?`6i@kTre-92ypn7iiE?B=thE%TPz(?#7^d04gO{l+)X<5p-vwTm57%}HW!%r(< zB8r`1;23(n(mw@Cv3}mLy66L6v3{Ce50bT;BL0`_#~soA5E}lH^OeKOr|~Gt$9~)a zi}v3bFEN(Sxkrn0fwrHg@f+js2ayk`6Qh3yh%*<6YUMs&m>9@%@C~t|SOEIaGZtd8-dDCWfC;c^Ef+Baepu=Wl*cZRE zX1ji^w{P0KM!8;9zis~91&*FpUT|Y(g^KmtT9}3rJTUC19Ci~zYzu!G{V?ozW^r^s zq~C@zAg0oO+xN7lqC8}mcMKnB4<(H0w~asFGOTi>*@g2Ke3+ECd%Dc0Q)0lB>$mO1 z;E1Nx0IwR8=C09V=UbKQXPr=aZR)TS@>mpCBEd0VPZJPXuAjA1!!ujU^8pNS^i_ma z+Rr)$|5*og&G5VjA;9ft@tqI*XV?>E??A*`Gwb z3rI%Oo%tL{d*k?v@A(V-i=>e&!Ln~$7M;z~2`rr%;)*Qp*%%XFxu@e5_FxvKa_4Z- zcple*O{g&~=BU+!{d7)O1qG*u*uD0A>7n#=^^47i8Z*p~p*J?YId>thrac73MF;2_ zFfWjIlhi(vsKXW4h^JT$Y{i}9-G?MZ=nCI|D^e_#JNH!ul{F8wfY}?&xAVSVbg#by z>r`%Q9WLiS)O4|#sAISLQP?+SyZ5AU1GDHV!VSPp7e8lL$)O|cfTq;e1Kac4-U9`1 zcAn3-tPHXB+Tn{sc9_ufU_gbm0Sag5G+p8DfNOg?#o_`w<`9e8zDbaTl*l(_f3A{h z`~Dk2PUO~Ni=NJ%s;6&4u8*4&V;icx!6GIqA#%>!W@sk<-fhEU000GY(bp$Rtw}nxz9%u?6)%YWZJ@ zmH@TGu2gQDRE*|QsMOGPQpH>Sjx3IUj@D9r#W{=SyqvSB?fWNKTQ*!g&)TgKE&EX7 zQ_Lv6#v8oZ#7>U$!HNwzA_pHxF7c`Og6rzibH!pP@g(on{LW=@2cJYdw6$rF{EbqjZDn$+kUY2{%g`%qoq(>-s1_y-{Vb&Uh-Mw6olZ~=W|_UK*Dja0|8PmN5%AL{1> z>X-ZPqoizi#@@RXzjsRQLnmT=qdn6gnFqquA5+j)BPOgNk;c47X19qooEm<&|f!l zrgTRN;m4LM#=0rDwf|yh@l5QTf;NM#o@K6w#{R^jG`XPZnF z%8)e;bQ}n$2bir!PqZ&i9gNVSO}16$_Iyw6DAk@C(Ww2uhUg;{-pK6u&~*{Kc&5K~ zsjWeCTTPOVOtBx5Zfvtca)~dYNnGhxo3b9K0!p64G6ecq+I)u}(Kx1BX+I3{F-A1( zbGrtgN5DvR1RFa}3DYg}3nBT|o|O@e#Y@3m>Yih%V&>@oQ2yQ$?u+?V%+7`@oLbsYDSE67y{!yAqjb)Lz>M*KP^>*~KVUI^j9u#Dh7xqUZuWKX71Osk zh+2Z?J0<8DohaZs9L(78DZNzs= zV(GJ6=POG2e@N*H#-vZVdCdM}=KEIpXi$QB@Ma<0jd(H@@T~`5PX&CO$Ly+rkMo$F z%BSVCX!u?LUz_r=oQkpWP(6-}2iH}qe`(@-gR=SYb@V;*JXuWnSZ>8wc}4Uxt^v>R zuZ&!leB{Pz- z@`pO`+LVvqff$>fPP#t`zMaa)?;*e!N_VE?_rc$z`X|RrpUJ3Wx|C19lQHT2Z4l;Q z-uqtxF_eow42U_189NpK5Fo}^GwuRBAN2PFVqflzWq@;mHv*mqcoE=LfTsXrre?+o zjI~MsA>f+66^dV?IQ2@Be~RMNFUjz{2uSx&0U{5hLyCVM@Lb@Z zQT#r@%Yd%}ycBQ|Ak*!wfXtt{fcVXL4gMN{{|My;^ym;E>5l=D{xBfZ_wNDG_Rr`8 zoDKZ_YTu^zD*ze)MSx7FOBJ34$n>ZJWO_XZPsqo6U}?|M9mBUC5Wi_1_&Xo?DnQ1Q zdL;3SM)Ak;#q;oV|60YX6#os%GW~rKkp4UaNIvS7B>s@%p9f@o?*(K$HUh##`7JV^ zmMgptkm(QyWI4VH@FL*n0L}z_4ItCwpHX+v9q%(F{2M^Jqkc)cyAP1=Rw}&(knvaq z$ar52h$u{pD9!~N;@?J~E(ZM|Ak&F;Im`d&0ZIQTUC__xHQU5D18_ ziYW9H4#Sf6d4+=tGYZ=j#uP>rdJ2c(4_>SC3I`Qt6t*dhDU2ut5O)g!xlT4n3z!as zOV-U`N5ehw#BG0$?VRua&~>@ zGm3X2GiV;eL;3;5WgY?e4#ocovfO?BPlD#|>t`foU%&Fd8}i(J{hTKw{g~1ZsJw{A z?{_MXg^K0|OA6*sOukM#)Yd8OZ~ctjZ%(0@Gk zzM-?gi=S^=LpW(J{bP{l;xi%3#rfU4_{$;uw2=E5X-C3wILL4Df#=XHq9KIlof3cL^v7vB(tB~wKxIha8P}a6J!s*qwVc(*?yVVyw z&V8>wkMZ119>-tT+CLl8vJ@QgYn#GHuzBvTHMAU$h3QS}H{Fiw5uL*wg^ObSP~2n= zY4h+%h$?6y;_a(9LIF!FPjh!eZ)u5B-N-*V*j;dEZ3;Om4E~9f0_R$66M(guY`{T? zj$nE4=WkAGf9#c4%yG`&Fg~UCSq!3X@FI9%xX)rX@e-z9+n>DhSe*SLKHB_LeD3Dc zs8?wy5B(6u1wKxDan8#X-0tSjWR8((x& zI^FQ1Z*1m*L;GWoz<>1Tz4_CS2N1ySO^Z5YSA!4RI?fYgJbBXQPhws0Pki4BDc_`vbwc1w9X;v**i2_7ZuDpLkRcJ|MSpM6E|vbG-MVTu{dZ}KNmE; z`Re8gFXBSA^krD3N!~rQ8$7rb&0Y?NeIFFDl9s2Ho>jCn&am(2!em$60LA%PxwHyoZtkE;a28OYV+N`_iQ^U&+9+wd}E${RPXf>?pju{>vhlWWuWb;IQVy z_9X;AWE+Z*y+y0_SPRDZ@8g`5r05SFe0H85b~F#cZFP z?L5tsCHQQ$91||jdnUy9F}1gKc2aT9uerwhXVcBnbl7ZBzp}UOmQN`0@}D7p!fZA_ z|Emn24OglBWcWFUZQ~jCr&RpH{Cm{ly`k{fbPmgHQ48riE`t6cS#&GtIqcZHZuR;l z-5YL22fm=maNU+I-LOCpdEJ_I=@0no5P372p{+jU3P<(rAHim~fciZY!abmVDyEGq9A@Fi7VDL#&=ehBhXA?0!F3O$ zU6l9mkdJy_PzIv!0=x)tA>ajo)c=Y0PxOD1?`McK<-G_f@&UO{F{JqC0qOr|6dwQ- ze-z&UNcXn^GThC8biY{fC?MTmr1%+tbU#J$LBw-1oU+~ltjPc(X=>U4VQM%&Mc=Dt zzM)r52YfT|I>kA!34d!ipGi4+g}VX4QZopMpXe1uSZXp#Zv&)UuCLJDe8uY(uLDHi zOV(FNKZ3wq27DM$`~hqL&VB&#oq(k8P`nF};p|jA35dConwa7d#SsQ^A3K>1d|-I*9O=V?dEPR-6K{b%4c8w)JO6gt7Pd!!iKceAhKGA(1 zkmd`@-=gk$-yZ21q2ilYyi4f|6<4yybye~Yss+~@hz~1&lj0GjzY+GN*K7EG40~l2 zj@==gh1;b!0&#KbMR4&uLiomz`?rVWa}LjS|HY7d)<-V=Cn5fP2uGb5;Q#Xw{jWp# zk3#afzUBJ2I>i4EA^Cq7;@=mdbALX5zUd6%9}e+96T-Q^=DMdoa~IErh{hKT}Uv)vc%Hmt??Br)o#(!rq;&PvgNHU*JBxG zncB)^{G#iZVC5_BST9a2Ni0Q5kZf54O9&G7z>O=;VuB=*E+(v4p1gi(YWYpP)-BcO zhR<=pQsGCsb>ljmsT}X-wjM5zwBz134HC)+%i5aN>D9g+7L^Kik{$t@U@0{&Z3YzF zIZ-ZH`l}m@G=ZIUi-MKUg&c4g1oLT3D2HfJODz!4=W4ioPJN_c8s^TwqQ2p(1y?L6 zuGe?o-1^XZ$7)yInD;+DUs}hBY#7`ASe*SJKH3acyzX%~Ivq5W$JY!xRg%A+%=>j0GMn{w+E)U!d;WPsOStuG1?+<+;!PGRrkVS7h&81hindM&m7 zUh;s*a_bbG8XmjOa~Km>lxGdHsnfm_&cegKOjwV{A^3k0tYb)|#}NW%ZwvWg7$81O zKaQ8VUU9PKPhp+HKM&aw&wdBz=b(LzC%@L>3<~DaYy0j;q?&S{W7h;{-n!r99@LRj zIhK^ZO%5z>AMJk45hg@3JCw@e1S96nn{gJRG5cFH`+iG&mCV3%;@gWq!Xn8D`-_t~ zndQa`Kzarysm0-0Mv_v7VvKy5+5F;3dBdwRlS<{h{JGv zI56AxBoReoJYPL5LMxfRe%xT?^JvtAm^R0QhWv==cQk-_;Hki3xNL;5M_ShzbMZ6 zOychYyb$zdfU^Lv1f={1K>TLB27fbw{{mqp-_wBP<2eWN{WBo>s6mf>oF97~;5Pv= z?WofHAd?C_Y{B6UJTDVL+IgJpRrD+ye;tGT)6gDw*#l z-UWNi>-+jqlfbcst0t!W5yg=P;(i$Z;8&GbIH)kAuuWl1VML*)a2Rs%T9sEgs4%0j zO<_!7L?M8diQD>i zAMD6Kto-K_2i?}!^~%r0pkca`Zrh`OfLr3WeY;EXjBtD27Ztbd+YXDv4b9Ce&$d4) z#cg}lp!|m0^WLd=ou)^l;t^$duj2Je=Q@;nB^;l?zl;A@i2h87epLvc65?lFt+5dRlLbbg;M|Lr0EkB9J&hH!UQ)0v&MGmarE_U4>@ z@quYWVU^iLZtv9%_#yY4#0<>y`hCPA)@1g#oR7J&plR{-&OKrUIRzKtTcpEb3rzM3 zQ3Ea8*rh|edd-@KR_VRA>J>6(9#`y5e>O-kyrLRd=Yf?=t^Don*c*cv3OPc$Q$bC=|=LlQ+rz5H?P-O z)nfChgZM_h2p$-;nd9yw--X7NCQmmo7H50MM~6!l&!>J7^MEvz$11K90l1YGCpn** zS2@*MuXA3O@_Nvy&!W7LDL0>bfDJj!Ul`!^+X12C8hyohe}hcTJ9zMZi8jpZ($pK^ zMbP15Pdp=x~L|=~U^e1ip=<_kf_Fb3J|EK$`OYS=k>}D<||9^U~ z_n-JachM(!JPG}LxjSZaj&Qm=gN;e*WLE6cZ?s#*F#%nJ9oT5wRVmN;NaG)%Y#BXf zpN0M2IR4^$*q=DUQl-iarMysi+Wce=)3WuNDS`RLWNvXMbhu$tc0N66)#xy^DF^1S zm5%A+eEO7zgUVs_IobJAGryhUeEo6GoaPo$q&S%e%|n=$mr&szJ*(!;Xs&9?K8JhN zo3cmD9ITy*XCQ($`wRXd$&v%ozfIOAkXZ7{AU8Vm?aQHq@|zMKt{-6Y{ufX~8fBEv z`)PELQF=o%yAry&+Mpk=XL?h%D>5WKF1hagfPb}!>ZxXYk58G!JPo$qDi7JL_el8LB|{{XDXL zbXyJWPoe!+7`^Ssw@n@0-}@wVjJ>nI7Y&s`>jeGX#5ceiC*Ijp`_TI*K!f_!Z)WFY ze>t)a3JX~>A=Fn(uX= z63<+Jb_TMWa$WWISPFE6y}RMrfW9(cU*zLdohSiccoVWv1k9+5_ue_H+PkZ6bib7W zWnc$JruUwBSNgRJ8HV)f3z_9$txGg^3fvu5|Hy<49dt=-P8UtH^3099`ABG!iZcE3&-p{)~V zgW|NQ?c=q7s3@(H(e3%>?2EO19L%M%-*3)toBqfE6EEPC(Pn6U`V{C~R655-BA&f2 zV&6yV?D`#bp>akGn*HjA5*$t9{EpG(hNMpI$aOzs@!pg{PLQd?+yPVN6ESwb#u|NyxZefdOA5Uz5p|<}+%r?g}sA;Vo;MIUo z#kW)Rmwp3Y2Fj1&wi;tmhM>l;Ni{s8By4YoYpYyxsdy$@BDbwF^)E?QA!P6T$=zq6 z0-+*C;bcjg4ELfOaNBef)CEI#J~?u(&3_4P7geYFE}ljZNCw1%8vSbTYerFN z$RA}nG5(V)yK0a%ed#!S66`h(w zYD`en{!PM3?+amNbr)aojoSNGBdjA)6qJkcTmWx(vRqAS%GU2;*E!z1EmEC6LkibO z6<8)plbm!4ncm}(#Oikr1^;#w)_2xvU&cSU2T>K6|I+bBDb{KwOwfM6<&!4OB7k<7 zQWxSwE{m~rMFV|&+Ravi9sgK&mfylRh2&d%3vGDMFT-cU^X4*qoWG=*6XFYpFCtu+ zSPt=p)5*p&8RGkxy0@TSU&85W>48C(wFH!I1fUI{ji+VdSlKl#iu^~Ja$w!Ggu-p@ zEj-!uUtU5U!_Tz0<9aLK!cy@=h-tjK`n3n>MiLNT^OBrcpJg3 zuN3p%jx`>9aL#=Nf_zeluAkWC@ZCoAtrR_0hTc|&o>97W!MGW6jxbX&kn z#gAQLno{&w8G2h8dZrA0Q0b-8C$ID_gt3_3#d`g~b=ph0B}(#V*8#MC8bj|=_nh;9 z8AIp#0nK~x6kCV46*Sg(XvVmY=!bR_h{eveWt3hj{Rfq<(`RGkbDfT+6g{u>s9_u9 z{+QC=I=OiK>b0U;g>)zu{~hY_c_rjyno3Nmb@W3&WAC;6ec=Zx;9C!$@)hts0KPpH z@NunixAJNEM7LwCUdF+G0j~mV1f;&u zX29d7fxM%yYQ_LyJ#g+@EYLkKM`*Mgv^?x;t_>)fGF}c9w3Tt z%`oB%{+c{s9FW6zy59+ic+~7roaYA-X3_UaI@cD6$CMrcTm*c&;wKOfhUXX{`40iU z8TbLkcPZ=#M4W570ONq2YM%rY`HDvX>7MNZ<;@0!S2eUp(HDCZ*_t*GVP6$f7*R+^ zv>!&i3G)gE6=oE+DU2zMDD)H#!?CzmIH)kAuuWl1VML*)a2VmmYgJz1pu&v8Hia>T z5rqKaj^X2^XFVVd+c@fUw(F$}SUB+X*BJVv#KE6O{AnIm-1akn0h-9GHgui=A#VGT z&k~0pcD?vZig%$<(x8qIdjIKydQU2TOmUWXy6;3`r1=!W!Tmyv3{4!6`;T@j|9aSw zK1?DE?}{g$(eMwzj(9}z_aQ#S^LS|J7x6*G_gMFep9)C&4)D?3qx@ZpKdzYA{Yz6}q}*~;%}c)qUqpyKC)hx{!n|7`UyL&q>vmA_3e&-Ec}>{&$A(8$?6`r(+u(OP#uNYMM15iTQ+UBnqEoaE~wU9ac~%#l{C&vt8@C786tZ2qjp+SD{OA!n_&B=mZ3iN zy-opQ#4x$qifwVBUG7JM?B{8G!7tw`Z&T}PrJ6gxm3NL9n;9I$qxEk(>Q_z4z5^~*7~@uG*! z#XG0?I1+3rbF7#tk{Cv9FSI|WJ2&ARI%)~3@%0mwcF5YbP-+l5qz>D4TjV3d1h^?5 z6pBrs^-u_4=EWUl0L2vN@*_q1qx`h4?cNAYx~!ktanPM`-A2?`c=wZptPG|eeE02{ zg^qn;Po;jn?#@f!%H;|&I9hr&-5k1alen>^bxY@J3|3x^e%^*Fu9_1O!+n*A=_a$W zve>>#4{d=L!2^SBjh=tjTWo@VyR{LB&<%{mIey}UW<*S-_aMKb{FFzxhtSSQ7i{dl z$}Q>5>o(q|{H?7)eY#c-##my`fgIOpaDA(C`xdJ;o-uX7`vxg;HUg=#0wT-pTa-Ov zaL;iTO{dB;n8ewV#A+7)>-ZMZe>)%kGmZxU`vI9&EqGkRfbn5|oUG9uPQQk`N0a#5 zo50@@O5vjORmq{4%n%O6>cws-hRF?#7Gg1`7pM|uz-mM0zqe{XcESAvUd%4If5O|| zIR4^$7UN%po2_h(W?z^&2a7!)xHtEX7~FP%?Get7??tTPY?XC}756E605*72aPAIl zzVNU2#U;Q2OityR%|h78VFVn7OswR|m(tF6W9~3OOM|t=xJX~O0Tw&gcb3vi&G+xb zrV$#Ik5~og2WP=OlEXWueDp_*<``nWLOXCC>R_B(BVZ5RU*yq#?q(I4ATmT4qS)27Z;F}vsy zIVrvAbLP)?^oVTfdhfc@^|FjzBZxQ*>t&7+N||9~9*rGOTby+OALO-|O6%ocDnI2> zbPI&Yw>`FAhBDE#a&v!qa6h@tw3vpS<1)%S1bI4D;=AQbx&7`jgoh?+fVW%YttiWK zz?7@!`>g{F-wDV=5It64_|aGnLCV$h{d5eo(#k`^tCiTJzV4J4{hI|S=^Co%Gw_^s zNFJ4a8nWDao&n;6c}dx)uHgh$xiR&;Os3>B3 z8IlT&zphe(*QWKFK&dFyO_G<6+Yp<{YtUn1g5$=0-B^athKFl?;~5*SZ6Q7_rhd4r z47beEPFj7y>(%{|#PVf};w_2RWi9WBFY;V8<#l!6N)5#Aow&ZDW8-Zd9_qQ(*dJpy zyliqc7+e2dV_s}w^H<28G2h8dZrA0unaw4hCW<|Uap_8^7p2npz$x+PiU!t zk8NnO0=@^p7ps7e`vT@y!1n_9>MP*mzJS>k@Nr*2qzvEB;AbuRGcN+76C>+LNJCji zBK~>U=stN5a^b}7tNyicy43UOL%nUE;0lF@aQ8h^$x6`!Yb zZ=4r&9U@@wmZDM{u6kC>u5Xz)^N&UkhHP|AhWop#Oxj>Gz*9hQF#! zVN78}Apqr7ablGFG%~b+N#bF@$=0tduWmnT2)NsC;yf7pL9@vSb15FT-}JKLq|v+q ze56MN^Ss*t)v4Gp-Y))d2!A1j&j{gv6T&|d!kx}R;7cmHUR(U53w3mYVr} zkrJZ(Wlg?Ni3e00&w)x1xBE4Ihb8EJ(N2o=3uI*|&=Co^40T9?G^F9l>KBIU;VTR4 zH5+^U3l$-Yrr5g8$@EX!w8FIg6N^uQY(Co7R;&->eGC+g?VlXNM~Ls~r28isx`F98 zz&nO;LX=mB0HFyUW6JeU?7EHJpWMTS+A*38zD>FQiTzG9>S8D4QDh9^V>n>~BFptp zcIn5u$GG*TLx>y1O8X~m@E`S~+)wZgK(~KFFZeJ|nTEyE5!U0HKYIUU+|U$=uX8Iq zScg!*Ps@YHuCb`?Cs-v%UUvmDaz5>4W@N0Gjd~DMrW%$_MqrQ;#9(f?`J=_1quqV#;p6&ZZ zinF~(J!RLYW@LclyQyjegpu|g-#|?a2<;<)DEEH*-Ub|Hpem*?q7Xpr&j)0?ouLIx z29MirvxCfb`w$=v%Zb}=e^PPMXdc4jw%ZGU+cHS{>JZ))!kLCHKi^$^We9g0z~KCY zOd1ri3bwpqC0&7Xe^N67;$P8rHPD*M_Y@q}ixuMaYR2^qR*h7o?Ns{H)m?gBO=|22 zJc8l6TECmHVq5r&AkS&S5M@!?O;q1vDqUBz^*`m&Z47@LX9CF(SW~W@vvOok0FDlz z(7Q&1?OT;==VZ7C?ufcL40#l}2jSD?35YD$&K*`qNtNf1>lLrGoy)_2#<2yB8NUg) zol{W~K6)qp4{KQ=WIN~UZD~nmzm>{91BDCJWPdze-JH9On(K{Ldg#Ux)dwGfXy_Tx z)BV^L(Pp&{EZm7;)b=r)y(iMOeg7&iRkhpy11}Au(1Kwvt4(DS5p1Za-Tnnou)~4P zmDwG^4*6czcJV!H@PG8XhT-=B4g;I?_@0}{z@7voJX?%mDJ+lR@s55Df2o135ho1r zzk5z#XNKc9$0;LiV_l@{nJ^bNXK@Mdk&$=7`K{n|LdJ?PzGo|)&m_xLV8H^$aK$`x)GFNOWtc&fF1vfq)v{~~lg z?W2&7f*-vL5Wi@L!KYoT@M1t@Ms$+mzoBg4&jZ3LdJquqr|nXBk3!Brusurw;ya5j z1Vj+7aS3%ka?7nr^(fcwY!lgmC7T%YQ`(pBcj0&bj<%?^;Xut+*oR z9a!UQ-Gs_EvB(P{ls!+xqZ=&FnY%i=F+g@y?FvnTy7xC=Nti~d#+&NTMgv&PWfKIj1^x0Cw;jZoJ^l0P^gJ$=WX*u?uS)EI0MR420 zJD?`!?%iPIUb|aBHkY4_9s-(5Wq&ks7b?^5;Bz$f?O%g)?&TvRA2F6>|FndZ@zb%X?)~*;i7z$+ME##35)ZI@B<# z!TOqQExwY5ue~R#(jC4HTjJgmlW`4*Y6SWU)1mjor0#eq(nG2l%rf#;k{b%j@1SkV z_{Rucl**nnf@?kIK^FS}5)fw7acER(%DyBx^;cyN%Pe}_k0jFT9Jn$0@-4jW{S5x% zd)VZPtA=Ms4r)cz4m)dj&ZJoT)&_f;m+=&%muvs#>%1)Gi?RC(L+u~i%O*UX+FsH> zF(vp{;KRbF8@(D3ziH><4_-t$c0vh>PBHcikHZpmQFH{5?H4uMLhj7!*$Gg*;S~jnHKa|o)W6uKW;(kM1tR1)KH4;k} zr@)?6FcP+x!LTl{QP>Xw_};ua{Aqa&h%DES;CDb1lYgvdsXRsb?OQL!Y8L+4 z#|`hZpAP?-KAnKe0gLq`7(PBs&yzK|DKc10zZL_<^y|@f;gT%qv^+{VV_$SOb|#3X z1^E=-v;|>~9Kqx5;Y#4D{aOm!X;m)$(}m-tm1cQy)aJXlDY#GldhkGK zlr18XdfFuhMj2G3OO*W{Bw@+%OagQ_P~m!!a$Ne@@d)GV3^vxy*%Ta)kRBY5&?Yn< zS-KQoE{=w6-i+OeucjVosJGWiYCZ4=8c#^hA`NUkVDVR558MG+G?d43%Y7=ZrXH|z zY(4Ndkms5ZTDBhOSH}^B_Peb|_%#0mBFohSyHrk0;Q_dYDBo0C56su}=?7c`*MI1G zK>E8kE=y*A4W*%?>~>)?*DrHA+YhFvCbK`hIsWcdqd!je_9VUZOv!#I*Q91voq)>v z`e3t%M=nG^lb^1sB|eEattFc9DvqU=piEOyY=+)C*Dzmadfe?7H0A1v`C3oda^cUX zs6L_%5C@@A_OFl?(~^Kl(&#mStS9P?eaU))>lbdID96PkA^a^N+^p9I`YwTQ9@7z} z`WaHejHTM1MdBuOEa3Ll^&jS5d4<33o5rce@%E!J;XFnZ<_&oI-2@QZ!e2~3Oj~bQ z{MFVQGwBe<)*Eg35IE>W=4A-1DK~Fz29+r4tAKL-hh(+kZc|5{7!;sf zc`-}^5W<{Xy`l1U8n@m7m8WRM{fCwCe+C@QMuT+(aV=JFFnoO8Xoa5ywBzJun6o~f z(jh7|Ez370XYzpmO<;gbowx_a8!Q2I8AYq_6<-e}M@16Kl8sKuDsydivcxlUd<)Pet^94vvv2 zczKa>+UF+_V`?qmF8nRkO#|1DHXM%~ADR?rCGDjz&YtKUp44z0jBa|Q_6xW||DMp9*Y-m%)%?E)Dn`qqUgv-h0|HO9##=OYU;yz<9OA5+2qGKCJ zTe?S>W_==T+8F>0#VT-_vTtD%TH)-fJ;#TtYqy_+Y6EUI88_dBf1!}yCP7F*5OqL9 zvAdZKqOR(FNHPb%|7qZfh8JLEbxZS}hwOd{y?(P?4B7%d;|qMQGd{P%8$Y#vjX)u} zQ@JbM;K#E=Lx~6B)=NNp{~J>S?}oDYZPf@u_s;Yz2+SsSL$mbAJo8Fxc^e!`9DpNl zB#OhcCM<~uSwA#`{pw`)n_`!%&O)JkE>;aOgY-832pgZo#jk8zw1-t!{b1ofVnP`jP?ip2-68wGOLv+>?1UO|F09}wXS-Iz`V9~8;=zVy1= z=ix(J>D7Mn!2eXty$QGUEKu~V)23mLlBf( z$*y1}7`sW$$7PXP+j3gJr)iI#(pD`!RZgT9mx~a*QlyrOmv}jr7%$XI1aJAh-!sqb ze)f}uT~5#Mzs@V4Jp0T%^UVGB%ri4J=c1-Gv9uF4#fjt66=iI1cLVPyQw5(KbtAmC zA0^03Kvd|smVRC5rm>NS@vbzl&`wS-30R-ExiN3S<=dvTc+vUFX^?fbpN<%P51!G; zUQHK^;>2F&78P8exnnERbde5QS4O;?0V%4x{&ZRfv6E%aeE!VN z>lfhl1lvu>dJUO?vI-_DnkA?hDi18-XQyH{a2E)bTPU$Keb>4wXHE9DamT^zD}0@p zrfRvdZ_GCL%9D`QY0;^+SMN)pIFOIMVwd6vTGL|OPCf-?ly2=Y4ojRE>S5`2{E}gb zn{6sOWqXytb-L}&b3K`=a*fAjEc52f!&S`Ho~x_B6T{stm-KacU~n(UG~J~eg|-_5;bNEHN+w4f17k6wU!ASCmIaMuFZ z4k;T^W3%V5vaPQ;r4Qae(Mny@i0s z0e*^+mwZ10WO(}o?g2!;d7lPkym-GP>3%2fYX$xY5NG<;y^?h28&~90EpRFz{d)n6 z0f&nH$pVW3nch8x+WjR!`u`mu?SCNn96-kBYC!TU24p%uMCLHuHbDC0eU*gI17gnR z-3I6e{39U!KLkksKN9#|K>A+W5ncs|*{QnclI~;0ex$&20sF!JOhD8XFXbC2 z0Dcb7Oy`GyK$T9xdA^qT9Krb>Cf3B>(SY=Sj@S9{20NF9>Gshd12*c3uQgM7LfiUfG8U8IB~xa5Lxa;TGajq z*U4B?sr?K1FY*8<1W<4xAonRuyXL(Q#G3$V_T#hfW2^uU=d|JeiXFehfnzqG~RhyMnL`#=Z&0|)&u2mVtBeT%~#&ROxF z;J~@xMH*vR{&sw(1OJu-mwPa-4qV0CydcC>C$G&7TvyFh!vn6o5;}FiR>p2zXtM2Q zG@Q>~I4c@kQmuVyFV|c+6IYViZDuks#Y2=1~1C%(CN<9`&}BO7C{*bZSVLjeEWMYdk3{r* z&q$B^Qlq&$MN`=~I&)e2IKe-CjsSxsP5K;x;OGO{4{BL5V7~g0&$7dUNuMLYAn+fw zI83>c;lueh%~&I_)F}JTEJL}{q0UW~i~maTwGJI6`dQaLTy%r}xQodpr)m;@b<(&? zFeqVYas@qUepyk>CExb2VJSY$M-UiB9T<9J(XI7humD_k zroPjblAkH~Xc$#~OfSY%mj~bB8Y2h#KbKQ2M8(kyg4+-$SrA-@pZgd^taajBiy`Lj zPEKXl_mrmxL)O>IpF@InpMi`P_l0gAKcsECh=_tKu<{n{{j| zfO>0eG*)wC5kIA4YMw;nBD4b23b=XcM#grxF>v#BY}aeFok~ulUr*y=Jb7gS{IPan z&3P;UBFJ^)=OJs4${}+99F2#MnSo28yI}yT75u!58Q=z1WD^#AlK2@Arx$=&4dW@h z_<`a(q01wSUTahE^S}A-x>L#Ru(oZ%JCp0c3=#MNf!hyFp;1lvnTd;CLU!*D5ojCl zR1I$0=Lud$@gEkMcWD-r6pO$!U~z|yMLI3#!e7~5Jib;9R}`MT{6bZ3t0g$*+1inK zU=gCc0Vf7Kw*<#*dEyd;*vx!&`&&$;P?3b`o!i^~g64}A@Y=Nyv}}nD#!m|8N=UoQ z_)_JA7;6RU!r1bI+EX4>|_xQ|Bw(QSQjE@aqn)dB1v*oGdRc^ z-aMG+Ud8)f*pYsPI8H_!RlNAppnKK* zU>!d+dUcX04;!2oWGx*y3M`^Bo zRda0vQU<8`rK`hZ zYj?Vn3GfY7Z4b_C8MEqb457~iH@$axaMQsv3jSQMBYE_WF)gw4Y+}pxNL@N-S1g1q z6QbD6Zpn%pSX0KKGanrp^Hn5yC&s&ed{Gml&KdBE;id&|?;_(UD*ZVeqy*geE`ZFl zeK2gNg3g4fTqzB|Kb>FpCqc8u6KDF7m`||X7u0VAvym&U*irkyUo|Kb^r{NguGM>z zbjWP@B}a`YMr2NayI=ZC_1tsyS|zyVQ54&2n5aW*70*!B>k5Jy>eRZj9RY3?ydJVx zVN9s?e?`s*lY?U_IvsOXBiE*lTF1P>yTqCSYbu*dsB>E={>^bKUN!!aP2)^5%uo+O zb|TQ^UUfJ5s$m2@TX`{_(k%{Gc~r1vd(-hj1I3t%C`o*Le}XqxG!jmZdb=1y?`bYX zXYe|eQ3xUPZ1;+DI84XCJZ=T|vi=h*85L#4Mz>-PQaYKoydN9b89TOX`&QmE?@FiV zn`qJ42mK6FIU5g@9}d4XeBiGC4dUucL@>9&Gsmlb0xXiK#*SlcUD+=4uBgwwzVMXz zfjgsTxi{{Qe{-HKiuy(66{A$3yW0C8f2_^Sh^kGPvMm2$!>$zrQ2uqM-xGRy$ToqloP}~^ zaBO5}%#8`RUH-1~pvyk+pkP)1VEkZT_sTDn=LyB`jl;_uKd#%n)4hII{EH*qcfSb- z_r@s&jW5-0f#u%#m#};emVVgw@@H8;uC3?x_BXcMsQ+DCFD~>qeqys`B?6ORAAjSs zY3rp?SS>5^H-4G1ngy%!Bm9k9GFFpdRaxwBd^=+`7FN@b^f&I!SPe~%T%UYk$$n^8 z$G;qrd~6B#lH8F`#wQ2d=S$vS@ev)qIO?`DP|N-eLOFY9hYYlL1O9ua6?9Hap0|Et z^3tcqCr^10`$zGEM=u}Fi1hV0zFD^kxw9jF@W`cu5!<60H)Sl29-ln=L4WeGAR{t9 zxpE%i#AN+4!a#E6^@ONOoA25-A9Wp1NTZ%$EJgmHKnHB*R(PMY5kGE)_u-pELCarS zVns`f{nkkCrMlr*W}2Cs9e=8AEIK=9e>Gi~_tEZ^l&l34*Py&lYTQ$ZsHfrwP_W-1 zNcYAi1?7$VGnQ?-pvIxJQyE*%50LnqP}r>*TQ+gnUWc-_vHg{{U4o*v@uf5mw6~zN z_ZbdL?}W{FQP>C4HVa^LHOhKt+U9!q#&Jiot4-U4Kyw9(p(Sl|F=%koA&{{dGH=U1 zOo4Chn2qwQE7;~w7T!2MS@^R+@_`Ag3BLH3x+<(f4m+xXy)E72Kc=%Wuzh^e{|Nj0 zX7IQVa2;xg6)4*kKiJ>55h-)2f9{o>bs;WCtLh7P_xexb-yCTpSz5!$_tUMQTY{^T zg>`}C{XSJ+Snu4+$DsbX*N^KTKX87mESy}@eidaH-$1Ji6vPi)79E(jdzN;+U>Do8I+CpI z^jlvJ`vjwn^@@tXm_4ze+9>taUG9ojZorzu1y?k}hwxL8#1Hg}mHO^EB5ZxAD6yhw zSi-5t2-9^d>-KXoaTx{gS~wBIFAdOl&#dP zeN^tEnmtrSM8c`+Q3=na*n*p?ms|qLQ#bpqLnl?=jE8e?s~+a+%U#qVHLfAUM=Zm> zD>=}FYHDKep0yKu&8+$JX3vY>p4pov<)lSX&$#M2iEfPPBT72QJ3a zw#VzRvhC3RpX~7JBzP(o&cl|pC*XO^@ywl7 zGnY(;kC>iGsBA#vGFB(iGUVzdiqljh_4nBKsK;SbIy!GbwMUD`htzn6jF{~K_t}@E z{|!0+99Yi=C(p#lG*`DY+WkC_>xx+mT@$Kraz$n>arqW60leLHMQkCy`7U4VX4ll} z#jeR!QP-qJx4Hb)Rj8WE94T_segcmXI8fk;0tX8`UEmOb!vuN-mI)js(1cTuABWoi zz8~)0?QaifCkXRDkdSrf?!oX%LpcPDP-}$$hl~54@w>ZsaZ8Fd?Qjjc_%9dtPvG8N z_(t!OYme^SxtU7CVYpj&EIMiS_uzlOngqIBzeESpo&P4t18L6f!M`a6=Q-_C_`$xg zE7gW>42I>SjM>i@{ebge>Bl$pJx#}QQpV7AbDk{v5h_&Vat z{Fny%7I`OBtvTu85cGT(clswfeXIw{9D@Ea&<~Y&MOiO$(Z2(leV=LmtS7nX2Y_bo z0Zq?(lSS_+&-D;VLW1ml7?At<_W{EDz4@Z zW(b@na3Ubg;Nh6!kk46wq0SmT-HU)sC&dm7_i;dm`wPJ>!IuG^1oxSMrvhFo?iYyrP(bo= zi~Z+EYCe=7(BBJy^tTNVb;1HX zo($Lsh^;zr4A28u4R|gf-!Y)SD*@^696+%2eunkT8GwHVJQ}bW@N~dm0g`SdAo)|j zhv~UV?5`K-6L;$M(ES9lFA+#R9*D=iR4b0*DCz{>%dk0S&hC^+?b=>H%x4}FjK?|?%AUj`(fZGd$DJs|x* zDEN;6neRN`Py0K>ehDD{yc5Kp?_bjYIe?`10OHU48Tvc=<2s1$FAKgy@O6U!hv4@E zmV*9!fI|Sk1IYNz689?rSw5$WJ>M-P-{J}#Eg;55rT;^J*8-=%2q6891EjwT0qGAk${+kHf71a$Uo=Hv zP++;h(E^7HL|sty9)YN<3TO96J_t)e00k?N9{d%R3-k!2CGA^5N0<`WB(P3krNDB5 z9)SSLA0_AgQO4ymL3kSW%tJHZ_=VtR{_>dMX1?^MaYtpLVZJLpCngByc6`Lm{D>E= z5I6HRv^|BJ`P~EJzM7t49u-_;c+XVua%L1v6+ZGa^Se{=8-HoD*@5$Z4!irY4);;; zX?K6!;m&y4-A6h2z2|VB;&A8rJ-h!)9Q3ms__rMKalSw4bMX6(1Ao(jhaLP^Ioz*s zgtyXxf9CLywwje5xrYF@+JHREeX+xTu_OHF9PT$e+&4M!T@GAylDg<#*>8B@EtdOfSsZyrMv<=Y( zix%n_Y4x(1Gi#!=s&1WGH5cy|&YA~>Gp0q6L#K?tMUyO({zVI`=g(Vce-pAs>yyi) zkcyJg&3Y=5tc)gFT2oAGmu0F-G; zP2Js>PM{7Z>%BsAAlgGyHgfcZ!*R)NPx@;1d-=7XX_mf_N!n|7dTShrTpmrp@$XRQ zA=hFoq4CfUjKMMeQ+jKdt0 z_JTC^cGyBbdN+XH&Hda@Ew4Whg3*$%ZMs`ud(ojxShxg{OM?+dU8_uq)vL1c=N%7zmvKJ6#N z{%zPJ!c-yVZY86u!-_92Ek@cnhm^EEuStJPQngdvZQ9_?BEG^Bbg7PJA)}dEelD?NYnMH`C4?@!G;Q+D{ zO~%P#CfQOR*fNNZcC85E>>33zNbiRLW}g)r5!esA12!Rd;IG_rcCSBrkO~VzcEti4 zr6I%%JDSB%_*(uv!kY|wC2=u{vsFIs6%S}egk0F@n`@J+D`rE^shPGURujdUor)SB z`+)^k;1F87@N3c{kKOfrWqEZq&m(1d(4<)on$|ae-mDsZ{s%Pbn9^)Yi))m;_!2}) z4Ev+*JWt%sy6kwd?=AKn@Qj}WKN9!~Ao;NY(0-f1^%{CPkEi`F0MRvhWxeLT z2ROQ7?=rw*K%O%IotLsT(uV*^e>oujyl091X#$JI{!8Qy=|2_tj)vY>1%DBce71`H z6Mzi&SAY!n0kL1I;lTNTq^|;GxSSW0|9FAiDPz6@(7lNAO0GkUnTQ`Ylrpd^e1-!j zt)1Sv4w>t4=NM?GpX$If>hIBIJwq%(&PTWvNJD<~y9||}j24GEA2EEW5li#5 ziHJs7*Ro75y>~OuDi>dzC!xKo$}POISmv6KP>w{iSOZrv(kWKT2J;G5$+RiOFSX=% z=)F@;z%}AS~4v zBBOV1e+W|9xxErUmDenl_iVkJDQO+TW5Gf;#i3MMx{v;hRWSG=M0y{*v8jPK|&dc z;b0^21aT81RDCsF`!S&WjiJ=xCrABzmW7Jol;I%c5}|B|(ezA5ADZbq!--`>Gg@aW zplC2^9;m5kFluQQy9||k)en&U)CC{)|3G5X0|1T8j&Ni7f%9vUH}esl=Qyo~^U0gE2FY>>Yh}XjvQjI3s=AA{>^+kzr4G zUQN_9bo|xfVLXMLJ|pc>2c*+m`*4u`cy+uOXm}RTdtHPTYr}MI6q&i2V-dMF+mr`&edum!20n_Akx*oeW1Av;XGU?@Gd*^4=IA`X%qJ zfDmzdrvY+aFc}bk1IObZ`bF=>Vn0Ic&jO_U_$0CCc~$%kEW$s^o&SMaNW2x0{PzHo z?+ar8v_Q^s>HaG~hW`_>w*X0hr{J7F5nm{HH6Y`4mDu~m{xY#YU+hm8`;!3CMSCd^ zB_EDUjNbudQa|8qPRx&20MUng*-%Kg5s-BME%4VGdjDPAsa;9;g@D)!^G*|d0wCw7 zlyAZ)`8tNctn;cmx_8ZHVpYu;-y%htZH9+Kr3%cw@i$ zu;-zM58D;ZnPg@&5=`1A*F3b`#7lfsf*v<9 zH0JYuKQKqoN+VEdHa>#@aA8o1E7}hy4O<`( z*#R3|p`($FKsMANJasN&o8JoTR+AWY45dD)Js0CljuCpqQ#h_S@yl%tz4rY{6yO5xFnB%?BsUj=oI_Ogfdj3IQht)RB_5p$ueOVW|t6lHl!CS9MK* zC1+>q@eJ|=4=;J>qZo$6s&+&@l3ZR|fcTlah!^1K+~G5GwEBWSQab#s3KK*n|4KVEXkpo$J=9|t>?Vm1{P4?v#VTc zWlL%Y+6~*|;mm)|gJ&fdf+jDGY0v5Tk3(;XvP?7~bN}~1nP+%Yut(4Xjhu$_4dV9# z;?H|K{&7AL75n1=Iev@WMcw~R`gaf?!o31nM!?lRJMDiiI7^!NVnDPvFLRpVj2HWh z1Om{W+s0YrJmy5SPaDo7>^Sqpjyv}?FLbz{<-ldD?52fgIOK3-cG1)rrUWPBCe2(J zTQKvcdAw`^$W04J+%!-2u)6M3A&kQwk1ifQniFu3x?iAX@vZazZ^ol0WIl~YpuzvQ zqAp61cmPXB)qdVoJ*;iqt_b==*D7 z1NzIOMHfG4ZDx-@Fb;C~s#LzrLK?%3@q)vre8%CF4J>kQweUov>XOacU5O32_)sfs z<)r+V7h_W(IuOS~xy?}SAi$x+o+I@k!h)Ytr=OCo6_d)9Skde7K{St^(5 zniVCh%Wt`@rH7Kj!RnsIj%GV!i)D& zp<};7JSliRAlk2YIUp*r_a;EJxAb@v5xNNiIa-td1%Tv#Dj@ltAnpLfyNp-P@#b<( zM{;GH22=`vx1pXOs%t~RE*;j4@&*RyzM)`$3ZKjr=T?- zvKC!worf$P2E+y9oLNYDXmaT#lwEZ3MT$_3a~w~j|EGEh>rhE(JOT~=za8&>CYeos z?ELsHZ+`}GnB$${V_F{XX|o%NZrUo>c(+#KRVhANz>h4;QE7#B7Ry}gFY0H}tku9Z z6zQ}_G2iiy`m@F0u?MgTu)Fb&eEEUouub-O7qnhdqWEvn8`mO7!pT101t?2d&xEZ_ zs&fy<@4#AWitq6PTrhGY9J9}>B`!207YDe^su*x@{StG>4 z)(Oq(9^A_reVFUnfjhoI*e(k%3hpE8Di zV)nU|dZdHnOiZ8$5KYVbIXuyxb(D}hP#k9xfM|*XZxj3$f!6?{%_uo4-LVK&2fB3Hr_rb}-m|6H?$0s{*=eQ;7tZ|`f zGv#`_g|il)_Rq=@r?V4<;kZL%aMTsn7c~~qKHvRp?qAc8AL^fr=UPsu z#bJ(Ph7bF7nl%znjj6h5ekz!29BY(#rNq}-@Z;D}hXBM$azGR08pndn92jaU(eOMC z`56PYbIotUQhX)+;n>e!2SV!pr;f&+Hh3|;Q%DEH2=QY+GLCdRT*H2ND$YkA2yPGT zr{`d@c0VL-I3~SqA8}mN;hsEWzj^siy$)bo=g@!IF8w-y`?T`xaR&N&`d$}2_18(A zDs1tl@c2n$Iv!En8|ziJH-Pcuh|qSGSw8p1!cx4LkN|7(zj5>Zgd8ng^={o&@2w-lB7smI=sRy|v_8XQ828%l9=S4U=?1fjYA z1RKJ^#Bm*)3t}gAZ0j98BeXpLFOX$kY0EE45@iFq{lbpTMbQB&JQXGCy5j+1SNlmA z?>%?D#exO>zP0G%8D;7~VbC3l3sxdyqosqEe=iuXZGl!?AEZU{=P71VI(I5s+MWR} zZf&o@QGPS&(7eO>_bKF>I3DqKH&oy^;_j}$20x@&+9;Z{<^GA;xgU+Hoc|t(nClmq zTt69+-|+tscvh}oNWS)5S0lbH<54f%^`kN&W~Yax-Eab2Q9CxEcIfADZbv8^X5*i) zncHK|0z}+l>uP%g|I(?~be|w|v;A1%Z>v6-pv-H(92P2C?K4>Bx0o`I_CaXvA*AMg6roN{0~l`b;h(R05K^j1 zll`7e6R6~Bg6Bb|2qcY(z;4HFBf-RN>6+BJ??!0zwcWz$#X-zVeh=&d)UD6)oeRrv z(8n^IJjN)W$n1D=?xWrX5Kkt3sdM$r*Lr4>fPR&i3WVAsi5vM zkn)d_$evSPmTF(?j1O*efUJl+lXF(P|GRk3=bMUp$CmQN3-`wU@q)DJ zD2N@Am@w2jV#b!B?!3@1uKpqNkH=xn_j~-_Cb-c*Rr6l;E);JI!u4Ed1ry^{Bp{nA zSGus6Kl64r^*$8B?2RyE=RXBLx(YF#N4wV_6+hS~R#+D-DGymitcgFuT`etEi+Tbo zaYu1-VqyG1-=)tXhuJjJ{U|!bI^a*0;NJ!|b5&Bf@(FA=1-F+M!``*s#o*c>N{k=s zvx=Som8<>1&~_zd(AbaDueFME!<^L*!Otwmx66UQ0sI4eQ8QPmVt5%d0zV5}1q?CE zlnaJokfw|K6m9SN6)I+T^L!7wBbs`A-SJ;1?mtyjUHLDTMdB-PKiy@t=rl3^_p}Zu zg&X$<*2uYMrcW6&PahXoO^I}VeCvcx(urQ6>$&mypfmiKUS$lOWB-MGAHX+S^mywv zb%w7k{H<_n5<1C;44wERzxVN(cV?L%%9!xwU9d|rA;Hwn+Zzy7O5J;p9&F&F$VXUt zA1KuNAKwF{Jg7G~ zm{oXp1JXZlSE2uv_~!=B^P-q9d8+^!ziR>UrzFtiw-n6CZzBFd&f+~4upc1zp-?tn zHU;|s0FkEuw*l!t$W#F5I)$(a|3F$)C$Lgrxj>IV07W+wus=MQ`uw!urhdXnt)I#P zX^z8Z*GD-+a8qBoexkdn{~_SyVa!oL>^ReD$2o7ZNz7&?Yd*d{uWi-YDZ?F4 znqoK2?oz$53cGMz0V+Z+`{vB6o{tlE(IsNXHDcA=Mf0kvaU^X%H23k+r1NrfhwbO4ZOd83C;mM^0p&7Fz&8 z{Guvk-QlkvM;Ngw^iL2rkDKLMKdxf|c^H~H`|KK>RbblQ{I8RB&`zN-IIa1ixhj+I z`jPq+G~~xFV+tDgX|(9NemvxPD#NFVeqmCG4C4|+rzJt4IcH3+_19w>GM`frQ`*qNiF2CSUb8DFIn~t#d&qsdf0OYVPD%>&tNX* zzWZl%O7`PL0KuvOKL{2))A^Rn`k}U=ms^;=+*_kq?2QiMQGd0B;p6L_FRA6lHFUIQ zH2JOChm|N&)@JIQ4t%eA3x0yh!a6*z);rW2r;5~dmUx0Hp4vmj4|Rd7S<~umM0fqq z;7M`QqQy|+1kPP=3tQFAcuXr5PI%yT9i)x>n9tC}_!ifGH0PW7930K_PN3Zh1!|9a zm~Y=7FsaUdDQWpjh7LVjfOXlK0kVV8b`tBnU}c#(NxPKi1b_e<26P+~wSQihXbK*HAkaAG(X zt4O&?*GQ^50I%=D9_&_@1?@o(0-ZM-9aQ`&Az@O~9E zukn;X-Hq3heobgB&RV&XT=O&IBZ=9iCE?_Gbyp@wzOM==mQp@&U)z<50q?7H6w;?u zhe+aEW_5)U8Z|jN|9uaWQ@s<`S!s#kSwa@UAW4dzPa`QW8wQx-+6%>>sC^jM*fq8N z4z|d5cl`_e!J}$KHUSAGzJ=w?=*+P%E+F9ckS64W-d(>2h)T-4PFii--WxF6sSRG# zN;$oHa}r#Qnc9_!==&LheV4<^R45jNqnf;gXXIjT#8~I2PHT3sTb@SV%mJHn)IUD# zH69<;lW1q;J3Y#K^m&ADq#ezVB+fE59wl=*3uVDh)qJwrPgWVR`B3J;czrl-qD z|CTaByzMIQnbxDT(&nbJ(zI9hZ+bn8Wggzg)2qS(C{wingl?QHPr2MH;?nD+V0^4A zHmQACFmbZp#95f=4KYk{dw*P3jO%`*<4F;n9#5$i7w#zRcO7D%UU8LmaFrZKCYtB? z+J~55W+6R*tIok(Quc0lI~-L?XKdNt8yq^@|1oFv?*O+rzTFOdAMjRu%tsoTkD}dV z8;?OTsC2h(D(7GWBkPea{-=ohTF`Xo-wdXk;ojZ4E7!Vd%0VOoM&jRPJ#rrS`tb#Y zP7RL0)9a>g)%c zi-8+|ULIcNI_NGyOg+4x>U{KW1mrs7zW}-JSS$8F2IRV>M(l%PUj#`1Tp!`jdlLT9 zKkrzf|Bo>o(BIzxiLVDln!WXaT)*&K0qMt!yE#YT7W^)hINhUw^iO3@^1E1Yim1qs zEB0bQ%G0>+yAKdkGcVUCFy1=+14&V(z;b~efdI<=K|rp5JhXtBjF0OVQx9(voNhFC z;8W`#RFSdLIEZZynT3?iGQD)sb}BHnXfi7%n?09IHm^|M z2#lX5Hd%W0Dju>Rv-!u`XVz>Mv(cwF3ltAcF1?OXV@6%12&vb>^$enuYdyn-yUW86 z^?HVf$$B!=QTb^+^aEpXv_Z9=(akdd{jlfJcxcFvewSghCqj#^>lth?LdlA5Ff(UP z!#h~|H~$+xW=-$`8mrw%bkkP3_QUo_yi8?20DkCFT&-x(Xy-IpEOV`oc%L3ko#gES z8ufnNQ~P*C98 z)|^olsi7XK+O<2M;IM$lq7f3LwK!0@k741>-uAh4_B}=SvJM+rhGuJ^;hh!Vf++Sn zWb=jv@aLDA4(8>!Gd?;bY%PFp2LesTTDoBow$2T3<#7O$1G`Rm_W4lmzjYV?Q_}J0 zGuYXYzo|>))zc9sbt>j#5%VVGe0MQFqf5+f{(FjcW)puOammvp-rGOe`B@y%PTtD^K-=ja8dcdq|j-od@#t5;T;!20A5w z$CFC#`V&!=@hGt>z_$MZf_=4=D|+@*Tn&`%fNBp{RMy7<>*>ylRKVJY5V8NrsXgV2 z0le>G@nUClY7-8P?eNOQ%>=A%-oWorVp0hgsNv+uO*T?hwpj4#QV3WFbR;S@TP!y@ zG3*^qT*T``5K8A1?5N@)DD0A5&R7Rp;s-k2^%vr|@5t>qMo|=R_4toG;A<>u<5Slv zsE?7j&M8CN`ocm5sBLvn+;#L@+c$l5RQ&G+o!hP2X4HV)D$Q@TOx^tSn7A;QHFXjK$V2E zPPAO+p&q_**He2JsYW)d)JVHj8UKnu5qMJB_73dEAsF2KjV;#gk+CZVEnnAu0^**o z8#@&9+7|4yMXbLkW;9!GSlj%G>c{ZRy5fM>ty=i5eErWs3E2UZqO8~b)|=@dRMaEZ zS1Tq(5-Uo|_GaQMG6>!NYgGy9B&4fI0%v%v_iU`T59M7YV{aU^9P)~{MtY+I>_x$HfB>Ng5(v~I{lvx4%<6RuXxrQP@0~fTU&EU3Gt6hd0K5}$E55(r zdk>$bfl=X@K^tXL?y~8T9sr{(<+XbClzzGtJ$54)bhzYD2Phxq=2R85~ z_W&@BSTCUGS%bO&!d@G|&K2!zeZ1+tUh%gIIyYMtjST-ssrb7kR_tN-{aeuRf3%rz zQ#@1R*+R8l9700KfqEQ-T3Nr>9r&|V(S#?{Q4%UYQTt~!uLvRlWKX)j!PRf>jj;kL z^eP@xx01CfpS+ajE7y&*sv0x3x1iW+Zu0MxenAO0miyHP?Gail}i^Xyx1~wm~UaZvgV)I2J(ge$TWtj*x zswY=gFgzHQrRFAH3dLlW6EMg=4LbpSmNsy$i#$f=Dbcg8R zKSW+NtB~Sf_Hs9Ho3rgG=ue*L8Eb({%Uk*%; zx|3v&!^Ur3w`2D;1{Uzrg0Cr)*DESet@vQVYSfAZhP(K65&NJ|JN2S0vVW z99+OVR@V3uUni=Ru3uEl^o`lR{10i1Dr}gm37CG$Em4bFt)*YAT%klj#VJjWE(8Lb za*RHBQY%~D8BAOlteUE?lL}TL_<}%-P0XqKKNbA872Nj0fG{}xegL_J$e+qDx&tjJgbPoC|FPcHqkzq0=Ac+dikw)sN2zFAs!pfA4hiXw6?Tef;xOp zL47KAL@<7PaY6L-KcYM848|{ax$C)qsGh{=6YCpH9FZt5w0gB4Pr9#SD8I`SM_9dr z@$JR!y%N2WQ!xG?xpX2Qdg}8L@(+`<)xmZXe2t zd#tEqTuDjn{9s~SapI)*NROVb2qqww^9@Q|JD~mSKSDOz$$8nxptYoUJ31PSVnY#` z=$VaykN$|@u@w>c2tE06r0O5UQzumEkSOd?bM_fqR#Uz@1K)l4mg4Kc_ptmX&X4ZS z@|!vZSGFW36TI9{9IHXhd_Y2F$~3!-XCU&+Bw2M{JVy zsuwifxntR=Oi%Zm6@QG3hEb~sQX09PLws*Lv@K*~39 zDox21PY`@F9O?d;K;CB$R^FcoTqSS?;PJ4J0^-b+m-pEdA1iPuAmc-3w0|FgL$u)C z3y6k2_|Jf}PYL9G_9#N{-GGAt7mNM30g)u{6@c(J&@1?vf*%h^K1>|_zk@^}Dc%$y ztknJXwEr$}Lf&IfdY|BD0W!QovHt{1Bf9SfBp)u72=4_Xzoh~z0ZDf?Ao*SlNIu7l zJ@1D{(!IaZ^~`%OAeLg@<$#zmcy9nC-?4z?dm<=Oky8nkjwk6Un0wi6f z*k3BJ6%byFQUaR<)(NZ>ST4{b5J36c4M_R3>Ce6=cq=lAW+pzmoBn1qaLSwO@X@@7 zk9dj*4CAll(+Wc#!Hsw;GL?q+<0yCO-xk9TR%vqq5Ic^t%fcUb;2sD46%L&FXyJz$=l)J*Be&T&sF_99kW>GlIOdSKAKkHx42aE z)3$0XW>ZfaICm@0UyJaE!0iAg4mThM>;|WZFAP!KBUNQe`;)}}Z~)gc5G!?_x)js! z?Xn6ECJHxE+X*>DcOUeztO3TM^`tmPWU^Rz$5%q$d5uT?6w`vtg~IfiBMd*(7BENt7pLS^74%$ZLW zGG-7gzZ|w+iC8a3tT#GeidbJptdA*US%a*jc2FpOi7R$m*!pYOdL2|I6(MV{5bnjI z#g<>8#P~s2i#DWG%H6BhAe2a=ss!v6lL|;pwDuCkFg|_e!GhT3y|DFWI1w47GO27Y z@+Ec!bX{5?okgt37SHb1P5_@!eCtqX=s>PR5sYSLV?-gEofkMoH#DTc#J%bRB$}+S zT?5G=7`hwoMTXbamSEX^0aBt9s^Xx_r|ntTB3J9Hkoib`*n+=I^-z_=YK`?yj7Jqf zy~wH%+o6@kw#}M=6F;~ElrKZ4Z0r#^#st~vuAhaFSOqxUK@~U)>Ka|Dz!9thzeFk+ z7@mvWj0>a?XDR5g^*2cRe4W>LSk%XWpRW-@c5JM@WQ((kC+n+;9w4U>F2G{0KTt9$ zNKv*k+E39T6KhtD62zgdb~|e9D`D#sNECqU%nH=M<8JsVVu$G8d`edI6JX{4re^2$cHp&Cb_A*O-D%j|`lH1r0K)CE{`9Nwgaiag8vF`OQ z?9%v-8eiOqZiCfo1`4KPCvqc#jsZ0v`A|Y;QM`#e)~7eHDEXMN&fUPLmk`O#Cuc=c zH#6RorHV-HCwN7-yp^io^laDPsO;E*|0o*?3=O2C?GhCj zTAOZ@uWC0+Fqv|zK+*w)I<dcpV2X>T4iphWra$CGJGzYB-_fYn_ zzQ+pcYM(~q8HY@>^%dW!zG91tJubN8|gfh)_jC#W3AO5Ib3XR+ocA zAybn;YT{q?T7Imrt`?%KqW}t!8oqdiJADTQJ6l3yw#5o@f~v@OPhn|k0j@(!k*Sg) zXF4o)GRLx#{*Fb8JPH>q*vVVsP^h|xVjX2i*0~LJb8RrbZD?d{%^>&6i_zf1i9l1E zzPG2}1(?0rn*EQ!&)0lAa<}am{6kIZpG~0aEJcQ}}lu?ODo&TQ9vReUQ{bTFLgokCP>%d(4Lr0t5dK-ha$Ad>2I*PD@mF<9NPz9Lt25k zfL4aq-L97G+V)JgsLlfgfWl$PpeOoyUF|m2B%-y*KX#t1B9L7MTIxna-dVS-z!g0m zv5JGgEnh8_0#?Vix$H*csb1WsKtBoI?PYuqnH&3>du*+{o_$g6- zn2rjg5wZS?9yK-+)irtnf*X(>-2Eyz^01XWB>rt3kgc+P;J&`l*ztp4ReLk`7a~<3 zhB}|OHyRvCRM}-(%rx){VLH)KSX$t&-wyuh;B9pnTfL?_vkgc+riwM@4P$Q|wEUNP zm>G`Yxdq#4!!Qv44ab&E{M4-B3)KfVMaQUa#2RjTW{iL{5%F|ymY$cq%6ZA#x(jKz z6eP%sBO#Bm<@{`w6}%_UHb=%wE!_k{iD`H< zJ29Sh=r`~O?*yz$=u^yPTy5(#=h|$}KUbW8XgG7cQCUdtZ8yTpY9Hj1zrX>6t5 z-r4ELd9_>d(a!9zU^4C57HH+vq18+oFfaD-jHGiu9E@1chpZR$MdoFDRp)mf!uKVL zLJ+w_yJKw$_6*${Q`jp~XTJXtk7`wXXm7fy^Nfb~37WT42iEr56Kv88pK zdp)+$`ozvdkEZ+8c4|%Uhagy|dOmz@z@Ub7u>)*-5M`6_6(gGmp>rvLzDWGQSMCNb zwy{OFjQ!akvOV9aJU>s*H1(MEp9_{-u?g=*SJ^lY>b>{0fc*j*&|nMkUta@SUt zysfq%*6{;hyX#lO+S(M~Q4l|PjJy7O!0Kv$hnoL7@*fA5-SvOxkCwuC>Pspme18v6 z_qS8-VSzd z2HcE~;Wc5F8M0o(pu-K-^!cDr{OexJ&#l7=g0t%GC~(C**qrZ$!oe7I6MXtQUnE5& zx!{{Sceni)6KDOY5|zQ%2(`l*DI@?NuX)18a5AzpV(nAusZT9)$6E_xmvM6#)9Y0G zI9+Szg2je8_~&b0%{gSU-%s6AdCJ!pU`Fh3{5Y6UL9`!7k5?owJvTV)MQnVxlyx+2 zF0b!!H%vv$prRl%RQJ&gL@QW3x{cS|${OqXs zR8%}n&0El+0ztntfyyY|yxT~y3zLH`{b&6B(P8UZ%!k%ujKoX}t0>HO6SbJ6EGP*l z&cuPK6zlCMyo6DoicZD^sVTT=pC^=&0LpFvC1{?h@UXY=a}b(S!P>jfXH@ON zxxet3_g0*TOen@ik*&7=OyyD|YOBgoHo>w~+o!OthaTnk0U=sx*s<)?F_GQwh6fey z857y*ZdilgOnxE#pi_AhZ?i=T-VdK!joCtV3m59WeU1GQ&9xlx3QIkW1(^Av@pixt z#az)G#bYTP!*PYeu4tco0y`Ufk+csq{4CH0QqaCpO}u>$Vm=95Pqvt6+L^9Esw}>x z`jFB0M20q_nswIih@F>?BUl`j&0;N*;A`e-cwvEwlI=9v7Uz5kGvX~i>v^9A?Hb&% zifSCgp+lbsQikYIsA)hAfv>62p#v%=(Ava`6g+K8!kw*LPg5ad93N0YpMH!ATL~&| zMAOHeB>pi&qbKtqBjli1cUn-f(#nXu2PiS4g)_0_GH7u?7@Dkr8pq(J7ocIHpX&Er zcC%H5IOvI6dmzKWwK6;yNYzxIrDqCl0n&inch}eKL!pRZ$UZ>(n!K`<=OX82dd@F!##(4a7qco3 z2v`dX+r7A4NxF{9C0M^`EwQKLjXdr2V_l4zn!>;lJw23IQOs#mA6-mP_zGDQiUZbJ z+j_g&nn0}L1F0fb0!9Z;#hp=SkBYe7e`HqTeX#X4{|<3gJmFD6bLG!HhH0|j_1PY8 zQ6A^OV|$fk!gR3)ae9Yr;(f0{*19iZ_yk|#4rPw4k1l^=c~Bjx&20J?U}6Ek7+uy z2AScrQi^FNlGIjVrhLI5ll|_%rb3rY;j7tgr-M-Wl?!(2|C2tn2yVsgh+zxHYj%c8 z#Bx06c*k&#=dM>>*=cnkcVW)jOvv(6(Gw|Uy1+01W1mB7e4=8=QLlvQNAYHob9NM#W6+1wQ>>%{4{nLlT|97t5ekIBf4w!7MfV}Jzr&oTVj zQlh00wG6w-IsQ!#VLK{u5r)0yx;G2ZE5_UyVKM6CjKM{1-$9o_5yGlVPqhg;PacdHSycN(c_N4}l7~pOfNPDpK%2kzt=vycV|FxyXz) z^AI#d2%m9JY#1^EGogmd0nu2Z6WMT3hHE*k7#69zIFuZDs%aOf+4Unq80ozf&4I-d zv|dpGhYGMbSDM3~9e2tzX|$er`n?RkEm8Ty-G|<9Kvh=;|9){8%9WfzZOe zYfOP8W;B{Y0Sp!3CIwS2UCQJElu07+0Lou$ye9iSgXrj7;aDtdtxHk8+I|cit%-Y5 zHUiy}&jkUFuqXQ^vR$8sA7Aqbx?TrYZqsVNE6LoaTtjrdlpVWhGn4x*eYZ-zq26Lx%Q_0nB?g@TCmOxm!~rwz;4u2OTGqHe)aotcgakgN>_P zEb27$2wE<%PGFk7iKl~+QqiT3OqFW_FBZBCZv#)m?L?Qk^nb$!TW~ZcdK$xjkNmn8 zu)BN7>css;%vHP7%jG>YG^c9Nh5u@C=hczj`o~(1<}wTr-MO!Wz>TH^8QPtD3Zhn; z;plU_b6-42yHDxCJtZ0QY7g$hzRUZ@rC^I)URUdDT%>h&3L7+r?EBV8=f}54=$OyS z7`ln^LMkns2g~{RN?zCenBU46I)@%H`BGA`bDyS{{O=Mz`EJG6B6KVVWqROCdM=%p zy{GxIT$C~NQ{qRgEK2rSRd_FAt>ewJag85odX|$ihTaix^5<5|+<$0#mRm0RdeHCt zRMWE@bJ0Hr`r-qcp5=Nd`nyll`m758K|1gPfyW5^1Q|>FT>^gw=z;!dEg<$jystr1 z0aeVq2at3>1EgMZ5g_T_M_5e()zQFT0K}hnE&ieD zdw&8*zBd4p-)KN&z4s`=KSSmrE4^C)k>%bnAi6^D*?mwmr2n~sPZIo5 zY*5hsen7fc05ac43cMGYLi>dRZvaHl-m?MG1if#AnC?vi>j24bj^IZK-b?V85IOwx z_69^0z3(BCXhPmafb>@ZNPgvj%;#s2c-pT6qmH3{|CW;D0l!6RnuDn$aM4pL>2eG1|a~docAF>`fmgz-xCG4 zVBBN4PXN;XQ9y>*1W5Y0*hdAYK0WC!6MV4Xov6&Te-DuU_X5)YCb9pm;Hv~*Adq_W zjPGfH%$IFg_A%bS1!TO(0-{QJsc;DX-krMN99#>CrtYPJ6T|TXGW@dy^4=EOzXC}6 zQ38(uWO>{MOWI$Bf5dqo3**gmMG4(kG3zOBmRn7VM&-0*d(w{V5PuvfgXVX%3lDmKLR#-t-FYWp&8Gqv_ag= z4;lntjCxEn(%{G(nuYjCpF-kjBKS?ccaOr*w+LP*csU^5jp3@DxS6jk51{pMcEFj|*8C*r~jB%`Ht^@;j$594-OaKQMYG&P*bwLmq*sk(PhoJ4c9&*UK z%qLTRT`%`h_oL35jUyFHmMmH_6EBL-axtpIjU< zb*{kh!SJulIE-U<1NK=a*SP{S|My5^pQ6V_*A$G`>=R+KSmrucVD9az6Ml>Jc&s_$ zKjJ+%jo?QqKDD%VyqmEG;nRK%B2f%pOz#wYcEkAbV|g5|pj9A7y}mDRxG0JiyVviCA1t82>k91L?TB6y=9L&7n+l@CLz@nI z!oA(tFFG-CRSASDk0Jkj&9@Iz?SD+o94zHc*yQ!QG5w z-YNk%ssv2e33wKJ+*!dTN8OM3Z+H}8rSDm=HU+JtAZ|>0= z)*Z!&6@Th588zRHzL_cuvdYVca~o6TPD`@e6}>8$IEi@?GLb7+k-Nl1t}K2>i7R$4 z1+&M8cr5$EV8UFMkQiSaDmX%g$=$%B#Fe-NrN7FVbnw~v-!Y+}5NGVcr}v5yJkf#} zX2@l%^D%rd|p=NlydglrE5(N`i zGILj)2-`tryXLG8jwy=zf}NY8+&ert=9%Rm!2x^89kJnM9eCFxO5LP$5P}x(aW=Q% zLHzSIAA{^yA(VBr7s5C64)7G$jdJ*$y=oQc(ne*xV`@N0vFDtZhIKN_3>WNr4ZFCn z7I$9{?ycfp0odL7@N(gJKip>(^zOpHRcvZ{aIchJ4r@=EF8=Gp{g-g;PEIG&*dFCn ztG^WajAD;}Mm{4r`$0dxWkM(U*e%_B&@C1^$&WGR1bQA8AaM&qy%wJ^; zo$Y;rci>PAJs2ADR>sgxh%1>C)4{bsozOAAmFb3#Ym7ZYC;8rOI=FV&DRj*LEPnD{ z0q@Ji(#88J$_al1pTNKVz#j(07~%B-V#)7)9J~mB0*LX~dk-M#sR55M#yddZ?Fa-* zWA811bZ3pgUr{S?!j!-!fpr2a1(pl+2n1064gzu=Wa`shf}8fSN$^%c8jf$IH|^th zg15qsrU@V2%LSh^wR|Cek2yi)`?>?~-?F%XbnD;o3^ zWs@DnT=VCh6m-C>k#v?r=t_RZTs1Z^B;VV^%U&-mSnZvnnSe1~h) z{8`^gWxIwbdwzpQp2+qP?w93oAC<#h39Aml|6k$%EC2sh|JvA!sP*7jzXg;3YJZ1r zAOGrq4xK;$>VFTNKmQtk4xK;$>VFQMKmULCKZntN?dvm_LIRU2B7v)Y(*k~t+hqF6 zee(Ee0rN_?rkGR_4(ngCMWE;^rcD^FcOJCcl&i4}^o@-zYmeF)#@+ z3EQnIrj4H#iaZG!n;vTv#;LliI6Pg-wgix z@F&a89KN7h?C=Mjki5(T4u7Inkkjw49sZ!Zl9$=&@CO}`yv&~+{;>Sc%e?FGC*n$O zyC2eg=J03aa)+{KNR0B66Reyc&NeJNy+5>&b_T z-|1h(StdKv(elWzp4`iGxL4+Iugl@yl*2uh!@V_!yAe|Nls=E-NKfwNIovCAxYy-y zZ_44G%HiIc!`(l{wt&a=16;a8KoMZ_VM(%fV@SN}nf(dwCA`${g->Ioz9axTkWs zx8`s+%5FWTU)H-lxtHf~ugu|Im&3g&hkGiAdutANv)**RuTY9Q!L?J#J9@?{>F-ug z!w6S9&|is)shF@ z!=Ov$LAM)p&3Vv$1-f;4(3N5iwKfmBFzA}{po@ZTO&)X)fNpgjbUahsmeA8;(g2UOt;?gdog3*HYkS;dFr>f%{PYim$+B0?P#!3)~4J(yb9#DR8L3{fIQ( zd2WudPGC?Vj~CK@4jYK`EEnhz=n_czpYkt|@c7^$fydcstQ)(cI1W;Y%qD@1}|WChlqE-8e;rb3qAV*(zE{2xB-b* zDhy|Hgugkzb2@2AFYdghPSJyohA#_||1!yM9EZ{L;(m;{uM_u5iO(L%kD%~tMHn=e z(3cDSw_(TdQsTbHgbzM697h?xN7DBu>{NWk{W~T<(7(_;B=n6^e|TSvq8E2wuTOrX zrM@)_{S={pUfkD+`>DdeRl?)APyf>;KD;wb#b4aVOZw(Y`Y$y8rM`_e^nxc${-A%N z*(UziN`3hW>=b`-ztN-@kmi1g4-aY5%o6_Wzi2)&{K1#zETP{g`Tr&C6n}B&<0!-{ z|3Bj11wN|k+8>{2fQZ20gO*y*Q9(f+O%Mb`+l*vjMkkmnptMy(4B>HwB+Wyyio_<- z9LG`GYOlSwwrOiy+FS3B_EsBFbP(jBRpX(V6z4m*bb@pC+FHLX1=BHly?^OCy4QD?Tdb}U#c#jY3=YZB{E&LeH_X*uc zOdoiUwg>NXA$?luS#1nYYj_pXAqLK&7acqJ4W)S<)LXn z!I3WAcWruFp66}2=C97Cuk;Vv{M-7r`O*Adqv0Vf&$|}a^!c7=`kj(GZV1-&J2m~w zG`&u(zoRrfqsmJ9<683g+KN{Z}y%b>VSI)vP$C~&m6sH<({KQ?V)wGvps%3HEvHxj-t57 zKSvkbn9C`e*n)n{i`B1)x zf_SAgQIowz$ttbq4YComaecJvYj_4Ky$$YO>16c!k){&c_IEv0zdcJ~_208TRtG-o zBYh^zB5qF=WGQlb3@Lqz_gTtpe{mW5yNer;+gn`k+|J^9yDg)A#SQRu71uA@Q(UiX zM{&J!ip2u}*>d>%j2p*x8P~(jS2nWSvM!OQ3%P#MbFvpy32F|#d)wal$T17s+8!@y zIuGs{?;hWravFbs1A3^lP3ZCTH=-vfw;4SFxee(FaH~w4(i7xqOpkB2IX#})2K9P! z=zDN~J9>g_OM1NAjComj+Rj5N%_Szrd108ek4_1+6~4shV6?^oSe?-iQ)5i>2vz5hu-J!(z`uIPatKhxnGDIC)>w833xqSO1Iy8 z2t9r-ojVjfbRNGf9Y%+jL{K->H^{X*P0_8eHY+^&yHZZ!(+G|(TE~%_cl(~U;IH3Fj8j;_{6xCx`#MMva9F~LK>tVku zH&}jX7Zv>_SuE2m_ohDqh@|7Y7jFmBpNuftbUpxHT;8eBh~&o~i_T_0)U#P2b=^YV zi>FEU?VoyWTPYz>P3rHnA=1kAUlXG!npRvCo^v<=pcyjJ& zUwAGK>&m|HTs%3KwobG8ajwn9VILJ%Ne;lAv|6-|2cu~i@7Z5kP|#e6y8w%0uwQBo zTEi~I0c&dq*Ts=l?ma2Ir!KNEvS5D9*xM|3o+)=8k2_C9oM&N@cWf*vqcoO;Nt9@J zd9ooSMu?hDjwk0BgZE9=jAWTHeVK6DjRCwZ$>``<>*rw8=2lcD%wdXc!r&uEx4u6# zc+1oHqC-QKVIqiCPld&=r~Cd0dwZ}bb}r2GmN`$uUIvVFFb@eQ6~j(^x$}awUb*vz z_$I{{_A*L#(@;h?zB0>?fR)JqMAw7~VHi(}><=6kY`+dTy4CNo1K&%vKls9e;7)!UO7l28Kki?IKoUQsQeCUdUI^n1!IG$mx!=zslt|6YTRaxXU$|MoWI1J zZDr2;um{P)3a8#yQ^(KYiyt=1(#G?1=sKw4bG%i|C@|Y=+cM$6mNSW0^bbCw!;6cT~;x@?{I!7vtU<7rIdtp{Lhx-Zzi3D0P}w~Ms#dP`vp z1sV011Dc0+>gytge;U0oQzX-^-` z+;BY> z$hkE&WqX{nEqNE2=rEN6vK^jbqxEf#)7HE5=ki%sjlJPs*n1g^(P*P4?_xHZCZc-2 zz!@Mlauxt<52Y1GC@gq&&=zN`brTB~fPGi#W>Qs;q9Hx?)OQz2q+;4PgQ}PR%9Axk z@zxJNY(6VdeR3k%SOjxYMJ4IT{$Zno?Yssx;oQdplsSLW){%l|P7|7<=Fu9S`4pO) zQiqQo^OY6|sSJ4t8G@-+6sZ?O+tvnqSGqkdfx-4um^J?68!gOH>1?x8Hf+2Ad|V#!lOCW8FJ>Jgo>g3W!uL%hQ{DXEDwi~*V(mx&;F zJ3DYZc}-Eg8U?YhgWfZ7?V=Va=19SN&qQUQtCqmu+wfwW)|weJgCE@r1i!^ zTs!+|N#@egt#1rNc8)}L*q}B`y)@?+PhJ*6sV)27G>c+JT@szSuX#8yHVLdz@(nlg z7nlujm)Fk;f@RNw1gyU%SoE*pB(((dLxu-z?Fx6(oH~7?s$;3~yE#aM(Os~;*769Y zmIsj?)H90uhA;u&3hm##TV0Ps^qY`Gw&A43*Urey zD%qWZ;p1u52(@+LZJryCizGkQ{@jhD*g~zF4>Kit)EJP=zI|s!yPJ=N$-;idk%fL; z!+U*wkHhZCxcB>DQM0e_Zu~Z?-yY0EN!o(a-**Ae#IH(!^#476Hk^>*Ufe#Dm!F>v zn~Qc^fS0D7wQ_#u)A2Xf~K;4CBcn$S-X>uY;k&g`q_9!eVsM{hLdh z3(GNStRLD`3}MF@f8M{j5GEi~)42PA&M^!iTCyMa>xw1gg~sAtriuph#M+}*5+Vu5 zt5Wq+`(piJ7)L+BI7+03e1{-dmM(|ISR_Hkes9=pWFW|UH7w?7i~Y0Sr+Mb zm8Di6hM5&cL~s18WGywV27H7L%ozJ;jP1ZQ>L10I!j(VQ?4O`UWuSTto91r3cs04E zm65)!HucENtv9U8oXW&g6)4oScM%)e{{w)VeT{e{E*6faF&Q_((BZUK4B^9GLbsA& zPH||2<_K^>@;=CqUhA?;*ZJEQf?zq!i@xOi4Wpy=gE2Rh!1^#On#)ZxsE>_2=z{@b zM}O;qV}tFF!moA9o2?%lyY}@=AtNAD@FSsGpF`A{yI@Eap2#`utpyGvWm0jji{R^yI1(DbjoNcm_<&CFcjg5u2Q70l>ReNCT1I@6`pd+eB(3d)Q^ zBrENhNXLWpXpqwIhC9OX>J8qRE(<=;Q|9!bZah|Uw}1?e8TuqHl*a|c$QM7%s{>d< z!%r`MnRr^`#KzFYb3*ukJw#N&adXIUKAjgWuUPPf&&l(e;eqoa7tD{&TLApr=%NMD zOXfuqA=*1Y+~EOSQF`$u=Y|?s(mLjkUsfpLJV>mid+U=D7vi3S#2vM?Gz_Jk7uS1t)P*EW+2 z>@YM=My7M!Duec`wt6Mg2>rraG@KFvT)*&j#-H1Cbp66R#ar&&%^SX9knr>%;oXCT z_Y4xgZ;)_XqJip1u2Bb%fx<&tBTriv z9nb%D9ReNC|8*V$-Q}RO_Sp`WF3b?K>DUj&+4jw2mu>;*Ti!MOf&DUvK960xHqaMCUZP_^JsAB@vA9G#R`&ox0vU4$ zAnrI0e-#ibQ{e{n|DyUI3rPCmfJkQin-~woUj`(8J0RoT07!n#3aiwAzTydmyr1S& z&`$z{3%`qoodozhK<49BK=OGIkaRx+B!8Z1pnpo?jS8<-xB`&;W&@JGMEy@wI2{A# zMEH*ZJPBqSsi%&0zVIK5OuDZDl0WTrF&}Bg{~Hi%g5e(lVyuV121x!lY4}$FL%^?4 zd_ExVJ_;uQPXL?-NPd$w{Id#qMu_RXjsAeUuEMVXlJC=i^xpvZS>T<3jDH8l;60$n-_W$ePK7NB7b`4P7*ZHe*aJRz9GX_xsjx-i zVuhs&Lka;T9@nI4Kg_e^FY%{K;hFk3^#%?60g!lF@ni8!yhU-V zFW0H~y&B%5_yvkHGj#LuV|?qLRJ>a~cySlQ*D20=C%!>(n&BnBPw~l$+xL8(#t*@t z4s9>=_B~B++K99JAT7X^6i;YqAI?QMZ@Ayy*GmZWhBKdD{0m6Si*NRY*ZIQl@!?PS z@MCTCD=emU(@{irS{itfy-=%M)OB(-+{P%DI)sy9PYOw_^5!MMew98Utv;zM2Wk z@>dVvwx!{vVRrXl_`^6^{NlB_2QIU%&8 zP@Ok~aq^P)^CV?sQ$v30ya9|+yDEQ#eEy`bTd^d61W$n2QZN<2w6V5oRn3`=*vqT2 zC8n7<p#Rn?cptUQOOj+r%3s;F6 zse%Q$>g88gF0ERzQrm@nXsH-(!#7+rY_hSnu5CaE&`fzV?`=V&z>#B`&6~us=BkDz zCMU3kHwC!~R36061U9`JP1mzZ7oT*0`kbl7Q_Uyw;^C<0rsb6@S6t=Upnm54w?4)@ zrU3688DDrU20Ag;0wMh1@NNt6EXY94>VKz|rbFj{zPI?pYhB!-?oW3!5*+z4FR{^q zz)X7d+n>Iwv624j{QJ{39}sU`$1+-%Gnc@#(ip+B!N7g{-I}k(O0f>|9P>9CLK#HT zer~Y+?qbcDjk^#0yv|?cgY9>hD!)=25ppfdTaWy4FB#5;2r}4ycZ=qS=Y;4=(XQV5 z1N-GB#Qf*`5lw~4FcFy;rd(skl(NDYoFA`l5z)i7weJc z%SLiRZ7;dBrbk?{Wu5b0NxFUK>eE`^J92H1`*X(TMJ!pkS!~9&ZvMNnaGsWE+}%CM z{w`@8EW2*nhsE7Q>W4-6)=8woOi&l;5~)oAcw#}-X+Hp>Owh|Oxd`iXKO}*3594a$ z%=(0cE@ZZ+S7Xmu%B4FSnMrm%cq0qS-7u`7VcGrda%Z1pn|mSHnUXz`qhKJep!u%M zVQwB0$@`gK+CBTMuC+44*tjz^=4^Lf6Be0IV+TNTJSx6j#;xL5FDJp5B9}+5P*Z8S zcF^4Y@76cRMw}Po&VDS?M_NDZYd$jJyerJ(&Q>lMVv}x7H`Xr8?1q7}g^P)&U}?5n z=t_2Cry*GOvg?7>O00(t>-`>b5Z^ANFyS=sh*x9XHkwWt69`zI&5V%!{&?TEc#>OGRW=I;_E=4{zN8@2i4 zMDl8EWtknNvY9>2-{cBsvKcF>3(Zz7c4@yF!{$QnDki%l?D%neTNtCEo5!o+22B9l zf)Yd%cYRGK+GSH`Gkb2+Q5sQ*c?u6(dB&JuR=*)R3=N+gb$WrZgDCq23t*e>-H7uc zmR-3U{Af2~Zafk3ZLv^isQO^r8whxWp>`d-%$Y^=fgJ5|=XKQP=-Bqw9l+@Dn3e~5 z?8-iF$Ud&mK6dKkBOQ3K`(0&Db)ly^KAXQfSQ#N(8R)FXdMm;#sAndlZ4RRz#pg*q z#1t)g{a6pC-5qQ1?7sur85I2u*c!wx|BDgl?-A@OrlviEI_O_4_cg`+ik3YtiI_AtqzS7OZGsmNPWp3nnjM))_aOgs$n?H|@8!C8A(P8F+IZSBp-{M!>Fh-ES`*Di>5#ZBDU1%5g#3Q4ywNt96cu#JZf$Tuo$oy zuoSQ~IQr%d$W8F5TLg@rQvu%!gf0eL3|J3X52_YJMG#BgypF)Rg#cll1V`N>VD!yt zgAq{Ws?_LTQHcmTP%-DSNipZ*;)FAIM#8yxQOudU*u3tt`U|XI(3XNW2HJ|e;fCLG z(A0xwb;7x&1qmjcJJ{PaYfQe(>VN&J69M#5eXw7x&%r(O7yQL_+Xo-C{+*l&;jCU{ zDW|JLa9J6+I)@r-WOT~aAp9TFN1i`~>leOQys?&rkbLX*EgB;x>)x+R@{mh_9y_05BYr!{<_`lsAVH_*L{ zi~j*34^I16AaF_keV0W_r~M40C713Dq_GmedZlB36L*mHd#*Vx-fz+m`RRS@_Y*+- zYy2v7y`TM2oaOJaBl>p)bSRzHOWys4aY(aX>DWJW_|0t{dYf1rHQp>=g7nb8pksd( zXVbs1b=Yk~Q*I3A_Xg1H)BOhaUvZY+lV7eSj)g7RCeb9N z(|(diZI-&rA0(=;}4ygVF5)-6EwM zsJ(gqlKTNCD;%S+5AzTG-&NSFa2p`TPMGJ=32y-$54aML`vO-0;&03Z{sT@eKf+N8 z|Au*QGVr&}{5SshfRIAMFDm|Pz*B(J95(*OKcxN}h`|41g=YgYy$OJ1{b!VweE$Fl zH~vLH^4+dD*G0*<3y>^mpO$nt1ELRyzYK`B311F)8sK~lpA2{^@Z%Ie3=rLD{BQA( z`#--1&>{QsIaIwNtg&~Cjg+1Vl$DwJ3oeEnN zE>>8oFr*Mb;;jYbzJ*;cx{Ww0!>&VZMHu%v?0bNgsfpY7@=(xnAE6U;bl<^`xP32^ zRKhVH=%`3de6e7Gz;l4aTSy4UenZ^8m;b7GNJ7z95XNx(Ugp{uaqG~xO*lF;-4~SJ zzUNL;e)hdss^RuM`j+Aq`riAtO<(cX6u0mFKO+rK@_`Ew?!~zesz2W!xaPIqf!*BD2Z}j1nK6=Wd-uRfaa_||x_^3c=sI0gs`h`kaWUsEPzfRV%YE zbj2vpQUoC8${NpxKyGT>(7+Z#)ha&+22>-en{!rJHutQ8KxIv}TO8xDWcliB?V<9P zd$HxKs;a$swGT&2)i*bSEgp1NB2Q);R$NoXT?(zx{@JRmsa>|BmJ~T1g$2s9d7*4f zNNx<{hs>}^{OpXMZ)+nrzSM2=RV!Cin+=hx8f&T=s+U)K8n6;NcackG$0}!+S5(fK z=Sc+RDwfLf_(_LnfZq@OjN@uJ9QIF2ri8MtWa^Bwi%X`@oLUkJO)JK~&=fh(S5jPj z&Q$E2Oqn|U97DZ$_)>J4Cfz&9w{OCCS|EfU9M`ftyaQQ$v;TJJcUOpU;4IE*mOq`o z5BXf*+ZuuV_{jSuIQIZ)A+T<+eF@9wM2#>?=Y1Prvun{o&*6>Ma+Ye0V(`N&Gq4VV zf%3{>IoQ4g)ywHt8xY`oi~OuR@(}kWI*~qQlMwW8D8nP3yDwpRF=PDctJ``X6689H ztGA7H#ec+|kGanDRndDojK!8 z)+Y~x60j6CShgi|m@J@sSN=Tb2;KUOwY~{8>0ig47jTTPGv=&GZ=X}hmckB-o=J*0 zk4I72xAP!dJXJQ~FzgnrFWDcF6AST&J`ZC4sMp;WuYL*#l@^SE(*N-0V`6-n;J;xpiD&$IC67yMqtx zY<+Kd!%;0;9t}S5Wb1nquRS&%{K1orqhfvO*v#%5Ud#;Rx*hV*RGE?1_YMo*MmZpg z1;|s8)4~a@2a21=qS)UoQbRD0azeXoN9@+mmdeDAG zcixU{e*1)I!P}8%KaQkEd}`)9H_j+?7CwAIYFq;sKW8}QsL+KQB3(a2)u3AMc3yF= z=*E`WG?Y=AD>F^oLr4!e??78UGezSu#>Sr_s`I);oAxnMm1t$jg%4wG8+#=iaB2{~ zk=Bn;sK-HDUcD_*{Yt!GOG%%vzSefU(()MU>j~D^G*;esrSgVcdvwc|pJYx1d3N2B z!KhHw?U3LtFMw~$mYp51L~b21EB(8|qGux=BW6W!O{^^_>v*zd3z+_`_2c0UXP0&C zv|NWaj)=5u{)ub_l|fgZAuhvKFhuB1#7@6aSoBJy}Vg1(JiBDBV1 ztp_d-w*LgQ*u6@lFD4iMT8hukSh5rS5qnuU@D+U_;%viiORURw!??30ct^7wbsM=8 z@y)T@rFh!-O(xyN5@p7rCH^xvG$o;%@m~@u*)8KI=27!ir_U-+-7pnP|;$9zrj%&o;GQ_h|`?VRZ|W=1ZUO*^OI zKyh*4^5FsV%B)6Ab#XL)zIDNu|^>NAwWcxR~6x9 z!1-Nh>y`1m--!sy`Offvcg*sI$9y=}DstlU{Yjp#6O9=NW0dVLxrCZdl{F0wbx`V2 zp|GK*YURqh>dNYsHC2$mJqk8C+A}^8vdZ4+VHIMaB2$&CB4gz|BgmjL<_Sq^H zQqIFi!HU{t9yOW3KP&IWRBj2O5$P;W@rplm7jcKGC$n55kRKnHgUK=E@CoHT%jZN% z9Wtx*AVmN)yROGzdMLb)mabI(W1N8>`mqRG$}5NEVDcV?BRVVZ?X&!hH|4hF`Y2!m z{&VfguZJ?a$jEz?JDU*9{#rpgk7LI8^HqU|V&F%=y!S5Uz1@(?f^E+uRwOx$!rKq= z7`**4{KugvsEwS7(v|Gy`@Xz=Pt*C_Ha?jAHqMGpkfeqp>R#pt;!|_22yJskXbY*( zHd%$XkP+G@3cM86%2M?dKHyxvmdLG% zF@0WH;V2OY-f8`K;xBj5$St6*7|a<>@X`@D*S0H_v3lJi$ zA0vDGiYTw%US9pGk-XMLZoPa>z$N5U?^h zuQ~E5L^C4RGCXZGLKKyPGNoujd^UrIW%AG%F^qZ^B8DY%LybuFAMlhRiPOr*B$CbR zB`2fe&Xq>Ak`d!Q{)uER$Ym4(8tGb}WrWggpro}$7-t^tCuymerEjci#LRJAug)h= zjfOwnB8>8U;e*Lrqg8$)e{oiR8bIFKr}RuOhu$Y|U4>~4f8k5;53jWF3_uKmF_fo> z^SlP}XBFP3u-(A$w-88q>uZ3d<2ek>=iy5g=b0}&hW8*7h!W=dJL!I*_%#Z@tp4XH z3;`mlyc!7q1vup?TaQ;M4j>LeIr5NSUYh6&pW?$KKKv8NSBEG`<%(fgbhDCG_M$Nr ztklEGRi9}6Z2CFVT)C=N7D$a$l~11PL_-8Z_`z}g>|lDwT|AHimu4I|i=&T-JZ0bE zhbm8%4i`4A-tp?A0|EAhJn~dsZ6hTJSPpF)2TkKBKhr*iq_ z-rLo}hKHMEK%f*mY3R2Dy1~}>)+@i8mBVt`nai@%>U2E@llO{87}6Fk?>^06C(5fq zIV=a0_coxu=(rC=R}W#%TV7;;xd}1@-PRJ+tik+)ZzC z>_(htV$NONcfBUl6Oz`2e@@?2yF}sUM-h z?Kwi!7kPv{f^C0Ahx00q#+_|Kus_(wbF-={{3z!E!ytJv7C8z$&ygY#ihcs>?R;lY zCNJ4%diG@g31)69K&Ag$pyP<&o2;Yga1RLq=cG`If3e)`z(@l-M282fB`aWWAq-+-H z+K&H{!OY>*SoU-p6ait7n9YK@i)xv(oo&_?-NE(}=~_L|WoOsSSs;^M$;O53{EDO% zakl!{N#JXldy&m&@Q(3hGa}jinayVJ7bv4be#}R8ze{ztp=!-Xwb7*-DO6H*lCQY) zc$ssbRNL;R%gU?Y5?}ONtzRrMmh6Nu9Cy+&_mY!f+cs2vtZV+<+1M7IA3uvwN7n?WS5k_u3aFOx{LJ?bKWUS z%4l?xmVr`zzl0v{i_(KAF5&-^1f_4Yd6P2fNGRIB_iL8a)ni4T?1U$Jtp52fieBS9 zX-+@HvbPS&wKO8LC&*VmEhj4 z8qHTrp2orzQNi{vVuqj&dY-u=I~FlQoO{^Ga79tmRk7;bhWE~xlVS$77Gy-?6hqF4 zj694CVZtBJ;e80>@*#Iv;uwuqM*m@nWfPlp&fvslcNj_$XP3lmPutXag_XChB)DH8 z1|F4`&t)<;Wel?4mhqZP+#f1$_v|RmWt`2$XBgX#R@^S<#&d_NTdr&*8QazEB#Bj< zd7$7i=a^V>Hv6Sa0PZ*=rsE8+&!)w(WDM`EI0#chNEG?4KFa@oHov=t3Pq6nM2Lg%24v^3Bev5;-A`KkrqXTns zA`9y?0eW(dv*GqTASW;n!h1Ik=4^h(4MJzrJ;_HmP`umYf@~@6yDAKwV>?rk096fop0S8ducS2C7yr!#;AJV6R z!b=AUUpz>7%OK&MgM_CC3GW#s+?H6IzhC+7Its5C%(ot8^&$21uwQ($G82&V4*B8_ zw4OBq`G!7ip!lzti{Z5XF<^7`?@3pN-=ssJTM4?*A<*3ky0M2q$G64kL!jFOx}rm% z8^PK;1Ujyj9e8K(dbu2Q`;^Wd-oE-f14*`lZkN)royA!?-~B_Z?_YwxL(ea0yZ37s z@_iL_^-5Pd2;cLt&J)JpctDVj83u^8rtn+%7$W`};90=;Aw#O1LAERz8(-|2sdi@bifdB-nT=49=b09>;^m&*M;l^ zgd`f?42XP;?*e4LzGLt)H)(h?ApXYJ;@@Wxekma7&I4rrKdo>yAo_LqANT-11#A7k z1Dp)}NkG!`f>hG~0Fdeahr!3+so`JI@H#-OO@?a}j{~w^W*K}u_5GRu_aI)P?ZbZp zWc|JZh$W!#lYlJG!+<9O{|4a6fXe_+0*nJr1S|n${fz}={p~@d34pHxGW>^ttiKNR z=e|4ZuL_XmnG1-&F|!muQSmW~e}ESX!`}pCdG`RKipIYJ$b3F!!pGkW$nx9+NV>ZK zNq4*AHv@vt__ctn|5`w%zrgs9IbGodz*A7~M+354ALB*Lbp8TJeop~ni7~tdkon>T zns~>_`Ze*d11|=CwfcWa>COPeK5uwD;3UBJ(f7%BA0YWsRAD@RWRs4f2BcfN*lI0dvQwQXu3X0wiC`8N?TZ7=J@c6^0bjlm0!RBTOsoRM?_$ zvBFY?A%y@EZ#W|J+<{#$o(_MWJ7`h)=I_K2-i`T*?%(mu{f5PYVbKuJ+`i;J6m&cA zV|XbMIG#r#-XmBbaFNo-l>hzkXLwq}c{c-b>-KB>7WJstaQhy<)Y4=8)6G;oBv>GD zgyNlw^A2_4uW3{(Zr}S~gTE(vnftx?AHc_pk3;^v_%%L!mkb!MSKk!J>4r*P0!6>Fn*M%DH)lm{)k;5M)>G~r zl53*maD|(?9LUJ^@?}T@B|2}FH8)V@MsKY7awYA+xxPLQHe5=uVp$D#siZWs;}x;! zC6&C_%ADbF8Az^ps>Aj1v1HhyX~i=uBZ;{eUn2I$5*OpnEZ4-C*EEy(3ibTBheS7tx8jo~7nR}NKfE`0ROh4f%k_g00ct#!9nIa==q8k$dPm*#(}dqIE}t+&<6ZxYH$e%3*J;H%Ab6YvB%v7f$O4C&)9z z6usvownf|b2XE*7rS^Qp1}?ovyX9_^tlkvV@35&9uYQ^uczMo9z;X(eYdi#215Xc8 zfPm)*;?*zqKO?c<-s^(%5u$OH?|cN*?VjQJh;6Z%FJ{k2>}QJZ`H1HsFJN_d5;AFy zM;wnQIUX@jk4M1t%O9{SxoSgZD9_8_nv>)e-L8tBT=MTz(K})0t{bQ0fJFD~)VS+; zMa&c@x)s`aJ09$mx_ky2c%3kZkQ#F;$|ud03ET4#q}-7?OJk67JMUvuh~)ZoJYR^`g#ik9lHuqUpsg{ zVk(|-JR*%Pn`@78k4I$n5fF^i3=9t5@;KO1U2oT|BRV%%7UnAJP03N# z3(Db$&${>2OYxVVd3X67i6n;9^_gG@)W5L@l!`cy=!JLcu9#V~ot{%=sq^0=K znuKA7_WjB7tr6!*zq+1d7So?ZJhS*-gC{)?u>+5yh<9IZXbNbgiyt?VfS!l&>D*nH z8;7EMr0XvHm-7(N+S`ir5Y!!XVtOXxK`iRe&W#n3Sl`EgO$lY|q^4d<@XXEqHT6_g zPhN7>i0E~L>FIqPv%@D@*W|j`IQ(|$xrjs6)9X?_J*FqluFv`O^uCSh5PxBwgTN~y z%=H)yf-&bQJW2hF6#p~$F?_Ru;m3gBRTJiY3iSU5{^30kzFqP2Fc|RozpkgZ6ovAB z=OUS$?-K5`(a*Yxc<|y_3(LVHKAi74FTFX~koO$KKdYzbFtao{XYS&TmoKIHSRKh*w7evHfYPPQG876R)AlgBI{ zEbEGU9G%kZG`p_XVES;pUxcnj{$u?H{OHw#{An3;SPmwS6>Frl@~cq!PEpEL%k4Aa z1pM;JV-&`)&K6jVf-Xk~%_omBDgLl7`H3CnF=G<4P2%RrXVCx0Wn<49DUGkU1deRR zlf&?~>)IZ@^IXK>Rd_|^$upq`(R{4TpwM*@ov@D(YG^xR1-pzU!WP8bfU6`sVyR|x zZzOe2HiHre+B(R#JXM1^eBpW!bYKHqIEwbv7E1&pMzP6{#SRCJ!(X&3o>~Koea#(N z;vX8~uGs0|S`b}tlpl<8gtd&NFz!TWNCGX06HgXSprT9bjKW}hyD)*qL^Vt~zJFBk zwwvLBV&5WQ$CUt)F8=RbZ+zy75C8Xm)A(E@KKvgod8_v(<9V@o@_(jbdvph->qr;> zXR5)SS%>ds;>-V;^7!^>3=hzaiCY!q^8-qb|pOFRrDpjHZLoGX?buDC~^*+g6mPXkt-4R5$>;T93os=@n2iuM$fH=&{Oo>06Fk| zkjd*Ok@Cpa>x%>SGEB&uayw!#SO;`MujaG5A_G~#94B)Kd}d&_$|rYJ=q$DwH2Ln0 z3rX8RCLbUiYy9H;=Q$_9mvW0epQ-sn9p~=HQobp}?{1Y>m``z*&L^*sZxep&Aym>a z-{LI2=e{t?=@n2*p=18V`RKlf@?lC3e?uYngYbnF{xTqXUzqFLqW~`iq+Bx%5Lp~k z2#6^-%zLJYQ|>|Ihpz_=0xkzcnZvyAAAe(bb_p(g3?SA}!$ScX|6Q~g!*>93AL&s* z?z3>V#M~bK2jB?6w*f~2J_X4ApiV&4efS1Iv~ifT45Ee?8#uI7VMrkW!-xI?kaCl4 zSL}fbZu>z9VGOtZ<}Ae-pRNZ#c)1Q`$iY|m@aKK_QHbn~|2bdy4}5sahhO2td5@Nt z-($Y;Gky49eR#PK|B4Tv=i~o5AI`MB=?8E}&Z=tO)gudnx@byEVP+{<)>X5s$eu-6 zSvdABtjbL&yj@3++}hPr-h8hsj10x`+pG0HdpU(riG}PHjksZk3ww}RE2~%3FRy91 z>N;N0Z+t!Lp4lv!l}=BdjEAOV5O1-Jk7ROgP1F3EFE>Mj1_@Y;3;C|a=X#`@qFIde zpl+xvRGZBKNzuDNjVk}d>ysr@&XN0ILLuCrUwKts-OB%+^~tn0eh7n@&f=I;IImb) z@sQ==BRu>t{{(t4&+w%JMlA%^4JHp;J{+HPlflR9G`p_XVDj)-%~z?$m;rudso#b4 z&0#s1JiJKxEmwZ4m7k)AEDw)GC1G9;tOg{neDW|e#vkkRlR7K^^6u}yMQ|3l?-Ax) zu6Wr?W)YYJhA1#CmOLD?XAgwgo|63%%&mLKd1)bo5QeZ=0q#5LDeEW})H%G&IUuif zbDy<){^HX4khDW$zY*pmKaM4jM6|tNjbAg^EPOSVD&GZFRAIewDbi_6uReQYGag#k zyjsvaY2&}*G1j`Kr=WQp(n35*dT;OnklCo{1#6S)!P(k+_+ADw51O#b#uZ<|Jj>Zqd}(ho z8o|9<+&Rth`J{G6rkrz*yN|OP`=d=YwPvD3{^|0a_Y>J6B*C(Nuq&sa#^3%gMWxg6 zemy#i+xb%FI`|*ze$Gq6#qc9*-cvA&e*Nc5-}$^;yC6M`184OZD$ps&FNBOi{_5uj zn}4atL-%e~Y!gdNfie_#umd7UYk02d5MU8EpQw_gWTfK3h=n zn}8>g34L}!sNcr@v%N*Q*BHFK^Di^RAKyXr2gxUPoPRM%G2Z`g=i~nA z^fAjD`xemOH>DV~9;nyhb^ak`>+(}RI&U04TRHv&AD!iA!)-ioAD|!gsOW5e_H|5`s!C+et+_N{0TrzapUg;&7bHq8^tj9#TB4c&Fk?Ku`3*0w2z`9dGz=eE2VXIQx{Bp5I4aoX=j|t1={C z=D9PG=VRWTtYE>;D0bzN&WAo#%_`COGGDS6To|3bAgg5M#wVewX}Nyl)D?&A0g^p?{m$6 z&lh&F^4;e;b>f{Ppub}$R%Bl8Tm6cO1&T+0|9Z!cYr(VWLaO77AI2Mz} ziS+0vr$VW%iUG#?@1`MoQ`alMGc?jzs+V{ivYX=u zlT&vozfK)YG4NylmLq?hE8%ij4ko9r)19fgQRtaw<7^?Ble)i6e>4`>-zs0kC}EBX=RRRLMGneD}i&(TiAXK!l!0xNW2n+S50Vf-*x7KHCBI#+^}QA)n@U-2jUQ zx#|5|Hu|BZcXu|zA*7c*H;sG2{SB#5nk4i`BVsCLaw;m`A-trh4K3-jTN21_BUk^B7n+3-6 zjCl#H*W+jUV1z6iF@|E8$4__OqCB zvV831%@L=3Y_R=9EN~!sk^7hpP99zS*Ly0M(FYY3pqh4|cMN>u$%PfD{o9{JJQT4Q zwTkV|8)wAOt2Tce!eY>l*x|))a`Ik3p%govBPKXcOnxll96O=?xf^Gji-(bg1roXX z9b`17vDQAb&MW#!=bJl4bj=%nyU{^V(lDChTBv5C#j2^~Px$8&BPQHL^+du;cMv`Yrgx zsta$573}Eii3CRviv*8~PU_{Z2#g{I+bM!^EAx7e!oML$97oiAoQ}T1eeR~u#8b_& zcxoYrVmXH3>!$zj0cjU!vq>hd~JvOxjaWp(c!vb z!p(L#PrteGb7shwW5}29$n9~#+rNtV*`<<6Q#8CY|RF2bI-j8{y3V?Eo`Qud7F&T7br?#P476YsT+-{Oo+q`Ex#WUO&e6 z_zG0%ql>|ABVQ7d9c+)|YH%(tUu*ZzISXvOH%owH^2loiECwUU{caVO z23k+pr{PRLU;aYuL2v`bFV%4B?dD6rm}3U+zwyhrPr!R%=`O-AU;3pgPY#s6baccW zNdI8@Am@%JATGLJphD@i9WXv}^%O|Q^^iqM$MzIw>2$w=ba&!s&oLj2-@~9=JqSO_ z<$Lg3r*v#*aW>sN`Vq&XElSm%n$}z1@=!N(hSK%R=WMfo!tyLR1b)otZ61E?58@7z z&xb*CK=oSLKXT|j`#gI?N&+%|lS1ArPCkD`83;Ehj3_)25W1ORo|gpam@x|9Ln2&%asVM0x%wgBMkO(y z)R!P+`w;4I8qaq?5u%m?!cXjhp=e?c3`H3=3I53Xs1P91ll3PgIg0ZglSEwl4{ZU0 zzyI@dwn-+64A}4A5OMtM{8z2Go$nmvPr{K&I)2#@xAPg-1Bu)D>t7YO^A+v2Nqkfa z-OKn1y;k5t;NJDF(-q$UNLPv>BW4LwX?LlRI&5OSSLN88f%Zu~b zi~IFre(Ve99d%xM?gM#ouFrY#8+`aIAO4t+ztNYb)haBNt!}DpsA+0|QVeyaMPGzQ zgBqKcE?t46nyx1|Kl^!#d7*}y{*?9VDg5|K&mO(>ZmYV%@WdtdE{eo}GVSaWPcAl8 zE?rr*3_Z{d$6ggo_qMw%-my(sXoV{C@&9&Iez+Nt+>*K}s zHMKasShfP*E}2=3%TdK~!+1#2a4=84!-s0eOL!TwrREuJHsJp70PAj3#F|nFZt-xb z^CdM)2U~XwVB7{m_`zWgJLq}8VoW}CA;y8TIENj7n3KdE>i+OeI{wLzaVx-t>p(zS z2&@}yoy_u~#83A<&8NY9i(2p;Y@KYK=BrZ~YydxcO~S;gthELV!C>oTR=?a1+6wc& zQtqkjg#~j> z$43O#gSyL;H6h&86>NJO+~Tb_Oc;xA);I8sub(-nn@5ZBoYfx2MWK6{Y|K^M-i~WM zt)Y2*JV9AG*!DOmgCNFY@y-?hGw=YN53r#mT)nxT6fqTh5#iKD5R@!o{SL=a68+ zdB@})RGA3AkijT%ljXg2cw6zSqyNysweXc(%<=9KFJ`>BF$Ryjmjd6MTFH+S7Z z*69{dr-*Bd(B9`wXV9;{GM2;*g|lMG`9<(4*>5tGn)WgpSiUk{)%fTxShb&ol0fNb zm_~srlDUZvx3yte36+~}8WA~t7*vZQl!!@yxgicm6`86``yc|@JoDW(;1Qz zqxL++WJ7hj_5Rn$c6krm?|B%Ox-wFU<(PGDf0FW{lC$Ltw*3ckA)M!x!5Qf=W0c&JpCv;GdfSCuYwJ^BwxL32Fb=h;oqUw%SEV{BUrvMaVHo{UKBdL z;PBa#d=&)sDz}14v-eS=JiLR_*3s^!^ApLFz1O$@_oP6vnAn@_~o-pE^|A==HZv``>sM~v0o1mKO|X1+yTM| z`o5z)I}SgqU(WoC8{m6`^a=d->3%WGBhJ!alxxSD^WzQpRj8gh%O}p#>-P!y-izOA zrTev^%6@P8_>%qw{KjH!h>qnJXZiZ>N#rI6MEf^wUw(@tg0DI9+kclLPf(-9^K__ z5b@3aTRhP`*K2>XIL3s?qZni24pkog1t%>y@+$=FJ~a@S!}R;fqbu=Q&``Cq3N zI$rDFwkO!Z3`F*CEoj0uz0+R8&5I>zE5-6IZN%8fabX2r?uh;wQDUiko*}o?4@u&= zKLJ~Yv4WRN-1{ej4;&TQ#PI|hpiM^xA9$|y{gDypAI+amRrJ9kD9m1!!DdzW+LtoJ zcAiV}=1Y<2N6TYp&T^p3eZG?QhS* z-M6p6br#*_&UW@xG%;=4qPS&PuVkydFVUr5-p1y*^Kt?oH{!=@p{JE78LG`t${uU3 z$ybj&%l?G)w!p@yo0u@OJqVT|_>FUsbbQ-s@ZEtk!Z4-99KZ~d#K3hEZY|lZDhqAL zDRcHo*I$VV-gN!v&?&U*^SeMe$%m6S%h~SI|R9 z>F4hKj~B*LLoP)sFavikL9lG^{>O{pc^R-+YJ53CunZ@jpTidkrY~nlYfq_BlZZKY zEeB@@cFTC-^qS5`LSQXfTN0sMS}fB4eU;Ed5PE)A{~4&@sVwAn;uv`p{P;D^tUpkU7Z{LhnYXcgRlrvGu@baKgE7v4{4D2(rD`PEH)q7orkMc5iQA z1X@<5*WLMM(90#`R`7v6C zvpRfRlstzIycX_j-*_Chb6aedaM4GL#P0nQs9Fzv9BikwoI743H+|FzCTpj|(rsbW z0{ky+s#MQl`%Q>wGWvO&(cXV&iQMrH((fUD(|LIKJ|3FO4E+g~KC{YrypL`oxyf8^ zJodOA7!s_DtjD=vHW@FkVB0>HZ+Gh^smkV44dE^u(^N5ML-&0lmH;C#d8;py2u3smt z`G^sIC&RxvKsXM>M{YX6YgU8p4Tj&hK#v@KpTOj(cM)T!ruBMy7SK7&bLxst+h-HW z``Bj_4ooTUH60{1?OYHEfppYf>m9S+==RK-1mdw!xpR(@w14lMI8cD&3Cg4K8g<`5WEkYDI5kjlO);P z5le33Bv9tOp?OkjZaIUxZ~j=GF-u<2kvVSZIy=vCUQFsaf84~-f%kp$@3D##ZSTuY zP;39C_eiO*ku~^^Hq+pX;Hs-jYtSfHrz&69n5XG2ljCt@GVt!-3h%z4>U z&7%=&+97$DcQQD}`Xh#xb6P&XlP#SkI@@}9+RcbUH1)xD!h6Z+Pa$(Bc&JUr%C%8@ z-4-Y>{y(EX{$WvKPGXK<$a2&C_RWDzW5U94Sc2 z1_eDqZuw~yesfdL9OMWl{IyOs-h**QyOd3Q8)n#2H4g}lo0S$&5^h&UH z%VCAW9V=Xo(hdjS8IstvMLzFm4fPj&-W$bx-aFr)%blD&BHGQ7j5 zeT)uKvingCB6I)=fF}?POjC>u@3!!IU@7+iJ|4_q6VA*=r0ZAUEH_=fk{ikeib&Vb zZMr496SHbyx}*pnA;xqGTfoyy{^X2Q2m#6D4%0&W?&gP(i-z2Eo|JS7QIgCz(J*gd z6IvT4o?JUx8%JAa^|kcVhTyAonHY$Ibao}C{(3g1vuT4BM$u9UXH$zs!F3&;BdNKE zIqeVQDPFxDe(UiROSKJoj?ige4e*PClAVyioOWLRfMG{5+FzGH!=jX@F6Hx~i+Y^B zPvND7X^L?*_c~xpo-1>DoxARpgi;*P`Ks~HT$FD`I2PgBn zV(JkyE@sl;?ITfNWivOi7;DS)li)AN*nTO-dGCuTb);kK!LoZLNWjo- z8oVV^vkxnqd0_1{Pv+C;`8M<8VerP6f2~F|`w_U+4Y|EFGc}facs$E!vW)Uu7RYOR zdP9NJ&fKDogYC4N)yr#<+3u+nKii<4ShCaTy#^l`o#*@Pspc_}R3$#pcA%;7h1MH! zUSIn{W@yBD3TEVz!n`frGzT-Ew0HadL{fTO(+Cuo-A&3P|LpgK_Nzy}ikjy8!un@U zgPkGv3f|Xen2fb8VLH>af5)p=c$GZYz8kp-w%v#2-QL^ruYV664q{Iay69#C<_p`-U7UjXDde4W&0S6H@Qo+0;H2Ah1B$#!cw{HshlKUCtv>I2#e3ud zEUI{F70SIF2L1R-3N+1vO}XU#Y$027v1E!tFbZhjdp5+| zv{Rtl6zkvqUXmb5QX{uv*~wF5l&T|Lz0B^f(C4H#=zWy#`jUR1PQu#(lW`YwlVhq3 z>gV91-B>J2kwlGj#~jH&L{`ji=p0fQvs3}q`wj5KbScD9iORNbAz>z5c277xKR z&~#z&flcgRrEPtykJoG@%eu~cFi;Auz8#rkv)@CH&`S!0`Q>O)&d-eYtml}O4d-=U zR{B<^a9zCb@e6_v+!mJZ+xp(fYl9mLCLrnH51t5ql}k-n*J*u!$h9xcOZ`%apx^&* zqTer^f)DI$eec}n2QS#xCZRegoh=up9u7Z?EQ{hi63Ki^NGAo`{)k!=-`4kLHMjU9 zzHY7Aq1ISe-n4_Uv-Mu$6Cww0tm zhIfRUM*;Ds*PZZceQ#3mPDV|Y1qvTzF3W;tzhme%aSAFoa}=g5D<|Zy zkcqkPKNG88Q6M1eQdzKF?hDQKWms~fAwAPaVaW}d@`yt^HUdW@dl%s6;P(iAtVGr< z#|!W7_<$R_?#3yUw>^r=z~nNn5jropCClEp<$gcg@khPw{Sb+jcDq8EIhJ7}Pv~L= z=4I~pW0A}(UYNF< z9x$|-aQ0ynKF@x+oj)KYnvx`vVZ_6_)+%(URc4{jEJg?0D5T<5az~NO7F~bgq;)@m zT}Eh6ul@?2-L9ZBs8(|&Dz*r_fRZT+><iLdHzzRuVWL^XMOo%;eY z{PA=&v)x`JKSw-M}mGUKfM?dHr0t$!=X+$5F2{uaXx zi^&uk6I0%rWkG@XqJW zkI}L#K0n6vu0vcPE!P)dk*XC4_}Zn5L~6<55cl`TXTI8Sbz~DW0ZiX-xMujg39;6` zlbWV5$_bbNE7b7mN`7` zyygyt%Oh7P}= z19QeLSY}&S7JQ%wGV|(B&rX*85OuW=i#Fc+6|yp2e8Vg7Nc-F|yYJS+!LKdd{7@p< z+>IBo=q(3om{-%X_?>5S0QKeT zpU_Z(V$SneXh-SgEa9yniRq`dos6DsAKj;DH!9FASu@_2bPe5oYD1R>sFqB(!@r3 zRy8#@)SQHXRlH1O+4(00PMQ_Es;;?qNmavj=bywpPizD&crRGKqA`TOs@l-}vzU0u za1E`hX>6=oRwG1GNJIg>me?S<8S|u#q*{NkgyrnHDOk9nrn+WDeN#YD397DXXle}C)vmlQP+hkQ+9i#RZY*ubuXt0I+RK(l z+GV1Y6&Vy5=GBPjPi%B+!WU)WDv**O8>Y?4Cg5-KfNjg1Ze;tG+XHe!O()BSk@2~q z91_cbCC&*jam72g$(x`8e^&j+>Y#~!_SBM+@XV=!=Gv=k>#nWEK=KS)JU)V7KK;D3l0Ap{DW85{C+2jzmH6cg zAI%R8IKFW5g{L*V4}xgkaD3U)eG3XR`N9`t(Ti>j_~Z*;H^zj|1;}?lZI6bt{Q2|` zJF&e($DO@={44lAgFDv%Q02OH8a{r2_#3d-Mt9u+;l-ad;iCr#FI7FBfzof$@F`%E zul!is7Uw_zb_RSIwf?vG2!dn%h#Nr9kn{->yk_XxU&L8@pIuMVQ$*VEx}jfbsPSgj zb8{EA4!dn=O77}o5b1x0-#(>he-d{P`d2|v-(&c*f925U$q#iFOaEl(+201EKM(X9 z-Zu2?e+Q$VfWVccSG%X|kK%0pJ@*dZ2|8;ZwO_q^^hT*AU9a|A**|mm`O3%i-vrIR zznT1Mf63OjMrS=Ai!ojFcSFa1E6(OKPrH%x>BWMe-~%-t@Zm~=+q}ckF-DlR(~ju{ zJQ4WgfM)_e2zWYR3*c$6lX;nj7Xg;Q|8PKjv5wCiXZXAdNIs7PN_;?x56Jjm03`ou z8a`RW|Bm^A;ZFlHd?_H~od7rka6jf3;#8v`-AX`~BLRrE49^4{4>%bx1UN+Tcd#iw z6?iWos%`u>z=^WIuQukoAxT#6rRN4eI}WgK1974!VV)&E0mycEO#?|{g9 z_zl2w03QWJ{O|@q##;}_cE82=kGUR@^;@O*7XeAfT~N}^QT%g?PX}awm<-5#9S_L( zg^K?Jjl=%%79hi4Q~X86Hv%$W>jBw6zOMdj0ogyAH2g}yvw>d<$o$L$WPauXvYsaa zvYt-R@M8d3A0q&npT7o8`WZmR|2-h%KLN<`^02yF_|%)-vctgF9Wiko&!V`h96S==YVXVe*+}l&FWtd$oXLjAm`c70Wu!#l9TVx z0ZIQ;#s6LLZzxXtMI96-izQ~$+^e@Stk zuV?s$ihoY=nTm%MpQQLlLk#@^K&HoYlP4kmkJbMxfTsX&06Z0t_Q@v!RsymgE&vPx zUJS_i;{ch@V*#0u5$Zn#koEKqCTr6D8IX97;x8-ynBq4BVmytxM&XqT%N0feCnG-Z z1t7m86@CPS_CFRVdNTn<9sy)M z4pW?)m7L#rc98zGvrN8e#c8*i;j~N6ba~$+!+BQ)^Zj>ZiuryM@L0eeK<4BB0kR(M z0wn!fK<29nkol?xWWFu|WdG*sBSfSy;>i69J>ZYOq09$ir@|J6ixrkC3@HpK>;WG< z4oxfURM?_$vBFY?A%y@E?|sw{&nMaM=)2)hd@(XjcbtaX@7$La??EByp2knkH=$5; zOYkFZze~x6xcv^DiD%;WyYn37*MiPX_bPr2FIBt>&paR12|7AF3Z5ncHyoAD@HFO8 zx)S_^9*s%27x5$7)1C<9^x~zTU^L!pHC5efUp&c)c$^?Ol5FceD?0 z^~L`eU;Gbz^c=rle&6un%Y6Je9=-Hm@rBRz;UORW%|8C8`0&ZT_&@Z8Z}s7ueEg61 zg+J~K4^+O!T4-Kn^4LfdH=b&O1sX}iV|{>!j1je_3Un3Ga&xf-xtkkkZ4k?0F4Zu#j5JoR z#8EfIm3uXoUtMXegd^A-PLz^2H^Q`yJT-klrU4XZm4<4xuJuZ zG~V7asrhg)T)Ltb7kA{C%VCtfw|KDQxTb(AWjS7oi*ubhrzy=AL7?)gbEXO-z4pU& zbGcze8UZy30xxbTn6@GKAKlA4bNbX7A#rjZvjl@8$ACn>dwJ#E!-)Y7@ASYVjQN4w zB7G00mBy~$LJXDjm=F`i9qM_^*YG_{M}82=0;3^}Tt|<7=P|3%Yq1BzFgX8tOv^_U z^AP?W2r*vgFH&XYRgH}v0{=a~wpD!7;7nIG)F>ZKPCWoS$DOgh4thhb+eX zo8{ewk6^yj{cf=Hog4K1->DJn(QwS);*hL|&^M>ZgPrfJfbb_y3pN@;qPM(|?UpNr zfC>1IC4heS{C0#yjt#_4HdbAh@aGn{*T<#TS}!OC}JF&NHups ztz$1)iRRD#%n;}w=pHe4T1(}cL!-Z7^@l_s1LrH3BQrR87u(*x0h)foVtacR9_hBX zZ^aX9WP5ajgc(a1iIk8$0)gFQiKt{ZRBPJ*iXM|l{xFS*Q1fr?fz|BM!S)wHDVOiI zfE$zCe*Z7m3Z-oZmm4QDygMM`$_u8}n`_h?UpP$Pn#T_n;t!M53; zwbg*5R&kddJXLWJTI9G4_U*mzLO~0P0l_v(yHIYhDrEF}53LTZ3a!tXTW&~0*CLi` z27n&-herk5k3W*zx2X z+$nQE8$J2|G50OtQB~*KJAff7FtLipqtsDBgF2dkV9=r&n1LBhAcu>l7n+0+NGgyB zGZ?B!XcEot7^N3m+G?9#Jms|7!|ACurWFTK61=9?3oX{hqoqS88M#L#yHWwzOEOCTE z$CbJC6WB)+n^4}X#z^-1S~)UC+Z;*}oCLRN&LV&aHsvEs@f=TT2<6F6Ea>%H0fb68<5WKaERE@?(l&hzuWU36G~U zJfs-f!Jy;uSIzakbgo^Bi$$Qho&*_J|-=%{oN)INef_cdaW`*YZL^>Cj>4KfNI9yk1F3yg+s{12~Yn#KB2QF{@K^rwX z9)|v5s2qymqTpAt|8g&?Wh8gt66LnG`5$BAb;wo-vrwa1&fZnOyIq>oT~Wm+s0bm0;&PCKUrq!7@6Xg^g0M^A!p>6R!V*!M`gT zeyv>JGy<^u>5I%wU^E!!G`P7Q7~8n{vG|Lxg=aULA6DPCxGxdj(VC2-@fqkZhCOyr z^805z1?|VoPwf1q3qCWv@>TrDs!OXM!?6`w!RuBD_wzs2n>}u3fsf;c&$U=(qi) zJkJA!CYw!C<<*;i0{G4BrWm!^dE+ySseT`+Mr1grUOyg~`@Kw-l)JXTAr= zjl~g#*!aj$vT*;bgE#*LYRD%>+sBQ?Zq~6`p{&F9yHj_ErhZ^QW5@5qk>nk?PNK8< z@KDe`6h||t^A24yd{%lQ?d;#8Po_w;8kH)X#2bj75PC5d%D*(RYA`(OPw|O3;dd|s zt^BxL-F$*#%Y#FYm)M;0g8sekTpV^UT=xv$e~ha1`_B)4*Q59s>^vXulP=Nr8PAeI zy#%NrOM8^{uh>aa+dhk2WfI->rXS7VP;7hfeSAo=tT+yJg*!ubCECkUq%D$LxF0Ih z;*aC)xer!7O`poLV!uQzD$--Y*E-nAPh0=v_!r#r*w7GirTN3LzT1+jpK;u7kgKc5 zbwsju4ZVtpbv9p)oxPh8QHaY;7x#b?H=E)%;9sPDDXL*9G}&+3A-z|XAa)OU@dE5S zo3Da2PLxC1qsVccMf_lQv9}iNJOn{1FZ$nOj~8Ad)wc~&dh_5ZzLs~u6iN8n%d+q~ z+22$Ss-;-co#$)e%wWWRCbH`-zkPxo>pnBmJ(gM8AEtv>*1vtMtn-c_E7Be6_QR*{ zTX=-VmL55BZ!r-WBBunx&FY_>A(pM|Iv}&|8k3e;KZC97=&j1<{zv(;zy>XLTpaOuGk$yW^@7I z`)ScWexVaZRpmUn*uNzu21Q}@--mzQqnI5ibT#`QVMk5P-bU<_Zht@L+Pgo?U&4IBSDDNJHF;)hLt8lBpI0iQ`1BzP`OMBZJvg}`)N{#^Y>?Pf2G62c} zoeYA@2k4D);P=|<{}tNic}PhN54Rk3gPx44QH$pxJRjisxb`+LYCnVX>p}ZHb@qYR zDQHCv7*h6haZ$rm9JV#o)tK8f%Zi=IuTa+SBeQ;U;}`G=Zw$eO*I&dg3TC|=ob^;} zvTtWrd*qSk4^Fx9vyt|RY!@TdPvzzcEsIOJvnV;_XNU2L+RotzH>kHSeNmcXC3D~> zh(!|I{k(ocG(`5-;rCY7S@hOFP`&3dTE zNz3}*MrQpkUdgP#OlO}_3L{61(0N3+YWy`2r*nma$gUv%1v@{9TBrK0fpk}$+y4Sr zl{3gJo#D7eNt9zMJ$sz7thQoRt7col#dD)kYw41CMOGwSZq11> zSW(>TW~sZ~^xg3c6u*Q-7tFVoE{I+mUbHw^A`HY*>llrDYZ#akw_R zI69{!oQ|xrMTmPaW$$2X$;?7N!oMV35{4Q&LGx?YQbC=BgXqH^xltNk6rF3Rur3b& z>(cOoxnT=G@GP;yRoxcrI4+37um!=(VVxkD^L@mhaJjRSbedo`RBR^CaPbqL>*8l?kuR9P`Am2D zM~A|?OfY}*xl%C0=M?8W7eDdUf-%pd?ppnfi=R{7%U%3T(@Mb@ucyW-^871C;m^De@rD?54ijjKO&f; zT}L->k%sA3#_)Ue0e2&R&<+Id2Ss}` z@lK&Fpr{jpe+9je?x=it9|PY8CEwRT>2IUpPYb?E@QWxH`nwlXt>jC9(%-*=qOJrE z-~}P(bmj%XPYHfV@O^^s5xiCK7QqdID?lkfEO;6k1>!tV%6}gX6~lW1l=vp0oReaD zP8H03f%Nw`)Hm|I4vKef(u<&s-$UAd(sr@`zTmHcPKEo|Q0}Npfm?;vgH8gz4)ko$ z*`UbE!1H*qNpAz?KB6yzGQ4U~WL;p2P~JC%tO~3FMN$IGLH(e-K!tb;sER)*{hNDa z{)QKi_$8swfHGab5d00HjY2Cy@yZ6S0Y%lCGzk<@4N(6N{k?_yNqPSbO57v(*Mff_ z_)bu?Z-LFAQ$TM7MLcI;56XO53QGT1fKuKif+q@o4~0bg-wJ&M6yKk~k3s3LUF??& zT?~r$TitI%e;hBN2m^lrW&Ak;M^*;z1kDFsAvg?5{zA}mV1GI&XD>z;6oLsQ@c0!pS~}f24gv zdxa*2?hx7`bgR%Np$$SSg_a2|7FrZV^L?8v*nF>+gKq-rc!zvX-zG*Gn|1jX_@#gI{o}qQ z?t?StUdSUZ7K>X!UC!1V55C`nFY@4J@a*<~9OS$4Vh{hb9!y?0KZjFp%l@WgT4FGZu5lqc@Hk}V5*^X%g47M4aYt1 zd=K3G`5sK=TyFQ9JoqUO#y1~PUpt-q?{Eiu zHP1p1-?@e?iPgukyUfL`HjPy*udjzSc4KiTmEM7-V#CpRMRjdW_4Rs-R;)2L4Y5KcQNfLb zPApvhSdF~t-!L8D(!xuQ>7MtQMYE>)m682q$n%l(`*+~owfy>3!8iP4_mkD4Gf0!9 z9~gttt^23;lf8&e7Y*g%^I_$q^HolZ;rq!xcE47i$Qh(x7=C9c?*KZT=)VjzBkA|w zht3a8NYc5DA5NDMYsY5zezNrY2hJ4#=mRP9vW&wW0iGWt?I+_oFPbLxAL)cVd~U5i zbo!WXn6xO4w4aRU&S;YAKgt!~amq6Webrj?n{+ZB<;8O!7CXVna;p**DTW3Z{+#_} zlxH61g9M3RM{hV^%8Qxo9$bMn*bQ|yFqj}6grdm8WYFGqKv}5U;@$TKoBd-&h*QLV zAP+-LsDbm7Xzf0c#8nY&G{I7JJ}fDuBynDeeQyLv&!|!%`5osYLDBXxr(k_OSIM|* zkV{q7yI|3WUv_&Ati!E)Lv}Lg3+=L7pNDP8ZXZYP>M*pLwD!Oz*j@}JkYiw3Vz=&t zMgKYI#;@F(xQ78^U75n7?WbVbqg6%r!d&hQpbADt8ta&t!oC%t5)WSr&xv~qD8l|*u=#)d2=sgg+J2lOzRZu z&+^^A81*fa$8LI@p2_7dx}2WLxabSHO|B%?~q=kgKXVq4SCLQs;dntCe*?P2fX3Pb{h+Q6^5V-^p=J ze?0<2;@#;N@z~|3>e1+XSejat4hj;dW|DZvIS^)Ia78QQ=)3a`H0!KJzSb5b5~~aG z&DhXD$>!d7R15VUOnqXss`*k~FT|#@Tzkx9Ngp;S&{HU(YJ4c6-i8B}SetSus^xnK z4!ZJuEsIocsDL6@v@?Kp-{|LB^HvESs~x`Pixk&gOyRKy{u&m_T!F{`t^aIMt|>8HXA-TfRYA3$b)rg&+3XV1yetK2&8|=ln6LSK z<V@qprnW}2TG^67jg$!a5+_Ug|Bion3y?!t4Vr>21VdXsH~}RQ^o61N?2~va zzlhh_ciSIOx)JDc$6Lc_p0ca|N!lcoP_%-@%#+b7Yq$#c0I|vtYIWN!w5}cad1}^*eim(46#Ox?S(+UQCEep_6cyj%$jA8yApV#1)TgHq+ zn&VSFUe3(urJG(7*=(hsKuv=3N$ex_J$Oo=b=><`BVyThgWDSi&kexu(!9n zpEa?0Q!e&2{thd-rt~R!FR&*z#YUd1qWkWcMUm3f%u*ktL}{-5gl}OlwpB<4^@VyL zLcK5rpmTJy4pDtxKBoMlw%%1-1omikn9YV(-mmwYwzHrMpL>MUNWKRzJ*oNdSsNxm zZ{DHi!?$cWv;Qh2P^0m_+otio^ZoFBUo+1*M1~%X%zE_ZCnS~ku#r{Yff+n~D;ejz zV+TqS$zU+S#8PLynz8scoXi%e{%uF9j*<3<^C{X@Cz*zpVwAWihk1-w1)P?{+&zgH zC?UFT>I^*ZNFk=b0H#VFMge%jyFFugs}LTmBwxc}Rgx!)hez>JdSR8k<%%O#N1id3 zTs0s2j}U^ZIwDtEw=kBFX6gz)FnRDeaBUa+eyPfxP0OIiawlHkVUfG@FgAWk-wm&PKkxx$^@x31XCQkEGYXA&Rs|}Z2`0i8>i(=A)cyrh`&n(A z+Mn7ZBcbTsbN#m>6dgAun3KYiQNBCE6x_TC8#0i5%Xf#`WtmXToqpwURZJ>Z{)Cs& z@ybagmAiOp@V4*mFT*R8{(VQ?WE+mUsaopxyZF6|w70X}N8gRDxDtmuf5I(?eD-~R zqw|cvvUTH-Lqaxrjy3&(i}>$+FrAFJq_s#1)wvbkp@GqGgnw17T|185+X@q$7eXMP zh~O%(gzCrOi=D?f+F21^rhq-6gSbqA{czVdH%8${{P#Wn`!@gG#eZ8>;Mj-PgMEiH zk?Z5|*`_jb((CX#k(y_(;I9s*?2MbCbTjVex50+T(6_;xKHdniOLL^bMiY}xe)Vxo z`!?!Nf4|R3oR4+8KEnLt`&Nt(3^zXLcb;SheCfY^w&Zk6Z*W+{}y^s=wYD~Fg~Zr z6B=GP*V!RrCQC3+=GT*8dV_}nY6pqz5YfaR3NN0!C|b5;A-0p0F9|PN5G=74h4GJ@ zOJrZkr#SE8FD$%LZBP-xVmbXvOMYGI{F-qkH&vK@7)v}`G@LyjA}F=%|O1`MPn`(vEt*c+>uUqS{ z5q*d!SW{-KUU9j#V)m54v=#o^)w8FpUg5|8OF@R&)~#LX_hWGhY7tk(YN^a|6%IS% zl0|>47HS>g^#rJayL?VCAnS1{{8~6oSz&z^yMX+mrKM%dF1Mx>Oe@E_ zPeFl2A5IzLx2ueJDDQH=)v&H^jV2rXpY=~!;a}#r;1m;}ln9#NIuE9-xYC*uC@fm9 ztCjQrBK-@kO}Z%%_&B~WnbzSO*!_f=s>v|_9pXOo2=181QszkO^hMBeOe68bCqwkW zi9gzh@DvLl<6A?(A=aqVpAK2gL_I5Cg?u;B)v#e-ThLS%J$0PX^5aegPvI{0#Jh zlJDD~^Pu1RZUk{3@vcNo0#&@Q;pCR;AQ1WqTi#ieD z5E4NIrh!sU0F>_kjm%@b{s2n+BT%}3Pw)+bR|_r$<$CQDQ2P6%*i+vN{TY2Pe+0%n zTj0MyS)M-vrTl;3TTi}2pv2Dz{;tq(iG37~9(Ai-=K1 zW#Sou{94h%iujs_3g{|;W?^k%eye3UeBIW@;JmW_;+1R6+MjzZ zPc0B}F%YX!uBAbsi_>lOf*M21qy>Vi5!SC&p0x^DSM>tx(pV)^mFaGh+QyCNyu)W0^qpfC;e17k3ndwwS@G{edq zt=@$v@X?^5JT%SLAYPOUXffhCS^7FuugGD$LQ{;!n(~fhMp`Eu6nT?HK&|d4IN~Jv z4jyS;%a4x&O;S8=g*>$5Rs|m;McfF^R7`5+o#xYUq#xy|Nn;n)IGjn1icOK<<%!0;ZQ(EmT$#nT%ihMhHrC}P@M?&u2THSgN@nfC6ny*m z+wj%Yry$nBYu9)1FWC7t{6ByPGilE@ft1=8hmU__;D#Wg9}6`P=G=Idno9~zeeV5z zxSlON|8aN0X^~y8<{*}v7@5fN9}Fdj9*w^-a6C?G_-q~~LCE9NL%xZ@b>4&jI^;(f zus&qrzGWHnA0>&?cymb-R}JmzJ1)4TFA2`z@yX^7KDqg%=2y=O9^Vsg8xV6CF_Fs1m=Ct3y*t~~oUQ)el%U)(iv^|&= zY&*X7P$OV@mJktC@*5#4_9vD=fJ;hl#KbXXu zGq#gW$1?Efd$!x>Wi|i(teeLZ@A~`Lp=9fGo8NC98WlgTIXQaS?xEzC!;HesdhUl;0zWv=43cO#srt!{3OT@bd<*Y`eBFG;Ah`gMqdJ{jEV zu3Cy{Vt&q?J!AaV0Nb-);)|x+Ge)s1h=0LO9?Vp{rFMM|M2GAH>J}56-ID8k@CrKj zZmaZPi?TkfRMq%e{tZGfC;T~z=AfgC+Aowmx$iF+>4dfFJVfl#k?y(bvk9t7Etr@$ z#-2MSn%IyNOq`0yE3YVs0M@>+31V*Uz7$$|0u&QexD-p=xnQQIXWPeD ze{9Um3!0XH`W_k7gLBM%X`TqXZjsSHaVh;-Eez7Be~Zh4_KUbyiOQ1FE?q0JZ^DA> zbX|m>4_4>~!V^9`wa@r>WM76fpV6%XvdhPK(~FwfK7KuYVI*$t%v2KWkl*o;EkkQ1r?jVi6s)OWGy656c_%Cx`IzF<2~ z0rZ&IAGj`hEU|0$;brPae4s8WxsyfczEOJOZvV27@MA6`?7SLm_LRVO$b7jAHD!NW-cECr;7{y z7@x)b^(*}g8*0`rUR=U^cP^ghpEk{ZH6~D}6%@{})PRsbQkDQ|PSYJu$N_ zcwC9Sk!>hT|O=6jr(^7I-B0CUL(9J~PdC`cd6!^gi9JVe-qQ(|o388|L01?pGYa zor|(G%QYG1-_L@AIgOy{BsWI$C4_e}SiG>Q9raL<(fCe@*|tle6S+iMl$)|A^!R4%oM+a;{Fx5XUdJ(Wh@gN*Tf6MP-QC+|Z>KI(Gr z6h5i<8Tp{l!?NW5kR$Oi-7COn?it~GqKrxR{O0W2o!ez}dbkAMDRTMVr15+1UFj1( zzCUSv8S?W@$lW35|M)(o@y~4@a|be%`N?}%%CW{uBkxt_^n8k=G|*R&j4Kv3U3oj zgoZ&e#}OzHJXP?ig2#elPI>lzBf7c0~0ZM+ZpOBseO8)oJj+3A3DG(j_F)00Q6Z`8x$v0c@g`j?5 zuA7kWub}k55A=6i#m z3Y+ii*@!3IO?!WzxSQ|i4RBNLC=VL$VInr)pE-if_oh&=`M!Qea1-*GX1auDzMtF~ zs^W)wMuR%4u=##=i@S2fzwLsH#o}gA`fn0kEbgZNLhYe+H~pRKg`ed_^CBJ}e)mfF zocvPpLE+PIA1|@#uiOngV)K3Gx)rhM?@YsQ{5ghgxEuF*@Y^0tC5UeRc1Ut#ev90g zO8?yWVUPRC9{joo%OZg+35Wu4IYs4OEEwt7lnBs!3vdd_EQ5%B%Ho(0Jvlm`)1#^s zfkP2@O0l;|0~b$J)HmqsF;i!u+-n_Lv9>#jI_~DE5KpI6%&S{lw;sy2Rj=NF^ko<& zA?-AiTc)~}u_8?;w%b{sT2j*I*Tfdr+z`js4lLZbBP!aml{apui0Ly~TyH|`aI6Y? z)g{5|u$IR`!Zt^u1Y+ZdJ|d;WvP^2~abPOb;V5@}wbpI74GOjZRqB|}H5C?4n_1we zk#kKo>qb1+bS&#NY}{$gdX2$s#`s8cgsfJY?8&N(SFg3Pzf^vh^_qrr(J0ey*m{l1 zBjXM7L%}6M2U^AQvjFQBG&}IVPQgjqU!PDT1>)1pNb5Bn ze$6h#%0;}`6y{&(v@>ZUM_R8*ilAc1peYb}8mYCFTJxK9GM-H9H3bNtW!40`0`x>Y zWq4>9AwF4n7}vB20w0ax{D7PsIzWER{KiIMU!Oh>Vl*)tw5)%a%;Id$Tv(<&tTK(8 zql^XMYH)R?$zTDtG9p6%e59;tg zZ}3*lzuMp?jav=2wEu4yoU1YKrBkL-S*G<9`_3p~D~d z36Z};W52gy$>kU4r@fL%v994e2=TDgeonPNExI^QA zH#k@GKV-09<7W*n*7$XU%QXJL-~x?}z9Va^PT#rg@X#DQLB*%g;7ZMJ^ch(V8ZR^M zO&Z^5aEF%nWrKG}dJNvG`R_A0SMzro?ALgY!Is7^7+kF7{kOp#THc!m@6dRZnP}++gvaIwah8=TbsuQs?>w zH@H~i7Yr`b_`eOV)R^~9D$}5Gj@od}^3&-#-QXteev!djHJ)v7hsI?F@6foy;3h3^ zjlo+r-e_=A^WSE0ug2zHD(j%e-!<+9x;*bQIH}7gX|Sd1-_r)?YP{dzGR^;IgA26# zpuxo&kCjalmS5wE2A64kw!xJe7Z}{9@hpQYb$C&O8?^g%26yQEs57`hr|(9CcW8XO z!NnTiV{n&Le>S*J=l4Gh-l6%&aYF`8QsYSm_iB8e z!J5nY|5LRs5qCd|`;&s_2!2ZNV!`NRsQO(^@5uP-zK<4@V5lF3cg?Pt%9Ete4F4u z3T_kprr=)-{y;GHt*Y`IbEZzuvw}|-+$;D3!M5P51btLKM}lB@WX=d5d4hb-w1w1@Ls`h3BFS>Cwpn06Pzdbw}Ph$eqL}y@K(W} z6a0wa8w7tvur2tjg6|RhHNl;Nzb?2}@LhuY1t$fM!sIf|Hw2$0_yxfi2!29vvEXkC zE*HE_aIN5P3En99+k$Twyi0IW@OK2iDEMx{e-!+C!S4yaNAOroiqm{ouwU@^1P2Ab zB)Cj)hu{Xm-xs`D@DBuc2>zkqUkL6N{FLBF1s@Q+TdHKMQN}!^+0%yNUqf2lUD`g#q7GmW$ zG%bn%ye!-Ry|N+2fwO5L?#R|Q`kFm)U04weN%)+zR6c0ouZ!qjrWDj4xD>cAwaRSR>TBFL}KCSn^HJ}RD>5*EC^qx-OZJV%8|e% zSqdZ-d1K*I;leREf5M6?M5t+J$rE{VS!l^)w12SG>K|$$JF*a$U8*pc$ z%g6e46a&b~Am{Zl1iZG{sDb;B__rT*2 z_0_Q&YTu$}FdZ<}bg5GjUKgF>w0sjq;i-^}g%g;R6)$mAFCW9Oh^||N8l)Bgpfh}- zQfjs!6rKk_J>nH;3+61qrK5U@AoU`;ZB2VqZ5pLi!(ush!xvmt-(>Vo7lReCn##Z+ye@ znrUn+E9y3+Y*gdvxDyprRIOfBzs_N~e#J`V&GOz%sBbd#X?HAi_$ESm=9!ZJ{88Un%F?H7%OT*cxB zx%D-EtmPmX$^tD|x@EjkoR{NparNpd+ycs9T8O_Ex3AW$Q#K87y0L!U3ctDymOMBs zWi4ORpc@sQU%qi&J;IlDyX9;B*mq~idFA2G>Rw@gtiImAo{M2tbzMU(&OX;xt@p33 zH{sXuh*#apI>dqJlX1y09Ah|hT^FmXg33qaCf9cy>DG#x>iQKX#R@P>bOx-bX}~$_ zn#Ssynice@F5mT6tzF^2zGkDJub~pYKHkt!zb*z2b*|e8Q!@N$Fk_S$!==oYwpv|Z zrSjdVdepYec`~9N`D<3!tl?2L?E)JmLJ|zdsx|Aan#KmIii8hrT||RjvkGZWvy^gm z*_p%OZa#@wV*}ppx|kG(e@z`SIaXauPVIogQ>j%;nCs&B2CT4<&p4;3g867+HWcp6rt)pZycD8hF8Va+f>>6of~u3BGRSLfu8II#AsjHQErwaU@8h-Mwm z`J?dU&0^-FAXg$+jid9{$;)OOP^Y2o)F9ppt?G5krhbKfn+ywzcR4DWf%4iLg$9oO z`WjZ#7+Mj-sgh}mPNEfGTgNs2s?`#4PvqjUl||A6soUVHRGLj*QtEM)pDOxj3)Gtr zt&gv&^{eG*Z=!%#=)1rDGFE|&dSUrWRoB+nRZBtA9#@3d zAqQf3{a0-CbK^vOU5({&iLYHzwQeJAnKx-!NS(4yi)or`DfwYhuU}!Zj2o?)$n{ho z!M=xTHl;-{jYe7~yUG|nX|sHlTvDz9GC%&eVN2!kz zbCL3|Ut53UTJ;XcYGJizg{5APVVUU!>wIk7DRwN8ziaS;+fZZ0*H$fGjiP7$P#-qD zUCj2(4z6+mgZ@yUb>d6lRBB1E_iHUmO-uu2;2P|duUb_jwbHNpLv^v*HIS#%ELoyn zO=H)fI+o5y)!{`+t*wfou4a(Kmn**3DJQn5d?ir8XbSbmIn7;vJkzYuXsz3*8tgRr zDVf9Lm2y)F(C@jIE%o-xFLV@~*^^84FK%^6Gp7hT(td3JAJw+kA@M(KpJ)O6kHJ32 zd{79Vbhcob4xTg)7<(%MV?kjiQO^%>c8<`&2^t>|x=(12&`zP-g>DntCbUs#ta&^)0zLI;sS zDtw{)g!TyS6uMpLHlb}o8-?<`HRY5GjR-9gnlCg@XpYdq6D541`-Jug?G(CQ=r*Bk zLK}tF3N05J5n3cPUud4t9HE0JNcckc3GETuDOBz+$=)WoO=zRgTA}4aBSMRW<_pae znj@6w)>Zxs-6yn1Xs6KaLbnN}hDrKs6k02^TxdjSk;iEf*RQS|l`IXr9m;iEf*RQS|l`IXr9mDntCbUs#ta z&^)0zLI<(g4nMOG2;C>NM<|bI(|xa&^)0zLI?4&QsE2T zC$vXsr%>)2C*L-qZ9*G`)(R~b8WCC~G+$_*&>W$I_!z42g<_pk;U1x#LbnUWI+b#7 z6WS=WR%p4+QmvjgYBZw~dH~-lV(wOrB2Gg34 zk_URU`-T^xouZ*U`fbDaVhSyW?HjJvxkWb^?>=NB2cJ7-*0BP(48*6Ik@opkO1vt? zR}w-MhnJ}zAg45OB`&s)`?P%Aa}UidLosMz-PDVd z+pR;tf@dps#ZWi)C*KUgT`P?=Im}-kNyPU>s+abfllr(&xp&W)(NN_Y?u}%H_u=~U z93H_xUIjs01RS)-Qei1#O`9*oY0{!;)}Zguj1sV;%MppC#@&^jrgA(mx)_kJ1xT1kuh>R}w^52eoWoBJlVBeh|>8?nZ%$~xAJG7iU|2)!_I z5pC~cG41uWJdJu9v9;oR`yT2dMs!PTt?bthZ$~uo#5+*e?nYhPR%##6iQCB%ZAtpt zN+BV*lfi~&)!glCoejL*9}l4}bf5rzEnmi4VzlU2XGLZWmLxXj_}UBc`l8bKS_1gN z>m}?bb+YZ>(QE&yu!grHmZ@FZhTEUFBcf%1c55Xq6H7ZH_FWD58M5zPp~%CvASGG- zrLBL7`a(~Gzmc5X;a)_~@?DqoO%3k=OcFwaM+pj{r2T#h9T>0k6XEoRMi*|+icgF* zKTPS?=9&HPgWtG6pk!Y70DT$V-gav_P%E@kKMl@MLd6IAh{=NjY=TODGpM6zB%-tSOZLf5zGI(k{B;z%^0mazWm980JS zfrgOit~dSLvwW?WG1x?DQ{+OGVUetMCZwMVs-+}K+HXLW*qEc0+KM$x&4Nok7j#Yf)_; zYoWeDLMJ)CJyQLWx4MNpf_uh{W$t&N?b%Mn(?fO^T9=Sr1=TJp{& zQ6Hh?r>EaWfQh@9fJpoJI{v|q8c~@{v(mF|#U>$d z_#UE8L=wsls(NM>8Gr5LFLFY_o+^aUkN+Y29Tf1SQ{U(35~? zfsO;cMC|{F@W}sbQ2M7nQ%wB?ZV`M5DE;Mvq6-oDIhf%!K!r5q{~;)%5U2tLOCTGR z{D+WFIiPz$@frkv4vKz>(Nh{&2F&=)1%;Q1d_5`eJtUs~Uj}77vENR){|6}Lv!2r5 zMzL=IMSmr*5cGJ^%Rm{QVo-?8_6r43xB`^@byFX%7EE`VdOUPD_33$FK*u1AH2fzI zp5?(0cyPW4a~{wwpXqbsZVx^Vj&AqO9`_%3Fm)%m`KNj?-Q4b01kgYDM zYy2?3>$-aHV-KA=n;y#rnE0;-u#YM?;kdHD{mk)Tifgr;`%bZj)5ZU6#jwUh~qTqDxcb zE(}%H)~#?4yfTfu4&sHe{CHqa$HTGykqqbmXmau1(liL>r^!6DKiYBE<#-8cD33pz z@G|n9185>KrlMkm^O_p^4ejvrtxg&H#%KQfIo+Ymmth8Lj`e+;tV&lzW;U1r;?>K&>L zzca^d)Ok{SHvLhjl<1Sf7s-X8?T%O9Q8k#ptfPzW2grldr#HZI42sfpL!tVzJ2~_c zy1{#6H^c29lAY#84e)TQgxl}Z+&V2kB<_vPgG*1E3pz%f{Q6_$GIQX3pr)ISvtk!U zns**eV%r#e2C%VOyI1vXnls;-LLZ(0&QyY>W{sNB^hRhb^NKZ-O{QR|QuKQq##a_|=$OVmIVb z!@Sk9H?~MZj7aGZ1Tjotr(F*dworT!|AL+G;Qs*9KmN%~t{jZ1C=~9elETOGU448# zZvhpc2@GN;T$r_Nx9hw(#~FE%?&EM<%@AZz%OZ(BBaTvX<`E9f_h-d%s9d`!1$AlV zml%6tw$V3d`6&Y``VJObKC}YxTCJh?}~ zw;FtdqKA(8t&Ev}n6LH9T?EUo<1zZ@nD5FMz6|=<9s@(upspb+gxwoY%6$`0kMOZP zlreHW^B+vtncx|e`4v+?y>iJH0$-o-Njc&3GhF}SYVaKpKGV)+;-g+aBTve0n7mJp z(en%JF;2w1!eP`C^kOEx3yQz?H#D6@)xw;&xJToOn}u!wJr(wAHJ(IWbx31iinxyk zJq`Fn)L;CZ^jA>y&;qXs<`s!ZL*Ow`{7rfo{}Am-{|-w2AAq861*pImQJlp4WnjPN zGoX~aSmQ|{P|D?fhV;jEU&@^bioZ!*)1=&&@DFt`@CYc(qz6IqEelW|7I7meJyGih!#CS|Q@IH7ZprV*@UkfqZO*_OM4Y6rgm|vWCGVNG7+==^;IGSmAh?%K0 z58)v;?+cX~D|hn1dsV!Ufc$~`Tn zxzw~2j^DAjsI;cB*QkG7UlHTJ&kAE5tB*b3=yR;;O7e|@?uk9DQHu3BBc zylSQTcFz5f|;V1SH^+(Sd2`UU}MvtqI3tI5v&#ZYtxKJ3yo8qZ|jFLm%O zEqA<;h8{O4IrB`K;j9$qL~5$mRo7NnseGuIvp5`FG&fQ)x3sKc9`3VoXD9_P-&nCA z8bWdYQ}@+OFDP*4(`q&}C=GKX&8Mk%%Fhr--pAlqLs-k%$6zqq9X`?=9QAzKZh61` zc(3WV7(&hl1!y8MW~BKqBZu=XG+YO88)-HitC8lHOgq&iJ`O@2qso1AlEyTVBh4?B ziKkwX$2++t>B{D4=a*^`KHK_zn27I11LB@v645Gt3=ZF=V>W5)=+H6$eANCM_An^@ z=m#hb8v$fFeVUrVz+$MrY5*hhyqyddn-t6r1$~A1K#rN~8GdC6!&_X|eASpZ?tov2 zHOalPGa`v#PU7@gzx6HnZKN9WL=dM({kRsRef%V3n;wGShQPYk;9szFDgLYI>03-V z&ZZXn;rjw=k(h{{hlya&jYaxMJJy!%a9ek{$qy+Jduc~^_--b|F5QN?q$U%2Bpd5} zvUnS`AH!_Yw!%YQ{pa+(0*J|EcBMPzV2(;0w*P_#D2qU zIzZ;tgzbwaM-!pR$gNhcI%9>KMCaj7l(qE`rG}}+{%zR;f;co`L0ZXYd?Yr;Y9~FY zO(VLD267OlW=`e772)3aCv?fwy5=Sn+pv8Vwa(5KTor+vJbbO3-=Ri(U^U_X^8zG8J5Yuj14YNvF2cldUe9OI8^o*oq#GGPtYXOZD35o{Bn#P)cT zD9O{eUB^D7I1)>DM5aC(8O^-}eBi;&$&1BfnEHzEh+G(Nij2la2s_?!D7-Z*UWJR3 ze0Sc9um@IRN5K#A1K|u{Ps-m=xsrgoaD$+Dl_@_)wEN?u=ua z6gw&vk~BMF-@|f5*~i8iPu%(vOyDM@#KUysRL>QmS^o(67W^Zci04GBUs4iOh3AlB zggBY~4E@U?%xU(k;nA1|{Kzyeq&>~&@nq5`->Y0L>nha0O#XAF75uLwxT9~bjCb6} zM4gFeD`%HsOgx-%N(O!5CE)KBe#TcBGyV~M+>{%`lfzjv7{*%}!{-@)k^e_{@^FJT z4b!2_5%{~%`k?6!+z-le!Ph{M1rxsv%5hFLC|ZO7_qn2N4qOaM{?kFpKLlp-C-INt zhHrp!yudXqj-O5h#hh4R0P)C$e(cvl>Hqhj7^4NA0OdIBm!KT?{1lYq6<*7c19}}O zKB0kypyNQK6*4>|X#?{c{MV;cq^soY_hc_bOM*dQY%Gb-x3g9aDf`ZcJVGZhV%< zeU1ks&T0IMJ(&6DmUn>%vrf6)@A6>QA-8*_$NvHk{;CIaoQXfj{K$h_J@U!x=Fhxt ztyZ2>i`TRtoqVRmJic{SUue%Pfa*#t36 zzk`-_MD-6YXLg+3nju_H977CuN?R;RwQbVwccZ;`{RGJ-`|HugT^oK zv%zR<{;7Wd-_Rb?P#)S#)wuXckFnoxC6k^0M|Bc_JV2u5}`ZACvK*T^_c7xd7pFt%UbpvaMu#%ka1j z-LV?g567x;9v2_&-$d+92P4%lc8_6v&`XOSEF21|?q}3as;-IN5F9@nou&tnLAry& z-8fxq@h{l95dVddz41Ku#=ZB5alf?LuN&o#>802djV;q36&^BO-EiSvbC+4r-V?^g z+%hikA;hlb2q9#@?}`o9?CfRe(8qhzyuWQEaI^F1uzeZ2kUdB2oT&wY41+6X?Qz>-an5O#8yyxqn8r9gP$j#GqHV&aHyqj0N zG3&nQh;D;C$-0e3w7S(y4P;XNaJ9c2H`MX+uc-Z@>WW4apQONv?yOizm(fxClh`h6 zzY!dI$sUaqPebN$i&_`wi<}$fus0oU*WtFc9K>;-=11WDUj`Rq`8+DG&YqhYOPxJ; z;^)9saOJ1V<*KviR=BF@sO#IlmWkzShJ`Uby)YSVzS4@HVFp-HeRXGQ?1&ZY=Etxh z;B!IeRO4o#JNQ=-kEnry`@kmy~AyiW8U{E~&>o%lI$Ib463?y57ai>_QI=C^#9 z-}_*x!k3HcB$@7e)H2tnh`q~|G*zqk(&_-Z@k?se(*>Fe4cRw<+4whC*usJTN%Ue8jsu!hhpJl`qTJ4>r9Nt zQ+NtwJi`1?#>mZZKhuX`=o5bCk1~c|;=y&Aap<={4T`LuxDzx7_*SuBE%pn976?5P z6yK9THYmpdT$kba;=7>u)&$yxa{NO1p9jU?#HE6-5Ijlf`$#{>MI7Id&+L!=3NZcO zDE2c2b8U=#hmk1KS3x;m`4uST{7me>C-&EZQqHHuJ^;$`Q3ohQWj6_}6k06QFBC-a zaeTn>NfLq5nDqx!581xay#o&o>yCSTbGBf*(X7Kmck`ay3oKsgtbV(3wa5LJ9?W$k zH$Ph;H^!JU4Rbu^c7M%-)90bpkioMRRdteGisW<`TPfcY)pFW~EK2j7i@}T0?Uex2 zb+leC~o$fWYccr@DL@;trun=8p$Bfj^o?cia-SWy4 z8fH{L1DEb)XWFM)#=7HYNP1p3$#ey!y|i-csHegwg>) z=Q6b6{cF!Y(DZvnc8HudiK!nEp*-%F#QQ(Yj5JTrbH6lflWDe_glWikJk5;MU+1}E znxy)Vb$7_4)qzy}(nOBbU*|b!nmj41HY8GlQ1(aLU*|b~?rrZxqsg(nyT4A+d|0-K zCg*>S*{FSD?P%G|hOi9xlHy|25!}^|J=eCe^m~5OHk@UUul8Y@{yPq@MeV2T-{LGC zr`YA}mU~lR)K=57pKaYAO>DwJsNFl6`iO7g!2^sYdY~&y?00cfdvGUnCF~2o4@Rr- zkU1p-jvCr1cJ|=n(drj*mpr;@%4#5n&edcTx9N zxBhQxhCgItSPr*=jR-L$=LcJpjrEdCoZ~jruq&WA^=R6*A6uD$0XuYIOh| zU9+yCwj5$3>YRZB#BF(|pjShb_Ma|R9o^i|`D1+~NzF#Pj~lw~ops6!>pI-Q8MNQS z4o)pq4M}hzv5jrBT+%7AKM32VU~pZxEPD)a(6S40(V6!Ien}SJY9eUHL+*>|;dTUb zwfp7Dz>_0(3q5?uBV}@h8j|+1!_v5$b_YsQp-C}VYDwc=Z9&Z!G>t)%n-QTX=3;3~ zFdE^%Uw$3Qy?6xo$`Ra~#GU&YGWD|yB!RbpFO&O7{oo$y-%9+4?f01sxgk8squ^tm z>^us-uY+&L2z(cT=ht|)3m?<3jOoXE`rqV#6HmVMdzl}~7=F+C0q5B{-+nVFs?x;u zpr-<_0>vjIa1AKdRRg?hbR6gyP#@@rhzEX7`Wq?I2SD)-1kM)>S*ricZx8)9fg&E+m7p*aBKU`QZbC6A?fszmgiSzN z7485<6tkOzRthZ^>K6*4_-2A~-;n7?a6c6L!IflyDaXTm5-FS}9}nG&31GO-h1k^l zX9YKb(!@lbMz~KvuwN{g53q8~mp!<~gW34H`GX#Ow}*d}$DQLlxBtZ+%(*$Y`~P@w z(u4oz!S{Rc*&g{UC%62q9(TIA-976Dswb^_|4Jomuw?$iMS6FTX*fNIz5SSXaR90t zsf}7Sv=s!Zm+qe8R<>zMYK6(HFQir+WYI!dEDAzXdBgge_=_Ki2U|lgO!+N`4TH8Ra#h5yamxGtzkF022dKqKQ?G#?Wmf`Hs~{{+RL3|J8VD%bSCUNQvD#2rUwNM~(f! zd-#nR{gOn0u`Erj0mB;TA88+leF+C>r&mCHEkDF>>?%0`4N5R9?hLoVzj zvfx>5*uqh)>rjeNQ$VXoq8xjHE>vPU?{8SRKN_O@Ak%CWYE8PL6pI_{Na6v;9@}YR zkw`UGT^`PbT($6`qz+tz{2q*E{Xg&T+Jizic8;>|NEsG@P=5(uOz%a=&T7N49q1Z~$WV(utL!)3P-E?$a znSgi?ToT1lwtf6*>7Ihh6Bj*{Cs!RZBj&`zjG1yR+%LPlj9Q-a^W?YF1Fg28^qCs_cqf5qId;v!z)^IqH>_JJk~NX}3U4x<@Q>tPEK-i- zUO9q$(+KVzBe*9=aPJ$z-I5fSq2M1ip(9=I6kd zBYZ4BWz77PN3Rk2ZwG(AoZDl0rty2`zu1reHRa2EnUwFa@~KDpbKYn!=y{-5fN~yc zIw<}oU4(yU0Dl4$QJk0!O83JUz|s8xDB6g?9|Z3O<$TpHP{bi{KWIKE*KwwTenae= z#J&;~bte!8<$TzMf^$Hp0RID>2K09WzXj#I*B(&Do<>H`>4|^sT0$&7r z9_VDDXMi%^K2Z3dGzJuTI{PC4rtdXS%6%UH&IG2u3flin?0-N<;BRX@sRfkjjtl0# z-pRn6ho;;hDDxoz%Jg%8FNSgf>Pum~xK8c|eHN7AJp_vNpui5$NuaHuXM?T;Js0$9 z&`*LEfHGfB0%iQTUJlU{-vYe=_!&@)zXC~6#^aZQw}CP~>p+=bYe3;|QZ*>!&3UYI zKm(xk_ZQS3ruPj{=Ihg-^w%x;eo)Sj{#bB3DB6m^ZGzW;(*G(@hEobk|MLY0KpZ0G3gYK}~A@crJ_>?8B75*IakSDxckNgij`~x2M^E}u)AIx<}cX*{9Jm2Ggzb8IH4?Yf+-z|@) zlic`z59WqMw>y8kacaIed~I39Ty@t~6t`Ga;I<>zH0!WE=c%3Ot_e=XjEk*___y0o!$2#WjxOGTT$h za1P&k?PKe3(suZU`wG!-2eohJtgV{s);n}QZeH9K0J`ZF(oc8Cr*1MFqs zy*MJ1^heyUe}wt@=>^kg`jx>xqN0ihWT|_4KBKXOIVbLu9ezP#BVx46NxdL|4!E{m%g8<&%{|MzeALlgYoA$ zBg92VnxF5J^j#``%1pupi?btfr1^Qyebe-*|In)rd9>PFcHHbaiS+V2P(PW${p{elV{-HW4^IlqQ_Amjex(NE=2z;!gG*AVfW)f-0X}+xE zJ$xRvBSLwNoOl^VwjpklFTk`9{PGs@w(V;xc+DtpEwy;ZAMQ$o_OqIexDiZIt15=; z@RrA8HS68tIEJM$!E1#7e))AI_u>)UD@Sl|688r|GtKW5ON?qX->~@Y5F3p7Xok6C zOs33{=6?>1uy2R$RR~YtQShw>-@c>Z`#Si{IbX@wVe=YH59fc(ekSIRGG>0ov;T+j zd=pQ(?8BG*8YY)~oP_QWKFK%Bx;9`S@%9Oz90wnQzX_mx+0g!~{W;@6*8t-k zQsd+?GEU~a#(dZl2SAZVHBKgG+s*wvY|DuULGh}nd3U^m6ZQck$O)aGFcY@nAI8}e zwt|wc0TkbW3AKVFpeW-B#e)5y_;xts;3P2QWp@Z|5?U#=Sg2nph~l5mNZ>K`>(j93 zIJXaWG$d*qEbYc8Vc{P4{s8VA$8HyQ%pIkTd%0&;je|v=+1JwqKAJLd*T}N!1pCDz z4k})i%~w45X%C*`!GHANw>+3>cgrvGVD9~OyMN@tU-Dp{kaF{L-OP=#p=NjsR#6on zKI+QEml}?xZNhN|RGya688fN=^-&LxGDMKWBt5KJvSd+o&QjcpW0 zA2te*B2pYUbzFcVJn}i-Ba92CO*6+4Do^0?tTpu`>%&%^L_b5*Dv_MG7^kqGg3c( zn|P=cADxiLq`UgxX(C7L#|t;xTN=5qO#}Qt+I~Fe1^G>*K5f3>?tVOj;KSl$T=6|Q zW~2M@v+E(pEVH{$0i@26ntl5b``rT!1v@Crc640FQDSf6)j+-$t}&Q3`G*)WEHU4~ zrQ5>&vZ5c{X%*uv>9VK5CK_)_&Z$Bu#6{NR^Ele2Ia zO-mf|O51OqoQ00@m*;0ihq`ei(nQ~b$zUSX`l-;_2L~pabCA9V2UU0~&e$^lY~gbV zmrL%-hHLp>-^FEcPQ144^|i7CN-aM_Pbz)6z6Wp0DsCBSJPo2BR-#Yi$p)uioe~}y z+D-YMa}Pn^gEvneqJ)W#gozpbqeFg9bm*y)S+B*P=x1zH_z+p5c3H^2{OHt|gG_nX zoy?~88IOXfl%NoJTzMH&XTM@jFwfmH=6nnHvnUp5EY3+RdunKRNn%sd6w<8SzT4}u zw?q||I^0|jk$R#1XZY21AN~b9%kWqIMrBP#NOn7wel| zZbw6f?*^`ZM~~WRxvC*3&B)#{)}%D!7c>VIH&Z{?%wyKFHs$jRVD{UL z`67O}pvBEIZv2)9d;3jSdEBRY@ZBE#84up;!P`BUadF3Ikq3X(gQt3MYCfFxe@*?0 zIMf~Lxn;6PPkd%NN2xxFegp=?dC!mQ-|UmZWPgOl zV191-m~O?<_HUk{5E#m%U(V;Lcl{XqH%1P>_cU)w{4~`aBNo zsSoa}$|YR*I(E{XmY_X9#L6;gX9w9aa{4s`ld+-g5?DOK_Hkze{&fZMFWBjPNg*g? z_hILnd;ZXQ1FFHCX3(b7NU3PR|0>TxkL2zr6U@)>WcrSd^quTL*MUal5Br|6+(UTU zM&P>$Jgf0E2p{94jQO5==4T#&Bfodw0Y$}~$aWWXM19XtPXd(1?<3o1RIxxr_^t#+ zo(J+k@qP!utG=_vpvb&zzfcf`i$VE)@`KVaKiuD|ErLxxd*=uXqco9DCdw_Y&V>bLA zIPHC8%bRVGP-3_9uFg`Ng|MHLyGA4S1C_9YUaO`=7;7w8B1%kQXr+nCxP-O_%SbqE za7(2q>jY0p^})jZuuUKDL=t0u*IbnCYvn<~NTSh?Ps{Bb4 zGpGtU_%MF)phU~#kQdpqdn?KR~tZo>!w)Q34lA$%AtY74z6ikw>8h`g{PL| zya68j#d(89Xu8iEnE3~Hep`+DC8(Z6Vn)N}O}<5CZ&{5mD}Kc;CLngI;%7zgC=Hi= zideuTh(y=BjPJYH@xsv&WieW-)39MF#Dt?;)+yL{CxzP4TEN;*TabeS_RForp!cf% zxJg!V+lO&w6`oEdSAo3x8;mq4ySQwYlGLqMIN-0`x5~sUO5bN>h}BTW_E6d5xU6^l zwmTw@kf_Uo5l0Mn&p6Wi@Z;sN?yYfH%2mBE9LxALP`Ac|qVqI@8s@dYb`1|d_>@2D z4le$~Vi;?B9oFI(ME`Y=&hytHU}h9momd#&Y}qJFjn&{+AWA_ zwKL>`>jLCCt~lsCSAj3dr{Be=nr68s(NyQiA3;;e#~L>LPKOogD#ToZ#(bJS;iWHX z9_NUA)rn-YSq5=NEk$-q*8el(^wSZy$;{1sa8(NPRQ*Tx_qZ3&y!%S`l`{RkB>SDi zU}%x~7WyY0|7~Dsmh=AfUjn~te&(Mj7HF^hoj}gJJOf0Z&i@z?O`CrM5MCVFB*^{6 z>|ZVda$WBVAlfSbc|gv`33<1G`;P-LhvIJpqW$tO1!4|+8lTgqz0p7~ zknfhTpL#!#=8J*k=es0`Q?>7x{yGUX{zeYQKk|Ksa8mzoK@fRz6uAmugyDQB9{c|eF7 z=o17e`XwOy&nDk25}M{zm&1(aCf}{ZH~wPkZWmn(lLT`YjXlx{=0O*IvP<4)F7s{| zUFo9vev8w6Hat#xyvzJ&F7u0B^c)xMUU%gCKu-C?T=ef<_HT2U)2`Egd_GEg`aEQ# z`u=K%CN&+q2W6rPnuS5fuE_WxKt>o~C`JvVDK#L7QQ`~+6e&j|4hLiNUbH4|#`K&U z{Pgv}Q0J1~TJwWQ~ z_-N7u-tJ4K=gXE=ELnLh$48SjtHIJ6~3ZN`{K^Xm>s;nXgcz zkK-dF=ONmK`ib~cQ>v~qp9<5Bk9dDBRjK-qIVn``s7F0HsGNyV5(An@H$GY?@-}F8 zPm9PCl5NLQ^GzI!AKITD^JNy?KM&gbQ7PBL2e6lNzU*Au@1siSuNK8#?!+Ct`zgsB z9hC{Ni?{w4G}YUzrt4!mP@jb59aHqfpr>r(C}#HU^MGz9V#%z~K3sEx@}B82 zjzvZc+gms$6n*^=2hSE+cw-cuy$x2husIwpScfiNqhjKK>O068VZ0fO@nLN!s$b^d zD3ae8S2fJXw`+Y6gSHk#4|=aW@ez~sA^fJb2ROA~iD@4}Cnd)HT1@*hr}i5$?YEuU z2V&a$oZ7i)7POO{4(*0X$Yh~9Y!6bU!!Q;Glp9J9{-0B?IvYyUFaHI)$r(K0_SA3`&bG;3`m5tAN2;(`*I_}c- zHXN5|!ZUan2C1=n-DH^aKnQHYGsbckoH8MJl7c=*2=17#eUF%l`Tib<-0IIM_x34_ z^2kQ!j97B=!etD0o5K-gBODl?94S~A0Opun+tsX`W^`7^J*3u)ksmjN?ZYuyn^pYO zG;=mOIv3eB$})mMJWEWB>syMepcy0f^%%!jlGh%jMkjn#q&T& zver)GrCBsD{c$V&A- zh9tp(hLOyjlNF)F>p>h7Lgw&qFz$8F1`AL8IatuiM`g!uwHoJnlbOD6 z1TY@WIz$))b|#&S>oEB=CU-C5{$p8WFjX^VlZ0i;w%a;!CV$G|uzs|;F!H79+gpDYSTNPXbFXM8vH_vU9ix>09M>G+jh}kfQH9a#eI|yivYA7zXwVvKP0N6< zSB=6A5v7zC9m&zu))M?va&|QEwrJG+4-vPr=V9jFBE@*Z2gL|81A2W375zfWh^R1! z?SG&|(o-mr^rDi7H>okZrgv&r`Yd}WX5w@d*)Kv)fqkG*<{8wr4|mlv;E_wYIs8Q7 zRB~u~`x13oWOoU2;!nV*b7Bp?Hh&HO0B$EA;zOMHuJmLRlReG8CmexzBqPyZ-o_>;`HaQ-Au=3D5$qw(L7 zrOzub0AjDmw0S_zXA}rd0HR>{M*$&f|ZbRJwmSm(w`O(dr16W6nY{M^BMjV zfDq;9g+#;;5nsf=1IGaO0BL_0@NCdqfwZ>?crNg#qR;c~)NcYZ{9GqtxMvH7ME@e8 zPX?X?zAh9DM3w&qAchY9Z9vZ3Yy#5!M?lUyRRZZR&O;IB2%ZGQ+=u^dv@aM(sPpS5 z0Qv4N^3Al{fTTJ9#Q5Sp?pSy6p9936r)k-u{}DV({ilFuL7(S+M+5Hx`hc9bLuYQ< zEFk6ZJ}B~YK5870_hRC2WuMU4y62RfrujiEFi3?c`F3jKL#|CK<#%z();tY`9Pl_ zfcyhTK?vumjLN__>1NS*0Z7`E@2l~RznEh9oiuA?C(ZCX>8D)uZ(RI8aM4j0ody3o zGRN(CS6W3L5MJ1#!v zf4%X*MaKECt8FoZso4^##qbF`9Pur5RTauTbP3c$ziN9O!&atFNpr(p`Ayh#w;cN= zoO5`35|S?nyIvXYF%8H-RIXZCR-#WkQ+5^J6XqVet18PYaCRZM4BvcYcvU$!*3G`Q zXwFqakXviV!>4JdXJkT=bCNQlip_yK_;G8D2%R;QUSRHg&B5(~4x8%uo4STnvE`$K zrS^HmqFbd%Tu|Tlb>vRU&D95-^}OZsWs98CmjCwo=Ek#iNjB>WhDMvoc9V6!QoWtG z+{T3kD9S@S;yHLOI@2tmJ?AZ5=bPsg%%4M>T6KsVwCPIajn?vn>;ag!L=SaY#r0xR zQj#doT(&t9{-UaM$rEjDi2v#4K}W$pRU5+w)rg83?WB6(1pP0n1d-|HLHC@cEwzX( z3+bZdY3*LmgH}$!G!N{wUE=XfL;^VHLFrZg&|g$@sFQ$wRSENqmV` zFYXB}nDQaEJ-i(%`zxkc%v?m*cj4ZCx`|4e(s-;Q316t8%NViH}%(v)J?wTE_J$jKDiV}n zjL=O?gW+H3e;RGYV+QckqeEA(J#+-w>yEkMvbNma*f??fG`y8-t-mrF%)!FF${CjZ z{E~IvO+&2quFR&PxsBEl5OuG4`JIK$Ik>d2pLOKvnwPAM-QkSK0y{EKIxesyi0J~3 zT=nB(J^ise}( zvzk)h0C!?j>6n~cujptEX2(sdrQUk-CFEZ^QqR^~j%s<6p;A-(BlL;i6yrP5VW~uBHg<$WqtZ!mNpt zW1zZk^PZ{Y)g2t_y>k&6lyiKn9nMuaoeRP==G>)ZjX5`-RCG;?%fS<=9htw>HNDEY z$d56Zf~64@jha?dQ(~)7O*m46m*crbiIeFcVfL>Ul-n;Czv=l9)W*#fy~|8 zJ<@IXd!!vEEmbdxw^eWk?*#RB%xd@ao!;jctIt*avi7Z32q?swj2*R*V^F>1DcCp} zfW^i5+%eAq?rc~JZKjw`M|+!KLn-vtH>*NM>GhCn)or0ZlJ{D=!ns@?_YT`X&4D&{ zN6rU??Ttl%9Ss$z$xs*E$DQVz55o=akCZudl)k$jrB-y(DTp<++-Cqdk8Q1289cV` z;oW-Y07|Gkvs%HXI-;Ry<{+#6pwEgvsvOyjnFx6EO~uU`g0mV){C@X5*3!{o^DvX9 z8-*2QT#kQ%R_-WL0>Y7p7+sDikNlKTgQ;Uil;)9Fh)h1nZNt-@G8+%RSTdkSQ2cQ8 zHB8$%91SQ(e`_2?&ch;tw_!iB5Viv{J2*0q4m#$!JfY}B1pTlN+h6G!<0db$R-W|M z&x2L<0;h_uPY~iz2IB7sVrwI#)NGXGrPb4SWKQ;MWoIyqy{yVm`j!8vT_{gSu- zGBEJ|;T@11-RR61CdTi|1Ix~a3m}5Fa5%$4}b5+x-+tzP-G&p9kRd&D`u}tN?aA`9mMc2FELj;R|3hj@*^)JKZis-~K zp)%Y7|5Ju8)E^63Sp7rSK{1BPc7!6~u~|DZGh*2#zBpK5f8f1)65>COoczT;U8P(0BsS%$ zILXZN1T$1zDB<-vNctTrHzGDtREOB$zTO!WY+Q9zbyE;ykE9=hZkq~5&m8kh zc-2`s#^V{SnX0JO1^km9#4JB5NfqfV1CsM=icQeje~xav8RD$6zZgyQ>n2$3uS;D@ zdsfCatNl|Ss?sk|7UFm&B&!-#L{{?=wK0joU}rkeIzAo@lmEJ&Lyg1eVofU*VklBQ zHVb>E8Q)g)UIpk$$o?0kU*j+7k+O|CnZV3|Q9$(G<*+0Eh-Y$d%yRR|Z-qAU?XfDIz-TJ&dk!A%%N47Bp)ibp3Yu>@;Yz{EzQZ^PIO#ZD#k8Ic`%$(@BQ(j*N<3KBC=(S*Wl)<$w zk*iX1^^bAAL|3D?4nZJ}3pSNyzz4y`&dd(&fmLsj_yevVc(U%0zxoxWd+Ms^cJ$Yd zgzSOA#xbgg{6h!|Mph41#|mmegrc`+1)?{htGh$TWd@$z$ldMTT0J}?ukqd5cDV6G z-J!uZ4XE4E(LGja{XuCBpw<)JCn&8SidK2uj-T7@A3sz3TIOHgw4Z73Iy2*$XAW6q zPw;Mp_7p)iM}jl+F$f| z>zNg-NIz`s+NJC~i(=i0FV!;fo{4tk?&{1Vf9ck5E$X49_b#5v#}n)-ZVRIos12f> zs$62BAA6Is=nVBBD)0z+*>}WU8+iQ#`vsIOeV<+2i{5(P! z8kbO4;h{<8oZ7WlC?`Hxsl1|`RWF~QVq$pF31e)acWl`&6xf~0ZL&U0*0Ki0ld&xv z{i$*ydM_PBm(g^m@&1hIKsuvFiJ=Apy)_S_ltuyj?TuQn@_1QP%Wt=%ijFiebe5f^ zE2>(uMu+{^5R)%hJ~uDLzd-8~hz%ta-OgCoq5EpMNslU%^d5rnVTr<-tpcswT5p7N zW6X)@&ocWs`m@TI87?+nNX&0I=hEBxq2iwNLl^}5EbIrv77-rTLXN>;(ayxNG)#*n zn>Ru_n5r!(TQDz1ourG?Qbrr6zyqx_;vvHXq4Ug$Ykq6(Tk{cMoSSP=3BFD36Ma@q zav{^e2uZ^`4GTIj1C?qg5Bu*ZJIzYOPd5P2tH__=-NBM)ryb0 zog+}A-i%g#^K#=;RfDO{tF5vJ_x(jTs$!tz*bPs@rfOx_-Nq&=dRbjn!>#l|984>; z-|V^<-$?H-K(>w**2$YupCDG27`G4>?UC*x@V=Xs!231DTiTPCFQ7i2$Qw|+6^0kV z#(^H$u4qM0Gg&haY$_)~gXK_NPiZumk&m+5hG&3IL63^@#!{$-S2OSS47IrN%b<8$j9nq*9e%KcDZtCp1l$B1T5Cb{n zQO8~&Hp-k8N4?k)s~0&H1~V%1G{Ti192iP0PU&Jf#-73RiF@Jhydy%6T$p zT^;A-eLD`$XB6kKa^zn}xm}4c1X^!35zPR{CEO1y%11}3pVz*%9wPL7l|BZ1FL&tT z?yC?Mc_M1rpfGX?uakv8*_BrkO(m;dRh#rYJf%9WX7#1+;1F*EHwr)lO=M6S^Wc>I z-iFha_Cpq3iB8%;t4L*XD#>*RaSrkbbE17;9+NZj5ItnJ8DcEdu=jRM=|Sgh8T?P# z<863W<=siV%uJQLxVQ{&L$@{@55qrreBf9CKS(&#R`tyR_&`;#+%}CJ@kMY_9XE8XZY>{H)3ZF(qF_LS8>s-jYcK4_9K`k_F{e-TCH zwl(aoJ`?4MZXqi(l*&(28_4W!$bwe_8IR*R@PdrPq4C(|t^De}`xaWzd+a4m!~t_n znRcLI_w7d$|8sLYn08<|WH!W50A zNIdJ*+yqJO7%sV!SvAEqUk&zuh~e$7R&@6)4Kp<4X_#^}k1Ce9d)-5|odF8aBuzkK z>msAO(tIdEg%q3T!&7Twhnrat98H5_!Tfnbf2IfvT^%9&>5#4a0DAkmYoY5>XGcbk z*K$tuZOmApzQu&MzNIWlXXP76bM05QvML0D)=0Sc9{5bFU+}cf^WhE-<1n1d=qkVRkbEo3M%lz zxlh}ws`6DXUA3^P{4x*s=5lLBnMdpRmR0$xSFZF`EnT^)`T}1?dHG^$_!gD>7FPT4 z4nbA5@9f3CvZV`GRUPLkn5Fiy6a+nmp?rUSxF9fFeO)yxe644CAn50Xo}MD?i}BC7 zxw8B+-^2^JX^$!=cf!RJCtY&suvn*r{{J>0*?#2%!gLdGw1+bpiK1j-}$MkYwh*FKF{00Fs%vr7Fb(5_MW5RPqGi5M^5s(H9zxB zg8U@@Ukv`{e`K;(V@&w#WS1=8MHAnn}<#C)rNA&~ZF z0BP?_K-xP6I1TvG>DvBlK-zx-_(d3P0iFi)jlfHRtAMBq{N+IMT?-^%k?3C}c$%1x z0MhG%S>xC{7 z%oqJBK=S7Tk+%Lbfb{pPsJ9sY-9Xa2fQ-jq0qOn^MSq>34Ll3xH9{{DEEN4|zzbo1 z3NQ!w_9&0%BH**YF~G-x7y$Wy4ulu{KLFC5dxdTkdackagf0P22LD{4X9->cWVp@+ zGJg93M*}-f#{NNI8*nP{H^9ljp8@G!v*10z%b>p$h{2iP4`hBB1Y~@?h$VL>&2HeO zz()mtDfm4>Td)R5drN_g$5}wSce&7K37swUM@U?nKLBL9b1|6omw}gnE(W4b_D=&+ z?kC8!l-mg;-?KpG^CvXzUk_wHza7YYej^Zn{x9Jl)7b~4{eeK*KLRF(>utf8flS{g zfpl*hko-RflD`5-{sn?zAo&Bpaln&+=K;I17&jjHEN~3)XF$sP9&j}1#lVTcA|T^E zQ_O#hz|fsv0_pBOLT3Rl2mKNPHvxDbkmhwj^4}!%0-@j{{Qf0nANO-rs@r-(H~~7W#f*KJ@=v=(S>gHIVM)11V>`=w|>Cwf-$bF}w!; z1c)NyzYR$FHv#G17$Eung-Vw8Uk6hE{{T@G{PzGUe~IW@K=NHE^qFFQg6MyY{ypu# z45Zw4Al+XNq`Utk=C=VUKMP2{H!uLFJ9~lD-wLF?h|pmm-JJlW{PTe*O8zl|CkqY{ z>@WB!`io6d@rQw5 z0OkU7fvjBFu6~L_MSHIS8ICp}&F=xy{7x}nCFYAne}U-F6#5FGeL|lm^kAVgg?=wn z%a!|J* z@K`^c-!=fDHIna9qDu4gyxkPwY9Oj6|5t&iLjCiAsG|M*GCWjYXanYh<{BB>&0hj3 z=K-PF*Q9=v=<~f-(zAu0DfCpq3q}82!7~I$3iAF1%HIvgS?}%y`hX7sssDW-{c|^P z67XhV9ScWMJf9h#zJPdF=lc-(RKJ56X*2%&lh9_o%Gn^A z$CS`!Jbb0$M`Ba)U1B94?FLm)+&`d6&tHT#T?ww=VNXT=E-T?!VyTAMN5_>M}42X33Iec%aE~(-`kai(SMPEHC5jV+ne=o4MzWZNeD8#%=oCD@qD+lzKROEO z6=f@+p+v~3&kI*9gicAxqFc&W$??$Gu}00Qo`iDgEn*6mB%UKpq?D~ht>gzy=^691 zpo(&33CRHOVoJMY#WKffRFh;(N&PB>j%0l@)p`Ciej}c~zuR%=olY*%&~dS(q-^2x z<%<@U@rv(RnAk30f~a>RmQ=zU)l0NHDjFPzKix5ukbBK7cuXS6lTIz|FQ<<7n9)gh zYL;S|W6RX5(u;1cShxa5WmBD{O>u)#Db7Ii{5(4m6o~iJv;z%-1ti z{w={R=?k@uq=#%7s1=LRRlU$ZD zV>F+ScAyN6u?EK*>^3Xa+jF#^p)*TGd9=IXY@F$&M$dD!x;W4b%6;zD$az{Ddrn8^ z*r~+3F|BmxUOS{8*2X|V9e_ME8J-PjDA7-+N)Vau+$-nBs1C9t0o8&*0Oc8lu>qU> zm>P>O6*aDReb@W3=@e!M(Mi4y13TF3asMCv$KN>o`l`6D8?v9U><;W-w)n&?Mx|H{ zk4}08-U-=l3)u6D?|V(n|ErYzR^3}Z%RXS)hq&EQg)+A9ac3q&j@5VL?Da4&$Zadg zg`fUt+3ow4aou*`f^BAm;KF0F)qJw@c{TE3uFM0a>7cBNAeJ)GM->3L|9}`l? zGW2|@hKaLd8U6>;%S#^qn_;mp;SZ(c?^F2urT1^2{h>4otvSlBhHx9)(6FXIj8mdGKY$QM-&QfPm%(EcoJ zcgD6$=yP1LeJ%e%`HYVcE3;S~TZ3COtH)-CZJgH#Vkd9B`ujC1c%*8f{fwjHbL}hc zi@cIv$V;BTCTW|!uKx$5`VC?k&?ep{{1sL497D3 zYtqa6PnWO07QQSe>(k>$1iU*?o0W4 zIwgOf;M@br#Zht(ce z538$)=S~lY^3_emMe$GfrNoL3%nlUly}$*yqd1XrUTB=KML5~EVNR69)VcZ#X_BaN zgiK{#D&}F0J?yunF*l1QsqFKj7OGU{&0?O)e;sMe%`9Ci`9(5|m&&|Z%u~9b#@tNu zrIODJ!>S4VYU%)bn#Wc!J^DT^wVd8wEeXttjDCyhDxsZgZ~ ze@+_nQZY{z{+2Z6YEt`X?hjJlOX(ZFFiFqpjWn-3tDwTPun5Xhzo0zAHzXNH^eM67#eq|c- zHZf0?{@IwGqe^97D(0#Dzb=h=o0zAHziiC1Ql&C474wwwo5p@NX0eYdKaF`y8gsn} zbCmLdNZoxJPtPFZj4;tyB1pmLErCB7b-3csd&2<>1Q^zN7hXG599;g6~f7<@Lhd--2&x z8a}4qOW<24eCg7AEck~GK>ii}qov2{zv-yq#k^udcpS~_hf3*BNb`bJ!FZjaXGw1k@mOjYMV>x8cWK~u`qS3)v=wu7&=7kqDl zud^57;L5`OUhrKGz5~K{v~Vm2->A2aUY{`i?gU?+@bxDB9tD488o7+0H^8^P7koo8 zmT2n*-$d~3?*-p=;LDbCn&(P-CF?)cgKtzX_#OnGPxy`&-_L^2O2hXa`h{0u-}`Go zG>ao&1eRi-{EvY%pns3(H;H~RFbMrCML!>SHTcH>kvILPiazi4qdu?iQ}TgIKJXgK z2P*lZ&vQ-GpA95`K=iqLWFGYU0m=U^`stMO47WC_Y4BsuHUnTl8fs~&o`cr_{f&bH?TK)kb z<#z$8&us_f|B>i_5BL@6F9Om(SBw6YqCXtS_&!eb`vVKX&+}09&x=6H{|k`%4**qs z09AYdr-QE=7y`})s`voX-eo|Pv1$E)Dn2ldrT#yF)PERA_kSV!eD5|4{W_qE57Ec1 z3re4>*Vq&0zX(Y8#{vUDu2M5S-b0?G`>z4%&WpfnA@9dPx_^)8H;H~RP~|t#&j-!~ zKhIaG{3iOtMZX(mobo$?l+ShD`QZOPkn-1wKG$cd9|S7@0+oM(%D=!6_<62M`4_1C z3oN65fivh|(Qgv{VxaP`=;s5m2Y%WZpz^Qi4;TIS28w*3k`G)&`M?>JFZxZQUkp_8 zML!=noAQB5zUU7Z{q6x0A3(}~0k{zS-v?6uI?=a9KM1@M`g|u$#Ro7S^a!8@d?Qnv zKMkb$b|B5!7h`<=H}DGJS|HuyTee??d((k*FIV*Wem(Wy@2|u24e*l$y{41h-ppq~84~zbP1C@NyzXiCM z@_|ae=$|M0ya-gu2SRJ)>%cjb4^;9+|6$SpZ=jMd`nLefDIcihi~f0{|DH$lzXqiI z7lGveF_8TCh<=mkBd_WFA^Q2ix!@lIq<>BoeQYyT`ptvXd4qwqf~A6af<8fyVCO*1 z-zL~BSSwg6m?!8H^ayqi5c`77g0+IBf_Z{IL62Z3@(rS9V4GmGV69-OV4k2)&?DH1 ze4*?MHVf7YmI~$x`UE|Kok#>_U$9xQR>SL;R5wE1pJLFM>leC%d{1*JJ&TpZ8pt>DD z(q=yGW5lcCN4rP$JLD769gss+f_hZZkVDlV{5j|!P#waL=1gCze&U{)Z?7``gIua% zMn3I8eINOX_H#6;-bPaL;4anw5&LHT`DzJYsf0fy?wR>jv@J@WnUDRw_}9!|&Jp*U zC43i2_?jhrvxVQx=WQ2x&CsXfyBf-W@HZ95kcyV@JuBg9mhdeST65#fu=wB1N4_Zj zH}i`NM1G5ef3L`ILHkIx+Sr%$Wc^0>&HV2Y@Q^n1xqp-JnEBOvCHzGao>>xpv%XX% z{ARwfQ{=V4A5{M^{*&HaSHe?ojX&E4lcmmpr8=DerI zN#E@9f4(cc*Sq-lz_QbRq09Yl#JAJ@W*5zVhtvEWm;ZRnr_+3(%l?mC_8)TDztCjm$fpiOlhsNYqz;Nfcn>A(1hj21v1) zMGIHqY#nX{#6ivkzqk$Q8@FCOV988Ou1Ii0@F81w3qDQX_8~5aWD1sGgV+j3z^GzT-i6 z>ZouV4F=kL$JrU92#C`l7Sj%Wo!JuDv@abz6sqhx^ysLAOmvr#l+|aS?7^ z<+f9kjyvhNRmn%mU1y3JZ%Gb|(Qy$@F6t`Rotl!#l31nd>Ty?G8Cil|Z_ZRtrSG)k z$`8g${7u*r2u>!{VKHur{)|)c0LEO5JwY4G7>ZqKGk)S!+;XCxvKZHjxfqii&+)Sg z<`m}#iV8}&&99`GcWTbcFK~FA-b%$p-=s2&`|W5P%BQIq=-ceKD1Qn~Z|Tp^caHhuDHC&iO6haVI6Hme%2@Bl^KZWg z+$Q6$O7yF!49)I6f9PH*)!TE-6NR7h(3SJ#U_KaKuq5Z0)%kDX<~e3{yK0QildoC| zfoc(XrI2@p)=K!F?mgf(k#nD54g=><68xA>x^vNHeC87y9T=~oYwY1;HPU}h5Si{= zbgiUAp2*{VDatbnMVqW#|q~Uu)<}&40b2Ycjq^);bK3B5{a-fKvO`Cs)lU1+Tv|37^~ z2&0l>&m#8E=gllZQ}3Z3I|cbxLH2c4p35#L@ z2wxQlmW1Yc*o}%0ViG9j&6tkrvc%bAJv^ngxZH6G4z0v586tIs>JwcvJ2a<2;zFOs zU?6Co>^2wbn}G70JtW1fx=Ks~>dr=_sB3G2mOAfIoWN326d!yiaLWzy#(gCvL4wk8 zaTS*@T&^$vp)69oPD(jgyzKglxKTW+5@SgsATjK!8y%W;#Z~bTCThi!A+8-4yJ+EJ z-y%FOaLGj9Vs(*}hdTJ=%~tBWykfC$`Lc>~MJ&5fzbBxG6$`IlR_3dyS+S^mmC~qO zSXFh?%2kVfDy}I=?pBI1EnDeRZu@vcQq8JzkG?;MPZ?CyEMM+X*YxiQNfU%AL>q~=n{uT7R!Kw8zZs_OEJYTr`i0r(Y$v?V0p zW~eInDW_vbv4<5r6)UR|A2;}x;lTq%;E@AHPWfU*;l8diUo~D#0OhNy<}(i}wxGXg zdHISeAM&OSiA0X4GVViISyi>rQ+eYJK6Xvx&p9ZqxE~mwDhkwF4<;Bj6;(Brm3aK2 z9Irg6dzd^4&@b@#KI9T_yiGAgq01w9uUQhWY}!*X$db=J5+l!3=t!+#@>B z5_+;A@3*7*D8VejgV3b@e!)G0y98SW<$lnC>xFIc9mf%4|s&ZG5^Yx^63GzNt(!6() zxL&YPaJAr4!TExg;AFvZf};ep1P|);8@OL^kKiuBR>2K|>jfJHR|_r`oG)kzP8J*| zI7%=}5Wsvj5I+y^Hq4_2)Cu^JK7bz;^QT&eQk2@WVa82L=PdlEjF?ib4z9i`SyEF` z#*6e=Z<9uOtU|4VA^q&xCCgVXRF~(Wx^n6WZ(Nr`Q)9ak zgyguGSv;o3;w#yBx)Y9bDZUotrw4$}@wBl_|M6#rAV$A8nEKwZS75y_=Zt@qlD|*q zg0F{|6z76J-#ufg$YO&p-N@ZTEOjDn)YDr_Bu3hDe+*IOz((@8Q zxWVV=)A3=<wf_oPJYoM8^-E!n#2A<-=o17e{YD_`ag#pSE1FQRuNK;RcO=nFyVHzJ%f5rBukDV=Ih%H&P8WY_%GF3fGhMsGewRe4BQWKS__fwgd3cIv(J?xuyA(gqQ+*8TV5s9hHOT|2u{FXH4>G}n&ctw{=+)vpr zXzK;va>Ugx;S>KRmB)U;fnM-E3cgYQO7Finz~}1)AI}|+6TYMQkLQky((t_p9`vjI zuK`iPj(ib_Es@iH3`AY$zen_&M86n_y3T*4=;s5mrFYsGAo?}_Q$?Tm^HZOtSjh(} z`9Lg*seX}?FZxZQ&wi1TFZ%2k4W)dbk}vwhMZXgWrv|nOHVf7YmI~$x`UC;W-g=<3 z-*gs)DH=$HGXn|zsOJqW=Ji6G^26~H?VJ2OL(EHoRFB|Cb5kDv-F_F=DHx8J`oKm1 z(na$f6(|3Hu3uIXm^(j7-%M-AwnW63^zWq$>?L#SF)bsH1< zgnF-pHjKHh_D{quIQ-x;QKFPj90oD}#PvKW??+G3f6T>0vd;eF%Ic-g?qkw@1*#|H z(@A~`z>KlAPU8P;No=3=o(w$*Z2XySTW{wrek9^4k9Kp=sZuif*nc!~P&X*W{n$?B zBGdLCP5JYQkPZl7e~=6#v@Yeb2!%^osQ`8ri=Hw)dH!E+Ld`#<$JT(4ProJ%r=dCZ6 zqtQ0Ls4n!LS+ATj^-W-IU{0~M_ARbE71~b~+S>#6 zpY6X`_Lg0r9yww~Fx+O9;6a6gTg5+C6+_70$&1g=4b=VXNKJ8J!y7fT8uohY|DZUP zy|8^)adz#aUUb;zEK}p~JlWL-D5)W`yE8`V*{(#PgfVsQdC>`20&K`!1iqW_)h%(@spS>8J^y z-e0?&8G?7%FVNLL67fS!G3jPQB_ei~AQ8WA0%&}fySMuhC97wC_f&qd-|xRgGA zGkxyvN7y1bnliLK>Mf3Vem$Cfm58ZC1abD2`|MJe7iArh<1R8O%L~_K(ME^tzlQ9O z5{pUhUU@qpWN$~|@Yeq?;>elda(5%o6gK>`dO+aFU%LmW*lK9I{TeH}QDtO%pZ%E9 z4B3x|C1rB=(n3kten(7pnopV>sV-od$;K-L76>g8PZ5OePrJ`Y(p`pPtdov~Zu3%= zbPvUoPNzQl6!G#twV5&sDKkJeXd|=QsDG`9QVR>-+m#Q}XNj=|Jz^FZvq9NNs*h z-Y*)RUS9I>A4Y8TCH!odlk@i}{NIF_V;O!998$>R(1-o=G7pYt%)Yj0PC?Ko+u!uf z%Z}@lAw{VP8W5?8Do@Bo$av4pAJD^``|_zKYv^Ha_IpfCVa{*pgRXf)fk-mWAUrTFHiQtNxtkMmwZ3KZ@%zJ{!GfZ9ekC- zC;7AoAN~0jevQIs=DT9yaru+{rz16&eyqdQ3|c7@uENA{kv|OnJ;KlYtkhBXZv($| zP|IijPRGxCJ6naH`8^%~OW+@ONXuvbPvCdmQ_1)qinLoQ{E{Dg#3T78g0Hd{eAj_* zweW?t>q+I+gRi+4d=G+eS1;Us7JMDO;N#oGdwSvSSk`f$=y*&OjzuVEr(+)JY9Pdp zyb?GL>k}sezX1IV(fk}vvK0?(&> zppq~8pP)XX{x+bJ4^;Aj=TbgU$rt@P(O(F}-VXl^(Vq&$T!NqHurQ(LKN*O+!oMH& zE%}}TQto3w^8HTN!~S|8`K|zxk9R$i&j%#mNFbE|4b#jlJ7+z`5pk0?>68V;I+W92rus$ISaG}r2PwlbmvUqD9{6eX9D@o z_DMkAZA$*vfIi@pz%zi&z;l4>fMX%|D?qwCTJRMJC4E0|4DencT)IL7)3kY0iD9#7y95@I3?1lHLWR|9%Cey&nU|gXXvnQ%(M5K=MHrl|K(m5HZjv zNK2$U@sHRh*eqBpSSpw&=o9n^c0xEl2et_|3)Tvj3g!v=1Odt(?0SyJzdUL{eI4n- zd0f+ee+Yjn8s&s)ftZ{2|NCNY+T*W@xoN*yztg_yZ(Jt)rhoFB(5AiRd>{Eu|A3R? zq)mV9WZ|b@s8$PY+Vdx&M}E`4sutSxXZ|j<>A&46wCQi12)ndz`fn{_?$hPU^9;=J z7gG=5%So5J=%w(V)13FHIqAnhIO*TG=xbf}FLIgx$VDG^xqr9Ie6NefU5*Lv&v4Nn zy7+|!7s zpGxF712`3Fj;N?D*p9V{6vv`U%%N!KF)AFFQfGhg273v=lkrq6Tdd5I$>kxUq?VKc zS4rHP08_b;Xu&MzI)s;SFr}`SP)B_ff6PmIH(^Y+CVRd|P7fsGA4! z>=e7c#e(m9>o1)MiJsCXYUQ{%G(#Aj-nhPI;VOBtJ7rENL4+SAH^hx&i%sTWJu=Az zb*wE}R!fXO?SP49$x#V`(c3DMgtCX+cx;am}xECfBg=3r8u zF)>weEg}lhh5F?4tjkThG-t9;DSbZx%lCzx>K66yo?!)WT<5{IgX)!}jH4G5Z~Yf3So=U91wcC{U|Um`N+N^)gQG zUMw=zv!S&j4T{rN60OL6YAr81X*i|G>&4h9P=i|rh9+ov>mQ^~qLaFiALE?fyDn8y zH&RaS5m}wUf||Gf3>wt6vb*B()^n5|nQTR(;zI@~Y{y&J@=k2& z#kIgP&N!RSTaFawh6}D;Y{4K(PjBA}w`9Xb6rcO?^KjWkt>!5T-zx1QDwUmD>N`Aj zMMq7cUYB9sa;(e1A>P36aA+x{2U=^4L-7?OhabDYuH+_P7p{A2b)o$v)^#w!ZrSg1 zFAA5M!26Ts#DJ##2SKfY6kc*?!#y2ftRH z;2JqL-$d4Qq71!;KIqur<2|z$ z+|G3s>S8MrVyb?ONN zNg}H&Q!Z2Msdwxf(5b9^8lGCd2QQef-ChfqV=FPr2#>1QL(}13u2U6-Y*`8l+5ggk zwRZ}tXWTE|`d_edv5Jf&OI$*o5{|6F0`C>h!e*)Ffy<{@gI01-_p*#R%UvZh@YGlc zBJmKsZ9>pJU&`c}U~`vA?pVO8ZO`&(*)L*cEgWf}|HIl{6(Iq8r)fJJRfSqm4kFL3 z-OfmG#Fw(<%zyJ(I&-l9O%>2jQ6LpdkAjMQa0nZ(*oLRoW;m40{ULjgS;l9RSY3g& zN!bv$W zQp)hV)<4F=kd@g1;b;6QW%y+uCjIdMe*0zKo$;uY;hR-A@Xpw3k>2x0x0lNNJHxG% z;lHxyIt=GH_Xt1ZIf365PWqeYA@-o}NX2+p%E+Hlmw6ZR1pR#-_-f@`M>>Dpjdb#2 zzO)92s2;fth$R63S2gV~1me$sG5%pF;y)ia6v)Hq#{)kUvyC*NOzwD$y%^0xvrfe!&0&i?^2ob2i`oMk}zi|6m? zkKsVN?*UTIURb95p8**k_Y3lU2)ef#NWQNDvG38pSdi~Si~xNakn024z_WovfaE`b zv}F7|2PDn;eEOpbNcWZl>7QcYSkRoOqrZ4BGx>RcI^$s<2=f0HNc%q*x*5oIn)N{X z^L8NqMsh8T;V2>joF?=|K=O?Q(r5twQSM>nHLl;h4`ldW0cHcA22%cZAlGqz3FJCP z9dHcrdLZpFuhQNOAnjcY91T1PcouLU@-v36{-=SApPfLu-wHejbc@hG75YA*Zvry@ zt`Qn;D*tu@A$nk&V6$MYV5wl9pidB>>`jAZ&R3iI?aR<7U5Wfa#q|r)rhYsCJ<_JW zMqDVGyi`H_lsx29s^{<{ZR&4)Y8rv2`Xe-`XVjOV@1(cFz)64G#n1VCr};sb`2?5w z9WL_*mpRkXDQ}F+oay5tr4pudn>7e6QmFtOjmU&9pK`L8XUUoxCRn3wm%T~u{BTFy=ADfAXV~G>| zF0t_&xe^aPIj-tbfeI$xKphKw&@#6^Gw5-O&M2n1R&4gWs=T^{cRca(7l*eOR#oJd zELm2eu780(E`xEbM1Z$!g=>X@j=0wZsOLUS!HM>=>Q&2e76@)GM4Xi^y`hAcX6dv@ zoW>`2RRylfs;FL)WD;K)!=KB`9e&r7_0A(2YANL3pWWAy7N3lduTmUs##`p0%>gkr zyPP|5^2Is1mrmi`1Ig|q$el7l_%RQC;|)tzRO?yjWb@B#qdY$RpwQNN_9PS>r5*dX zhZEyam9zt8Xml^s{IgWwy}tkEG!}Fy%0rXwv8JL?qWeAOpO-JgJ?{&b=Uzf~$e&X% ze~$W8|9m3HCtB;kMtMe|ElyDB&Y9$iJoIgpYSGTdWJvI1bh>jUMIx_L;%nTW@YP_tmJmGy8pe?gv(65GK4ZsOG?WE+)MS-v~zwUJ6GGKiE%~ zu&doyx9vcr=8Z_fOOd%BL}v|Z@9K}i_PB=K)&6KWbV2uJ7{Nb(u^GSC!_wwk@GsE% zF8+644!$9E?U~)fqv64M-NT}{d)wd1j9&hSX!xqkDSxUu8@9ijX!}-W`y>2UUdV0h z9zp;07~%71+k$NjpW2D8gQ)gp=YEtJUgtjO$(UKPBIrRPt4B_=>;)Zm&7UC>c;B6e|O26M7|D#<EJ zpAOS^FG{dptxRu&sfrYog)VmLt@bXTWk+|x>FLqary!F)0(+bJ?vrFv&X9i@83CEq znL+LQw!=I40YD zEqpp7=2I1pfbuD;XXDd&M0YXM!pew5D>~={V5RFx*jDzCflzk5cddm+^wund?9~eq zvPVn|AY9)1ufs58zs&i^=oSyWXhoy+DMA|La>@ZE3Nf$-Q>mfI&`ir7QW&ky%nI8Z z8El-%8|3|FGo-*%cR;?bExrkj&1>*4(7FTesakhoqUlm)x{0Ptt^7n&9S6UMY0o&Y z$~H3UP1!WaGU{#MMk1C|oG3$9bre<0zONOwlsHK&gq1;-lPxWWQuI0K<}n2 zvb>vS4Q_ueYjC@F)4b!_|CT-YkI)^`-Z^S;$2448JfV8fG~9SRp=OPw(AE)%IUNkF zyF!R%H|)`%sOT0_xx4LG6cegU@rNRjGpom1SoEU}=2FwPcwEZ$n{-7$ z?r88Lsys_}HVh+j`FMc(Fn%%7k}OKS^_$`6p8hv>98npJs0dg7V2m>NT4fE4(NMcyLe?!;nUk9~b)=!P_#GG(!GngW&*>r4 z71}$n1Rt=m1plFBf9hD1;PR!jo$9r%7&>i{1@O?afUQc6j_Ky4$@OdJB!##~NM>O6rGOw}fq`byk zPZp1P>(?NB<} zXl599M>@K;kctl5H{K+!4UNqKy5D+^sb9M`GM3z~1RjM1MEsG}r6?^-1bB_HfQ4q% zj4CHMjtv$}!BTasC^c|q*6KkEvSF=nyrGDRxyD;F3oU9bi3 zIVxw>_k%wIjs;;hiGjM$GHOmcN=dcqwv9q!GCq}f$&AVCL7hrav>U7_EQZ;cV~Mx2gCZ2-=vx0-4^KP1dT>IWx(A8)>?xr;_;KMM}0sOA!`avQW_j&|ce`>h8Z&a>LsP-z?Ce(Z> z?ox)@nsQyDeH}56#_V5$8V3b`P(Vd~_qp)bd5Jc3H|{ZGBe0dl6o+<`t$$)wcd|Vf zHw=7)QB+~1Tv|=^bJe-FpTZfhTT}jW z6Bfna?)od_6aNgfqBm!RM?Y=V?d)VT)80J*I}N;>_YGL(f8V<@uM_{Q153OsNA4W! z@htI9_WY6m9(zCFy`#{>{{`8beUyV3SZRcfe;%$Lu*Uxdu3j0Pb6ySv4ETl;z;n8g zIr9Mi4X3CM{@eAw_m0^e_;)28oQbcM#hri%JY`4q?cwol z2unC)N6_9GwBH;5$@oJbJvONN^t!(d`uIg`xqy33^N(0Zb~T=19ocbY=aI*1-l;n@ zXjK8U&=QS5v}9dVcH>D+MMoOvWi%BXZk*Szspwyg^ZGXxebzWHv#IFQ#(4vpiau$a zH?XPbP~$vo8A6R!wnM-6o-d;#`F}D7 z#e+RBl?Sv1dz;Qb-uiMfMG9L3O~IkV8~YPZY|PIfp3s=zkC@$^d>G2ct< z-7l@9_D_WB*7y+SZx2vm{`Fa@ zvwRgciay&*0Z+CqG=E&&QW>Zc=qdTh4MV7A~&Mben%JMU# z*IhE)mFM3;tW&^C%&W-raS7Jw=hNr@Cq}2u{nbkB?~TW-(XU$LpQl$cT?JtcWF5;Q zaBGSpaEdAdXs`Z*`9EyW-H@UTjB}KMamWwfK zL--W7${2j3mKg&D1QS!48O$8vXb9C|sP2%@TX#7!2Ge%|`J$7iKxXQa_Nfw9xS=V4 za@G`JDQgO_j5P&V!kPjsUrhm)uBHIXR#Si_t0};8)f8Z3ZQ6ry4Y&HS58?HJ+kvnoik*h|9A~%f-MXs4#7#o3m>;I+V>2*}3BQQ;* zM0f3gUZK4!UL;tk&Yu}Q{l-xAy3_!x;b}vu?a0mG254!otmM8FlTIH8&k|SW=N=RJKC6S zx{YZmoYIb#J$V~*k}6IUaO>BMVTb7PKKVGgl)YNM^&H(b%0VR%FetIF;MRt6PpUqSZz% z=WM3wA72xgr}q!my=7q-i~f^kuW7R)XDS!4r!;J@*`-~>h!!%v^~1bK@VYe}$oKv5 zDPAeug?v9w4b0v;9t`$^R_~@E-c7|BR{P(wEY5Vy>}R#VmTe7w#=EJizlC0|HTWsV zps@b8uosAal{3@<`&CpAr=BiVPHYaDTd%$K5ikbr@(rwM!cj~&$NFOpdofnRR&zwr z%xLD+V07M*!swM!{ZyfC>h9t*?kGkfbi#5hZZa%K$8FBg{%n}oM2$rG_*(z)_~*hI zZ(38HyJ-PI_^x1g8zjx`=>fAt5}`1e?Xqt$1qV)L(4VcR($0pVAoD6Bj& zq5RBa`I*K3*_HTOIXkiJ%wyR(9_1ZnXNN93ttdMPA7%!tSE~}#9nRQ>UK%@Tf$^WP zmnJ31QvI_b){$+xe-^0wWYDT0icqY7Hk|#lV%0w@R{gVL)jum%{j*}#KPy)KvtsF= zZPWd;u)Ux~bpPPQm6eYgK7tD^-uf2g2R3-2C=M8#41-}C8!YCSeQF+- zIVM(R7LGnxeW4W{aR&Q=R&>q@$UM*9GSLT8o>ky?(-ay-1BSmO>Ii`wuG+;jAZ$uKtf; zZtIoN@Mx7~{y0i?VUpyMtC>qesdCBH%q4?$E@_YF5^sGyL&92iUpQlDfxW|iFF5|a zg7NP$lbofy^6~kyCY@ir){&h7bmm0zw=`Q;kPFFSR9VP3%`z3$ATMny)MF&SFA(yF_IZSoTAF+(X8k$opemILG{h4 zvcSo@rTu?4-SZsjo`-a=$WrP43bxiIP4`(acclBz)292W$vGKfH}jF_Pec&KUz~h`8TS7AqYacv|s700_dYT!+WMb#W_wD z$}>9gKUcv&9{x|4_=)xZ!#xuIk0<{BIpK>O315VSugO#e|L@q#nl$0(!rYPYJCi58 z8mQ`af3i;ac<+*ZMl2hT*u=vl(TP&_t8-EIKe%b!%;>~;*+(;MO?i)<$9-sEy8bD3 z|KFwVkIS^otX@LT(bXBqK$ucwhFI_MX4V9Wa>sv+Jh@5gg!gpUp!yuuHTX4liX^WS zK34}4VN9qN(0dGy|D-^7ACoi-oZn0A4jlS7x&xfjP1Yrt@5mwZkwc0(p%9(44Wky7 zLt?`U-7(~4Myv{~jDi*!Nc>r6k`|QoX3S?~v40psA2nf2@p@O%oN_TE|H|mZFY9VT zvI(k*i6b!E`eoHbNH#$?@%66vRUUa=on#F~S0$w7Q|PXv!}zfpqI2f=%>k=idE{jb zic;henfk@DR$*)PYL!p6nvsh&`eQW#HW6N}{wk`F=d6r(;lH!~FLU1lA7ydwy@3cp z(Tx{0R?teBb%b{F42@GxN+d&)n}b zDw{NeDY8kJO~=vX-p!x%dEhYmlB+K7Nw;MW67#?v?WuWSj5CU@H=^qhf2srVwjO5$ ztXB_ZpaG|KGi9uStn!bJG*mWG-9!w?F=U-pVDbp&fH6)#2N|H1831GSZk{z&RC;;c zO!|NXBjgf{)iFHS+vmqXy%q-p^gw+hQc(u#+=wq;r4P+9R96FceJ)Im%|o{B3-TY@t^;=0|sVAIRo1drr#c4VJzRr>ErcJP- zu}2xtXoZaKrW?g@yfO?F?RVd?j8!DY|3QwjFA@6!2}4PHQJ4FUAWQ?+iWfVBZ9F}& zohwbfZ{}!2n)mY&T89R;#?;{2{L+lpjHam+;`Ueda_V~+(&$_mhg4hFGZby- zp;qhtPyDDXqrN1zu>BF+_>OJ427CC9Y?*1>zZc(;tEPH(jbh+N7Vg5lPV5{j_9AM} zCU~;-b;NFJ&y?cqZsca+ur>16utPn%uss2KE4alfc@P-@7&YJesG~QxIdpi(hj}nMqPcW* zbM2AVbIS0jj`#A4TbAWEm%29|(AnWdl_1x8I0F?*+^9o{=SzeKJE}~0cB=5)n+#7B;rSBbDMomnPY=%txwmFD2TsUsJ~7n4 zE7bo)(Z_4wLrB_CCAb0;+Se~Hwt~$Ar0*+Bm5&+!22%HJ--ip-nqSW``Sm6kOMd0? z85MAqt1#akf3nP0IU;^~S#v3`P!Sg=R(t*%pF-08A0fZT zcV>s&AvA=?jR@3Ye4>@H_} z-A(H;)W8&FyxrZgKN~5eQ+-p54|UBc$Y9KsY)lXa%w8Z(f(5y+ z;w-f9Z|Lwu3lN?+i?d$Aq}BA?TgRSo>xky;6Sx5TEED%PYu|^!kRMyEj}J`PyZ-0_ zNh`u*2(CAoq_W+M2hVol$}d&6gWPACB7{!I6dX+V-+Iltu3Lxsn*-;%Yz1deIP33+ zA`6Ct|7&Ey2<3l`Ea(gWZ;_=IeJ*FUo0eY&uXgSE1#|V|50YPyH#aq*Xh~tb{Ug*X zG(*qr-j-rC_n!?9O!&-w`|n}Sf?4^IS+VKmK2}E`XKL7bv$q~My0U)evO}U4)s6{8 zC$_(%z;3Z;`XwV#TEDQj9pTC^RHomOyLO_#C3*_$S((q}{4p+D z4ZEkLW$g@C8}}nj*uNfI>((_FSMEh>niByfS)cY{ukN~L%7vRS#^ZaFszUJKplcItjoNa9spE@PoXo0s&J2Ln3s%DkqbH#07S08;{#n4PK5N6DLtx` zi;+e2{u2MKW6x*3l6}6dT6r&=g<%mTR8{uv?D;84d)&99C+Zp?ZSU8}oHfGweeX|kBp;E{h#)xbH{t%Np!Fm+vsy2xy{zk6ar6Y8Hl4*)YH;j? z%XiG?>F5mWRh(`BO>%4Q#Be3Lh&1|AxxnVYJnGR7C1S10=u!3#(VHB`dzIF0R%Yro zDEsQ9lFxnAk)w||d{oZJ5r<_D$MpwJy_{XERK&I)Ebma!pEQLT52d>Co8`(HVBe#y z&6%qK_It&CF#g8Jhv72QeGcuYRj4rgKsA7Wx7c3=%S`t@nEN{y4Pwvp>r^~HpUM9% zIokdwpvz=mE&+Q3l4bJWhq(Z%85k5~a^HZZ3aWoW05jQpuu+og3iy-BzTq5g|6M>P zdzJwz=Y1CWFvCKzYs)U?`u=_i2F5<=_mh(@fd6}ij`=_-Ll=yz7$jW{{(ZmE{3N|H z^1B;!zMFQT zWByUfK}R{4fNsCgF(0MTIqu6K{oSD7)2-!XzB(8^<=|Zf%U;y<%x7uzvr_kKybn9i z%bJe)Esf3*UzB4k%1*(Xnx6S@DEea1w|=PUnIDIu=UF1|2&ZEHJQ)3mY3d$8@5ji` zr{jKvH-TpWpAp;&L|k}(0-Oxo3>*)<2neU%k8$7)dEMIyM3M6T3`p}!#rza8&k}PB z2i{13Es*p9An89S(B@A8X?_oo=Htb@e~LDLA4v22f#g#!=H+6ZE9QTOu;lY1ko1i} z(qAp+Au-?Y)#kqglKwFu=`R-ZW>w-TPyj74J#A$!6U^Wn5c|SSRjJI$Z{Y*WMXGrqk&_@;Oq>4+A3WdEW*z%JBk_a_q05xLzY$3KJPr7-KvZSkCLoHE_nSa3{tAI3fJXoefS(?&`R@Ue z@3TPi-7e-20~t^M0Yp@JIU$Os(z^;s`h`H!pCaa;jKX;lm|p~BdK3a_|F<0Nt`~@+ z<9!*(aD5-haNY?dztup}7XlfcQ9y==7pXElyjLDY)%!~z!_xvJpN&Au$@`zEUj$@) z%>hDrCjjaG4+uQ@^4$jVT?Zt;#f%jEoew0RDL~SX1CrmdK+5+S0#Er~6Wk_vClDmw z>wpaRA~By0WIXfGCf%I~BtJKh{Qj1$%{zdMmj{7v;2l8niHm&|ko1>{-YYm-unWxT zZVQn7V?c(Z8pw1j1;R`3F=9SK%s)UOqWRN6u<~vJGCl4B(tR_K{CJ-eoOr(lq#Rdh z{g}(d-Y@27iTO!D{CS7thjP7_rNhI15crJYP89OFL-bby@#me2AJU%yq`&)-c$BM; zsR(=tKa}HHAo*_tlFtL$d`y+#*Ma1R>_g>khX#KmS_K;f%LRRc9zmC24;<5#pq{1LF7#wZ^}5)b@db_P z-i#-B^qUtEnDG&+Kc%NzDqh-1`@LGrysz{Hv*cKW|SW7ogq&`)vbf9i1mp+o+qk;bawhK2mJ! z^v5~u$2s)haM1H@B|E=thkTnH_K!H^aoz{^xx@X>9qw^iRTZwAs)}I3B%c2jmW`Igwcl%97veUMnnaYJ-6Jpj@-UrJ>+FMO_Wy^vz5q0h__hIgypI6?n`c zTJMT5WJ~JtG0#6Ips$M>aN!hQ+gMz)YH?&)RRtmn7i!IktXQ=KqT>=OhnJN#RTV2^ zVlKWW%_5P-->#~|(-!H`YhIaHY>RSjmKN>gfvQ;v1LQXpII!FJ3uy zarH_iKXB?|d>+azSen1SM@-(cNM(S9wM#0Za{ra2p)nfr(F>iX87|CX%4%aKt^R`i zye;g8Reb5fF19>=!OOUK&6q19cW`u#-lKJ1>Yeq~=N1(4k&wx&P*_D}x=)J@w9BIj(3fzT zHwUyy`Y-Q|r1A(FJ-cuGM;}0`NF-XdIw~4~^ZqMivq(P3k8Zhai~bok4Fscxy8p`X zSt$Urd@C^7@!Ju?J@GHZjD$1hPwZ1 zlT@xbg6#j1pHb-MFEii7eEh4v$Y^xfp(sDbhps$y0vSJif9zo(+$Hb7!lzQSS8*u% zuL8UuD%5h=Jh)l3L(bzsf2BiT=Fl_x?ey&4+4YN+eoCyqZVC!WMa`7@`kE=Ycmk_$<&o7S53eH;)354gRG?#>ngYeO&Fr1^3*w-5VsyGG? zX73>p)L`~(_o)W6_bJ=K?MsKS$1q!|!RD7svB`!?{LeTa%#1z#5a?<^=Q#vA_C<0I zf$lNT?fv`E^1TDP-9yl^KZY_eX13t@f@cY`8%}%HLBv)d5_?30V7Z`A&?5*?boT(+ zKQ{TnCwdQ%iW!IYK5C%W;GcSv{vOer^t@X10IeeG383rHoS;Uoh}A?R%-E47)pd9c z>w4E9*1YKPVD@mH!KoB1GS6VE{M9!|W|pY}Z5oCCN8S@EJZG9TSLKK6_GhZS`Eg}x zf3`4kJ@iqHWnJ93I+*GfJ0~*T`ETmfLv4Rfw(&#NuI}qqWocmhbI|s}BYb?|L1o&D z956+Gq!Q4Yq1uab;a984)ws=sjYfyuUci6GOEd6(?QTGOLBaTsCgm$Dwimcx4tLA# zpBH4csO2F0%_KAycWhbx`*q&{^!Idrrt%GDs`y!F7H#PB0swAM&{xi7&Hw8qlW7D8$QfeRD3tp zu0-6V(NO*VkdaGVECWBXEQ63@mBwT$ELAMduj%-65<-aLIts=IMF*x`=X?vli`eC)r*rY^l-9rgCa z#~CTAE(}{EP?NhGpN4^|FHL<np1_No0v(c`3psiH~2zGX%$9MMQz;t3_D zn^%J1?Kid2>KyDP3RUlIxI9bCz@}u5*;;7xAn75FQH12-Gwk}A+;=MW{jx{-IHPs@ zjrft%5|`oAxKbD_e5V-qd&Qr$KY*khXEO%OmXM z8$)$L{QL#;!gFTpTj$j@q9Rpa%04`2L2x!E5W!71FSeWK73my*Nieb`*?iPjUx#_L z`sJKc6hW?A5v^WP6{%SAO`Bx(vBlr4!W75KiWQhHQ=BMpb$xxTs?Khzr@N8?h^|t^ zdLC-Ul5-LEuR0G^G|e#&h3oVGZ?;Em>`*|N_Q>e}(e`L2D_7x%a^u>K$rd$j_7&SB z!-o|K)ne7C>2LnBp0ul>+M`k<7aJj{TJYm%DJl!L*-&XLhiZ>%S&*PY3?$ShbTEar z(nD?*y`;*=S1xtVd8l!iQ-JZk9@v8y!|QC1C?Ef^Uiy`lj4N>GOL5{n94N^NC$7)g zLpG?eSA`N+=anR`$NiwVA}u;1eq)X+ItE*TWrwcS!CO`Pn|7@ZhU4o&G14DjuSv|_ z(GK=*YxCfpd_@5MGkaKt; zjKFNKT;lL)cX3Mz=MwM;uj2$O)P4+cB^~0H@=NX?GKH@jnCpt zJ@R=BANhzt|L2o`K>G7RfJE7NEzkJ>$$Y@vI50nI zd2nos@ss=iSsono3E|9AXe$S?x-6yb^H#$8@{;q!>fM0_d~Lxq;Q39J?6?3YRmgF& zEH6}fwMS(VygATbxC?KTB7@?LS~z(zZS-WkGSKdK{|a|Jezfr|WIUIDBRfa^;ZZxo zqn_1oZt9EmJ;`yq&Ugdjm;GZc9}2xgL?xSYcZh-=Pr-0AkiLsPDbv9PO1t-2#oy{Y ziP;SKAt^69^r#)qK(Lc9n)2qoeG+$zHkq1pdk#p9M%k*n8g2ChPKM%1&IJBY^i2T< zGnDa3ykKrX$wxTXA)NaqoPXAF-pDcBzz`*eO#wYWO&ObRx{ZRR5{Qu|t zqtk2r;OWJAG`1((IcF|)r+k}sE7bDny@Lus?d3YR*E5HKn1%^@wq4<_5_>=G_H!h6gq=7!6^@ z>{0r`8(f>VpxMQ>*?AB@WZlC?IAr~@3t+@=YFEVTXBM|?BUQ3K071ZdSLa9GkDEL~ zgM2l{-;b9M4A(lI@!RF^0f>yIKS| zrGXmwXO6n!07@b|A7j?>xa~`KCf1=daa7?xGf-`6XGdd$w%cIr^ynFO6T+22^f2bK zhjBtUv5uE3vWKC>>>H`>nVryufadk@FySoPAwu0&hiDo&*eiczphf1usBkL z8#SZz{qZmRqs#I8rMrnEBMhHgFnZL(=LQ&T<@nLxb`{d4F9O?DgV`#!$gd?Jx-^|A zs#q)_3qH^=Dc!bS*7Vu{-e=dawZR#q8!hL;S zoG`;=e6S6{?Hj9^kRcgmp$+JYEe=^Fv<2Z7BLpaTTVy-l-MFxggKWP$_*8MxXMT48 zhsQCkg6we;ZYg*Q1jF)nF*)ve!h?Gjf8(FKhoAwgC)ts4jMwIus#w6yyQZec zG1N;6Un_2zaT)xww};aHgj!aQRZD1F;WO&gzaUXjm=zm)d$INz-HSD~-fHgt;jBv~ zoF&zr_{y{n)hZNg2C?_RSE~2$pJ`q*S7sqL!agJaA?(e*)WO`hGw@KHcZ3pYw1&Su zVvo5`ssZ+U#r`f>W?E=5V}$K8iO$8((1_iBHo+@<^#IVc~`aTW-jBFLdWu|l%aFTLB2f4+3=B$hrz-}x&Y{w4M9i$ zYd}{jbVJ1h`Q8uucA+0ETq^vaYZJPg;7%zMF57;9_d)0RScm5cCtZf~v|~}`+J(N` zN$*^jf_*XQ%m1qRC+B{R9O9nxMnP95bW$%2$Tuqdpeq$R=3S)>zf0nW-JX5NaK`JC zpv(J2`^$PFjm}Z7NdF0F?#1mHRIE3YGJGBTA}B|GHp&AoE1+UMqLiUGa$vq5>m}aP zfF}V*0M7&d74;9IeayQ++P?;z1}p<&D&2b-kmsOyUTq@q17x)Ez?TG<0!eozkaWKq zt@S?yQokPPr9F`De83Zdg+Tg$5^xIeXdwOPA|LhpFmX@)-9Wl?1L@B&Ao;$6dY62E z2qeEdfaEs~Ncu@Yq_OuHAj8LVWyD?}&3`BQp9|gzJPYOW8mpPo-;cQ*aVyaYyh4K zl-e|xiZxOV|hh5o;QrvtwW z91Cm_{d(Z}(DOmE(}28rkMXexI0<+e@C@MjK+4NAQuOz26fXMLE_e%&=GTb6Nbq>z z*I@2KIN)?d59A}Z3$_Y22$l=_1U-T-!5%nP?gd)~8wAS*eS#iAmtYU%!RLr}!B)Wr z!E!;Lphpm(+`WWwsC9JI15~$y8TF=r%yWIzoBlA*=TYCPsL{6(d()rg?Gd#1Azx8F zCVJDK+9>p9JNN@UMobjOE^dH|5z3DH0N9axeaGU5&e~;&q=)MR3QsGnSJt+57 zf5JcQP5<{5q0dG6qB=+X(>hcvV(%d%sHI|W#vhl8z3K0B|Bm7>;h!t?t)QctD)a^7 zAKNa{cZ+@lXv8Z;&vB()pAGkR{Uo@z>$4sDFC6?{cIYp6=w~?eDC24T|JC6?Ww-mk z$U*-jhkmVt-g!>!fJ6Rl)GK!WKXceS&lRq8__xI&?>{@-KktyI$YKA!L(hu}?ed)N z(DR(7-TrQe|4%sV&2|dg77n#7qHbXnDZ|DSwHIYY)e6inNQ}v*k_yPF znR4#IY&x;+L$Mj#_MvD~#;7`fmvTC5Ua_{bZ=^|CtBo-!t@=WMYpQJfW9$dFmR3~P zh)^a<2MC@#&84?(RxTejgxu_zDTp?6dl+rTN^YB;!CX-htu*W^msM1+jKpejylko3 z>2rNWP0Sp5Q%4!ii8p)hjMdeysy91*lozX3R@GFmG)5}LZD}F0)7U1b$_KOO&Bbn3 z+Em8sa7L}dJotw~AKSItUSTQI z)K8bRW3_YxW%TIAy7({FIFEK{=kJUI@ndsr(YuBkaGp;* zM&D4WS_ngaMoD+ZXnFn)<+OU`bzAJusHe>9AzAC7qmAlxPQQBf}Q zPvJ0>{K`u0n=$)(LmS`cs+M(603%q;sfVpE@Opd*n&JcoOWYiA9(VYvM@eH}-$SDi zcjaD$q}<*GoqBuAENtTLdYFe3vvYR3T%Ap1N*XN4sMW7W5x*g8+cM?X_of5Fi3{@; zQ!cu?Z?6Xdm*iiw?PIaNw?qh&%dfbK`(ot^bNHiW*Ak@SQtAoYODST@q6V{Pf$PCm zQ%Zw+@hZN<0yigx#erdqhdTkLr2 z8b+?|{BhsTjiCO0Pi85z=!p#%=mQ{8cc-Ff`lu5jeET?Bw5j33BV5s3>o@T~4)1Kd zha5@Ku=WTn4IINa?$RxA8T~MS(KEab^p_;Y+h3uMUQgnl)zFOkXw-9|go?oEWcT>P zI0g_g`_7kj1sI>0G8XE-6Jg97M1v^8n!+`ncy*9QDj5%DeSBfW3SdO7~?@c3gY zaIWa7?nkB_izjI7M(LN1H`E;#@5t^uyuZV&`{0QIy91B=k?65_pxEgmr@uq<$L*hp zz!zixJgeon$ymn@w5&aPShT3v`YUcf%__nEwaUF_BRg~QKSSnFpLsC?h?3Q8}qTdWfBQBMY!^f&~TN3LoGLE?HoQOV7-U*VkT4hGF;^nYVi>i!~yKfzPQFGa__*?E+x@E?amy+eR2`&<3YD{bBQRgu_t zj*Uahk#`=H*enQR-Ry!`au*2eHrv{=V#_RQ|A#iIXzo-6g;UR&cJ6uSPcQP%oD~RO z;+iwpqk0dji?Et&YHZOfo$lC`k0>r(S*$4{1D9(VqPQWi-2f$|iqZQ7 zm_m&!2V$zwn*+q3_j5!V{2%kS;4^|>f*9?SSK2V|3(%uU^mYMrfZKrR19+LPW`CVSztN$OIP~Og=Z`@^v~Fc(?HX5v!!BYnTSlapKY1B%MVYzq zl1NFggaf!6QaW|mz%dGB-x>Ypsr4Kz4LNASs80qV13XTSnB>|FkwEJ*j0@5_?bTDG zdejTk;H(7*_d(CU4btyEui)INY5nfHs&D<@?01LQF@rMwZlgyY|A+eBebRq4{q8mt z3e^S6b~Vr+qlW4y8$KeQ>uMA>yGrZS!XgsE-6<6*iby2jU*J#a_lsPn-dYBJD2A?b z6z;VAC{Bjzcbj=Up9s<*{FZ?q%Q#e;h(qUZyl z{~XDb9gB4sR6vYB_9dyvn*WrK@o*aczp6^>cVoZdOKQvE7kkJDn?KZ>%eV16f%iIR z<#npaMeF)A#Q)=r=&h_F6?rIe8FmZ$bI|9Fu0s=VcFbS{iEUqQr7^}PDA*LsW=cE? zi(AT#9iGq$S+7RV$2%%`#U}OGZ}Jcvt6SYhucr*m82+}oMiR4S1)cWfUX$cju7Ue4 z*@Lj}Pn4an$^D7kkEiw@a*tV4zn>ihSM&sIMC3+d_V%&SYP>`l-uy-HSie3JZyy%l zKiqxG_dt)1#Y2S3?2VzUuKu3HaF|phMRhPX!7jdkY_x0!XKrKHZe?chw^{h@y9SgO zr%`ULSGJ9`y$H6arrSo9?MB*q{Ay25-?*)H%8>KmeMiW)$9terVw-+S01v>X_9HGr zzsSP>kMRE#{>}cxPy&?zx^PD~Js&+2BZF*PzrBrlqUiJJF^QvT)AW4o1I8o&llz}T z2~~JgdP_B@NxhD5^o9}N>Ls1mz!S$YRrI58%r-BS7>8es`d)K4K8BCPIk4qZq(4)Z zs|&V5VBPJF@9&RI!fV&rpxBf+heWr6NREc4=tu(E=pVufH+G>F$btNjwL_iT!9kK) zxqT;Lt5&XxGy2yaokhKDP}lNB@qYQf`1D-va}HtOS2zco2Yb{WFq}ZqQHL`pJ%!RK z=MF1-tY^rdJiK9c%_{5k^BrpA>_P04`$$ogiX#(#%?oIE9@3QLm{la4w2D4aQBoViWqt;05Ns zT>L=jz8q?X$+Za$j z)c$Iw*xjgP+>2t+|I=t}_%XgSjT21cdWxoH8l)+Ym~j0l)BdFbX%AJ2 z&(Ktxev7JMGT1kW`@!rti9OF5XY#*Q8ez_5K@E_gc^5?;0=Q33my(cIrk0&a=*(?7Uk&u(~N~V549_dTHsjs(ymikS|PgK9aKlP@* zz7*foC+F{k-n3^I3O&O`^`_953P0|*pnKDPv-d^4X)oUv`&J+o^OvF*_kV>M^|_)q z`-Mz&>4c}ajq73LX!|s}-UFw*gNlCvE>@Yja6wSt$*i`BEV!~%wB%3`#g!;a z3L_QKXdU;@L~$pro;anq1FdjpEvG~yHP!V(2o4lkF{oS>TWNQn(IQy3AUJ1!c#%AONs54X^d@_wxHM|!307Zfo4fn zO;r?E$so#XWCKj?QEQ`1#woT@q;EP(ZXQYP*HJ-9yUd1{+Em?ui*0IZ^yUsuP-DeK zc1B?j!iva}snu#vOl^$YZyfW|CU)%GPDDJ0G~GBUlH&p#n>Lllv|%cf*@yW3ylZa_H_7qC9Ak*~BpXBE7WllIS zh%ZSSr!Ps1fxgfR>K~ckpIX4(HB@?EO?~b1>Y?WM*#~iX=%ebh9Q0o6T-1|P?7vVM zy_w%fw?L^w-B+XLaN&ad=(YguGuvKh8VE)WHNS8893c+g6giE15!Yyk+y~Pwm3M=< z*b9DS*#r3`jA<-~oR1gkcHvhGCUy}a_cF0kkdI$Zc{%sNus??NL01nj2Qo6erKGbd z%E$l1ZDxo1Y0k?Z6~ZJCCcH+Z&dR6ehhTm*C!sKzhL!K>DUzjX{z}iEa@)+8O|NY@ z!pw$aA`{yJFn50iKVVDm8^ zA;OrC3K5#Fe4_0FW}45+6&F8)eWvq-7y~NhoR4At#yHBg31^w94mO?+fUa5SM9z%k z?i$cF2p#2B%FH*Ib4M_|8~@{R1e}U;D`n^$=h}E~07Xr`>w_XZ=4R+ow!9oi<^XGf zqk(*<1XY9gV!*6@suBTjf{RW4g;jr6Z;?QFbAkDtVq31Zx?tZC5?~2R`E|@>dkIwD<(#yhW zo$YiRb_LQp*wXn_mkSQ)jXL^hW*Y!IMtE9f)sm{2xEB{YplN`&Hc|%i;)U)6rAx5* zylJ?zoU~4ySKitlY!4^2M9SLQVYDsv$rV?BV)l3|*j2Q9-TAnIaI+uJ)5qWm zWVr^i=mwuP=hkZc_}g~kS225(O;+!B(BRP7cIwo--dfsymxMj;rXFP9a3YXDerbGl zo~t;qV)GhY+q-DTHD->Rmd|Y zZc=ZKyBn{DxsFI&MAOYQvM0_c9Z%DyNtCF|bQ1CwxxZg07+z2B4xqDHw5Tg!9dO_A zJX-s{<0(O?GuRDb!~@*W(`H1_acJ!{dVfFe;W78+Jf#F`PR6(nn}1&rG2U1Mk&G+F z1y|&|n_h=6$#{Ry7VilCruDc%GlnG5e3&Wsft>lR4R{RxORR_T+krvr;rxezyoHEY z@1w<LI9jdkfKPez*SxYX^5C{5uHMx-?R_x%Uk^YdLZh%AhSv`C;mBdjY>nR%{`` zegUjw_a22Z3-VVn-9Lbwfw7VI{t^NYZ&O7D9^dP4iC_!6E(88}=a&I_^Z+}| zk<i?X&P(_p5ABg6zh{Qa+>;59R1k*n`T325)VFo&rGKlb^)mg8=m z$B>ASMi`OKecOAsOw8*~l?76>t0eJoegk|lH7E)@wp020@rZ=po^=40W+;P8dcLK` zi7-fpQ*B8~#JUtqj2Y*pUB~lM-^^r|M)te9AVcE-=x-4O@B`2AQI-c4+0_3VGG?uzYlr95i3HeC(8fE^ z*J7^lA$8l>diH=2hcP;Xbm8g@KFGdCUqK1l&GG)kwRs(VBjRsk;6CH|$tDV$+Eq2< z4(zak5BqW9ycK-V4_0g~aTufp^8T8w6OyJg*h<5~cD5kNdn(ZaStVU2QfxJZ6P7J!neT0B;KE%_Jin7BvUNqCE<~ zML**G!+7iJ+A9%_Ax~^xI1!wVoBR5sp>XB1p~{7=IL9$8D^%36{(Qri0|000*!lAG zjV=AdiA5omEBAF~M}6S$Q~V3VMV;%DvYt5v&!>>h`h%^7yE^&~`}76m(LmN;!~LD% zO5FFl>&H)Q^nnCYu^_CIYc>cY*~`(`61 zRvQYaS^i0p-Z0*H{5M``D;fV2bGowM`_ue9U)k|7;Z{N2is~H+pM-z0L6Z@7Du>sxuHA^KF ztJ$gXZwC)oY+m0*VA5Bln@Y5qy}5tGVXKxSKOLW;jU9pXQ(oyFA-xMDRIT775f!lh zijhtf2f}o>l`SVUx}>Pt(=yxMMs`@O9esaJHtrPQ4qQ8=@?+Zg4*R}&&nzF6I>9u{ zvca-xm%H%;h+w=y2g8Shkei@4WlTnPviH-6h)}^mL|u2=uu+?WR^_UX#|1-b{y9r_%9N~&*| zFVZ5tjI_woO5py58284enmpFa`;dj2eV(xOy>>tvwYzaRh>Qzv9nOOuF{`5s!3}lv zTomfqk3F+Hazdw~-_I-mJy;hpT|LCJd;K}$4@Mi<052NM;6lV-wgZf(NElT6?#33F zC0XI+9!W#;T7xc;N)Jx5BzYYLO-5c(TtFJ^4qHuKDGC+yNI^shJO)!7`VDrql;Lyz z_yM`5_fm|XG2Tf}>m4Q5Cmd+^PJ%7VbKyR{5|k;wE<^b)PPUL|AK|`*lZ#6em**_C7Pf`3ncrHtrMM-y6`T4G?>kiy9qGPpB8Whf zM)DX)M&EjL^9v0-UUENjAl^U4eG7N@gdRn|7ZZi}azAju9UliXYz21}6ogw=58FBN zD*sO3aF_d$qZRXs(G%Q{d>-$=N={ouqu&Fv;Vomo>)syDZW(=LsN*e zG2hUviow2MgD-YgLb;Fc&x>Bq=*5YVSaYaF9bD#+Q{Rn>;-AsD%-@`Q>*ZOD9Dj3Z zmiv**haqN%#Xq0yZh96ep5DI&WvIWS;fZc_?)mV#zx4hXG#NRw35?;Pk?a#{LoZ52R z<(lMK|2D)#e^J-kll|L}Laq(RBOZ83Sjj7&uj8;5^0vC%AgBvWaEQWE9|#lhX`wV3u45TK2t_>|dw#7j*mgY?!A> z{zl2-H~L($k+^o==Zc<(=KXk&Y2K@m9ky~R)!!C14LHtd=!@cQ4c89vnC`+bJ-!Zr zmvnd%Bp1yN+NIiD6;Nc`3&DHqDQUbnD&FhCyYJs&dw;s^P0Dr+Z5y{<1&vzkO-(Mn zf$X|<7=}g;^FPBJH{eeXCF=FP%^a}&6^86{ovDcRL!vbQ0_Lh=PZ{;XNC~ZbMefGW zV4!A0OqYml%u%R5O%Uzo`#>z_d3JM3E9M@%IXBsc67#2TzYQT&qdGhpYA5&s2uueE zQwN}Otq*Vv14DB*Z!60%92q?Y*ls3+ik@2g z0MfwS$m_Y)>BOJo1FkTGjp=pa?r!=nOnZL{*T@si(06;5HIW)C6aw6L1*gZ@ZHOhiiiDbOOI3;N>p8y_i8m_;kcTm{&2S zsONuG*-25Vu$fft{S}gUiWv<&^A)qlQe*=Pj z)H}BMpvn#CcP~KSl}>*P*G`h>Bw^o^rnhd$UBoF7=PvPxu3x+^@?BfOAqY834vtXZOeQ0y6w#c51u};)!h# zhx&2@iPhP>(xrbZEO60`IRNiGDY zd{=CVb$PyetYZu2ymU#q8Qiw6!H>VKBnNf<*HMn{Ot)RFY!}m(v(wRZTkUosZ1;c; zlcmWWJ+^!CReU{fbqp3?I3wJ0?nz|4A3U~x%W%WyBX(2V+i8r_rMytvi$2UVA>dGJ zt1j#H#+}(-lymi>9n9}MgM2_aW?jmLTT5c{qp}Yr;(E#pgG-S0<51;|n84}BdFA+{ zJ@Ca9J52NFoHd@>P~y?e1d!-%av<#*p za4H9u4zOJY)3O1kwJy)aUfnXBqNMxuQrCE=$?gCOIjoQo3gHOuAT|DOV?F#9|XoAx0P` zW(vb62m_Ofi%6*swzK^*`5!BJY^%*2hw8wgNyM!J^T!wN+BY*VD|RH>xfCNy6@_B! z(RO%IZ2h7OfVm?dZX>YXNYVB8q_=<8el{J9`_#Kie%arFWIg~En1b@@GL$Qes8V=2TJ0QgM<9 zK4YmEK?mGYLShARi%J+w4y*OH%@6^@wk;v+7px*6S^xZHtcHFF9p{P*l&~L)>3y08 z^G=Mb`L%xa@HN-G$I(#(tra%}P}%Eev?|a&-J(+2j3G>#>bUb4bz<7n-BgAN16@mF zK!q7fWXAsaKGo~|pl@42(|4Ex6oim%l0jvtf&CkKH;#L`L)I^MBM6w;^(XApw<_o*iEUl* z8;wD%svonp+ghQ+a`#dFJCf78oqZQeFIF`jnCiut1ex~NyAg&4n1ErAF3xC z)%2CS@fyTh;cIGea~VEEi6%-Dim%3?x;EU>#KIA>n!0J2P_WPC!&_deB(`YDTNp^~crA3W&>X!=e)brNfe< zpFWuA{{|V-CG{Y&d#zxHiPZ*_9pyz!EwZxyR6F4Hu5p-}8XLB@*7|O&3GcQu#wL7|_}opHG4Z*> zLQ;I6uV9$F@k9hrVs649j+*|49N)_w&O+!Ogs?Fy#XXdOKX|$g5p!88D@0FPGb5R) zhQ$hn;b<^SPH^WA#{B_Uggcu|@iaXo>Gm#0bfZ}*#bdbJREAE?q@RHGhPDA*qu&@n zxnYI~lrw-jc3R(=VmShq*gAt``A`=ueXU7!gdTaCG~~c?%em3U}&?w{8 zJ=G@e^I2p}~WjTL|d-g%khO zichSZ76j0$tE?Q~|0V90gei*+2VoqhHNAq5aAJEaK&XakFWk5N4Q8BmckVwFa!Jd5 zzHmKHJ1G5~H#1Ss#=k78?DO}3LoKTO2xi=wmGVmagH^$w_TCE1aOchK04iZK z5uXSR`Zma|_P!1JUOz*1rTdTH0o7JNUA3KwY@k8`&-;oP5m>m&iB1^E8ssjOIN(eP z;Q;BFmKJ7iRNo6@-B6J1BhC(CD4pKFQsZT|CsHt#C zR8r=6jeR;LUH(vFgL(8-?!g(T4_PnUhQAK?)(t-U`~v1Dm?e|*6^UDzHB<8=dc0~5 z;UMZUKaH`fwNoXt_C`9;jBBd2_B(`KymtR^OP8z_$dFgp{KZ!Ncs0%Mbe~Kw+&4@? zORV3bd1x-SnwGH@v3{ps^ppE;*I^ZGQEo8dL8#h69I}F~rba z?yhYI4LYRQ+=)$CsvD|z0&u(zr)E(WFRc2}u!Ryc3pNjnoryjTyb6!s=RXm5Na0>I zT*|h&Jhr~?BD?&ByLu-eqhoSM_vb;k*%uofihtXOPU%arxqWT`7xt`=K7FpKD|!(+ zhaQ znPZ>Za|X9&kLuX?5z#7n2ssn7^PTZo$=-)7%W~-ky$@8EkV^^C)V>D${y4#}nxkT? zH#$9R{T38r9UTj^HMkin*tV}>H^dtj!}f&Oy#cH0?!FVv7ijuM8%@0AAs>6ms;}ci z_<{|PxGj))Kn+FobVk^ER{7B1kl2x^%kAQuiE1E-zgER^_mfp1@DuDglXK_Dcp`+T9?*wM%-FwTjN zfxF(tu+j$E?xqcBE16Nb+N_FV?A}nvUp%uLv57mgeT^oB<)Of;L)F3WX)owVkK9~KVN*%`#uuRW@ab_Dux(k`wlrPen zho9rqvtzl)wK=w|Itgz-lSWef$+ge+T5z5$Kk;o8&gE{bhbekmWlB^Rr$id>gi$zg z6b6CrMxJjgPI%PC*m8$Bt!7q*yey!d-74esma`rbCuwe7*p4wSc3HNnx@LVw5Z1JcN-W?Q#AO$RXI56i$vU0Yn%G!V|B1NQI4%mdQT1yL9A!( zXRH5VC%#E))PmgX=8s}8opH?b57-Z$SkwSBNB$|=;lAx{^r8DuA3hY{HM;jqEUGY1 zKC2=}+?*;9+>O<);jVVDx%i3qe)6FDekj3iSnEOh#WEk1X4&5jWq#a_36f44G`J-vhRe#U46&e31$8|Q1n*7UGf&@ z6x?%n;$`S!_uP*mdUwb@H`va0%HNMW`t%?N<9YXOSL4De^e>7Ns!4Mw5wZ(gxT>&;&1b;E0R0)i6-1YGJw|Lt@=B{RzNd2CjXR*n<>*FwmfU}b5i+qY zzo_QMGf?b( zcq!ei6K^;U2AEGx83d63nAwxj`;_~(8WoRC>h^Wrv-5BKg1ds`Rq%~ZZblev0~EwA zq9S9{ssvX}tBO0ctA*M~jq*;i)lw&}Ig)&&HRWUMDyBDro3jW&DX-c-F z6No7;Qo5H2GMg%!jFZov+KRfUXVp^A+}f&@^XC_P3MUs#p6Z!8)pKdZN<2VPc&>{F zq}AERO4pLAr4_N7sB3O1?jf099Pt+y&%Gj2I&W^-m62J&c?;&-*t=fCWOt_f_IlJL zIPTs;)Mc{I<(L?%6}c~y{g$J(Jx97w;F7M|#s0qrao=#9rf&dbdaqXP*@Io(AodNI zKBl?_{~6DBV?}`K9+Z}h@?*J)>K*)NvTyyGvW9F*4G3Si*h?@6*zX;}KKCTec(C~M z3}Ig|guPGfC7B1vS2~1!x!6lE2Don+!u_Tp>|2Mh-y-(hDhM^e|Mns5yN9sv5qln4 z%f#O`R$GjM&zbHA$Q`Hc2XkK__T`E>=aJIYCb6eCS+0ThTg3jygV>j!toeO{@|7w7 zm!GQbmjW``cZ+?FCL17MkJx`aNcrvIL=IFgYPn41XYY7ze-9v2{B7do9MlH*oJqc1 z&R;-DF&`jbf!O~7G#ULD`=b<>f%%7*4pI$fpDXr*mG1(vA1r_R#D387C-$SY7z4sr zF7}16&y+t}#eOjVw}?HHDO3I0Bla^#WsX0oo(H^_O=rxrc{|XQL9u;N%G^Vd;T_&$ z5Oj5GdbT%d^p5*9$$u^WyPnhZY=4v*gg?Xg5dNpXsOd**YV>r{?>i;m7xC{AI<`wn z89ImDG?{eMTuli_#7FXjCM==Tf#sZM&)tMD_9{-F6vIY@=yMmGs` zhTp;H7JzQA_&ZoS(O(WtcOL@XgP?0a1UlXUxLN2-c1^~QEgY;%Hyr}qSft5np_BG8 zW4r`FS9=KjYCu(BrZ|ZntyF3^j@4jsoI%%I% z@`*FX0!NJKiHA|7;96J@0CIw&O|}{*L>G82{5i zze(uXuBXx4;^7+5?fJ9jEA4y6@HK+2N9fqjr}4{BuRRR<+C7@DwCe--QqDhsuIv!# zvPUAmgzjMV8s8kBE_4Sg9}7U|5xRrbLu)~oBXkF=Cm#geUWp&}6O=OPW6ST)*!Uex zzE5oY7*A>ZX6g2h`C=?G<$m#({f9I-CI*NJ|*}o zAo=|eNPf*?UMG09;A~(3_S1o+^N6`y^dBMODaTeI`4x$Ng6Q*rboW_-rh6So{lAI+ zc)?-7Z^Hb;DVopQ!0Vyk4J7@OK>G8L;5|UnZv@ic>w%wt#?mjXXWzq<b434_GqGj}^WOp)?jHcr z)_dPLL-V@;NcU3&j|7rW3kuGqz$U@32_7R@c{(Vc=0Ja};M=F^_`eEB z{*!>@d&8+N*DByFAmeEQa5&=WG++_*Zs0}0Pd)11wQ;?`2>8DSycXCE9D#U#3V0as zzku1m9|57p-46u6ao+(h0{zXvVbE7;^D#jn_>@crl20Cxd_F%#^LYmdHSSp;`8);$ zpOPN{$>(O^V#s$Ruo8GZkn#rw$B8{JWnTjOB8+dp4*VLh5jX}|54k?YxOg@6ZvZQR zn}H1feL$vf1JDOt3MBtUz;8nz0?q&yiTTMuwEf=C@k9C^AnBhFd{FS4z;f7^0Ivkj z0A2;0BKp%s{~_iR@ae4sRs;Y3HJ9rG;OoGPf!lx=0%Jf_Y2LZOD}b|sCBW&xIlys( zhl~9%vH$QyZQm_;KalzCZXo6VHjwhy1FwO;RP<8>j}rVKPt!dk*aln(`n!NP0XG0I z0bU2Z8h9137&sfq{5TCrx;)@q;Fl+0wi);#kl}b4Nb{Y**}xwF=L1`S^MEnn<-kS2 z1;7BX6nH+6Bj+A0)K--T?1SW zTmk$Bkp33|>Ho`zW5oja1d!(c2Bdjh^kt$yXB7H|FmKFpxt0Sz9;xZ?1FnPq9w6m< z9hF-X^gjf$-uYJ`!ZqV&jox*@n_<2bNc(HG`HU-o)1jXUB%gDDl;c<+!~Gd5OPYTS zWIVkMr2R`kwnsaGl>ZlE{!hT`p}$GYtHu1U*)G?&VEzV>^iKoH=O$ni@G>C7IRbby z@GtO`{&fRM{}3<^RAWitx1q=17~UgKIk|(9`cv>jcfG^3eB9AYf4F0j{4F5))rEo&qX&zzxuE1d>1U zgrZvjB!84S7wo(q#5Y)tU?WBBIZR`_V5?w*V7Z`A&?D#)wN>yFKO630r^^9&NzZ77%2oB8U+NH^-u{PcGb zkJOv_=zEbaN}sRYuMoYNZ?1wd?alo17lwY4rvE_nX8za@d3aB3?(y3G1;jh`X8!$I z)ECs7`T85+Ug^=!Q{5%>W<6w{*td#*C_{?gtatEm6W#m7{xG307k+&RFYV3x%#ZP{ z=*51G_?IjC;Ua&5=&MoRk>0F7-DUhoKZ44Sf5l(?pO1V(y;)CqQ|t@SKcdPLdo}3` zJ>Lf*y;)y5U*tFQ&3wOt_FF`r=OjGsqUV`k<)8Tf4APtWy%Uvpu84%sBlJZQ9<$zd zxY)bI{r4sOJwpGkNl&p4h<~{fo{_@O%-;vZf3x23J8^H;H&2rEGV7VF|0u6nKmC@t zHwzUviQcSl{uaR^y;-l^DDvpgx?DRLKj2xw3Jj_h?m?1NTt&9){SN(i9Q0cq`W%P; zZG^|p?_Urfc72mW|1c!6+jpV7+Vy8R=odQlrARM3J>NgF>mPT><9rXM%n{y6j_};) zkmu(P{Zx2n_iwMmKF6WI%R$dMGrN0_!=C*QyZt*3d+sK(+xs2iy&3td;^5aKG0Pe&_o-eGdMA zb%gI-NBZYG==&Y<_lm>+QipxWVc+S9pDm8`=e_Cn^ol#;>lO#UM;-oM>u|ru;r?ug z`>P%CRp5w^vmN#)I^t)u!~S%K`#T-}Kj8@Pxej^q9P;}e@qd_u-}fEpC`_moqxy+H@DjoJ`Ir!x}_~91vmC>rYl@&FS>#ORjmzsCiXU!{4H%PM`a0mPR z1#{;GBeNEismFw>R@c^4S61Vm_EkWztXx)Axjd;;m$aw3D2QMOP}Rz4q%w*Z-Ur&_ zxghmyPW8$qd;(tXW~UVC7RqI`dIethS@KQT4d9h}Tj?9YdEra0jFkH4`AhWkO3E?A zt%$(9YUTC9fTr3v^WqUr@Dvc=F&f|rABu|B#moy!68eEA%T^^xbnHedtLh9p@v?vq z+t`fLqAgMxtJBeza+e~Y7&e!-FhuMRJ*7J^o2#6OP#deOT~%L&+_DVW#0Z%diRo4; zw$&?1k7tZhH}q>u#AuOwW~-Gty9lhspp}>a~1?=2j@jnCUa*k2rh`o17^y2c5qH`p1(LU$6pfEgeoc= z+SF57x{9cVSCPo#Z&%f=GPOos)%B|?E24Nq%vKl~k0>*ISxijRb*XqIW#zJpYD1T@ zVT=!IgN$i&#IjSL_Kw%UbX9d&#fky70lZ0Cu{bifWhOFdtO#^`s86Ip>di3av9_#Q zQBe(65hP9ps@KY8%OgvbiK4MrAoVD-6(D7hbuK}YYb|_G-%_WtPSY=9C?>iB2W!;d zc;9g(4Gx~e5wESGxgEK*rfQ?nRSO31HUVQOhHNNM#0WMTM( zI$WL-lgt#pDi~OhZnJQ~tdxmE4krDQs@fI`yo-b4xHI7*Z)KhGXtJF(p zD=MOuhBYI5N%hjD;*-idkyve{t_ntQe|<$w46lVKF;r%PXe+^LVeOKNsMDgRqCVXs zB^#xdsyOMDYFc&mY|K{FCMyg^tQe=Wu~`g=7@HkRXvC&v4oZJxE-g%wxmKd~7Ef(i z&SshtMHdg%Pe7wt1!ua-iRhPCps~F}C)ts7Vw`LNY*Z=c+A!@Ymw`FK=8{Qc)0&#l zW~4vuMee#-MV)yHPnXMz<;l147R*~Xe}O7?XvUMKr3>ek&Yd3|V6L63I5Zq75z1r% za?f)Wa?8R}h|9-%G}`L;kf z6EF3;sXseG7b?Rhjp+^b)isK`4|<;iVJ_$Y4@hXe@=9 zCZQ8aX=n=+r6y@IC4n@F$qY@QEvad+;}AElpmh~Cx~O#*cIzq{kV{G{EpoB4s8tZ- z2Wq>4wJZWHNb~*w=RD`V%{!Sv{e9oJ`|bH<@_(Q6Jm)$0^Pcxy_ftLg$SVdgkhNrT5r5p zan+sce3H^GmVkrui0OZt41ST=d;-iM{q4f9&%z%Tem4D>##JWUeSaZrccWqal`-qA zT1yyt!i=jmvM)qlKQ5fFx@{m<-|9P;%`_8@R3ZuA0mxkUSuTBewFm2~N*&Q# zS&Nml_xTuX3qM!RQ;DV570ZV3)QVZ$YL3mkUB=Zh*aiNp-O(5eyE+>z_&g9-KczHQ z)>)94nb9}FzW-Zvj||6(WOm2w{r-}lcE9TUSlI;$oMYhY>foB^`6^~O|1u*D+=VCx zBB;M$-p|?k1MQ-OazXBga`4Ujr7?^9ZfQRjW#OClr6LPISAS(ccI4AA{>lWr=c&6W z$9tajn*Egmku&LL@1Jq?YuH~Y$wQ9)71K{*`Y00+zL&um5PeK1Wdh{bU)dvaj8l*t z*B!9m!Rz7*fd4G?mxW#dWPfH65KG&_=L-%m9|^gs3s#vAZ-J zF`=y8t%3KgNsMU&|FR)WcSxKO{ff-N&m5hi_j*5aX-U~^OBp>*)A3jC57kH}n)b@j zr~`jif2bDjXsB-j(2{-(h;G^&lWUx&P6Q2>pg+U@%RHm+J&w~1iN1b=qEE=Y`$Jq0 z!||8x!1chO{t&}yenx-3X!DiNhAITem5hUq3K#I>-Xy{$nd>ZltbFe##(Nc$1uO& zkT>B75Rso`2?7+&1Yx@xp#==T$4OfxVE8^JZOqwtaFH3`lU$bQ=F2zQ(#k7ULzVR+ z_Qz84GNKcl(=*a)Or_El&YApRIW>h=T>bUsG4k7@SOWB?jR z_l?I*MtyT>B^L(Tlx`Twu}x%>imAzuP>rTnnu1nzwBp}j=sL~kx?yG7HQjCKq5>s< zhoLP^-)HD{O>=*MGTqw!&uv=se`n}^O&=xYBs8RH%h203y}-}|n!ei5Ax*a#x?lUp z{SV5N==j}X=poJjhN1UrdZ(d>H9c(Th}Qp(p$}^Qadvs0tkUCbLlX8@fi*-#2ufruDg5h+(^?_Zfb-ruQ26oGSYWg}uTUvjcp%3c#ea6tkn!el6b(;RRp@+4;y@syQ{NEUQuci+g z`k5xQCEMxj3?^d_M<2>mxgZxs5QLf;_tqe9;(^ix8k&!YV2I$j#gM=1Ij z^93TE4xb`6h;fWBAIN zADe2;j7>oVYd}}GYrZqh9}xZ^rX7Ax`e&{dRNl0-)iO14;!RrcX>7|5mbc~z*nvE2z#b1TMO5X8pj4wQ^G zlsRLwx;fs`XsI<-#!4?S)*~p63Ixz%T)Z}FIH%LGV+FtpT1!O*zJ-j1tO)K5VL@(F z8+>d_Se?oCc8p44ITErc-eECHv{zK9wM}b5f?Jpgvyz=wqD`W#n3UF2YpA7IA)Wt2x@k>lZATkYQZKGmNiR0a3+LUzC;8rz zPY#EdYaC!6F65>$-)r`Gw5TWnPQZ71F%ZgUoFTM~8*qEE`i_@w+>ApI#y7>J{et@h zW!`JjpwQa{w+e0%>=JAeTp<_}oF`Z;I9;$n@DMy#{tNCC+#@(BxJ_`Y;1^GjYUzdkT`vmt04hn7)+$y+5 zuuHH>aD`w@aGqeX;B>(PK>*9=B>Y0W)-*y37>+ZMEZ#B+M#)tYgPg%KFZ>R@iW@zIyS)7Hyx~M!i=&)>Na{?sG9b#Q&`EpbN{q z>jv3==Nb=EANrP#DaV7hcp|Fp&Hn;5s1OQSNIM!sv!3&Z>ZVM-<3a7x&!#@QEk?#% zM-3U{K@E~BN`(eiut#KE^&!au> z;#~d>dzEMFKZc{nhpN(-D2dW1%JyxX21*>4J`uwx)dXBfQ^2dJuG-W0vC*=6#{ugDXA#D zVm}hV75R$P2=C(<-HF(4I3+Nqi01IfM5Qg`5*7D)3$ExKW&9Qu1m0JI^$}65b1+Lk z&oFcUsU7M@v#z3wve!0Z_2v8uNn*W9!86~1o8~Tcra8Rp9^LVOt_pc(FE;oAGni{i zm#A1Uy(^Y-&#6POCH0i;JKU zC###=lX1(PIo};?e@DinEI9Wy;{110-&OsrsYq2KgK#=NuW7~_7iLXCRr)kUEqR>r zNG%X9+`I|VRvE^4M@*S9k&mU0Vx_9m=iB4jzVzbflmb}Jq1vOXdM?3Dx>c#uVyH?N z;ehwoFvO~FO~N2j=)rO(>tG#HSGl8`$)!V8^H0NCVmYziM8-)cwXWF7-)QRTXbLep zQaS|pg_}=-HrxQYcX9d>6VQq>-01vL;T8KTdtWY$?ThZdOlK&XkHqn~N3Yn)p$eSB zKT?X=mU(iyy$DD8kDRYcOyUDRR&?}nTnbpIu8!V6a&+`zmKHAVHaBbQi`WylRHhQM zn0M8w-=%(OQtIMCC5{Ud8%=o8F7}m=L#Q`YM@OIPcS1KBG37@&8kvnGy&JDoounAo zGZ#@!HA!l&q9`45ZYIRVQg&*Z`+M#5jP<-Sy)yNbE+x-I-EW7g)DL;DV4@ZN!-jTzpJ6wu+t zjZ!KxGjhkYm+tkDXR=|!&H%GqPQTl9^QZSisB&<;?SD|?W-pTTwZ~|`s#4EIT{}Vw zH~$^d6nUIHy0Z7x!rt3K;okC%7vhe-vpD0II1gdr-Bv0JNCwoLiqyYXqz*?@L)s2E zk*Le14vt(29qZn2DhCP^R}pFlN)*-ee7$ib+Jn1dX5#;mB;Hx5u=>uDSo-pURCK~f z0j_w$g*;so>S|4vNi3U>&qRv4lkhhU*7lGThe)e+!sF{tpZPds+Ac zXg6s19U2t>gTj9X{2={9@*!4@kOlFJWPXs@9K=^2bKqe+@x<}VJ@fBc1M2_W5 z86y{P{&NBXMKW&2a;J=u4>(Wx9thNlyp%( zaxBLlxqxsy2YKsFt(RfSB|iamEb^9?XF2!C2jt%z*2zO!p5SW>NVzf~!!-klvF-3nXg6v9 zJdpnV1W0$^2h!cWV*fQDoP_&1g-(j0LFwL7Mw2l>I5zSEg<#Y38dazfYiGZ2+?o_km0%*$Z(ws zWVn8g_YB=V1!R1_17v#K1e^u@gy14Uj(?vC`x(G9fD?osgl8C=4c`Z(yDtDKcRi5t zzC`FVgwOG7^0&b=y1NTVcb@{%-U3>{gDC8@9|qF?5g_HiBlf*we<2WUY#3!o`DZ~t zR7_$b5Qp)PI3zeA*ezHm7!kAtLxRK5i^oYrf&+rxf^~usK}!&z-2FSkp~jz)$TW3A zoA*4{MJRqZ$~Dce;Th#kKjzc^)Wf^B!gUO4_`4&llSC6L`TT`KDhmRcO-> zsS|ng-e)>eei(8z-@uQw=@;Qq(WW2uWzlE)Mduirf-v6~T2tuL8opTYTvHKMHn;fb zhhgjHKMVJ6`mj%)69R5Nudj5|=lbYteKfzZ-ST`NxoQ7;{(c|-a$k7MeRR7|o*#5> z{XBQkO|SOR7yD@U?nEwMz+qUJ;nW9)sCj=mV<^MkS&UG-CcdVj-Q!5FO5ilQOOx$_ z3qrUO!Nv10V^C}?{%>x@j!2KB3WzyK%Ds7!)9e`_!NWl^S^hlsx%BwxoSC7*?(s2zXM9vFU!gF|k1`U;ySfMU=+9bbec@csK9Aa) zE^tq)g?{|@t4Gjuk2^~0=>#C(Eg_2!>fJi#yxMg1vuG^3fiW~+2mC30zI6wf#5O zAuIon{Mr6v49w&I@=X6ZF|@#p<6=xKT6ia>YK;FqT?KN7ZM5)v&y?**6sjPu|Cx@{ z$Wg&5V)Uu}@z0aVAgphmEcNRw^JE$GZ12@Q=6&=$4Tj#UQh$^Qnj2(-=2(@udM2oF z^WP(*%^)Z;#~I_(1H@kiyRz)viqzZD!Yh8NQY-dTJz6Mvl$gsIn!?^Kki;y_fo>}7 zoBALshaO06f`!b|Y{jE;Hu7(zRybKH$Mcx; zoT|JoUsjdk)C5Y4cf{U;$7-nf?P{4t!0baZY|=;t=T~TzbmUqXxiu=}kC~8jl=iyl zC!)1xpSqnNW|Dwo)Eo~sb7oUjxMgxK&Iyu_a<;6}87`I?j?__@_8fQ8(9}_QmMX_^ z>MgkUd2K;7eWFr!ixcfwFai(i^ncEYg`NSlYdw{{ zBJ*%B`^r0J>+N~r8T4?v6Lfo|Tg^A=Ibl!xp~rbY&~wC&*rEa@i}cgH(^a#Wz7@OI zFDpo&fTaZzTRn1)*=l!q+~dY{sA$AG-GJ2a7>sq$AmzNq z5|ZDMLF1S#)-+fr9>^~dji1iK9}+&t^@7Gh&D$^=pYJM~>Ch7tzB+jswm~N7p4h#@ z-v@q>d!Cm?!|&&y@EsIB#tLXM($DPAIy(zLBK-jwhstno_5o!Zr*9Yc7}KE1aF4Mo zWwMO}H_7;&Z1Ia0>x3y2@@S?!ncLzXL#{Gy&o?)xRF ze>3Fwiag7iGFkL9e&2>@{jsB4%{ztQV#Jd%N%Ft zJ*!5al*d4Q%OPjNH`cg4?^*2|KS|I8~I0EE&Un!9CCju#d z43Pdz5_^s<)BYv=qudih-wWip-DWa@>wp|bjRQF@Tngkk9M_}L{xx{camsx_(i?=n zPG~N=;JD+v$S=yh0HoX&AniAZ{U^kp<%02GKb>-HNAWjlK(Je|PB0>935EoR;U15Z zh6D!$y9Mh6BZ8J7K)JIJKaP9VA-!lu@J!mYs~lG%ZQ7|H2yNQ6JK=_W(+-{>eABLe zP3R(N=WZ5x(=N|5?hy`}v+$!nW*QChM$tpGgE?BlYbgqCiRj-h^xHtXH}9=wLJK?O zA9rg8LsTmf>T%P|M>qX%KDq`>H~&!|zt6{~tXuwiAHTy#$9(dy`sm;K=#@VAG9Kb= z2eJpdupNrS6&M52GN8>En#)R!c98ZBayhQY9^-O6&KTlySPaKlBV3MTwgE2Z7!Jfw zov3U_N+QYOl?H4-XvRs)8HvKMWo1%BzT5*%LE}u@Ss^U^V9=(IdG2e!4CL&k8yG`R#xsA?jO9Jf z^rEyg)Q4A5sBVgC|AWSv+Sat!HzaD4t!pu;SX*1oy^Bor|I!2Ef)!?OTAwWUnLU`ZtofpE;(|b1h1Bge7$Z4Pf z>xcDGBmb58m*Vu-vBIzT>eCP3vCBUzda5or6D+gFlpmKP>!g@iYC{aKASPAKyS)@y$y^SE)#M?^Z?ae(a({wcBoDb+C`0q| zkgJAVNgi?u$Q6s+Sn2W=$XR*l<2twLdB|}rqDbVVz6a*V@#v==lJU2(9bA-6RTxfdYUEppO+1jcv51k{f_^qmJeGme=pU3kAB@-+M-Ajeg{ z1>|_l-vPM}>@z@&wS{j6&IH~7JOlVKpauLW@JwJBNIhIfL_M#dtWwX@K!~Y=?;hg5833f)PPWFeEq(N6Nk6fMB;^onS=J5)26rBYb$AG$c46*ezHm z7!kAt0m|J(goEQX!?b|;5`Jp@2X-`z@FP7y0*2P4yGg+CK2Xw@qHrg@&=H{*fJc6v z(7y(fHs(9R9}+mCO-kThEC*3XlpNab#q1o1uUnlg(@l3j1 z=(oguMCd1kKP2=;K+0P}?-2Q6*wJu&p8O%9xkiHYfY7gt`-sq=6S_`lj$=~3Tj=A2 zwuF93=#co&`XMZOA9@3XoBlEE-1Kce`XV3A^99`U-|*@GqEA1!=(y!&D93e`jo6q2 zRb}``Y(11S8sgI89|OaoDRSLg97mq;svWa@%P$Faek)uIStwIL8-D-S4Ju4zSOaY((H0!0_GWo3$pYkhoi{ngEJ}@kn|4I z<%4bM^+65bz1Q)(i!QpzyG{(pXXP5dQ*DEViVef@yDgpys;upQhooa`+A~9&@jJZY zmC1LV*atCQM?-ydI~^YsY!g9r6O74qex}i5`rVh=9Sp5Onm?m1=Q=U2SEH#Dhdd_~ zOZAj@XCbq5z!{_8)`B0~tR4>^__F zA-{hdPm!?{d;H704$Ij-|Nrf}u>S|vVVQfnxSZ#T>huLz8Iu)bzdL7cIVIhmGHsMh@ z8@Uc5hcVjh5{ZHt9sIlzF&?W`P0!>IeT)0ivC2ws83kbyknhj;90A+f-5W+FmvZQF)&9h;L!s2 zEigG36qk$`c$R1R_D8Gq#}NlVbB<||^8^s@m7eTy<%C|b$t}u^2XdRcgH2AX8Y3rG zASX8AO{2@*7Ul%MyP|_H+c|LoL_T4Q1Vs>gg=O8NSqYdCKHpd)cR9Le5$E*#LF_s!+zG5_9sX3P(5hq*FF7xkR!q3hFMV}Jg+cF?lK>3Anj zIrrz=>oQY|_olAG`5#!9`6sk%>SzRxj;2>WhqG1+V=tN_7)|Z2D0`={uMu{e%qsuLpY*N1QK-g;tH z-^!wB&xV2!ZZ+cTL|wx;GE2qy)xynpLs3;2qa#D4=vtVQv z%H3jglyrejv%qo=wH?>yYKGx_O z7EmnR-}EvUjwLR`=`1)2YeOi?gIwbJzzk$TDNha3r?>FMY#$b(&er5A4AY6KyaxB-XsBr8zpN0XP}{!`=*kL!YWN>wjT z8hJ5UhQRer{Uw~~3}M&mK@I~(2RZPsBu6UYI-T5wlSzzYI7O=H;(&GGEVf_p>WC^G z%Z(1CnchL+K1N2pFPM$yd<)56_xV~2a+k!{HcmGsvAk$xiY|$|vZ-~}T{ty^2QyAy_dJVE(nO^)4TIV~U*;&^yTcYtJkPBJ|T$h7CApF$<6}X5iyyBrzr`xJeRgfqzffUGBBxeek+(C4Aqlf}I`-~9|N zCaIwb{*N53pT7nON}q$m=eozB^e>T&|C=oS5Aj14M#@2k|9gdhHDrSH=bC4Xy{6ae zN-$8{yz6VvgWd}KN<@z3P#Gf^u+BIEfqs!!V-j?bMSd1o_uw}y@+_yy7~mS2xtK)k9U-z4XXusr9IUk~{LIe&xYJC{7? z8O?beEbqDGUx55{IfsMgKbQOz)YU^G&-#!{{$j{C$+;b@A7jZgA6p<_AoE#gh`62a zLQ{_CX%vav*Zgv>dxIZ>oSAQ9{ZYo`qw5@vmmz27?^usKa=!CC=s)Kfi*lT!K{<{S z9g=xV)-Ppz{`0`(b1_f#C)C4Y;5UGr=eiw;U`^WuJO^|V$aUMRgdY?BJmAT&KLLnw zr|_$&h-U*|0HW@OcK}ZS-VVf?;BW`f0!{;R9&IWRV^-mxpq-(=-v`p)uLCjU7XCc& zTp-W;VEDpwxsH7D)fD22!p{ z(_x<5!Ff!s`=kfDG5oK!#^Ekm30Rkov9w&H^p~ z(w}#a(t2M4QtvN;)bp=Ey1yGp_g?_g{dyqX&j+3fvY2FZd(@#qZ zJpiQP`6xZKD+5heDsHW^uPG%^N=5I_tSj(F9y@iZ}QQX`{>X6Xr7njc7L0X&(9V&|8*aY zHrvDhj*riMJ8t*ueDo)M^nj24mXFSMAE}x%bnb^yyDii~56iE`1vd8P3-{$ToOE@L z8FAb?>-TLgoN?ZdSK4@{a9xhtlC7Aa_MI&u7Ag$bU*IO8Pv%}7B@ijKH)Qx?1o;vV z&lM)E2o^FAuCCru=UKSptIw5hPh#&0kMz(dkT}=IJHfCwd+0+3FSC$ZazSy0V z9)?SmQ*_+UY!7T_zG6aqdotPQzuR6-k*h-Jb`a>la^_S3#(wPcOS0@MDJ}Kh3&70E zH7~s#bv9(-2a|JO31wmS3UZW{hRrp9X#SMRcV4>Kr4L;ewZBfi$};Dr$J|$9^jO;a z&>^&w49ga$J%){Aa?K;hBwR6ZG97wM+-QaFcax({^>y?&x9=WC?#E=G;vld^yURGo zpI-4NuW&r&Z@lwf`t**{=hXl>yFi$$Se(*Fx$dV@Gimt(o}=kW7;av`l|#3l*mG!7 zVouMYQxg~U97-hTMIXjy%+N?l-yv;TBmR-U>w2 z!t6gFpThvkP2zW|yT7tn+mo#f`nsxY2+2LN9{M^T4V@moytB}x$xUYZHNuOIYCD^+ zZ*Hu`bwj+cZPZ92K39DFWz%JG=d(KK}5X%5OV!P!!lM>+JXnc;s-3{Fzn*O= z->rhbyIdtub*i%50diUnrIA|;H)q@G(R zgc1`M=1p5MaX4T1&Hk~w}`^n5ldY@T_t|u=1-B0nWCP@x**j~ zDPWUeo!|<=8o`)gL~x#93Gq>uHnZLZDO0$+XA5jp4&ykU<1pi6AK7E7OyI`pCO$&-6V$0trK9qJh!mqamJhqrAdK**_^13F#a$2Dld_%bx0&av^u_|YMp{W#^kMlb7Ui==IK=ZOdr*AXndlGli-*XmsB6Ybv8~0xaz3qJR&vk z%Jfqwad}gtl&KMz9@S-a1%;cxf$|iq*|)Q zsp|`>b}v#b6|ji0vXk;?B-7|#r1SZUQ){OqDUeZS$ys&kQ1Xl_shUoMq+FQPb)9tO zDsRp_^QKpL-&`!!H~8-8C~k?0rrwC99v%V_ORE<{EDdfY?sPgk);H}51n$wJ5xz%Q zoF4cvO1a9E#p%Q>TpDm+Kl)I(32A(yM72hE9GAQ%*4H~7O;aq@%PtnEVnRw;R;M1W z0mYg3-T`ebLi-qml(K}-eo}q+Q@`l|mOjyQXf%OE6mQ8{Q?V4P`jZIdnG7XgyE>Gm zCX}f8DsacgdY?_8>BHzDqMknG!1su$JGZM?_cHRhAf{lXK&{)vy)RYi^|SPRa# zs!)Xu%cr6xIHnNwpJRU^_3uHxE2D#V!U8J`dv;HU$Ou-}x<&X^6CLEofXd|9{FQr? z=X0if(=HYo*ZndQz!Z|g4jgVB8+l4OWcA5dClTB93i~T~uU4n$G7%Q1FRV@__owdP zhD`1`GCuKPRfcfpm?}agx(ID&A?fRl=(3_M?`#64iqN387NLVo(^RjvyfdU+D(!e% ztAI%n0_hZ?>iNn2$--D_4`Rsxsvd!ocGaKsWTx`DOy7@U0ZW0T@jp(@OkL>_Xd$L@ zuPx-HuW8+V?K#$_p-HdAf{xzj3paBB98F6l+&{`j;z6zlQ6ZC+f-9oCC-4L)d;?yG zZ?wK?CsWj^uC+!!nw~I=5m?L!tYL9BG1xyPGX^7vCMS#W$(=a9=kU1XSy-)tV+Pmi zZo){Rhg{u{B`iy#=|WrlQV)M*s)t01p3aw%{zk@YcGJiQ+yU4%a@67!t|c2*Z$jsS zC|~{5<-3qsf>-IS())0p&}a4ZC*}PaSYGc$s_XLFWfI+8UQxyD@_GYBo$}gky{L1O7>Qz1b+tD6gFC(0cw4l-C}3<_eoGub(zy)8)06GKhn` z!)`a+;PSc*ttsaXoYps%T6r*aKN~`CQ@R|D=RDn%s&=ujH>TT6ZFy%qDAkk>X=@QW zq?=N0d1nE6eM-Bk8F(`s#8=d&T?_+yw#w4I?$54I2q(`G!@-_d$LR^}-jsT~GqiJ} zk0OK!__)H}r;!8*a@Gz6UfVS$$OAgaTUF?KT^$Gru>(=vr#dKTIm{|eEEeV3_8YN2 zt!s63H;RlbieUHTp-7@erE$3{mdxgD>6 z(iK&{MW-Pfkz7m)*IQI2n|GZu)&Uly3F6mhYUQ93K;=Pub}5E8TvdgKmFcWV<2I%) zH2#a9Q{@>Q5M_^pV|mL|ij5VVb0pVQyf}xXo%bysQtq&DdC<7!nm#VLOIHr@tzmlD z8}=wC>|x6z6n_)-#}%%_w&HZ)ZTOm|mI(ZH2^XTjCKcwPO;#M===i(BlqomKbru&A{!#@GZ{S23JYybh zMVRo(lWa`)QWRBDUm?d%Nbg;&*Xf7Z_9=%4ZdZlj{%$sgsk^oSs?+zAjqMfaRpFAx z=;&27NXrO1@06-emFUj@fe*tYeU`TEQ=&!r!ntmbFRXKp&-XN@B5)7hfPc}!HLz46);=EiS0tC)-GQ&d!l*<>T}CBNW#DZm%6V0~67ISRcJ~(G z-2peQ*G3U+@Dh>tgL;>wdzmEoI@m+#yPuA9Fj9|4dyZhaaxYXErJ93pzphyNE+&?% zzhq?02O+-mqdk|7OD?TK$4NOvbhKxWD-th=`Bmv_(6?nq=v+viuRb$%6pU}{?_ue@ zmH%$$za;;)^WTl?s~<;A>yFxNopDV4E9t9zj+}y2&>VL&sXqD8=Tu_st8;OrTg=x3 zLYhAd30LL#yh(FcX`a79z18?_$O7+b=u~W6>BaF}^dzV2Zyx)ctLaK^kQt{&L_Ph> zAbG!g51m?D3@vtjjHT8#d1!NCVJ#*j8sMeNbl^E?-E6nWaDB_T&^QLvV}^v9sWF3p zFbCff7az>xzDD?GX5q89Oru6Md{acUAIQNU%E2EN{$c0}ivKW51}*7|J(UB0+TI&2ZWzZzlD!^nyvT+rO%M?IVcz8|3TR|{rfEZVU8)l z{3r{5J0~V#rXe4L^zWUf`Qi<=eZKS2ncnOUwf|o0Wjm&f zkr)4|_dLjL5jnPJ${0DHUdmqw`PhD~m+hNJzNTmL?UVW@es;p&*yZDP$ZY+0EzkDO zBmdE!37>@|!~0#xm5gY)>qN|7j_5zv{x*pm+b3nl2=5f=AACjYWqat6_pPU3IJmBU z%d1*GTlr%+cz##E$mI$L_1*#b;s4Nj*={Oh!X4A~iFzM`+=@SFIkul3IbZrx{uRm} z)beakJ@UT&1(fFhM%|Oas1*H3h8pG#`{Rv_} z1<3et7LMg?50LrvFp%ZvUR|-nUjQ;Z-D1!4bXabFh5jGqzYC=MzX#I(!(#tFAj9$I z6djINfGkJP3jHMTOwc=ljK{ZuOox8}GCsEf5ybG#z?r}}knyPjQqP4#bN>_VN70|9 ze3$&nxeZADi+~G(7XcaHbATTLo(!A=eEWTRpU4OhD=@;311bM4 zAmw|3jPJ*Q^!G9#{ka&(@XZwZ6d>by9PnJ=I3VNsIvNOu<7Ys|^GCp$!25yJGXSKX z+k{>txCBW5cuz9rP6slc+`mEkcLiF{ULffmLjRM{y+Gzy6L2B$8X)8GGQL-spN{~^ z|F+P*z?qLl&%%RuVmekrC8M^mZqG9be{8%XzO0V#Jpkp2!#)co6l z{wZalt$>BW6a9|YbHq})FO>CYE{)VEIPWk9;C1Twup0%SU$BKGeGhVjRJ zOtXM|x3b>;9yku4vo8QyzxM*E|8d}%z}tZI=SHz#3Y-ag0dPFR!}Yx9fabY+EH6*N z@=V|^AoXnno(=p6@OqPX&^X>ZSPn zj)mx?kl--CsbB?wUNIF!o0sKY=SrY~vpz5gieNSp81pWwNWG=4Py zfFJ1rq2Gaf(%nK|0wit5N4_U~%kYs8N?vKxcP^105*pQ1@r4X+688tig6El1-h99R zPUOw^_zdBj@r6$0o03PnLX*Oev>9I*7QXqOd{f+;@9TufoAHJ{5*{-?aEj1%h!@Rf zi66@i&DEmMeD7}&+I-)S7ut-Ml)??eH;f<6-<$M9KZs_zgx7q(n|p7}_x^9ifAjsk zN94`-{3oD;`px(IlOk`v$4`R1c&+^7Jr8c0_n*7zbA9p;`Q#_~%WyXX0~ZaV36 z&#x#qzsV=hd)D3jlM!k+&HbNl`XZmcyTNqxzvbgcefrk={O3MVw|m|j<)+{9>EnJt zH~)Z-9`L#Uj*p(}qp8cSkKcxFns-LJ>0+Pz8+_sWdmpVYXSOe*u3oa_@~di`{bIFO zS1zr(?AqFz=+fw7m-VvcOP0E}m3hUm*`_wpk?b@ZytHtzEw=R3a$USEk;k?nUg4Z< zukDDh_G~qikYVEw*4kem?`ZF6=7uwMqKCf2r?$DVtG0obYL}HbXl`vbHlmzjP}7-Q zbwj+t@N^ittUrS#&N||Wj^_AH@k{|HXjycYswiStfC`xC^|Dw5=Chn$j=sMqpb6@B}+vgRS9j*z;n+991M32$dpGSS$! z)^%mLD-7JjRohv&kRZZnfudP|WM4gD+($;XJZJ`Mju8fRnjJGGS_0Jn<>`GL&2#wwusM!8e zwWdDNV4O11godM=>RXa#3rU8L?a7Yzwob!#3PX^+={cJsl)EF(2wqHyFOXpf!o~aJNDbyIkKj{ z1(}kO>^C7JSL5=nRT&&zl2sK`YzZ^VO1w+%x^l(CvCNDQ3ngEqIPbP}w&j>y_f?f% zSSknJVxJE747JEEoxk*+s>qoPjkBN7(D+>8Din5emC1L1&OP|Pq~ZQVyjns8Ew!JDOqHgO8LN>Qmi${lNb@_tQv!X{+e%n(oAn?(rGhL^Ng= z9x${J3i+)HEm*bNZqCc% zMZ{{&Yb=dZ)v$*qy$pBy;)4h)bW;b(IlyP{`o9>~LZq>xdM(7SG2&IJA(72k|NEZh zdtNE3O1)N{o*dmBsblY=3L#dzPSQ(?VyWY?2u1}lmU?VIgNMa7xJlSG|9ddQ?KKE1 z+-i4KsU4pApMBQe>g z!sV~nIETzt?LGE=n&q!itbdke*A=OQBjcrO8rYxwuTy{i^87{Z_-~zl?0g$@86JYx z>&Z77=X_|~LypR#Tm4saLVU{LZx=r1yl67`2em!thG;VQme^oAI*=a`zWNvsaNjL_ zeh0#2=-)0jS;Hs%tl`5rEKSz%2|sK2gg-;8$q3&-4*pOMzL^iorr!(k!40H+w(wgV{1}5D$-%G7!SBw&AIQNU%E2EN{wy7h zjPg~4c@&y#@h{22H}hNB+_&d&-=BlOUHI9;Kb*roW{Ag(pC$Zk`fGByZ_nX=Acy;* z9PSV1a9_m1J(z6aj|e|o{?z4g-=D+%_8jhqbGQ!`j2-?G;b#kfO%C_nIouBjzZ$^^ zJV!i-dvkthw(yl;Y>_4#za|I2JqN#E_}TJ*D2Myu9PW!`+%{YI&3UHT{IAR5zFYX^ zNTZN+=o5yfL?!lnaJ7eSY7ACSAbV1ax?vMLNoj=_%-DrcL(I!MNax2@+&;Tc^hx;(jK?hWG56*nR}DE6zOnQrAZNlimfTk$H<*XNTx+&H z54l$$XYyk#e~(9>(d6$~a$HZpH4lH)dip%%Zil`tdB}Yia@~2zaZO)W9&!^VIQ4C; z`0_sNrabg5hg@AAa$HZpA`iKHAXk%z9M{vw@{r?t`iRKQLffEBK>Nb=^!eyh>*@3G zm+R^0C@%UHZoI z_g={5^FDgcrEjcs;oUh+d6fHE_=c#)2DlEm z6!vR?p90N&F_fzSVompg1whK31Ed`H$@GAJ9dV6=-VdbxuYj9i{|vAe^aEmlpV)KX z4D~W^)Ak(Tn76vkl`ul};d&Qkka7orl=~Hs;rb4c z;o2tlcL5o$&jJ~)bz;9p>}!D3%R0w!EdVlH=KxiFfxV!)-iqO8U0)CSRp2LqzW~zz zr-78)4x~P|F_gOtNVyd7YS?!J8$dS;T?cFhT_tn`*be#}p)KGV&_@d$0(OFa9&It! zsE65hcL2WxWO)04w}RgeWO(_mSPOb3a3!z`NVx^TZqOExa(qX1fu0Ja++n=i7_V1> z)W>}Sj2GXH)b}uua^C_{?k*tpbpt8KcQW;@0aET-ApKno+z7e^NPpQExC!(O;B~;G zfs}g}eTfaAhk=x1A0!F-X&~hu0Mg(4fYjFyq`&O@P~Qe1<(h$%<2_5%7Xea^eJ<(? z11WbBkp4~uZU%jLVkmSC=vRSFp!Wh9j$Oc8KtBv@27U{;9QJnsDVGA$-3H+Gpqqui zQs^om!?OTLf6f7}06hap_aPv|$38Xvc@;>1egV7+_D=&T_W+RY?gP@FFA2X-XzpWT zIMx8$!M_&Ba4r_Q3`qB3p-%!*|5Tw5A0_bzHqw6}-9Ih#13=}!&|d=5eV@?lfXaU$ z%kQ;7<-gEnK;^&CCjpiJLLbJrrAmKbC;bO1|Al@4sQefDOF-qn(ANX6MR<4*Pd(g+ zfvZ5D4PooY;DBJaV4Yw@&=L#@4i|`f zL5|N-U$=vvOj0jqSAwka9DEEQ`g5833f)PPWFeEsP@~GSk4hVJ&)(J)gEy0lBFv^#5 zFE}9BEm$WQ5wrwDg2QmE+zSo}b_>=CMg%Rvkl--N5gsQE2@VK$3)Trn1T8^;a(5-l z0rx>Md^EH0Bi&5`=1X`cZN}BjzO5pZKbqyp2l5#&nuVgz%oD!=JMs_WNAm!Xbd9)Q zD|Cs_7ntyf{1b3P`EH?)6B=!`GEa(ovoEd5gh%9gJT2W1Krc<)gin*9KLAzug#L)o zLWbTJeM2a(G%@5mxHt0*zZd?nq%X&4DBmyicf@})?tMt&XU6%v zMBa?6bH6Ixn|Xw%O#FZ}r;7V-goCD7^qYChgz$%ie^~ft-je%psef4b-<0r2B)+sK zKO}UO;fwrjhA;G!!XJ|IIbOosE%dSCznM4ugoLjK_B3;iejrV!=pPXN_l!Qtzscf$ zSmb{v`b&h*eP=5Dh0lJOim$}yGSN36^m1`;=0$jKBIV6I&}Srk1Csx{M8BCwdQpApnRofMkJn82g#NhUi+^7FX+FDYE}eJNM|}K!K7Jhe z?v{U_kG}!w;^y-^!%bKE`0SUt`JeX5PxtA6*++AqvD^KnKKdb_{(2w%K_AU?Hr@K# zeDv`?da{q^vHWiL|KQ{I`{+f!^!^(k{gy91(D(D`f568-(U(78_3?l1qxoIw4)51| z`X~GN_(t-`@A2v5d)Te-J|7=_To3>EKK?a6_i~kCb0WT`R&O+uU1m!wue2?$s9e6R zJc|1lm(^TeW!tJvWX4V7?B?2NGSODk(R>r`g}OYxE>zn*yRp_yQ>L=qZ9@sK4P`2p zMg2lPD|I2B3N!AiYOQTZbh$$9v*PwVpOr&ame=xfD|N4=eTkK#YA!EdHm|m3Y1P$A zqUwsvmbmu~S1r=i(q&QofDpR)?a5U)#@E$0HeVm-_F*Ty#zrL`)7WFduo?>n;G){9 zWy`LrTv{8wqM~*gwlGH>zS5vJq8b;<#t@86g?NuZItg0KeZ;g$u4-v+Kt?GGJ3RI- zV+Kye+O}cnGHuAt7FNe8+&TWJP?P5_SkZDvz|m=Iz(&pzxvH#oRdWKDXi1hws~0U< zs`uuy@VFwn8k>B*Ww4f3{$i*s{Uyvo))2x>6#PW@BMX7*&c(!tv9vv@dSnMNaam3QL}? zzA2GtuWen`+$MG|TIseMOB89yF!`K})^?P0H<6BHrY&W?CDT?LU`=Un*|enttc`BF zc-q2LooO3XYLydjv30EIfkW8^*JXv&Q4}SmI4N2sn=ZRH9}T--#AhWD$`EsvUt622 zwAw!U?WoT#v9^@gMuj}!#bS#Gm0~*-cCoU>y*73TynNfeR&Fz0qzTtWPU#|7NGHem z;`F^~U8P-f-EDf6dh?2iW-lpUR#VG&3wQCeYOt2+H;Dgrt2fT8u&LaY3L?+6x3g5U zTqLpXyV z(H9YY!=g{f5I*~x%rkKoenounod+-v{^Qd%)C9!1J>7BsL>Z=;`7v<*G}KaK|L1uC zyg%=7YERGM$XeXQHsdh-!?ExG0hO_a37?9M+dDc8>)*oqz>jI!H-kDMas;7yggJ_B zcd}9IzgTn5 zUaX(5=5y3#KUY8BLi=;{^Id$Np`Rb&GbbtF*Dv@yQ9pBj=m762f&H6&epNqn{OSNF zGhlxvpMR>KFX8hO`uSQuKdhfQ9(v&0`k7-i2fnVKxAB>SyU;TeW%NLwe!h^;oAmQS zJ}32a3!j_ya~GdEQ3AJr$7c?*;`u>7SL)|q@wrStzsYA#s6b{iD*S;n^z#xvPt(sM zjN{Sz`8-3hYCKdz{4l_umlfn ze85FdGtzumfQM~-n1hE0`S2k;{EQDX@o)-0l}Ap(!z?}&;bAr(Cgb6kkii|W`eMkP zJSz5V+~so$epUEggYw%l#UoU>2!|yKqzJ=fY`0c>&Y5abH-*54I4ZnBsI~vzS zOvCRC{KEK^;a7>@mH4g1uNl82ew*;?!|zM@eI37V z{R%%Gb=`JjDA`)SswHkE+AMslS^Cf&%XL?@Pr${o&=q%a8{-Wf>)I1;w`X@+>^{^d zk~r|k@yJNReRheq#<&R$KFjgVYvI#8?K!+Lo}^A*wjo zsJT%&$*^?0XsYkD;$7{{9dRw}rdPLh;GiTc-qF$4VKukj5^LC$9H zi<#BXRNvg{%1)LWoPbo{V)DzCd@eCP=42(B81{}%PeJkItJ04G*#@nx*LzqU@tfLi zL`F2Xs@${6qn-#D>(;i`u$N^OGv8phroQ7woZ!}ZPN=;;(PXv6TdxP;AT;zp5G`b8 zS3^AB2tV38+Pc=gjySKJkM&!ab}%y3kNl+nAf*MZ99(mVh-XQHKb2x zvc0{nBjL>p%bcL)(yU6ZI@u1PbK7^sd6XP1p&b>aKGEFPYN_NlgsC8M)RxJpHO-y+ zps)I5qN%N;IkC>FZ*8=U6e^t6+=v6>aBVyaW)^8_GW5Y^R%>$2Dz_|kBs=S`k6Vpx zah*2Jtqm336NL`Mnrr@b&fQ6~KlLza0qWIpV+uM+n>s(&6wt-;wHYY623{^C* zULEhCKPqMoZSC>URj%@6`)I9>>o$1lW#!fd7hP0lb;LW{k{u0kRi=>NET3o~aK0VX zp;0#c&QN>2V@-2{#S>x)oEm7|)ZEsh%2)_>g*h3-;<0V6YSoF-)7rcyxkeSRHT7NU znN6`>{5@5{=iExHL)_eTMWwWE1pKm{>sk}_U1Lg%2$M}!aHUAs8`YSHmL)NiVJ-ZK zCkIibSj5mC>UW1NWU}9RQCamZ*Rw)3t#MQtsmk(lt0CEOQ#_Mp7r7w!%8kk}X6Zk5DfkmXo}Wwpqk=pim^43Ai1!G7S@3TK`H4b4=dX#}8${%Ju*B;G`E5?RLXh)f zq|Xzy1UVl@`vO7kaU#w28br?55&3OTd`fUg@VkQB1ivEKFSuE-ORz<-PH?#(=P{}O zV!;x@S%RELB%gcEi2SG|{t=l$+%L%WCZzWY?h+gnyjO5Q@D9N(g6jp_1zB>a4{OmB zRs)e#;RQl-Jr~T3bMcRIT%SUuC4xA~0v-bgX1oJ-YW^9ZOgaA3&Nh0CM|VNgaj3Pb zEaNOn9OQbv40UB=pT8=(I#j!`YDsNpE8g9$iPhBmKA8799yGVCWS$;AGUGuVow>$? z)SSAdW5V@q#fWz{(=OvdLn6~8G(Nl3co07Ol*#w}#Ye;e_2E-8RE$9j<`IZ)f-$xF z*h)iUyvaKrG$eXzBvZQaNk)A|AF$7?u-)>Zws!3CB@-`v(Afs%!#1A0hi%UBB~irn zg*0XzhNgUnL&7rG_)@p%vm_rP7&>A2wmR|kFcQfVF_%xQYPqlrsmeaRtFGny#rixu=79!(UNj`lv$bt2?%y)f3WBi1*e z8@D6UvsmB7JK%9e>OV)XDHu5>^=lzi+oSJwRmV+<7xrcHyGNeT_Z#Z-tfDF0|M|#v zC|ul&3nssS2Xzf2LUfr5P4Cdg1*OmX&Wogoec|wKC09{)aFDs4Xdc~3wz9-!-_KR0 zFO9jiRg^xD`&KXYIZy3S$y-tOTB4W=F16hcvH*=7r(ueQi3-#Ji9S@z7d|t7_`2kT z83#<4I~gIvE6#bGJ+GAXEy5M11s%ny4f`bB2AP!%|MAG5eJW6?9eq(|PGQ9k=qN$S z=}#Rl9YQ{x&wM)0pHCBZ?9}B=6||lmhf>cdJ?iqu&4?T_Q=c+5Siom^HkA&PP|r}o z%ANZD<*RuUZwZUyk-l<-bMj4#QY-g}Q@T11LDcsj<4V@V#GXTMC2y<95@L&r?OL zZ|-a~*N+y%&4WAePf38S%JwU;Fv_F57foPwj^00x%A;>CnlL_rTkdbgk*-gP-rvN; zi>lP3q8M+xy&W!kUiwosy=X$u@VKM*_3RlRO)Z*GnYsuULT`guLAvrQu$c~W0Hnox z2||^dUoG6s8s@}5c}lELl?LTiEVWx&A?D(0)12T=)(yzMI+TB%eH@&8Fp7WC!T*K- z9DJO*Fo^pMxgP;{RuK0wa!&B+o1`|$0gZN5%Qdewm5a9YTS#7(-)>I=1mnT2>)hAM>sj6R$J4*pW9c51vp5Ivv{=u)5Pj_`2qliiWwN*% z+T~a7mdJk}ZI5b}Ly4p9i)mG>w{j;#=rt^6ZgWb3n{uAnK)cNcMeb8>OFW}scuc9t zZSvUazLDFCdt7OBtEQj%U%hD^GQ@pKG(8&Z|EAw(EUpo`?-~n1_7mM^waERe+Y--W zZQFK=1#6Pqbn&qM1p2rQAvGbFXvSD`XxXxAtGuNdBMs_tSsdTO9ie3(UR<@f(u(tQ zG_*wBj$kdrH!N73eddrvds}OxLw+*JRa(oJMKQXjG&nx9{{rLBzL2G?Lm^hipmTPN zi=SlSv(H5HA^d{AcZ;MTT%x3mHcjw9zaMEX(vT6pe&L^f@=_iH?M(Qa8(jC{i)BcZ0Os3;KK)U}da60fdAl-Ai zp7xD`ON75j_-Bj#8^~13{|AtIU(mTc<53{}{SuJ=riFh4kp5y1t;$a<8=>L0UWN0Z z7xA3LaXZ)@QzUc&5M}L{{g5Jm7)W|ZXpYNKeyh;^LbLu-zDekq&=H|6p%Hh=so=n? zV;C9Wq+$Fc4haqjb_>=CMg%Rvkl--%;&IZD;DBJaV4Yw@&=LeFcMKQD{f1D8X_nx} z`{c-^VR{{dgf`XL zq`af2NTa_g@sc2w|l87=Cnb`T^e%x=7^D7TUZgw+QX-7tp;i{9;hy z6N_I1U2N56yJ;?Oanld^vsCEC1@zwRo7VpJh%a>lYY&kEN@>~bj&=kitOmaaO?vXN&YT2LTq@gWo z-{qxkF-3;El$19zUToW&VCg=thfD9}YOJ73u(S&M&Z~u2UB)5lMqYH4=+MjK8O0`= zmH44r+#tnkxMsIv5rxlF-cjbW#q?6}g-K3Gk@fF=eP!v~3oT{p-ly(nYl*vu(?fsh z`pN-mh})%p8k*Mp;T@+;zT@fr;(+?lzJ|DeFhUI(7?bU$DkV(&xami1_ zdJd0ET!;ThC7bqB8^)wGViankdU}uz9LG;&DEZstz*>x9ByIxN15|NHJlKSP(ZM$S zSI$bG7%9eYmf!ivRIMxZBPE96wL5ndevc!n1s_*~@fbkz-Z#{za)g60YJA2XpR9?d zeu|+OjL=6PQeo_U9s}8UQi@GPs#1?H?tQax^FJbBkF+qL%ovP3#Zte}f(XKAZ--s9 z=iTvzo4>1{#ufHHkEhDgmrLI)eU?`|yd`SY{Q&bZN(mkY4msRoVzT+mbUeDt3_Axo zO+Kll&l<(j<;vcd3qSjJa1-k})Kb{XUXWsr%tG?MfpF^NWtu+7@)#XV84-BSX!YI= zivwT9KNV76C>z}2i>7{P!d01iWdw5yQ~%cMMWgcKK9?6G3nA6wmEt!^bdVDU2RiW8 z1A)uE0-UCZ4u0LJF=47m4XaF!UKd>{gZFxT+l)8=H_y+rkb^ou*~^vu++|YfuacjS zq42xB(D}&{rAigNQ2F^4uawSDjsTeayu~Y^^K;m!$v;0aVbSw8D$>1h8ta>QKGfox z4bzV3n>GqJ-vh2HysT!XgktR8JgPDLyC7ty)i5(vO$X1f?uV7szADU8q?4FLc{4Gk zD!p;KiZQApEDJI$M|T=sn5gY~#_`PeK{kHf1g(JIjY00s_*S-YFf*RP@GBEAPQmOLl5q-&2ihg? z_|bWg;X7fQ$T7Ui7`c!3Oul_mpBgixJ>|cGU+f({-jk2~Q;^@!=?fUfSD7sO*Wy)& zu!ecA6q<`^mkRRy4>Yo23&`*M=|D`?FPIACcm_Ky9KYatdQ72*e+J}u$_^m;+kxm0 zhQAI(*CMFT#Hf&s3W_h(RfB?M zH9^n>)MjN@cXby~z?Zg~U8i( z;=cfREbM$=oAFZDF6JZtuK*J7c0l6s{c+4;{MP`E0gM2a1I_|u_{o3_&owdK2M`Ez z8$ZuSl>+`85K~Zp8zA}Typ;5>0mR>UUb7(N6$`q1#eM`GVLyQUW`4X5NIAw1K;r!X zkSN~)B!85nkiT02F)sUW0c7~=02yAr>kdfy2Kjp%g-HJ11SEey2SgD}ycZBj@!tsu z`u>{%8DC7>$JdH`B_QQXX8}^)!Z{!1Mw0m~Le4I}@p>pIS>FowR&J$sBSR6^-kfvY&W}VQh#E3z9#=yJD zd=pmSALDD@eNLXYn*`@(40fl21Cljq#`vbhHe`(1fqBHoHs(AL-%mV8tqJOL|xagsO1TYEOKM*pI-O8yvgZIh!1KBG!%Nfh|mDrqnD6g4O{&L02c;T=D|Q zH&S(YOBpXocMiqJAXbvmv{SR_rsWzSriBh_cAq`(F@IiFI(cwZ;yOi!l97eN*hrEQ z$VG5tb?gNwQN2o7f`~V94iM;FYj}`1A#d2m_;JGUNe2_T>*4TSe+VP-2F`t;>aAi4hz^A&bg(^qNyJ;VUg6DQmkmpgVy2- zJh!c~JZu$L1bWXya8#}C@!Jt?%p70?x)D!pJ#gCk5^v`@WF@7`C)HdUNL>Rus^Und zB~pVWz|rl287E9dyZzL<8^6^lp95#%)HhXOtC!nbhvh74{g2^FHO=myF^MWpq!7%7 ztTzMQ(Tbw=B?0T{_`^!3CFw`he?+OMY*6J3u@a=v3!Jv0?{z0h}`&5B?(7%dYdLs57ijTiA!|I>VVa_?-rRqgKYe9U4tN#1;@q z1uJkyu#FtC-Kyl{%x2&*g!jackEEjXzqM3q5`-FC*!61CpJ&louc$z&PF9rUfl;8$ z1_k%1^{%&b8?fqD@nt#nN=XtkAQF46t?m&sK3j7!nbbS&0Zn|M*sx)rqx#I2`HHDs&g?yw_W-%=#T z4`BdPB=EXwtn)2z=lv=zJ5%3eA275nX1(F;Cu+7?uX^vd_5PXS)p*#Q=?o9l(t-yfI^vJP|)Nvrvy?Vv?0~UT1Amm2yHA- zDl%wC2ju9rXWh`BxR~OfySB4ScO0!mi&e)lv&GCkSINrXD9AX!tG?9ufNmQ+dGh7q zJhN^se3TSdoPWvSuZ$}$GO^%YubWKsLw8gsy!6M(IeV0P_;+37kY|7E}E(~618Z}Kw=y$ z;Z&kOoLZ=lDx*?)dEi@mehA_ocUYp`linuV_dJNCqL(i9B#u*A5V0=9xDKwUHDC+( zKsIswj#_U>p2=*&+wl^dQ=vz#*=TJSF&0oO@GV@$Z3bSBMG-~^0snM z{GWI{*U2%1g&zo~j@g0bEqTq>>G-93iV|pF19rO;?9bVQFGPi64b;_gF=%i49DV}5 zPvch#cPMinV#4GmXL7<;lQ(^_pC9J*XL3$08k+`1M>GKy&F}G>`KoI_C3R$29pDY8 zjtbZGo%B3@dcmW|d)ec%0h6=;qR-bJ4s(u~jN?45ehOPjI=Mt`^(|>xxm*c7TX}PP zkq@gATo2~OZ>$TsRB52{`$?^n8YWd%FKas&U(7igGtbwy|GVEtkScVZkR1fgO#B~8 zPD*)CA%7$9I}IaeAvxzfc2Y31tYRtTn0oQ&IiNz}jXvKqbf~=WX%0*Zag4>g~X&uD@9a^ODzZ-d}5zm+j~1u{e=sMF6ynexx^2noC0uLS?9l&PKvb29&x`vlfJnmltHpi= zAn`(g#G4`Rp8%vBmT&tI|F@<3eAq5P@a}&Y5X&|Hy?|K%`7J!T{VD|!%hMuT{4Zn z{$lEl#?;);_aewQ&l%GH`(j@w_PfQtTaIaXO7U}eh5gp zGtU#tAIv$XGP+m^^pYTIIdC!=9J_$(wCjjv`o^tasuv1=s2H=%|#OK*j z<_FjO5JC9gDbjLk%2DAozDM8{fXw$#0)kaPWy;L=_dFW!e*o$J3Lxd={eYCS_W@F_ z|1coS^8rAXTMCf%@C$%sVZQjE2Z*-mM_H(HKv^h0DglwTWs?DsxRFQk-ZcJf^Pcs!8%kFp4d(Y*Mx|tK6dFQ0}SC{{Km;Wr6 z{U(=vEGns!9_zi+zQ<*!pVJ@b+2SoL8k%tukVofYkni5yvT}9yT%d714ADMjMq08@ zp}!LLW4a`&P_)#(IbjR&DJMsO;l$+13uoRmoh+hAxuJ`uNe8F6T7Ris0PwvfjXB``wZmFXJ82bPol=a-A zLhJK{YX3kf_hl3!$Tt_=dF;@6+Au5B*HV8KSUcJRePI~)ds=Q4*?f*f-)4=R(hLJLLF^cQIRta;SLSff6H;zYLwXn|Ji9SS-9m?t zDc?7AW-=^HI|ezY5q52-k?!Z4bk*7+a^>eaZ5TL|??VHVjqN_4XeRKr5-<(^nBGbZ zcG9)mVfiuAenG7o**u0)jl(7U-Spl$yBdJ7QXuCLwEG0AstvnJC!m^B zgn840XtffoR)W<^uv!ULE5T|d7(;=@+0|x`0*d@HM;nVR^moY*)&2IqZPofCcdI2=9$}y7r2Hyk z{TcGB7|um@oB-k!n3l)zQyn?xvhwxi@lr6Sa(;cOxAV_v1J;h@8$~=ymi*nQNNPca zFKj&*F9~lQ^kv5JxAXbbMT@OF$svY7-Qa|hw7J>HIcS#uPHqhqN%sw2ryc@nMaOKV}kzLcs5c|;Ws z)nPKTt69z$2`VI$%GJ$A*xITBSzb0r@Y8}$FOaH*Hi63_n%k2&OZaM=0LHjILUhgC zF_Gk*aP90-u1yoFc0tm+2^LTM`ber7C9^+15t~EE({#l8@0|2QnErUC0-jMT)GO60 z)MxJ`L9Q50g?cHtBwx?tdO!LC3IWw2SS0LpY@Ve-GGhHQY>5<-;>f5qhzt&=pq7Ir zbM1tPHP@Fo!=z#|Qn40fObSw$Au(-}J&CqR>bgp{?2pPhIl31#K zaxAr?I#jhE6T6zun?wx^qF z%vv)!W+f_>w9X{~%(g$fJz>ukmFOVE$Lav|I+Yc7sBUA7v)f=yO~S)v@J`2@jN}#) z-pln#XH6gOLF9aZJLAhh+mGp(wY8W;e2>Bbu)_MEif6_j3A!) z3?>+R64aa`$=;DU!9jCY7QvTcky(n(QtZ&^!{y+LRYmU@!D2qupa>SxSTu_{)g@km z`m(ITt}wYQ2DQF}fEs_IsaC|dFP!W{Z#vtkXJ{=qoqGqfPM^QOW`4xl&mqex6E>%U z!1hfTfk6lhby6$HDy5n<;>WLoC9sy#%vD+Ovop#ApKhCGQQ!b4AmI^Rm5 z_qc@2=F9?5MV>n$p?D-XAm z%(ujpJ+*;^<%d4$sXvdNJASi##c511!LzkbqPk{LZx^f&l zm;^Eygeow2H1>zP*Q8a^p?gL@6%IG-Rz3KqdZh>7-8wy%T3JmzlT@uqCVpyucO0>9 zs0=7Rqq7?O6USli5*_mdM^~WYa`p$Q%U$(PD;Q}fley<*v~nO8Va(JwY(-;Fekgvu zXh{i57sf)9vcP=Jo^|P(tLYfj%*5RNu&rTBiN#s7cg0T>!X`pf!PVZ5(YfSmf7nk# z36z9WmG1snh^b?wOovmy(P-#5vJNB<6yJGVxS=n+^|cb&*$fx;YwNPQ2CZF$pEtfdrOa#i zEwtaYPy8uYEu^0$O$K4uV-yT8{#SsBLi=&GtXD8k8}<42SB_~`~%`YT>k7E!Cwh{K>H#57uql1K!FgR5;#;|J{Peen%OD=h~Mh{&xHy_>+$R zX^oxTM|Rz3A|HRo{{!!6d@24czJw&?B)pwZuK0-`2mWrs zXTPP4NuLX!d^`yJu;^uGKcdkZ$r> zT#WM?g2#ST8N;Wmy)pjjz@IGVQ4W>wp9Nm|Vc>ND?|{V5epVS1zvEmDbsU-VGQ+jU z3Iu);cx~pqjF2m&N9!-ZYZg4|f1&Ut_nZvrRbY-|=t)0ZFu$X~+aUDpb`{H~7YAOi z;7PxnNAJ-wcvBkZ19||#X7>Ytvta)+Aj*7VQoB!V1)K`^dO%E7CSDJSDbd7vfLIgw zBY+4$@nXOWU_VdnCyPJzNzlItkm26Ic!WJC{|kV0e;kl}+zWUS;1|TbP2dW^YPc^2 zM6xE<148cVzfSzG0z_W;BLZsyVf-@y$)6vP@k|6Hf8}C-5giH2#Q!}&hW|3)S%6J| z(*UmptO5z%uRt~Tzl@4VygtAS0UrfqI({nd>jBCC{eU==)z3bZ!GA ze?J2B);Irfa+-Xm1 z|B_y@w~M_^?6qRA7CV3n??XO-R0%6F;ebwWNm^i!z;=Q40&4~O1bPGxfGN^R3+xft zF0fu;tw5hZkH7&0R^bKq2y7QvFR)giPoPKO0MdoelC;1cf$ak81=b4m2?S8#ZUG-W z-?NVnFb9w>+RZu;pUUn-{iWf_c>0@l#4m}Df3sg55_)Ey%_Hw+$ZNCz{20C&-pq4v zp&dBB35vYh|K}N*b`&xV_1n>I=Jj8~r?R6Tp;-ez+ReJ|LeQf<%`h-;i`~rI|6S;r zbwq>M&AR135QgFV(XY`^Paf@NT~d#4+RZxgDd5n)5C1egpGLb`2h_ric4K}e{Frra zkI=7`{EZ8KTGBsH{LQ-gE(veeQ60j6&yhNYZ%F)Ro!>9v>xCXK`jDRi!ROTi#joTi z@4M4pEBKd--KJz+Yd}9y*FI;%`W`8E_$n6cDH^vRud=viO4Uf{U%p8AK;EyR%V6t#2(lVfz&<$IFjVMFSB?ZbMj zd{RZQv=OY~Il6`>bA~P_`>qEp}0 zT&F$|N}Z?Ed8R(|V^TaX1ru$|UU?!$hxq5l7Cis$K8=@i25%U8TFG^R6M6;lQLmfh zIGC63sr3^mPoA(#v;qqsa$rxjh-J`cP$(#CL9WukoD!gS95VGnK@lrjQe$HaACfAB zpz>@uPZe5w8r2G-n^5PfSn?CA8n97g2k5EHyQ;^pQP82;3&bVoh+#hQ zkq;ZzH7;+CYsH3(@M!eXW~I|GpORFVx<#!xlIS|2$f}38))uuiG}U?Pq?RvluDf)8 zC~)=caNX?Kyt>Qg440*a+?kt)(3^On&o`s8%IEXxXRE6!D=(ntg7c@zF-M$pTy=ik zO+0-!(m6+t# z#+HRuLWlG)gm`*E+}4Bb`gEX5wJVrL3q&QKC@p82_8p zhx}9!m*4JpsS!V?xV@NXr9q4HhIzz;AwB++Kjxw9=qOx9Hs+jO@((yS@-9vf?M7Ha_Y6KCrx?RV_f+jfP1E9(Xi$f#^ck4U z1m`&o9>K!ZM?v&jO?y+h;I8JqgDIxBd+apO+j0iJH!s1@rT~5%N+2^g0fm!N z2g*Mwl-uyDh(%Hhu{R&WeeMwQwiucZXAB~d2$x}6HBfiytI{ff?B<4%3(AgtYYVxR z!hi10yW^g#-pf_eLD`}%aPB~#cRPeXBnbAAqe9`;2|FF0m=1%KD5L7G!yP%3V~oFP zw_FeWBaGqC9T#7jaT+&Xsd$E5c$Ws|M`qW}o;zp$f~y0OISb}{8WyPsZFw(XcEDrz z=?!?)w}J1$&h$*>mEZ+K)4Byb+8Q+V5gtK!fAcG;a27J=??ib3H^e zoWE}b|8Y9_u)JpE5?y>v*>y2#)y23do~5T$S_2JdE(2Cr@QR`VIV- z9tPfaMtB%_e*oG6xxYAEynf^tM63R@0gEBO;{6)zY50#6JD0&=w>_-FQl&k*$ct0NSRX~)P z|5-rZM|={HbRQM_&&B>QAY|_Ty8sz}86eZaahQBUcB}5yK^CgQp9zRO@q?zav*W^0 zRW_jQC22s6O=Z1eZwCZxWo>{kWwrPL-LgtR@KeHmf?3xC2)vSZf%O7w1^NU6D7-}^ zihpC;#BSQr+3=t~`T_jYoCSX+zYzO!xUoC06+8K$zensW7uwTwgLzo&1I7+FhUdLR zn)~oCUdo<;d%$Ji>9UV;#ka-f z@2OK0f4tqhTnMkFZf*QrU0jyh*PO4k#;cB!D{DRPhAVG$Ib8FJbFr>CK%X4C zJal!P?Qq$pbLU1wfjP>>bkBL$%FK!s>lmf;ovVu+Zf;t+a#;a(v~xD?i>EDhE(Eh4 zdYO~YxMS6%GH>ZL=xe9?Iwn~^m8vv|*Dam4sxB|Mr*0KiL=7(1Q$&p9v6;jUv!g%0VV zzwzuwr=-TPymic>^|hA^oqlON{UAnqZRqsQAVV%Q(*3Fdbb2)X8hCn;FgkT%a4>Ta z@ls%#qLTrt7XaD8GLcOtNk>+{~zh-q3hl}Hb^llAVg*CS1OwbTd) zSx|9Kr_!1EG*B+cMOg{YK=0iKC7e1wnu5}s)NHe!Iu`f{rk14|B`@r8y{&CH>yiS+|VlqJ}x zdDLEu#iqRM+HpO;3Y|Nx7YyomC?p3^a~R+ZcdpaulP7&;%sO1oTTO*y5dY1hC!X;r zWAI$-@FDnP$o2mo5N&$=EjcD<%U=!1b@f?*X!8CInqCRhfp|-}t|nysgzW;k zKBT=#V7c8U1y&0537jCXRG>%TKJY=h0fG}lY{LsG^kp2u$e;**i ztKO9GJFs&dZRWw08_>QF|1?EFQtM`I^>AHFd%f6y2}r#!)XPspxdH71_@}{{AI4{! z1upv;F8dyronf8f-*VZTT=p-y?035Ccf0JXU3OV@LK+yEb9r6-*5*dN&P9K`qLsQ# z1mV)if;vIs1|QZ-`5xR;Ea*XGmx6QmdKK$d*?W|gtG#0OfDx??MR6zFc<9UO60M7F zZqz)BE4a2ja#N<4sl%;H)iO7mM7=6?J04mu$S~{7nhU34*NjH(mtnhXiF29xH@`Es z4?->)?r+f;JL|3T-5~V3K<{KtC5Oe4)`jgNSZ$VmVIPE+ zLRwM7*uti3n+klXEOG6ZU5CSmweY*{bm;N`E$6xrNY+K)4W!hp&!mEx`({FS86AJO7S)v55>A6s*Ct?;PSl14U_6 zzt)3m^|e^`s5`7n)_FJHR#e+D)OKPZ72JGL@bm+j6S+ZS-&5R7ad6wzj-Nnp9ey=?-7`9X06ZRPhGO(BWT+~QMYEw5Rm#tu zS4@#D#Q`3j@<8KAa@**@W2{uT1)P&t&iwfJ`GvJAZo>wx-v+Hg=vi>>wGARZk0ZbH z%0Fg30kzK7!tJ;KkE`QV`u4P5wZ~5nB>yrhz7W6Ao4SpxcQZT9W%nmCtB@ZJsG~aH zxES8lil0F5u}HMZw%;(cF)P!xlGWbK1+8OExz#1G91EaYBI%260AkKTE_KF;; zU7_CAlx#G$ydSzL;uop{&~d1X(cX?PDss1!rb2zz5uj8B%KK9b@#>p?P!5Hi`4l+* zPt3d=9Fy%p??ea3eL%=^9JM}F(Nyh0v75?d*dZ&})YV$k3)Fz_v9ohy3#i!6G_hsA zm(w0{%4c58+8(f8f^J}xOb8k{&bMMO2BkL3)#po~xFd|q;sNi*;)>*f+Qgla?sx@M z1!!qTrVZ)ciiWGx`&C4~>GO(%HTYGpV|^#r_b%njUr99dXvf88D69CiMnmBThOP|*(eNAhipC4WF>lYm6<-VdAPetBC;>5r z49()qYU(2Sv~nA)$NCrv94O66;8K-@drT5cjzLWcx{A%fMUWi;RePin$E*QOuN?Hi z;Do^=@exVQy^c4pPmd(mRC?kK0FyoO&t?<+9MUlu)hyhQ%fiiyg>UDxfY<$I%+hh2 z_MqQe9K4STzq`kd%O%vM2z?#DgUf)BQ$M8twidn!y$_M$y6@$P@wb={6z;y~9-{lk zJ^qj1A4$bC{r3fkeFbCB?Z4vz)pt*T??U?K_T7+Cs&fu~D1Y5q=bj)?z1m@Su76Yi znp*SXUSvK77QB0x?Pf9JIh6@0hMamN_^!rFc=5p~T*7d9GDwiZhfye@um!3*Dcxfy zVu_;LC`){kZiU?SRI#Jmv_oujrYEmHK!*;x4E5Fo^nlEV-k;~un@V5HUe)wf0c$&6 zxxBSHvx<`6w}<9Wh6{@0J`}~Kt%x`%hf35T4)8xm^}=cZAa=IU9*v!XsC1g|W|{-|3G}{Tr+JU=d7J}kt{#bbVJn6h zQT3sYbPeI4@MHD!H3-+o#N>@<)`U2;3!l`)>&4wXl=BOdWo*=Qe z;U&-(ccs>J|e^gw1F?!I9l;tjrP zhDxZjV0l%9pc~>eoH!aV;~qUyYp|W5&eW(xxF3CS@*BpSDAlG^8yyc_AW(vnhKep| zIR_jyG@#h+9_zzYSyu!O;hXNm4<2SgZYcUyX{vzeAg5@CHa%!q)AWwP2kN<#;Irsk zHNkrkNC~k*+TDn`7SvK{9UJQNRm?@u zeW+|fMe$LciF#_s4B0nx4`AF%q~@HLEx4@a&LnDCt3ihsUul_DuCDfeAk3pw`8n2Auha zym#4DPcU@#Ob-PZGd+UE%Km?7-a}g|B+sSrjfSs}6!PzpMX?Wfh5XZ;2*B_@Pa*$$ zOcrPshJT^(=~9OFc>aX{g8oM-Z}X-WxX3jFBluIOOLG(c3-Q-1{$Yic zBkEHwY4MK?TLVbeAcCCzw-*NB%*T5@(U-K#L8wHwwuf7<0UoCjj&QaO(@%R=% zz2HfE$Gj*XZvpVGI}E(rfj3X^r2Q47_aN}Xf+zhz9v;i(Y2eigo}FI9-<8Rdd+gVl z_4~|!0lrDkNcb$DsTeET4};$Yz-tq{m@b_xzmcTkg7ok~ZoBg&X` zx#}nBz6kuu2Xwhhzmkn#f)npAz$-rtyozF+*OmAWMK21xff4XFqCYwl`-%?(f(QRs z0M7yZ0^lbBn*gzA%6d&T}av0n%Xb|#(( zh(69=BJMje9zb60-w4QX*8(CNCKdrsf&EP+5Y=M*20+@sBKCQJ*4Uq2tqM^SP@I1I* z2Z(ONKLc#9W zbJBSd@O0SuU?lARe*g(<+TK`3eXS8@YL79@b96L5dHy><*);g`PB_b zyjJo5G~ijV#{gL_yzg)-U^O85JqwU@P6K4P(PIAqj_1Sv93abYGa&j{{|3Msz^?)N z0ONr88^0Vs3_oA&mjhl5`7_%_&O{sw_gD=+~Z>Znb;o!WI28Xkn!CJ$oN8l3os)(Z3q^avb4U=?0qkHB_;^#W@J z`UH9e4uCIwmZSyt2y7QvFR)giPauE__b3AMJbe$+L-Qg2)%kkxNAo(|X*cVI6z#-S zIfC&->^`x_g`Sx|{s&RvX6B1Gh`*U1vRvqI=7XycFV7K}`77V|q1~(}ZV7%qi^H14P$TVLRd^2C)hV;}Mc; zhB4+Em)!>sr$6<$IPGiDk2vjr0DY%@p9_Dhi{2N2?8K-37pI-NwVZaheuGcA;%{-$ zf5Bzv+mcRtYhC`kUGdep@W1BrFL&85bJ44F@i)z754gf#?+VX*G){guy7Kq?F8e$e zeV#vZhUfcOPJ55b&h2%lf4M9CT`qt7ssm4}G{oD~ZF`*GtBbF!Yifj5o$kmx_QJy_ z5VWYf3%FjaF3w+bK6N9sHr6d$YU^pZI&_smYFyEZvwcuXkblBuh0+YbtJ^Dji}J{E!X3TK)NK+QX->YA`aBYWH}ZGM;gS%nFMiKypo)2 za<~c4j35V!#~hw=U2@W5RGr>=JJfztt^t4T#|7tSdgcbNNbZ)F2@nhZNsm1(hA82tJH4pzZSLUIu zBNg9=YwUd`IXBj%p3K-EO<}P@75>Yy*SZ`VKHqGE9K`I2;M~Xjsy)%}HSN*vhv<>r z7XymuMc7O>vFVD_8GA{KM{KY;^jl@&{;1wxfog-N@S?pUKWjM@`s>Z%rhJ9|?WAJ! ztM=8(vE`%a$+;%Js-W!L82%k2-J`Zyo%{{idK}ybxf2)!duEr5 zylSf8b<5yAAd5Zj8&MtfPUOvS*c8A|p!Y8PDjIm|AhSgFj7&X5!7ACj-g6$?mlHVgguAUqoAaQvRzdu zJXXYq3=av8@#mMrXzAI=cYI8HzQYmr@A=s*?egy#2Wd+;kQa?fukldhQ!o^)yE1fr z-NN~S%R^MzpofRyug;jz9?$piS!iEmgP>3^Ucr4G$p_BEVe)eY6^>>&f8PlHwIldL zrl^ejo(N=5df!C!Ffe_}3?r{4eiZ)$g3t6SWAI&aYxcLd<9}cT{RzZ-5dXUm1Mg|z znfIh6zY5BW{|vmo5$MH`Z)mlC%A-(+CQ^?B<)dedy^tPDS#7TKMn9?K(6UA-uU+;E!d0k zbKOh-ZGa~NJ_Lxe^{)~4R>0$7Ujldn;5C2@S0(8Qd3cRtKrKT2Mg;rWir^THa#>LgD0=cWN;pFE!-Ytf9h(hjMq!n;S*<<}> z6xXR`Rn_$B^DC<^teHN{y`5<@E|~6Ee=S`!L$AL6)^%5@tUt`U%h><7>n^ri8nfD3g}OkyuSPW~?LXai|x1 zwGx7QfyrunslDKmo=+o;wC?H=dQC#F9O;y#D;JC{#!J~N@XJ2ht;b;<;s>s$776_+ zAiw9~pN0(apIJ-VK>gT8tz*=?cRUxrAMGY}N!1=4%DiT1Cl2d!+icUdpt_fo<$*Xn zV7jU_(vW>Pv7ux~@ev+%{0c%s4ofHMryA{J4-Fzji@P4dXxD zx{Up$l1IrpOXlC%b&lgbpdfG`5In}Cj9HHf-e2K}{?q?EK=c>mpAfhi5PhKk$AB1G z)p`Q!56D5)J?Xw1KXmT_gj3lAfH3M_JKd{cp?jrr z*8BBz_i1-En!>+?`Q==Pd`s-@fHX`W*9m5PKM!`z0)0Im=8w~UsmqSM%JJt~*oi;i zWv8Fh|0b7R>+Yu3bu~}S+kiv;#C2~}QQ2)%SdqXCLA0-(iyhlSd6R0RR@)hYo~^nz z0hUf{)m+&0F#*TSGB-}Fb74O2{PDu-O6UA>+0vVapFgTP=R-!pP;P%Hy<$CO3eA&7 znbJHUcGP9oXCs3?Y`MLU1q?%aXh)vwu$Zr>L*9Mwn_9UxHwHUZfdv6$%kqJ?W*gL3 z+c@h49Y>l!8oq=*``m&dD9JZg&^xr=vq~W}PZ-&EjHDMG*f}g~B=Is3><`1r}G>224vIF4?=|4I6*#&-L|44p#&%cd#in>GVkSATpkydNX zy1X3e8ZJk0G0HB{8sx`1m9*r6q4+0FUhL3$fjpcLPBr5;*8X^nSple$SF4X#F>dK{ ze+b#WX+3@dy`MKFph~vwGdFC*JuG$4Y78h0_3PlTquP9{Q1E*YJhLTdy`t{7p^obJ zpOdqOyd7TxR zqTO9|kI}zS=|xl3ne(%y=k53f6Wg6=S1CdXdON;H7pc*@6!pz=eVraLsau*VecuJD z3aA&F-j1)s;SuzFSb1XgcktctLqY5O_A85vvQZwYcUWVxHn(@^MZcAoZ+7qSueLAe zE}NF%C(!$C{3_0*4(a=3D4}J!*a3yT9={p9H$HZb?W@wKeOW@8A3O9Mn#4GsoOZl8 z&Fg;I`o#9X|MKFZ1YWIoY?RscjsB`aJNhqapXgF&=``%(-TLow!TV=XTs-~hf`PJqGGHa*I?0tci~cG!*Q%EReD=9Q(mz7lpK&>z_h?sOHQ%|b7isati&I5IXdwvGX9S+TFT2A$XdkQ@h&OTjRcm3u_UrD!dqD(oc{}dI z$Ic?IuLdoAQah!iyqxrQMx@gQy#&=yCfZ`w!5q5%8Qfro!VTPXwy0{7nj+(8#V}4B zV+0`q>qu@2=U)$JAnqBL>{PF0GtiNNom4b1q-w46o-=U!i2KG)4=()=WnOjnZ+8AF z6%p@IKZNyWAo->@k{l}H=J*Z$fk#Oi89B)M9>8^9YauwFrS38tg`1seYe(BGqHkgs z38sS9pW>J5o)ff+y&YVa1~wMKGCJ{Tm57vn#$Ii4s|E?Q=OW&~{_W-7 z&NPCfsr?Q>H)?j+fnIJTsoFlsB@3~wKSSGSUl0YX2UbyVQK^)3re=jY_Q$UXT5qU8 z=$181&4QCr&;gw_MVTlf<8DMYvQ6t$j8~Z$5n0C1iOUIwR@j;q*v#DGh<}{XD++3% zllBLa&lKs7+F3x(@(4TTA6UO|uHS$d3z{Zz?H5=Lrf7Nu8a=;8KCFF*|26c6$N2x3 zkI5G|*Y0$tfKccicosEHxdxJ}+QQ!+`E1iL&)+95UBmcq5dXdKFBHF8%fXN1Y@z#$ z^+#yJ7U&f6=RFFV3Jvo4Q&SWB3{Reat@v|}50mFVPyC-!o<({7KFnxnu7gjZa{}#L zWWsa}<6kc8tl{#1BzaMf+&5(TDr4k8u6MjkM|hW(`L_)J=AB|GZ}dF*_vbi5goU1z zdqKQMfoI;$W%(;(=!KH1WEt=4_-~W@jjRXC7(B;)LEiZ&mwSb*4>@>_duzP^XzsU3 zy(q}vXMtz#%h_kVOuRy#;X54kq@EO{_XFV7%l$Ie7iA1RN$*rRz6iY11MEJBhFEWM z@Lc!hh_CKHioQvGOu(A~c@AL?An|JeiO=(kr@;O+>O0RdTnLD&?f(QI&p#YMJArJ?{~92c z-2RsUNv}uTza;Ko5ckiDJI@~?4gO~UiN8~~$BDlHguK-ML$QAY5TXP>mm=V2;^zU8 z4HN4D8Q-~pJXdivAWZiWfIir%rx||}MQ`)OXJBD^HVFI%Ak+DIu`d>QHQ?!R4*|kV zoCP=$_6q<}L=*WwCEfWBSU#@WXUm z21q`pYWMNHdxO96@57UPya`Bp14M@X1+i0!82MQPNPM23Ae~FZUI}?Z@B33xmp z=^P12zCJ);+V=vIFP^Iaor%u?0%hXA0Wuu#V-W9dK!#f__9cJ}$8#?X7X@UvsemjO z%3>M*NI-^vA3qHLrm}h_z68kd+W;Bj1CZ%htlh_7CU837>2Ngm#|*!wE}$tiG;tB0fZw=3+xftF0fu;tw5hZ z02K~pug(h@dG1Xh#=6A(p<#aTJz*oq;H}i#`h~3P8SRVBE;h*LliLXc5Jf43MyO}R+fjjZ-`H9do z^9}cVxZi=lkX978yX@ZqeWyRQ_c`snFY2^k;ImCqDZHr~MBu{2N{P$GH3% z))~IfMepBT_OH0;&2-tXana+Qe<%GVuK4G;@PFg754!B`_j{MR=-=<+*L^>3oGbpH zxaezq#n6&&$D|?Xq)m=%hE>Mej;i`rdKj zzv06Fu?wFEvYqtbbJ_29@$;_B-s*~v_nw{fZgk=6qhyV%afV7A4^{`*c#ti7iS3&6 zc~(l@e$tM>%-MTWcC7;%pNp1Zs}1MI)Rr6Ut!*o~`R2H2gX=uNh%Z{Pcu@=9{%MQj zQXCNV%gMYsg`K%Ycoj)IQ;SiaV*~EQH4wpZWX(y@zHA4&>g`b#Lj$77iEH_y=4M>> z%hE9kU9@cJBDlJ)>VX(uOkN7z)pd(j+$zroU!$|feo7cfxo7p5o9coegD*xXz}BTJ zmf&Syx|olKmSuIgO4JJd|8%ESz0hQi`oRsmldVmStsvL3Od&09TozxXZ8;|aU00NN zf6C~5QsESXD^@l%H8$WTA1F6B;5jGBOJb`Nf@*(Lom^B_M+xR0AVhdcaU#BQ39h|? z7g5rUFYu@y2$nQ0U9k!~aJa4pyF&-Jsd92V4B@hO*|L1-?O6vSIs3I)UwydGaUadF zh?f-_bllB$t(PwqO~ui@qi^RK6JcZl)m!jmKDSATYJ!ld3^YX;l6d3vqMs@*&n_`OXFi07-K&Y z-~7kaMw!FaQ$Cl0U`UT)Cu1RdEgkaqtq-lI+|c^}6`~Ab17M7il4HM(nqkKw zyCAPU7J#a>A$->Nz8q*?puL0Dv)P@?dU@~VEdyv}?tIJJ@cn|u}s(&$AEQ(#HM6JfYNa`}|4`E-3Dpyl6 zwLi2V+)$4Fp?OtIh}jF9h^|XgR>TI=g;AR!npy9 z6_gC$kYWiqs+``*gRw(_ z&G7JeJJxB+|Al%C%8vkGZv~q)&;lN_4ygQ+>vqC4GE%wf9gjiYYjLH5OLUzI67qK3 z$|y`qC=WnNC{96q5fvYFYC1_q4E`wa_gxTEfsa5oY=A}QYjbG|>OtSk+=hhKs)T+6 zeoSc9o~q{^iFG9PAz%bjvEt-w#bgY-7D%Kc;;8k};9VxVQP|@p^K2$|{NIBm8-LLH zK!>(=4BqeXL4gE%DSab@%XB_vRs$Qn&f|t&T4#RzM9n96afZ07cYiwQ-M9}JS|_GC z4iHhVV86*D0!OL{Gv}bFCuAxND|Unqjxr@W;{2VMtR79f|3Q7O4sqi?)`vZ>4XD&S zup(DL^~(fc?_TOW;i=}SC_w6~Kmm3Epu$+c!A2Hp9Y<5}N!Ycu=jF9@vrE zU{XUuZ=r;v)(42Mw>wa5gc@)>hUl9JX_L8HkwIJ8&tgf% zv@&b-zGoZsF98E;wvqUh35fIKsEv9vl?yj8MsDvg{^aiiI0tYB-MpGdg*%==%}(z< z$Fkdd1vb9Hr<_&)^nNz|PZ;9JNS)dG;DK@OOozM2{}mLFKz8v=pe~i}8AoNAxT6`d zqwCF28Qj6|&p|<_>_73P^FEa*H!Q1^Y0L+WKW;4hkSfyws`Lbqp3GQeaHf<$cv#@| zpf!Mgwc63I+WqN*`PgYygWvn+p0IkI09xc5UR3--Ew)zR8?bg5UQn$wqpH&O<=jc< zv_g&+ip^Va{Ut|3)vISx>&!{5xN!#$K=nKGXwOXFq}HQtwXbx(XdYFS_(Cl$D_bs6 z4s%wA=$j!P5wv1{{awu+=ho?dXzEr zFVEF;I14iwO!@qkfH3|O0WoFsKaYVQY4&de#8l9~84yvA{}CXv(*GSm%*p)!ChqqM z>;NR472>~C+^-jSwZI4<<=z26%-{Ue0J%SKHX!BFf58~b_y++Q|LcH^|Gxkk|1Lnr zzg^s^ke~kF2W0%~#Gl8d=-wu986e|b49Iw?FOKm>07)+ZNc;-~o()KT-b1A1=f44o zw-b05Q+Kcqb;qrLfDsf}eViNUsEt^oH<5$cI-j z1@`}p7Qp`iWccp_5})!ndVNvgMFM9Cq$gPSKZp8=DYT!xCi&<7z!*U84-j%bKzf%0 zGM$vG(tb7|NR0Oh90SPkqW~H1ePlA>i-5#`7LfStxk%@`;{I)M=QvLPE`cimNpA@t z=};a-|M}v6B_Qdt1EBkb0;h_9Js?;qsTJrG2%y}t2d3n=re7c*l;@gu&c0UJ0cq$( zdppXBhVjtNn0@$g+Ic_LY43FTL&l%u&%I73{#RW7LoWMmF8g>___;3oJQqI8(HY+h zF8_L$o%O(p|CGz$=kj;ozqQ2&SkQ~mtFF1l`J^~STH@k7=`K!}M&{NnPAqSR9BMJ2 zmUKxuwA~?2q3i$xkH!X|GHi2#QaD9eE59N!?Zu0!OLB!|DpI#2L`7f_QZL9~>^I3> zQD&uASz(Y8LMa}Y-W;(LT~|ZNxmznzHgHx}bdA=RE`ldH`meo7Mt?1xwn!&ZUw6gc z-N(EqT2)tilOa8Z^dv7BrjRdjt1sB3>Gwf=l<{HB|YdUKa247;5LnpAAP4SFX1=;Pr?6L_`d-E zAJ^FPMe5VRTO54z0TWA}KO3iKs(7BI>Miw>$qo?L3s9WM%s#K91S{W#AEvq&qgb{~ z!1t!l;716kS6P-slArP<#){LCSgpk;M|OsQg~gB6SQ@huXUR!;jk%yAIIfPGhxrffcnTGQ8VYna5BDo?3WLTg=EI8KXA#9ho0V4OzV5E zuz-Xl6y{-ERWYu*LN;$|MFciJWN^9Yt7y=@je3 z)(JkCa}7x8(zrES8sEgHR5a35heqy%S1yIYI!%$z^qy>DmK8+sSdgOwx?R3?0ZwU-r*@p(6DmM&Z2=92efNlAIaiv>_jl3O^8Nzo^6$$4S*SyLEAQkNt$5j%A2=(_;JtdVh&u zb>D;s4s@<6-{s18BYq`UwWg`8<|MX75C@CflL!0>EDiT3?<~cM=8$)zbJ1rrfGT(l zpKsgPe&y(*%mx%>_nA3SHmWF@J(*OtKHKsP^bdHUaUY&J((7qfm=^RF**YUPzo%!r z2i5p1j9tqp&66vZeN@`ooq_aY?7=e(JB7;G5Yek%r!>)3zvNvZzQ+_v)uD}{q{~s~ z(P$n*42BN6myS8w`D-rc3$^pzE@#e`K%~XxOj!V&Z*V!kgM5VZ6)xvJ+S%uF{_n!h zJG8Uch5aM#{Nd@j$$3CK|K8<%mv(+G$2qCdOP1D(vIQ^Phf4x z(~*|vIK3Ue8HHsF@0E3=+fGF&yjuDN^=j#sW>2jY7b`SpJ|I>U8G524 zok$Pf54+=@L0~iNcuf!8*wjQzp{RN5GfV$t$3L2hb;SQN?2h=ORtA#DzQLbDj$y~1 zDMx410lpkTy&aDsB%+@PX2U7S3Lr!a-X%}B+U4m=e_~6ZeGSsr(T>1oR)9{)rXNmz zR1^=O>~5bp#P?wFrr2mrx>u1t$(6s^%*AV|5La#q>CHJmJ`(>wpXdYjtX@8 zZan=vT>XiU&DP!RnI#~iijj|PYB4nSc@%k5UwO?XUNsx_>0(u%@QSEipAgg0+477G zJ&XGD?Cc#utl@3KN5rhR*ewkja&=Fs^ONUKRc z2ejGUx34NfY0L-BO<%Xm3Z3;yz`;c<@4Y*L##=W#iV}V}WUd7Z6*dbi;Vbj^Z@RZyhX#&>a@f+A+s=mBK0cnwOtp#2P+gNA0MYc%fN!&~v+sSK;-}qWJvC z6g(WLDu{REtnk*ii`S03uJmGQ#ZN|HJ zM_}|!yyH0v@4}T}Zg(*8b1)t)+PWh!2`6mOWN>+P>~X-+rS>`I$SwE@^lk*gU?qMy!AuVnmty1S<*uUe z(AKE+ZZy@{kG%}c?#@+P&95Rzr2EDq^d?VWG>QKXV^=>Xv3O6@+o4`JvYrZcywx^d zD&?iA;QEUm@wDS8Z(nBYW`5wBlWJ@zzhlgIzK!}y*BtEswNj;{^*nsBG#CS45lAr|9e7CrUgj0cM$od5`k8wUp{uu4O#zlLp7^V zJ54ClwlZn+g&^_VAS|Ll?;jB)bANt&QS(hKEh4xlE9>HD!vQRUaIe(d2}9dIarW9V zmsF)YcE!i4#GV@;tyW@cd8coR>UTxC9{XtXLd041eAOdu4<@iSBQd?(O;XaF2bG{?qr(JR_icHe8l`0gt5P9m9P(KkTCd z1@qgi=VUQgwP!OW)XwbUj_OS&Tfo*F=>Ofl4i5IcP3Y6Ts6r*{;vXY$;$-TvElpOJ z7(O*;;Ik~}EWg=M7+~)VEx^g6MD?R~Fyr)_r1lS+HG&#!?59019 zmi>u|F5LwY3pIuEfW<^tO!A)lsj9+c=4ueuAfN&6)83{rxh@+=!m?T0nN}DHDCFWZ z_DHL4FA+T>=YAh1$!dOJ>I-E-I{B!1c2&$KdRrugcQo64=H@iUMc4Mat76&>Q>_K; z`55C9mK@iVbH^jMJjI^B<6ZI{=Df&z5$i9!+FQZi_S(aAG6QjB`3YRtzU4 z*n2)P2D69_(wra1!G!hP(+>67rEEGHeeu=XF$vusjvI6ZtwyvT(hUK<7Z$Uoe#P;oIQBM?pZ-B<8`@Vy45uel;G^@al^?rh<5su)t>lM zU@P0Syx`k3$|#jXe<7FNjs-~h;157_7^Y8l z^lt_DZ(+!f!#~#pWTbG(Iym%ptRQR00zYUizb|MdwqwXxA8A1I3bi9Y?K)VX{-t8u zYf43)jCY!&sd^lvpkO#U2F7!0;MPIktk`{treMv!L<5JrRAPgXTj9V2#Apx^ zX6xPl#PJ%bJ*VDzH@=mvVZ5fFSf3c5nUw9{Y~S3<7gCikvEEcb6pyKciSdI8tnrKw z4kSGWWSm&siw^BN$Eql&KgW2fZrd3)Opr$T<+Y>g5nvofvMwDlw6^34;%F!UclHS&h3BUL_LBK31)Ys=#<{ z%ZqFExb2F6^Gq;f+B$RT&TudJV==HRu^+it9W^JV-JxC;sOotWjG~%q*87HqPov`> zLNDU&_$G)X50ra5J^`OptUvj|5#BEzhwtPE5GbvsFI+lP_(1qC9snGq1RDeBIXF~+ zn6O&xg|d#HBE}8T?${65Abz8gnLJSJ?W8af$GlRZpISSQ`V~%(rD8v@UOnoWqYmD6 zkU~4}-4Eh7&~-wf>$0Li*NvkBU2~2IY~k23sGbL_Hpn zB@a$<#>e(ffj2u#MJ2-#u@}94I%3T!g*;FPQ{`E%Uwp4MwQQSRpmzJW=Q9|KC*aZc zsMatO<4zM^k9Rx{Zf%2(rakdWMMIs9;|%h2o-1W)_a7Dn(r%n8NzFLVDg1a)EhfGjG(5O&cTyS^8$wa_|rD;k6Zi`NN7ZNiZ;p<+5 zo=BhJ(>+mqA?)FzSHnX)*cW!+K3Wg&l&|aIS|zO}Q1fbHdQM#NNueSvojEtbxxjan zAJTXRwi=j56IkW;iAZCmoz)p6Nd2njt&CKztzti@a@zKeH z=O&(S|K}o4yaZvw)^p+R&lPz$9-I8|lWKCYg{{>a{1wjh{R!uZ%dK%0`gCdF5&Edk z!_E&MduQD%LNUxe*8(9x@uY{nFQM*zoy$&#d>cBr!l?^%Kd0&gS zPIq+F(46iCM^Z~lRXQiVEW>oTXt%dRHBIlvF()TKsEwCl(Lep9aQEz?5d&E$zW-F%2@uggN;?OXniwtdxATy#`O(R(N3?JC1-stOIur-mclZ$Lt5~|$yquWMPW-sY(Bpx%$ABJc zUdOJ)k24cv)-z}}F>eS%@=H-$4X^h;&c(GXKBqjHA4@`=>06hFYo3W%??kK*RxQ*p zus>a%IFHzl`9`3<#uJ|&8QK~ddNNY;ENOb((@6BNZM=O7L;a}}jJr_{oqMlp58 z%>TtG4(&#jrk=s%uF_5%@(vDSmbM;DewaBCghzWjdyqk>qpFRn{sFQ>2x6l(FL*!y z8m1A0R}PbdrawBY{G(Ven}1V{jrrHH)!T6j98AtV&75=8XJ`J+&dI-%R-Lc%&yURv z1Y&V@K8FvTFv?g>!ZQDyE$?CSvjkgje{+5oCl&;fzbwvaFOK|tP6_OG#m~b!_V#m- z;L!<8*LFpxyc{dS@%8_TP5EV{J2-YITC>ml1+E<-_3Z;t&3|F6=A9_|FYD!1Aq`dY z_o?O%@n?9b58+nt)6G4b-nGY~t)jUrEmaUx>j79bk- zf2xL^vBh}Klh|C!vg*caUXEGM#+Sydmt#{tz|s1s^@@Z4QQWmSf>mZM1-S>nQ_aD6 zW!E;<^}d@tcyjBgV({az8-Boi8hP2tGk~h60b5%WKa6!>UKAPnW&DOn_gr-H&&}-~ zGd*hU(Csy__SB;~FvWNPVb+$Y_+F^_Fh0ed0nYRze#GS6_yXp8pF>ZN^e28EtNBf0 zJQ!AziZQX8_YyatJP)7_U>b^!thnWRwBviR9je+ihR>+=LQE#3G4yrTD?o%~3XFIX z{=v-%2?9UYV1owV)8N|x!PJ@;16$ud0=mVDunvn(`5(0Pz6jD5DZ-_JKvAS-d%RpP zr)u88N)cf)Cx>g^QBK~D8(~+&|2f`{tMPqh_k#10JI{wOwVJv1q^{k?FR11=s^w&S zqo~u#14p-%wg2unsvx!{51h36DpkLpR1_0W4ITqBDx|?a4IxpB5c1>})JcT#$B${> z_AT{!((03(!FLQkja3{{{DcOZ0Z>09)}K^+xG_?Lg%pN{4_95Lp>7X>_L*w@@Sc)!Rq#;EcmYnevL)SZaF%jRwx;eOD%jo6&g@0l-RG))9<#P2_Cg0yGCK(H@j=xC9}JN zmlVzJie576a(tm?TvlE@_z($PI!>vS#mHC-Cwr-GVr&m_Nd^aS63#teh=j`v~%k~ z@lkzH+}9JuHj?#ZSH-bi!DEY(f$~wABZJlzkQW}cAf14DQK0UIZLsqZEuP(M z@GQ7`VaRh?AUZ$fiMJ#gJ=c3~^;{pC@42-d`6H6UTmh~M-LsfSZefnr zKy2E=-+FP0;=7POvJK*Yh7OV!en4DK9md}r=v)H-Li*v2p1R@u2QcTL;ZR-Z9?1V= z?`y#0s;af8P|^Tx5`GF5EDX?=3IvkUmb6gFG?{h=k~B1FX~CL=ByA#T5|asSp@l$F z={OAr0jUZa6`?9>t|G>&5TMY2s8tb)s6<3*2w?RhR1o^T@7in6oO3ei1pV}W-}Bu4 zWb&T1*V=3UoPGA$Xa6lfJ05WN;Fm1_yOsY{gim%}T035_bfd*jdx~`2W0*{T)EZZd-<&n_eK1Ym0#si!uEX~ zkW7Ep(T2YUkSu-e%2zcg1-I)_{%G~DSNWeuuw>~kJ;vyZ;XWqg4<2v$TLH=P*F44W zPc|?jecj4$86|wy2TZ_65i*(n!4nLBJs?^6RAT;|j_q`^@TL0T91i`-@>hwa7IbQ&p5j>yorcuKCXBb8UG$+eH_LPVlZJ$=& zFZtDe-~ih%aduynXP?$IFxf_}c-qKoeL}Z-2;hlxD&jrJx1?{^e*lg&(0#_e-&~oRF3VXOP^;S9q;D{ z(I$p|YxJ`HbjfRZQEwsS@_%RK*p9m7lH@A_8ULV>XS?c>cjW6%#;@zqPeEHwp7@#GHz1$&dlUZ`MX5vHbKh7F(@=ihD$jOUoYn8BH${+}@}kkp_Shxo z$X5h%l`5z0aw5GNjPc$HxfLom+VjNx?1Wst%CVgmXVaG~|B&xhdA8dwc~3o{{%MfO zdfDV_tBS|V*Rwy8=`M$Sv&w7pH6nl1yAg7AD#!L+oK3gqK2ZKX$oHu{+xvsbGabKy z{E8uyZnpp8tbRRzlX}PFS?Ew98E zc~EXEq~T-ZaDKTaNvRjX*qZlMe?LgKmL>%YhX@`v2n;L%$3p zeV^aZcK}IO;r+;P4S0{P0CM5uQsBwJeBh_i;A25g_BtT_3xQ$a0^m%bA2=772|NS% z-+14D2>1se{htG(j%NQr@h%{?VrAb1ybRa|ycqjP%YoE;0g!sn1XABIKA4wAmiH(B)?Pr>l9}JSAu^$un71g^uy)@zpVI4Aj_)^I2)J?WI6xoI8&bY09ig8 zfoB41ffoT+0RzA=a3Syv#qq$opx>Bm^!*UXa9;s3++9G1ivk(0P4QA-5cH`)rtfGV z)Ac+$CQR3A;46@FZXX@b75IspkzK_52=K z4*KW7bAk5)@vh6h1y~B)3PdwJbpa61YIZhoDez<<>O=M+zzcwHqQPMP{{STamq6x! zv(oE;lwS>`T#@=;sQ%{yS^j4NS^g&iS^iJqyM*c831q%@0GY3E0eL^}1~Q&n;1$4f zAj@wG5b;eu3dr)Cpm+fDr1L=k5lH?MN`Fh~MZinIpAQTHPX;bRyjki$Uj2tA8UJg5 z)N>{9JjgFsx){iGJT*~TovC*y-Uwv;bwGwI05aS>rT=)O@!zReiqx4luS1Vnvbdk~vl%AvX45d#}I#cNhO7F+R$@K6XRHnBVcn;|8K<4Xa z_3r@kzHR{WK3xT*+!erV{9OV(9e4l_G4<>PlK&gvEZ{vr>f5UPM#VKi%3TUP8(09$ z0geae0(rg#`TanKzXwSDci2oe0IF;VjDmDO?1upN&1c! z()R_`Z^ySjj&zZ4$Fn}8>9ON;A5(pHJdx*Lh(5fp>0Z(Bc07w~R>`;HSJx`vj)(o! zrWX$@9nW*2JnJXj-&Nj@@ACX#^6hx%$tpjn^5}*O-;S3C!KXUway|6%(C_4vU*e%}@PvQWlfKV*;(x|N zkMro;;|YI`N50WRe;4-wD&p?%p71~P$fHel$uq1o{D(dH-|OLj*%RMop7{7abL#sh z2q*15Px(fVzJ;Fj`aR(}-sIHR?xBzKq_@_i5AQ%%`01Yb|LoDn_p~#<$2{_rJ^cUn z@UuMnnmjbm6>{p|;-PuIkdvWoZ;e1lbkdyX<8b*)Shk|KLOfv zhBIq>K3Q(G;U&NFmyvQ45yuWV{+h^tK$sqtngoYvFW)&LoXsa;!DkIUMR zwc&6cB^*h0`e>Qwy2PYVRH_0=u0nOFuEY7tqPC`~Vm+&nrBIEB=tD?^Px26q8w%bx!SKm-mEi^J_PR@3nhg}65$@R@Bel0Fr%`2)}ab&f} z$TCuPW#cSVV;{m?J-4FzN)08CK(M5I=}M`YV!l@nX6Jpa<@triq;CbI3zr583zwpl zpe1g#xuiU}IJi`v7}OofdD!|T>^NH=C!dvTVTrbb!IEXgDDv`Pq4ky`jyJ75L2JD| zR67xUBACye#EOyv)oiU>H&rYvUz7*2=H^-)fduQ;@B5sox%1}E_KV}W+$bJ%%#`nE zZ@=~)KHr8-6Q|)PUH^$DLyT++ zezg0{d)5bR05Y4U_|Z{@Kc3&0BYw3My629Bg-A4cCEnRBlzisJu!+*@uJtqEVES+!YeU>gY^Z`rf z7&=|+sjt%LKi<-Q!~c+_dkue%rSnaC7g)OA&^$NZIFr6AOZyGI&eA!C-eT!NqyIKb zXBqx>OYb)H1C|~%^e#*9GxTpP?KA2Bv!$~PEftjs%rW=>82fydn)FY%bgz-0XX$36 zzs%B=Mt)74Hu9S+-E86~=)YAJ5{bNga8~Qhv&N1|`rTvEH zpqRKULmzMH9z&mLX`jje`IgQ%>ABp}{U$$6mhLwBx!%(4hVHg>kD0U$MZ|PDK z-%d-n8~snmX_LM`SbEU#->~#PLr<8b`5QF)KVa$IhCavA-9|oO>D`82YH3wt;c7A4 z=krx7f1T1TO4lg8N$Fap&1PMnZ@bd>DF1e)`<3od`lm{7R{ABSJCuG?>29SbVm^Yd zUFqpcN0rV~`WB^2m2OqKO6k=~U#;{Sr9Yu`MCq?7eTUNhN@HA9+NV8AZ&UgerN5+f zTBan|_hqGzSGrE=)0M7Q`a-3@qV#1--=p+ZN`F!5O-g@M>06b)O6eY@89tA^ zD7{tb=aueK`W2-cm3~|4Pbht?j)Q$%>C=?{jM58~#<-o7*X2szt@KBgM&CmCoHwKU zq|!GjeVx*uR(hk-UsL*KrTdiLqVzLLZ%}$j>Fbp~pma>>qmDB1e^%)kO1CIor1U1G zFIT!*>9tDVru2URBr9Y?icBSuBdO+#Blzv|6&nx|&(qB+|nvQFJTIr=qU!!!5 z($^||gVIe(->LKsO7|&!qtZ_*yCDhV$N2bUIvmV^s}6$OEkB_-j@gUNW|GG!M8ihKo2N>^3{ivwZ3440KH!v{*? zl8VCcQhrbHlIQkv?8IJ&XBFDZ66+tHwcL!uzylu<0ese!`4&?{S;eBIONuMXf(7NG z(DkM4i+>wAK2E~3%JkbPFvon5B*g6J65~tyQHq7mnq;vUYSphU>B zOM>`nE)s!^kX`TqSBvneS>;D#_=E>| z6nT!1ZuoTU1b5EZ%u3KY(4!uFs5l_uCSkLV=H48h9E5SwGC1Pk(=L~TY;?-YsF04< zsf>7;F)N3U8Pt>!IQ4amiPEQ{blK97bfn2&)!LZr$G~dsn%Wj+V4SS6DdOkYjh|WcuWoBJ!;CfcEgYm&xtjXc zNOKdy`l}jXqpoIyp9#PiXhVH9jJf%*X=<$X!_JvR=SN{&UE31D2%RvjF9M2R{G@Va z)HnJaUhA7tbhS19Dnubk@iQI1xCCU8m{x~}Bb^B;$yQSvthpupkY-5$d9Bvcg@Z5m zLvvi;&``Uks=;5owmGr^aq8jfKI@Ox!jHkm`iQR{H@~F?Y4sZehW^$KjghML{z%mt z@Sw9EnQ6tr=2v2jIpNV#)wrfMPO}o!RyF!{VAG1lec)jmIVBX+=2X>#u5A)3%nUzq@=#%9%0KgpeysCWnb=OkG5+fa3bq z^^VLpHOol0)uY9hM6kJ~Y5j(Hv6{OVPh)diOLG&3Xsw#os@3%gLZ81lQ|^hczO}Ut zl^+jBQ;n_LYvIYNYBJYYi@Mj;vZkuB{u)%*rba)^RQhe+8k<H8zRBW zinj`$Q2Hb={^~Y7BaM*;v>fp#PZh1Jt8LU`h$o{3GY|Es%l>$=*-cdNL4zevc3WfB zm8jfk+R(n*yI{*CDHG*~R;sP>s>Y^ujegki)aNSk1Xy1D$%{+JeN2O71+_A_HOBMh zPvRBX&|K?lgT+Rqw#hGDhD6_zS2`Z5LxKt3v3lv5BWIh~f7t?ok|2 zj?J&FU0eTv%^w<&H>T(4NCxI!_c zn5Q^Xaf)KP;(iROO8yo1C=Mw0DRSK!<+dqqQCzQBr?^5fq?o5TQ*nx7x+2%5N&Jd? z6bBUh6uAyU;#b_FxL&bNafM_! zQU6{=&ZS8FihYXP6}KsJ{+@E{73&mND25dC6lW?b}Wam`gT>IvO^{J1{Ix-wiiNUn)@ z(eW8tnMGyqG-0fnUdCdwnrd!ns;besVW*FFu1()c8SLol?4kC#;&yOn<(LUH`JX#G z@7$c+^XARY^ZV!I%FZ&-(!?Lc|JQdobcdiZ08@-kpFO`2r(qad6`ITEBgZC5)M1(^6GJ?6N$PuaU&njt>u_A_Bn}>j zs>k0D8aHrYFciHkJ$fF_M5GDIR6pl=9W3(ku?f+%-2PZ*h-J>BV2$pHI7j{A1HTW! zs)w9Ml}a!9Nb<<@^l&~f&UV8I*Y7w_E{4qv+>hgmqIpHp=JZgsAf1L0eLgu_Gdf_7 z+?B&F9Ot9u_R};Jj-z}tas(5G<2Xanv_8JJX%YL#P;3eO!ccdFIV6J`Q@9uT0&}=- z$2Bjt`S!iyk+XdTXHkDTS(_^k5L(zC-8 zev1vDXych+FVx@4+4wB`7<=K7v+-ND-(Gm+>^sb|&#)INXYUK&OLUga??9*9q69ue z#921K8=cO|;d4oxWnX45)Zfb4;nT$xI94|?(wkqahFDH^X(Dy z-R#kC`FI?~S$Z^lTJmScS*`soN4#nAX864+Fyb8H)&2Qi! za>wGC>r**>E|bQ40ptc%PM^=Day5{f@;CDw@i`S|)8{xJg?n-GRZgGR5&BNV^L!?T zK#l|At90rDgqZ>QG$7I-`)G;ZM_x|_ZU>$XyctM;?zf|SC2%_M1mNkwqktGAn|cHg zqfPw@P~unm8$gL)=`Nteuk>1=#1CXS6$2%HrL%z&ztWR{ z62H=Rymmjz14WxL2t+bbTaaRl=lNq0gXB$bU)G!y=gs)%s=T$#e7A-qEB%ULX_)Q z>``o2tW?Zb^eg%l2N6Fm)A|*A6x$Um74sGSiU0|B6_De*c06#o(tiCA;Jb%>?$@W= zgdgcr?f-rW*BlQXBoppjTxY_sS>@-zkNkcz;jXpv@S}SSKgx67h>rbtkym~{_2I{I zqpMMx>!$M^~b>ea}x(x(7Fnj%Ru?KF&MQorWL7=WF;}mACzf1C+2{^xw(-G_?rEjlm0qawhKu*H(mm=i zQE9)*zpUYVl;-&YjL)y~tl!EKpK&0Z^mje{sE7ZohriUrXS_~*|K*{t_R#x0^i@c| zGrV{IC3#N%YaY7Yqwg0UnznYF;dKWOOwF$~TP9r}Ya_jkkMmp4_{6^hlL)ldeyk#b z{g4S6>*J105bn5nPiO^L%4EJk3`1e3d@3*E(?}mMIn8h$*Yi^my#Q~;*K-fQz>4~ z#efcPO>RQ2d}V3S@Ljq^Ady%h6NyU%my(v9iLT&SV3cDw7P=T%pOBm(A>wN?JUNw6 ziSKxG*CgtZd-d!VKv%Rz%vIdRE0HHdOWBELE^Mnn&Rk_)#@%!^UN5iINFk%i8NZQn z`%q6jK}H}!o|bz~?ks=8rJ9e+&6%5HHo(bzTvbEFY=HY$=iyf9q>-J6vov1={ORio zJ3u2?C;|_46&2-Jb7-jqeo8z3b{>xBcd<`__eOg{$_IT1pNHf89Uc2AbXmumIixNA z#8{m$^k1rZxIMZ)n&wIALg)lJ9hz5{OEnLdhxE|ptG?~nmxou1Z@?cvtJtM7)jZsK zP0yg}+l%``ebya0#(B6Yr{Gfnfo4v}+8exU5iULtM}7RI<46Cw_`P4pc{JKdqMg2H zF&kmc#lXebr&9MkF&99$2ws`5;nHOv5nKxF?X~8m0>S)4jYmu(G#ZH z4@59oF()6>yvm7O&UqIbHa%O05RNi1&NQILD{oeah;2}WjT1~TNTe~wa(T;oWNr$o07 zH=#JQpvn{{wy4IX&qeb+JRZxDdf_g_S0@I_6ULN2iM$Gx24#4#l-RR z)`;cEbN@~Kyx~=@3o457D;#Fn)}q|k?hZw7AAkjfSX!uKe|qLkJ0XEI{DBak!t7db zW(E?sJQQ1mDLl*wb}b0eV~xXOfsyE1FohRqhG-YE>#p5Uy@Oq0Yhe^YPlUkGJxBts z-@pg}O8yxENyyLwN+%-X5q+U9VVSCUs`6=lG6uU9S&;^@Ik1oAl=(mgtoJM$hkqr9 zfLe5DbUZ8$PyUu@`4N-zAd{oU3Wn}xGGfbZQiW%2Vj+2-PehIk41EdGk8h?DJh4A| z6sTE*Nls}WVL^QS>W2r@fkmsw9sclxeBr~m7%V+@O+F9GBnw&~FW6^0(D9E6k*U@f z#gSztVW0%e^tOAEmUpoTGt~86#;)Z7qiS6X{v_UWUJ*zXQz*8Xx3%c}wY%Gn4&AVm zcivG$Bps`}XF%i}{POX;6u-;yyAHo?_|cZ%VR#6V&l`(Ly#ujBO|6-L_6)U#! zGiNOlHN8?4q;abW~>wIf^?k~Q7@}W1z zn~I^^j37^39JO*1p94iF6 z_roO0c+{oI__4mt!tV7GPZ+BZ78CTts>cCr%v z6X`j?fF(K(utaNW5&8rdIvQ?g=V0Sw!*fu9R~}&-=BuH3M*#l>IOz@y6F_GS2(Fz@A$OW`?70o6Zc(sYIVdl15z@mB>E~4oiRH-B4^LUi`54!ZMe4)xd-2gONzuqsTf_o!NPt%||$jZUC#) zjqri_a5Y!nbuCOfna*oCR)Tdt0ZK(Gi$3%YSh&IOpepXT2+?REJ_lQw#nHbNRpaSk z30T9t3m+eUE=&)-p8KYK6&roy5+oAPk>|_Y{4!I}HR+4c>?o;Q;T!1VA*3dz*s6h{ zM?gVxom=u=k>v28DTHnIiWXockG1fTN@)7w_9N*p2)JV$dU@<`qO@$|&0;y8QN@Dz zXjzXgFzWA{2qpT5=R*`mha-MNp2W`z({E-`oo=efqV!=?&n!va;$UCOHS0o85_quD+dGWB_2)2U_ zN1$(M{GOt%7#S8;p$ANUPmJf*RXoB(!hVf5#F44nMfpoMVJrH3HHorrf!06!xAJ`el`e#zfA0e*wOAs;rsMbv$W*eBmSPvQzo+Rz5~M<{U_SoVnQcdoIELOY~#p?WGG#ut9*>?2P8?A+Yk35(InlCA1hc@~sErnkT?esGr z`tk{{RU-bWgl~V#whTXWgp#)EMd&~9OnCqw%Jd}%*|W~Ikb(5 z>YCJmhRT%oHSpNMIhQ~mXFlY1(4Omop$93NBK?m*CXqf{JQnq}T`EdVG9wp_mcX{p zBVC-FaHK0B>1t1;Yxu09Xd8?~Px^W?!3|cBc9dhQ@DSRXo3allQWo1FL>g@+|+nm@hOhh!0u zGNDZ3=KCF~neR;Ld?fV$7=`0NbG2EMx4^d)2@aR~u%b@#n;61x#6q|Qx(n4; z-Gmc3*EU^UYqvHoaNNHtTqj$9)T}Zkco>q|aq5RZ9nbkr#;;^&4(_B;_`P_G(wz%_ zviP&mm808+* zpF?%Cpl<^3MBqCZm^v5uDv;^nIagRCmiFNN^1HA#r`boPV_{-)8{RO~0Ao)E1Fc0{%blFdq{TPtpe+b09ME3nk ze?$4VDsE7$Pz)-bsd$v)TN8|4?$e;&XO;em(hmb?BcAW7|JT+33rgRvbfwZXEKWTO z73TuaMEKK`{{i)%q&QyjzwzE;xEBk_(5PU_{S@Kh|+(> z#||c}#2yLt_JAhR&d412Z&ZH0`kw>z!~Zm;bwBpxaZ3LUm5t$F2c7}BrJrU}mJqGHTq5LD&|1GrBQ{n$7;90<*0kiRUH<0Q31Q4Q= zHvp-p5lB6>H^TIAuz=~A52PH2i{L`~b@179iu} zx#!fg8c2EC7r|e4KK?OY&Sx=Re!(-|qk)uv7cU#eyB|pUB_R1PDE*}JA5;1PAk%jj zknu!;OjnU2!iqoY6xRe~&j3;$ZKC*RAzoB5SwA=h*b9GTHDf!F{>?!8hk$Sy`S?eF zJZ|FeM|e@8I0%2z{fa$`?TVF(`HFr;fP@hhp$FDGcuW z0eDWDQ`%0t5;9KuCmwk}o+Bs!L=T_q{ha(s9{x8y^fAbfQ=V&@o%Bf_eSh(!kM>ra z@>hHKFMGn@;o-mG;j=I1)W`LSPI``q-|V5U@yK(1t~30pp8Or>NzXoyJi|J}|JDyNV&8pV)A zV$obPj^;-=Sd-xKcCPhk^pvG$x*kuqvWZ0rmzc-KgplzSVP<`#L?`K^%?Vd%iQhzS z&*sO+x$!V3HSuE|w0yL?13T6}Y7%+QS;fNel8WXwo;)#%F$pFI=h9W-;6T}ySD}_8 zoSBu?iYPBxMaY2wv;I(nGB0rx59%iiCX*X~puvW=wPMI1VYq<<3f2mP^U!`{bb&rC zIGl=h7_j6L%O+v3V-`;7iXXAT!|`NMBkdHlwbq%8w>C&)cG}OJ%C{n)!Mkwy8eu15q#WLATKs zh0xRRKZ{qMb5rtBKJ?E|$GS|sz}Vd^r5qgJXZ%qwiZgzMIxffTIA1I)o2us?eEzTwz~+M}Q&v zF2jG(HuMKvL5g#3MyfR-)e@Kb5w4(J=EK$+?Ky;4zRdWpFT$K~sCtU140SE*4s{iG z26LalR18*8g`@q#K%Sdp%Q}%$EPFKTDX_?~4zaU0G$Qsc#3_sCLT)Zo73jN$TrQqF zBN?|7T#3_0#DyE@*Y0V{GK)GZxiU)5vk)oI`hexUmsvO{LvEGH6c%UVBojo~w%6+9 zF&Ug7JS!I58$ERR93+OHf1?+6?(@S(*n6CdorC>_eu?fgnU4$e_WjvvA2cR1ZT{F3d<=Jze#X#1XfFh@(L@h8UJO)!oj$hiA9 zm18=@*>Pr%{dBey5&ZHn=S#&HJH~UYV;P6?L!?_)rYd#+M?36SHJi-8P>F$K0`3oxcB)5GIH<_QOI}z+7}rg0G;MH{z#JW z(>PAS?{+^u;C_Z5zpJhLlhXFSK1v#8Vc$=)Ks&^Jw|MA~hi2RClwawgXL#s$Jv7@a zXZSCB=o>wBorh*vXLvEY>MV(JA%tgD+=q^)Y4F$NVql-C3Yi~FU3*S=$b+- z$tM5}xjFldro-(%a^3aeGiq0pr<(J*3$X07zRW9Z# z-eH-?Zomv=gjj zzvp1**$t{5)+@SFJW2FQ$HT2G@wfj{^~-o(Cf%6^e0}m{DgnTw=5nd}W$RU6zJ}VX z>GLCfs>`J^RllrH_3^o*bM)_o9&5iW2l1bP5WCU%ZN~%X?3Xb?{PDSD86J<{`*pI8 z&%CFxFgX-mwl{>O$#@x`!R2Y8>YTmQh|U!jO!G`qbV~5vep7to@9$VE-rsU6*|NRX z^i(tmO$E}?ajC+}HK_U}(o0qG#qCkE#srJM_Qqf4@$<%<`$VK?7+>CoMPoNViUeX^ z%fPPSZl)EhSI|kZ>y*$;j%mHlKUlaJ= zIPS{17-6O*1Ol12?FziNYxrE*CY0#+#JA*dTf`fz+$h=PQD|tkQHT&g{+%EV9|UhR?B@0xeY`ge~^71 z*+ycug1@;dJZ1Er$;817VX3m|HnJ_AJVqAc=JorcjTMgbh-Gh-*GLK_k9Kb zB?r0B4}FHo=$e%6mRm1!pR{t}Sh;L%;zG>a=XDvKXc$__ly@G;yuBY$X5RKNQt&M9 zRL9$gM2_$e1RjD4UnI}wA(7NwBfYTQ3QNS8e_70RkByy`i-q(wJj^bkNWMfKjy_hr z`L)c>&&DOW+;A%>-g?w-+!no4Tz?p8+a+H*W*y>Hs4}hS@SZmGX$0t)H?Hj%_u{!B zc(Z6&XBEE z!OjJJ2m^OHe%cfX{qOo`PX5LL-1SurzN&_GRU2?py_^Q`!)vyRueoZUS)Suc!kwU! z^>=$zYCayhWb0H?^@nG^Bi+^m)GyA{Z?*m59+hJ}E;-LSibudlIcD!r{5FvNN!lw% z6P?`+#NT9&XA?Q!NB?4_7Xk4~$({&AJDts@f&JM(06A~}B#``GAVlOGl%s)nfkq!S z`*tAu_Svg}=|G;>0lCRM!-nzDZanE}O7m-#^j}dW+3#lmI}=Fz#^_6CbLk}J60)xZ zVw@#=6_E0?l;$`$>7$h9Swp1XLm^TA??BQo1E+vy6{Wry5M6}q4j}s1*=$QFw-(6x z-f|%BU3NZ@a@r5i=KY}DsX)qwfQT|99|$M?ar9j>{2<_uqB2-dA^fbnPU#-?mzw*%C9@;(rZzdNK7LLToPO=#XuL!>sJRb(} z@l@03lo$gbuFn9O5=aauyJiTIj_^|!L*yd|>OJ2Y2yBiA9AN|5F%++pA#C*G)_Bc_ ziSt`2`6#)znev&!d~@c*X^XdhmV0OSa0 zdpyFW`hM|i{uXISd%llVq-;ydIR$H*tEwXvZH?VUgenAmR873=7jebv-z=g=K_yhY1}GX zMQLzpcu67b`$QJj;;2;`5sCy><0w_%^fOvp}p@%N?RXQ{@~!l&vF@6mBzreB=x4?E5qWP?(PJwS9C557%w{k8_1 z25i7@#TevngIwtt`i{3m}@=~YT!0;F8N`k$-*Gl1;xAFni@55zlpFA#MvW6;oP{Xo)v zN^b$eNk10yGQJE(Q}N$)nK@7F*XuZABT%SSJT4tVIT9{SrJn(;cr^V&&&&O_hp zp+}qpHsZlH-N=#N_AD>ybm??GjEEMNhl_(1x|k&?kA2RO>f&S8i8HF4>o$134wmE4 z(-PQ`DWEHR~R^Nod=|pHbGOB)7%gDr-^PfiOHD^4H^wxC* zb^uy>Zz<1vn&s-}VR6dn{X7|r^y9|C;TzGn#d(9pH}Q{SnRNF3Vrg_2q@TyW72R0J zspX9ddFo@>0X$?9#rqtm&SIo+d78c)=z}WXZv11~ye`$aa>(XW1J*$g_0g`AvJgYU zrRtZ}X`p-!vPJb-4QM0l>@|_?wdBb&-=Br}nV)uGGmyQQQvB!`1%FH@*n)uf)lVpoa(*5UgvM^^WlA;<6S4?PU%K-25&sa zS@ysm_dbK)|D;(*NarYxcbw1w21#RZ=ldxaG~XXt6o6ZRAL;c%`Fwt*2bIPm|_$4t%9=gfoDu}VIiaQ!M{ zY1@ACn~H9%?PswO7kzx@{ZJrLjA%b;nNx*DzuRt=Z9}v^`Ldvd`e@hB*40Gl)aUQ5 z&`Mw%HO@gXU3+Z$oXT*W>btvN_03moXW|^rTjZ(QcT-65+ve-n?_`b(XcR7$soHnH z-q(Ch)1d0JNgQkYz8~?kF4W;)Cooz2&V(^KPZ7W;wTpjuV=C^Q#OLoNl_4CmGJJS9 zz#r;(7+d@gM2-qo9~GLnyKOjb1PC)am_&?|j_B1E_7j}DVedw1usDgl#R}gTp z0;^Zo!^pQ-^ew2P?d2L@Rl?7Dm9?RN+ge)#F6_D5%L3TfHbIxH_Ajw^b$!*=d&%mA zXFp;X0q`B+t!V?UaMcf$8EbCe=qCzco=$72ean`QAe}+J&w99 z>z+`T(*{8kcPkDk_9^x%_9*f_PWdg0?TXEcY+uP=p~!ZebiQJq;!H)qVwPgMVkHo6 z#5yW^;!#aIgG@XF)KAB`YkqfHS3nvWwe3Df!W?Y5cGBm0_-j41en%HfA)**@tV#LZnUT(*eo`DMyLdk%)@=q@-Elm`|T1(ULno_}Wj_T2N%b@m@x z*EiPcmlqVm{j2M@doh?n$8m8wOWXc~Z5PMdf3SAD>^Qq06_$NARHAl*b$p*5Y@Lv8 zVB7U3H=_YXJ@lpHfnp!g>r%b%+qGeqv>@<4z6c#ovmf_K^}Zjp4ZQ~BiFv55zILRK z&jOrFWvci6pr&WH)rb2+eb$Zjea}hcGZCm415};RMYZ-BWBKvNHiXX;=4s!zllQ${ zhr=^>L%Q6?E=j<0i_QIk2dUVcF2|L^UA6Z79*D)yXXQDVu@zZ%r4SaTWPhLUL#$?y zr5NUjA9&A~6GF`?G(2;42M;nD#;KH(-a&g~7Ex?MggZL$FVJ@v{_n*POFxpGIXhw; zK5<@LAo|n7Xxr0rl<*tj*ag!>O*r~+aaVxnZ*liFVto*h`@9@ESQ!1Qk>OFka)kp} z>l5Sra$axzV4}yuu{NADYeGaH7Y$I`1bwk(PeXGJu8O1kM8Ni@5C#iROrQggibCPf zdvxO$`}lZZ5z0Z&XZw%NGkDfP$@l+%a-Jhe{Jg(qrMS1OuF-cK_3cD-KvC6jSYDw$ z9FL3Ghgf+~YIotyJ9_Q12ji(3$4&k}FgpJKscr zaC8EEc^WZ~R95bFEfDvVH`$4WcDur{i*SUb%14gjiZ>e`OWrpAeE6Jj2TTY?W+F4( z+V9BBW<(q4+Z|7B|Il}F?aY9lg;mUQWQ)*tWc-nd;z{G_$!``$U(wi$qwn&hxyb2E zfjwq#b3abWiyU7Ztu=?04VO~}*&03+3?%BaXfPd#3P_@UZxe-Q7ng}?KSRdvs4;FR z^~AX%3q|Id2XwVR()RofM|R4ZIZ3-&%@#RZzLw1KfM^s?mS*yI&bn)lFShlUn|@8= zuSY6(n8bfAo_MWzwjSHikB*)`9I%dR%%YWq<>IvI0B3D{*Ugs$eDmedYG-q|358=; zi6Y5IvH8-lXuWd3dkHL-WP*^Wiga&+ox|(-a$3=u71_TuP>)dw60|tQzSy)5h;3{c`57q@hD&Tz2`{C!qvyh)>@NAp>+`#;pYVfwr zkIe?u4^J$PZF1ymzvsRn2vmvFK8{kJ&JKJne~b2$J_$cOO8;Z-Gq%4rN($1||MMQX z_nTka&m1M1xc8Sm@p#L|rswM(xv~`{!EzjXCdeg~=8K@(cMbLc``WMu%6BzBr|X*< zef2f1oY7ux$oc;14K@CmIqRo4toRVVMZmcnLEznbmVX(-xu&;$k07PV)?2bYru!v+ z$@slmVC-YU+2S)4{@Z!V(fIpPgty~4qlM4W{_|-3(iHsW6#VWK{9fhPA+O2Kb@OYd zp5sx;%8&a%>2AX>8GoPh+eYCx>wp#CmC3?$9T445@Jq%YZM@_>itXTH=$)7>uy|!#vu0;!moWH_3f3g#3WYv!14sk3fEko=eAin@av}$ZuD9*5iZ8zl{2R z0>;apQT!i;u5-_*YgNd4acQvW?bM4jCM zWO|x`Ob_>UoecB?F=R0H14FD4%ST2_XF`fXMYKZvAFClz*B%7 zK!$4rP6K@fknt}9GJkqLR`yKLOm~|4?}ZT4MKkx*!*%jZ&vxK6(Dpp6cBNMX@i%!n z{xSXu>d$d;`u_>Y{5}qx0p$93=9A|>Qtu`p<5{QlDxe?qWlApqo&=iX{FI*xWccHO z%-_4?O!&8eq<;%!_-B>=5s=}(r}Rxg=AY~3PXsmrPXn$2o(il0GTqA*7XhckKM%-q z;&yU|=Q?xB9|olSd#Jp`eZa}^|0#r_igHvt*05y?BAg% zGX^1qzqEeE9>sRWO2vFdzoJiZ5PEQ#*00#3*sfTqn6Kzp1V}ipi+9d9vs+8r_ERn- zjf8Ul939_Dq;}rXL*VyO^FFrR$aMg&!UBN`9&G zuU2}u@_z;y>d({sJ_lM^4DQ?Dq3`q1pYYJE*Us=vhm-!WNB%(%&3fgO&-H}obLiwV zA5NOrPWodW{+B)Uutz?KvT%lHd*Y<|96RZJ5537lbA6pt-npPl4qTEch!N*BN%!8Y zWYZqMgTVf1W2n-yEbY{#E82{r_+mBZ$_SBmZgZ9?5vy}V5ZRRNj6po?7l`J|>X(TW z&qfXTQo$mN7L|1xi^LR5Lv5ouXGzXm;yee><8hXk`^+ShGdW+UrlPH(sd0_3!uWBM zM19=PxhgNQUqdqDSd?c%nuT~N4m+|XVph@;|I|EG?yPxpXZz`79ZPj{Q$wqBAIO;T;<}H4ha+r<88L)rZcGUWz~F zlj`I`|Dms9#(F&K3Ukmo34_<4?ejf_8{nLW;x&Iz&Atr#QSaNi#@RWxuO|iRJP9UY zt`2l9IwTr=8Uu!~Y2lc6!v1dzd1BzdYt9Y08<@et7+D9d_A(XW*z9R`0M`iBCs+~e zX~vKv$Luj*Bl4c9sXO|3V?E<$h~Jf7%nQ_+{p%)5-IRP2DtRL6M>%dUyO?i>KX!%p zSspjLFNWW);7+EPnF+SjSOfRC$BnFnJFd%ueV29!hGSwcC$p1wOCW`uUt%*A;8!D# zPs;4%Rw3Bj>e!#3xw#A1p#vB$-Go@JS&f}Ie5r?fwmY|{f$f+|KmvL(nULAJKAlN@ zS+d1sPKTb3O*?(q_MZ7bf7kfUtgg|`8}TKX`+RiOeUOc-e_WC&sk`Oye~#&o1-FG_SZDQo z+iC7wqxOf8kp`qvb!3U?}z>dekdSp#BM#7BeiL>0@U)QO~tXna^5 z^SFsQwam^sy%oT-WaE^htFYHDj5`fnyh3I_J4`r9yLynu<92;pJl%j|qo z1dF$YqT`BUIWeiAf#{;~xINC8l0}1=ClqZ|a)>9y=5S}`)(ot0@4h3Npv=x z1u{G{VadwOhGllLr|!N1Qt&m3|ZU+<@cnA+U+In;Mke4AY-G|6W;+i)@ zV8>Sc3-m>hXE{eA-^~pOmmevjhmQ(wOdlpaw|I)dW2nzQDnm7_AntiiB;vVAu3|9J zJdDT^$>j;Ykfa?^Q(&D;ZkHtJVw<3FY#EOE3!)@~wj`nmfN(JYN`l}l3Hz{{T%hT= zk<|ic{PCSQbQ6iLN#`>VZ_R@@GR~VMPCh_GG}Q@#6WjugBEX@Lp;hJ??xi{{t)8Jz zA-M?k(nPDa1EM?lDIDnI3iu(8K0x46w?I?`{)+!nDkE?D=OK?^Jpg2t;LPd}zxBbU zsRol9iPq$1|L9snM(f2!E5WJN6x`Z@A)fdS?KJS<&~A$2H=}E(0SE+p6@WAooZ5$O zLrAc{Pk*@sa@S2!l^x`+(^x3N-EPzpoNDb|AL^!hHdnko=$#-)Njxeko&Y2QeH?bv zsu*mCFxod5wnEJx`X=~jAlrvOqTw^#;bRhhk_|tM1CS;SAK}W)%_8z)D`Fq0;R|d% zl%}U^(*5pWCS^4A5>FXcG}!y0&zN2KgZ9!k{`TpMZR(YPV8Ot5k1BDsWpO3Ogg4&b zMNyusROc{cyISn-{=cwJ2PKP={15Gi_N-g^-~8iT*8k!1mvu1ZWdZKtf2Sxm1GRS$ zFFlxc|095l<^C>}JRIY9n7*zdGytw8109ba5{U5?I%$W5J?w{o?O8>c!G|IG1yKZH zeDyii;e4_;BgYtjdz9%AD3xTe}X-U6N*};jOFR}~x)e$*&!QFt&&D`@xv(H61B~}hKK;j-lstTho z4xI;{bKQ>R|Ciw-{a-|9Q`-ot$djY92AM?|>I}ywP%A!BY``7_lr@P{>!g?ZoEE(< z-|5&t4kl$oU5D}8qbPGpzYVuZ!$my-@cmHXSodVs@FL;alA;A3&_i|6$LWu(a+cj6kukIEaK&P9|0H&*hnfu;WH6 zlkol>UdU2XXVa0CnZ)yOOlmnDiqqxNl{(rZhw3a&hu@U)3}(UC^6$iW##r1`Pds*T z-g_VJ_2_%Q=@~7&H;o0J^w@Z;oGqW?QRHm?tvtGjE@$}CauCZr@p$WjP0y7c zIh$@9pH(?pdLABQdc5JS-n;FE2W|SMd(!t6kDMi~{MjCP%eQFd&iBX_1ecbF7ljM3 zrKEI8QMe!+Ec405%5ce|C3<=3vOtlL%gTaFOO}*}3xYlaOM{EJMys@`p}u+pS704M zayqP-72xoI`f41aSJKqzj}u^)H2E)Wt7_nutro~(ARa++jP1wbp1x+euJP5JUESQ; z)>4lPt_;IDC-v2}AjD86k39j|QoGt$yS_PsGoXA;Eo-V8>#vb5Sjui}YUL_3Gu~fq zEojd7oyFs<0CN1*d|!Rl90b?toBc|I@Vth{Gk*)%XW;7GwS5e7PeFG5806l7T=N*@xZbaB402rWS2+ebuJ>Cp205fMkKF>C1>6cm@X0p9z{DE(_7$k0Lb`m0!n^?l)Fl?28hQed$ID*Q~xs*Pg6V=$ox%I`Y<5N zaX;E;>U|wZy)P^N2zWO9zXwFprrrh20ey$kn}FwlUZ?abU^f0PQ+ffA;m-q3;rd1( z!ym8oyAw_Lw}9mT7MP8{XO;dDP~r!oOFNbJfF*vVHvuJnrB?wN{xYQ(0409l(TpD` z@hkl<`W+1a7Lfek0wsQ>e*~2Hfe147E}+D(^d_LhukE|}F#TTwGXFmX&IQdeTHYsXUwD(!5#?X5^lYV1 zQ2On|jlJ5}fpVV}xlfq%6F}rXO3zX}Q*kno z^4t*1`2Gx}{2!G5jpDBq9|BVTD@u1NmMCT`jt5fDeoP%x?_U(H9pYbtrk?Ms|5ug% zq|#hZ&2nxBvivy(&HGjZn36qZi&3NC&s1VcfI*|0siX0#$ z{Ung#dX@f?(j2@af1}b@DouOEjJE{Hbj$}9fIb-*1ZDtPAGt1@>3$Of7xO^>3CQ}h z6G-`cfoB3g3k(6dhT|;YHNf+L96SpGi-6R}bsLkR?*iaL&=Y~w`}TMvHw>izuYio_ zb3n$k5y*I&fQ*Osim8v&y_wKAS^0-4pX;%ij-LPvfn2}De9|s#0qA>xLExu=0pLx* zMZmSd0^mx;An*dv(}9f74`h6Y0T+X2;o@)d>v)%v9s-hnR_R|T{V^16fW1;Q8>Uz50CMBp~&_%{~oiF03H^2O#7Bozg!6GQKYW8Q&*> zjBhiL_p=d5y+I(uB41N zzhaMKyJDqczM@|dAmNrE9nN*@uR|GW`@P1#GwEIifcpb}T+3aFmmS@0_>t~b`d+2| zC``KVvXHag&;@xG;7Z{;T$`T>>i*7&O7O?~$JH(%v*aI@)dQ29a4ANq_UpQZdut$wAuRlZsC zw?yT;mA}R6*YxaEd20rBc{^!4@NN9!L*9l=42B!pjAYl;uC8iph*U&)>TW`* z-Qr-p;(D!jLbdgAXt!R;5-%(F8JC)TXs*JsWEBndG*l<{5ln;?B})q3rvwK|R?2>f z!f;t>QD9{`ZAHZQOu*`Mu)xsCBlT>TU_eJ^6J$K2an<3#9NjoUuSC8{Ir1ErPi|jZ zc863rrVQj*OfKplVP9ixrnJ2qICxGmPh^8iUquTxJj4ka+^AiL^EVs7@!Za;nkyq$ z!rNsvn?z%MjWMB}*tg-{4U&A92jXgOYIaz*UhcJfozRyszyTo~PPJNtCA)!1_K7%d zpW%A4=GZNwx5W4)?x3L^_t1DS`>-B93q|03NM*N)Ck_;!xqTzegm`RWa|=q6jG2uh zqcBn)jw)MD66Ii&Icdh~PO?+R)^&55b-Y}Rh=Zh-L@61zgZ}5vS;P6)dLFjf-_p{6 zX|nj+^Itz_&3CF%#{RcBrO^lfr}np;tNk46!>hyBJPms)*ucNf{Vn;b$B)iET`&53 z)HiUJe1D3c^Ixj{EtS{=O!tQ7bGPm%F}@?`?^Eq>S#g31$^IeTzz5|!!`F*J1!dV1 z6@IGyE!(Dwn6HkRgiH4ueL~K(D@q6ceJMVsxys)e%>J3N#7Q%WWem-Ht!7eP~F()|5_;6>Ljn_hM{gfbSI%jW6WkO7i>RLz3no_2!( zRzLMdK8%&81MZ-Ihk=cuyCm`NB8j*_Ip{$~qT|n2rKvJF6=*5X!lQ_MAEG$|T}{!nZgjI#fp0fNze z;ph{hH1`+ZKl#ubQQ#13v#WO*D~*CV_D$&F;2~z%^kLTf~?M-J)ZXz1<3NvxKg$#72pY_tX9=qIerO7UhVd zD8=rSUqp^K!ETo16?bdez-QAES(p1f+9#WbkBN{JiO3blu8%(jSQ&V6w-w~N9a)?C zdy&I^)K+Fha{rFxhz#qusW>=O?0Y!B@xIuqJK>2v4VDpoZr;PV@sA@&=GLRIDz6Xq zk-PL(cxqU@KK$=`;Q#scz-UZxm;UG0gFDyrhOl2V1mnW)H&+lFH1X=9u}u5Ku*KoR z0X!+YLtP;}sm1-kiNHSK2Z7sx*sE0B6Y9#xE|*|0*5xC(-A~6?8&^0N<494y6Lw>D z|3FdnMXBsi|H-eiiP-Wx{5R`Q|BAsFWk#@zfs0`GI=sq_*Eo!%St%Ggrqpu|seI%0 zK*B3?^PPwS3FyVkPeKl#jn^Vl(?9Gt7k$HM1n9G!c8g^jg07#nF`bV!v9@Ti?Jsld zF?e;cY=+Op?Y%$4zAN}f(s#v=?YjaggfCODTh!r&)Uh+UZX@neyoMOic!MU|$IGS`lcOLH>`e3L7XaG-=eYr0oGQI$o z+7|#?>FtGG3lBlUgHVe|9!Fek+FrJA0Ji(_w}9CK2kC64MR&vvburH{8f}utaXQ=f%_wb@#et$Ln4KiU%>}wU?M5!&y*^X*q5? zoBOYy1$qkb4D5u=@?oE>@n#~gF?x>k>ai~hXII2&kGu?LAipO<(%Za+^{?Z?ahaQM z!c{T1Cu`>_6n!`xEy+S1-uy<$i_}i00=$Z}z9_i;kN*VY~Xahch2|Lalk5JA{7a zsjhe3j~)9zH}^{-HXK7gDWdSMMW|IQ7CbfSu(5!HZ6C#EpH6zZ_oE{Z&&tuB{|Lt_ zuq|{>9zJJw91gKWJv`~ZtT8$p`;{;hZzb!=^a;-I^l z(RDN|>}8OS$R(&+MVK-(ebUcEc*hs#Y96bPRUIq6s@qy2Ku#-0AZgwe&j@sf~H7?`MfELR;CZHqDN+Yucc`a zZ1KH`bArv@RGTMhG_QBZ`)P@nch$t3wMzzixlcO4Q>^g#bITWMK>UE$B*YaxnJ2dcF%G~^CUYSot(;NpLq;}o`PNtYIsCfU0jkfK%#VYYp7sN)>nXtXy zcA}}B(Z|FuI#bFQCfQk2P-MSO=j}EdL$E`;OU5Oz1qj~w7M*T{e(V+Er#6KABEEH z^V~;f@Y4WWThV5fx8zP*; z%Q`OYTz4pz)^Xs_$T1xU#{$!tuhSf{wde@CE7=v z36HP1_X@khc+XD$^8^;{v3wh@PiGTL^Rhn|UFMk!bxmc2sFKy-<9VZLS@U%BJ_PX` z@UUvzu?odnQBt5?)X zp4aNQ-5Q7Azw?soOa7B?t0yv)qPQ2?ayZ;4^qLP3ot4|?ku%)X|1tKE)Or1_dOLo~ zMkSd$#50~6RUvPBx9k11I@qbCv+>IF0Gf6poX+a8e9QCRF26FGHT-xh=)sAe^jh}6 zn!i&$dTlw_{OL5g@61u;Y<_G$XN@9f^JVYP!cpXO_}rY4i%gbyPHxauv-e(nUx__tiYc^dP|2s+_t_5Vv^*E)^P_%hipma#lmRp(9A62yF za=p^sifDMn^(cM6qJ2(xDg7(O(b_&t+m>T43MZ;nlmv={z69-qd8mp6S>_9ul`RXG zEOz+GjwsF$Rl}-ORVxhHFi?GKYa5Q=UX6)OZjJ)00XwO#t`%ZgBX(fX#FoJS|JJoi zt*xwo+I|*`NYlRD1)e+hwd*(7!<>vG}&xMUO~XaL7=e4 zMMGmp_(Vk+lHy;gX|Z|(NCR_GJ5t33!Q#^Ll^4ohw?(Kz{t|Am6LP6mB=v$avrW)! z6`aqb+Q}BCI@cUEn2UGB6viM;6*9LO5^2txZuS~&jSN=P= z^GWLmK2GUAI7vK_wY-0K7OUXxZfQ`e4}G24BM{_}sMj zDEMYkwl$;RlfK-vQSeD$u4)u~(wCb$3O?;UjE{m(`f^_1@lfRR?-amyu{@($=+L0pu zh~AyzeJq{ZdyL=Ol~}B$_`OtqTn^tB<5T{(LYEo(W#cR-Y5W3!$}2Bstngd zndW|p*`IHChPj_)?r$^uw-}a~`|Etal)nE2&mz4$!FPe51(knmLFMzspvvP!Q2a-O z%I~*;SHdE_LecxdOQ63Co)7&5cntaW2q^!b2jzbqNYziYn*Cg}zXDYF7lI1^G{d98 znb3bcDyRqAXFeVJc~Is5AUF&B5?BZ7=sJay1M8vJ8+`>RIp>12LFox9933;41P{<3 zQ20LqW&aF#6}S@>7PF7@h{o|M8&sjx_r*h6j!e z1Ey`@}l14qDTj3jZdfTa12>(esU-W%QLsR~vn<(Z_-`)rsHHe^kDG6HI~K zpz7_XK*etbsQBJ!biKLHF**UBhx?gEPXNz_9&hw7=m^Qb^aCrA_Y5fcJB|JtDF0tJ zx(k&5j~KlIbm4=?;lCb~|2ak{Ko`Ez6F?Wf(Z5h76PT%KrOi|1Th{3F)JV z@2?GY?~C}?f(mDi*)IbX&ig@yvjCL5x#nJFcp51G$D8|G&Hgn4k-Yx~72ePIR}1|d zC^-+C{pSs(r=xJzf%2z50e=%`@=x-04s9CT53*Hgvh)r4<|g_;+QEeSGOFKOLHYYf zQ04I@Q04g*bgKOI#4(0Zuir#`gW*O%!W$o@r8_2@ZJ@%XmcKM0Ed z%VvKM$l^`nL*QKSeW1eOTj9cqgL9x&_{4jh)su01gK`?zXSmyNmtl{gj=Pn=Zo~Tx zHyd^swi#-Ft@y7qY%r`boMt!)s_75GkYs@a!; z3QvVEzCOxL@?HQ%Yeh*YeaWM+zaM-nxE7=dF24?}0kttwd{v;6Z}fi3i!5<^l024g z;a?@V+3Y(&OnD9eWM2hJ4$pc0P(+QBrBLY>D&4|v!w$nH!y3c5Va%`(PtLz#w_%52 zlVOcv+%RU?N4$6(*K62q*kRaYSYsGB1f0L~lo<%{M(u%UKVP6j;zf5W12EEMbna9h znd^*>!zVKUuiX83f4RB)`Hf~zQ&=)5issiwC6Q5mmVZB=@Dg@%*Zz5#H~5Kepi;=l zo9J$%zi+hHx7=y8cF)Rumv~CQ&(8;GdxiA-{C@qV@W{QFmqzBdo}c$yX1DQs{m;*1 z=lIQitMNCPf8DDi`D-owYmL9g+%=Yye?Nco&)z>TuZ&jj<$pJgvJ7pIW0d$;jRA71j}MwjEy#n1eI!MmG(wKpz(jH6`!g}93D zGrHaAGArNt$mTC^GeO4sA7bD@_7Ll*-b=ZGY|56(-!tNiB$p2_W{vpw$}M9xE^c2N<_y&QTCgkVxjF65!E0K94kqgbA(;yT%Q>}k zYv(8HTnJ|6#9fuXrqOiSoY2CeSr8d#>69p4w1*2gubvqRJFl76Ev+-v3sYMw)6m}ErrD=&BURrBW6)h6c_bV5TR zi7T2Y*%d`!7EY_NoyD#oF^zt0iyOc)1tPF*T)KSmjf2%U3yE3M-o^!6nbplJ0$k}H zoT4Ucnb_%ZnI5=z%N{Na(6U-Nw1y=$-7f4EW?j)PUA<~W!9^OLy2OifBT->o)7r8o z)7ZQkwa$`0^4xmFEHKHXeAlUX^e#!1S~2+vK)<39p3343K{EE zN6D1N=3&%DrD0hJI?%8T({dl2x`1yed+|pS9WW2FRJ@BaB2We`1Rku`yZg)rSw=kv zVdS&sPrUbR+67hIdS>^YwY9Hq8&NM*W7AliA4c0i)`}j+96UL2(0D~=ztQTp_@C@Y zd+*s+>%U1JpAdJs)}6w^dZAiTUwNb4FpZ7UU=N=4-^6R8ye3(&@aZZmSgA{sH{oxoEE^k_EY2*>J3|-Cd%*gc517Z^NkMw6&J6AqEBFka zq-VMkrG9Us>Gk`r&NYTM2B9whyoU&mq_=vHa|GKoD|6O(PC`b>Ys&E__?9bQA{*q6c||)+fVpcft5^l>_-;<@_MV{_rEyLr}8^o zlixRa%>qurui`BK>~GT9f#iWX>5}#tXp!AV1$|V5s%^@Shc@!h>$dp4qK_)dfwQWv zcYa7k-TB5qW=YqAfzIET-F$IYS0yo9&J+jxIa7I^y3T_GnM=DGj(kXKIGw*A$Xrl8 zu<5zAZ^zSyOH$2`rMgOMQrr7V*;4B~m$2{rk7y1Iyr(j|y??Cpmfgh`%c}f_QVYkF zB~sa){Z9|p6Jej|ACm`Wr`i6068*Wo5}xk*QN{Fc;By|*5>O(VjH?OGSB z4sI(*?d(;sirZKpotjXn>C$Zr@Lv=vQNKJ_x#_v}r%184;=ywCBN{q?Kj!umDjvMH zB(?pevec1JrL)&I^p}y22E4}<|1o5K5X8>e*U7Sa&$jh~P}T*S(G?ptYbHOXJ8O4~ z)z>g>TK}@>uG4k!+0w$kX*g`#x(}vn^9EAZ`TB*o9FuM?y{oRIZ=esE*H!i}U|;Wy zvs4VzX6SzF_N%bJzNG&$IhXWbBpB155R~!XSy0nINf7UUo1i1S?>MaBQE}Hw zLe?#SUJD@DOTBFlQ4c4VN|ZUd`bngm;PChTifPGJfVEty6vw9 zTekU94{lwss`z8CCq#XHy9CF%V=vEYl{g(o`N&nDaO~3AJ2w+ds%zoyZ90ahP{VP# zM=p4OYv;P%)E!Cg*rtzCL_&x7EGa5I4Zfs@lg@3EQ{mo2?u0F3)gSjyPz1Stq`kuF+2-|R zxDN61DNZi>SeDFyoW8T-u2O17zET%-VLnG*u<4xts@nmqcs^9W(LoQDuYW^*&d$)b zY}X#8(U$wM3r;!dpFJPfYGQriR((Al(iaIm1DeqKY@hR@%sGw=mIiiEd3|ss_QU-u z;Pe>%D=FT=zJqt^$u|cEcJuoIzaR1Y8NX80)&1`)Mtk)3|3BiZ#MSGG=|k8xXQ1=o zk*lX>rOxTfr-u@B4d$_Yw*qa9?DnqYk)5v(RLt70j}Piv_hetM?%nj{+Um~N%QhUB zYUU1`qxf{a$ft`B46j7Vt{qNQIgr`8{dcCm?o_>InV#3R?pv%6@gKWp5|6T*=VTZ4 zhCZFg5QSb>boz9T?L2s(9rdLN`3;gH!4EDs{yvkEeWKo4zxwP! zK5zXW4}_o*GLyIP(JFjx{dfMk{PN$ww^24;d~)ZUG8I+w8(a=qyO|zY*_aIXfNq#n zpZ!kYE4Lx;9_q7u>-h0aC!NDV#K#~|<*Ljr{6gnTZzgl| z$~s>xIr7=gC&whS^U7+o@66TT%TsA8SATyxJFgNcQ{C;ywHvv5^#SMG6(ZH89aT*C z?4m(ylgfIh%u=r`LvgO7a z|AQk%(j`C2oOM-h)@5Z|N;2^+V=~8HoxA^WYN~TbRqBp6G!ANiEVXki z?alyE)f<^t`V6)IiXU-7*^jQ}c$9j#l(dg`yo+`a)Y0@XgOGR#0;2Q-_k9v8|GDvt zXs*?B59kzCA>7_T$HR1PPN_U}a4L+Fp&&l>|{hMm%GG|kt#a3s{Ti3cb3m=)F zQc&ma(`CX$s?ze8_KgJP-jzD=os#w>deBv6lpv*Oqlj7bI_gYA*;nS!AY*pe87Zmk zQ>o6E#$>o;>%h#0(oEff?IrD3X1{mG%QbPeYR^^N_gLzVKZ*#V(%E~2(V6(h=i1+K zV0&5Stvza>56o;D-+q)@%I*6~c`vfNTq{{9Z{HqDk63DSK^n99BQ2EsHt5K1@0pCq zO;5I8?+f4eXHi^j(+y@vc?aH+i?~fR)!8>jL$A{IWAsfvxrZpn=;o8CiT!Vr)lofX z%Bo|1L+sWuQB`68{Rrx>`+i7&c~8a0NARR>KP~)ZI)beV{8$%vV#&~ySXOM(xW{Q) zXHNF$?O2rEb$U=a25Ktq+nJgXRF20g9(=Czu_FR9Q&Y2Xp#3t0Qa$FSa&wyw zY#-l#Y5y!qR9&0husQQiIYM--Z;IV|w)?jBpJsLEDPEE1G7~$0KenCsbZ*mD)i8-G zZ6C8}M|QXR3xnhTwjloae2=f#`RHqSt?0i$`~5p!$ye^))ExuG@ekbUB|0-G0zaHU1Kt1T;0mgcl`gGo_OZW$lEg7^!V3% zLE&XA&0ME+DDUHzvb`FA*IFiJC51s|vI`^(44-rsx_9i2IjkJHhS z7}6GoW8=O@*P_#XK%bB7_Rbg8=q=Kr6%(rWxKBsL#$IX?{f29@kNKQ=vf{q&DW5Sr zDjwX^xr0xl%b1FdABTM--vjlgwv=U#(go=H3XwmzR`2O=M|k_u)qA#-W^U>~Z~NZT z&c2fDj{f(jbJsRxpS|P7Ubs8^N;zEYcaL33@1~sw^U2JW`g(D8M!IwTbv5nPZVD(m zJ#`#kfx?WP`#j-ktm}PdUvOVyr8hVJoN) zXq(-P!WowKG`A(Qrg?E&OFZPda!tW~!TI&+`r7!KWjC(WRQsA0%UG>~h?zsn%I4L# zwz>5*=Vr7t-twMUy>VWWD{qZAu>7!UO-pR?%3EXeW-e%mx3(;AlL}n(nl^j9h9Ke# zGK*KVOdO(}eN${51RdaT29@T}`m{^LsT?sQvH^r4O|q zdzmyDIh4Lrr7{3>MF4}cuEE?d9mf40b8o}_l$hqMBgPW1o*8D4d)(YN<2Y3OA29b? z(mPcA-2w-GDoflrjY01I{B|vAI1vFB{xiiQ zGn{*+xvQRF2FZ_`d&4m9ZRY+U?nC8&6`LDn{+8cR>ECVcKN-fo*Y?+KlaL|eCp`<9 z;oNJiU>*8X>^a=GoJLCBy`bAT4ls;jT=~3DH zU63F6&g&DdH9mXKW3eU0`c0DeG{1X{&+@AvZ%${a)=0$n8ow8e&))l3Y<{u4bK%im z=-tMr_umd%mTn%>xK@(#tPJ+5uWXYI+5 z^6rK2I^%1Iro(8Z<6-zZj8E;0GroLg7Rvjl@J%wkH?=cGe4+e1iX8HKbZT#g+D`UYgdL$hja)0J$r}ZlRn{QyWj8eXt+izyeoSivG!=laG!_og;DUm317!= z0(l=kM7UE*nR+xnYo~?`w+_DD#y9Bw3#B6i-=x=qaQ8>U4VBxc;p;QL;p&y{-L68f z;9l?|@J{ez@PF}LxB$EhWC=Ra4lPl1-6oAk^6!1rbf*a@Bpt`5FG ziJJ^{|DEL4fs&g9X_FEUALaJrC%y<`5}z^pPLS$1aS@o{?`n`_O`Zvo{gbP~^RPb) zl)lM-lEG(!-!uG<;T<5aZPyB;TMXZ8cmYT_lXV{*ZE0c(NMCdEWDtLoe?$hJgZ<;6 z;`1fL&4xD_HiB2eCw(&clRlaBvSxxb>671S_Al@PpMm|;hTB2KyT|au;91bRM^53r zA5^|y14`~Yz{{Y^jed=WNb$cDOk)2bQ2eVw@k`H3350$II};(>|de3r*u98 z;y&?VP~rR|C^;KJ$^DSg9{?q1Iw-y~%>Fns?-J+|Q04X#iB~!O2dHxT9;kY!IWXD( zv)O+cR6W%EvC8>QQ006JD0z*b($N5(4eIQ6)uXe_UV2rE-$6W!?>10$lhN-6-zk2> z3d3I$i0Z5EeNp|Cev{^}@j&W)htoMCh&cs_I~cq;e`nXdQoSwpQ8$lu?Br-SXF_~w}XxkjG?UWok! z@LcevSP=dm5Ua@#fCMr54p8N`#_Zn%PKB-kF$wa((Wij$Pwd7sIPQMKdqBE~&KUoS{CRXg{tv-)KLM zP+v&ye%wIY>1aPrkRG4h{kTASU!wguV5!OT{eJ1}$ldqzmlA*JnfP(%M|l?Q$C1*v z6z#{w?;<^-{W$QK$P=x~DszVM`*HTan!6wOu7Jn!Q~6|c@1tlx?mQkl(SDrxS)={9 zTlYfB-H+owVzeI@N}p5iejKQKxI}xSzN%wVDk4NN5k0{Ll$p~E*p|uS$%)c}e{*Fj`e-;Ukwz$YY zZA%d?y{NE!&F6$^&F6&aizD$_6AAC6i2Fc%-hcF>|m*89}%=>d85tZ7W+UU!1O~n2d;Kb?R>?|q_P{jcJ6}oytyv6T)>3h zL#%P_#Z}X_qkb_VC}Axt*Psl6)`d&on)bG~RjV^COA1cs73{dcX|Q@maZFdPX=L&k zO$s;99LX>N&)1mg|npuQlt#Bwyn|W zf;bfcpA`k0c{8u6&1?EN>-?Vjz~69*kCteDBD&GdL`TxcME8*PK|Kh3c-0aYVsQ~Q zuU?i}*1UMRlya_bxMp7C@>R_rh&8TU6$E4X;VV$FatUIcLW(gJ6-p!{CE$iz8`lKd zBQ74HYF*_WLdpqY6%@xW5o_9AjWQ*aymfGfVA!@uco68?w#?!imZRrFvlr7y_U#UIc;X3>08mJVs3w+wu{{E7NUA1+_$ zD;6)O+>6Swd2tY%8`iWeUXAV;bz<2PRoup_7Stx^&rCJWtZ!(XJ=Z+>8bXZbre|@V z+O-XhYg!jq4~}#dZRu&%=bL^=+!^i>yRfSIozpLx9*e{x#95m1&b7jHl_NI(-tlV$O_KpX4`u zpJXIYkGtu&%#=lGtV7_eGLs>WqK{{ZA3`&_R`5$A3AD~cS!w|UdDwo?+qYU zr4MV!Sn~5WBk60zl|h&$i=W-c9@BY1j2~o*M2@7d(P90yK9jefa^cgOH^^+w6Ff}e z=kg(8La0L7(&pN#TPKgL5bO@lN3JZ$6Ed)eQUwEd53xe6ea{Y@(S znN}u*${n*!$@7P0dqfsH6@$&7sjl}OF?Q<)xY*m% zb#VY%QRPleChuwRPvwz>bv&LQ`r>$9uMk^@hq za+dmF-(zz66Lq;q6w`{k-ogL=3)!pGex3!ov!7$YCuklb*faQ1BDOWjzhuvc`R};c z79YyP%W8MGA06CqwKjArzvGOSM~d>``m+1EcjSRo*6s%j?lN1uJZrs<``g zXf{px{dtA`QXIA(-dyRoh-v`MGI?QhWyQwdDr*-#oX)*(O4&9B_bSv-4p(gaJ$C7? z+7fERF1uN!mdg`1l-065jEg_Gs^o!GSADPZlv07en^4kc{a3PUUCGvek;JZxb#jPF z4X%~jDXF^nCf)pB#K;#;@`=)uVpK8P7@y9LcM>0l+uP+9J?!p#y5DESbZ&oY@2x+4=Y{2z&G1teiP4@hQ=jvaI zp#NRWl5{NJ%(Gkx%bmq6w>XwZJPTR0Mht3pbhSxv!HQ3^(gz1_`CQO@=nm{pg({Wm z6G4e@(LVim+f9o1o20rXj^NIW(;@x4cpO6h|Ksp;m$)+4Sue3gJCv3|hS%DeK@Jg% zf3@$9#<^;H|8JYSd2#*{;f$1yeU|Rw_{z*-e}s?dI}`oJ7ky0O@b3P*K3tk#kH}BX zoLReILF2621vBTT8?Irz7E3O?CN*z<`kL#5E^NRNThWqfU9}`e=a56W(O;j_va)40 zgC*&Y>pXAQ6Kjse6Y-cE3b-n7kq0zSIn@3F*~_SpHk5lGuds~1&lsN_0j2+z(Ba(U zBe>U$;NCQXd&daw-6Od7j^N&B?#Bcv9+ZBTi<}v5{kut;AsC;}`E}RGdan9Nb^Lk{ z2K=tiEXjU7GQvLvC#`??{XXEg{4em!FGhS{;P=8P_@0Ju_bB*YgKyU;__Y4rI|{y8 z@b!#>Z#jGqjDqi8__mCKPji3W#%JX_DF60S{&Cg;o&n)W>;!2mCVvg&tCRS$(On>Q zA))z6xvv1}@+NLHx*nAOIUrrF$q7*Y&op`hDF5S){sr%y{J#Qu1M)ZVll-F}ow(g-eS$?xF^<294MtyL^w~yB-=4pTrAGgp_CWM=;1v9C z2NmAez{%j>foFp{e~vL-;zOYL-w&Pxt@C@Pf=7X8fI9C->D>=1Juic2LO%&g{y%}I zfp>u?fhueER?N5oRQyw*HFZci`A=FF_%uJG`E6u6xXPy=$?WHoR+t69+ID$ z7Pj2N2}sMCif+W`V%9X8TbUPKybK%WWE(SUGZ!#78qUDs=A(0+_>|@4cvsSzj49->Y?- zKkIz&ZZ&`yeP?7mJ)UR%tQn>zX0#5MH_`KNyo3J^NS>Pb8iwv}bbpxhyK3;sk z^vThDFa5GXW~BMvX-W*{T>-?l9BB^*7EIo9r1{>>Ca*~iBIY3S6u-59;(YI3IvFy1 zP2P2H4dey3Zr--lKMSYub7S7feD7|;KMS`eGHDBmLQH>dHg4-G^)P^NZIk zNJ`WF-_zOG(w&!2iDl4HzxX&rGh1{bped){&9X^brtt38&W|*Avicb)P3t{{9o}B0 zaP7Lu!ci3eDE`jdrGzAKxXJxs8XrBX^7@j?r-=8;boM0F z>QTErTIAUD^pi52I}^+qQ|7PIkUV-OxwCC4|7_;<4?MaoL$528?XG@0{WDa$CGGfh zjw4)HMrc09v8S4kNSBQ3ACo&GufG+^zgr28{JRzys(dDG#eqrFa3KxOL_dG7_(bzd zV;ANT^ZDuWPwOWQ$?W&ICmv01s)?FU690W#6;5_wVq7aD!6dF;r|rl{=iVu&=N>xw zh!5u{+2!~J=Vjhkie z;Wt$Ly3JklDnsc#?Kb!8a33oERkS%W!-ZdC?&|Mg2E||Va59y+3^ni0T%a?<%_|=~ z5X}23|DEyk#1XxsDLB^gJ81LJ%5P^pe@K5t-Rmlwe?Ao7r{QZgK1=_gc~gb^IKPGw z_%uKAD!*yQr}A>f$8U)Ayn{5~Z~Q91BL0y6hvt>LjZfuR#1~4p<{DoZA)ZQ)=9T^Y zyp`*qbSpjj-fb~?Dqm-OdLnvkmzDbT4*o@h)05y-Qd7??+1t9(S#5l7*Kzc<#1uEX^sY<@ilb77j8{PySgZ+EW{c5wH zX?QHCdFC-j|Bg%)|I47{{ScHq%`XbKg5v+0(VqiPgI1SA{2gY0tKkix_!k;I8`M1d z1)%uJ8z+~vJM1NW)b(b*6y0WY1BfXntXLeZ3Hbl)^S^$7xdM}ES0wmV z@srVfqv(5#CJ!C0bjv(q?n<1D?8WcfW0z>?ZgcN5ci-O5HrltZ7a3hcA``2G0)I&*KOuw)cZ`B&k|G#S0y=x<<$m%LdT zp}!QN6A}885&H57y+1;KkHEs=sa+1!%OdW_MCi{&=*bcK!x4GUMCkvF(A4>&@Hde^ zh|C+c6Jc69{b5?qVftK%Fnxc7jy0}mS>a}I-IhytT6^JE0Jn{J<*Jp@A+l)quRFuv%@Eqb|KUUSZALZySGBXQ;n)j*0DsX$Ynb1*r@GnOe871sDoqYL z^Fk+yr)RktTSqRaoquh5W^LWPnZazYBo)Qk?ef;y_I?w0;Z*(TEUz70@0hj2dgUs& z?Ucz~rXnq~%*Hx-1r{fj6SXr-HK#~u60o?rJ+o>lHl96i!Njg@IhMy;*u2b!UbwUi zdfCdGIsFXQv zM9rSw4>ey6yi2h-KMddCL++!!N4%IeLr){~PnuW#pp#bEN2`yTzC}c=!<-yw-m>_d z^5T88p7{auw4eAXZ8ct=*?SmiUe$k>rkICr`%ZZOmV8e#kKDX!Mcd-$Ok?}XTiEE` z*jP6!@5qC`2QnS*Kl>bzCy^b*Pw~VQi5zJk?F%MP-*cH1Lc&p`AK4nX1plW1m3oZK zt9BFq1gzWm4jly5|Fk}Vs~-vm7Wdgw86U3si|@0GL@*nnJy~P<=V|rlWW2SjgV5?X zgpHTy3(Msx4D}H{PkMJRBV0zZn`92Yz7^JW-c@@&+w6INX>kJehghJ;;zcCdMJunt8%pmWyyhBM9`<+p!i%ae z&}yiyhqkR)+_vV=`Q1LKMjYe6+n!dv*3X)WgM)OD@vsO$P-6%KyA2nIXtA9a*;Zeh&SSqAn>7#3v_ z{T4*Noa(wy!X1lFv<((fIWYg9&^wV!st}jU7VU1IDCLnm9#>pLTm7B);`DUB%HiGr zs`v-NbBg$;0~H%J2rn%0u&zYLqN1Yn>fI_;a0)RBBf&Cj#l|nVxU-haQI-`OH3qNC z{-!!m^Kt29H8xKY#xE*1{vAv%u=^BP_*8FJvNkF@b=j$P*|xHD_D7`HA9Bob?I~^! z@Uctkt^;Wz?c3+XOwfMHKtJQ-SZq!5FWGY&|M&IsPs?r?pMxxa>AZ{(zqZ>Ydp7dF z{~TlXLBXs`AO|sb!5rjX?${~yx?I9kUbqCJ>*9L6Xq6493jj5YNA)sR_c~ww7Y+_* zLUA}jBJ@>vKJt1TlR|~->sQdv)Yt7$`W!A7f@Mo_4q?brXNGVpvYMwC45Kpz|6iI$ zi^p(rC^LuE5k6|RGtvHOG&$bgx2q8`CM6d0`Qa@Z=GCQVUf)=sY-mW&of9i27g&dO z)~XeYm#u7AwR~CgtufR5EwW<}9efF!>HE6-^)8K_D`j86%@SPd!}GYChoROzWG|y} z(@^dYSi*3|HLh#y-KAQZ4s;spz=k)1dg#Y_ zdH!Mc>&Hgu_fA3P7x*32Iry02`sM#cI@SOE0m$1rS@ZSkAAif}kAZxb6KWEO@Whqi zL};D=!1reIB9Q)XVy?OCeoyh$7@i5rzg~6OYkpt;|46yWe;+9OAA+)f*6bfJ`%i)7 zwcF3l{B~j`wBo1vO2t>>Ft$=9t}r|v)VjeRNW1*0xzv3B(;#&_@xMXxV#fb6ceQGK zFB57ynJ-V=WOywoITwPGqi>-6rGjwXygBi9^X5Wzia~czHQ(U!KKNzd3yRh^N^}RP zsICPuDpk8vjUM6CDZKtwCm_@t9w4 zyT^QX`-B~K^9Qv*0Dt*;RK-s}1*Nj(`+C^MjbGe-RooN8F$4?urgHS4XUs=% zT~|Bz5(Qi6+?K$u84F~cx2oN%OJUr;z;J&#zdw(QxF)5u&linG+$D>_l}7%sfpqrA z+HLoBBCnxSnyaI9H&urc15aUmSD$OwmQ_0Vn<iE_4)t>{&V=;{3`QrPfXRkFZ9F>GeSgoBqMGi! zGFGwaKB!dZWjy8dL^6<|#oLes^#zhWo&0wa`sc%PLNSZF1<9V#cxo1*;qpN?+`-x*hT?O8ywii~&n@9oFE z$0DvjKam|q;Xcw93p)dWd0TAA!)ZKC#s;A8cQ?x}|n)8{>^-85?#iTiLpd z+sy;2KKNe7<_D~C&l@-9biiz6+_US0>pl=84^vV^a;SY_4HkLrV;O3E;tR_9?LPVW zB*(2FhjXXT>P&Rsm)bLpPr7Zqq4+uD_Z8Xs)aPP3i{CEeQ#_sVd_#;&GBBh@F)sNu zd^IERB}gA-ozVD!c674F4>Yxj@kZ|2u=?d#)I2`7*H_{qG& zPvZh#-&Tpnt;XEdez^4qqt%wmUHhA4?&OE}y!ki-w}Qj$Lfw1omq(X7h6p$4jt|}U&Udv#=`HGQhwcBA{`Mu)bPAY^(+6Am z=k9M$<7Jfb{cTV4PPsmr@0N~MAMC5V%rd^ey@iH%kt`0gzx{y8>9$H9r%|ANh}}bj zZEd-v=FLd`?FMx`G0z4N>!q;@8+#4&RwMPdrxG8T8jIikG-k9{u}MtMSUG9b%=s|1{-5hq9Zlt8-Fc`B!4e)pn=4YS8?t-4g0A z|98H>yt6)cW7$?!1p2r140TqzNoYSl*>U@nBV(Bg?reRF4mawrcKS72mAHVtw7_1m zN$sn=pk1~eFGu2KOI@~w-P}`HI29{%m3rktf~W7OxN8b?i%M|+ZFGLuP(y-#^pVMo<&dS3?(x zg)9xCxTmpe!hewOB*&{Dxtrv>CVa2hHprsT&7r}4fggXRX_)${oGbfOWe2dAvrBW8eXTH^cbvpOx zW?Y>&6sM-S`;5)9Ag$o1eUk11FZf}w_bfMs2A5Mt21rHuozD-uGnC40fmYmoA2EmJfS-l4_o-zHD6k^*z<_r8;jdV}ST{@L0*?b{>E2f*DTs~k`|deE5LlAADX&A8-L9Kn*I%zF z*03VFq0Azf%$28dRhN~w#~%t}x3(DL+Ti+{&p+k^Xz!j*N(+`1$T#u}r4-*u)ar+rB;nQB3OGGaUY`6F=lMer zYqPIa+vvTn|E`{eshj*su;QGDJH{+R`_+M7B>4(bMiU*J5H@Bp=;=$Qt_&4_m$l0a* zyLl}C){o=g`^RVBH)T?m71}HswhY>RBz{R>zy&=k*Yfnf&m)gJ*nQ)&PYseB`rlSG zK2LW(F$SUIw)d3**Onalm>2ggFRt^A@tLWeZ&YL!1PS=OcNpO1s%(Fx|FWfp{0Ugr zdzNpP5p4h8dYLzQd&R`nuYf<{?NLrFUM~Jl#a&spT18sMLU_^d9qZ!!HIac2%3-jXsYDdffws?YdObqwmxmUR5IyYBhQO=Z>zzdubM1`JK8TO zvwr?&udz>-mZvUpQj%+ixQ>w5Xf)rB8Nl@UB6t zn|IZaG2Q&0xCXVjuBNOmx0E=pEvwf7kK44I8Pxjh zPRk?q6=;k}rJ7U1OJ1=_BTZ3b9HsFPvs*_vufCG%n|<6iWnIXoV&hk3an?b;;kTum zkDY>$^3K=KYu_+^_xcl3_j6Nw`Yg`W%&}h|D6%}p3jHl<9mOE&u`INu<)vD z=GWH7oWezT(0IdQ?(bZ&Y~`{Q?JHs{7O!>49iA(eWjHu~LHiAv)h(Pz*s`{HdHa%( zMV=+^Bt6q${Ma08@B(7B=25z*r?0t`z9tV0VbTqk#!g>yp8q@FKVTC({W|W9xfGUo za>`{k+O>?oC#I zhjZ^3!M)quONWX712#CjU>NuP8mwZZpEp$c_w$vO`Fp|{%6+(b$#e1Z4t{IxzA)vl zGl!UOtb@Vd-=+L^#`A~tGBqz*WA}GizR{!>-?OK2=coBi8wKCv@Kue1Pi_9x5%`pD z&B?`$Pvzo_k6&b-Rs33Siv3o7_kjVGlQW(_q8BRu3_O*l=c{rn;vYi(7vSkLJztgM zq4+m5a3b##>%r5(I`CAm+HimdLiXPUPXiw^yv^{v;AHI211bMRrQxp`)Jx9afM4W55SNs_w+kgWAXOcSh&T{Z6B$pC|riqvwI*zuM?yLG3fq<`UVz zK@UrEb)S~}ea`4jpxir*zS;0b@D%JX2Nl1IK=Dm6_sNDwo4f8k5#Luq{@l5b^1ssT zb$W-~rPnL>mx+wrrB5RJj~KRt{3WEHD|amj$~|fJQ$VIp5;{Ab`H{q1LFuW!MEUZV z*a7lQNc4awf?Xirn8ZiGqbQ;kAn%U5XG?Uwxz7Prgb8!ke7)$mfczx}N`m}*4HUi4 z=x>3N|8-FOe{b~PfReARn6woMoohh+CN>&fYjhQ;^y%2|IH);j*1z4ppEJQeDy`zX z2bBB=z%!u#0hGKujK1CIrQj*JUkOU?6j1(ocJa9%`N%212gJWSpHXzH(b^Xz`>7yR z$KA_S0jeh``@P5!-3N;91t&uL`Tfn%u$Fg#nDQF_kq<@tf~YcHzxU5}PNU}O!|MSz z8127f$0<_$e7nEHX#bt~y>}79!1Hu^+RbcfN~&A*>lRgYTkP3C?+&yv5F_DJU6`C*keZ^bQ4pA&I^2FI}b zQ4v~gaoGKpi2tue=u{-UPe$A&D=hCb5&oY>Up=n!-!n4~%T=&r3II=Rcnll$ibIfA2OBt-wL^_^<0^bPD!|t!!rFS*DqtVqx81 z)}(AL%4O!@%YM8!og{gquJMVkSq%y}Sh4b1>2ofyEtFX8+-v4v?^feb9_G#)sq02X z1vPB2t#o_xlA?7JHP4o{x}it+;b8uhb*~GiO)t{>Xg(>NlOW^Qy*y2~ z=}%hs`jwMbSof+y5Z~>?Uib1Z{Uq80nKnLxifS+N_|6S7BdvQ)qTQ2ea{sxv*wSre z%$z+rqQ0(QulDiWi#(zji}R7^Po_xZNb6o}pUc;X zzHSqN)9;Mw9v=0}HO$sGQbrNdPoGZZq00DhO|Z|%Ez%ugU4ovE=JU04>-x5F7S3v{#mHD&bHn0HYhBCA8#Aplwf)q6 zy<%;vSFOF(c2@bc(8reX(F`d5$L(o2_nHyhn?`W&7{R@J1oz$%-1|mwA8sB*?SSS% zT1U{^5Z^3*O{3sj4&Qa7;JX*ThEec63}0##d_RS+W)yttQ%@TO-$n3MjllN{!lbSz zUIA%>CqDyf{JqoYuYnrZec9+Pka1b!BSx)94AH{Es)f zk~k9Xxc$&Px^tK`9^4Hr`v*Xc>$Vu(Vb}y>%2WEsUkxb!I7k?IeeynN^AH$ zY%;7dj2i;ZUlMfVGla-o%TKh%wK9so#!r2Yip9PHYW&n^?x%|8x!2tPV04qwYemD~ zVEp8zahyvauBT@m_65&9Pqx(Z=od3p}h z;a;iJXAd`wwli$lyCMgB@Z*bNTU72m{h-qYDGDb)qzEa8xZZMjh%vm(g7@$Zrg_`p zmE?;e5%jZ%4<&FfbmH?G^kFILjxT8}w$VxD!-@@im{~jjn#g^e6qoOZdxiSA%t-f7 zUQ!k9hX>jo|I_|=t2$yB-~aZs+6VpU20Am^eP`F&yold-_5zK=I!QRpeP`F1oYo-t z*e>Ep`x5J=aT7+(Nd50#llK|(=ORl4SE1K+o!%wi*&qA0SXkBt@^12+e)|*K#8{55 z^5R0C0v8t4Srnd9$I5j*4<{mOP9W;!sHh%gL+IG>jV>$l>9cz^r)neC&RTsAW1yOA zVXwpN4_pe^Fu)eJ9Sb!Gml z#>d^hgS|MT&%%w6#rt4Fk7fan;3)wpLD;KGO9W1gxyYCxB6bbo# zE$Pk;Y#7@3EY>VvM?K*szE4w*`E#o4w7Vu>GIhC@9=2}yNN}ulaI+@6_;%~i@4xaZ z?VY>E%=i@5uVPa>31P!sFXd9Pu~kIZ1Sum0`|dtPSX)2KzhsX_+Aik%HU*LM)j@&w zXYls%VsC%zydCYm^}idImBlRj`X+mR#eXL`ojbms3KZ-$bXqWT;Ky4UKnq4tqy>Ze z3nwRJg8ha0YLHvEtH^d2@=4>mUbJN3uGs5nt0dUv+;Gxo8mFeS%Vlb4{~r-}khV6I zBOgIRvgZx{J6VI{{W18JBLMLhgyX&MNp>9sv2bcqnF~|7nQTj{DkP!4HuI|sl;NNE2pH3m2L`hviJQLp%lL_cf2~SO!Zbf7~Prle@GQw zL7UDkD&v*ZrG&o1t6HeWVZA3}tx&LjI%J)czJ&I;Y&x5V`rH}XV)@hd6I_IN59_mM zxYy?(bM0yk~;8szq%bDQuceu6yu zB%Zh4&%b2P_xZnX8*Qw+qM>5rmn64q!tP>TWooi#A^-c&aN1uR-wgP+6!YnumF&5J z|3NYbD|2a85BVPks15=){f28qs^}mRw&4=DS?(|r6-J^zjfD_bRpo1O*KKa%*ywv1h&m( z`KMjrt%nGFaS(WO5V#wvC8*4F8(sBGG6%tokOEY~HL zu1rY@+s*#K2lb(iK5W;>UE-L_Q`saf&A3$awA2yWg?3*cIM|+wL#`}!gp-uzj)W(* z*XoJVvV85^cXbe>u~g0fA`BlR)p6}h(;An)w3{9vF7Ba+hka5HBAazHKq!ZjE{9h0 zf8SR2D3Q>yUY=5z{fwfP&ao>ynJb;rl{rEwJ54G3b|_`(TzSPto$*|pvUIM!GS&G6 z68)vjN?OSei;}hPHigT+WnP+4#6IXErZu;H8qoPjDcg3|P%&Mu?-VLkA20SCr0TD6 z+ox3?7}V(uNsr@{?9tn^PumWNzhZ8A7Al(NJrw(HvLKX%RI{bQ%EjxYZq-a0O}Y8l zi||->$EH0SCbnO`O)>V(JfG5k?VqPmT%}Q_KJ;bW$=N4~jPt1KvZ;ki-G7nyMk>C7 z^Pp7dJKn!4m2>4y5>(oGKb?<=N1PMg$q(P-r+OTsLv6#-w z{Yw}&RcWp-9!&Pd3$uNf#yOO0pN;~7 z6rY-xoj1H@^= zQyXLyzasv~IWzO=uAj&}RT6|XaRx~IW~dv_98KaFkRT^&`9V0=@RzJRXuj)tQ1)Lm z)OrLJKhbRT`;1P5nh%?0_NRjk?H^LQ zHyWJ*m0vC3B<$yd@~?cC|0@lr8J+^l|9GRdk4XMs0kw}v-5=5a0!q#oK*{-xp>91A zy#bV*7NchvzRhq9cn0pjrJjoaWl;1Fjeg4LM~uE7Br6iPfv16M%zlZ{?=xEW%*wsi z=nFx`SNF;)KDt*{;r)aDLH|9dblhk5cN=Pd5`PnQe}MeG$LK4-Q=oN^z;Vbu9VDv~ z6F`DU{EqgEq$T!&lB;uyaGLn4|(ruvl)YB8+jfPF2_|%J){ajFdvy8qBoD6-A*(1yG5hsV&fkdUe0mQg-{%NDi zYap;67dHd~TFm^sIm_riv(P-Q+-7g%bzaH^FCgQG-bC~~@2tRE@k^5gq_`e@< zUmT%T-eLLcBmPSw^nXWatw)Ca&xp`+3%mD6=nqEZ={)2x|F#G}ZEunLPa?G5hp_*` zIsB{&vhSlYv#OCVH|H81dKTSHD;FIE>n7K=SL0fG42xHaVNtc2o$6xs`)w2+xzni5P_RvBRhx@IKDu_eUa=)A*h|eO$nC4H zuAO;J*v79m1T+1`H>(c1ZXjS9;jC~eH_78W8PolpXGy@|^?=|7lN%;_ L~pUfHcTf)Yo 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

    (>h0(m8{CDo0h|EqBB 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 literal 0 HcmV?d00001