From 6bf9840dec50b0c70dc23efa1840b92490889d35 Mon Sep 17 00:00:00 2001 From: James Chen Date: Thu, 9 Feb 2017 10:23:52 +0800 Subject: [PATCH] Adds openssl, updates curl, libwebsockets. --- android/Android.mk | 15 + android/arm64-v8a/include/openssl/aes.h | 92 + android/arm64-v8a/include/openssl/asn1.h | 1096 ++++ android/arm64-v8a/include/openssl/asn1_mac.h | 10 + android/arm64-v8a/include/openssl/asn1t.h | 924 ++++ android/arm64-v8a/include/openssl/async.h | 98 + android/arm64-v8a/include/openssl/bio.h | 854 +++ android/arm64-v8a/include/openssl/blowfish.h | 61 + android/arm64-v8a/include/openssl/bn.h | 575 ++ android/arm64-v8a/include/openssl/buffer.h | 76 + android/arm64-v8a/include/openssl/camellia.h | 83 + android/arm64-v8a/include/openssl/cast.h | 53 + android/arm64-v8a/include/openssl/cmac.h | 41 + android/arm64-v8a/include/openssl/cms.h | 512 ++ android/arm64-v8a/include/openssl/comp.h | 72 + android/arm64-v8a/include/openssl/conf.h | 216 + android/arm64-v8a/include/openssl/conf_api.h | 40 + android/arm64-v8a/include/openssl/crypto.h | 463 ++ android/arm64-v8a/include/openssl/ct.h | 518 ++ android/arm64-v8a/include/openssl/des.h | 174 + android/arm64-v8a/include/openssl/dh.h | 343 ++ android/arm64-v8a/include/openssl/dsa.h | 282 + android/arm64-v8a/include/openssl/dtls1.h | 56 + android/arm64-v8a/include/openssl/e_os2.h | 311 ++ android/arm64-v8a/include/openssl/ebcdic.h | 33 + android/arm64-v8a/include/openssl/ec.h | 1581 ++++++ android/arm64-v8a/include/openssl/ecdh.h | 10 + android/arm64-v8a/include/openssl/ecdsa.h | 10 + android/arm64-v8a/include/openssl/engine.h | 842 +++ android/arm64-v8a/include/openssl/err.h | 259 + android/arm64-v8a/include/openssl/evp.h | 1586 ++++++ android/arm64-v8a/include/openssl/hmac.h | 49 + android/arm64-v8a/include/openssl/idea.h | 64 + android/arm64-v8a/include/openssl/kdf.h | 75 + android/arm64-v8a/include/openssl/lhash.h | 204 + android/arm64-v8a/include/openssl/md2.h | 44 + android/arm64-v8a/include/openssl/md4.h | 51 + android/arm64-v8a/include/openssl/md5.h | 50 + android/arm64-v8a/include/openssl/mdc2.h | 42 + android/arm64-v8a/include/openssl/modes.h | 203 + android/arm64-v8a/include/openssl/obj_mac.h | 4577 ++++++++++++++++ android/arm64-v8a/include/openssl/objects.h | 1097 ++++ android/arm64-v8a/include/openssl/ocsp.h | 412 ++ .../include/openssl/opensslconf-arm32.h | 169 + .../include/openssl/opensslconf-arm64.h | 169 + .../include/openssl/opensslconf-x86.h | 169 + .../arm64-v8a/include/openssl/opensslconf.h | 9 + android/arm64-v8a/include/openssl/opensslv.h | 105 + android/arm64-v8a/include/openssl/ossl_typ.h | 190 + android/arm64-v8a/include/openssl/pem.h | 501 ++ android/arm64-v8a/include/openssl/pem2.h | 20 + android/arm64-v8a/include/openssl/pkcs12.h | 282 + android/arm64-v8a/include/openssl/pkcs7.h | 404 ++ android/arm64-v8a/include/openssl/rand.h | 89 + android/arm64-v8a/include/openssl/rc2.h | 51 + android/arm64-v8a/include/openssl/rc4.h | 36 + android/arm64-v8a/include/openssl/rc5.h | 63 + android/arm64-v8a/include/openssl/ripemd.h | 47 + android/arm64-v8a/include/openssl/rsa.h | 589 ++ android/arm64-v8a/include/openssl/safestack.h | 164 + android/arm64-v8a/include/openssl/seed.h | 98 + android/arm64-v8a/include/openssl/sha.h | 119 + android/arm64-v8a/include/openssl/srp.h | 131 + android/arm64-v8a/include/openssl/srtp.h | 50 + android/arm64-v8a/include/openssl/ssl.h | 2529 +++++++++ android/arm64-v8a/include/openssl/ssl2.h | 24 + android/arm64-v8a/include/openssl/ssl3.h | 307 ++ android/arm64-v8a/include/openssl/stack.h | 78 + android/arm64-v8a/include/openssl/symhacks.h | 52 + android/arm64-v8a/include/openssl/tls1.h | 972 ++++ android/arm64-v8a/include/openssl/ts.h | 643 +++ android/arm64-v8a/include/openssl/txt_db.h | 57 + android/arm64-v8a/include/openssl/ui.h | 368 ++ android/arm64-v8a/include/openssl/whrlpool.h | 48 + android/arm64-v8a/include/openssl/x509.h | 1123 ++++ android/arm64-v8a/include/openssl/x509_vfy.h | 539 ++ android/arm64-v8a/include/openssl/x509v3.h | 1005 ++++ .../include/websockets/libwebsockets.h | 4640 +++++++++++----- .../arm64-v8a/include/websockets/lws_config.h | 50 +- android/arm64-v8a/libcrypto.a | Bin 0 -> 4368192 bytes android/arm64-v8a/libssl.a | Bin 0 -> 675312 bytes android/arm64-v8a/libwebsockets.a | Bin 172184 -> 232484 bytes android/armeabi-v7a/include/openssl/aes.h | 92 + android/armeabi-v7a/include/openssl/asn1.h | 1096 ++++ .../armeabi-v7a/include/openssl/asn1_mac.h | 10 + android/armeabi-v7a/include/openssl/asn1t.h | 924 ++++ android/armeabi-v7a/include/openssl/async.h | 98 + android/armeabi-v7a/include/openssl/bio.h | 854 +++ .../armeabi-v7a/include/openssl/blowfish.h | 61 + android/armeabi-v7a/include/openssl/bn.h | 575 ++ android/armeabi-v7a/include/openssl/buffer.h | 76 + .../armeabi-v7a/include/openssl/camellia.h | 83 + android/armeabi-v7a/include/openssl/cast.h | 53 + android/armeabi-v7a/include/openssl/cmac.h | 41 + android/armeabi-v7a/include/openssl/cms.h | 512 ++ android/armeabi-v7a/include/openssl/comp.h | 72 + android/armeabi-v7a/include/openssl/conf.h | 216 + .../armeabi-v7a/include/openssl/conf_api.h | 40 + android/armeabi-v7a/include/openssl/crypto.h | 463 ++ android/armeabi-v7a/include/openssl/ct.h | 518 ++ android/armeabi-v7a/include/openssl/des.h | 174 + android/armeabi-v7a/include/openssl/dh.h | 343 ++ android/armeabi-v7a/include/openssl/dsa.h | 282 + android/armeabi-v7a/include/openssl/dtls1.h | 56 + android/armeabi-v7a/include/openssl/e_os2.h | 311 ++ android/armeabi-v7a/include/openssl/ebcdic.h | 33 + android/armeabi-v7a/include/openssl/ec.h | 1581 ++++++ android/armeabi-v7a/include/openssl/ecdh.h | 10 + android/armeabi-v7a/include/openssl/ecdsa.h | 10 + android/armeabi-v7a/include/openssl/engine.h | 842 +++ android/armeabi-v7a/include/openssl/err.h | 259 + android/armeabi-v7a/include/openssl/evp.h | 1586 ++++++ android/armeabi-v7a/include/openssl/hmac.h | 49 + android/armeabi-v7a/include/openssl/idea.h | 64 + android/armeabi-v7a/include/openssl/kdf.h | 75 + android/armeabi-v7a/include/openssl/lhash.h | 204 + android/armeabi-v7a/include/openssl/md2.h | 44 + android/armeabi-v7a/include/openssl/md4.h | 51 + android/armeabi-v7a/include/openssl/md5.h | 50 + android/armeabi-v7a/include/openssl/mdc2.h | 42 + android/armeabi-v7a/include/openssl/modes.h | 203 + android/armeabi-v7a/include/openssl/obj_mac.h | 4577 ++++++++++++++++ android/armeabi-v7a/include/openssl/objects.h | 1097 ++++ android/armeabi-v7a/include/openssl/ocsp.h | 412 ++ .../include/openssl/opensslconf-arm32.h | 169 + .../include/openssl/opensslconf-arm64.h | 169 + .../include/openssl/opensslconf-x86.h | 169 + .../armeabi-v7a/include/openssl/opensslconf.h | 9 + .../armeabi-v7a/include/openssl/opensslv.h | 105 + .../armeabi-v7a/include/openssl/ossl_typ.h | 190 + android/armeabi-v7a/include/openssl/pem.h | 501 ++ android/armeabi-v7a/include/openssl/pem2.h | 20 + android/armeabi-v7a/include/openssl/pkcs12.h | 282 + android/armeabi-v7a/include/openssl/pkcs7.h | 404 ++ android/armeabi-v7a/include/openssl/rand.h | 89 + android/armeabi-v7a/include/openssl/rc2.h | 51 + android/armeabi-v7a/include/openssl/rc4.h | 36 + android/armeabi-v7a/include/openssl/rc5.h | 63 + android/armeabi-v7a/include/openssl/ripemd.h | 47 + android/armeabi-v7a/include/openssl/rsa.h | 589 ++ .../armeabi-v7a/include/openssl/safestack.h | 164 + android/armeabi-v7a/include/openssl/seed.h | 98 + android/armeabi-v7a/include/openssl/sha.h | 119 + android/armeabi-v7a/include/openssl/srp.h | 131 + android/armeabi-v7a/include/openssl/srtp.h | 50 + android/armeabi-v7a/include/openssl/ssl.h | 2529 +++++++++ android/armeabi-v7a/include/openssl/ssl2.h | 24 + android/armeabi-v7a/include/openssl/ssl3.h | 307 ++ android/armeabi-v7a/include/openssl/stack.h | 78 + .../armeabi-v7a/include/openssl/symhacks.h | 52 + android/armeabi-v7a/include/openssl/tls1.h | 972 ++++ android/armeabi-v7a/include/openssl/ts.h | 643 +++ android/armeabi-v7a/include/openssl/txt_db.h | 57 + android/armeabi-v7a/include/openssl/ui.h | 368 ++ .../armeabi-v7a/include/openssl/whrlpool.h | 48 + android/armeabi-v7a/include/openssl/x509.h | 1123 ++++ .../armeabi-v7a/include/openssl/x509_vfy.h | 539 ++ android/armeabi-v7a/include/openssl/x509v3.h | 1005 ++++ .../include/websockets/libwebsockets.h | 4640 +++++++++++----- .../include/websockets/lws_config.h | 50 +- android/armeabi-v7a/libcrypto.a | Bin 0 -> 3295330 bytes android/armeabi-v7a/libssl.a | Bin 0 -> 508160 bytes android/armeabi-v7a/libwebsockets.a | Bin 89928 -> 120148 bytes android/armeabi/include/openssl/aes.h | 92 + android/armeabi/include/openssl/asn1.h | 1096 ++++ android/armeabi/include/openssl/asn1_mac.h | 10 + android/armeabi/include/openssl/asn1t.h | 924 ++++ android/armeabi/include/openssl/async.h | 98 + android/armeabi/include/openssl/bio.h | 854 +++ android/armeabi/include/openssl/blowfish.h | 61 + android/armeabi/include/openssl/bn.h | 575 ++ android/armeabi/include/openssl/buffer.h | 76 + android/armeabi/include/openssl/camellia.h | 83 + android/armeabi/include/openssl/cast.h | 53 + android/armeabi/include/openssl/cmac.h | 41 + android/armeabi/include/openssl/cms.h | 512 ++ android/armeabi/include/openssl/comp.h | 72 + android/armeabi/include/openssl/conf.h | 216 + android/armeabi/include/openssl/conf_api.h | 40 + android/armeabi/include/openssl/crypto.h | 463 ++ android/armeabi/include/openssl/ct.h | 518 ++ android/armeabi/include/openssl/des.h | 174 + android/armeabi/include/openssl/dh.h | 343 ++ android/armeabi/include/openssl/dsa.h | 282 + android/armeabi/include/openssl/dtls1.h | 56 + android/armeabi/include/openssl/e_os2.h | 311 ++ android/armeabi/include/openssl/ebcdic.h | 33 + android/armeabi/include/openssl/ec.h | 1581 ++++++ android/armeabi/include/openssl/ecdh.h | 10 + android/armeabi/include/openssl/ecdsa.h | 10 + android/armeabi/include/openssl/engine.h | 842 +++ android/armeabi/include/openssl/err.h | 259 + android/armeabi/include/openssl/evp.h | 1586 ++++++ android/armeabi/include/openssl/hmac.h | 49 + android/armeabi/include/openssl/idea.h | 64 + android/armeabi/include/openssl/kdf.h | 75 + android/armeabi/include/openssl/lhash.h | 204 + android/armeabi/include/openssl/md2.h | 44 + android/armeabi/include/openssl/md4.h | 51 + android/armeabi/include/openssl/md5.h | 50 + android/armeabi/include/openssl/mdc2.h | 42 + android/armeabi/include/openssl/modes.h | 203 + android/armeabi/include/openssl/obj_mac.h | 4577 ++++++++++++++++ android/armeabi/include/openssl/objects.h | 1097 ++++ android/armeabi/include/openssl/ocsp.h | 412 ++ .../include/openssl/opensslconf-arm32.h | 169 + .../include/openssl/opensslconf-arm64.h | 169 + .../armeabi/include/openssl/opensslconf-x86.h | 169 + android/armeabi/include/openssl/opensslconf.h | 9 + android/armeabi/include/openssl/opensslv.h | 105 + android/armeabi/include/openssl/ossl_typ.h | 190 + android/armeabi/include/openssl/pem.h | 501 ++ android/armeabi/include/openssl/pem2.h | 20 + android/armeabi/include/openssl/pkcs12.h | 282 + android/armeabi/include/openssl/pkcs7.h | 404 ++ android/armeabi/include/openssl/rand.h | 89 + android/armeabi/include/openssl/rc2.h | 51 + android/armeabi/include/openssl/rc4.h | 36 + android/armeabi/include/openssl/rc5.h | 63 + android/armeabi/include/openssl/ripemd.h | 47 + android/armeabi/include/openssl/rsa.h | 589 ++ android/armeabi/include/openssl/safestack.h | 164 + android/armeabi/include/openssl/seed.h | 98 + android/armeabi/include/openssl/sha.h | 119 + android/armeabi/include/openssl/srp.h | 131 + android/armeabi/include/openssl/srtp.h | 50 + android/armeabi/include/openssl/ssl.h | 2529 +++++++++ android/armeabi/include/openssl/ssl2.h | 24 + android/armeabi/include/openssl/ssl3.h | 307 ++ android/armeabi/include/openssl/stack.h | 78 + android/armeabi/include/openssl/symhacks.h | 52 + android/armeabi/include/openssl/tls1.h | 972 ++++ android/armeabi/include/openssl/ts.h | 643 +++ android/armeabi/include/openssl/txt_db.h | 57 + android/armeabi/include/openssl/ui.h | 368 ++ android/armeabi/include/openssl/whrlpool.h | 48 + android/armeabi/include/openssl/x509.h | 1123 ++++ android/armeabi/include/openssl/x509_vfy.h | 539 ++ android/armeabi/include/openssl/x509v3.h | 1005 ++++ .../include/websockets/libwebsockets.h | 4640 +++++++++++----- .../armeabi/include/websockets/lws_config.h | 50 +- android/armeabi/libcrypto.a | Bin 0 -> 3295310 bytes android/armeabi/libssl.a | Bin 0 -> 508160 bytes android/armeabi/libwebsockets.a | Bin 152208 -> 205628 bytes android/x86/include/openssl/aes.h | 92 + android/x86/include/openssl/asn1.h | 1096 ++++ android/x86/include/openssl/asn1_mac.h | 10 + android/x86/include/openssl/asn1t.h | 924 ++++ android/x86/include/openssl/async.h | 98 + android/x86/include/openssl/bio.h | 854 +++ android/x86/include/openssl/blowfish.h | 61 + android/x86/include/openssl/bn.h | 575 ++ android/x86/include/openssl/buffer.h | 76 + android/x86/include/openssl/camellia.h | 83 + android/x86/include/openssl/cast.h | 53 + android/x86/include/openssl/cmac.h | 41 + android/x86/include/openssl/cms.h | 512 ++ android/x86/include/openssl/comp.h | 72 + android/x86/include/openssl/conf.h | 216 + android/x86/include/openssl/conf_api.h | 40 + android/x86/include/openssl/crypto.h | 463 ++ android/x86/include/openssl/ct.h | 518 ++ android/x86/include/openssl/des.h | 174 + android/x86/include/openssl/dh.h | 343 ++ android/x86/include/openssl/dsa.h | 282 + android/x86/include/openssl/dtls1.h | 56 + android/x86/include/openssl/e_os2.h | 311 ++ android/x86/include/openssl/ebcdic.h | 33 + android/x86/include/openssl/ec.h | 1581 ++++++ android/x86/include/openssl/ecdh.h | 10 + android/x86/include/openssl/ecdsa.h | 10 + android/x86/include/openssl/engine.h | 842 +++ android/x86/include/openssl/err.h | 259 + android/x86/include/openssl/evp.h | 1586 ++++++ android/x86/include/openssl/hmac.h | 49 + android/x86/include/openssl/idea.h | 64 + android/x86/include/openssl/kdf.h | 75 + android/x86/include/openssl/lhash.h | 204 + android/x86/include/openssl/md2.h | 44 + android/x86/include/openssl/md4.h | 51 + android/x86/include/openssl/md5.h | 50 + android/x86/include/openssl/mdc2.h | 42 + android/x86/include/openssl/modes.h | 203 + android/x86/include/openssl/obj_mac.h | 4577 ++++++++++++++++ android/x86/include/openssl/objects.h | 1097 ++++ android/x86/include/openssl/ocsp.h | 412 ++ .../x86/include/openssl/opensslconf-arm32.h | 169 + .../x86/include/openssl/opensslconf-arm64.h | 169 + android/x86/include/openssl/opensslconf-x86.h | 169 + android/x86/include/openssl/opensslconf.h | 9 + android/x86/include/openssl/opensslv.h | 105 + android/x86/include/openssl/ossl_typ.h | 190 + android/x86/include/openssl/pem.h | 501 ++ android/x86/include/openssl/pem2.h | 20 + android/x86/include/openssl/pkcs12.h | 282 + android/x86/include/openssl/pkcs7.h | 404 ++ android/x86/include/openssl/rand.h | 89 + android/x86/include/openssl/rc2.h | 51 + android/x86/include/openssl/rc4.h | 36 + android/x86/include/openssl/rc5.h | 63 + android/x86/include/openssl/ripemd.h | 47 + android/x86/include/openssl/rsa.h | 589 ++ android/x86/include/openssl/safestack.h | 164 + android/x86/include/openssl/seed.h | 98 + android/x86/include/openssl/sha.h | 119 + android/x86/include/openssl/srp.h | 131 + android/x86/include/openssl/srtp.h | 50 + android/x86/include/openssl/ssl.h | 2529 +++++++++ android/x86/include/openssl/ssl2.h | 24 + android/x86/include/openssl/ssl3.h | 307 ++ android/x86/include/openssl/stack.h | 78 + android/x86/include/openssl/symhacks.h | 52 + android/x86/include/openssl/tls1.h | 972 ++++ android/x86/include/openssl/ts.h | 643 +++ android/x86/include/openssl/txt_db.h | 57 + android/x86/include/openssl/ui.h | 368 ++ android/x86/include/openssl/whrlpool.h | 48 + android/x86/include/openssl/x509.h | 1123 ++++ android/x86/include/openssl/x509_vfy.h | 539 ++ android/x86/include/openssl/x509v3.h | 1005 ++++ .../x86/include/websockets/libwebsockets.h | 4640 +++++++++++----- android/x86/include/websockets/lws_config.h | 50 +- android/x86/libcrypto.a | Bin 0 -> 4157638 bytes android/x86/libssl.a | Bin 0 -> 642276 bytes android/x86/libwebsockets.a | Bin 161246 -> 216160 bytes ios/include/openssl/aes.h | 92 + ios/include/openssl/asn1.h | 1096 ++++ ios/include/openssl/asn1_mac.h | 10 + ios/include/openssl/asn1t.h | 924 ++++ ios/include/openssl/async.h | 98 + ios/include/openssl/bio.h | 854 +++ ios/include/openssl/blowfish.h | 61 + ios/include/openssl/bn.h | 575 ++ ios/include/openssl/buffer.h | 76 + ios/include/openssl/camellia.h | 83 + ios/include/openssl/cast.h | 53 + ios/include/openssl/cmac.h | 41 + ios/include/openssl/cms.h | 512 ++ ios/include/openssl/comp.h | 72 + ios/include/openssl/conf.h | 216 + ios/include/openssl/conf_api.h | 40 + ios/include/openssl/crypto.h | 463 ++ ios/include/openssl/ct.h | 518 ++ ios/include/openssl/des.h | 174 + ios/include/openssl/dh.h | 343 ++ ios/include/openssl/dsa.h | 282 + ios/include/openssl/dtls1.h | 56 + ios/include/openssl/e_os2.h | 311 ++ ios/include/openssl/ebcdic.h | 33 + ios/include/openssl/ec.h | 1581 ++++++ ios/include/openssl/ecdh.h | 10 + ios/include/openssl/ecdsa.h | 10 + ios/include/openssl/engine.h | 842 +++ ios/include/openssl/err.h | 259 + ios/include/openssl/evp.h | 1586 ++++++ ios/include/openssl/hmac.h | 49 + ios/include/openssl/idea.h | 64 + ios/include/openssl/kdf.h | 75 + ios/include/openssl/lhash.h | 204 + ios/include/openssl/md2.h | 44 + ios/include/openssl/md4.h | 51 + ios/include/openssl/md5.h | 50 + ios/include/openssl/mdc2.h | 42 + ios/include/openssl/modes.h | 203 + ios/include/openssl/obj_mac.h | 4577 ++++++++++++++++ ios/include/openssl/objects.h | 1097 ++++ ios/include/openssl/ocsp.h | 412 ++ ios/include/openssl/opensslconf-arm32.h | 175 + ios/include/openssl/opensslconf-arm64.h | 172 + ios/include/openssl/opensslconf-i386.h | 172 + ios/include/openssl/opensslconf-x86_64.h | 172 + ios/include/openssl/opensslconf.h | 11 + ios/include/openssl/opensslv.h | 105 + ios/include/openssl/ossl_typ.h | 190 + ios/include/openssl/pem.h | 501 ++ ios/include/openssl/pem2.h | 20 + ios/include/openssl/pkcs12.h | 282 + ios/include/openssl/pkcs7.h | 404 ++ ios/include/openssl/rand.h | 89 + ios/include/openssl/rc2.h | 51 + ios/include/openssl/rc4.h | 36 + ios/include/openssl/rc5.h | 63 + ios/include/openssl/ripemd.h | 47 + ios/include/openssl/rsa.h | 589 ++ ios/include/openssl/safestack.h | 164 + ios/include/openssl/seed.h | 98 + ios/include/openssl/sha.h | 119 + ios/include/openssl/srp.h | 131 + ios/include/openssl/srtp.h | 50 + ios/include/openssl/ssl.h | 2529 +++++++++ ios/include/openssl/ssl2.h | 24 + ios/include/openssl/ssl3.h | 307 ++ ios/include/openssl/stack.h | 78 + ios/include/openssl/symhacks.h | 52 + ios/include/openssl/tls1.h | 972 ++++ ios/include/openssl/ts.h | 643 +++ ios/include/openssl/txt_db.h | 57 + ios/include/openssl/ui.h | 368 ++ ios/include/openssl/whrlpool.h | 48 + ios/include/openssl/x509.h | 1123 ++++ ios/include/openssl/x509_vfy.h | 539 ++ ios/include/openssl/x509v3.h | 1005 ++++ ios/include/websockets/libwebsockets.h | 4640 +++++++++++----- ios/include/websockets/lws_config-arm32.h | 117 + ios/include/websockets/lws_config-arm64.h | 117 + ios/include/websockets/lws_config-i386.h | 117 + ios/include/websockets/lws_config-x86_64.h | 117 + ios/include/websockets/lws_config.h | 92 +- ios/libs/libcrypto.a | Bin 0 -> 12502024 bytes ios/libs/libssl.a | Bin 0 -> 2015112 bytes ios/libs/libwebsockets.a | Bin 374648 -> 511344 bytes mac/include/curl/curl.h | 131 +- mac/include/curl/curlver.h | 10 +- mac/include/curl/easy.h | 4 +- mac/include/curl/mprintf.h | 28 +- mac/include/curl/multi.h | 6 +- mac/include/curl/stdcheaders.h | 6 +- mac/include/curl/typecheck-gcc.h | 55 +- mac/include/openssl/aes.h | 92 + mac/include/openssl/asn1.h | 1096 ++++ mac/include/openssl/asn1_mac.h | 10 + mac/include/openssl/asn1t.h | 924 ++++ mac/include/openssl/async.h | 98 + mac/include/openssl/bio.h | 854 +++ mac/include/openssl/blowfish.h | 61 + mac/include/openssl/bn.h | 575 ++ mac/include/openssl/buffer.h | 76 + mac/include/openssl/camellia.h | 83 + mac/include/openssl/cast.h | 53 + mac/include/openssl/cmac.h | 41 + mac/include/openssl/cms.h | 512 ++ mac/include/openssl/comp.h | 72 + mac/include/openssl/conf.h | 216 + mac/include/openssl/conf_api.h | 40 + mac/include/openssl/crypto.h | 463 ++ mac/include/openssl/ct.h | 518 ++ mac/include/openssl/des.h | 174 + mac/include/openssl/dh.h | 343 ++ mac/include/openssl/dsa.h | 282 + mac/include/openssl/dtls1.h | 56 + mac/include/openssl/e_os2.h | 311 ++ mac/include/openssl/ebcdic.h | 33 + mac/include/openssl/ec.h | 1581 ++++++ mac/include/openssl/ecdh.h | 10 + mac/include/openssl/ecdsa.h | 10 + mac/include/openssl/engine.h | 842 +++ mac/include/openssl/err.h | 259 + mac/include/openssl/evp.h | 1586 ++++++ mac/include/openssl/hmac.h | 49 + mac/include/openssl/idea.h | 64 + mac/include/openssl/kdf.h | 75 + mac/include/openssl/lhash.h | 204 + mac/include/openssl/md2.h | 44 + mac/include/openssl/md4.h | 51 + mac/include/openssl/md5.h | 50 + mac/include/openssl/mdc2.h | 42 + mac/include/openssl/modes.h | 203 + mac/include/openssl/obj_mac.h | 4577 ++++++++++++++++ mac/include/openssl/objects.h | 1097 ++++ mac/include/openssl/ocsp.h | 412 ++ mac/include/openssl/opensslconf.h | 172 + mac/include/openssl/opensslv.h | 105 + mac/include/openssl/ossl_typ.h | 190 + mac/include/openssl/pem.h | 501 ++ mac/include/openssl/pem2.h | 20 + mac/include/openssl/pkcs12.h | 282 + mac/include/openssl/pkcs7.h | 404 ++ mac/include/openssl/rand.h | 89 + mac/include/openssl/rc2.h | 51 + mac/include/openssl/rc4.h | 36 + mac/include/openssl/rc5.h | 63 + mac/include/openssl/ripemd.h | 47 + mac/include/openssl/rsa.h | 589 ++ mac/include/openssl/safestack.h | 164 + mac/include/openssl/seed.h | 98 + mac/include/openssl/sha.h | 119 + mac/include/openssl/srp.h | 131 + mac/include/openssl/srtp.h | 50 + mac/include/openssl/ssl.h | 2529 +++++++++ mac/include/openssl/ssl2.h | 24 + mac/include/openssl/ssl3.h | 307 ++ mac/include/openssl/stack.h | 78 + mac/include/openssl/symhacks.h | 52 + mac/include/openssl/tls1.h | 972 ++++ mac/include/openssl/ts.h | 643 +++ mac/include/openssl/txt_db.h | 57 + mac/include/openssl/ui.h | 368 ++ mac/include/openssl/whrlpool.h | 48 + mac/include/openssl/x509.h | 1123 ++++ mac/include/openssl/x509_vfy.h | 539 ++ mac/include/openssl/x509v3.h | 1005 ++++ mac/include/websockets/libwebsockets.h | 4640 +++++++++++----- mac/include/websockets/lws_config.h | 50 +- mac/libs/libcrypto.a | Bin 3154064 -> 3742448 bytes mac/libs/libcurl.a | Bin 612168 -> 642504 bytes mac/libs/libssl.a | Bin 509272 -> 566872 bytes mac/libs/libwebsockets.a | Bin 104360 -> 141128 bytes versions.txt | 18 +- win32/include/curl/curl.h | 360 +- win32/include/curl/curlbuild.h | 11 +- win32/include/curl/curlrules.h | 4 +- win32/include/curl/curlver.h | 24 +- win32/include/curl/easy.h | 6 +- win32/include/curl/mprintf.h | 37 +- win32/include/curl/multi.h | 44 +- win32/include/curl/stdcheaders.h | 8 +- win32/include/curl/typecheck-gcc.h | 189 +- .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 16 + .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 20 + win32/include/openssl/aes.h | 92 + win32/include/openssl/applink.c | 138 + win32/include/openssl/asn1.h | 1096 ++++ win32/include/openssl/asn1_mac.h | 10 + win32/include/openssl/asn1t.h | 924 ++++ win32/include/openssl/async.h | 98 + win32/include/openssl/bio.h | 854 +++ win32/include/openssl/blowfish.h | 61 + win32/include/openssl/bn.h | 575 ++ win32/include/openssl/buffer.h | 76 + win32/include/openssl/camellia.h | 83 + win32/include/openssl/cast.h | 53 + win32/include/openssl/cmac.h | 41 + win32/include/openssl/cms.h | 512 ++ win32/include/openssl/comp.h | 72 + win32/include/openssl/conf.h | 216 + win32/include/openssl/conf_api.h | 40 + win32/include/openssl/crypto.h | 463 ++ win32/include/openssl/ct.h | 518 ++ win32/include/openssl/des.h | 174 + win32/include/openssl/dh.h | 343 ++ win32/include/openssl/dsa.h | 282 + win32/include/openssl/dtls1.h | 56 + win32/include/openssl/e_os2.h | 311 ++ win32/include/openssl/ebcdic.h | 33 + win32/include/openssl/ec.h | 1581 ++++++ win32/include/openssl/ecdh.h | 10 + win32/include/openssl/ecdsa.h | 10 + win32/include/openssl/engine.h | 842 +++ win32/include/openssl/err.h | 259 + win32/include/openssl/evp.h | 1586 ++++++ win32/include/openssl/hmac.h | 49 + win32/include/openssl/idea.h | 64 + win32/include/openssl/kdf.h | 75 + win32/include/openssl/lhash.h | 204 + win32/include/openssl/md2.h | 44 + win32/include/openssl/md4.h | 51 + win32/include/openssl/md5.h | 50 + win32/include/openssl/mdc2.h | 42 + win32/include/openssl/modes.h | 203 + win32/include/openssl/obj_mac.h | 4577 ++++++++++++++++ win32/include/openssl/objects.h | 1097 ++++ win32/include/openssl/ocsp.h | 412 ++ win32/include/openssl/opensslconf.h | 172 + win32/include/openssl/opensslv.h | 105 + win32/include/openssl/ossl_typ.h | 190 + win32/include/openssl/pem.h | 501 ++ win32/include/openssl/pem2.h | 20 + win32/include/openssl/pkcs12.h | 282 + win32/include/openssl/pkcs7.h | 404 ++ win32/include/openssl/rand.h | 89 + win32/include/openssl/rc2.h | 51 + win32/include/openssl/rc4.h | 36 + win32/include/openssl/rc5.h | 63 + win32/include/openssl/ripemd.h | 47 + win32/include/openssl/rsa.h | 589 ++ win32/include/openssl/safestack.h | 164 + win32/include/openssl/seed.h | 98 + win32/include/openssl/sha.h | 119 + win32/include/openssl/srp.h | 131 + win32/include/openssl/srtp.h | 50 + win32/include/openssl/ssl.h | 2529 +++++++++ win32/include/openssl/ssl2.h | 24 + win32/include/openssl/ssl3.h | 307 ++ win32/include/openssl/stack.h | 78 + win32/include/openssl/symhacks.h | 52 + win32/include/openssl/tls1.h | 972 ++++ win32/include/openssl/ts.h | 643 +++ win32/include/openssl/txt_db.h | 57 + win32/include/openssl/ui.h | 368 ++ win32/include/openssl/whrlpool.h | 48 + win32/include/openssl/x509.h | 1123 ++++ win32/include/openssl/x509_vfy.h | 539 ++ win32/include/openssl/x509v3.h | 1005 ++++ win32/include/websockets/libwebsockets.h | 4715 +++++++++++++---- win32/include/websockets/lws_config.h | 191 +- .../include/websockets/win32helpers/getopt.h | 33 - .../websockets/win32helpers/gettimeofday.h | 31 - .../websockets/win32helpers/websock-w32.h | 62 - win32/libs/libcrypto-1_1.dll | Bin 0 -> 2087424 bytes win32/libs/libcrypto.lib | Bin 0 -> 925652 bytes win32/libs/libcurl.dll | Bin 1250816 -> 315392 bytes win32/libs/libcurl.lib | Bin 0 -> 14376 bytes win32/libs/libcurl_imp.lib | Bin 13900 -> 0 bytes win32/libs/libeay32.lib | Bin 14004240 -> 0 bytes win32/libs/libssl-1_1.dll | Bin 0 -> 371712 bytes win32/libs/libssl.lib | Bin 0 -> 97020 bytes win32/libs/ssleay32.lib | Bin 2150360 -> 0 bytes win32/libs/websockets.dll | Bin 0 -> 119296 bytes win32/libs/websockets.lib | Bin 162342 -> 42806 bytes 599 files changed, 230787 insertions(+), 8896 deletions(-) create mode 100644 android/arm64-v8a/include/openssl/aes.h create mode 100644 android/arm64-v8a/include/openssl/asn1.h create mode 100644 android/arm64-v8a/include/openssl/asn1_mac.h create mode 100644 android/arm64-v8a/include/openssl/asn1t.h create mode 100644 android/arm64-v8a/include/openssl/async.h create mode 100644 android/arm64-v8a/include/openssl/bio.h create mode 100644 android/arm64-v8a/include/openssl/blowfish.h create mode 100644 android/arm64-v8a/include/openssl/bn.h create mode 100644 android/arm64-v8a/include/openssl/buffer.h create mode 100644 android/arm64-v8a/include/openssl/camellia.h create mode 100644 android/arm64-v8a/include/openssl/cast.h create mode 100644 android/arm64-v8a/include/openssl/cmac.h create mode 100644 android/arm64-v8a/include/openssl/cms.h create mode 100644 android/arm64-v8a/include/openssl/comp.h create mode 100644 android/arm64-v8a/include/openssl/conf.h create mode 100644 android/arm64-v8a/include/openssl/conf_api.h create mode 100644 android/arm64-v8a/include/openssl/crypto.h create mode 100644 android/arm64-v8a/include/openssl/ct.h create mode 100644 android/arm64-v8a/include/openssl/des.h create mode 100644 android/arm64-v8a/include/openssl/dh.h create mode 100644 android/arm64-v8a/include/openssl/dsa.h create mode 100644 android/arm64-v8a/include/openssl/dtls1.h create mode 100644 android/arm64-v8a/include/openssl/e_os2.h create mode 100644 android/arm64-v8a/include/openssl/ebcdic.h create mode 100644 android/arm64-v8a/include/openssl/ec.h create mode 100644 android/arm64-v8a/include/openssl/ecdh.h create mode 100644 android/arm64-v8a/include/openssl/ecdsa.h create mode 100644 android/arm64-v8a/include/openssl/engine.h create mode 100644 android/arm64-v8a/include/openssl/err.h create mode 100644 android/arm64-v8a/include/openssl/evp.h create mode 100644 android/arm64-v8a/include/openssl/hmac.h create mode 100644 android/arm64-v8a/include/openssl/idea.h create mode 100644 android/arm64-v8a/include/openssl/kdf.h create mode 100644 android/arm64-v8a/include/openssl/lhash.h create mode 100644 android/arm64-v8a/include/openssl/md2.h create mode 100644 android/arm64-v8a/include/openssl/md4.h create mode 100644 android/arm64-v8a/include/openssl/md5.h create mode 100644 android/arm64-v8a/include/openssl/mdc2.h create mode 100644 android/arm64-v8a/include/openssl/modes.h create mode 100644 android/arm64-v8a/include/openssl/obj_mac.h create mode 100644 android/arm64-v8a/include/openssl/objects.h create mode 100644 android/arm64-v8a/include/openssl/ocsp.h create mode 100644 android/arm64-v8a/include/openssl/opensslconf-arm32.h create mode 100644 android/arm64-v8a/include/openssl/opensslconf-arm64.h create mode 100644 android/arm64-v8a/include/openssl/opensslconf-x86.h create mode 100644 android/arm64-v8a/include/openssl/opensslconf.h create mode 100644 android/arm64-v8a/include/openssl/opensslv.h create mode 100644 android/arm64-v8a/include/openssl/ossl_typ.h create mode 100644 android/arm64-v8a/include/openssl/pem.h create mode 100644 android/arm64-v8a/include/openssl/pem2.h create mode 100644 android/arm64-v8a/include/openssl/pkcs12.h create mode 100644 android/arm64-v8a/include/openssl/pkcs7.h create mode 100644 android/arm64-v8a/include/openssl/rand.h create mode 100644 android/arm64-v8a/include/openssl/rc2.h create mode 100644 android/arm64-v8a/include/openssl/rc4.h create mode 100644 android/arm64-v8a/include/openssl/rc5.h create mode 100644 android/arm64-v8a/include/openssl/ripemd.h create mode 100644 android/arm64-v8a/include/openssl/rsa.h create mode 100644 android/arm64-v8a/include/openssl/safestack.h create mode 100644 android/arm64-v8a/include/openssl/seed.h create mode 100644 android/arm64-v8a/include/openssl/sha.h create mode 100644 android/arm64-v8a/include/openssl/srp.h create mode 100644 android/arm64-v8a/include/openssl/srtp.h create mode 100644 android/arm64-v8a/include/openssl/ssl.h create mode 100644 android/arm64-v8a/include/openssl/ssl2.h create mode 100644 android/arm64-v8a/include/openssl/ssl3.h create mode 100644 android/arm64-v8a/include/openssl/stack.h create mode 100644 android/arm64-v8a/include/openssl/symhacks.h create mode 100644 android/arm64-v8a/include/openssl/tls1.h create mode 100644 android/arm64-v8a/include/openssl/ts.h create mode 100644 android/arm64-v8a/include/openssl/txt_db.h create mode 100644 android/arm64-v8a/include/openssl/ui.h create mode 100644 android/arm64-v8a/include/openssl/whrlpool.h create mode 100644 android/arm64-v8a/include/openssl/x509.h create mode 100644 android/arm64-v8a/include/openssl/x509_vfy.h create mode 100644 android/arm64-v8a/include/openssl/x509v3.h create mode 100644 android/arm64-v8a/libcrypto.a create mode 100644 android/arm64-v8a/libssl.a create mode 100644 android/armeabi-v7a/include/openssl/aes.h create mode 100644 android/armeabi-v7a/include/openssl/asn1.h create mode 100644 android/armeabi-v7a/include/openssl/asn1_mac.h create mode 100644 android/armeabi-v7a/include/openssl/asn1t.h create mode 100644 android/armeabi-v7a/include/openssl/async.h create mode 100644 android/armeabi-v7a/include/openssl/bio.h create mode 100644 android/armeabi-v7a/include/openssl/blowfish.h create mode 100644 android/armeabi-v7a/include/openssl/bn.h create mode 100644 android/armeabi-v7a/include/openssl/buffer.h create mode 100644 android/armeabi-v7a/include/openssl/camellia.h create mode 100644 android/armeabi-v7a/include/openssl/cast.h create mode 100644 android/armeabi-v7a/include/openssl/cmac.h create mode 100644 android/armeabi-v7a/include/openssl/cms.h create mode 100644 android/armeabi-v7a/include/openssl/comp.h create mode 100644 android/armeabi-v7a/include/openssl/conf.h create mode 100644 android/armeabi-v7a/include/openssl/conf_api.h create mode 100644 android/armeabi-v7a/include/openssl/crypto.h create mode 100644 android/armeabi-v7a/include/openssl/ct.h create mode 100644 android/armeabi-v7a/include/openssl/des.h create mode 100644 android/armeabi-v7a/include/openssl/dh.h create mode 100644 android/armeabi-v7a/include/openssl/dsa.h create mode 100644 android/armeabi-v7a/include/openssl/dtls1.h create mode 100644 android/armeabi-v7a/include/openssl/e_os2.h create mode 100644 android/armeabi-v7a/include/openssl/ebcdic.h create mode 100644 android/armeabi-v7a/include/openssl/ec.h create mode 100644 android/armeabi-v7a/include/openssl/ecdh.h create mode 100644 android/armeabi-v7a/include/openssl/ecdsa.h create mode 100644 android/armeabi-v7a/include/openssl/engine.h create mode 100644 android/armeabi-v7a/include/openssl/err.h create mode 100644 android/armeabi-v7a/include/openssl/evp.h create mode 100644 android/armeabi-v7a/include/openssl/hmac.h create mode 100644 android/armeabi-v7a/include/openssl/idea.h create mode 100644 android/armeabi-v7a/include/openssl/kdf.h create mode 100644 android/armeabi-v7a/include/openssl/lhash.h create mode 100644 android/armeabi-v7a/include/openssl/md2.h create mode 100644 android/armeabi-v7a/include/openssl/md4.h create mode 100644 android/armeabi-v7a/include/openssl/md5.h create mode 100644 android/armeabi-v7a/include/openssl/mdc2.h create mode 100644 android/armeabi-v7a/include/openssl/modes.h create mode 100644 android/armeabi-v7a/include/openssl/obj_mac.h create mode 100644 android/armeabi-v7a/include/openssl/objects.h create mode 100644 android/armeabi-v7a/include/openssl/ocsp.h create mode 100644 android/armeabi-v7a/include/openssl/opensslconf-arm32.h create mode 100644 android/armeabi-v7a/include/openssl/opensslconf-arm64.h create mode 100644 android/armeabi-v7a/include/openssl/opensslconf-x86.h create mode 100644 android/armeabi-v7a/include/openssl/opensslconf.h create mode 100644 android/armeabi-v7a/include/openssl/opensslv.h create mode 100644 android/armeabi-v7a/include/openssl/ossl_typ.h create mode 100644 android/armeabi-v7a/include/openssl/pem.h create mode 100644 android/armeabi-v7a/include/openssl/pem2.h create mode 100644 android/armeabi-v7a/include/openssl/pkcs12.h create mode 100644 android/armeabi-v7a/include/openssl/pkcs7.h create mode 100644 android/armeabi-v7a/include/openssl/rand.h create mode 100644 android/armeabi-v7a/include/openssl/rc2.h create mode 100644 android/armeabi-v7a/include/openssl/rc4.h create mode 100644 android/armeabi-v7a/include/openssl/rc5.h create mode 100644 android/armeabi-v7a/include/openssl/ripemd.h create mode 100644 android/armeabi-v7a/include/openssl/rsa.h create mode 100644 android/armeabi-v7a/include/openssl/safestack.h create mode 100644 android/armeabi-v7a/include/openssl/seed.h create mode 100644 android/armeabi-v7a/include/openssl/sha.h create mode 100644 android/armeabi-v7a/include/openssl/srp.h create mode 100644 android/armeabi-v7a/include/openssl/srtp.h create mode 100644 android/armeabi-v7a/include/openssl/ssl.h create mode 100644 android/armeabi-v7a/include/openssl/ssl2.h create mode 100644 android/armeabi-v7a/include/openssl/ssl3.h create mode 100644 android/armeabi-v7a/include/openssl/stack.h create mode 100644 android/armeabi-v7a/include/openssl/symhacks.h create mode 100644 android/armeabi-v7a/include/openssl/tls1.h create mode 100644 android/armeabi-v7a/include/openssl/ts.h create mode 100644 android/armeabi-v7a/include/openssl/txt_db.h create mode 100644 android/armeabi-v7a/include/openssl/ui.h create mode 100644 android/armeabi-v7a/include/openssl/whrlpool.h create mode 100644 android/armeabi-v7a/include/openssl/x509.h create mode 100644 android/armeabi-v7a/include/openssl/x509_vfy.h create mode 100644 android/armeabi-v7a/include/openssl/x509v3.h create mode 100644 android/armeabi-v7a/libcrypto.a create mode 100644 android/armeabi-v7a/libssl.a create mode 100644 android/armeabi/include/openssl/aes.h create mode 100644 android/armeabi/include/openssl/asn1.h create mode 100644 android/armeabi/include/openssl/asn1_mac.h create mode 100644 android/armeabi/include/openssl/asn1t.h create mode 100644 android/armeabi/include/openssl/async.h create mode 100644 android/armeabi/include/openssl/bio.h create mode 100644 android/armeabi/include/openssl/blowfish.h create mode 100644 android/armeabi/include/openssl/bn.h create mode 100644 android/armeabi/include/openssl/buffer.h create mode 100644 android/armeabi/include/openssl/camellia.h create mode 100644 android/armeabi/include/openssl/cast.h create mode 100644 android/armeabi/include/openssl/cmac.h create mode 100644 android/armeabi/include/openssl/cms.h create mode 100644 android/armeabi/include/openssl/comp.h create mode 100644 android/armeabi/include/openssl/conf.h create mode 100644 android/armeabi/include/openssl/conf_api.h create mode 100644 android/armeabi/include/openssl/crypto.h create mode 100644 android/armeabi/include/openssl/ct.h create mode 100644 android/armeabi/include/openssl/des.h create mode 100644 android/armeabi/include/openssl/dh.h create mode 100644 android/armeabi/include/openssl/dsa.h create mode 100644 android/armeabi/include/openssl/dtls1.h create mode 100644 android/armeabi/include/openssl/e_os2.h create mode 100644 android/armeabi/include/openssl/ebcdic.h create mode 100644 android/armeabi/include/openssl/ec.h create mode 100644 android/armeabi/include/openssl/ecdh.h create mode 100644 android/armeabi/include/openssl/ecdsa.h create mode 100644 android/armeabi/include/openssl/engine.h create mode 100644 android/armeabi/include/openssl/err.h create mode 100644 android/armeabi/include/openssl/evp.h create mode 100644 android/armeabi/include/openssl/hmac.h create mode 100644 android/armeabi/include/openssl/idea.h create mode 100644 android/armeabi/include/openssl/kdf.h create mode 100644 android/armeabi/include/openssl/lhash.h create mode 100644 android/armeabi/include/openssl/md2.h create mode 100644 android/armeabi/include/openssl/md4.h create mode 100644 android/armeabi/include/openssl/md5.h create mode 100644 android/armeabi/include/openssl/mdc2.h create mode 100644 android/armeabi/include/openssl/modes.h create mode 100644 android/armeabi/include/openssl/obj_mac.h create mode 100644 android/armeabi/include/openssl/objects.h create mode 100644 android/armeabi/include/openssl/ocsp.h create mode 100644 android/armeabi/include/openssl/opensslconf-arm32.h create mode 100644 android/armeabi/include/openssl/opensslconf-arm64.h create mode 100644 android/armeabi/include/openssl/opensslconf-x86.h create mode 100644 android/armeabi/include/openssl/opensslconf.h create mode 100644 android/armeabi/include/openssl/opensslv.h create mode 100644 android/armeabi/include/openssl/ossl_typ.h create mode 100644 android/armeabi/include/openssl/pem.h create mode 100644 android/armeabi/include/openssl/pem2.h create mode 100644 android/armeabi/include/openssl/pkcs12.h create mode 100644 android/armeabi/include/openssl/pkcs7.h create mode 100644 android/armeabi/include/openssl/rand.h create mode 100644 android/armeabi/include/openssl/rc2.h create mode 100644 android/armeabi/include/openssl/rc4.h create mode 100644 android/armeabi/include/openssl/rc5.h create mode 100644 android/armeabi/include/openssl/ripemd.h create mode 100644 android/armeabi/include/openssl/rsa.h create mode 100644 android/armeabi/include/openssl/safestack.h create mode 100644 android/armeabi/include/openssl/seed.h create mode 100644 android/armeabi/include/openssl/sha.h create mode 100644 android/armeabi/include/openssl/srp.h create mode 100644 android/armeabi/include/openssl/srtp.h create mode 100644 android/armeabi/include/openssl/ssl.h create mode 100644 android/armeabi/include/openssl/ssl2.h create mode 100644 android/armeabi/include/openssl/ssl3.h create mode 100644 android/armeabi/include/openssl/stack.h create mode 100644 android/armeabi/include/openssl/symhacks.h create mode 100644 android/armeabi/include/openssl/tls1.h create mode 100644 android/armeabi/include/openssl/ts.h create mode 100644 android/armeabi/include/openssl/txt_db.h create mode 100644 android/armeabi/include/openssl/ui.h create mode 100644 android/armeabi/include/openssl/whrlpool.h create mode 100644 android/armeabi/include/openssl/x509.h create mode 100644 android/armeabi/include/openssl/x509_vfy.h create mode 100644 android/armeabi/include/openssl/x509v3.h create mode 100644 android/armeabi/libcrypto.a create mode 100644 android/armeabi/libssl.a create mode 100644 android/x86/include/openssl/aes.h create mode 100644 android/x86/include/openssl/asn1.h create mode 100644 android/x86/include/openssl/asn1_mac.h create mode 100644 android/x86/include/openssl/asn1t.h create mode 100644 android/x86/include/openssl/async.h create mode 100644 android/x86/include/openssl/bio.h create mode 100644 android/x86/include/openssl/blowfish.h create mode 100644 android/x86/include/openssl/bn.h create mode 100644 android/x86/include/openssl/buffer.h create mode 100644 android/x86/include/openssl/camellia.h create mode 100644 android/x86/include/openssl/cast.h create mode 100644 android/x86/include/openssl/cmac.h create mode 100644 android/x86/include/openssl/cms.h create mode 100644 android/x86/include/openssl/comp.h create mode 100644 android/x86/include/openssl/conf.h create mode 100644 android/x86/include/openssl/conf_api.h create mode 100644 android/x86/include/openssl/crypto.h create mode 100644 android/x86/include/openssl/ct.h create mode 100644 android/x86/include/openssl/des.h create mode 100644 android/x86/include/openssl/dh.h create mode 100644 android/x86/include/openssl/dsa.h create mode 100644 android/x86/include/openssl/dtls1.h create mode 100644 android/x86/include/openssl/e_os2.h create mode 100644 android/x86/include/openssl/ebcdic.h create mode 100644 android/x86/include/openssl/ec.h create mode 100644 android/x86/include/openssl/ecdh.h create mode 100644 android/x86/include/openssl/ecdsa.h create mode 100644 android/x86/include/openssl/engine.h create mode 100644 android/x86/include/openssl/err.h create mode 100644 android/x86/include/openssl/evp.h create mode 100644 android/x86/include/openssl/hmac.h create mode 100644 android/x86/include/openssl/idea.h create mode 100644 android/x86/include/openssl/kdf.h create mode 100644 android/x86/include/openssl/lhash.h create mode 100644 android/x86/include/openssl/md2.h create mode 100644 android/x86/include/openssl/md4.h create mode 100644 android/x86/include/openssl/md5.h create mode 100644 android/x86/include/openssl/mdc2.h create mode 100644 android/x86/include/openssl/modes.h create mode 100644 android/x86/include/openssl/obj_mac.h create mode 100644 android/x86/include/openssl/objects.h create mode 100644 android/x86/include/openssl/ocsp.h create mode 100644 android/x86/include/openssl/opensslconf-arm32.h create mode 100644 android/x86/include/openssl/opensslconf-arm64.h create mode 100644 android/x86/include/openssl/opensslconf-x86.h create mode 100644 android/x86/include/openssl/opensslconf.h create mode 100644 android/x86/include/openssl/opensslv.h create mode 100644 android/x86/include/openssl/ossl_typ.h create mode 100644 android/x86/include/openssl/pem.h create mode 100644 android/x86/include/openssl/pem2.h create mode 100644 android/x86/include/openssl/pkcs12.h create mode 100644 android/x86/include/openssl/pkcs7.h create mode 100644 android/x86/include/openssl/rand.h create mode 100644 android/x86/include/openssl/rc2.h create mode 100644 android/x86/include/openssl/rc4.h create mode 100644 android/x86/include/openssl/rc5.h create mode 100644 android/x86/include/openssl/ripemd.h create mode 100644 android/x86/include/openssl/rsa.h create mode 100644 android/x86/include/openssl/safestack.h create mode 100644 android/x86/include/openssl/seed.h create mode 100644 android/x86/include/openssl/sha.h create mode 100644 android/x86/include/openssl/srp.h create mode 100644 android/x86/include/openssl/srtp.h create mode 100644 android/x86/include/openssl/ssl.h create mode 100644 android/x86/include/openssl/ssl2.h create mode 100644 android/x86/include/openssl/ssl3.h create mode 100644 android/x86/include/openssl/stack.h create mode 100644 android/x86/include/openssl/symhacks.h create mode 100644 android/x86/include/openssl/tls1.h create mode 100644 android/x86/include/openssl/ts.h create mode 100644 android/x86/include/openssl/txt_db.h create mode 100644 android/x86/include/openssl/ui.h create mode 100644 android/x86/include/openssl/whrlpool.h create mode 100644 android/x86/include/openssl/x509.h create mode 100644 android/x86/include/openssl/x509_vfy.h create mode 100644 android/x86/include/openssl/x509v3.h create mode 100644 android/x86/libcrypto.a create mode 100644 android/x86/libssl.a create mode 100644 ios/include/openssl/aes.h create mode 100644 ios/include/openssl/asn1.h create mode 100644 ios/include/openssl/asn1_mac.h create mode 100644 ios/include/openssl/asn1t.h create mode 100644 ios/include/openssl/async.h create mode 100644 ios/include/openssl/bio.h create mode 100644 ios/include/openssl/blowfish.h create mode 100644 ios/include/openssl/bn.h create mode 100644 ios/include/openssl/buffer.h create mode 100644 ios/include/openssl/camellia.h create mode 100644 ios/include/openssl/cast.h create mode 100644 ios/include/openssl/cmac.h create mode 100644 ios/include/openssl/cms.h create mode 100644 ios/include/openssl/comp.h create mode 100644 ios/include/openssl/conf.h create mode 100644 ios/include/openssl/conf_api.h create mode 100644 ios/include/openssl/crypto.h create mode 100644 ios/include/openssl/ct.h create mode 100644 ios/include/openssl/des.h create mode 100644 ios/include/openssl/dh.h create mode 100644 ios/include/openssl/dsa.h create mode 100644 ios/include/openssl/dtls1.h create mode 100644 ios/include/openssl/e_os2.h create mode 100644 ios/include/openssl/ebcdic.h create mode 100644 ios/include/openssl/ec.h create mode 100644 ios/include/openssl/ecdh.h create mode 100644 ios/include/openssl/ecdsa.h create mode 100644 ios/include/openssl/engine.h create mode 100644 ios/include/openssl/err.h create mode 100644 ios/include/openssl/evp.h create mode 100644 ios/include/openssl/hmac.h create mode 100644 ios/include/openssl/idea.h create mode 100644 ios/include/openssl/kdf.h create mode 100644 ios/include/openssl/lhash.h create mode 100644 ios/include/openssl/md2.h create mode 100644 ios/include/openssl/md4.h create mode 100644 ios/include/openssl/md5.h create mode 100644 ios/include/openssl/mdc2.h create mode 100644 ios/include/openssl/modes.h create mode 100644 ios/include/openssl/obj_mac.h create mode 100644 ios/include/openssl/objects.h create mode 100644 ios/include/openssl/ocsp.h create mode 100644 ios/include/openssl/opensslconf-arm32.h create mode 100644 ios/include/openssl/opensslconf-arm64.h create mode 100644 ios/include/openssl/opensslconf-i386.h create mode 100644 ios/include/openssl/opensslconf-x86_64.h create mode 100644 ios/include/openssl/opensslconf.h create mode 100644 ios/include/openssl/opensslv.h create mode 100644 ios/include/openssl/ossl_typ.h create mode 100644 ios/include/openssl/pem.h create mode 100644 ios/include/openssl/pem2.h create mode 100644 ios/include/openssl/pkcs12.h create mode 100644 ios/include/openssl/pkcs7.h create mode 100644 ios/include/openssl/rand.h create mode 100644 ios/include/openssl/rc2.h create mode 100644 ios/include/openssl/rc4.h create mode 100644 ios/include/openssl/rc5.h create mode 100644 ios/include/openssl/ripemd.h create mode 100644 ios/include/openssl/rsa.h create mode 100644 ios/include/openssl/safestack.h create mode 100644 ios/include/openssl/seed.h create mode 100644 ios/include/openssl/sha.h create mode 100644 ios/include/openssl/srp.h create mode 100644 ios/include/openssl/srtp.h create mode 100644 ios/include/openssl/ssl.h create mode 100644 ios/include/openssl/ssl2.h create mode 100644 ios/include/openssl/ssl3.h create mode 100644 ios/include/openssl/stack.h create mode 100644 ios/include/openssl/symhacks.h create mode 100644 ios/include/openssl/tls1.h create mode 100644 ios/include/openssl/ts.h create mode 100644 ios/include/openssl/txt_db.h create mode 100644 ios/include/openssl/ui.h create mode 100644 ios/include/openssl/whrlpool.h create mode 100644 ios/include/openssl/x509.h create mode 100644 ios/include/openssl/x509_vfy.h create mode 100644 ios/include/openssl/x509v3.h create mode 100644 ios/include/websockets/lws_config-arm32.h create mode 100644 ios/include/websockets/lws_config-arm64.h create mode 100644 ios/include/websockets/lws_config-i386.h create mode 100644 ios/include/websockets/lws_config-x86_64.h create mode 100644 ios/libs/libcrypto.a create mode 100644 ios/libs/libssl.a create mode 100644 mac/include/openssl/aes.h create mode 100644 mac/include/openssl/asn1.h create mode 100644 mac/include/openssl/asn1_mac.h create mode 100644 mac/include/openssl/asn1t.h create mode 100644 mac/include/openssl/async.h create mode 100644 mac/include/openssl/bio.h create mode 100644 mac/include/openssl/blowfish.h create mode 100644 mac/include/openssl/bn.h create mode 100644 mac/include/openssl/buffer.h create mode 100644 mac/include/openssl/camellia.h create mode 100644 mac/include/openssl/cast.h create mode 100644 mac/include/openssl/cmac.h create mode 100644 mac/include/openssl/cms.h create mode 100644 mac/include/openssl/comp.h create mode 100644 mac/include/openssl/conf.h create mode 100644 mac/include/openssl/conf_api.h create mode 100644 mac/include/openssl/crypto.h create mode 100644 mac/include/openssl/ct.h create mode 100644 mac/include/openssl/des.h create mode 100644 mac/include/openssl/dh.h create mode 100644 mac/include/openssl/dsa.h create mode 100644 mac/include/openssl/dtls1.h create mode 100644 mac/include/openssl/e_os2.h create mode 100644 mac/include/openssl/ebcdic.h create mode 100644 mac/include/openssl/ec.h create mode 100644 mac/include/openssl/ecdh.h create mode 100644 mac/include/openssl/ecdsa.h create mode 100644 mac/include/openssl/engine.h create mode 100644 mac/include/openssl/err.h create mode 100644 mac/include/openssl/evp.h create mode 100644 mac/include/openssl/hmac.h create mode 100644 mac/include/openssl/idea.h create mode 100644 mac/include/openssl/kdf.h create mode 100644 mac/include/openssl/lhash.h create mode 100644 mac/include/openssl/md2.h create mode 100644 mac/include/openssl/md4.h create mode 100644 mac/include/openssl/md5.h create mode 100644 mac/include/openssl/mdc2.h create mode 100644 mac/include/openssl/modes.h create mode 100644 mac/include/openssl/obj_mac.h create mode 100644 mac/include/openssl/objects.h create mode 100644 mac/include/openssl/ocsp.h create mode 100644 mac/include/openssl/opensslconf.h create mode 100644 mac/include/openssl/opensslv.h create mode 100644 mac/include/openssl/ossl_typ.h create mode 100644 mac/include/openssl/pem.h create mode 100644 mac/include/openssl/pem2.h create mode 100644 mac/include/openssl/pkcs12.h create mode 100644 mac/include/openssl/pkcs7.h create mode 100644 mac/include/openssl/rand.h create mode 100644 mac/include/openssl/rc2.h create mode 100644 mac/include/openssl/rc4.h create mode 100644 mac/include/openssl/rc5.h create mode 100644 mac/include/openssl/ripemd.h create mode 100644 mac/include/openssl/rsa.h create mode 100644 mac/include/openssl/safestack.h create mode 100644 mac/include/openssl/seed.h create mode 100644 mac/include/openssl/sha.h create mode 100644 mac/include/openssl/srp.h create mode 100644 mac/include/openssl/srtp.h create mode 100644 mac/include/openssl/ssl.h create mode 100644 mac/include/openssl/ssl2.h create mode 100644 mac/include/openssl/ssl3.h create mode 100644 mac/include/openssl/stack.h create mode 100644 mac/include/openssl/symhacks.h create mode 100644 mac/include/openssl/tls1.h create mode 100644 mac/include/openssl/ts.h create mode 100644 mac/include/openssl/txt_db.h create mode 100644 mac/include/openssl/ui.h create mode 100644 mac/include/openssl/whrlpool.h create mode 100644 mac/include/openssl/x509.h create mode 100644 mac/include/openssl/x509_vfy.h create mode 100644 mac/include/openssl/x509v3.h create mode 100644 win32/include/openssl/__DECC_INCLUDE_EPILOGUE.H create mode 100644 win32/include/openssl/__DECC_INCLUDE_PROLOGUE.H create mode 100644 win32/include/openssl/aes.h create mode 100644 win32/include/openssl/applink.c create mode 100644 win32/include/openssl/asn1.h create mode 100644 win32/include/openssl/asn1_mac.h create mode 100644 win32/include/openssl/asn1t.h create mode 100644 win32/include/openssl/async.h create mode 100644 win32/include/openssl/bio.h create mode 100644 win32/include/openssl/blowfish.h create mode 100644 win32/include/openssl/bn.h create mode 100644 win32/include/openssl/buffer.h create mode 100644 win32/include/openssl/camellia.h create mode 100644 win32/include/openssl/cast.h create mode 100644 win32/include/openssl/cmac.h create mode 100644 win32/include/openssl/cms.h create mode 100644 win32/include/openssl/comp.h create mode 100644 win32/include/openssl/conf.h create mode 100644 win32/include/openssl/conf_api.h create mode 100644 win32/include/openssl/crypto.h create mode 100644 win32/include/openssl/ct.h create mode 100644 win32/include/openssl/des.h create mode 100644 win32/include/openssl/dh.h create mode 100644 win32/include/openssl/dsa.h create mode 100644 win32/include/openssl/dtls1.h create mode 100644 win32/include/openssl/e_os2.h create mode 100644 win32/include/openssl/ebcdic.h create mode 100644 win32/include/openssl/ec.h create mode 100644 win32/include/openssl/ecdh.h create mode 100644 win32/include/openssl/ecdsa.h create mode 100644 win32/include/openssl/engine.h create mode 100644 win32/include/openssl/err.h create mode 100644 win32/include/openssl/evp.h create mode 100644 win32/include/openssl/hmac.h create mode 100644 win32/include/openssl/idea.h create mode 100644 win32/include/openssl/kdf.h create mode 100644 win32/include/openssl/lhash.h create mode 100644 win32/include/openssl/md2.h create mode 100644 win32/include/openssl/md4.h create mode 100644 win32/include/openssl/md5.h create mode 100644 win32/include/openssl/mdc2.h create mode 100644 win32/include/openssl/modes.h create mode 100644 win32/include/openssl/obj_mac.h create mode 100644 win32/include/openssl/objects.h create mode 100644 win32/include/openssl/ocsp.h create mode 100644 win32/include/openssl/opensslconf.h create mode 100644 win32/include/openssl/opensslv.h create mode 100644 win32/include/openssl/ossl_typ.h create mode 100644 win32/include/openssl/pem.h create mode 100644 win32/include/openssl/pem2.h create mode 100644 win32/include/openssl/pkcs12.h create mode 100644 win32/include/openssl/pkcs7.h create mode 100644 win32/include/openssl/rand.h create mode 100644 win32/include/openssl/rc2.h create mode 100644 win32/include/openssl/rc4.h create mode 100644 win32/include/openssl/rc5.h create mode 100644 win32/include/openssl/ripemd.h create mode 100644 win32/include/openssl/rsa.h create mode 100644 win32/include/openssl/safestack.h create mode 100644 win32/include/openssl/seed.h create mode 100644 win32/include/openssl/sha.h create mode 100644 win32/include/openssl/srp.h create mode 100644 win32/include/openssl/srtp.h create mode 100644 win32/include/openssl/ssl.h create mode 100644 win32/include/openssl/ssl2.h create mode 100644 win32/include/openssl/ssl3.h create mode 100644 win32/include/openssl/stack.h create mode 100644 win32/include/openssl/symhacks.h create mode 100644 win32/include/openssl/tls1.h create mode 100644 win32/include/openssl/ts.h create mode 100644 win32/include/openssl/txt_db.h create mode 100644 win32/include/openssl/ui.h create mode 100644 win32/include/openssl/whrlpool.h create mode 100644 win32/include/openssl/x509.h create mode 100644 win32/include/openssl/x509_vfy.h create mode 100644 win32/include/openssl/x509v3.h delete mode 100755 win32/include/websockets/win32helpers/getopt.h delete mode 100755 win32/include/websockets/win32helpers/gettimeofday.h delete mode 100755 win32/include/websockets/win32helpers/websock-w32.h create mode 100644 win32/libs/libcrypto-1_1.dll create mode 100644 win32/libs/libcrypto.lib create mode 100644 win32/libs/libcurl.lib delete mode 100644 win32/libs/libcurl_imp.lib delete mode 100644 win32/libs/libeay32.lib create mode 100644 win32/libs/libssl-1_1.dll create mode 100644 win32/libs/libssl.lib delete mode 100644 win32/libs/ssleay32.lib create mode 100644 win32/libs/websockets.dll diff --git a/android/Android.mk b/android/Android.mk index 77b8e336..6a0a3011 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -69,6 +69,21 @@ endif include $(PREBUILT_STATIC_LIBRARY) +include $(CLEAR_VARS) + +LOCAL_MODULE := cocos_crypto_static +LOCAL_MODULE_FILENAME := crypto +LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcrypto.a +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(TARGET_ARCH_ABI)/include +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := cocos_ssl_static +LOCAL_MODULE_FILENAME := ssl +LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libssl.a +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(TARGET_ARCH_ABI)/include +include $(PREBUILT_STATIC_LIBRARY) + #====================================== include $(CLEAR_VARS) diff --git a/android/arm64-v8a/include/openssl/aes.h b/android/arm64-v8a/include/openssl/aes.h new file mode 100644 index 00000000..245c552a --- /dev/null +++ b/android/arm64-v8a/include/openssl/aes.h @@ -0,0 +1,92 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include + +# include +# ifdef __cplusplus +extern "C" { +# endif + +# 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 + +/* 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); + +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); +/* 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 diff --git a/android/arm64-v8a/include/openssl/asn1.h b/android/arm64-v8a/include/openssl/asn1.h new file mode 100644 index 00000000..7cf61161 --- /dev/null +++ b/android/arm64-v8a/include/openssl/asn1.h @@ -0,0 +1,1096 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1_H +# define HEADER_ASN1_H + +# include +# include +# include +# include +# include +# include + +# include + +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# 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_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# 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_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 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* 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; +DEFINE_STACK_OF(X509_ALGOR) + +# 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 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* 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 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# 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; + +DEFINE_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 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * 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) + +DEFINE_STACK_OF(ASN1_INTEGER) + +DEFINE_STACK_OF(ASN1_GENERALSTRING) + +DEFINE_STACK_OF(ASN1_UTF8STRING) + +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; + +DEFINE_STACK_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) + +/* 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 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 + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const 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_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +ASN1_OBJECT *ASN1_OBJECT_new(void); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DEFINE_STACK_OF(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(const ASN1_STRING *x); +DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +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(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +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); + +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(const 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 i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const 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_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +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_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const 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); + +unsigned long ASN1_tag2bit(int tag); + +/* 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_STDIO +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, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +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, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +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); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +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(const 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(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +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); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* 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(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const 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. + */ + +int 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_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_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_DO_LOCK 233 +# define ASN1_F_ASN1_DUP 111 +# 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_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_INT64 224 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_GET_UINT64 225 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 +# 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_PCTX_NEW 205 +# define ASN1_F_ASN1_SCTX_NEW 221 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_GET_INT64 227 +# define ASN1_F_ASN1_STRING_GET_UINT64 230 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# define ASN1_F_ASN1_STRING_TO_BN 228 +# 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_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# 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_STRING 229 +# 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_C2I_IBUF 226 +# define ASN1_F_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_DO_TCREATE 222 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# 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_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_PBE2_SET_SCRYPT 231 +# 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_PKCS5_SCRYPT_SET 232 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_STBL_MODULE_INIT 223 +# 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_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_OBJECT_HEADER 102 +# 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_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_SETTING_CIPHER_PARAMS 114 +# define ASN1_R_EXPECTING_AN_INTEGER 115 +# define ASN1_R_EXPECTING_AN_OBJECT 116 +# 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_NEGATIVE_VALUE 226 +# 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_PADDING 221 +# define ASN1_R_ILLEGAL_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 +# 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_SCRYPT_PARAMETERS 227 +# define ASN1_R_INVALID_SEPARATOR 131 +# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_INVALID_VALUE 219 +# 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_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_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_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +# define ASN1_R_TOO_LARGE 223 +# define ASN1_R_TOO_LONG 155 +# define ASN1_R_TOO_SMALL 224 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 195 +# 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_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_INTEGER_TYPE 225 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/asn1_mac.h b/android/arm64-v8a/include/openssl/asn1_mac.h new file mode 100644 index 00000000..7ac1782a --- /dev/null +++ b/android/arm64-v8a/include/openssl/asn1_mac.h @@ -0,0 +1,10 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#error "This file is obsolete; please update your software." diff --git a/android/arm64-v8a/include/openssl/asn1t.h b/android/arm64-v8a/include/openssl/asn1t.h new file mode 100644 index 00000000..8eedfb3f --- /dev/null +++ b/android/arm64-v8a/include/openssl/asn1t.h @@ -0,0 +1,924 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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 static_ASN1_ITEM_start(itname) \ + static 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 static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# 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) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_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 static_ASN1_SEQUENCE_END(stname) static_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 static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_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) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), 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 static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_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 static_ASN1_BROKEN_SEQUENCE_END(stname) \ + static_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 static_ASN1_SEQUENCE_END_cb(stname, tname) static_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 static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_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 static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_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 static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_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) } + +/* 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) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,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, adb_cb, def, none) \ + ;\ + static const ASN1_ADB name##_adb = {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + } + +# else + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + 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 */ + const char *field_name; /* Field name */ + 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 */ + int (*adb_cb)(long *psel); /* Application callback */ + 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 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) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* 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) */ + const char *sname; /* Structure name */ +}; + +/*- + * 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. + * + * 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_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 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_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) + +# 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));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_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) + +DEFINE_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_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); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/arm64-v8a/include/openssl/async.h b/android/arm64-v8a/include/openssl/async.h new file mode 100644 index 00000000..5b2e496d --- /dev/null +++ b/android/arm64-v8a/include/openssl/async.h @@ -0,0 +1,98 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifndef HEADER_ASYNC_H +# define HEADER_ASYNC_H + +#if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include to use this */ +#define OSSL_ASYNC_FD HANDLE +#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE +# endif +#else +#define OSSL_ASYNC_FD int +#define OSSL_BAD_ASYNC_FD -1 +#endif + + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct async_job_st ASYNC_JOB; +typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; + +#define ASYNC_ERR 0 +#define ASYNC_NO_JOBS 1 +#define ASYNC_PAUSE 2 +#define ASYNC_FINISH 3 + +int ASYNC_init_thread(size_t max_size, size_t init_size); +void ASYNC_cleanup_thread(void); + +#ifdef OSSL_ASYNC_FD +ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); +void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); +int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD fd, + void *custom_data, + void (*cleanup)(ASYNC_WAIT_CTX *, const void *, + OSSL_ASYNC_FD, void *)); +int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD *fd, void **custom_data); +int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, + size_t *numfds); +int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); +#endif + +int ASYNC_is_capable(void); + +int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, + int (*func)(void *), void *args, size_t size); +int ASYNC_pause_job(void); + +ASYNC_JOB *ASYNC_get_current_job(void); +ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); +void ASYNC_block_pause(void); +void ASYNC_unblock_pause(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. + */ + +int ERR_load_ASYNC_strings(void); + +/* Error codes for the ASYNC functions. */ + +/* Function codes. */ +# define ASYNC_F_ASYNC_CTX_NEW 100 +# define ASYNC_F_ASYNC_INIT_THREAD 101 +# define ASYNC_F_ASYNC_JOB_NEW 102 +# define ASYNC_F_ASYNC_PAUSE_JOB 103 +# define ASYNC_F_ASYNC_START_FUNC 104 +# define ASYNC_F_ASYNC_START_JOB 105 + +/* Reason codes. */ +# define ASYNC_R_FAILED_TO_SET_POOL 101 +# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 +# define ASYNC_R_INIT_FAILED 105 +# define ASYNC_R_INVALID_POOL_SIZE 103 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/bio.h b/android/arm64-v8a/include/openssl/bio.h new file mode 100644 index 00000000..9bc941b2 --- /dev/null +++ b/android/arm64-v8a/include/openssl/bio.h @@ -0,0 +1,854 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIO_H +# define HEADER_BIO_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include + +# ifndef OPENSSL_NO_SCTP +# ifndef OPENSSL_SYS_VMS +# include +# else +# include +# endif +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif + +#define BIO_TYPE_START 128 + +/* + * 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 */ +# 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 + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 50 + +# 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 + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we should't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +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) + +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +BIO_callback_fn BIO_get_callback(const BIO *b); +void BIO_set_callback(BIO *b, BIO_callback_fn callback); +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef void bio_info_cb(BIO *, int, const char *, int, long, long); + +DEFINE_STACK_OF(BIO) + +/* 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 + +/* + * #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_C_SET_CONNECT_MODE 155 + +# 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) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_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_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)addr) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(char *)port) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #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,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3,(char *)bio) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +/* BIO_s_accept() and BIO_s_connect() */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)name) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)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,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (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) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t 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); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(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) (BIO *, int, const char *, int, long, long)); +void *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); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +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); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +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 +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +# endif + +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_STDIO +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); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +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_sock_init(void); +# if OPENSSL_API_COMPAT < 0x10100000L +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); + +DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) +DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) +DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) +DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) +DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +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__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(BIO_METHOD *biom)) (BIO *, const char *, int); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int (*BIO_meth_get_read(BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int (*BIO_meth_get_puts(BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom)) + (BIO *, int, bio_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + bio_info_cb *)); + +/* 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. + */ + +int ERR_load_BIO_strings(void); + +/* Error codes for the BIO functions. */ + +/* Function codes. */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_ADDR_STRINGS 134 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_ACCEPT_EX 137 +# define BIO_F_BIO_ADDR_NEW 144 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CONNECT 138 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_NEW_INDEX 102 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_LISTEN 139 +# define BIO_F_BIO_LOOKUP 135 +# 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_PARSE_HOSTSERV 136 +# define BIO_F_BIO_PUTS 110 +# define BIO_F_BIO_READ 111 +# define BIO_F_BIO_SOCKET 140 +# define BIO_F_BIO_SOCKET_NBIO 142 +# define BIO_F_BIO_SOCK_INFO 141 +# define BIO_F_BIO_SOCK_INIT 112 +# define BIO_F_BIO_WRITE 113 +# define BIO_F_BUFFER_CTRL 114 +# define BIO_F_CONN_CTRL 127 +# define BIO_F_CONN_STATE 115 +# define BIO_F_DGRAM_SCTP_READ 132 +# define BIO_F_DGRAM_SCTP_WRITE 133 +# define BIO_F_FILE_CTRL 116 +# define BIO_F_FILE_READ 130 +# define BIO_F_LINEBUFFER_CTRL 129 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_SSL_NEW 118 + +/* Reason codes. */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 +# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_GETSOCKNAME_ERROR 132 +# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 +# define BIO_R_GETTING_SOCKTYPE 134 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_SOCKET 135 +# define BIO_R_IN_USE 123 +# define BIO_R_LISTEN_V6_ONLY 136 +# define BIO_R_LOOKUP_RETURNED_NOTHING 142 +# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 +# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_KEEPALIVE 137 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNABLE_TO_NODELAY 138 +# define BIO_R_UNABLE_TO_REUSEADDR 139 +# define BIO_R_UNAVAILABLE_IP_FAMILY 145 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNKNOWN_INFO_TYPE 140 +# define BIO_R_UNSUPPORTED_IP_FAMILY 146 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/blowfish.h b/android/arm64-v8a/include/openssl/blowfish.h new file mode 100644 index 00000000..cd3e460e --- /dev/null +++ b/android/arm64-v8a/include/openssl/blowfish.h @@ -0,0 +1,61 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BLOWFISH_H +# define HEADER_BLOWFISH_H + +# include + +# ifndef OPENSSL_NO_BF +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! BF_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define BF_LONG unsigned int + +# 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; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/bn.h b/android/arm64-v8a/include/openssl/bn.h new file mode 100644 index 00000000..17bd5213 --- /dev/null +++ b/android/arm64-v8a/include/openssl/bn.h @@ -0,0 +1,575 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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_STDIO +# include +# endif +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 64-bit processor with LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT_LONG +# define BN_ULONG unsigned long +# define BN_BYTES 8 +# endif + +/* + * 64-bit processor other than LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT +# define BN_ULONG unsigned long long +# define BN_BYTES 8 +# endif + +# ifdef THIRTY_TWO_BIT +# define BN_ULONG unsigned int +# define BN_BYTES 4 +# endif + +# define BN_BITS2 (BN_BYTES * 8) +# define BN_BITS (BN_BITS2 * 2) +# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) + +# 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 +# define BN_FLG_SECURE 0x08 + +# if OPENSSL_API_COMPAT < 0x00908000L +/* deprecated name for the flag */ +# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME +# define BN_FLG_FREE 0x8000 /* used for debugging */ +# endif + +void BN_set_flags(BIGNUM *b, int n); +int BN_get_flags(const BIGNUM *b, int n); + +/* Values for |top| in BN_rand() */ +#define BN_RAND_TOP_ANY -1 +#define BN_RAND_TOP_ONE 0 +#define BN_RAND_TOP_TWO 1 + +/* Values for |bottom| in BN_rand() */ +#define BN_RAND_BOTTOM_ANY 0 +#define BN_RAND_BOTTOM_ODD 1 + +/* + * get a clone of a BIGNUM with changed flags, for *temporary* use only (the + * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The + * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that + * has not been otherwise initialised or used. + */ +void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); + +/* Wrapper function to make using BN_GENCB easier */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); + +BN_GENCB *BN_GENCB_new(void); +void BN_GENCB_free(BN_GENCB *cb); + +/* Populate a BN_GENCB structure with an "old"-style callback */ +void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), + void *cb_arg); + +/* Populate a BN_GENCB structure with a "new"-style callback */ +void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), + void *cb_arg); + +void *BN_GENCB_get_arg(BN_GENCB *cb); + +# 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) + +int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_zero(const BIGNUM *a); +int BN_is_one(const BIGNUM *a); +int BN_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_odd(const BIGNUM *a); + +# define BN_one(a) (BN_set_word((a),1)) + +void BN_zero_ex(BIGNUM *a); + +# if OPENSSL_API_COMPAT >= 0x00908000L +# 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); +BN_CTX *BN_CTX_secure_new(void); +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 l); +int BN_security_bits(int L, int N); +BIGNUM *BN_new(void); +BIGNUM *BN_secure_new(void); +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); +int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +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 + */ +int BN_is_negative(const BIGNUM *b); + +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_STDIO +int BN_print_fp(FILE *fp, const BIGNUM *a); +# endif +int BN_print(BIO *bio, const BIGNUM *a); +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 */ +DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, + const BIGNUM *rem, + void (*callback) (int, int, + void *), + void *cb_arg)) +DEPRECATEDIN_0_9_8(int + BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg)) +DEPRECATEDIN_0_9_8(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)) + +/* 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); +int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, + BN_CTX *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, CRYPTO_RWLOCK *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 *); + +int BN_BLINDING_is_current_thread(BN_BLINDING *b); +void BN_BLINDING_set_current_thread(BN_BLINDING *b); +int BN_BLINDING_lock(BN_BLINDING *b); +int BN_BLINDING_unlock(BN_BLINDING *b); + +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); + +DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) +DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 + * mont */ + +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); + +int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, + const BIGNUM *field, BN_CTX *ctx); + +int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, + const BIGNUM *priv, const unsigned char *message, + size_t message_len, BN_CTX *ctx); + +/* Primes from RFC 2409 */ +BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif + +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. + */ + +int 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_COMPUTE_WNAF 142 +# 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_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND_INTERNAL 120 +# define BN_F_BN_GENCB_NEW 143 +# define BN_F_BN_GENERATE_DSA_NONCE 140 +# define BN_F_BN_GENERATE_PRIME_EX 141 +# define BN_F_BN_GF2M_MOD 131 +# define BN_F_BN_GF2M_MOD_EXP 132 +# define BN_F_BN_GF2M_MOD_MUL 133 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +# define BN_F_BN_GF2M_MOD_SQR 136 +# define BN_F_BN_GF2M_MOD_SQRT 137 +# define BN_F_BN_LSHIFT 145 +# define BN_F_BN_MOD_EXP2_MONT 118 +# define BN_F_BN_MOD_EXP_MONT 109 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +# define BN_F_BN_MOD_EXP_MONT_WORD 117 +# define BN_F_BN_MOD_EXP_RECP 125 +# define BN_F_BN_MOD_EXP_SIMPLE 126 +# define BN_F_BN_MOD_INVERSE 110 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +# define BN_F_BN_MOD_LSHIFT_QUICK 119 +# define BN_F_BN_MOD_SQRT 121 +# define BN_F_BN_MPI2BN 112 +# define BN_F_BN_NEW 113 +# define BN_F_BN_RAND 114 +# define BN_F_BN_RAND_RANGE 122 +# define BN_F_BN_RSHIFT 146 +# define BN_F_BN_SET_WORDS 144 +# define BN_F_BN_USUB 115 + +/* Reason codes. */ +# define BN_R_ARG2_LT_ARG3 100 +# define BN_R_BAD_RECIPROCAL 101 +# define BN_R_BIGNUM_TOO_LONG 114 +# define BN_R_BITS_TOO_SMALL 118 +# define BN_R_CALLED_WITH_EVEN_MODULUS 102 +# define BN_R_DIV_BY_ZERO 103 +# define BN_R_ENCODING_ERROR 104 +# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +# define BN_R_INPUT_NOT_REDUCED 110 +# define BN_R_INVALID_LENGTH 106 +# define BN_R_INVALID_RANGE 115 +# define BN_R_INVALID_SHIFT 119 +# define BN_R_NOT_A_SQUARE 111 +# define BN_R_NOT_INITIALIZED 107 +# define BN_R_NO_INVERSE 108 +# define BN_R_NO_SOLUTION 116 +# define BN_R_PRIVATE_KEY_TOO_LARGE 117 +# 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/android/arm64-v8a/include/openssl/buffer.h b/android/arm64-v8a/include/openssl/buffer.h new file mode 100644 index 00000000..91f0e07f --- /dev/null +++ b/android/arm64-v8a/include/openssl/buffer.h @@ -0,0 +1,76 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFFER_H +# define HEADER_BUFFER_H + +# include +# ifndef HEADER_CRYPTO_H +# include +# endif + + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# if !defined(NO_SYS_TYPES_H) +# include +# endif + +/* + * These names are outdated as of OpenSSL 1.1; a future release + * will move them to be deprecated. + */ +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) + +struct buf_mem_st { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ + unsigned long flags; +}; + +# define BUF_MEM_FLAG_SECURE 0x01 + +BUF_MEM *BUF_MEM_new(void); +BUF_MEM *BUF_MEM_new_ex(unsigned long flags); +void BUF_MEM_free(BUF_MEM *a); +size_t BUF_MEM_grow(BUF_MEM *str, size_t len); +size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +void BUF_reverse(unsigned char *out, const unsigned char *in, 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. + */ + +int ERR_load_BUF_strings(void); + +/* Error codes for the BUF functions. */ + +/* Function codes. */ +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 + +/* Reason codes. */ + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/camellia.h b/android/arm64-v8a/include/openssl/camellia.h new file mode 100644 index 00000000..151f3c13 --- /dev/null +++ b/android/arm64-v8a/include/openssl/camellia.h @@ -0,0 +1,83 @@ +/* + * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAMELLIA_H +# define HEADER_CAMELLIA_H + +# include + +# ifndef OPENSSL_NO_CAMELLIA +# include +#ifdef __cplusplus +extern "C" { +#endif + +# 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. + */ + +/* 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; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/cast.h b/android/arm64-v8a/include/openssl/cast.h new file mode 100644 index 00000000..2cc89ae0 --- /dev/null +++ b/android/arm64-v8a/include/openssl/cast.h @@ -0,0 +1,53 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAST_H +# define HEADER_CAST_H + +# include + +# ifndef OPENSSL_NO_CAST +# ifdef __cplusplus +extern "C" { +# 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; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/cmac.h b/android/arm64-v8a/include/openssl/cmac.h new file mode 100644 index 00000000..3535a9ab --- /dev/null +++ b/android/arm64-v8a/include/openssl/cmac.h @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMAC_H +# define HEADER_CMAC_H + +# ifndef OPENSSL_NO_CMAC + +#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 +#endif diff --git a/android/arm64-v8a/include/openssl/cms.h b/android/arm64-v8a/include/openssl/cms.h new file mode 100644 index 00000000..7e534e0d --- /dev/null +++ b/android/arm64-v8a/include/openssl/cms.h @@ -0,0 +1,512 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMS_H +# define HEADER_CMS_H + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# 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; + +DEFINE_STACK_OF(CMS_SignerInfo) +DEFINE_STACK_OF(CMS_RecipientEncryptedKey) +DEFINE_STACK_OF(CMS_RecipientInfo) +DEFINE_STACK_OF(CMS_RevocationInfoChoice) +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 +# define CMS_ASCIICRLF 0x80000 + +const ASN1_OBJECT *CMS_get0_type(const 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, + const 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, const 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, const 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, + const 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. + */ + +int 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_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 +#endif diff --git a/android/arm64-v8a/include/openssl/comp.h b/android/arm64-v8a/include/openssl/comp.h new file mode 100644 index 00000000..260ff1e0 --- /dev/null +++ b/android/arm64-v8a/include/openssl/comp.h @@ -0,0 +1,72 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include + +# ifndef OPENSSL_NO_COMP +# include +# ifdef __cplusplus +extern "C" { +# endif + + + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); +int COMP_CTX_get_type(const COMP_CTX* comp); +int COMP_get_type(const COMP_METHOD *meth); +const char *COMP_get_name(const 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_zlib(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +#define COMP_zlib_cleanup() while(0) continue +#endif + +# ifdef HEADER_BIO_H +# ifdef ZLIB +const 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. + */ + +int 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 +#endif diff --git a/android/arm64-v8a/include/openssl/conf.h b/android/arm64-v8a/include/openssl/conf.h new file mode 100644 index 00000000..462e3c9d --- /dev/null +++ b/android/arm64-v8a/include/openssl/conf.h @@ -0,0 +1,216 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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; + +DEFINE_STACK_OF(CONF_VALUE) +DEFINE_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; + +DEFINE_STACK_OF(CONF_MODULE) +DEFINE_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_STDIO +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); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) + +#if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * 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); +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +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); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* 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); +#if OPENSSL_API_COMPAT < 0x10100000L +# define CONF_modules_free() while(0) continue +#endif +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. + */ + +int 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_FP 103 +# 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_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_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/android/arm64-v8a/include/openssl/conf_api.h b/android/arm64-v8a/include/openssl/conf_api.h new file mode 100644 index 00000000..a0275ad7 --- /dev/null +++ b/android/arm64-v8a/include/openssl/conf_api.h @@ -0,0 +1,40 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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/android/arm64-v8a/include/openssl/crypto.h b/android/arm64-v8a/include/openssl/crypto.h new file mode 100644 index 00000000..bd0b1408 --- /dev/null +++ b/android/arm64-v8a/include/openssl/crypto.h @@ -0,0 +1,463 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# 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 + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_API_COMPAT */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); + +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +struct crypto_ex_data_st { + STACK_OF(void) *sk; +}; +DEFINE_STACK_OF(void) + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX__COUNT 14 + +/* + * 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 OPENSSL_malloc_init() \ + CRYPTO_set_mem_functions(CRYPTO_malloc, CRYPTO_realloc, CRYPTO_free) + +int CRYPTO_mem_ctrl(int mode); + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_hexchar2int(unsigned char c); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 + +int OPENSSL_issetugid(void); + +typedef void 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, const CRYPTO_EX_DATA *from, + void *srcp, int idx, long argl, void *argp); +__owur 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); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * 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, + const 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); + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# if OPENSSL_API_COMPAT < 0x10000000L +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_API_COMPAT < 0x10000000L */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_API_COMPAT < 0x10100000L */ + +int CRYPTO_set_mem_functions( + void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, int), + void (*f) (void *, const char *, int)); +int CRYPTO_set_mem_debug(int flag); +void CRYPTO_get_mem_functions( + void *(**m) (size_t, const char *, int), + void *(**r) (void *, size_t, const char *, int), + void (**f) (void *, const char *, int)); + +void *CRYPTO_malloc(size_t num, const char *file, int line); +void *CRYPTO_zalloc(size_t num, const char *file, int line); +void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_done(void); +void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +int CRYPTO_mem_debug_push(const char *info, const char *file, int line); +int CRYPTO_mem_debug_pop(void); + +/*- + * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) + * The flag 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_mem_debug_malloc(void *addr, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); + +# ifndef OPENSSL_NO_STDIO +int CRYPTO_mem_leaks_fp(FILE *); +# endif +int CRYPTO_mem_leaks(BIO *bio); +# endif + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# if OPENSSL_API_COMPAT < 0x10100000L +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +int FIPS_mode(void); +int FIPS_mode_set(int r); + +void OPENSSL_init(void); + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const volatile void * volatile in_a, + const volatile void * volatile in_b, + size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* OPENSSL_INIT flag 0x00010000 reserved for internal use */ +/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_file); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# include +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + +/* 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. + */ + +int ERR_load_CRYPTO_strings(void); + +/* Error codes for the CRYPTO functions. */ + +/* Function codes. */ +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_MEMDUP 115 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_GET_AND_LOCK 113 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 + +/* Reason codes. */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/ct.h b/android/arm64-v8a/include/openssl/ct.h new file mode 100644 index 00000000..6c632652 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ct.h @@ -0,0 +1,518 @@ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CT_H +# define HEADER_CT_H + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +DEFINE_STACK_OF(SCT) +DEFINE_STACK_OF(CTLOG) + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialisation * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64|. The |name| is a string to help users identify this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * See internal/cryptlib.h for the environment variable and file path that are + * consulted to find the default file. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +/* 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. + */ + +int ERR_load_CT_strings(void); + +/* Error codes for the CT functions. */ + +/* Function codes. */ +# define CT_F_CTLOG_NEW 117 +# define CT_F_CTLOG_NEW_FROM_BASE64 118 +# define CT_F_CTLOG_NEW_FROM_CONF 119 +# define CT_F_CTLOG_NEW_NULL 120 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 +# define CT_F_CTLOG_STORE_LOAD_FILE 123 +# define CT_F_CTLOG_STORE_LOAD_LOG 130 +# define CT_F_CTLOG_STORE_NEW 131 +# define CT_F_CT_BASE64_DECODE 124 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 +# define CT_F_I2O_SCT 107 +# define CT_F_I2O_SCT_LIST 108 +# define CT_F_I2O_SCT_SIGNATURE 109 +# define CT_F_O2I_SCT 110 +# define CT_F_O2I_SCT_LIST 111 +# define CT_F_O2I_SCT_SIGNATURE 112 +# define CT_F_SCT_CTX_NEW 126 +# define CT_F_SCT_NEW 100 +# define CT_F_SCT_NEW_FROM_BASE64 127 +# define CT_F_SCT_SET0_LOG_ID 101 +# define CT_F_SCT_SET1_EXTENSIONS 114 +# define CT_F_SCT_SET1_LOG_ID 115 +# define CT_F_SCT_SET1_SIGNATURE 116 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 +# define CT_F_SCT_SET_SIGNATURE_NID 103 +# define CT_F_SCT_SET_VERSION 104 +# define CT_F_SCT_CTX_VERIFY 128 + +/* Reason codes. */ +# define CT_R_BASE64_DECODE_ERROR 108 +# define CT_R_INVALID_LOG_ID_LENGTH 100 +# define CT_R_LOG_CONF_INVALID 109 +# define CT_R_LOG_CONF_INVALID_KEY 110 +# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 +# define CT_R_LOG_CONF_MISSING_KEY 112 +# define CT_R_LOG_KEY_INVALID 113 +# define CT_R_SCT_INVALID 104 +# define CT_R_SCT_INVALID_SIGNATURE 107 +# define CT_R_SCT_LIST_INVALID 105 +# define CT_R_SCT_LOG_ID_MISMATCH 114 +# define CT_R_SCT_NOT_SET 106 +# define CT_R_SCT_UNSUPPORTED_VERSION 115 +# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 +# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 +# define CT_R_UNSUPPORTED_VERSION 103 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/des.h b/android/arm64-v8a/include/openssl/des.h new file mode 100644 index 00000000..be4abbdf --- /dev/null +++ b/android/arm64-v8a/include/openssl/des.h @@ -0,0 +1,174 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DES_H +# define HEADER_DES_H + +# include + +# ifndef OPENSSL_NO_DES +# ifdef __cplusplus +extern "C" { +# endif +# include + +typedef unsigned int DES_LONG; + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# 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; + +# 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) + +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_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); +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); +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); + +# define DES_fixup_key_parity DES_set_odd_parity + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/dh.h b/android/arm64-v8a/include/openssl/dh.h new file mode 100644 index 00000000..ae309e7b --- /dev/null +++ b/android/arm64-v8a/include/openssl/dh.h @@ -0,0 +1,343 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DH_H +# define HEADER_DH_H + +# include + +# ifndef OPENSSL_NO_DH +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * 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 responsibility 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 + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x)) +# define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x) +# define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH *DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_bits(const DH *dh); +int DH_size(const DH *dh); +int DH_security_bits(const DH *dh); +#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg)) + +/* 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_STDIO +int DHparams_print_fp(FILE *fp, const DH *x); +# endif +int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +DH *DH_get_1024_160(void); +DH *DH_get_2048_224(void); +DH *DH_get_2048_256(void); + +# ifndef OPENSSL_NO_CMS +/* 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); +# endif + +void DH_get0_pqg(const DH *dh, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DH_get0_key(const DH *dh, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +void DH_clear_flags(DH *dh, int flags); +int DH_test_flags(const DH *dh, int flags); +void DH_set_flags(DH *dh, int flags); +ENGINE *DH_get0_engine(DH *d); +long DH_get_length(const DH *dh); +int DH_set_length(DH *dh, long length); + +DH_METHOD *DH_meth_new(const char *name, int flags); +void DH_meth_free(DH_METHOD *dhm); +DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +const char *DH_meth_get0_name(const DH_METHOD *dhm); +int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +int DH_meth_get_flags(DH_METHOD *dhm); +int DH_meth_set_flags(DH_METHOD *dhm, int flags); +void *DH_meth_get0_app_data(const DH_METHOD *dhm); +int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); +int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); +int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, BN_GENCB *); +int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) (DH *, int, int, BN_GENCB *)); + + +# 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 +# ifndef OPENSSL_NO_CMS +# define EVP_PKEY_DH_KDF_X9_42 2 +# 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. + */ + +int 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 114 +# define DH_F_DH_CMS_SET_PEERKEY 115 +# define DH_F_DH_CMS_SET_SHARED_INFO 116 +# define DH_F_DH_METH_DUP 117 +# define DH_F_DH_METH_NEW 118 +# define DH_F_DH_METH_SET1_NAME 119 +# 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_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_MODULUS_TOO_LARGE 103 +# 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 111 +# define DH_R_SHARED_INFO_ERROR 113 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/dsa.h b/android/arm64-v8a/include/openssl/dsa.h new file mode 100644 index 00000000..cb5fbc2f --- /dev/null +++ b/android/arm64-v8a/include/openssl/dsa.h @@ -0,0 +1,282 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * The DSS routines are based on patches supplied by + * Steven Schoch . + */ + +#ifndef HEADER_DSA_H +# define HEADER_DSA_H + +# include + +# ifndef OPENSSL_NO_DSA +# ifdef __cplusplus +extern "C" { +# endif +# include +# include +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +# define DSA_FLAG_CACHE_MONT_P 0x01 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * 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 responsibility 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 +# define DSA_FLAG_FIPS_CHECKED 0x0800 + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st DSA_SIG; + +# 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); +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +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 *); +const DSA_METHOD *DSA_get_method(DSA *d); + +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 *); +int DSA_bits(const DSA *d); +int DSA_security_bits(const DSA *d); + /* 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); +#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +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 */ +DEPRECATEDIN_0_9_8(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)) + +/* 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); + +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +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) + +void DSA_get0_pqg(const DSA *d, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DSA_get0_key(const DSA *d, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); +void DSA_clear_flags(DSA *d, int flags); +int DSA_test_flags(const DSA *d, int flags); +void DSA_set_flags(DSA *d, int flags); +ENGINE *DSA_get0_engine(DSA *d); + +DSA_METHOD *DSA_meth_new(const char *name, int flags); +void DSA_meth_free(DSA_METHOD *dsam); +DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); +int DSA_meth_get_flags(DSA_METHOD *dsam); +int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); +DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA *); +int DSA_meth_set_sign(DSA_METHOD *dsam, + DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); +int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) + (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); +int DSA_meth_set_sign_setup(DSA_METHOD *dsam, + int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); +int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) + (const unsigned char *, int , DSA_SIG *, DSA *); +int DSA_meth_set_verify(DSA_METHOD *dsam, + int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); +int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_mod_exp(DSA_METHOD *dsam, + int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, + int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); +int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); +int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) + (DSA *, int, const unsigned char *, int, int *, unsigned long *, + BN_GENCB *); +int DSA_meth_set_paramgen(DSA_METHOD *dsam, + int (*paramgen) (DSA *, int, const unsigned char *, int, int *, + unsigned long *, BN_GENCB *)); +int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); + +/* 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. + */ + +int ERR_load_DSA_strings(void); + +/* Error codes for the DSA functions. */ + +/* Function codes. */ +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# define DSA_F_DSA_BUILTIN_PARAMGEN 125 +# 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_METH_DUP 127 +# define DSA_F_DSA_METH_NEW 128 +# define DSA_F_DSA_METH_SET1_NAME 129 +# 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 102 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_KEYGEN 121 + +/* 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_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_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/dtls1.h b/android/arm64-v8a/include/openssl/dtls1.h new file mode 100644 index 00000000..f4769f83 --- /dev/null +++ b/android/arm64-v8a/include/openssl/dtls1.h @@ -0,0 +1,56 @@ +/* + * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DTLS1_H +# define HEADER_DTLS1_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# define DTLS1_VERSION_MAJOR 0xFE + +# define DTLS1_BAD_VER 0x0100 + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +/* 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 + + +/* 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/android/arm64-v8a/include/openssl/e_os2.h b/android/arm64-v8a/include/openssl/e_os2.h new file mode 100644 index 00000000..99ea3477 --- /dev/null +++ b/android/arm64-v8a/include/openssl/e_os2.h @@ -0,0 +1,311 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_E_OS2_H +# define HEADER_E_OS2_H + +# include + +#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 + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +# if defined(OPENSSL_SYS_MSDOS) +# undef OPENSSL_SYS_UNIX +# 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... + */ +/* + * UEFI lives here because it might be built with a Microsoft toolchain and + * we need to avoid the false positive match on Windows. + */ +# if defined(OPENSSL_SYS_UEFI) +# undef OPENSSL_SYS_UNIX +# elif defined(OPENSSL_SYS_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +# else +# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN32) +# define OPENSSL_SYS_WIN32 +# endif +# endif +# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN64) +# define OPENSSL_SYS_WIN64 +# endif +# endif +# if defined(OPENSSL_SYS_WINNT) +# undef OPENSSL_SYS_UNIX +# endif +# if defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# endif +# endif +# endif + +/* Anything that tries to look like Microsoft is "Windows" */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +# endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementor how he or she will link the application, so it + * requires some macro to be used. + */ +# ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to + * indicate that DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +# endif + +/* ------------------------------- OpenVMS -------------------------------- */ +# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if !defined(OPENSSL_SYS_VMS) +# undef OPENSSL_SYS_UNIX +# endif +# 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 + +/* -------------------------------- Unix ---------------------------------- */ +# ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) +# define OPENSSL_SYS_AIX +# endif +# endif + +/* -------------------------------- VOS ----------------------------------- */ +# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) +# define OPENSSL_SYS_VOS +# ifdef __HPPA__ +# define OPENSSL_SYS_VOS_HPPA +# endif +# ifdef __IA32__ +# define OPENSSL_SYS_VOS_IA32 +# 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 explicitly 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_EXTERN and OPENSSL_GLOBAL + * have some generally sensible values. + */ + +# if defined(OPENSSL_SYS_VMS_NODECC) +# define OPENSSL_EXPORT globalref +# define OPENSSL_EXTERN globalref +# define OPENSSL_GLOBAL globaldef +# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_EXTERN extern __declspec(dllimport) +# define OPENSSL_GLOBAL +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_EXTERN extern +# define OPENSSL_GLOBAL +# endif + +/*- + * 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 + +# ifdef _WIN32 +# ifdef _WIN64 +# define ossl_ssize_t __int64 +# define OSSL_SSIZE_MAX _I64_MAX +# else +# define ossl_ssize_t int +# define OSSL_SSIZE_MAX INT_MAX +# endif +# endif + +# if defined(OPENSSL_SYS_UEFI) && !defined(ssize_t) +# define ossl_ssize_t int +# define OSSL_SSIZE_MAX INT_MAX +# endif + +# ifndef ossl_ssize_t +# define ossl_ssize_t ssize_t +# if defined(SSIZE_MAX) +# define OSSL_SSIZE_MAX SSIZE_MAX +# elif defined(_POSIX_SSIZE_MAX) +# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX +# endif +# endif + +# ifdef DEBUG_UNUSED +# define __owur __attribute__((__warn_unused_result__)) +# else +# define __owur +# endif + +/* Standard integer types */ +# if defined(OPENSSL_SYS_UEFI) +typedef INT8 int8_t; +typedef UINT8 uint8_t; +typedef INT16 int16_t; +typedef UINT16 uint16_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef INT64 int64_t; +typedef UINT64 uint64_t; +# define PRIu64 "%Lu" +# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + defined(__osf__) || defined(__sgi) || defined(__hpux) || \ + defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) +# include +# elif defined(_MSC_VER) && _MSC_VER<=1500 +/* + * minimally required typdefs for systems not supporting inttypes.h or + * stdint.h: currently just older VC++ + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +# else +# include +# endif + +/* + * We need a format operator for some client tools for uint64_t. If inttypes.h + * isn't available or did not define it, just go with hard-coded. + */ +# ifndef PRIu64 +# ifdef SIXTY_FOUR_BIT_LONG +# define PRIu64 "lu" +# else +# define PRIu64 "llu" +# endif +# endif + +/* ossl_inline: portable inline definition usable in public headers */ +# if !defined(inline) && !defined(__cplusplus) +# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L + /* just use inline */ +# define ossl_inline inline +# elif defined(__GNUC__) && __GNUC__>=2 +# define ossl_inline __inline__ +# elif defined(_MSC_VER) + /* + * Visual Studio: inline is available in C++ only, however + * __inline is available for C, see + * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx + */ +# define ossl_inline __inline +# else +# define ossl_inline +# endif +# else +# define ossl_inline inline +# endif + +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +# define ossl_noreturn _Noreturn +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define ossl_noreturn __attribute__((noreturn)) +# else +# define ossl_noreturn +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/arm64-v8a/include/openssl/ebcdic.h b/android/arm64-v8a/include/openssl/ebcdic.h new file mode 100644 index 00000000..aa012855 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ebcdic.h @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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/android/arm64-v8a/include/openssl/ec.h b/android/arm64-v8a/include/openssl/ec.h new file mode 100644 index 00000000..656cb410 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ec.h @@ -0,0 +1,1581 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# ifndef OPENSSL_NO_EC +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x04 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + +typedef struct ec_method_st EC_METHOD; +typedef struct ec_group_st EC_GROUP; +typedef struct ec_point_st EC_POINT; +typedef struct ecpk_parameters_st ECPKPARAMETERS; +typedef struct ec_parameters_st ECPARAMETERS; + +/********************************************************************/ +/* 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 occurred + */ +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 montgomery data (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 unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the order of an EC_GROUP + * \param group EC_GROUP object + * \return the group order + */ +const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); + +/** Gets the number of bits of the order of an EC_GROUP + * \param group EC_GROUP object + * \return number of bits of group order. + */ +int EC_GROUP_order_bits(const EC_GROUP *group); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, + BN_CTX *ctx); + +/** Gets the cofactor of an EC_GROUP + * \param group EC_GROUP object + * \return the group cofactor + */ +const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); + +/** 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 the groups are equal, 1 if not, or -1 on error + */ +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); + +/** Creates a new EC_GROUP object from an ECPARAMETERS object + * \param params pointer to the ECPARAMETERS object + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); + +/** Creates an ECPARAMETERS object for the the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPARAMETERS object or NULL + * \return pointer to the new ECPARAMETERS object or NULL + * if an error occurred. + */ +ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, + ECPARAMETERS *params); + +/** Creates a new EC_GROUP object from an ECPKPARAMETERS object + * \param params pointer to an existing ECPKPARAMETERS object, or NULL + * \return newly created EC_GROUP object with specified curve, or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); + +/** Creates an ECPKPARAMETERS object for the the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPKPARAMETERS object or NULL + * \return pointer to the new ECPKPARAMETERS object or NULL + * if an error occurred. + */ +ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, + ECPKPARAMETERS *params); + +/********************************************************************/ +/* 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 is 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Encodes an EC_POINT object to an allocated octet string + * \param group underlying EC_GROUP object + * \param point EC_POINT object + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \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_point2buf(const EC_GROUP *group, const EC_POINT *point, + point_conversion_form_t form, + unsigned char **pbuf, 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 the point is on the curve, 0 if not, or -1 on error + */ +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 1 if the points are not equal, 0 if they are, or -1 on error + */ +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 further 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 */ +/********************************************************************/ + +DECLARE_ASN1_ITEM(ECPKPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) +DECLARE_ASN1_ITEM(ECPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) + +/* + * 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_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +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)) + +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +# ifndef OPENSSL_NO_STDIO +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +# endif + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +/* 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 +# define EC_FLAG_COFACTOR_ECDH 0x1000 + +/** 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); + +#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) +int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +/* 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); + +/** Indicates if an EC_KEY can be used for signing. + * \param key the EC_KEY object + * \return 1 if can can sign and 0 otherwise. + */ +int EC_KEY_can_sign(const EC_KEY *eckey); + +/** Sets a public key from affine coordinates performing + * necessary 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); + +/** Encodes an EC_KEY public key to an allocated octet string + * \param key key to encode + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \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_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); + +/** Decodes a EC_KEY public key from a octet string + * \param key key to decode + * \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 occurred + */ + +int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, + BN_CTX *ctx); + +/** Decodes an EC_KEY private key from an octet string + * \param key key to decode + * \param buf memory buffer with the encoded private key + * \param len length of the encoded key + * \return 1 on success and 0 if an error occurred + */ + +int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); + +/** Encodes a EC_KEY private key to an octet string + * \param key key to encode + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ + +size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); + +/** Encodes an EC_KEY private key to an allocated octet string + * \param key key to encode + * \param pbuf returns pointer to allocated buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ + +size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); + +/********************************************************************/ +/* 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 parameters 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(const EC_KEY *key, unsigned char **out); + +/** 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); + +# ifndef OPENSSL_NO_STDIO +/** 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 + +const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +const EC_KEY_METHOD *EC_KEY_get_default_method(void); +void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +EC_KEY *EC_KEY_new_method(ENGINE *engine); + +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); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF) (const void *in, size_t inlen, + void *out, size_t *outlen)); + +typedef struct ECDSA_SIG_st 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); + +/** Accessor for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG pointer + * \param pr pointer to BIGNUM pointer for r (may be NULL) + * \param ps pointer to BIGNUM pointer for s (may be NULL) + */ +void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); + +/** Setter for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG pointer + * \param r pointer to BIGNUM for r (may be NULL) + * \param s pointer to BIGNUM for s (may be NULL) + */ +int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +/** 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 (optional), + * 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); + +/** 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 (optional), + * 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); + +/** 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); + +/********************************************************************/ +/* EC_KEY_METHOD constructors, destructors, writers and accessors */ +/********************************************************************/ + +EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); + +void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_init(EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, + const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_get_keygen(EC_KEY_METHOD *meth, + int (**pkeygen)(EC_KEY *key)); + +void EC_KEY_METHOD_get_compute_key(EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_get_sign(EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_verify(EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +# 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. + */ + +int ERR_load_EC_strings(void); + +/* Error codes for the EC functions. */ + +/* Function codes. */ +# define EC_F_BN_TO_FELEM 224 +# 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_ECDH_COMPUTE_KEY 246 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 +# define EC_F_ECDSA_DO_SIGN_EX 251 +# define EC_F_ECDSA_DO_VERIFY 252 +# define EC_F_ECDSA_SIGN_EX 254 +# define EC_F_ECDSA_SIGN_SETUP 248 +# define EC_F_ECDSA_SIG_NEW 265 +# define EC_F_ECDSA_VERIFY 253 +# define EC_F_ECKEY_PARAM2TYPE 223 +# define EC_F_ECKEY_PARAM_DECODE 212 +# define EC_F_ECKEY_PRIV_DECODE 213 +# define EC_F_ECKEY_PRIV_ENCODE 214 +# define EC_F_ECKEY_PUB_DECODE 215 +# define EC_F_ECKEY_PUB_ENCODE 216 +# define EC_F_ECKEY_TYPE2PARAM 220 +# define EC_F_ECPARAMETERS_PRINT 147 +# define EC_F_ECPARAMETERS_PRINT_FP 148 +# define EC_F_ECPKPARAMETERS_PRINT 149 +# define EC_F_ECPKPARAMETERS_PRINT_FP 150 +# define EC_F_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECX_KEY_OP 266 +# define EC_F_ECX_PRIV_ENCODE 267 +# define EC_F_ECX_PUB_ENCODE 268 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# 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_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_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_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# 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_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_ECPARAMETERS 261 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 +# 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_NEW_FROM_ECPARAMETERS 263 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# 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_NEW_METHOD 245 +# define EC_F_EC_KEY_OCT2PRIV 255 +# define EC_F_EC_KEY_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_PRIV2OCT 256 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 +# 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_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_NEW 196 +# define EC_F_EC_WNAF_MUL 187 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +# define EC_F_I2D_ECPARAMETERS 190 +# define EC_F_I2D_ECPKPARAMETERS 191 +# define EC_F_I2D_ECPRIVATEKEY 192 +# define EC_F_I2O_ECPUBLICKEY 151 +# define EC_F_NISTP224_PRE_COMP_NEW 227 +# define EC_F_NISTP256_PRE_COMP_NEW 236 +# define EC_F_NISTP521_PRE_COMP_NEW 237 +# define EC_F_O2I_ECPUBLICKEY 152 +# define EC_F_OLD_EC_PRIV_DECODE 222 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 +# define EC_F_OSSL_ECDSA_SIGN_SIG 249 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 +# define EC_F_PKEY_ECX_DERIVE 269 +# 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_BAD_SIGNATURE 156 +# 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_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 +# 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_KEY 116 +# define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_PEER_KEY 133 +# 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_NEED_NEW_SETUP_VALUES 157 +# define EC_R_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_NO_PRIVATE_VALUE 154 +# define EC_R_OPERATION_NOT_SUPPORTED 152 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_ARITHMETIC_FAILURE 155 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 +# 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 +#endif diff --git a/android/arm64-v8a/include/openssl/ecdh.h b/android/arm64-v8a/include/openssl/ecdh.h new file mode 100644 index 00000000..681f3d5e --- /dev/null +++ b/android/arm64-v8a/include/openssl/ecdh.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/android/arm64-v8a/include/openssl/ecdsa.h b/android/arm64-v8a/include/openssl/ecdsa.h new file mode 100644 index 00000000..681f3d5e --- /dev/null +++ b/android/arm64-v8a/include/openssl/ecdsa.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/android/arm64-v8a/include/openssl/engine.h b/android/arm64-v8a/include/openssl/engine.h new file mode 100644 index 00000000..319371e4 --- /dev/null +++ b/android/arm64-v8a/include/openssl/engine.h @@ -0,0 +1,842 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# ifndef OPENSSL_NO_ENGINE +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# include +# include +# 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_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 +/* 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); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_dasync() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DASYNC, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +#endif +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. + */ + +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_EC(ENGINE *e); +void ENGINE_unregister_EC(ENGINE *e); +void ENGINE_register_all_EC(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_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_EC(ENGINE *e, const EC_KEY_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_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. */ +#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) +int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +void *ENGINE_get_ex_data(const ENGINE *e, int idx); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function previously cleaned up anything that needs it. Auto-deinit will + * now take care of it so it is no longer required to call this function. + */ +# define ENGINE_cleanup() while(0) continue +#endif + +/* + * 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 EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +const RAND_METHOD *ENGINE_get_RAND(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_EC(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_EC(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)0x00030000 +/* + * Binary versions older than this are too old for us (whether we're a loader + * or a loadee) + */ +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 + +/* + * 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_fn) (size_t, const char *, int); +typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); +typedef void (*dyn_MEM_free_fn) (void *, const char *, int); +typedef struct st_dynamic_MEM_fns { + dyn_MEM_malloc_fn malloc_fn; + dyn_MEM_realloc_fn realloc_fn; + dyn_MEM_free_fn free_fn; +} dynamic_MEM_fns; +/* + * FIXME: Perhaps the memory and locking code (crypto.h) should declare and + * use these types so we (and any other dependent code) can simplify a bit?? + */ +/* The top-level structure */ +typedef struct st_dynamic_fns { + void *static_state; + dynamic_MEM_fns mem_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; \ + CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ + fns->mem_fns.realloc_fn, \ + fns->mem_fns.free_fn); \ + 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) +DEPRECATEDIN_1_1_0(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. + */ + +int 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_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# define ENGINE_F_ENGINE_GET_FIRST 195 +# define ENGINE_F_ENGINE_GET_LAST 196 +# 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_PKEY_ASN1_FIND_STR 197 +# define ENGINE_F_ENGINE_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# 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_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 + +/* 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_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_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_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 +#endif diff --git a/android/arm64-v8a/include/openssl/err.h b/android/arm64-v8a/include/openssl/err.h new file mode 100644 index 00000000..f9390919 --- /dev/null +++ b/android/arm64-v8a/include/openssl/err.h @@ -0,0 +1,259 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ERR_H +# define HEADER_ERR_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include + +#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 { + 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_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 + +# define ERR_LIB_USER 128 + +# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) + +# define ERR_PACK(l,f,r) ( \ + (((unsigned int)(l) & 0x0FF) << 24L) | \ + (((unsigned int)(f) & 0xFFF) << 12L) | \ + (((unsigned int)(r) & 0xFFF) ) ) +# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) +# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) +# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) + +/* OS functions */ +# define SYS_F_FOPEN 1 +# define SYS_F_CONNECT 2 +# define SYS_F_GETSERVBYNAME 3 +# define SYS_F_SOCKET 4 +# define SYS_F_IOCTLSOCKET 5 +# define SYS_F_BIND 6 +# define SYS_F_LISTEN 7 +# define SYS_F_ACCEPT 8 +# define SYS_F_WSASTARTUP 9/* Winsock stuff */ +# define SYS_F_OPENDIR 10 +# define SYS_F_FREAD 11 +# define SYS_F_GETADDRINFO 12 +# define SYS_F_GETNAMEINFO 13 +# define SYS_F_SETSOCKOPT 14 +# define SYS_F_GETSOCKOPT 15 +# define SYS_F_GETSOCKNAME 16 +# define SYS_F_GETHOSTBYNAME 17 + +/* 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_EC_LIB ERR_LIB_EC/* 16 */ +# 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_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ + +# define ERR_R_NESTED_ASN1_ERROR 58 +# 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) +# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (7) + +/* + * 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; + +DEFINE_LHASH_OF(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_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +int ERR_load_strings(int lib, ERR_STRING_DATA str[]); +int ERR_unload_strings(int lib, ERR_STRING_DATA str[]); +int ERR_load_ERR_strings(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif + +DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) +DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) +ERR_STATE *ERR_get_state(void); + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/arm64-v8a/include/openssl/evp.h b/android/arm64-v8a/include/openssl/evp.h new file mode 100644 index 00000000..b9c83b2b --- /dev/null +++ b/android/arm64-v8a/include/openssl/evp.h @@ -0,0 +1,1586 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENVELOPE_H +# define HEADER_ENVELOPE_H + +# include +# include +# include +# include + +# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ +# define EVP_MAX_KEY_LENGTH 64 +# define EVP_MAX_IV_LENGTH 16 +# define EVP_MAX_BLOCK_LENGTH 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include + +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_DSA NID_dsa +# define EVP_PKEY_DSA1 NID_dsa_2 +# define EVP_PKEY_DSA2 NID_dsaWithSHA +# define EVP_PKEY_DSA3 NID_dsaWithSHA1 +# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +# define EVP_PKEY_DH NID_dhKeyAgreement +# define EVP_PKEY_DHX NID_dhpublicnumber +# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac +# define EVP_PKEY_TLS1_PRF NID_tls1_prf +# define EVP_PKEY_HKDF NID_hkdf + +#ifdef __cplusplus +extern "C" { +#endif + +# 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 +EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +void EVP_MD_meth_free(EVP_MD *md); + +int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, + const void *data, + size_t count)); +int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, + unsigned char *md)); +int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, + const EVP_MD_CTX *from)); +int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2)); + +int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +int EVP_MD_meth_get_result_size(const EVP_MD *md); +int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, + const void *data, + size_t count); +int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, + unsigned char *md); +int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, + const EVP_MD_CTX *from); +int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2); + +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* 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 + +# endif /* !EVP_MD */ + +/* 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_reset */ +/* + * 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 */ +/* + * Some functions such as EVP_DigestSign only finalise copies of internal + * contexts so additional data can be included after the finalisation call. + * This is inefficient if this functionality is not required: it is disabled + * if the following flag is set. + */ +# define EVP_MD_CTX_FLAG_FINALISE 0x0200 + +EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); + +int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, + int (*init) (EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc)); +int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, + int (*do_cipher) (EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl)); +int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, + int (*cleanup) (EVP_CIPHER_CTX *)); +int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, + int (*ctrl) (EVP_CIPHER_CTX *, int type, + int arg, void *ptr)); + +int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + int type, int arg, + void *ptr); + +/* 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_OCB_MODE 0x10003 +# 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 can handle pipeline operations */ +# define EVP_CIPH_FLAG_PIPELINE 0X800000 + +/* + * 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_AEAD_SET_IVLEN 0x9 +# define EVP_CTRL_AEAD_GET_TAG 0x10 +# define EVP_CTRL_AEAD_SET_TAG 0x11 +# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 +# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# define EVP_CTRL_GCM_IV_GEN 0x13 +# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# 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 + +# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d + +/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ +# define EVP_CTRL_SET_SBOX 0x1e +/* + * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a + * pre-allocated buffer with specified size + */ +# define EVP_CTRL_SBOX_USED 0x1f +/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, + * 0 switches meshing off + */ +# define EVP_CTRL_KEY_MESH 0x20 +/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ +# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 + +/* Set the output buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 +/* Set the input buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 +/* Set the input buffer lengths to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 + +/* Padding modes */ +#define EVP_PADDING_PKCS7 1 +#define EVP_PADDING_ISO7816_4 2 +#define EVP_PADDING_ANSI923 3 +#define EVP_PADDING_ISO10126 4 +#define EVP_PADDING_ZERO 5 + +/* RFC 5246 defines additional data to be 13 bytes in length */ +# define EVP_AEAD_TLS1_AAD_LEN 13 + +typedef struct { + unsigned char *out; + const unsigned char *inp; + size_t len; + unsigned int interleave; +} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; + +/* GCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_GCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 +/* Length of tag for TLS */ +# define EVP_GCM_TLS_TAG_LEN 16 + +/* CCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_CCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 + +typedef struct evp_cipher_info_st { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; +} EVP_CIPHER_INFO; + + +/* 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); +int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, + const void *data, size_t count); +void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, + int (*update) (EVP_MD_CTX *ctx, + const void *data, size_t count)); +# 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)) +EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); + +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_impl_ctx_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_encrypting(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); +const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +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); +void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); +void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); +# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# endif +# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) + +# 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) + +/*__owur*/ 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); + +int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); +EVP_MD_CTX *EVP_MD_CTX_new(void); +int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); +void EVP_MD_CTX_free(EVP_MD_CTX *ctx); +# define EVP_MD_CTX_create() EVP_MD_CTX_new() +# define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) +# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur 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); +__owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, + ENGINE *impl); +__owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, + size_t cnt); +__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); +__owur int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, + const EVP_MD *type, ENGINE *impl); + +__owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); +__owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); + +#ifndef OPENSSL_NO_UI +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); +#endif + +__owur 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); + +__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +/*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); +/*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); + +__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +/*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc); +/*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv, int enc); +__owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey); + +__owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); + +/*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen); + +__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen); + +# ifndef OPENSSL_NO_RSA +__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + const unsigned char *ek, int ekl, + const unsigned char *iv, EVP_PKEY *priv); +__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +# endif + +EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); +void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +int 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); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) +# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) +# endif +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); +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); + +const BIO_METHOD *BIO_f_md(void); +const BIO_METHOD *BIO_f_base64(void); +const BIO_METHOD *BIO_f_cipher(void); +const BIO_METHOD *BIO_f_reliable(void); +__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, + const unsigned char *i, int enc); + +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); +const EVP_MD *EVP_md5_sha1(void); +# endif +# ifndef OPENSSL_NO_BLAKE2 +const EVP_MD *EVP_blake2b512(void); +const EVP_MD *EVP_blake2s256(void); +# endif +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +# ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +# endif +# ifndef OPENSSL_NO_RMD160 +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 +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? + */ +# 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 +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_128_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_128_ocb(void); +# endif +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_192_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_192_ocb(void); +# endif +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); +const EVP_CIPHER *EVP_aes_256_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_256_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# 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_128_ctr(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_192_ctr(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); +const EVP_CIPHER *EVP_camellia_256_ctr(void); +# endif +# ifndef OPENSSL_NO_CHACHA +const EVP_CIPHER *EVP_chacha20(void); +# ifndef OPENSSL_NO_POLY1305 +const EVP_CIPHER *EVP_chacha20_poly1305(void); +# endif +# 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 + +# if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_add_all_algorithms_conf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +# define OPENSSL_add_all_algorithms_noconf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# ifdef OPENSSL_LOAD_CONF +# define OpenSSL_add_all_algorithms() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +# else +# define OpenSSL_add_all_algorithms() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) +# endif + +# define OpenSSL_add_all_ciphers() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) +# define OpenSSL_add_all_digests() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# define EVP_cleanup() while(0) continue +# endif + +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_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(const EVP_PKEY *pkey); +int EVP_PKEY_security_bits(const 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(const EVP_PKEY *pkey); +const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); + +# ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +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_get0_DSA(EVP_PKEY *pkey); +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_get0_DH(EVP_PKEY *pkey); +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_get0_EC_KEY(EVP_PKEY *pkey); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif + +EVP_PKEY *EVP_PKEY_new(void); +int EVP_PKEY_up_ref(EVP_PKEY *pkey); +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_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, + const unsigned char *pt, size_t ptlen); +size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); + +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); + +#ifndef OPENSSL_NO_SCRYPT +int EVP_PBE_scrypt(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen); + +int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de); +#endif + +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 +/* Is a PKCS#5 v2.0 KDF */ +# define EVP_PBE_TYPE_KDF 0x2 + +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); +int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); + +# 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 + +# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 +# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa + +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(const 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, + const PKCS8_PRIV_KEY_INFO + *p8inf), + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, + const EVP_PKEY *pk), + int (*priv_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, + int derlen), + int (*param_encode) (const EVP_PKEY *pkey, + unsigned char **pder), + int (*param_missing) (const EVP_PKEY *pk), + int (*param_copy) (EVP_PKEY *to, + const EVP_PKEY *from), + int (*param_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*param_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, + int (*item_verify) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *a, + ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_security_bits) (const EVP_PKEY + *pk)); + +# 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_TYPE_SIG | EVP_PKEY_OP_TYPE_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_CTX_set_mac_key(ctx, key, len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)key) + +# 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_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); +int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); + +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_PKEY_meth_get_init(EVP_PKEY_METHOD *pmeth, + int (**pinit) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_copy(EVP_PKEY_METHOD *pmeth, + int (**pcopy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_get_cleanup(EVP_PKEY_METHOD *pmeth, + void (**pcleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_paramgen(EVP_PKEY_METHOD *pmeth, + int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_keygen(EVP_PKEY_METHOD *pmeth, + int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_sign(EVP_PKEY_METHOD *pmeth, + int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify(EVP_PKEY_METHOD *pmeth, + int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify_recover(EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX + *ctx), + int (**pverify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_signctx(EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_verifyctx(EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_encrypt(EVP_PKEY_METHOD *pmeth, + int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_decrypt(EVP_PKEY_METHOD *pmeth, + int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_derive(EVP_PKEY_METHOD *pmeth, + int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_get_ctrl(EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (**pctrl_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. + */ + +int ERR_load_EVP_strings(void); + +/* Error codes for the EVP functions. */ + +/* Function codes. */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CHACHA20_POLY1305_CTRL 182 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_DO_SIGVER_INIT 161 +# 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_DECRYPTUPDATE 166 +# define EVP_F_EVP_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# define EVP_F_EVP_ENCRYPTUPDATE 167 +# 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_PBE_SCRYPT 181 +# define EVP_F_EVP_PKCS82PKEY 111 +# define EVP_F_EVP_PKEY2PKCS8 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_GET0_DH 119 +# define EVP_F_EVP_PKEY_GET0_DSA 120 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET0_HMAC 183 +# define EVP_F_EVP_PKEY_GET0_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_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# 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_PKCS5_V2_SCRYPT_KEYIVGEN 180 +# 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_KEY_SETUP_FAILED 143 +# define EVP_R_BAD_DECRYPT 100 +# 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_COPY_ERROR 173 +# 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_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EXPECTING_AN_HMAC_KEY 174 +# 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_EC_KEY 142 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# 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_KEYGEN_FAILURE 120 +# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 +# 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_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_PARTIALLY_OVERLAPPING 162 +# 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_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_UNSUPPORTED_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 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/hmac.h b/android/arm64-v8a/include/openssl/hmac.h new file mode 100644 index 00000000..9f068960 --- /dev/null +++ b/android/arm64-v8a/include/openssl/hmac.h @@ -0,0 +1,49 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_HMAC_H +# define HEADER_HMAC_H + +# include + +# include + +# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ + +#ifdef __cplusplus +extern "C" { +#endif + +size_t HMAC_size(const HMAC_CTX *e); +HMAC_CTX *HMAC_CTX_new(void); +int HMAC_CTX_reset(HMAC_CTX *ctx); +void HMAC_CTX_free(HMAC_CTX *ctx); + +DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md)) + +/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +/*__owur*/ 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); +__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/arm64-v8a/include/openssl/idea.h b/android/arm64-v8a/include/openssl/idea.h new file mode 100644 index 00000000..4334f3ea --- /dev/null +++ b/android/arm64-v8a/include/openssl/idea.h @@ -0,0 +1,64 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_IDEA_H +# define HEADER_IDEA_H + +# include + +# ifndef OPENSSL_NO_IDEA +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int IDEA_INT; + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +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); +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); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/kdf.h b/android/arm64-v8a/include/openssl/kdf.h new file mode 100644 index 00000000..9f87f788 --- /dev/null +++ b/android/arm64-v8a/include/openssl/kdf.h @@ -0,0 +1,75 @@ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDF_H +# define HEADER_KDF_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) +# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) + +# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)sec) + +# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)seed) + +# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)salt) + +# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)key) + +# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)info) + +/* 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. + */ + +int ERR_load_KDF_strings(void); + +/* Error codes for the KDF functions. */ + +/* Function codes. */ +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 + +/* Reason codes. */ +# define KDF_R_INVALID_DIGEST 100 +# define KDF_R_MISSING_PARAMETER 101 +# define KDF_R_VALUE_MISSING 102 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/lhash.h b/android/arm64-v8a/include/openssl/lhash.h new file mode 100644 index 00000000..e2ccb65d --- /dev/null +++ b/android/arm64-v8a/include/openssl/lhash.h @@ -0,0 +1,204 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +# define HEADER_LHASH_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * 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 + +/* 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 + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_lh_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +# define DEFINE_LHASH_OF(type) \ + LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ + static ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ + void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +DEFINE_LHASH_OF(OPENSSL_STRING); +DEFINE_LHASH_OF(OPENSSL_CSTRING); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/arm64-v8a/include/openssl/md2.h b/android/arm64-v8a/include/openssl/md2.h new file mode 100644 index 00000000..7faf8e3d --- /dev/null +++ b/android/arm64-v8a/include/openssl/md2.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD2_H +# define HEADER_MD2_H + +# include + +# ifndef OPENSSL_NO_MD2 +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned char MD2_INT; + +# define MD2_DIGEST_LENGTH 16 +# define MD2_BLOCK 16 + +typedef struct MD2state_st { + unsigned int num; + unsigned char data[MD2_BLOCK]; + MD2_INT cksm[MD2_BLOCK]; + MD2_INT state[MD2_BLOCK]; +} MD2_CTX; + +const char *MD2_options(void); +int MD2_Init(MD2_CTX *c); +int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); +int MD2_Final(unsigned char *md, MD2_CTX *c); +unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/md4.h b/android/arm64-v8a/include/openssl/md4.h new file mode 100644 index 00000000..940e29db --- /dev/null +++ b/android/arm64-v8a/include/openssl/md4.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD4_H +# define HEADER_MD4_H + +# include + +# ifndef OPENSSL_NO_MD4 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD4_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD4_LONG unsigned int + +# 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; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/md5.h b/android/arm64-v8a/include/openssl/md5.h new file mode 100644 index 00000000..2deb7721 --- /dev/null +++ b/android/arm64-v8a/include/openssl/md5.h @@ -0,0 +1,50 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD5_H +# define HEADER_MD5_H + +# include + +# ifndef OPENSSL_NO_MD5 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD5_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD5_LONG unsigned int + +# 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; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/mdc2.h b/android/arm64-v8a/include/openssl/mdc2.h new file mode 100644 index 00000000..aabd2bfa --- /dev/null +++ b/android/arm64-v8a/include/openssl/mdc2.h @@ -0,0 +1,42 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MDC2_H +# define HEADER_MDC2_H + +# include + +#ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus +extern "C" { +# 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; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/modes.h b/android/arm64-v8a/include/openssl/modes.h new file mode 100644 index 00000000..a04c6a59 --- /dev/null +++ b/android/arm64-v8a/include/openssl/modes.h @@ -0,0 +1,203 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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); +size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); +size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); + +#ifndef OPENSSL_NO_OCB +typedef struct ocb128_context OCB128_CONTEXT; + +typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); + +OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, + void *keyenc, void *keydec); +int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, + size_t len, size_t taglen); +int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); +#endif /* OPENSSL_NO_OCB */ + +#ifdef __cplusplus +} +#endif diff --git a/android/arm64-v8a/include/openssl/obj_mac.h b/android/arm64-v8a/include/openssl/obj_mac.h new file mode 100644 index 00000000..f97f3eaa --- /dev/null +++ b/android/arm64-v8a/include/openssl/obj_mac.h @@ -0,0 +1,4577 @@ +/* + * WARNING: do not edit! + * Generated by crypto/objects/objects.pl + * + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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_smime_ct_contentCollection "id-smime-ct-contentCollection" +#define NID_id_smime_ct_contentCollection 1058 +#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L + +#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" +#define NID_id_smime_ct_authEnvelopedData 1059 +#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L + +#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_ct_xml "id-ct-xml" +#define NID_id_ct_xml 1060 +#define OBJ_id_ct_xml OBJ_id_smime_ct,28L + +#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_tlsfeature "tlsfeature" +#define LN_tlsfeature "TLS Feature" +#define NID_tlsfeature 1020 +#define OBJ_tlsfeature OBJ_id_pe,24L + +#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_ipsec_IKE "ipsecIKE" +#define LN_ipsec_IKE "ipsec Internet Key Exchange" +#define NID_ipsec_IKE 1022 +#define OBJ_ipsec_IKE OBJ_id_kp,17L + +#define SN_capwapAC "capwapAC" +#define LN_capwapAC "Ctrl/provision WAP Access" +#define NID_capwapAC 1023 +#define OBJ_capwapAC OBJ_id_kp,18L + +#define SN_capwapWTP "capwapWTP" +#define LN_capwapWTP "Ctrl/Provision WAP Termination" +#define NID_capwapWTP 1024 +#define OBJ_capwapWTP OBJ_id_kp,19L + +#define SN_sshClient "secureShellClient" +#define LN_sshClient "SSH Client" +#define NID_sshClient 1025 +#define OBJ_sshClient OBJ_id_kp,21L + +#define SN_sshServer "secureShellServer" +#define LN_sshServer "SSH Server" +#define NID_sshServer 1026 +#define OBJ_sshServer OBJ_id_kp,22L + +#define SN_sendRouter "sendRouter" +#define LN_sendRouter "Send Router" +#define NID_sendRouter 1027 +#define OBJ_sendRouter OBJ_id_kp,23L + +#define SN_sendProxiedRouter "sendProxiedRouter" +#define LN_sendProxiedRouter "Send Proxied Router" +#define NID_sendProxiedRouter 1028 +#define OBJ_sendProxiedRouter OBJ_id_kp,24L + +#define SN_sendOwner "sendOwner" +#define LN_sendOwner "Send Owner" +#define NID_sendOwner 1029 +#define OBJ_sendOwner OBJ_id_kp,25L + +#define SN_sendProxiedOwner "sendProxiedOwner" +#define LN_sendProxiedOwner "Send Proxied Owner" +#define NID_sendProxiedOwner 1030 +#define OBJ_sendProxiedOwner OBJ_id_kp,26L + +#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_blake2b512 "BLAKE2b512" +#define LN_blake2b512 "blake2b512" +#define NID_blake2b512 1056 +#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L + +#define SN_blake2s256 "BLAKE2s256" +#define LN_blake2s256 "blake2s256" +#define NID_blake2s256 1057 +#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L + +#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 Distribution 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_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_ocb "AES-128-OCB" +#define LN_aes_128_ocb "aes-128-ocb" +#define NID_aes_128_ocb 958 + +#define SN_aes_192_ocb "AES-192-OCB" +#define LN_aes_192_ocb "aes-192-ocb" +#define NID_aes_192_ocb 959 + +#define SN_aes_256_ocb "AES-256-OCB" +#define LN_aes_256_ocb "aes-256-ocb" +#define NID_aes_256_ocb 960 + +#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 SN_uniqueIdentifier "uid" +#define LN_uniqueIdentifier "uniqueIdentifier" +#define NID_uniqueIdentifier 102 +#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L + +#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_tc26 "id-tc26" +#define NID_id_tc26 974 +#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L + +#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_gost89_cnt_12 "gost89-cnt-12" +#define NID_gost89_cnt_12 975 + +#define SN_gost89_cbc "gost89-cbc" +#define NID_gost89_cbc 1009 + +#define SN_gost89_ecb "gost89-ecb" +#define NID_gost89_ecb 1010 + +#define SN_gost89_ctr "gost89-ctr" +#define NID_gost89_ctr 1011 + +#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_gost_mac_12 "gost-mac-12" +#define NID_gost_mac_12 976 + +#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_id_tc26_algorithms "id-tc26-algorithms" +#define NID_id_tc26_algorithms 977 +#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L + +#define SN_id_tc26_sign "id-tc26-sign" +#define NID_id_tc26_sign 978 +#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L + +#define SN_id_GostR3410_2012_256 "gost2012_256" +#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" +#define NID_id_GostR3410_2012_256 979 +#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L + +#define SN_id_GostR3410_2012_512 "gost2012_512" +#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" +#define NID_id_GostR3410_2012_512 980 +#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L + +#define SN_id_tc26_digest "id-tc26-digest" +#define NID_id_tc26_digest 981 +#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L + +#define SN_id_GostR3411_2012_256 "md_gost12_256" +#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" +#define NID_id_GostR3411_2012_256 982 +#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L + +#define SN_id_GostR3411_2012_512 "md_gost12_512" +#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" +#define NID_id_GostR3411_2012_512 983 +#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L + +#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" +#define NID_id_tc26_signwithdigest 984 +#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L + +#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" +#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L + +#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" +#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L + +#define SN_id_tc26_mac "id-tc26-mac" +#define NID_id_tc26_mac 987 +#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L + +#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" +#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" +#define NID_id_tc26_hmac_gost_3411_2012_256 988 +#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L + +#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" +#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" +#define NID_id_tc26_hmac_gost_3411_2012_512 989 +#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L + +#define SN_id_tc26_cipher "id-tc26-cipher" +#define NID_id_tc26_cipher 990 +#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L + +#define SN_id_tc26_agreement "id-tc26-agreement" +#define NID_id_tc26_agreement 991 +#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L + +#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" +#define NID_id_tc26_agreement_gost_3410_2012_256 992 +#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L + +#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" +#define NID_id_tc26_agreement_gost_3410_2012_512 993 +#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L + +#define SN_id_tc26_constants "id-tc26-constants" +#define NID_id_tc26_constants 994 +#define OBJ_id_tc26_constants OBJ_id_tc26,2L + +#define SN_id_tc26_sign_constants "id-tc26-sign-constants" +#define NID_id_tc26_sign_constants 995 +#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L + +#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" +#define NID_id_tc26_gost_3410_2012_512_constants 996 +#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L + +#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" +#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" +#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L + +#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" +#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L + +#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" +#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L + +#define SN_id_tc26_digest_constants "id-tc26-digest-constants" +#define NID_id_tc26_digest_constants 1000 +#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L + +#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" +#define NID_id_tc26_cipher_constants 1001 +#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L + +#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" +#define NID_id_tc26_gost_28147_constants 1002 +#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L + +#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" +#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" +#define NID_id_tc26_gost_28147_param_Z 1003 +#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L + +#define SN_INN "INN" +#define LN_INN "INN" +#define NID_INN 1004 +#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L + +#define SN_OGRN "OGRN" +#define LN_OGRN "OGRN" +#define NID_OGRN 1005 +#define OBJ_OGRN OBJ_member_body,643L,100L,1L + +#define SN_SNILS "SNILS" +#define LN_SNILS "SNILS" +#define NID_SNILS 1006 +#define OBJ_SNILS OBJ_member_body,643L,100L,3L + +#define SN_subjectSignTool "subjectSignTool" +#define LN_subjectSignTool "Signing Tool of Subject" +#define NID_subjectSignTool 1007 +#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L + +#define SN_issuerSignTool "issuerSignTool" +#define LN_issuerSignTool "Signing Tool of Issuer" +#define NID_issuerSignTool 1008 +#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L + +#define SN_grasshopper_ecb "grasshopper-ecb" +#define NID_grasshopper_ecb 1012 + +#define SN_grasshopper_ctr "grasshopper-ctr" +#define NID_grasshopper_ctr 1013 + +#define SN_grasshopper_ofb "grasshopper-ofb" +#define NID_grasshopper_ofb 1014 + +#define SN_grasshopper_cbc "grasshopper-cbc" +#define NID_grasshopper_cbc 1015 + +#define SN_grasshopper_cfb "grasshopper-cfb" +#define NID_grasshopper_cfb 1016 + +#define SN_grasshopper_mac "grasshopper-mac" +#define NID_grasshopper_mac 1017 + +#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_128_gcm "CAMELLIA-128-GCM" +#define LN_camellia_128_gcm "camellia-128-gcm" +#define NID_camellia_128_gcm 961 +#define OBJ_camellia_128_gcm OBJ_camellia,6L + +#define SN_camellia_128_ccm "CAMELLIA-128-CCM" +#define LN_camellia_128_ccm "camellia-128-ccm" +#define NID_camellia_128_ccm 962 +#define OBJ_camellia_128_ccm OBJ_camellia,7L + +#define SN_camellia_128_ctr "CAMELLIA-128-CTR" +#define LN_camellia_128_ctr "camellia-128-ctr" +#define NID_camellia_128_ctr 963 +#define OBJ_camellia_128_ctr OBJ_camellia,9L + +#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" +#define LN_camellia_128_cmac "camellia-128-cmac" +#define NID_camellia_128_cmac 964 +#define OBJ_camellia_128_cmac OBJ_camellia,10L + +#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_192_gcm "CAMELLIA-192-GCM" +#define LN_camellia_192_gcm "camellia-192-gcm" +#define NID_camellia_192_gcm 965 +#define OBJ_camellia_192_gcm OBJ_camellia,26L + +#define SN_camellia_192_ccm "CAMELLIA-192-CCM" +#define LN_camellia_192_ccm "camellia-192-ccm" +#define NID_camellia_192_ccm 966 +#define OBJ_camellia_192_ccm OBJ_camellia,27L + +#define SN_camellia_192_ctr "CAMELLIA-192-CTR" +#define LN_camellia_192_ctr "camellia-192-ctr" +#define NID_camellia_192_ctr 967 +#define OBJ_camellia_192_ctr OBJ_camellia,29L + +#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" +#define LN_camellia_192_cmac "camellia-192-cmac" +#define NID_camellia_192_cmac 968 +#define OBJ_camellia_192_cmac OBJ_camellia,30L + +#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_256_gcm "CAMELLIA-256-GCM" +#define LN_camellia_256_gcm "camellia-256-gcm" +#define NID_camellia_256_gcm 969 +#define OBJ_camellia_256_gcm OBJ_camellia,46L + +#define SN_camellia_256_ccm "CAMELLIA-256-CCM" +#define LN_camellia_256_ccm "camellia-256-ccm" +#define NID_camellia_256_ccm 970 +#define OBJ_camellia_256_ccm OBJ_camellia,47L + +#define SN_camellia_256_ctr "CAMELLIA-256-CTR" +#define LN_camellia_256_ctr "camellia-256-ctr" +#define NID_camellia_256_ctr 971 +#define OBJ_camellia_256_ctr OBJ_camellia,49L + +#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" +#define LN_camellia_256_cmac "camellia-256-cmac" +#define NID_camellia_256_cmac 972 +#define OBJ_camellia_256_cmac OBJ_camellia,50L + +#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_chacha20_poly1305 "ChaCha20-Poly1305" +#define LN_chacha20_poly1305 "chacha20-poly1305" +#define NID_chacha20_poly1305 1018 + +#define SN_chacha20 "ChaCha20" +#define LN_chacha20 "chacha20" +#define NID_chacha20 1019 + +#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 + +#define SN_id_scrypt "id-scrypt" +#define NID_id_scrypt 973 +#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L + +#define SN_tls1_prf "TLS1-PRF" +#define LN_tls1_prf "tls1-prf" +#define NID_tls1_prf 1021 + +#define SN_hkdf "HKDF" +#define LN_hkdf "hkdf" +#define NID_hkdf 1036 + +#define SN_id_pkinit "id-pkinit" +#define NID_id_pkinit 1031 +#define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L + +#define SN_pkInitClientAuth "pkInitClientAuth" +#define LN_pkInitClientAuth "PKINIT Client Auth" +#define NID_pkInitClientAuth 1032 +#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L + +#define SN_pkInitKDC "pkInitKDC" +#define LN_pkInitKDC "Signing KDC Response" +#define NID_pkInitKDC 1033 +#define OBJ_pkInitKDC OBJ_id_pkinit,5L + +#define SN_X25519 "X25519" +#define NID_X25519 1034 +#define OBJ_X25519 1L,3L,101L,110L + +#define SN_X448 "X448" +#define NID_X448 1035 +#define OBJ_X448 1L,3L,101L,111L + +#define SN_kx_rsa "KxRSA" +#define LN_kx_rsa "kx-rsa" +#define NID_kx_rsa 1037 + +#define SN_kx_ecdhe "KxECDHE" +#define LN_kx_ecdhe "kx-ecdhe" +#define NID_kx_ecdhe 1038 + +#define SN_kx_dhe "KxDHE" +#define LN_kx_dhe "kx-dhe" +#define NID_kx_dhe 1039 + +#define SN_kx_ecdhe_psk "KxECDHE-PSK" +#define LN_kx_ecdhe_psk "kx-ecdhe-psk" +#define NID_kx_ecdhe_psk 1040 + +#define SN_kx_dhe_psk "KxDHE-PSK" +#define LN_kx_dhe_psk "kx-dhe-psk" +#define NID_kx_dhe_psk 1041 + +#define SN_kx_rsa_psk "KxRSA_PSK" +#define LN_kx_rsa_psk "kx-rsa-psk" +#define NID_kx_rsa_psk 1042 + +#define SN_kx_psk "KxPSK" +#define LN_kx_psk "kx-psk" +#define NID_kx_psk 1043 + +#define SN_kx_srp "KxSRP" +#define LN_kx_srp "kx-srp" +#define NID_kx_srp 1044 + +#define SN_kx_gost "KxGOST" +#define LN_kx_gost "kx-gost" +#define NID_kx_gost 1045 + +#define SN_auth_rsa "AuthRSA" +#define LN_auth_rsa "auth-rsa" +#define NID_auth_rsa 1046 + +#define SN_auth_ecdsa "AuthECDSA" +#define LN_auth_ecdsa "auth-ecdsa" +#define NID_auth_ecdsa 1047 + +#define SN_auth_psk "AuthPSK" +#define LN_auth_psk "auth-psk" +#define NID_auth_psk 1048 + +#define SN_auth_dss "AuthDSS" +#define LN_auth_dss "auth-dss" +#define NID_auth_dss 1049 + +#define SN_auth_gost01 "AuthGOST01" +#define LN_auth_gost01 "auth-gost01" +#define NID_auth_gost01 1050 + +#define SN_auth_gost12 "AuthGOST12" +#define LN_auth_gost12 "auth-gost12" +#define NID_auth_gost12 1051 + +#define SN_auth_srp "AuthSRP" +#define LN_auth_srp "auth-srp" +#define NID_auth_srp 1052 + +#define SN_auth_null "AuthNULL" +#define LN_auth_null "auth-null" +#define NID_auth_null 1053 diff --git a/android/arm64-v8a/include/openssl/objects.h b/android/arm64-v8a/include/openssl/objects.h new file mode 100644 index 00000000..09d614ff --- /dev/null +++ b/android/arm64-v8a/include/openssl/objects.h @@ -0,0 +1,1097 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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); +#if OPENSSL_API_COMPAT < 0x10100000L +# define OBJ_cleanup() while(0) continue +#endif +int OBJ_create_objects(BIO *in); + +size_t OBJ_length(const ASN1_OBJECT *obj); +const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); + +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); + +/* 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. + */ + +int 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_OID_EXISTS 102 +# define OBJ_R_UNKNOWN_NID 101 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/ocsp.h b/android/arm64-v8a/include/openssl/ocsp.h new file mode 100644 index 00000000..08debc5b --- /dev/null +++ b/android/arm64-v8a/include/openssl/ocsp.h @@ -0,0 +1,412 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSP_H +# define HEADER_OCSP_H + +#include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * 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 + + +# ifndef OPENSSL_NO_OCSP + +# 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 + +typedef struct ocsp_cert_id_st OCSP_CERTID; + +DEFINE_STACK_OF(OCSP_CERTID) + +typedef struct ocsp_one_request_st OCSP_ONEREQ; + +DEFINE_STACK_OF(OCSP_ONEREQ) + +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +# 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 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +DEFINE_STACK_OF(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +DEFINE_STACK_OF(OCSP_SINGLERESP) + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st 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, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const 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); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); + +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); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const 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, const 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, const 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, const 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, const 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, const 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); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +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. + */ + +int ERR_load_OCSP_strings(void); + +/* Error codes for the OCSP functions. */ + +/* Function codes. */ +# 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_PARSE_HTTP_LINE1 118 + +/* Reason codes. */ +# 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_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# define OCSP_R_NO_SIGNER_KEY 130 +# 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_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# 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 +#endif diff --git a/android/arm64-v8a/include/openssl/opensslconf-arm32.h b/android/arm64-v8a/include/openssl/opensslconf-arm32.h new file mode 100644 index 00000000..527f4d5b --- /dev/null +++ b/android/arm64-v8a/include/openssl/opensslconf-arm32.h @@ -0,0 +1,169 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#if defined(OPENSSL_NO_DEPRECATED) +# define DECLARE_DEPRECATED(f) +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +#else +# define DECLARE_DEPRECATED(f) f; +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +#define OPENSSL_CPUID_OBJ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# define BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# define THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned char + +#ifdef __cplusplus +} +#endif diff --git a/android/arm64-v8a/include/openssl/opensslconf-arm64.h b/android/arm64-v8a/include/openssl/opensslconf-arm64.h new file mode 100644 index 00000000..f3d83b5c --- /dev/null +++ b/android/arm64-v8a/include/openssl/opensslconf-arm64.h @@ -0,0 +1,169 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#if defined(OPENSSL_NO_DEPRECATED) +# define DECLARE_DEPRECATED(f) +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +#else +# define DECLARE_DEPRECATED(f) f; +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +#define OPENSSL_CPUID_OBJ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned char + +#ifdef __cplusplus +} +#endif diff --git a/android/arm64-v8a/include/openssl/opensslconf-x86.h b/android/arm64-v8a/include/openssl/opensslconf-x86.h new file mode 100644 index 00000000..9891b5d8 --- /dev/null +++ b/android/arm64-v8a/include/openssl/opensslconf-x86.h @@ -0,0 +1,169 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#if defined(OPENSSL_NO_DEPRECATED) +# define DECLARE_DEPRECATED(f) +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +#else +# define DECLARE_DEPRECATED(f) f; +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +#define OPENSSL_CPUID_OBJ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# define BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# define THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned int + +#ifdef __cplusplus +} +#endif diff --git a/android/arm64-v8a/include/openssl/opensslconf.h b/android/arm64-v8a/include/openssl/opensslconf.h new file mode 100644 index 00000000..94174f30 --- /dev/null +++ b/android/arm64-v8a/include/openssl/opensslconf.h @@ -0,0 +1,9 @@ +#ifdef __aarch64__ +#include "opensslconf-arm64.h" +#elif __arm__ +#include "opensslconf-arm32.h" +#elif __i386__ +#include "opensslconf-x86.h" +#else +#error "Unsupported architecture!" +#endif diff --git a/android/arm64-v8a/include/openssl/opensslv.h b/android/arm64-v8a/include/openssl/opensslv.h new file mode 100644 index 00000000..2d54b69b --- /dev/null +++ b/android/arm64-v8a/include/openssl/opensslv.h @@ -0,0 +1,105 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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 0x1010003fL +# ifdef OPENSSL_FIPS +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0c-fips 10 Nov 2016" +# else +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0c 10 Nov 2016" +# endif + +/*- + * 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 version 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.1" + + +#ifdef __cplusplus +} +#endif +#endif /* HEADER_OPENSSLV_H */ diff --git a/android/arm64-v8a/include/openssl/ossl_typ.h b/android/arm64-v8a/include/openssl/ossl_typ.h new file mode 100644 index 00000000..129a67f0 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ossl_typ.h @@ -0,0 +1,190 @@ +/* + * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OPENSSL_TYPES_H +# define HEADER_OPENSSL_TYPES_H + +#include + +#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; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef _WIN32 +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_ISSUER_AND_SERIAL +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +# ifdef BIGNUM +# undef BIGNUM +# endif +struct dane_st; +typedef struct bio_st BIO; +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 evp_md_st EVP_MD; +typedef struct evp_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 evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_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 ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; + +typedef struct rand_meth_st RAND_METHOD; + +typedef struct ssl_dane_st SSL_DANE; +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 x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +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 ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +#else +/* + * Not long long, because the C-library can only be expected to provide + * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), + * strtoumax(). Since we use these for parsing arguments, we need the + * conversion functions, not just the sizes. + */ +typedef long ossl_intmax_t; +typedef unsigned long ossl_uintmax_t; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/android/arm64-v8a/include/openssl/pem.h b/android/arm64-v8a/include/openssl/pem.h new file mode 100644 index 00000000..2375d635 --- /dev/null +++ b/android/arm64-v8a/include/openssl/pem.h @@ -0,0 +1,501 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEM_H +# define HEADER_PEM_H + +# include +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PEM_BUFSIZE 1024 + +# define PEM_STRING_X509_OLD "X509 CERTIFICATE" +# define PEM_STRING_X509 "CERTIFICATE" +# 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" + +# 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_STDIO + +# 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_STDIO) + +# define DECLARE_PEM_read_fp(name, type) /**/ +# define DECLARE_PEM_write_fp(name, type) /**/ +# define DECLARE_PEM_write_fp_const(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 + +# 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); + +# 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) +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +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); + +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); + +#ifndef OPENSSL_NO_STDIO +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); +#endif + +int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +int 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_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_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, + const EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +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); + +# ifndef OPENSSL_NO_STDIO +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); +# endif +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + +# ifndef OPENSSL_NO_DSA +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 +# 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. + */ + +int 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_GET_EVP_CIPHER_INFO 107 +# 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_SIGNFINAL 112 +# define PEM_F_PEM_WRITE 113 +# define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_PRIVATEKEY 139 +# define PEM_F_PEM_X509_INFO_READ 115 +# define PEM_F_PEM_X509_INFO_READ_BIO 116 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* Reason codes. */ +# define PEM_R_BAD_BASE64_DECODE 100 +# define PEM_R_BAD_DECRYPT 101 +# define PEM_R_BAD_END_LINE 102 +# define PEM_R_BAD_IV_CHARS 103 +# define PEM_R_BAD_MAGIC_NUMBER 116 +# define PEM_R_BAD_PASSWORD_READ 104 +# define PEM_R_BAD_VERSION_NUMBER 117 +# define PEM_R_BIO_WRITE_FAILURE 118 +# define PEM_R_CIPHER_IS_NULL 127 +# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 +# define PEM_R_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# define PEM_R_MISSING_DEK_IV 129 +# 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_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_UNEXPECTED_DEK_IV 130 +# 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/android/arm64-v8a/include/openssl/pem2.h b/android/arm64-v8a/include/openssl/pem2.h new file mode 100644 index 00000000..cfe73f13 --- /dev/null +++ b/android/arm64-v8a/include/openssl/pem2.h @@ -0,0 +1,20 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HEADER_PEM_H +int ERR_load_PEM_strings(void); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/android/arm64-v8a/include/openssl/pkcs12.h b/android/arm64-v8a/include/openssl/pkcs12.h new file mode 100644 index 00000000..deaded9d --- /dev/null +++ b/android/arm64-v8a/include/openssl/pkcs12.h @@ -0,0 +1,282 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +DEFINE_STACK_OF(PKCS12_SAFEBAG) + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#if OPENSSL_API_COMPAT < 0x10100000L + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif + +DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const 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); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +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(const 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_friendlyname_utf8(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(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const 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_key_gen_utf8(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_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(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const 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(const char *pass, const 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, const char *pass); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); + +int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ + +int ERR_load_PKCS12_strings(void); + +/* Error codes for the PKCS12 functions. */ + +/* Function codes. */ +# 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_KEY_GEN_UTF8 116 +# 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_SAFEBAG_CREATE0_P8INF 112 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 +# 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_ENCRYPT 125 +# define PKCS12_F_PKCS8_SET0_PBE 132 + +/* 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_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/android/arm64-v8a/include/openssl/pkcs7.h b/android/arm64-v8a/include/openssl/pkcs7.h new file mode 100644 index 00000000..691f7220 --- /dev/null +++ b/android/arm64-v8a/include/openssl/pkcs7.h @@ -0,0 +1,404 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7_H +# define HEADER_PKCS7_H + +# include +# include +# include + +# include +# include + +#ifdef __cplusplus +extern "C" { +#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; + +DEFINE_STACK_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; + +DEFINE_STACK_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; + +DEFINE_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 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* 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 + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +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_STDIO +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. + */ + +int ERR_load_PKCS7_strings(void); + +/* Error codes for the PKCS7 functions. */ + +/* Function codes. */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# 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_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 + +/* 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_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_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# 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_DATASIGN 145 +# 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_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/android/arm64-v8a/include/openssl/rand.h b/android/arm64-v8a/include/openssl/rand.h new file mode 100644 index 00000000..d521ae19 --- /dev/null +++ b/android/arm64-v8a/include/openssl/rand.h @@ -0,0 +1,89 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RAND_H +# define HEADER_RAND_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct rand_meth_st RAND_METHOD; */ + +struct rand_meth_st { + int (*seed) (const void *buf, int num); + int (*bytes) (unsigned char *buf, int num); + void (*cleanup) (void); + int (*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_OpenSSL(void); +#if OPENSSL_API_COMPAT < 0x10100000L +# define RAND_cleanup() while(0) continue +#endif +int RAND_bytes(unsigned char *buf, int num); +DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) +void RAND_seed(const void *buf, int num); +#if defined(__ANDROID__) && defined(__NDK_FPABI__) +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +#endif +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); +# ifndef OPENSSL_NO_EGD +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); +# endif +int RAND_poll(void); + +#if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) +/* application has to include in order to use these */ +DEPRECATEDIN_1_1_0(void RAND_screen(void)) +DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +#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. + */ + +int ERR_load_RAND_strings(void); + +/* Error codes for the RAND functions. */ + +/* Function codes. */ +# define RAND_F_RAND_BYTES 100 + +/* Reason codes. */ +# define RAND_R_PRNG_NOT_SEEDED 100 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/rc2.h b/android/arm64-v8a/include/openssl/rc2.h new file mode 100644 index 00000000..585f9e4c --- /dev/null +++ b/android/arm64-v8a/include/openssl/rc2.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC2_H +# define HEADER_RC2_H + +# include + +# ifndef OPENSSL_NO_RC2 +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int RC2_INT; + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/rc4.h b/android/arm64-v8a/include/openssl/rc4.h new file mode 100644 index 00000000..86803b37 --- /dev/null +++ b/android/arm64-v8a/include/openssl/rc4.h @@ -0,0 +1,36 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC4_H +# define HEADER_RC4_H + +# include + +# ifndef OPENSSL_NO_RC4 +# 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 RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/rc5.h b/android/arm64-v8a/include/openssl/rc5.h new file mode 100644 index 00000000..793f88e4 --- /dev/null +++ b/android/arm64-v8a/include/openssl/rc5.h @@ -0,0 +1,63 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC5_H +# define HEADER_RC5_H + +# include + +# ifndef OPENSSL_NO_RC5 +# ifdef __cplusplus +extern "C" { +# endif + +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 + +# define RC5_32_INT unsigned int + +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ + +/* + * This are the only values supported. Tweak the code if you want more The + * most supported modes will be RC5-32/12/16 RC5-32/16/8 + */ +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 + +typedef struct rc5_key_st { + /* Number of rounds */ + int rounds; + RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; +} RC5_32_KEY; + +void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, + int rounds); +void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC5_32_KEY *key, int enc); +void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *ks, unsigned char *iv, + int enc); +void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/ripemd.h b/android/arm64-v8a/include/openssl/ripemd.h new file mode 100644 index 00000000..c42026aa --- /dev/null +++ b/android/arm64-v8a/include/openssl/ripemd.h @@ -0,0 +1,47 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RIPEMD_H +# define HEADER_RIPEMD_H + +# include + +#ifndef OPENSSL_NO_RMD160 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define RIPEMD160_LONG unsigned int + +# 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; + +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 + + +#endif diff --git a/android/arm64-v8a/include/openssl/rsa.h b/android/arm64-v8a/include/openssl/rsa.h new file mode 100644 index 00000000..4d6e9cc9 --- /dev/null +++ b/android/arm64-v8a/include/openssl/rsa.h @@ -0,0 +1,589 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSA_H +# define HEADER_RSA_H + +# include + +# ifndef OPENSSL_NO_RSA +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# ifdef __cplusplus +extern "C" { +# endif + +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 + +# 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 + +/* + * 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 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define RSA_FLAG_NO_CONSTTIME 0x0000 +# endif +# if OPENSSL_API_COMPAT < 0x00908000L +/* 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_bits(const RSA *rsa); +int RSA_size(const RSA *rsa); +int RSA_security_bits(const RSA *rsa); + +int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); +void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); +void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); +void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, const BIGNUM **dmq1, + const BIGNUM **iqmp); +void RSA_clear_flags(RSA *r, int flags); +int RSA_test_flags(const RSA *r, int flags); +void RSA_set_flags(RSA *r, int flags); +ENGINE *RSA_get0_engine(const RSA *r); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg)) + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, + BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, + const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); +int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, + BN_GENCB *cb); + +int RSA_check_key(const RSA *); +int RSA_check_key_ex(const RSA *, BN_GENCB *cb); + /* 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); + +/* these are the actual RSA functions */ +const RSA_METHOD *RSA_PKCS1_OpenSSL(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_STDIO +int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +int RSA_print(BIO *bp, const RSA *r, int offset); + +/* + * 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); + +#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) +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 + +RSA_METHOD *RSA_meth_new(const char *name, int flags); +void RSA_meth_free(RSA_METHOD *meth); +RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +const char *RSA_meth_get0_name(const RSA_METHOD *meth); +int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); +int RSA_meth_get_flags(RSA_METHOD *meth); +int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_enc(RSA_METHOD *rsa, + int (*pub_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_dec(RSA_METHOD *rsa, + int (*pub_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_enc(RSA_METHOD *rsa, + int (*priv_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_dec(RSA_METHOD *rsa, + int (*priv_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); +int RSA_meth_set_mod_exp(RSA_METHOD *rsa, + int (*mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, + BN_CTX *ctx)); +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx)); +int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) + (int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa); +int RSA_meth_set_sign(RSA_METHOD *rsa, + int (*sign) (int type, const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa)); +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) + (int dtype, const unsigned char *m, + unsigned int m_length, const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa); +int RSA_meth_set_verify(RSA_METHOD *rsa, + int (*verify) (int dtype, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa)); +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_keygen(RSA_METHOD *rsa, + int (*keygen) (RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb)); + +/* 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. + */ + +int ERR_load_RSA_strings(void); + +/* Error codes for the RSA functions. */ + +/* Function codes. */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_ENCODE_PKCS1 146 +# define RSA_F_INT_RSA_VERIFY 145 +# 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_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 156 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CHECK_KEY_EX 160 +# define RSA_F_RSA_CMS_DECRYPT 159 +# define RSA_F_RSA_ITEM_VERIFY 148 +# define RSA_F_RSA_METH_DUP 161 +# define RSA_F_RSA_METH_NEW 162 +# define RSA_F_RSA_METH_SET1_NAME 163 +# define RSA_F_RSA_MGF1_TO_MD 157 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# 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_OSSL_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 +# 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 154 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 +# 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 153 +# 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_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_TO_CTX 155 +# 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_MGF1 126 + +/* 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 158 +# 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 157 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_OAEP_PARAMETERS 161 +# 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_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_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 166 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 +# 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 +#endif diff --git a/android/arm64-v8a/include/openssl/safestack.h b/android/arm64-v8a/include/openssl/safestack.h new file mode 100644 index 00000000..9fe733c2 --- /dev/null +++ b/android/arm64-v8a/include/openssl/safestack.h @@ -0,0 +1,164 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SAFESTACK_H +# define HEADER_SAFESTACK_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) + +/*- + * 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. + */ +DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) +DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) + +/* + * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/seed.h b/android/arm64-v8a/include/openssl/seed.h new file mode 100644 index 00000000..bb97131d --- /dev/null +++ b/android/arm64-v8a/include/openssl/seed.h @@ -0,0 +1,98 @@ +/* + * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * 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. + */ + +#ifndef HEADER_SEED_H +# define HEADER_SEED_H + +# include + +# ifndef OPENSSL_NO_SEED +# include +# include + +#ifdef __cplusplus +extern "C" { +#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 + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; + +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 + +#endif diff --git a/android/arm64-v8a/include/openssl/sha.h b/android/arm64-v8a/include/openssl/sha.h new file mode 100644 index 00000000..6a1eb0de --- /dev/null +++ b/android/arm64-v8a/include/openssl/sha.h @@ -0,0 +1,119 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define SHA_LONG unsigned int + +# 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; + +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); + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +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); + +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +/* + * 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; + +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); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/arm64-v8a/include/openssl/srp.h b/android/arm64-v8a/include/openssl/srp.h new file mode 100644 index 00000000..f2b6ec75 --- /dev/null +++ b/android/arm64-v8a/include/openssl/srp.h @@ -0,0 +1,131 @@ +/* + * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SRP_H +# define HEADER_SRP_H + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; + + +DEFINE_STACK_OF(SRP_gN_cache) + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; + +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +DEFINE_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; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; + +DEFINE_STACK_OF(SRP_gN) + +SRP_VBASE *SRP_VBASE_new(char *seed_key); +void SRP_VBASE_free(SRP_VBASE *vb); +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +/* This method ignores the configured seed and fails for an unknown user. */ +DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const 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(const BIGNUM *g, const BIGNUM *N); +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/srtp.h b/android/arm64-v8a/include/openssl/srtp.h new file mode 100644 index 00000000..5ddfa46d --- /dev/null +++ b/android/arm64-v8a/include/openssl/srtp.h @@ -0,0 +1,50 @@ +/* + * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * 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 + +/* AEAD SRTP protection profiles from RFC 7714 */ +# define SRTP_AEAD_AES_128_GCM 0x0007 +# define SRTP_AEAD_AES_256_GCM 0x0008 + +# ifndef OPENSSL_NO_SRTP + +__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +__owur int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); + +__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); + +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/arm64-v8a/include/openssl/ssl.h b/android/arm64-v8a/include/openssl/ssl.h new file mode 100644 index 00000000..86ab9125 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ssl.h @@ -0,0 +1,2529 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# include +# endif +# include +# include +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL 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 + +# 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 + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# 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"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr" +# define SSL_TXT_kECDHe "kECDHe" +# define SSL_TXT_kECDH "kECDH" +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# 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_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# 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_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" + +# 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_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# 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_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:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * 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 + +# 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; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* 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; + +DEFINE_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, + const SSL_CIPHER **cipher, void *arg); + +/* 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); + +/* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U +/* Removed from OpenSSL 0.9.8q and 1.0.0c */ +/* Dead forever, see CVE-2010-4180. */ +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0U +# define SSL_OP_TLSEXT_PADDING 0x00000010U +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0U +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U +/* Ancient SSLeay version, retained for compatibility */ +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0U +/* Removed from OpenSSL 1.1.0 */ +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0U + +/* 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 +/* Related to removed SSLv2 */ +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_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 0x00000800U + +/* + * SSL_OP_ALL: various bug workarounds that should be rather harmless. This + * used to be 0x000FFFFFL before 0.9.7. + */ +# define SSL_OP_ALL 0x80000BFFU + +/* DTLS options */ +# define SSL_OP_NO_QUERY_MTU 0x00001000U +/* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE 0x00002000U +/* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET 0x00004000U +# ifndef OPENSSL_NO_DTLS1_METHOD +/* Use Cisco's "speshul" version of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) */ +# define SSL_OP_CISCO_ANYCONNECT 0x00008000U +# endif + +/* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U +/* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION 0x00020000U +/* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U +/* Does nothing: retained for compatibility */ +# define SSL_OP_SINGLE_ECDH_USE 0x0 +/* Does nothing: retained for compatibility */ +# define SSL_OP_SINGLE_DH_USE 0x0 +/* Does nothing: retained for compatibility */ +# 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 0x00400000U +/* + * 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 0x00800000U + +# define SSL_OP_NO_SSLv2 0x00000000U +# define SSL_OP_NO_SSLv3 0x02000000U +# define SSL_OP_NO_TLSv1 0x04000000U +# define SSL_OP_NO_TLSv1_2 0x08000000U +# define SSL_OP_NO_TLSv1_1 0x10000000U + +# define SSL_OP_NO_DTLSv1 0x04000000U +# define SSL_OP_NO_DTLSv1_2 0x08000000U + +# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) +# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) + + +/* Removed from previous versions */ +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0U +/* + * 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 0x80000000U + +/* + * 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 0x00000001U +/* + * 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 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * 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 0x00000010U +/* + * 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 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * 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 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* 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 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* 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 +# define SSL_CONF_TYPE_NONE 0x4 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); +unsigned long SSL_get_options(const SSL* s); +unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_clear_options(SSL *s, unsigned long op); +unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_set_options(SSL *s, unsigned long op); + +# 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_DTLS_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)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP + +/* see tls_srp.c */ +__owur int SSL_SRP_CTX_init(SSL *s); +__owur 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); +__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); +__owur int SRP_Calc_A_param(SSL *s); + +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 + +# 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 SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. 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); + +# 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, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const 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 +__owur 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, + const 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 + +__owur 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); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int 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 int *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)); +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur 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 + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur 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); + +__owur 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); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 + +/* 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_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +DEFINE_STACK_OF_CONST(SSL_CIPHER) +DEFINE_STACK_OF(SSL_COMP) + +/* 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)) +DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) + + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# 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_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(SSL *s); +int SSL_in_before(SSL *s); +int SSL_is_init_finished(SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.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() +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# 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_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# 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_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# 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_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 */ +# 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_DTLS_EXT_SEND_HEARTBEAT 85 +# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 +# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 +# endif +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# 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_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_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# 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 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_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_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# 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_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,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +#define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +#define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +#define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +#define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) + +#if OPENSSL_API_COMPAT < 0x10100000L +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +#endif + +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur 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 +__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +#endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); + +__owur SSL_SESSION *SSL_SESSION_new(void); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +__owur int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); +int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); +__owur int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); +__owur 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 +__owur X509 *SSL_get_peer_certificate(const SSL *s); +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur 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 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur 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); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur 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_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); +__owur int SSL_set_purpose(SSL *s, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *s, int trust); +__owur int SSL_set_trust(SSL *s, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, unsigned char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, unsigned const char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur 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); + +__owur BIGNUM *SSL_get_srp_g(SSL *s); +__owur BIGNUM *SSL_get_srp_N(SSL *s); + +__owur char *SSL_get_srp_username(SSL *s); +__owur char *SSL_get_srp_userinfo(SSL *s); +# endif + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur 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)); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +# ifndef OPENSSL_NO_SSL3_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) /* SSLv3 */ +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) /* TLSv1.0 */ +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) /* TLSv1.1 */ +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) /* TLSv1.2 */ +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) /* DTLSv1.0 */ +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) /* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) /* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) /* DTLSv1.2 */ +#endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_renegotiate(SSL *s); +__owur int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(SSL *s); +int SSL_shutdown(SSL *s); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur 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); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur 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); + +__owur long SSL_get_default_timeout(const SSL *s); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +#endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur 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 */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur 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); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *ssl, + unsigned char *out, size_t outlen); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur 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); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur 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); + +__owur 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) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +/* NB: the |keylength| is only applicable when is_export is true */ +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 + +__owur const COMP_METHOD *SSL_get_current_compression(SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +#if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_COMP_free_compression_methods() while(0) continue +#endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn tls_session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int + is_forward_secure)); +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(SSL *s); +__owur int SSL_is_server(SSL *s); + +__owur __owur 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); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur 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); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# 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); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int(*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, const SSL_CTX *ctx, int op, + int bits, int nid, + void *other, void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +#define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +#define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +#define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +extern const char SSL_version_str[]; + +/* 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. + */ + +int ERR_load_SSL_strings(void); + +/* Error codes for the SSL functions. */ + +/* Function codes. */ +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CT_MOVE_SCTS 345 +# define SSL_F_CT_STRICT 349 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DANE_CTX_ENABLE 347 +# define SSL_F_DANE_MTYPE_SET 393 +# define SSL_F_DANE_TLSA_ADD 394 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 339 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_DTLSV1_LISTEN 350 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 +# define SSL_F_OPENSSL_INIT_SSL 342 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 +# define SSL_F_READ_STATE_MACHINE 352 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# 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_FINAL_FINISH_MAC 285 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_INIT_FINISHED_MAC 397 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# 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 316 +# 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_ADD0_CHAIN_CERT 346 +# define SSL_F_SSL_CERT_DUP 221 +# define SSL_F_SSL_CERT_NEW 162 +# define SSL_F_SSL_CERT_SET0_CHAIN 340 +# 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_ENABLE_CT 398 +# define SSL_F_SSL_CTX_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 +# 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_CT_VALIDATION_CALLBACK 396 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# 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_DANE_DUP 403 +# define SSL_F_SSL_DANE_ENABLE 395 +# define SSL_F_SSL_DO_CONFIG 391 +# define SSL_F_SSL_DO_HANDSHAKE 180 +# define SSL_F_SSL_DUP_CA_LIST 408 +# define SSL_F_SSL_ENABLE_CT 402 +# 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_SIGN_PKEY 183 +# define SSL_F_SSL_INIT_WBIO_BUFFER 184 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +# define SSL_F_SSL_MODULE_INIT 392 +# 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_READ 223 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 +# define SSL_F_SSL_SESSION_DUP 348 +# define SSL_F_SSL_SESSION_NEW 189 +# define SSL_F_SSL_SESSION_PRINT_FP 190 +# define SSL_F_SSL_SESSION_SET1_ID 423 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 +# define SSL_F_SSL_SET_ALPN_PROTOS 344 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# 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_WFD 196 +# define SSL_F_SSL_SHUTDOWN 224 +# define SSL_F_SSL_SRP_CTX_INIT 313 +# define SSL_F_SSL_START_ASYNC_JOB 389 +# 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_VALIDATE_CT 400 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_STATE_MACHINE 353 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 +# define SSL_F_TLS1_ENC 401 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# 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_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 355 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 356 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 357 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 358 +# define SSL_F_TLS_CONSTRUCT_FINISHED 359 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 374 +# define SSL_F_TLS_CONSTRUCT_SERVER_DONE 375 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 376 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 377 +# define SSL_F_TLS_GET_MESSAGE_BODY 351 +# define SSL_F_TLS_GET_MESSAGE_HEADER 387 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 +# define SSL_F_TLS_PROCESS_CERT_STATUS 362 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 +# define SSL_F_TLS_PROCESS_CKE_DHE 411 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 +# define SSL_F_TLS_PROCESS_CKE_GOST 413 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 +# define SSL_F_TLS_PROCESS_CKE_RSA 415 +# define SSL_F_TLS_PROCESS_CKE_SRP 416 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 +# define SSL_F_TLS_PROCESS_FINISHED 364 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 +# define SSL_F_TLS_PROCESS_SERVER_DONE 368 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 +# define SSL_F_TLS_PROCESS_SKE_DHE 419 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 +# define SSL_F_TLS_PROCESS_SKE_SRP 422 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 + +/* Reason codes. */ +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 +# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# 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_VALUE 102 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_ECC_CERT 304 +# 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_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# 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_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_KEY_TOO_SMALL 397 +# define SSL_R_CA_MD_TOO_WEAK 398 +# 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_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# 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_TYPE_NOT_SET 144 +# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 +# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 +# define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 +# define SSL_R_DANE_ALREADY_ENABLED 172 +# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 +# define SSL_R_DANE_NOT_ENABLED 175 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 +# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 +# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 +# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 +# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 +# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 +# define SSL_R_DANE_TLSA_NULL_DATA 203 +# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +# define SSL_R_DATA_LENGTH_TOO_LONG 146 +# define SSL_R_DECRYPTION_FAILED 147 +# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +# define SSL_R_DH_KEY_TOO_SMALL 394 +# 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_SIGNING 318 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_EE_KEY_TOO_SMALL 399 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_FAILED_TO_INIT_ASYNC 405 +# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INCONSISTENT_EXTMS 104 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_CONFIGURATION_NAME 113 +# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_SEQUENCE_NUMBER 402 +# 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_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_LONG 404 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# 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_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# 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_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# 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_SIGNATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_VALID_SCTS 216 +# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 +# 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_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_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PIPELINE_FAILURE 406 +# 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_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# 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_COMPRESSION_ALGORITHM_MISSING 342 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SCT_VERIFICATION_FAILED 208 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 +# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 +# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +# define SSL_R_SRP_A_CALC 361 +# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 +# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 +# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 +# define SSL_R_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_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_COMMAND_SECTION_EMPTY 117 +# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 +# 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_NEGATIVE_LENGTH 372 +# define SSL_R_SSL_SECTION_EMPTY 126 +# define SSL_R_SSL_SECTION_NOT_FOUND 136 +# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +# define SSL_R_SSL_SESSION_ID_CONFLICT 302 +# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 +# 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_VERSION_MISMATCH 210 +# 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_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_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# 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_COMMAND 139 +# 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_SSL_VERSION 254 +# define SSL_R_UNKNOWN_STATE 255 +# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# 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_VERSION_TOO_HIGH 166 +# define SSL_R_VERSION_TOO_LOW 396 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# 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/android/arm64-v8a/include/openssl/ssl2.h b/android/arm64-v8a/include/openssl/ssl2.h new file mode 100644 index 00000000..5321bd27 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ssl2.h @@ -0,0 +1,24 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSL2_H +# define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL2_VERSION 0x0002 + +# define SSL2_MT_CLIENT_HELLO 1 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/arm64-v8a/include/openssl/ssl3.h b/android/arm64-v8a/include/openssl/ssl3.h new file mode 100644 index 00000000..aca19223 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ssl3.h @@ -0,0 +1,307 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# include +# 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_DHE_DSS_DES_40_CBC_SHA 0x03000011 +# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 +# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 +# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA +# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 +# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 +# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 +# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_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 + +# 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" + +# 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 DTLS1_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 + + +# 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 + +/* Removed from OpenSSL 1.1.0 */ +# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 + +# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 + +/* Set if we encrypt then mac instead of usual mac then encrypt */ +# define TLS1_FLAGS_ENCRYPT_THEN_MAC 0x0100 + +/* Set if extended master secret extension received from peer */ +# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 + +# 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 + +/* Dummy message type for handling CCS like a normal handshake message */ +# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 + +# 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/android/arm64-v8a/include/openssl/stack.h b/android/arm64-v8a/include/openssl/stack.h new file mode 100644 index 00000000..23ad3b89 --- /dev/null +++ b/android/arm64-v8a/include/openssl/stack.h @@ -0,0 +1,78 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_STACK_H +# define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ + +typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); +typedef void (*OPENSSL_sk_freefunc)(void *); +typedef void *(*OPENSSL_sk_copyfunc)(const void *); + +int OPENSSL_sk_num(const OPENSSL_STACK *); +void *OPENSSL_sk_value(const OPENSSL_STACK *, int); + +void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); + +OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_new_null(void); +void OPENSSL_sk_free(OPENSSL_STACK *); +void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); +OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, OPENSSL_sk_copyfunc c, OPENSSL_sk_freefunc f); +int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); +void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); +void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); +int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); +void *OPENSSL_sk_shift(OPENSSL_STACK *st); +void *OPENSSL_sk_pop(OPENSSL_STACK *st); +void OPENSSL_sk_zero(OPENSSL_STACK *st); +OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); +void OPENSSL_sk_sort(OPENSSL_STACK *st); +int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _STACK OPENSSL_STACK +# define sk_num OPENSSL_sk_num +# define sk_value OPENSSL_sk_value +# define sk_set OPENSSL_sk_set +# define sk_new OPENSSL_sk_new +# define sk_new_null OPENSSL_sk_new_null +# define sk_free OPENSSL_sk_free +# define sk_pop_free OPENSSL_sk_pop_free +# define sk_deep_copy OPENSSL_sk_deep_copy +# define sk_insert OPENSSL_sk_insert +# define sk_delete OPENSSL_sk_delete +# define sk_delete_ptr OPENSSL_sk_delete_ptr +# define sk_find OPENSSL_sk_find +# define sk_find_ex OPENSSL_sk_find_ex +# define sk_push OPENSSL_sk_push +# define sk_unshift OPENSSL_sk_unshift +# define sk_shift OPENSSL_sk_shift +# define sk_pop OPENSSL_sk_pop +# define sk_zero OPENSSL_sk_zero +# define sk_set_cmp_func OPENSSL_sk_set_cmp_func +# define sk_dup OPENSSL_sk_dup +# define sk_sort OPENSSL_sk_sort +# define sk_is_sorted OPENSSL_sk_is_sorted +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/arm64-v8a/include/openssl/symhacks.h b/android/arm64-v8a/include/openssl/symhacks.h new file mode 100644 index 00000000..caf1f1a7 --- /dev/null +++ b/android/arm64-v8a/include/openssl/symhacks.h @@ -0,0 +1,52 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SYMHACKS_H +# define HEADER_SYMHACKS_H + +# include + +/* Case insensitive linking causes problems.... */ +# if defined(OPENSSL_SYS_VMS) +# 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/android/arm64-v8a/include/openssl/tls1.h b/android/arm64-v8a/include/openssl/tls1.h new file mode 100644 index 00000000..23e382cd --- /dev/null +++ b/android/arm64-v8a/include/openssl/tls1.h @@ -0,0 +1,972 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Default security level if not overridden at config time */ +# ifndef OPENSSL_TLS_SECURITY_LEVEL +# define OPENSSL_TLS_SECURITY_LEVEL 1 +# endif + +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS_MAX_VERSION TLS1_2_VERSION + +/* Special value for method supporting multiple versions */ +# define TLS_ANY_VERSION 0x10000 + +# 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) \ + ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) + +# define TLS1_get_client_version(s) \ + ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 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 */ +# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ +# define TLSEXT_TYPE_server_name 0 +# define TLSEXT_TYPE_max_fragment_length 1 +# define TLSEXT_TYPE_client_certificate_url 2 +# define TLSEXT_TYPE_trusted_ca_keys 3 +# define TLSEXT_TYPE_truncated_hmac 4 +# define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4681 */ +# define TLSEXT_TYPE_user_mapping 6 +/* ExtensionType values from RFC5878 */ +# define TLSEXT_TYPE_client_authz 7 +# define TLSEXT_TYPE_server_authz 8 +/* ExtensionType values from RFC6091 */ +# define TLSEXT_TYPE_cert_type 9 + +/* ExtensionType values from RFC4492 */ +# define TLSEXT_TYPE_elliptic_curves 10 +# define TLSEXT_TYPE_ec_point_formats 11 + +/* ExtensionType value from RFC5054 */ +# define TLSEXT_TYPE_srp 12 + +/* ExtensionType values from RFC5246 */ +# define TLSEXT_TYPE_signature_algorithms 13 + +/* ExtensionType value from RFC5764 */ +# define TLSEXT_TYPE_use_srtp 14 + +/* ExtensionType value from RFC5620 */ +# define TLSEXT_TYPE_heartbeat 15 + +/* ExtensionType value from RFC7301 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * Extension type for Certificate Transparency + * https://tools.ietf.org/html/rfc6962#section-3.3.1 + */ +# define TLSEXT_TYPE_signed_certificate_timestamp 18 + +/* + * ExtensionType value for TLS padding extension. + * http://tools.ietf.org/html/draft-agl-tls-padding + */ +# define TLSEXT_TYPE_padding 21 + +/* ExtensionType value from RFC7366 */ +# define TLSEXT_TYPE_encrypt_then_mac 22 + +/* ExtensionType value from RFC7627 */ +# define TLSEXT_TYPE_extended_master_secret 23 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* Temporary extension type */ +# define TLSEXT_TYPE_renegotiate 0xff01 + +# ifndef OPENSSL_NO_NEXTPROTONEG +/* This is not an IANA defined extension number */ +# define TLSEXT_TYPE_next_proto_neg 13172 +# endif + +/* NameType value from RFC3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from RFC4492 */ +# define TLSEXT_ECPOINTFORMAT_first 0 +# define TLSEXT_ECPOINTFORMAT_uncompressed 0 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +# define TLSEXT_ECPOINTFORMAT_last 2 + +/* Signature and hash algorithms from RFC5246 */ +# define TLSEXT_signature_anonymous 0 +# define TLSEXT_signature_rsa 1 +# define TLSEXT_signature_dsa 2 +# define TLSEXT_signature_ecdsa 3 +# define TLSEXT_signature_gostr34102001 237 +# define TLSEXT_signature_gostr34102012_256 238 +# define TLSEXT_signature_gostr34102012_512 239 + +/* Total number of different signature algorithms */ +# define TLSEXT_signature_num 7 + +# 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 +# define TLSEXT_hash_gostr3411 237 +# define TLSEXT_hash_gostr34112012_256 238 +# define TLSEXT_hash_gostr34112012_512 239 + +/* Total number of different digest algorithms */ + +# define TLSEXT_hash_num 10 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +# define TLSEXT_MAXLEN_host_name 255 + +__owur const char *SSL_get_servername(const SSL *s, const int type); +__owur 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. + */ +__owur 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); + +__owur 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_get_tlsext_status_type(ssl) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0, NULL) + +# 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_get_tlsext_status_cb(ssl, cb) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0, (void (**)(void))cb) +# 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_get_tlsext_status_arg(ssl, arg) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg +# 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_CTX_set_tlsext_status_type(ssl, type) \ + SSL_CTX_ctrl(ssl, SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE, type, NULL) + +#define SSL_CTX_get_tlsext_status_type(ssl) \ + SSL_CTX_ctrl(ssl, SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE, 0, NULL) + +# 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_DTLSEXT_HB_ENABLED 0x01 +# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 +# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 +# define SSL_get_dtlsext_heartbeat_pending(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) +# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ + SSL_ctrl((ssl),SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ + SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT +# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ + SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING +# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ + SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS +# define SSL_TLSEXT_HB_ENABLED \ + SSL_DTLSEXT_HB_ENABLED +# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ + SSL_DTLSEXT_HB_DONT_SEND_REQUESTS +# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ + SSL_DTLSEXT_HB_DONT_RECV_REQUESTS +# define SSL_get_tlsext_heartbeat_pending(ssl) \ + SSL_get_dtlsext_heartbeat_pending(ssl) +# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ + SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) +# 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 + +# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E +# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 + +# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 +# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 + +/* PSK ciphersuites from 5487 */ +# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 +# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB +# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC +# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD + +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF +# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 +# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 + +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 + +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 + +/* NULL PSK ciphersuites from RFC4785 */ +# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E + +/* 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 + +/* CCM ciphersuites from RFC6655 */ +# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C +# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F +# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 +# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 +# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 +# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 +# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 +# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB + +/* CCM ciphersuites from RFC7251 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF + +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 + +/* ECC ciphersuites from RFC4492 */ +# 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 + +/* ECDHE PSK ciphersuites from RFC5489 */ +# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 +# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 + +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 + +/* NULL PSK ciphersuites from RFC4785 */ + +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 + +# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 +# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 +# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 +# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA +# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB +# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC +# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD +# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE + +/* + * 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_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" + +/* AES ciphersuites from RFC3268 */ +# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" +# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" +# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" + +/* PSK ciphersuites from RFC 5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" + +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" +# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" +# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" + +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" + +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" + +/* 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" + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" + +# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" + +/* 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" + +/* CCM ciphersuites from RFC6655 */ + +# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" +# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" + +# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" +# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" +# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" +# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" + +/* CCM ciphersuites from RFC7251 */ + +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" + +/* 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" + +/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" + +/* ECDHE PSK ciphersuites from RFC 5489 */ +# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" + +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" + +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" + +# 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_GOST01_SIGN 22 +# define TLS_CT_GOST12_SIGN 238 +# define TLS_CT_GOST12_512_SIGN 239 + +/* + * 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 22 +# 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_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 +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 + +# 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" +# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST +/* + * extended master secret + */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x63\x64\x65\x64\x20\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/android/arm64-v8a/include/openssl/ts.h b/android/arm64-v8a/include/openssl/ts.h new file mode 100644 index 00000000..a5659825 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ts.h @@ -0,0 +1,643 @@ +/* + * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TS_H +# define HEADER_TS_H + +# include + +# ifndef OPENSSL_NO_TS +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include + +typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; +typedef struct TS_req_st TS_REQ; +typedef struct TS_accuracy_st TS_ACCURACY; +typedef struct TS_tst_info_st TS_TST_INFO; + +/* Possible values for status. */ +# 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. */ +# 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 TS_STATUS_INFO; +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +DEFINE_STACK_OF(ESS_CERT_ID) + +typedef struct TS_resp_st TS_RESP; + +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); + +#ifndef OPENSSL_NO_STDIO +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +#endif +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); + +#ifndef OPENSSL_NO_STDIO +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); +#endif +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, 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); + +#ifndef OPENSSL_NO_STDIO +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +#endif +TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *bio, 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); + +#ifndef OPENSSL_NO_STDIO +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); +#endif +TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); +int i2d_TS_TST_INFO_bio(BIO *bio, 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); + +int TS_REQ_set_version(TS_REQ *a, long version); +long TS_REQ_get_version(const TS_REQ *a); + +int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); +const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); + +const STACK_OF(ASN1_UTF8STRING) * +TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); + +const ASN1_BIT_STRING * +TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *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, const 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, const 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, const 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 TS_RESP_CTX; + +DEFINE_STACK_OF_CONST(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); + +int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, + const EVP_MD *signer_digest); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const 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, const ASN1_OBJECT *policy); + +/* + * Adds a new acceptable message digest. Note that no message digests are + * accepted by default. The md argument is shared with the caller. + */ +int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* Accuracy is not included by default. */ +int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, + int secs, int millis, int micros); + +/* + * Clock precision digits, i.e. the number of decimal digits: '0' means sec, + * '3' msec, '6' usec, and so on. Default is 0. + */ +int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, + unsigned clock_precision_digits); +/* At most we accept usec precision. */ +# define TS_MAX_CLOCK_PRECISION_DIGITS 6 + +/* Maximum status message length */ +# define TS_MAX_STATUS_LENGTH (1024 * 1024) + +/* No flags are set by default. */ +void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); + +/* Default callback always returns a constant. */ +void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); + +/* Default callback uses the gettimeofday() and gmtime() system calls. */ +void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); + +/* + * Default callback rejects all extensions. The extension callback is called + * when the TS_TST_INFO object is already set up and not signed yet. + */ +/* FIXME: extension handling is not tested yet. */ +void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, + TS_extension_cb cb, void *data); + +/* The following methods can be used in the callbacks. */ +int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, + int status, const char *text); + +/* Sets the status info only if it is still TS_STATUS_GRANTED. */ +int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, + int status, const char *text); + +int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); + +/* The get methods below can be used in the extension callback. */ +TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); + +TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); + +/* + * Creates the signed TS_TST_INFO and puts it in TS_RESP. + * In case of errors it sets the status info properly. + * Returns NULL only in case of memory allocation/fatal error. + */ +TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); + +/* + * Declarations related to response verification, + * they are defined in ts/ts_resp_verify.c. + */ + +int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, + X509_STORE *store, X509 **signer_out); + +/* Context structure for the generic verify method. */ + +/* Verify the signer's certificate and the signature of the response. */ +# define TS_VFY_SIGNATURE (1u << 0) +/* Verify the version number of the response. */ +# define TS_VFY_VERSION (1u << 1) +/* Verify if the policy supplied by the user matches the policy of the TSA. */ +# define TS_VFY_POLICY (1u << 2) +/* + * Verify the message imprint provided by the user. This flag should not be + * specified with TS_VFY_DATA. + */ +# define TS_VFY_IMPRINT (1u << 3) +/* + * Verify the message imprint computed by the verify method from the user + * provided data and the MD algorithm of the response. This flag should not + * be specified with TS_VFY_IMPRINT. + */ +# define TS_VFY_DATA (1u << 4) +/* Verify the nonce value. */ +# define TS_VFY_NONCE (1u << 5) +/* Verify if the TSA name field matches the signer certificate. */ +# define TS_VFY_SIGNER (1u << 6) +/* Verify if the TSA name field equals to the user provided name. */ +# define TS_VFY_TSA_NAME (1u << 7) + +/* You can use the following convenience constants. */ +# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_IMPRINT \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) +# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_DATA \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) + +typedef struct TS_verify_ctx 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, + */ +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); +int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); +int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); +BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); +unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, + unsigned char *hexstr, long len); +X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); +STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); + +/*- + * 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); +#ifndef OPENSSL_NO_ENGINE +int TS_CONF_set_crypto_device(CONF *conf, const char *section, + const char *device); +int TS_CONF_set_default_engine(const char *name); +#endif +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_signer_digest(CONF *conf, const char *section, + const char *md, 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. + */ + +int ERR_load_TS_strings(void); + +/* Error codes for the TS functions. */ + +/* Function codes. */ +# 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_INVALID 151 +# define TS_F_TS_CONF_LOAD_CERT 153 +# define TS_F_TS_CONF_LOAD_CERTS 154 +# define TS_F_TS_CONF_LOAD_KEY 155 +# define TS_F_TS_CONF_LOOKUP_FAIL 152 +# 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_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_CANNOT_LOAD_CERT 137 +# define TS_R_CANNOT_LOAD_KEY 138 +# 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_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_VAR_BAD_VALUE 135 +# define TS_R_VAR_LOOKUP_FAILURE 136 +# define TS_R_WRONG_CONTENT_TYPE 114 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/txt_db.h b/android/arm64-v8a/include/openssl/txt_db.h new file mode 100644 index 00000000..0e6c943e --- /dev/null +++ b/android/arm64-v8a/include/openssl/txt_db.h @@ -0,0 +1,57 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TXT_DB_H +# define HEADER_TXT_DB_H + +# include +# include +# 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 +# define DB_ERROR_WRONG_NUM_FIELDS 6 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OPENSSL_STRING *OPENSSL_PSTRING; +DEFINE_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; + +TXT_DB *TXT_DB_read(BIO *in, int num); +long TXT_DB_write(BIO *out, TXT_DB *db); +int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), + OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC 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/android/arm64-v8a/include/openssl/ui.h b/android/arm64-v8a/include/openssl/ui.h new file mode 100644 index 00000000..26f4f044 --- /dev/null +++ b/android/arm64-v8a/include/openssl/ui.h @@ -0,0 +1,368 @@ +/* + * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UI_H +# define HEADER_UI_H + +# include + +# ifndef OPENSSL_NO_UI + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 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 useful 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) + +#define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +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 with 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; +DEFINE_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(const 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 prompt + * 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. + */ + +int 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_UI_CREATE_METHOD 112 +# 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 +#endif diff --git a/android/arm64-v8a/include/openssl/whrlpool.h b/android/arm64-v8a/include/openssl/whrlpool.h new file mode 100644 index 00000000..20ea3503 --- /dev/null +++ b/android/arm64-v8a/include/openssl/whrlpool.h @@ -0,0 +1,48 @@ +/* + * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_WHRLPOOL_H +# define HEADER_WHRLPOOL_H + +#include + +# ifndef OPENSSL_NO_WHIRLPOOL +# 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; + +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); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/arm64-v8a/include/openssl/x509.h b/android/arm64-v8a/include/openssl/x509.h new file mode 100644 index 00000000..c8996f35 --- /dev/null +++ b/android/arm64-v8a/include/openssl/x509.h @@ -0,0 +1,1123 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 +# include +# include +# include +# include +# include +# include +# include +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# endif + +# include + +#ifdef __cplusplus +extern "C" { +#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 + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +DEFINE_STACK_OF(X509_NAME_ENTRY) + +DEFINE_STACK_OF(X509_NAME) + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DEFINE_STACK_OF(X509_EXTENSION) + +typedef struct x509_attributes_st X509_ATTRIBUTE; + +DEFINE_STACK_OF(X509_ATTRIBUTE) + +typedef struct X509_req_info_st X509_REQ_INFO; + +typedef struct X509_req_st X509_REQ; + +typedef struct x509_cert_aux_st X509_CERT_AUX; + +typedef struct x509_cinf_st X509_CINF; + +DEFINE_STACK_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; + +DEFINE_STACK_OF(X509_TRUST) + +/* standard trust ids */ + +# define X509_TRUST_DEFAULT 0 /* 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 (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* 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; 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) + +DEFINE_STACK_OF(X509_REVOKED) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +DEFINE_STACK_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; +} X509_PKEY; + +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; +} X509_INFO; + +DEFINE_STACK_OF(X509_INFO) + +/* + * 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; + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +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); + +const char *X509_verify_cert_error_string(long n); + +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, const X509_ALGOR *alg, + const 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); +# ifndef OPENSSL_NO_OCSP +int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); +# endif +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); +# ifndef OPENSSL_NO_OCSP +int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); +# endif +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); + +# ifndef OPENSSL_NO_STDIO +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 + +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); + +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(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const 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_get0(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +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) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +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) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +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(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +int X509_trusted(const X509 *x); +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const 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, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(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); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const 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); + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_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, const 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_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +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(const X509 *x509, const 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); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +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, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const 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_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); + +int X509_NAME_entry_count(const 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, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -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, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const 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, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const 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, + const 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, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const 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(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +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, + const 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(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const 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(const 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(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const 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(const 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(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const 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(const 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, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const 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(const 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, + const 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, + const 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(const 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, const 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); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +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(const PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); + +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(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); + +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), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const 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. + */ + +int ERR_load_X509_strings(void); + +/* Error codes for the X509 functions. */ + +/* Function codes. */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BUILD_CHAIN 106 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 149 +# define X509_F_CHECK_POLICY 145 +# define X509_F_DANE_I2D 107 +# 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_OBJECT_NEW 150 +# define X509_F_X509_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_DECODE 148 +# define X509_F_X509_PUBKEY_GET0 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_SELECTOR 133 +# 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_IDP_MISMATCH 128 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_FIELD_NAME 119 +# define X509_R_INVALID_TRUST 123 +# define X509_R_ISSUER_MISMATCH 129 +# define X509_R_KEY_TYPE_MISMATCH 115 +# define X509_R_KEY_VALUES_MISMATCH 116 +# define X509_R_LOADING_CERT_DIR 103 +# define X509_R_LOADING_DEFAULTS 104 +# define X509_R_METHOD_NOT_SUPPORTED 124 +# define X509_R_NAME_TOO_LONG 134 +# define X509_R_NEWER_CRL_NOT_NEWER 132 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_NUMBER 130 +# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +# define X509_R_SHOULD_RETRY 106 +# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +# define X509_R_UNKNOWN_KEY_TYPE 117 +# define X509_R_UNKNOWN_NID 109 +# define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/arm64-v8a/include/openssl/x509_vfy.h b/android/arm64-v8a/include/openssl/x509_vfy.h new file mode 100644 index 00000000..cab8005e --- /dev/null +++ b/android/arm64-v8a/include/openssl/x509_vfy.h @@ -0,0 +1,539 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509_VFY_H +# define HEADER_X509_VFY_H + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef HEADER_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +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. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#if OPENSSL_API_COMPAT < 0x10100000L +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +DEFINE_STACK_OF(X509_LOOKUP) +DEFINE_STACK_OF(X509_OBJECT) +DEFINE_STACK_OF(X509_VERIFY_PARAM) + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_INVALID_CA 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* 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 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 + +/* Certificate verify flags */ + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* 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 self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# 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, X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); + +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_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); +X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); + +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_set0_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 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +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_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +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); + +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, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + X509_NAME *name, ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +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); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +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_get0_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_set0_verified_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); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(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); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* 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_auth_level(X509_VERIFY_PARAM *param, int auth_level); +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 *); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, 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); +int X509_VERIFY_PARAM_get_auth_level(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); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +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/android/arm64-v8a/include/openssl/x509v3.h b/android/arm64-v8a/include/openssl/x509v3.h new file mode 100644 index 00000000..f21ce7c1 --- /dev/null +++ b/android/arm64-v8a/include/openssl/x509v3.h @@ -0,0 +1,1005 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3_H +# define HEADER_X509V3_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#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, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const 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 +# define X509V3_CTX_REPLACE 0x2 + 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; + +DEFINE_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 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; + +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; + +DEFINE_STACK_OF(GENERAL_NAME) +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; +DEFINE_STACK_OF(GENERAL_NAMES) + +DEFINE_STACK_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; + +DEFINE_STACK_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; + +DEFINE_STACK_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; + +DEFINE_STACK_OF(POLICYQUALINFO) + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +DEFINE_STACK_OF(POLICYINFO) + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +DEFINE_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; + +DEFINE_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 + +DEFINE_STACK_OF(X509_PURPOSE) + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const 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); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +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, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +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); +int NAME_CONSTRAINTS_check_CN(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, + const 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, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const 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, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const 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, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const 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(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +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); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +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); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const 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); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const 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), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const 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 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * 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 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); +DEFINE_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; +DEFINE_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; +DEFINE_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; +DEFINE_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 X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_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. + */ + +int ERR_load_X509V3_strings(void); + +/* Error codes for the X509V3 functions. */ + +/* Function codes. */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 +# 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_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# 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_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# 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_V2I_TLS_FEATURE 165 +# 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_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_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_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_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_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/android/arm64-v8a/include/websockets/libwebsockets.h b/android/arm64-v8a/include/websockets/libwebsockets.h index 763775a7..7efeba1f 100644 --- a/android/arm64-v8a/include/websockets/libwebsockets.h +++ b/android/arm64-v8a/include/websockets/libwebsockets.h @@ -19,6 +19,8 @@ * MA 02110-1301 USA */ +/** @file */ + #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C @@ -76,13 +78,13 @@ public: &lws_conn_listener::onError)); } - void start(const uint16_t port); + void start(const uint16_t port); /**< start listening */ protected: - void onRX(Socket *s); - void onError(Socket *s, socket_error_t err); - void onIncoming(TCPListener *s, void *impl); - void onDisconnect(TCPStream *s); + void onRX(Socket *s); /**< incoming data ready */ + void onError(Socket *s, socket_error_t err); /**< if error occurs */ + void onIncoming(TCPListener *s, void *impl); /**< new connection */ + void onDisconnect(TCPStream *s); /**< disconnection */ public: TCPListener srv; @@ -95,7 +97,7 @@ extern "C" { #include #endif -#ifdef MBED_OPERATORS +#if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266) struct sockaddr_in; #define LWS_POSIX 0 #else @@ -112,7 +114,6 @@ struct sockaddr_in; #include #include #include -#include #include #ifndef _WIN32_WCE #include @@ -121,7 +122,8 @@ struct sockaddr_in; #define O_RDONLY _O_RDONLY #endif -#ifdef _WIN32_WCE +// Visual studio older than 2015 and WIN_CE has only _stricmp +#if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) #define strcasecmp _stricmp #else #define strcasecmp stricmp @@ -146,7 +148,13 @@ struct sockaddr_in; #define LWS_INVALID_FILE INVALID_HANDLE_VALUE #define LWS_O_RDONLY _O_RDONLY -#define snprintf _snprintf +#if !defined(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in */ +#define lws_snprintf _snprintf +#endif + +#ifndef __func__ +#define __func__ __FUNCTION__ +#endif #else /* NOT WIN32 */ #include @@ -158,7 +166,7 @@ struct sockaddr_in; #define LWS_INLINE inline #define LWS_O_RDONLY O_RDONLY -#ifndef MBED_OPERATORS +#if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) #include #include #define LWS_INVALID_FILE -1 @@ -196,6 +204,9 @@ struct sockaddr_in; #endif /* LWS_USE_LIBEV */ #ifdef LWS_USE_LIBUV #include +#ifdef LWS_HAVE_UV_VERSION_H +#include +#endif #endif /* LWS_USE_LIBUV */ #ifndef LWS_EXTERN @@ -210,19 +221,51 @@ struct sockaddr_in; #endif #ifdef LWS_OPENSSL_SUPPORT + #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL #include +#include #else #include +#include #endif /* not USE_OLD_CYASSL */ #else +#if defined(LWS_USE_POLARSSL) +#include +struct lws_polarssl_context { + x509_crt ca; /**< ca */ + x509_crt certificate; /**< cert */ + rsa_context key; /**< key */ +}; +typedef struct lws_polarssl_context SSL_CTX; +typedef ssl_context SSL; +#else +#if defined(LWS_USE_MBEDTLS) +#include +#else #include +#include +#endif /* not USE_MBEDTLS */ +#endif /* not USE_POLARSSL */ #endif /* not USE_WOLFSSL */ #endif + #define CONTEXT_PORT_NO_LISTEN -1 +/** \defgroup log Logging + * + * ##Logging + * + * Lws provides flexible and filterable logging facilities, which can be + * used inside lws and in user code. + * + * Log categories may be individually filtered bitwise, and directed to built-in + * sinks for syslog-compatible logging, or a user-defined function. + */ +///@{ + enum lws_log_levels { LLL_ERR = 1 << 0, LLL_WARN = 1 << 1, @@ -240,18 +283,42 @@ enum lws_log_levels { LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...); LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl); +/** + * lwsl_timestamp: generate logging timestamp string + * + * \param level: logging level + * \param p: char * buffer to take timestamp + * \param len: length of p + * + * returns length written in p + */ +LWS_VISIBLE LWS_EXTERN int +lwsl_timestamp(int level, char *p, int len); -/* notice, warn and log are always compiled in */ -#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) -#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) + +#if !defined(LWS_WITH_NO_LOGS) +/* notice, warn and log are always compiled in */ +#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) +#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) +#endif /* * weaker logging can be deselected at configure time using --disable-debug * that gets rid of the overhead of checking while keeping _warn and _err * active */ -#ifdef _DEBUG +#if defined(LWS_WITH_ESP8266) +#undef _DEBUG +#endif + +#ifdef _DEBUG +#if defined(LWS_WITH_NO_LOGS) +/* notice, warn and log are always compiled in */ +//#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) +#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) +#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) +#endif #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) @@ -259,22 +326,71 @@ LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) +/** + * lwsl_hexdump() - helper to hexdump a buffer (DEBUG builds only) + * + * \param buf: buffer start to dump + * \param len: length of buffer to dump + */ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len); #else /* no debug */ - -#define lwsl_info(...) {} -#define lwsl_debug(...) {} -#define lwsl_parser(...) {} -#define lwsl_header(...) {} -#define lwsl_ext(...) {} -#define lwsl_client(...) {} -#define lwsl_latency(...) {} +#if defined(LWS_WITH_NO_LOGS) +//#define lwsl_err(...) do {} while(0) +#define lwsl_warn(...) do {} while(0) +#define lwsl_notice(...) do {} while(0) +#endif +#define lwsl_info(...) do {} while(0) +#define lwsl_debug(...) do {} while(0) +#define lwsl_parser(...) do {} while(0) +#define lwsl_header(...) do {} while(0) +#define lwsl_ext(...) do {} while(0) +#define lwsl_client(...) do {} while(0) +#define lwsl_latency(...) do {} while(0) #define lwsl_hexdump(a, b) #endif + +/** + * lws_set_log_level() - Set the logging bitfield + * \param level: OR together the LLL_ debug contexts you want output from + * \param log_emit_function: NULL to leave it as it is, or a user-supplied + * function to perform log string emission instead of + * the default stderr one. + * + * log level defaults to "err", "warn" and "notice" contexts enabled and + * emission on stderr. + */ +LWS_VISIBLE LWS_EXTERN void +lws_set_log_level(int level, + void (*log_emit_function)(int level, const char *line)); + +/** + * lwsl_emit_syslog() - helper log emit function writes to system log + * + * \param level: one of LLL_ log level indexes + * \param line: log string + * + * You use this by passing the function pointer to lws_set_log_level(), to set + * it as the log emit function, it is not called directly. + */ +LWS_VISIBLE LWS_EXTERN void +lwsl_emit_syslog(int level, const char *line); + +///@} + + +#include + +#ifndef lws_container_of +#define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) +#endif + + struct lws; +#ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +#endif /* api change list for user code to test against */ @@ -292,90 +408,19 @@ struct lws; /* File operations stuff exists */ #define LWS_FEATURE_FOPS -/* - * NOTE: These public enums are part of the abi. If you want to add one, - * add it at where specified so existing users are unaffected. - */ -enum lws_context_options { - LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = (1 << 1), - LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = (1 << 2), - LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = (1 << 3), - LWS_SERVER_OPTION_LIBEV = (1 << 4), - LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5), - LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = (1 << 6), - LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = (1 << 7), - LWS_SERVER_OPTION_VALIDATE_UTF8 = (1 << 8), - LWS_SERVER_OPTION_SSL_ECDH = (1 << 9), - LWS_SERVER_OPTION_LIBUV = (1 << 10), - - /****** add new things just above ---^ ******/ -}; - -/* - * NOTE: These public enums are part of the abi. If you want to add one, - * add it at where specified so existing users are unaffected. - */ -enum lws_callback_reasons { - LWS_CALLBACK_ESTABLISHED = 0, - LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, - LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, - LWS_CALLBACK_CLIENT_ESTABLISHED = 3, - LWS_CALLBACK_CLOSED = 4, - LWS_CALLBACK_CLOSED_HTTP = 5, - LWS_CALLBACK_RECEIVE = 6, - LWS_CALLBACK_RECEIVE_PONG = 7, - LWS_CALLBACK_CLIENT_RECEIVE = 8, - LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, - LWS_CALLBACK_CLIENT_WRITEABLE = 10, - LWS_CALLBACK_SERVER_WRITEABLE = 11, - LWS_CALLBACK_HTTP = 12, - LWS_CALLBACK_HTTP_BODY = 13, - LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, - LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, - LWS_CALLBACK_HTTP_WRITEABLE = 16, - LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, - LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, - LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, - LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, - LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, - LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, - LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, - LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, - LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, - LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, - LWS_CALLBACK_PROTOCOL_INIT = 27, - LWS_CALLBACK_PROTOCOL_DESTROY = 28, - LWS_CALLBACK_WSI_CREATE /* always protocol[0] */ = 29, - LWS_CALLBACK_WSI_DESTROY /* always protocol[0] */ = 30, - LWS_CALLBACK_GET_THREAD_ID = 31, - - /* external poll() management support */ - LWS_CALLBACK_ADD_POLL_FD = 32, - LWS_CALLBACK_DEL_POLL_FD = 33, - LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, - LWS_CALLBACK_LOCK_POLL = 35, - LWS_CALLBACK_UNLOCK_POLL = 36, - - LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY = 37, - LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, - - LWS_CALLBACK_WS_EXT_DEFAULTS = 39, - - /****** add new things just above ---^ ******/ - - LWS_CALLBACK_USER = 1000, /* user code can use any including / above */ -}; - #if defined(_WIN32) typedef SOCKET lws_sockfd_type; typedef HANDLE lws_filefd_type; #define lws_sockfd_valid(sfd) (!!sfd) struct lws_pollfd { - lws_sockfd_type fd; - SHORT events; - SHORT revents; + lws_sockfd_type fd; /**< file descriptor */ + SHORT events; /**< which events to respond to */ + SHORT revents; /**< which events happened */ }; +#define LWS_POLLHUP (FD_CLOSE) +#define LWS_POLLIN (FD_READ | FD_ACCEPT) +#define LWS_POLLOUT (FD_WRITE) #else #if defined(MBED_OPERATORS) @@ -384,9 +429,9 @@ typedef void * lws_sockfd_type; typedef void * lws_filefd_type; #define lws_sockfd_valid(sfd) (!!sfd) struct pollfd { - lws_sockfd_type fd; - short events; - short revents; + lws_sockfd_type fd; /**< fd related to */ + short events; /**< which POLL... events to respond to */ + short revents; /**< which POLL... events occurred */ }; #define POLLIN 0x0001 #define POLLPRI 0x0002 @@ -401,53 +446,615 @@ void * mbed3_create_tcp_stream_socket(void); void mbed3_delete_tcp_stream_socket(void *sockfd); void mbed3_tcp_stream_bind(void *sock, int port, struct lws *); void mbed3_tcp_stream_accept(void *sock, struct lws *); +#else +#if defined(LWS_WITH_ESP8266) + +#include +#include + +typedef struct espconn * lws_sockfd_type; +typedef void * lws_filefd_type; +#define lws_sockfd_valid(sfd) (!!sfd) +struct pollfd { + lws_sockfd_type fd; /**< fd related to */ + short events; /**< which POLL... events to respond to */ + short revents; /**< which POLL... events occurred */ +}; +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +struct lws_vhost; + +lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh); +void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi); + +#include +#include +#include "ets_sys.h" + +int ets_snprintf(char *str, size_t size, const char *format, ...); +#define snprintf ets_snprintf + +typedef os_timer_t uv_timer_t; +typedef void uv_cb_t(uv_timer_t *); + +void os_timer_disarm(void *); +void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *); + +void ets_timer_arm_new(os_timer_t *, int, int, int); + +//void os_timer_arm(os_timer_t *, int, int); + +#define UV_VERSION_MAJOR 1 + +#define lws_uv_getloop(a, b) (NULL) + +static inline void uv_timer_init(void *l, uv_timer_t *t) +{ + (void)l; + memset(t, 0, sizeof(*t)); + os_timer_disarm(t); +} + +static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep) +{ + os_timer_setfn(t, (os_timer_func_t *)cb, t); + /* ms, repeat */ + os_timer_arm(t, first, !!rep); +} + +static inline void uv_timer_stop(uv_timer_t *t) +{ + os_timer_disarm(t); +} + #else typedef int lws_sockfd_type; typedef int lws_filefd_type; #define lws_sockfd_valid(sfd) (sfd >= 0) #endif - -#define lws_pollfd pollfd #endif -/* argument structure for all external poll related calls - * passed in via 'in' - */ +#define lws_pollfd pollfd +#define LWS_POLLHUP (POLLHUP|POLLERR) +#define LWS_POLLIN (POLLIN) +#define LWS_POLLOUT (POLLOUT) +#endif + +/** struct lws_pollargs - argument structure for all external poll related calls + * passed in via 'in' */ struct lws_pollargs { - lws_sockfd_type fd; /* applicable socket descriptor */ - int events; /* the new event mask */ - int prev_events; /* the previous event mask */ + lws_sockfd_type fd; /**< applicable socket descriptor */ + int events; /**< the new event mask */ + int prev_events; /**< the previous event mask */ +}; + +struct lws_tokens; +struct lws_token_limits; + +/*! \defgroup wsclose Websocket Close + * + * ##Websocket close frame control + * + * When we close a ws connection, we can send a reason code and a short + * UTF-8 description back with the close packet. + */ +///@{ + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +/** enum lws_close_status - RFC6455 close status codes */ +enum lws_close_status { + LWS_CLOSE_STATUS_NOSTATUS = 0, + LWS_CLOSE_STATUS_NORMAL = 1000, + /**< 1000 indicates a normal closure, meaning that the purpose for + which the connection was established has been fulfilled. */ + LWS_CLOSE_STATUS_GOINGAWAY = 1001, + /**< 1001 indicates that an endpoint is "going away", such as a server + going down or a browser having navigated away from a page. */ + LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, + /**< 1002 indicates that an endpoint is terminating the connection due + to a protocol error. */ + LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, + /**< 1003 indicates that an endpoint is terminating the connection + because it has received a type of data it cannot accept (e.g., an + endpoint that understands only text data MAY send this if it + receives a binary message). */ + LWS_CLOSE_STATUS_RESERVED = 1004, + /**< Reserved. The specific meaning might be defined in the future. */ + LWS_CLOSE_STATUS_NO_STATUS = 1005, + /**< 1005 is a reserved value and MUST NOT be set as a status code in a + Close control frame by an endpoint. It is designated for use in + applications expecting a status code to indicate that no status + code was actually present. */ + LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, + /**< 1006 is a reserved value and MUST NOT be set as a status code in a + Close control frame by an endpoint. It is designated for use in + applications expecting a status code to indicate that the + connection was closed abnormally, e.g., without sending or + receiving a Close control frame. */ + LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, + /**< 1007 indicates that an endpoint is terminating the connection + because it has received data within a message that was not + consistent with the type of the message (e.g., non-UTF-8 [RFC3629] + data within a text message). */ + LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, + /**< 1008 indicates that an endpoint is terminating the connection + because it has received a message that violates its policy. This + is a generic status code that can be returned when there is no + other more suitable status code (e.g., 1003 or 1009) or if there + is a need to hide specific details about the policy. */ + LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, + /**< 1009 indicates that an endpoint is terminating the connection + because it has received a message that is too big for it to + process. */ + LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, + /**< 1010 indicates that an endpoint (client) is terminating the + connection because it has expected the server to negotiate one or + more extension, but the server didn't return them in the response + message of the WebSocket handshake. The list of extensions that + are needed SHOULD appear in the /reason/ part of the Close frame. + Note that this status code is not used by the server, because it + can fail the WebSocket handshake instead */ + LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, + /**< 1011 indicates that a server is terminating the connection because + it encountered an unexpected condition that prevented it from + fulfilling the request. */ + LWS_CLOSE_STATUS_TLS_FAILURE = 1015, + /**< 1015 is a reserved value and MUST NOT be set as a status code in a + Close control frame by an endpoint. It is designated for use in + applications expecting a status code to indicate that the + connection was closed due to a failure to perform a TLS handshake + (e.g., the server certificate can't be verified). */ + + /****** add new things just above ---^ ******/ + + LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, }; /** - * struct lws_plat_file_ops - Platform-specific file operations + * lws_close_reason - Set reason and aux data to send with Close packet + * If you are going to return nonzero from the callback + * requesting the connection to close, you can optionally + * call this to set the reason the peer will be told if + * possible. * - * These provide platform-agnostic ways to deal with filesystem access in the - * library and in the user code. - * - * @open: Open file (always binary access if plat supports it) - * filelen is filled on exit to be the length of the file - * flags should be set to O_RDONLY or O_RDWR - * @close: Close file - * @seek_cur: Seek from current position - * @read: Read fron file *amount is set on exit to amount read - * @write: Write to file *amount is set on exit as amount written + * \param wsi: The websocket connection to set the close reason on + * \param status: A valid close status from websocket standard + * \param buf: NULL or buffer containing up to 124 bytes of auxiliary data + * \param len: Length of data in \param buf to send */ -struct lws_plat_file_ops { - lws_filefd_type (*open)(struct lws *wsi, const char *filename, - unsigned long *filelen, int flags); - int (*close)(struct lws *wsi, lws_filefd_type fd); - unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd, - long offset_from_cur_pos); - int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, - unsigned char *buf, unsigned long len); - int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, - unsigned char *buf, unsigned long len); +LWS_VISIBLE LWS_EXTERN void +lws_close_reason(struct lws *wsi, enum lws_close_status status, + unsigned char *buf, size_t len); - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ +///@} + +struct lws; +struct lws_context; +/* needed even with extensions disabled for create context */ +struct lws_extension; + +/*! \defgroup usercb User Callback + * + * ##User protocol callback + * + * The protocol callback is the primary way lws interacts with + * user code. For one of a list of a few dozen reasons the callback gets + * called at some event to be handled. + * + * All of the events can be ignored, returning 0 is taken as "OK" and returning + * nonzero in most cases indicates that the connection should be closed. + */ +///@{ + + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +/** enum lws_callback_reasons - reason you're getting a protocol callback */ +enum lws_callback_reasons { + LWS_CALLBACK_ESTABLISHED = 0, + /**< (VH) after the server completes a handshake with an incoming + * client. If you built the library with ssl support, in is a + * pointer to the ssl struct associated with the connection or NULL.*/ + LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, + /**< the request client connection has been unable to complete a + * handshake with the remote server. If in is non-NULL, you can + * find an error string of length len where it points to + * + * Diagnostic strings that may be returned include + * + * "getaddrinfo (ipv6) failed" + * "unknown address family" + * "getaddrinfo (ipv4) failed" + * "set socket opts failed" + * "insert wsi failed" + * "lws_ssl_client_connect1 failed" + * "lws_ssl_client_connect2 failed" + * "Peer hung up" + * "read failed" + * "HS: URI missing" + * "HS: Redirect code but no Location" + * "HS: URI did not parse" + * "HS: Redirect failed" + * "HS: Server did not return 200" + * "HS: OOM" + * "HS: disallowed by client filter" + * "HS: disallowed at ESTABLISHED" + * "HS: ACCEPT missing" + * "HS: ws upgrade response not 101" + * "HS: UPGRADE missing" + * "HS: Upgrade to something other than websocket" + * "HS: CONNECTION missing" + * "HS: UPGRADE malformed" + * "HS: PROTOCOL malformed" + * "HS: Cannot match protocol" + * "HS: EXT: list too big" + * "HS: EXT: failed setting defaults" + * "HS: EXT: failed parsing defaults" + * "HS: EXT: failed parsing options" + * "HS: EXT: Rejects server options" + * "HS: EXT: unknown ext" + * "HS: Accept hash wrong" + * "HS: Rejected by filter cb" + * "HS: OOM" + * "HS: SO_SNDBUF failed" + * "HS: Rejected at CLIENT_ESTABLISHED" + */ + LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, + /**< this is the last chance for the client user code to examine the + * http headers and decide to reject the connection. If the + * content in the headers is interesting to the + * client (url, etc) it needs to copy it out at + * this point since it will be destroyed before + * the CLIENT_ESTABLISHED call */ + LWS_CALLBACK_CLIENT_ESTABLISHED = 3, + /**< after your client connection completed + * a handshake with the remote server */ + LWS_CALLBACK_CLOSED = 4, + /**< when the websocket session ends */ + LWS_CALLBACK_CLOSED_HTTP = 5, + /**< when a HTTP (non-websocket) session ends */ + LWS_CALLBACK_RECEIVE = 6, + /**< data has appeared for this server endpoint from a + * remote client, it can be found at *in and is + * len bytes long */ + LWS_CALLBACK_RECEIVE_PONG = 7, + /**< servers receive PONG packets with this callback reason */ + LWS_CALLBACK_CLIENT_RECEIVE = 8, + /**< data has appeared from the server for the client connection, it + * can be found at *in and is len bytes long */ + LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, + /**< clients receive PONG packets with this callback reason */ + LWS_CALLBACK_CLIENT_WRITEABLE = 10, + /**< If you call lws_callback_on_writable() on a connection, you will + * get one of these callbacks coming when the connection socket + * is able to accept another write packet without blocking. + * If it already was able to take another packet without blocking, + * you'll get this callback at the next call to the service loop + * function. Notice that CLIENTs get LWS_CALLBACK_CLIENT_WRITEABLE + * and servers get LWS_CALLBACK_SERVER_WRITEABLE. */ + LWS_CALLBACK_SERVER_WRITEABLE = 11, + /**< See LWS_CALLBACK_CLIENT_WRITEABLE */ + LWS_CALLBACK_HTTP = 12, + /**< an http request has come from a client that is not + * asking to upgrade the connection to a websocket + * one. This is a chance to serve http content, + * for example, to send a script to the client + * which will then open the websockets connection. + * in points to the URI path requested and + * lws_serve_http_file() makes it very + * simple to send back a file to the client. + * Normally after sending the file you are done + * with the http connection, since the rest of the + * activity will come by websockets from the script + * that was delivered by http, so you will want to + * return 1; to close and free up the connection. */ + LWS_CALLBACK_HTTP_BODY = 13, + /**< the next len bytes data from the http + * request body HTTP connection is now available in in. */ + LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, + /**< the expected amount of http request body has been delivered */ + LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, + /**< a file requested to be sent down http link has completed. */ + LWS_CALLBACK_HTTP_WRITEABLE = 16, + /**< you can write more down the http protocol link now. */ + LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, + /**< called when a client connects to + * the server at network level; the connection is accepted but then + * passed to this callback to decide whether to hang up immediately + * or not, based on the client IP. in contains the connection + * socket's descriptor. Since the client connection information is + * not available yet, wsi still pointing to the main server socket. + * Return non-zero to terminate the connection before sending or + * receiving anything. Because this happens immediately after the + * network connection from the client, there's no websocket protocol + * selected yet so this callback is issued only to protocol 0. */ + LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, + /**< called when the request has + * been received and parsed from the client, but the response is + * not sent yet. Return non-zero to disallow the connection. + * user is a pointer to the connection user space allocation, + * in is the URI, eg, "/" + * In your handler you can use the public APIs + * lws_hdr_total_length() / lws_hdr_copy() to access all of the + * headers using the header enums lws_token_indexes from + * libwebsockets.h to check for and read the supported header + * presence and content before deciding to allow the http + * connection to proceed or to kill the connection. */ + LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, + /**< A new client just had + * been connected, accepted, and instantiated into the pool. This + * callback allows setting any relevant property to it. Because this + * happens immediately after the instantiation of a new client, + * there's no websocket protocol selected yet so this callback is + * issued only to protocol 0. Only wsi is defined, pointing to the + * new client, and the return value is ignored. */ + LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, + /**< called when the handshake has + * been received and parsed from the client, but the response is + * not sent yet. Return non-zero to disallow the connection. + * user is a pointer to the connection user space allocation, + * in is the requested protocol name + * In your handler you can use the public APIs + * lws_hdr_total_length() / lws_hdr_copy() to access all of the + * headers using the header enums lws_token_indexes from + * libwebsockets.h to check for and read the supported header + * presence and content before deciding to allow the handshake + * to proceed or to kill the connection. */ + LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, + /**< if configured for + * including OpenSSL support, this callback allows your user code + * to perform extra SSL_CTX_load_verify_locations() or similar + * calls to direct OpenSSL where to find certificates the client + * can use to confirm the remote server identity. user is the + * OpenSSL SSL_CTX* */ + LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, + /**< if configured for + * including OpenSSL support, this callback allows your user code + * to load extra certifcates into the server which allow it to + * verify the validity of certificates returned by clients. user + * is the server's OpenSSL SSL_CTX* */ + LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, + /**< if the libwebsockets vhost was created with the option + * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this + * callback is generated during OpenSSL verification of the cert + * sent from the client. It is sent to protocol[0] callback as + * no protocol has been negotiated on the connection yet. + * Notice that the libwebsockets context and wsi are both NULL + * during this callback. See + * http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html + * to understand more detail about the OpenSSL callback that + * generates this libwebsockets callback and the meanings of the + * arguments passed. In this callback, user is the x509_ctx, + * in is the ssl pointer and len is preverify_ok + * Notice that this callback maintains libwebsocket return + * conventions, return 0 to mean the cert is OK or 1 to fail it. + * This also means that if you don't handle this callback then + * the default callback action of returning 0 allows the client + * certificates. */ + LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, + /**< this callback happens + * when a client handshake is being compiled. user is NULL, + * in is a char **, it's pointing to a char * which holds the + * next location in the header buffer where you can add + * headers, and len is the remaining space in the header buffer, + * which is typically some hundreds of bytes. So, to add a canned + * cookie, your handler code might look similar to: + * + * char **p = (char **)in; + * + * if (len < 100) + * return 1; + * + * *p += sprintf(*p, "Cookie: a=b\x0d\x0a"); + * + * return 0; + * + * Notice if you add anything, you just have to take care about + * the CRLF on the line you added. Obviously this callback is + * optional, if you don't handle it everything is fine. + * + * Notice the callback is coming to protocols[0] all the time, + * because there is no specific protocol negotiated yet. */ + LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, + /**< When the server handshake code + * sees that it does support a requested extension, before + * accepting the extension by additing to the list sent back to + * the client it gives this callback just to check that it's okay + * to use that extension. It calls back to the requested protocol + * and with in being the extension name, len is 0 and user is + * valid. Note though at this time the ESTABLISHED callback hasn't + * happened yet so if you initialize user content there, user + * content during this callback might not be useful for anything. + * Notice this callback comes to protocols[0]. */ + LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, + /**< When a client + * connection is being prepared to start a handshake to a server, + * each supported extension is checked with protocols[0] callback + * with this reason, giving the user code a chance to suppress the + * claim to support that extension by returning non-zero. If + * unhandled, by default 0 will be returned and the extension + * support included in the header to the server. Notice this + * callback comes to protocols[0]. */ + LWS_CALLBACK_PROTOCOL_INIT = 27, + /**< One-time call per protocol, per-vhost using it, so it can + * do initial setup / allocations etc */ + LWS_CALLBACK_PROTOCOL_DESTROY = 28, + /**< One-time call per protocol, per-vhost using it, indicating + * this protocol won't get used at all after this callback, the + * vhost is getting destroyed. Take the opportunity to + * deallocate everything that was allocated by the protocol. */ + LWS_CALLBACK_WSI_CREATE = 29, + /**< outermost (earliest) wsi create notification to protocols[0] */ + LWS_CALLBACK_WSI_DESTROY = 30, + /**< outermost (latest) wsi destroy notification to protocols[0] */ + LWS_CALLBACK_GET_THREAD_ID = 31, + /**< lws can accept callback when writable requests from other + * threads, if you implement this callback and return an opaque + * current thread ID integer. */ + + /* external poll() management support */ + LWS_CALLBACK_ADD_POLL_FD = 32, + /**< lws normally deals with its poll() or other event loop + * internally, but in the case you are integrating with another + * server you will need to have lws sockets share a + * polling array with the other server. This and the other + * POLL_FD related callbacks let you put your specialized + * poll array interface code in the callback for protocol 0, the + * first protocol you support, usually the HTTP protocol in the + * serving case. + * This callback happens when a socket needs to be + * added to the polling loop: in points to a struct + * lws_pollargs; the fd member of the struct is the file + * descriptor, and events contains the active events + * + * If you are using the internal lws polling / event loop + * you can just ignore these callbacks. */ + LWS_CALLBACK_DEL_POLL_FD = 33, + /**< This callback happens when a socket descriptor + * needs to be removed from an external polling array. in is + * again the struct lws_pollargs containing the fd member + * to be removed. If you are using the internal polling + * loop, you can just ignore it. */ + LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, + /**< This callback happens when lws wants to modify the events for + * a connection. + * in is the struct lws_pollargs with the fd to change. + * The new event mask is in events member and the old mask is in + * the prev_events member. + * If you are using the internal polling loop, you can just ignore + * it. */ + LWS_CALLBACK_LOCK_POLL = 35, + /**< These allow the external poll changes driven + * by lws to participate in an external thread locking + * scheme around the changes, so the whole thing is threadsafe. + * These are called around three activities in the library, + * - inserting a new wsi in the wsi / fd table (len=1) + * - deleting a wsi from the wsi / fd table (len=1) + * - changing a wsi's POLLIN/OUT state (len=0) + * Locking and unlocking external synchronization objects when + * len == 1 allows external threads to be synchronized against + * wsi lifecycle changes if it acquires the same lock for the + * duration of wsi dereference from the other thread context. */ + LWS_CALLBACK_UNLOCK_POLL = 36, + /**< See LWS_CALLBACK_LOCK_POLL, ignore if using lws internal poll */ + + LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY = 37, + /**< if configured for including OpenSSL support but no private key + * file has been specified (ssl_private_key_filepath is NULL), this is + * called to allow the user to set the private key directly via + * libopenssl and perform further operations if required; this might be + * useful in situations where the private key is not directly accessible + * by the OS, for example if it is stored on a smartcard. + * user is the server's OpenSSL SSL_CTX* */ + LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, + /**< The peer has sent an unsolicited Close WS packet. in and + * len are the optional close code (first 2 bytes, network + * order) and the optional additional information which is not + * defined in the standard, and may be a string or non-human- readable data. + * If you return 0 lws will echo the close and then close the + * connection. If you return nonzero lws will just close the + * connection. */ + + LWS_CALLBACK_WS_EXT_DEFAULTS = 39, + /**< */ + + LWS_CALLBACK_CGI = 40, + /**< */ + LWS_CALLBACK_CGI_TERMINATED = 41, + /**< */ + LWS_CALLBACK_CGI_STDIN_DATA = 42, + /**< */ + LWS_CALLBACK_CGI_STDIN_COMPLETED = 43, + /**< */ + LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, + /**< */ + LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, + /**< */ + LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, + /**< */ + LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, + /**< */ + LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48, + /**< */ + LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49, + /**< */ + LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50, + /**< */ + LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51, + /**< */ + LWS_CALLBACK_PROCESS_HTML = 52, + /**< */ + LWS_CALLBACK_ADD_HEADERS = 53, + /**< */ + LWS_CALLBACK_SESSION_INFO = 54, + /**< */ + + LWS_CALLBACK_GS_EVENT = 55, + /**< */ + LWS_CALLBACK_HTTP_PMO = 56, + /**< per-mount options for this connection, called before + * the normal LWS_CALLBACK_HTTP when the mount has per-mount + * options + */ + LWS_CALLBACK_CLIENT_HTTP_WRITEABLE = 57, + /**< when doing an HTTP type client connection, you can call + * lws_client_http_body_pending(wsi, 1) from + * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER to get these callbacks + * sending the HTTP headers. + * + * From this callback, when you have sent everything, you should let + * lws know by calling lws_client_http_body_pending(wsi, 0) + */ + + /****** add new things just above ---^ ******/ + + LWS_CALLBACK_USER = 1000, + /**< user code can use any including / above without fear of clashes */ }; + + +/** + * typedef lws_callback_function() - User server actions + * \param wsi: Opaque websocket instance pointer + * \param reason: The reason for the call + * \param user: Pointer to per-session user data allocated by library + * \param in: Pointer used for some callback reasons + * \param len: Length set for some callback reasons + * + * This callback is the way the user controls what is served. All the + * protocol detail is hidden and handled by the library. + * + * For each connection / session there is user data allocated that is + * pointed to by "user". You set the size of this user data area when + * the library is initialized with lws_create_server. + */ +typedef int +lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, + void *user, void *in, size_t len); +///@} + +/*! \defgroup extensions + * + * ##Extension releated functions + * + * Ws defines optional extensions, lws provides the ability to implement these + * in user code if so desired. + * + * We provide one extensions permessage-deflate. + */ +///@{ + /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. @@ -479,59 +1086,1422 @@ enum lws_extension_callback_reasons { LWS_EXT_CB_OPTION_DEFAULT = 23, LWS_EXT_CB_OPTION_SET = 24, LWS_EXT_CB_OPTION_CONFIRM = 25, + LWS_EXT_CB_NAMED_OPTION_SET = 26, /****** add new things just above ---^ ******/ }; +/** enum lws_ext_options_types */ +enum lws_ext_options_types { + EXTARG_NONE, /**< does not take an argument */ + EXTARG_DEC, /**< requires a decimal argument */ + EXTARG_OPT_DEC /**< may have an optional decimal argument */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** struct lws_ext_options - Option arguments to the extension. These are + * used in the negotiation at ws upgrade time. + * The helper function lws_ext_parse_options() + * uses these to generate callbacks */ +struct lws_ext_options { + const char *name; /**< Option name, eg, "server_no_context_takeover" */ + enum lws_ext_options_types type; /**< What kind of args the option can take */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** struct lws_ext_option_arg */ +struct lws_ext_option_arg { + const char *option_name; /**< may be NULL, option_index used then */ + int option_index; /**< argument ordinal to use if option_name missing */ + const char *start; /**< value */ + int len; /**< length of value */ +}; + +/** + * typedef lws_extension_callback_function() - Hooks to allow extensions to operate + * \param context: Websockets context + * \param ext: This extension + * \param wsi: Opaque websocket instance pointer + * \param reason: The reason for the call + * \param user: Pointer to ptr to per-session user data allocated by library + * \param in: Pointer used for some callback reasons + * \param len: Length set for some callback reasons + * + * Each extension that is active on a particular connection receives + * callbacks during the connection lifetime to allow the extension to + * operate on websocket data and manage itself. + * + * Libwebsockets takes care of allocating and freeing "user" memory for + * each active extension on each connection. That is what is pointed to + * by the user parameter. + * + * LWS_EXT_CB_CONSTRUCT: called when the server has decided to + * select this extension from the list provided by the client, + * just before the server will send back the handshake accepting + * the connection with this extension active. This gives the + * extension a chance to initialize its connection context found + * in user. + * + * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT + * but called when client is instantiating this extension. Some + * extensions will work the same on client and server side and then + * you can just merge handlers for both CONSTRUCTS. + * + * LWS_EXT_CB_DESTROY: called when the connection the extension was + * being used on is about to be closed and deallocated. It's the + * last chance for the extension to deallocate anything it has + * allocated in the user data (pointed to by user) before the + * user data is deleted. This same callback is used whether you + * are in client or server instantiation context. + * + * LWS_EXT_CB_PACKET_RX_PREPARSE: when this extension was active on + * a connection, and a packet of data arrived at the connection, + * it is passed to this callback to give the extension a chance to + * change the data, eg, decompress it. user is pointing to the + * extension's private connection context data, in is pointing + * to an lws_tokens struct, it consists of a char * pointer called + * token, and an int called token_len. At entry, these are + * set to point to the received buffer and set to the content + * length. If the extension will grow the content, it should use + * a new buffer allocated in its private user context data and + * set the pointed-to lws_tokens members to point to its buffer. + * + * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as + * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the + * extension a chance to change websocket data just before it will + * be sent out. Using the same lws_token pointer scheme in in, + * the extension can change the buffer and the length to be + * transmitted how it likes. Again if it wants to grow the + * buffer safely, it should copy the data into its own buffer and + * set the lws_tokens token pointer to it. + * + * LWS_EXT_CB_ARGS_VALIDATE: + */ +typedef int +lws_extension_callback_function(struct lws_context *context, + const struct lws_extension *ext, struct lws *wsi, + enum lws_extension_callback_reasons reason, + void *user, void *in, size_t len); + +/** struct lws_extension - An extension we support */ +struct lws_extension { + const char *name; /**< Formal extension name, eg, "permessage-deflate" */ + lws_extension_callback_function *callback; /**< Service callback */ + const char *client_offer; /**< String containing exts and options client offers */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** + * lws_set_extension_option(): set extension option if possible + * + * \param wsi: websocket connection + * \param ext_name: name of ext, like "permessage-deflate" + * \param opt_name: name of option, like "rx_buf_size" + * \param opt_val: value to set option to + */ +LWS_VISIBLE LWS_EXTERN int +lws_set_extension_option(struct lws *wsi, const char *ext_name, + const char *opt_name, const char *opt_val); + +#ifndef LWS_NO_EXTENSIONS +/* lws_get_internal_extensions() - DEPRECATED + * + * \Deprecated There is no longer a set internal extensions table. The table is provided + * by user code along with application-specific settings. See the test + * client and server for how to do. + */ +static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension * +lws_get_internal_extensions() { return NULL; } + +/** + * lws_ext_parse_options() - deal with parsing negotiated extension options + * + * \param ext: related extension struct + * \param wsi: websocket connection + * \param ext_user: per-connection extension private data + * \param opts: list of supported options + * \param o: option string to parse + * \param len: length + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, + void *ext_user, const struct lws_ext_options *opts, + const char *o, int len); +#endif + +/** lws_extension_callback_pm_deflate() - extension for RFC7692 + * + * \param context: lws context + * \param ext: related lws_extension struct + * \param wsi: websocket connection + * \param reason: incoming callback reason + * \param user: per-connection extension private data + * \param in: pointer parameter + * \param len: length parameter + * + * Built-in callback implementing RFC7692 permessage-deflate + */ +LWS_EXTERN +int lws_extension_callback_pm_deflate( + struct lws_context *context, const struct lws_extension *ext, + struct lws *wsi, enum lws_extension_callback_reasons reason, + void *user, void *in, size_t len); + +/* + * The internal exts are part of the public abi + * If we add more extensions, publish the callback here ------v + */ +///@} + +/*! \defgroup Protocols-and-Plugins Protocols and Plugins + * \ingroup lwsapi + * + * ##Protocol and protocol plugin -related apis + * + * Protocols bind ws protocol names to a custom callback specific to that + * protocol implementaion. + * + * A list of protocols can be passed in at context creation time, but it is + * also legal to leave that NULL and add the protocols and their callback code + * using plugins. + * + * Plugins are much preferable compared to cut and pasting code into an + * application each time, since they can be used standalone. + */ +///@{ +/** struct lws_protocols - List of protocols and handlers client or server + * supports. */ + +struct lws_protocols { + const char *name; + /**< Protocol name that must match the one given in the client + * Javascript new WebSocket(url, 'protocol') name. */ + lws_callback_function *callback; + /**< The service callback used for this protocol. It allows the + * service action for an entire protocol to be encapsulated in + * the protocol-specific callback */ + size_t per_session_data_size; + /**< Each new connection using this protocol gets + * this much memory allocated on connection establishment and + * freed on connection takedown. A pointer to this per-connection + * allocation is passed into the callback in the 'user' parameter */ + size_t rx_buffer_size; + /**< lws allocates this much space for rx data and informs callback + * when something came. Due to rx flow control, the callback may not + * be able to consume it all without having to return to the event + * loop. That is supported in lws. + * + * This also controls how much may be sent at once at the moment, + * although this is likely to change. + */ + unsigned int id; + /**< ignored by lws, but useful to contain user information bound + * to the selected protocol. For example if this protocol was + * called "myprotocol-v2", you might set id to 2, and the user + * code that acts differently according to the version can do so by + * switch (wsi->protocol->id), user code might use some bits as + * capability flags based on selected protocol version, etc. */ + void *user; /**< ignored by lws, but user code can pass a pointer + here it can later access from the protocol callback */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +struct lws_vhost; + +/** + * lws_vhost_name_to_protocol() - get vhost's protocol object from its name + * + * \param vh: vhost to search + * \param name: protocol name + * + * Returns NULL or a pointer to the vhost's protocol of the requested name + */ +LWS_VISIBLE LWS_EXTERN const struct lws_protocols * +lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name); + +/** + * lws_get_protocol() - Returns a protocol pointer from a websocket + * connection. + * \param wsi: pointer to struct websocket you want to know the protocol of + * + * + * Some apis can act on all live connections of a given protocol, + * this is how you can get a pointer to the active protocol if needed. + */ +LWS_VISIBLE LWS_EXTERN const struct lws_protocols * +lws_get_protocol(struct lws *wsi); + +/** lws_protocol_get() - deprecated: use lws_get_protocol */ +LWS_VISIBLE LWS_EXTERN const struct lws_protocols * +lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED; + +/** + * lws_protocol_vh_priv_zalloc() - Allocate and zero down a protocol's per-vhost + * storage + * \param vhost: vhost the instance is related to + * \param prot: protocol the instance is related to + * \param size: bytes to allocate + * + * Protocols often find it useful to allocate a per-vhost struct, this is a + * helper to be called in the per-vhost init LWS_CALLBACK_PROTOCOL_INIT + */ +LWS_VISIBLE LWS_EXTERN void * +lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, + int size); + +/** + * lws_protocol_vh_priv_get() - retreive a protocol's per-vhost storage + * + * \param vhost: vhost the instance is related to + * \param prot: protocol the instance is related to + * + * Recover a pointer to the allocated per-vhost storage for the protocol created + * by lws_protocol_vh_priv_zalloc() earlier + */ +LWS_VISIBLE LWS_EXTERN void * +lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot); + +/** + * lws_finalize_startup() - drop initial process privileges + * + * \param context: lws context + * + * This is called after the end of the vhost protocol initializations, but + * you may choose to call it earlier + */ +LWS_VISIBLE LWS_EXTERN int +lws_finalize_startup(struct lws_context *context); + +#ifdef LWS_WITH_PLUGINS + +/* PLUGINS implies LIBUV */ + +#define LWS_PLUGIN_API_MAGIC 180 + +/** struct lws_plugin_capability - how a plugin introduces itself to lws */ +struct lws_plugin_capability { + unsigned int api_magic; /**< caller fills this in, plugin fills rest */ + const struct lws_protocols *protocols; /**< array of supported protocols provided by plugin */ + int count_protocols; /**< how many protocols */ + const struct lws_extension *extensions; /**< array of extensions provided by plugin */ + int count_extensions; /**< how many extensions */ +}; + +typedef int (*lws_plugin_init_func)(struct lws_context *, + struct lws_plugin_capability *); +typedef int (*lws_plugin_destroy_func)(struct lws_context *); + +/** struct lws_plugin */ +struct lws_plugin { + struct lws_plugin *list; /**< linked list */ +#if (UV_VERSION_MAJOR > 0) + uv_lib_t lib; /**< shared library pointer */ +#else + void *l; /**< so we can compile on ancient libuv */ +#endif + char name[64]; /**< name of the plugin */ + struct lws_plugin_capability caps; /**< plugin capabilities */ +}; + +#endif + +///@} + + +/*! \defgroup generic-sessions plugin: generic-sessions + * \ingroup Protocols-and-Plugins + * + * ##Plugin Generic-sessions related + * + * generic-sessions plugin provides a reusable, generic session and login / + * register / forgot password framework including email verification. + */ +///@{ + +#define LWSGS_EMAIL_CONTENT_SIZE 16384 +/**< Maximum size of email we might send */ + +/* SHA-1 binary and hexified versions */ +/** typedef struct lwsgw_hash_bin */ +typedef struct { unsigned char bin[20]; /**< binary representation of hash */} lwsgw_hash_bin; +/** typedef struct lwsgw_hash */ +typedef struct { char id[41]; /**< ascii hex representation of hash */ } lwsgw_hash; + +/** enum lwsgs_auth_bits */ +enum lwsgs_auth_bits { + LWSGS_AUTH_LOGGED_IN = 1, /**< user is logged in as somebody */ + LWSGS_AUTH_ADMIN = 2, /**< logged in as the admin user */ + LWSGS_AUTH_VERIFIED = 4, /**< user has verified his email */ + LWSGS_AUTH_FORGOT_FLOW = 8, /**< he just completed "forgot password" flow */ +}; + +/** struct lws_session_info - information about user session status */ +struct lws_session_info { + char username[32]; /**< username logged in as, or empty string */ + char email[100]; /**< email address associated with login, or empty string */ + char ip[72]; /**< ip address session was started from */ + unsigned int mask; /**< access rights mask associated with session + * see enum lwsgs_auth_bits */ + char session[42]; /**< session id string, usable as opaque uid when not logged in */ +}; + +/** enum lws_gs_event */ +enum lws_gs_event { + LWSGSE_CREATED, /**< a new user was created */ + LWSGSE_DELETED /**< an existing user was deleted */ +}; + +/** struct lws_gs_event_args */ +struct lws_gs_event_args { + enum lws_gs_event event; /**< which event happened */ + const char *username; /**< which username the event happened to */ + const char *email; /**< the email address of that user */ +}; + +///@} + + +/*! \defgroup context-and-vhost + * \ingroup lwsapi + * + * ##Context and Vhost releated functions + * + * LWS requires that there is one context, in which you may define multiple + * vhosts. Each vhost is a virtual host, with either its own listen port + * or sharing an existing one. Each vhost has its own SSL context that can + * be set up individually or left disabled. + * + * If you don't care about multiple "site" support, you can ignore it and + * lws will create a single default vhost at context creation time. + */ +///@{ + /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ -enum lws_write_protocol { - LWS_WRITE_TEXT = 0, - LWS_WRITE_BINARY = 1, - LWS_WRITE_CONTINUATION = 2, - LWS_WRITE_HTTP = 3, - /* special 04+ opcodes */ - - /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ - LWS_WRITE_PING = 5, - LWS_WRITE_PONG = 6, - - /* Same as write_http but we know this write ends the transaction */ - LWS_WRITE_HTTP_FINAL = 7, - - /* HTTP2 */ - - LWS_WRITE_HTTP_HEADERS = 8, +/** enum lws_context_options - context and vhost options */ +enum lws_context_options { + LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = (1 << 1) | + (1 << 12), + /**< (VH) Don't allow the connection unless the client has a + * client cert that we recognize; provides + * LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT */ + LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = (1 << 2), + /**< (CTX) Don't try to get the server's hostname */ + LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = (1 << 3) | + (1 << 12), + /**< (VH) Allow non-SSL (plaintext) connections on the same + * port as SSL is listening... undermines the security of SSL; + * provides LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT */ + LWS_SERVER_OPTION_LIBEV = (1 << 4), + /**< (CTX) Use libev event loop */ + LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5), + /**< (VH) Disable IPV6 support */ + LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = (1 << 6), + /**< (VH) Don't load OS CA certs, you will need to load your + * own CA cert(s) */ + LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = (1 << 7), + /**< (VH) Accept connections with no valid Cert (eg, selfsigned) */ + LWS_SERVER_OPTION_VALIDATE_UTF8 = (1 << 8), + /**< (VH) Check UT-8 correctness */ + LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) | + (1 << 12), + /**< (VH) initialize ECDH ciphers */ + LWS_SERVER_OPTION_LIBUV = (1 << 10), + /**< (CTX) Use libuv event loop */ + LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS = (1 << 11) | + (1 << 12), + /**< (VH) Use http redirect to force http to https + * (deprecated: use mount redirection) */ + LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT = (1 << 12), + /**< (CTX) Initialize the SSL library at all */ + LWS_SERVER_OPTION_EXPLICIT_VHOSTS = (1 << 13), + /**< (CTX) Only create the context when calling context + * create api, implies user code will create its own vhosts */ + LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14), + /**< (VH) Use Unix socket */ + LWS_SERVER_OPTION_STS = (1 << 15), + /**< (VH) Send Strict Transport Security header, making + * clients subsequently go to https even if user asked for http */ + LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY = (1 << 16), + /**< (VH) Enable LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE to take effect */ + LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE = (1 << 17), + /**< (VH) if set, only ipv6 allowed on the vhost */ + LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN = (1 << 18), + /**< (CTX) Libuv only: Do not spin on SIGSEGV / SIGFPE. A segfault + * normally makes the lib spin so you can attach a debugger to it + * even if it happened without a debugger in place. You can disable + * that by giving this option. + */ /****** add new things just above ---^ ******/ - - /* flags */ - - LWS_WRITE_NO_FIN = 0x40, - /* - * client packet payload goes out on wire unmunged - * only useful for security tests since normal servers cannot - * decode the content if used - */ - LWS_WRITE_CLIENT_IGNORE_XOR_MASK = 0x80 }; -/* +#define lws_check_opt(c, f) (((c) & (f)) == (f)) + +/** struct lws_context_creation_info - parameters to create context and /or vhost with + * + * This is also used to create vhosts.... if LWS_SERVER_OPTION_EXPLICIT_VHOSTS + * is not given, then for backwards compatibility one vhost is created at + * context-creation time using the info from this struct. + * + * If LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, then no vhosts are created + * at the same time as the context, they are expected to be created afterwards. + */ +struct lws_context_creation_info { + int port; + /**< VHOST: Port to listen on... you can use CONTEXT_PORT_NO_LISTEN to + * suppress listening on any port, that's what you want if you are + * not running a websocket server at all but just using it as a + * client */ + const char *iface; + /**< VHOST: NULL to bind the listen socket to all interfaces, or the + * interface name, eg, "eth2" + * If options specifies LWS_SERVER_OPTION_UNIX_SOCK, this member is + * the pathname of a UNIX domain socket. you can use the UNIX domain + * sockets in abstract namespace, by prepending an at symbol to the + * socket name. */ + const struct lws_protocols *protocols; + /**< VHOST: Array of structures listing supported protocols and a protocol- + * specific callback for each one. The list is ended with an + * entry that has a NULL callback pointer. */ + const struct lws_extension *extensions; + /**< VHOST: NULL or array of lws_extension structs listing the + * extensions this context supports. */ + const struct lws_token_limits *token_limits; + /**< CONTEXT: NULL or struct lws_token_limits pointer which is initialized + * with a token length limit for each possible WSI_TOKEN_ */ + const char *ssl_private_key_password; + /**< VHOST: NULL or the passphrase needed for the private key */ + const char *ssl_cert_filepath; + /**< VHOST: If libwebsockets was compiled to use ssl, and you want + * to listen using SSL, set to the filepath to fetch the + * server cert from, otherwise NULL for unencrypted */ + const char *ssl_private_key_filepath; + /**< VHOST: filepath to private key if wanting SSL mode; + * if this is set to NULL but sll_cert_filepath is set, the + * OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY callback is called + * to allow setting of the private key directly via openSSL + * library calls */ + const char *ssl_ca_filepath; + /**< VHOST: CA certificate filepath or NULL */ + const char *ssl_cipher_list; + /**< VHOST: List of valid ciphers to use (eg, + * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" + * or you can leave it as NULL to get "DEFAULT" */ + const char *http_proxy_address; + /**< VHOST: If non-NULL, attempts to proxy via the given address. + * If proxy auth is required, use format "username:password\@server:port" */ + unsigned int http_proxy_port; + /**< VHOST: If http_proxy_address was non-NULL, uses this port */ + int gid; + /**< CONTEXT: group id to change to after setting listen socket, or -1. */ + int uid; + /**< CONTEXT: user id to change to after setting listen socket, or -1. */ + unsigned int options; + /**< VHOST + CONTEXT: 0, or LWS_SERVER_OPTION_... bitfields */ + void *user; + /**< CONTEXT: optional user pointer that can be recovered via the context + * pointer using lws_context_user */ + int ka_time; + /**< CONTEXT: 0 for no TCP keepalive, otherwise apply this keepalive + * timeout to all libwebsocket sockets, client or server */ + int ka_probes; + /**< CONTEXT: if ka_time was nonzero, after the timeout expires how many + * times to try to get a response from the peer before giving up + * and killing the connection */ + int ka_interval; + /**< CONTEXT: if ka_time was nonzero, how long to wait before each ka_probes + * attempt */ +#ifdef LWS_OPENSSL_SUPPORT + SSL_CTX *provided_client_ssl_ctx; + /**< CONTEXT: If non-null, swap out libwebsockets ssl + * implementation for the one provided by provided_ssl_ctx. + * Libwebsockets no longer is responsible for freeing the context + * if this option is selected. */ +#else /* maintain structure layout either way */ + void *provided_client_ssl_ctx; /**< dummy if ssl disabled */ +#endif + + short max_http_header_data; + /**< CONTEXT: The max amount of header payload that can be handled + * in an http request (unrecognized header payload is dropped) */ + short max_http_header_pool; + /**< CONTEXT: The max number of connections with http headers that + * can be processed simultaneously (the corresponding memory is + * allocated for the lifetime of the context). If the pool is + * busy new incoming connections must wait for accept until one + * becomes free. */ + + unsigned int count_threads; + /**< CONTEXT: how many contexts to create in an array, 0 = 1 */ + unsigned int fd_limit_per_thread; + /**< CONTEXT: nonzero means restrict each service thread to this + * many fds, 0 means the default which is divide the process fd + * limit by the number of threads. */ + unsigned int timeout_secs; + /**< VHOST: various processes involving network roundtrips in the + * library are protected from hanging forever by timeouts. If + * nonzero, this member lets you set the timeout used in seconds. + * Otherwise a default timeout is used. */ + const char *ecdh_curve; + /**< VHOST: if NULL, defaults to initializing server with "prime256v1" */ + const char *vhost_name; + /**< VHOST: name of vhost, must match external DNS name used to + * access the site, like "warmcat.com" as it's used to match + * Host: header and / or SNI name for SSL. */ + const char * const *plugin_dirs; + /**< CONTEXT: NULL, or NULL-terminated array of directories to + * scan for lws protocol plugins at context creation time */ + const struct lws_protocol_vhost_options *pvo; + /**< VHOST: pointer to optional linked list of per-vhost + * options made accessible to protocols */ + int keepalive_timeout; + /**< VHOST: (default = 0 = 60s) seconds to allow remote + * client to hold on to an idle HTTP/1.1 connection */ + const char *log_filepath; + /**< VHOST: filepath to append logs to... this is opened before + * any dropping of initial privileges */ + const struct lws_http_mount *mounts; + /**< VHOST: optional linked list of mounts for this vhost */ + const char *server_string; + /**< CONTEXT: string used in HTTP headers to identify server + * software, if NULL, "libwebsockets". */ + unsigned int pt_serv_buf_size; + /**< CONTEXT: 0 = default of 4096. This buffer is used by + * various service related features including file serving, it + * defines the max chunk of file that can be sent at once. + * At the risk of lws having to buffer failed large sends, it + * can be increased to, eg, 128KiB to improve throughput. */ + unsigned int max_http_header_data2; + /**< CONTEXT: if max_http_header_data is 0 and this + * is nonzero, this will be used in place of the default. It's + * like this for compatibility with the original short version, + * this is unsigned int length. */ + long ssl_options_set; + /**< VHOST: Any bits set here will be set as SSL options */ + long ssl_options_clear; + /**< VHOST: Any bits set here will be cleared as SSL options */ + unsigned short ws_ping_pong_interval; + /**< CONTEXT: 0 for none, else interval in seconds between sending + * PINGs on idle websocket connections. When the PING is sent, + * the PONG must come within the normal timeout_secs timeout period + * or the connection will be dropped. + * Any RX or TX traffic on the connection restarts the interval timer, + * so a connection which always sends or receives something at intervals + * less than the interval given here will never send PINGs / expect + * PONGs. Conversely as soon as the ws connection is established, an + * idle connection will do the PING / PONG roundtrip as soon as + * ws_ping_pong_interval seconds has passed without traffic + */ + const struct lws_protocol_vhost_options *headers; + /**< VHOST: pointer to optional linked list of per-vhost + * canned headers that are added to server responses */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility + * + * The below is to ensure later library versions with new + * members added above will see 0 (default) even if the app + * was not built against the newer headers. + */ + + void *_unused[8]; /**< dummy */ +}; + +/** + * lws_create_context() - Create the websocket handler + * \param info: pointer to struct with parameters + * + * This function creates the listening socket (if serving) and takes care + * of all initialization in one step. + * + * If option LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, no vhost is + * created; you're expected to create your own vhosts afterwards using + * lws_create_vhost(). Otherwise a vhost named "default" is also created + * using the information in the vhost-related members, for compatibility. + * + * After initialization, it returns a struct lws_context * that + * represents this server. After calling, user code needs to take care + * of calling lws_service() with the context pointer to get the + * server's sockets serviced. This must be done in the same process + * context as the initialization call. + * + * The protocol callback functions are called for a handful of events + * including http requests coming in, websocket connections becoming + * established, and data arriving; it's also called periodically to allow + * async transmission. + * + * HTTP requests are sent always to the FIRST protocol in protocol, since + * at that time websocket protocol has not been negotiated. Other + * protocols after the first one never see any HTTP callack activity. + * + * The server created is a simple http server by default; part of the + * websocket standard is upgrading this http connection to a websocket one. + * + * This allows the same server to provide files like scripts and favicon / + * images or whatever over http and dynamic data over websockets all in + * one place; they're all handled in the user callback. + */ +LWS_VISIBLE LWS_EXTERN struct lws_context * +lws_create_context(struct lws_context_creation_info *info); + +/** + * lws_context_destroy() - Destroy the websocket context + * \param context: Websocket context + * + * This function closes any active connections and then frees the + * context. After calling this, any further use of the context is + * undefined. + */ +LWS_VISIBLE LWS_EXTERN void +lws_context_destroy(struct lws_context *context); + +/** + * lws_set_proxy() - Setups proxy to lws_context. + * \param vhost: pointer to struct lws_vhost you want set proxy for + * \param proxy: pointer to c string containing proxy in format address:port + * + * Returns 0 if proxy string was parsed and proxy was setup. + * Returns -1 if proxy is NULL or has incorrect format. + * + * This is only required if your OS does not provide the http_proxy + * environment variable (eg, OSX) + * + * IMPORTANT! You should call this function right after creation of the + * lws_context and before call to connect. If you call this + * function after connect behavior is undefined. + * This function will override proxy settings made on lws_context + * creation with genenv() call. + */ +LWS_VISIBLE LWS_EXTERN int +lws_set_proxy(struct lws_vhost *vhost, const char *proxy); + + +struct lws_vhost; + +/** + * lws_create_vhost() - Create a vhost (virtual server context) + * \param context: pointer to result of lws_create_context() + * \param info: pointer to struct with parameters + * + * This function creates a virtual server (vhost) using the vhost-related + * members of the info struct. You can create many vhosts inside one context + * if you created the context with the option LWS_SERVER_OPTION_EXPLICIT_VHOSTS + */ +LWS_EXTERN LWS_VISIBLE struct lws_vhost * +lws_create_vhost(struct lws_context *context, + struct lws_context_creation_info *info); + +/** + * lwsws_get_config_globals() - Parse a JSON server config file + * \param info: pointer to struct with parameters + * \param d: filepath of the config file + * \param config_strings: storage for the config strings extracted from JSON, + * the pointer is incremented as strings are stored + * \param len: pointer to the remaining length left in config_strings + * the value is decremented as strings are stored + * + * This function prepares a n lws_context_creation_info struct with global + * settings from a file d. + * + * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled + */ +LWS_VISIBLE LWS_EXTERN int +lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, + char **config_strings, int *len); + +/** + * lwsws_get_config_vhosts() - Create vhosts from a JSON server config file + * \param context: pointer to result of lws_create_context() + * \param info: pointer to struct with parameters + * \param d: filepath of the config file + * \param config_strings: storage for the config strings extracted from JSON, + * the pointer is incremented as strings are stored + * \param len: pointer to the remaining length left in config_strings + * the value is decremented as strings are stored + * + * This function creates vhosts into a context according to the settings in + *JSON files found in directory d. + * + * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled + */ +LWS_VISIBLE LWS_EXTERN int +lwsws_get_config_vhosts(struct lws_context *context, + struct lws_context_creation_info *info, const char *d, + char **config_strings, int *len); + +/** lws_vhost_get() - \deprecated deprecated: use lws_get_vhost() */ +LWS_VISIBLE LWS_EXTERN struct lws_vhost * +lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED; + +/** + * lws_get_vhost() - return the vhost a wsi belongs to + * + * \param wsi: which connection + */ +LWS_VISIBLE LWS_EXTERN struct lws_vhost * +lws_get_vhost(struct lws *wsi); + +/** + * lws_json_dump_vhost() - describe vhost state and stats in JSON + * + * \param vh: the vhost + * \param buf: buffer to fill with JSON + * \param len: max length of buf + */ +LWS_VISIBLE LWS_EXTERN int +lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len); + +/** + * lws_json_dump_context() - describe context state and stats in JSON + * + * \param context: the context + * \param buf: buffer to fill with JSON + * \param len: max length of buf + */ +LWS_VISIBLE LWS_EXTERN int +lws_json_dump_context(const struct lws_context *context, char *buf, int len); + +/** + * lws_context_user() - get the user data associated with the context + * \param context: Websocket context + * + * This returns the optional user allocation that can be attached to + * the context the sockets live in at context_create time. It's a way + * to let all sockets serviced in the same context share data without + * using globals statics in the user code. + */ +LWS_VISIBLE LWS_EXTERN void * +lws_context_user(struct lws_context *context); + +/*! \defgroup vhost-mounts Vhost mounts and options + * \ingroup context-and-vhost-creation + * + * ##Vhost mounts and options + */ +///@{ +/** struct lws_protocol_vhost_options - linked list of per-vhost protocol + * name=value options + * + * This provides a general way to attach a linked-list of name=value pairs, + * which can also have an optional child link-list using the options member. + */ +struct lws_protocol_vhost_options { + const struct lws_protocol_vhost_options *next; /**< linked list */ + const struct lws_protocol_vhost_options *options; /**< child linked-list of more options for this node */ + const char *name; /**< name of name=value pair */ + const char *value; /**< value of name=value pair */ +}; + +/** enum lws_mount_protocols + * This specifies the mount protocol for a mountpoint, whether it is to be + * served from a filesystem, or it is a cgi etc. + */ +enum lws_mount_protocols { + LWSMPRO_HTTP = 0, /**< not supported yet */ + LWSMPRO_HTTPS = 1, /**< not supported yet */ + LWSMPRO_FILE = 2, /**< serve from filesystem directory */ + LWSMPRO_CGI = 3, /**< pass to CGI to handle */ + LWSMPRO_REDIR_HTTP = 4, /**< redirect to http:// url */ + LWSMPRO_REDIR_HTTPS = 5, /**< redirect to https:// url */ + LWSMPRO_CALLBACK = 6, /**< hand by named protocol's callback */ +}; + +/** struct lws_http_mount + * + * arguments for mounting something in a vhost's url namespace + */ +struct lws_http_mount { + const struct lws_http_mount *mount_next; + /**< pointer to next struct lws_http_mount */ + const char *mountpoint; + /**< mountpoint in http pathspace, eg, "/" */ + const char *origin; + /**< path to be mounted, eg, "/var/www/warmcat.com" */ + const char *def; + /**< default target, eg, "index.html" */ + const char *protocol; + /**<"protocol-name" to handle mount */ + + const struct lws_protocol_vhost_options *cgienv; + /**< optional linked-list of cgi options. These are created + * as environment variables for the cgi process + */ + const struct lws_protocol_vhost_options *extra_mimetypes; + /**< optional linked-list of mimetype mappings */ + const struct lws_protocol_vhost_options *interpret; + /**< optional linked-list of files to be interpreted */ + + int cgi_timeout; + /**< seconds cgi is allowed to live, if cgi://mount type */ + int cache_max_age; + /**< max-age for reuse of client cache of files, seconds */ + unsigned int auth_mask; + /**< bits set here must be set for authorized client session */ + + unsigned int cache_reusable:1; /**< set if client cache may reuse this */ + unsigned int cache_revalidate:1; /**< set if client cache should revalidate on use */ + unsigned int cache_intermediaries:1; /**< set if intermediaries are allowed to cache */ + + unsigned char origin_protocol; /**< one of enum lws_mount_protocols */ + unsigned char mountpoint_len; /**< length of mountpoint string */ +}; +///@} +///@} + +/*! \defgroup client + * \ingroup lwsapi + * + * ##Client releated functions + * */ +///@{ + +/** enum lws_client_connect_ssl_connection_flags - flags that may be used + * with struct lws_client_connect_info ssl_connection member to control if + * and how SSL checks apply to the client connection being created + */ + +enum lws_client_connect_ssl_connection_flags { + LCCSCF_USE_SSL = (1 << 0), + LCCSCF_ALLOW_SELFSIGNED = (1 << 1), + LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2) +}; + +/** struct lws_client_connect_info - parameters to connect with when using + * lws_client_connect_via_info() */ + +struct lws_client_connect_info { + struct lws_context *context; + /**< lws context to create connection in */ + const char *address; + /**< remote address to connect to */ + int port; + /**< remote port to connect to */ + int ssl_connection; + /**< nonzero for ssl */ + const char *path; + /**< uri path */ + const char *host; + /**< content of host header */ + const char *origin; + /**< content of origin header */ + const char *protocol; + /**< list of ws protocols we could accept */ + int ietf_version_or_minus_one; + /**< deprecated: currently leave at 0 or -1 */ + void *userdata; + /**< if non-NULL, use this as wsi user_data instead of malloc it */ + const struct lws_extension *client_exts; + /**< array of extensions that may be used on connection */ + const char *method; + /**< if non-NULL, do this http method instead of ws[s] upgrade. + * use "GET" to be a simple http client connection */ + struct lws *parent_wsi; + /**< if another wsi is responsible for this connection, give it here. + * this is used to make sure if the parent closes so do any + * child connections first. */ + const char *uri_replace_from; + /**< if non-NULL, when this string is found in URIs in + * text/html content-encoding, it's replaced with uri_replace_to */ + const char *uri_replace_to; + /**< see uri_replace_from */ + struct lws_vhost *vhost; + /**< vhost to bind to (used to determine related SSL_CTX) */ + struct lws **pwsi; + /**< if not NULL, store the new wsi here early in the connection + * process. Although we return the new wsi, the call to create the + * client connection does progress the connection somewhat and may + * meet an error that will result in the connection being scrubbed and + * NULL returned. While the wsi exists though, he may process a + * callback like CLIENT_CONNECTION_ERROR with his wsi: this gives the + * user callback a way to identify which wsi it is that faced the error + * even before the new wsi is returned and even if ultimately no wsi + * is returned. + */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility + * + * The below is to ensure later library versions with new + * members added above will see 0 (default) even if the app + * was not built against the newer headers. + */ + + void *_unused[4]; /**< dummy */ +}; + +/** + * lws_client_connect_via_info() - Connect to another websocket server + * \param ccinfo: pointer to lws_client_connect_info struct + * + * This function creates a connection to a remote server using the + * information provided in ccinfo. + */ +LWS_VISIBLE LWS_EXTERN struct lws * +lws_client_connect_via_info(struct lws_client_connect_info * ccinfo); + +/** + * lws_client_connect() - Connect to another websocket server + * \deprecated DEPRECATED use lws_client_connect_via_info + * \param clients: Websocket context + * \param address: Remote server address, eg, "myserver.com" + * \param port: Port to connect to on the remote server, eg, 80 + * \param ssl_connection: 0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self + * signed certs + * \param path: Websocket path on server + * \param host: Hostname on server + * \param origin: Socket origin name + * \param protocol: Comma-separated list of protocols being asked for from + * the server, or just one. The server will pick the one it + * likes best. If you don't want to specify a protocol, which is + * legal, use NULL here. + * \param ietf_version_or_minus_one: -1 to ask to connect using the default, latest + * protocol supported, or the specific protocol ordinal + * + * This function creates a connection to a remote server + */ +/* deprecated, use lws_client_connect_via_info() */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_client_connect(struct lws_context *clients, const char *address, + int port, int ssl_connection, const char *path, + const char *host, const char *origin, const char *protocol, + int ietf_version_or_minus_one) LWS_WARN_DEPRECATED; +/* deprecated, use lws_client_connect_via_info() */ +/** + * lws_client_connect_extended() - Connect to another websocket server + * \deprecated DEPRECATED use lws_client_connect_via_info + * \param clients: Websocket context + * \param address: Remote server address, eg, "myserver.com" + * \param port: Port to connect to on the remote server, eg, 80 + * \param ssl_connection: 0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self + * signed certs + * \param path: Websocket path on server + * \param host: Hostname on server + * \param origin: Socket origin name + * \param protocol: Comma-separated list of protocols being asked for from + * the server, or just one. The server will pick the one it + * likes best. + * \param ietf_version_or_minus_one: -1 to ask to connect using the default, latest + * protocol supported, or the specific protocol ordinal + * \param userdata: Pre-allocated user data + * + * This function creates a connection to a remote server + */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_client_connect_extended(struct lws_context *clients, const char *address, + int port, int ssl_connection, const char *path, + const char *host, const char *origin, + const char *protocol, int ietf_version_or_minus_one, + void *userdata) LWS_WARN_DEPRECATED; + +/** + * lws_init_vhost_client_ssl() - also enable client SSL on an existing vhost + * + * \param info: client ssl related info + * \param vhost: which vhost to initialize client ssl operations on + * + * You only need to call this if you plan on using SSL client connections on + * the vhost. For non-SSL client connections, it's not necessary to call this. + * + * The following members of info are used during the call + * + * - options must have LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT set, + * otherwise the call does nothing + * - provided_client_ssl_ctx must be NULL to get a generated client + * ssl context, otherwise you can pass a prepared one in by setting it + * - ssl_cipher_list may be NULL or set to the client valid cipher list + * - ssl_ca_filepath may be NULL or client cert filepath + * - ssl_cert_filepath may be NULL or client cert filepath + * - ssl_private_key_filepath may be NULL or client cert private key + * + * You must create your vhost explicitly if you want to use this, so you have + * a pointer to the vhost. Create the context first with the option flag + * LWS_SERVER_OPTION_EXPLICIT_VHOSTS and then call lws_create_vhost() with + * the same info struct. + */ +LWS_VISIBLE LWS_EXTERN int +lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, + struct lws_vhost *vhost); + +LWS_VISIBLE LWS_EXTERN int +lws_http_client_read(struct lws *wsi, char **buf, int *len); + +LWS_VISIBLE LWS_EXTERN void +lws_client_http_body_pending(struct lws *wsi, int something_left_to_send); + +/** + * lws_client_http_body_pending() - control if client connection neeeds to send body + * + * \param wsi: client connection + * \param something_left_to_send: nonzero if need to send more body, 0 (default) + * if nothing more to send + * + * If you will send payload data with your HTTP client connection, eg, for POST, + * when you set the related http headers in + * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER callback you should also call + * this API with something_left_to_send nonzero, and call + * lws_callback_on_writable(wsi); + * + * After sending the headers, lws will call your callback with + * LWS_CALLBACK_CLIENT_HTTP_WRITEABLE reason when writable. You can send the + * next part of the http body payload, calling lws_callback_on_writable(wsi); + * if there is more to come, or lws_client_http_body_pending(wsi, 0); to + * let lws know the last part is sent and the connection can move on. + */ + +///@} + +/** \defgroup service Built-in service loop entry + * + * ##Built-in service loop entry + * + * If you're not using libev / libuv, these apis are needed to enter the poll() + * wait in lws and service any connections with pending events. + */ +///@{ + +/** + * lws_service() - Service any pending websocket activity + * \param context: Websocket context + * \param timeout_ms: Timeout for poll; 0 means return immediately if nothing needed + * service otherwise block and service immediately, returning + * after the timeout if nothing needed service. + * + * This function deals with any pending websocket traffic, for three + * kinds of event. It handles these events on both server and client + * types of connection the same. + * + * 1) Accept new connections to our context's server + * + * 2) Call the receive callback for incoming frame data received by + * server or client connections. + * + * You need to call this service function periodically to all the above + * functions to happen; if your application is single-threaded you can + * just call it in your main event loop. + * + * Alternatively you can fork a new process that asynchronously handles + * calling this service in a loop. In that case you are happy if this + * call blocks your thread until it needs to take care of something and + * would call it with a large nonzero timeout. Your loop then takes no + * CPU while there is nothing happening. + * + * If you are calling it in a single-threaded app, you don't want it to + * wait around blocking other things in your loop from happening, so you + * would call it with a timeout_ms of 0, so it returns immediately if + * nothing is pending, or as soon as it services whatever was pending. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service(struct lws_context *context, int timeout_ms); + +/** + * lws_service() - Service any pending websocket activity + * + * \param context: Websocket context + * \param timeout_ms: Timeout for poll; 0 means return immediately if nothing needed + * service otherwise block and service immediately, returning + * after the timeout if nothing needed service. + * + * Same as lws_service(), but for a specific thread service index. Only needed + * if you are spawning multiple service threads. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi); + +/** + * lws_cancel_service_pt() - Cancel servicing of pending socket activity + * on one thread + * \param wsi: Cancel service on the thread this wsi is serviced by + * + * This function lets a call to lws_service() waiting for a timeout + * immediately return. + * + * It works by creating a phony event and then swallowing it silently. + * + * The reason it may be needed is when waiting in poll(), changes to + * the event masks are ignored by the OS until poll() is reentered. This + * lets you halt the poll() wait and make the reentry happen immediately + * instead of having the wait out the rest of the poll timeout. + */ +LWS_VISIBLE LWS_EXTERN void +lws_cancel_service_pt(struct lws *wsi); + +/** + * lws_cancel_service() - Cancel wait for new pending socket activity + * \param context: Websocket context + * + * This function let a call to lws_service() waiting for a timeout + * immediately return. + * + * What it basically does is provide a fake event that will be swallowed, + * so the wait in poll() is ended. That's useful because poll() doesn't + * attend to changes in POLLIN/OUT/ERR until it re-enters the wait. + */ +LWS_VISIBLE LWS_EXTERN void +lws_cancel_service(struct lws_context *context); + +/** + * lws_service_fd() - Service polled socket with something waiting + * \param context: Websocket context + * \param pollfd: The pollfd entry describing the socket fd and which events + * happened. + * + * This function takes a pollfd that has POLLIN or POLLOUT activity and + * services it according to the state of the associated + * struct lws. + * + * The one call deals with all "service" that might happen on a socket + * including listen accepts, http files as well as websocket protocol. + * + * If a pollfd says it has something, you can just pass it to + * lws_service_fd() whether it is a socket handled by lws or not. + * If it sees it is a lws socket, the traffic will be handled and + * pollfd->revents will be zeroed now. + * + * If the socket is foreign to lws, it leaves revents alone. So you can + * see if you should service yourself by checking the pollfd revents + * after letting lws try to service it. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); + +/** + * lws_service_fd_tsi() - Service polled socket in specific service thread + * \param context: Websocket context + * \param pollfd: The pollfd entry describing the socket fd and which events + * happened. + * \param tsi: thread service index + * + * Same as lws_service_fd() but used with multiple service threads + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, + int tsi); + +/** + * lws_service_adjust_timeout() - Check for any connection needing forced service + * \param context: Websocket context + * \param timeout_ms: The original poll timeout value. You can just set this + * to 1 if you don't really have a poll timeout. + * \param tsi: thread service index + * + * Under some conditions connections may need service even though there is no + * pending network action on them, this is "forced service". For default + * poll() and libuv / libev, the library takes care of calling this and + * dealing with it for you. But for external poll() integration, you need + * access to the apis. + * + * If anybody needs "forced service", returned timeout is zero. In that case, + * you can call lws_plat_service_tsi() with a timeout of -1 to only service + * guys who need forced service. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi); + +/** + * lws_plat_service_tsi() - Lowlevel platform-specific service api + * \param context: Websocket context + * \param timeout_ms: The original poll timeout value. You can just set this + * to 1 if you don't really have a poll timeout. + * \param tsi: thread service index + * + * For default poll() and libuv/ev, lws takes care of using this for you. and + * you can ignore it. + * + * But for external poll() integration, you need access to this api to service + * connections that need to be serviced but have no pending network activity. + * + * See lws_service_adjust_timeout() for more info. + */ +LWS_EXTERN LWS_VISIBLE int +lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi); + +///@} + +/*! \defgroup http HTTP + + Modules related to handling HTTP +*/ +//@{ + +/*! \defgroup httpft HTTP File transfer + * \ingroup http + + APIs for sending local files in response to HTTP requests +*/ +//@{ + +/** + * lws_get_mimetype() - Determine mimetype to use from filename + * + * \param file: filename + * \param m: NULL, or mount context + * + * This uses a canned list of known filetypes first, if no match and m is + * non-NULL, then tries a list of per-mount file suffix to mimtype mappings. + * + * Returns either NULL or a pointer to the mimetype matching the file. + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_get_mimetype(const char *file, const struct lws_http_mount *m); + +/** + * lws_serve_http_file() - Send a file back to the client using http + * \param wsi: Websocket instance (available from user callback) + * \param file: The file to issue over http + * \param content_type: The http content type, eg, text/html + * \param other_headers: NULL or pointer to header string + * \param other_headers_len: length of the other headers if non-NULL + * + * This function is intended to be called from the callback in response + * to http requests from the client. It allows the callback to issue + * local files down the http link in a single step. + * + * Returning <0 indicates error and the wsi should be closed. Returning + * >0 indicates the file was completely sent and + * lws_http_transaction_completed() called on the wsi (and close if != 0) + * ==0 indicates the file transfer is started and needs more service later, + * the wsi should be left alone. + */ +LWS_VISIBLE LWS_EXTERN int +lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, + const char *other_headers, int other_headers_len); +LWS_VISIBLE LWS_EXTERN int +lws_serve_http_file_fragment(struct lws *wsi); +//@} + +/*! \defgroup html-chunked-substitution HTML Chunked Substitution + * \ingroup http + * + * ##HTML chunked Substitution + * + * APIs for receiving chunks of text, replacing a set of variable names via + * a callback, and then prepending and appending HTML chunked encoding + * headers. + */ +//@{ + +enum http_status { + HTTP_STATUS_OK = 200, + HTTP_STATUS_NO_CONTENT = 204, + + HTTP_STATUS_MOVED_PERMANENTLY = 301, + HTTP_STATUS_FOUND = 302, + HTTP_STATUS_SEE_OTHER = 303, + + HTTP_STATUS_BAD_REQUEST = 400, + HTTP_STATUS_UNAUTHORIZED, + HTTP_STATUS_PAYMENT_REQUIRED, + HTTP_STATUS_FORBIDDEN, + HTTP_STATUS_NOT_FOUND, + HTTP_STATUS_METHOD_NOT_ALLOWED, + HTTP_STATUS_NOT_ACCEPTABLE, + HTTP_STATUS_PROXY_AUTH_REQUIRED, + HTTP_STATUS_REQUEST_TIMEOUT, + HTTP_STATUS_CONFLICT, + HTTP_STATUS_GONE, + HTTP_STATUS_LENGTH_REQUIRED, + HTTP_STATUS_PRECONDITION_FAILED, + HTTP_STATUS_REQ_ENTITY_TOO_LARGE, + HTTP_STATUS_REQ_URI_TOO_LONG, + HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, + HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, + HTTP_STATUS_EXPECTATION_FAILED, + + HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, + HTTP_STATUS_NOT_IMPLEMENTED, + HTTP_STATUS_BAD_GATEWAY, + HTTP_STATUS_SERVICE_UNAVAILABLE, + HTTP_STATUS_GATEWAY_TIMEOUT, + HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, +}; + +struct lws_process_html_args { + char *p; /**< pointer to the buffer containing the data */ + int len; /**< length of the original data at p */ + int max_len; /**< maximum length we can grow the data to */ + int final; /**< set if this is the last chunk of the file */ +}; + +typedef const char *(*lws_process_html_state_cb)(void *data, int index); + +struct lws_process_html_state { + char *start; /**< pointer to start of match */ + char swallow[16]; /**< matched character buffer */ + int pos; /**< position in match */ + void *data; /**< opaque pointer */ + const char * const *vars; /**< list of variable names */ + int count_vars; /**< count of variable names */ + + lws_process_html_state_cb replace; /**< called on match to perform substitution */ +}; + +/*! lws_chunked_html_process() - generic chunked substitution + * \param args: buffer to process using chunked encoding + * \param s: current processing state + */ +LWS_VISIBLE LWS_EXTERN int +lws_chunked_html_process(struct lws_process_html_args *args, + struct lws_process_html_state *s); +//@} + +/** \defgroup HTTP-headers-read HTTP headers: read + * \ingroup http + * + * ##HTTP header releated functions + * + * In lws the client http headers are temporarily stored in a pool, only for the + * duration of the http part of the handshake. It's because in most cases, + * the header content is ignored for the whole rest of the connection lifetime + * and would then just be taking up space needlessly. + * + * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time + * the http headers are still allocated, you can use these apis then to + * look at and copy out interesting header content (cookies, etc) + * + * Notice that the header total length reported does not include a terminating + * '\0', however you must allocate for it when using the _copy apis. So the + * length reported for a header containing "123" is 3, but you must provide + * a buffer of length 4 so that "123\0" may be copied into it, or the copy + * will fail with a nonzero return code. + * + * In the special case of URL arguments, like ?x=1&y=2, the arguments are + * stored in a token named for the method, eg, WSI_TOKEN_GET_URI if it + * was a GET or WSI_TOKEN_POST_URI if POST. You can check the total + * length to confirm the method. + * + * For URL arguments, each argument is stored urldecoded in a "fragment", so + * you can use the fragment-aware api lws_hdr_copy_fragment() to access each + * argument in turn: the fragments contain urldecoded strings like x=1 or y=2. + * + * As a convenience, lws has an api that will find the fragment with a + * given name= part, lws_get_urlarg_by_name(). + */ +///@{ + +/** struct lws_tokens * you need these to look at headers that have been parsed if using the * LWS_CALLBACK_FILTER_CONNECTION callback. If a header from the enum * list below is absent, .token = NULL and token_len = 0. Otherwise .token * points to .token_len chars containing that header content. */ - struct lws_tokens { - char *token; - int token_len; + char *token; /**< pointer to start of the token */ + int token_len; /**< length of the token's value */ }; -/* +/* enum lws_token_indexes * these have to be kept in sync with lextable.h / minilex.c * * NOTE: These public enums are part of the abi. If you want to add one, @@ -621,6 +2591,7 @@ enum lws_token_indexes { WSI_TOKEN_HTTP_URI_ARGS = 76, WSI_TOKEN_PROXY = 77, WSI_TOKEN_HTTP_X_REAL_IP = 78, + WSI_TOKEN_HTTP1_0 = 79, /****** add new things just above ---^ ******/ @@ -632,6 +2603,7 @@ enum lws_token_indexes { _WSI_TOKEN_CLIENT_URI, _WSI_TOKEN_CLIENT_HOST, _WSI_TOKEN_CLIENT_ORIGIN, + _WSI_TOKEN_CLIENT_METHOD, /* always last real token index*/ WSI_TOKEN_COUNT, @@ -645,846 +2617,426 @@ enum lws_token_indexes { }; struct lws_token_limits { - unsigned short token_limit[WSI_TOKEN_COUNT]; -}; - -/* - * From RFC 6455 - 1000 - - 1000 indicates a normal closure, meaning that the purpose for - which the connection was established has been fulfilled. - - 1001 - - 1001 indicates that an endpoint is "going away", such as a server - going down or a browser having navigated away from a page. - - 1002 - - 1002 indicates that an endpoint is terminating the connection due - to a protocol error. - - 1003 - - 1003 indicates that an endpoint is terminating the connection - because it has received a type of data it cannot accept (e.g., an - endpoint that understands only text data MAY send this if it - receives a binary message). - - 1004 - - Reserved. The specific meaning might be defined in the future. - - 1005 - - 1005 is a reserved value and MUST NOT be set as a status code in a - Close control frame by an endpoint. It is designated for use in - applications expecting a status code to indicate that no status - code was actually present. - - 1006 - - 1006 is a reserved value and MUST NOT be set as a status code in a - Close control frame by an endpoint. It is designated for use in - applications expecting a status code to indicate that the - connection was closed abnormally, e.g., without sending or - receiving a Close control frame. - - 1007 - - 1007 indicates that an endpoint is terminating the connection - because it has received data within a message that was not - consistent with the type of the message (e.g., non-UTF-8 [RFC3629] - data within a text message). - - 1008 - - 1008 indicates that an endpoint is terminating the connection - because it has received a message that violates its policy. This - is a generic status code that can be returned when there is no - other more suitable status code (e.g., 1003 or 1009) or if there - is a need to hide specific details about the policy. - - 1009 - - 1009 indicates that an endpoint is terminating the connection - because it has received a message that is too big for it to - process. - - 1010 - - 1010 indicates that an endpoint (client) is terminating the - connection because it has expected the server to negotiate one or - more extension, but the server didn't return them in the response - message of the WebSocket handshake. The list of extensions that - are needed SHOULD appear in the /reason/ part of the Close frame. - Note that this status code is not used by the server, because it - can fail the WebSocket handshake instead. - - 1011 - - 1011 indicates that a server is terminating the connection because - it encountered an unexpected condition that prevented it from - fulfilling the request. - - 1015 - - 1015 is a reserved value and MUST NOT be set as a status code in a - Close control frame by an endpoint. It is designated for use in - applications expecting a status code to indicate that the - connection was closed due to a failure to perform a TLS handshake - (e.g., the server certificate can't be verified). -*/ - -/* - * NOTE: These public enums are part of the abi. If you want to add one, - * add it at where specified so existing users are unaffected. - */ -enum lws_close_status { - LWS_CLOSE_STATUS_NOSTATUS = 0, - LWS_CLOSE_STATUS_NORMAL = 1000, - LWS_CLOSE_STATUS_GOINGAWAY = 1001, - LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, - LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, - LWS_CLOSE_STATUS_RESERVED = 1004, - LWS_CLOSE_STATUS_NO_STATUS = 1005, - LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, - LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, - LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, - LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, - LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, - LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, - LWS_CLOSE_STATUS_TLS_FAILURE = 1015, - - /****** add new things just above ---^ ******/ - - LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, -}; - -enum http_status { - HTTP_STATUS_OK = 200, - HTTP_STATUS_NO_CONTENT = 204, - - HTTP_STATUS_BAD_REQUEST = 400, - HTTP_STATUS_UNAUTHORIZED, - HTTP_STATUS_PAYMENT_REQUIRED, - HTTP_STATUS_FORBIDDEN, - HTTP_STATUS_NOT_FOUND, - HTTP_STATUS_METHOD_NOT_ALLOWED, - HTTP_STATUS_NOT_ACCEPTABLE, - HTTP_STATUS_PROXY_AUTH_REQUIRED, - HTTP_STATUS_REQUEST_TIMEOUT, - HTTP_STATUS_CONFLICT, - HTTP_STATUS_GONE, - HTTP_STATUS_LENGTH_REQUIRED, - HTTP_STATUS_PRECONDITION_FAILED, - HTTP_STATUS_REQ_ENTITY_TOO_LARGE, - HTTP_STATUS_REQ_URI_TOO_LONG, - HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, - HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, - HTTP_STATUS_EXPECTATION_FAILED, - - HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, - HTTP_STATUS_NOT_IMPLEMENTED, - HTTP_STATUS_BAD_GATEWAY, - HTTP_STATUS_SERVICE_UNAVAILABLE, - HTTP_STATUS_GATEWAY_TIMEOUT, - HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, -}; - -struct lws; -struct lws_context; -/* needed even with extensions disabled for create context */ -struct lws_extension; - -/** - * typedef lws_callback_function() - User server actions - * @wsi: Opaque websocket instance pointer - * @reason: The reason for the call - * @user: Pointer to per-session user data allocated by library - * @in: Pointer used for some callback reasons - * @len: Length set for some callback reasons - * - * This callback is the way the user controls what is served. All the - * protocol detail is hidden and handled by the library. - * - * For each connection / session there is user data allocated that is - * pointed to by "user". You set the size of this user data area when - * the library is initialized with lws_create_server. - * - * You get an opportunity to initialize user data when called back with - * LWS_CALLBACK_ESTABLISHED reason. - * - * LWS_CALLBACK_ESTABLISHED: after the server completes a handshake with - * an incoming client. If you built the library - * with ssl support, @in is a pointer to the - * ssl struct associated with the connection or - * NULL. - * - * LWS_CALLBACK_CLIENT_CONNECTION_ERROR: the request client connection has - * been unable to complete a handshake with the remote server. If - * in is non-NULL, you can find an error string of length len where - * it points to. - * - * LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH: this is the last chance for the - * client user code to examine the http headers - * and decide to reject the connection. If the - * content in the headers is interesting to the - * client (url, etc) it needs to copy it out at - * this point since it will be destroyed before - * the CLIENT_ESTABLISHED call - * - * LWS_CALLBACK_CLIENT_ESTABLISHED: after your client connection completed - * a handshake with the remote server - * - * LWS_CALLBACK_CLOSED: when the websocket session ends - * - * LWS_CALLBACK_CLOSED_HTTP: when a HTTP (non-websocket) session ends - * - * LWS_CALLBACK_RECEIVE: data has appeared for this server endpoint from a - * remote client, it can be found at *in and is - * len bytes long - * - * LWS_CALLBACK_CLIENT_RECEIVE_PONG: if you elected to see PONG packets, - * they appear with this callback reason. PONG - * packets only exist in 04+ protocol - * - * LWS_CALLBACK_CLIENT_RECEIVE: data has appeared from the server for the - * client connection, it can be found at *in and - * is len bytes long - * - * LWS_CALLBACK_HTTP: an http request has come from a client that is not - * asking to upgrade the connection to a websocket - * one. This is a chance to serve http content, - * for example, to send a script to the client - * which will then open the websockets connection. - * @in points to the URI path requested and - * lws_serve_http_file() makes it very - * simple to send back a file to the client. - * Normally after sending the file you are done - * with the http connection, since the rest of the - * activity will come by websockets from the script - * that was delivered by http, so you will want to - * return 1; to close and free up the connection. - * That's important because it uses a slot in the - * total number of client connections allowed set - * by MAX_CLIENTS. - * - * LWS_CALLBACK_HTTP_BODY: the next @len bytes data from the http - * request body HTTP connection is now available in @in. - * - * LWS_CALLBACK_HTTP_BODY_COMPLETION: the expected amount of http request - * body has been delivered - * - * LWS_CALLBACK_HTTP_WRITEABLE: you can write more down the http protocol - * link now. - * - * LWS_CALLBACK_HTTP_FILE_COMPLETION: a file requested to be send down - * http link has completed. - * - * LWS_CALLBACK_CLIENT_WRITEABLE: - * LWS_CALLBACK_SERVER_WRITEABLE: If you call - * lws_callback_on_writable() on a connection, you will - * get one of these callbacks coming when the connection socket - * is able to accept another write packet without blocking. - * If it already was able to take another packet without blocking, - * you'll get this callback at the next call to the service loop - * function. Notice that CLIENTs get LWS_CALLBACK_CLIENT_WRITEABLE - * and servers get LWS_CALLBACK_SERVER_WRITEABLE. - * - * LWS_CALLBACK_FILTER_NETWORK_CONNECTION: called when a client connects to - * the server at network level; the connection is accepted but then - * passed to this callback to decide whether to hang up immediately - * or not, based on the client IP. @in contains the connection - * socket's descriptor. Since the client connection information is - * not available yet, @wsi still pointing to the main server socket. - * Return non-zero to terminate the connection before sending or - * receiving anything. Because this happens immediately after the - * network connection from the client, there's no websocket protocol - * selected yet so this callback is issued only to protocol 0. - * - * LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED: A new client just had - * been connected, accepted, and instantiated into the pool. This - * callback allows setting any relevant property to it. Because this - * happens immediately after the instantiation of a new client, - * there's no websocket protocol selected yet so this callback is - * issued only to protocol 0. Only @wsi is defined, pointing to the - * new client, and the return value is ignored. - * - * LWS_CALLBACK_FILTER_HTTP_CONNECTION: called when the request has - * been received and parsed from the client, but the response is - * not sent yet. Return non-zero to disallow the connection. - * @user is a pointer to the connection user space allocation, - * @in is the URI, eg, "/" - * In your handler you can use the public APIs - * lws_hdr_total_length() / lws_hdr_copy() to access all of the - * headers using the header enums lws_token_indexes from - * libwebsockets.h to check for and read the supported header - * presence and content before deciding to allow the http - * connection to proceed or to kill the connection. - * - * LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION: called when the handshake has - * been received and parsed from the client, but the response is - * not sent yet. Return non-zero to disallow the connection. - * @user is a pointer to the connection user space allocation, - * @in is the requested protocol name - * In your handler you can use the public APIs - * lws_hdr_total_length() / lws_hdr_copy() to access all of the - * headers using the header enums lws_token_indexes from - * libwebsockets.h to check for and read the supported header - * presence and content before deciding to allow the handshake - * to proceed or to kill the connection. - * - * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS: if configured for - * including OpenSSL support, this callback allows your user code - * to perform extra SSL_CTX_load_verify_locations() or similar - * calls to direct OpenSSL where to find certificates the client - * can use to confirm the remote server identity. @user is the - * OpenSSL SSL_CTX* - * - * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS: if configured for - * including OpenSSL support, this callback allows your user code - * to load extra certifcates into the server which allow it to - * verify the validity of certificates returned by clients. @user - * is the server's OpenSSL SSL_CTX* - * - * LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY: if configured for - * including OpenSSL support but no private key file has been - * specified (ssl_private_key_filepath is NULL), this is called to - * allow the user to set the private key directly via libopenssl - * and perform further operations if required; this might be useful - * in situations where the private key is not directly accessible - * by the OS, for example if it is stored on a smartcard - * @user is the server's OpenSSL SSL_CTX* - * - * LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION: if the - * libwebsockets context was created with the option - * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this - * callback is generated during OpenSSL verification of the cert - * sent from the client. It is sent to protocol[0] callback as - * no protocol has been negotiated on the connection yet. - * Notice that the libwebsockets context and wsi are both NULL - * during this callback. See - * http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html - * to understand more detail about the OpenSSL callback that - * generates this libwebsockets callback and the meanings of the - * arguments passed. In this callback, @user is the x509_ctx, - * @in is the ssl pointer and @len is preverify_ok - * Notice that this callback maintains libwebsocket return - * conventions, return 0 to mean the cert is OK or 1 to fail it. - * This also means that if you don't handle this callback then - * the default callback action of returning 0 allows the client - * certificates. - * - * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: this callback happens - * when a client handshake is being compiled. @user is NULL, - * @in is a char **, it's pointing to a char * which holds the - * next location in the header buffer where you can add - * headers, and @len is the remaining space in the header buffer, - * which is typically some hundreds of bytes. So, to add a canned - * cookie, your handler code might look similar to: - * - * char **p = (char **)in; - * - * if (len < 100) - * return 1; - * - * *p += sprintf(*p, "Cookie: a=b\x0d\x0a"); - * - * return 0; - * - * Notice if you add anything, you just have to take care about - * the CRLF on the line you added. Obviously this callback is - * optional, if you don't handle it everything is fine. - * - * Notice the callback is coming to protocols[0] all the time, - * because there is no specific protocol handshook yet. - * - * LWS_CALLBACK_CONFIRM_EXTENSION_OKAY: When the server handshake code - * sees that it does support a requested extension, before - * accepting the extension by additing to the list sent back to - * the client it gives this callback just to check that it's okay - * to use that extension. It calls back to the requested protocol - * and with @in being the extension name, @len is 0 and @user is - * valid. Note though at this time the ESTABLISHED callback hasn't - * happened yet so if you initialize @user content there, @user - * content during this callback might not be useful for anything. - * Notice this callback comes to protocols[0]. - * - * LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: When a client - * connection is being prepared to start a handshake to a server, - * each supported extension is checked with protocols[0] callback - * with this reason, giving the user code a chance to suppress the - * claim to support that extension by returning non-zero. If - * unhandled, by default 0 will be returned and the extension - * support included in the header to the server. Notice this - * callback comes to protocols[0]. - * - * LWS_CALLBACK_PROTOCOL_INIT: One-time call per protocol so it can - * do initial setup / allocations etc - * - * LWS_CALLBACK_PROTOCOL_DESTROY: One-time call per protocol indicating - * this protocol won't get used at all after this callback, the - * context is getting destroyed. Take the opportunity to - * deallocate everything that was allocated by the protocol. - * - * LWS_CALLBACK_WSI_CREATE: outermost (earliest) wsi create notification - * - * LWS_CALLBACK_WSI_DESTROY: outermost (latest) wsi destroy notification - * - * The next five reasons are optional and only need taking care of if you - * will be integrating libwebsockets sockets into an external polling - * array. - * - * For these calls, @in points to a struct lws_pollargs that - * contains @fd, @events and @prev_events members - * - * LWS_CALLBACK_ADD_POLL_FD: libwebsocket deals with its poll() loop - * internally, but in the case you are integrating with another - * server you will need to have libwebsocket sockets share a - * polling array with the other server. This and the other - * POLL_FD related callbacks let you put your specialized - * poll array interface code in the callback for protocol 0, the - * first protocol you support, usually the HTTP protocol in the - * serving case. - * This callback happens when a socket needs to be - * added to the polling loop: @in points to a struct - * lws_pollargs; the @fd member of the struct is the file - * descriptor, and @events contains the active events. - * - * If you are using the internal polling loop (the "service" - * callback), you can just ignore these callbacks. - * - * LWS_CALLBACK_DEL_POLL_FD: This callback happens when a socket descriptor - * needs to be removed from an external polling array. @in is - * again the struct lws_pollargs containing the @fd member - * to be removed. If you are using the internal polling - * loop, you can just ignore it. - * - * LWS_CALLBACK_CHANGE_MODE_POLL_FD: This callback happens when - * libwebsockets wants to modify the events for a connectiion. - * @in is the struct lws_pollargs with the @fd to change. - * The new event mask is in @events member and the old mask is in - * the @prev_events member. - * If you are using the internal polling loop, you can just ignore - * it. - * - * LWS_CALLBACK_LOCK_POLL: - * LWS_CALLBACK_UNLOCK_POLL: These allow the external poll changes driven - * by libwebsockets to participate in an external thread locking - * scheme around the changes, so the whole thing is threadsafe. - * These are called around three activities in the library, - * - inserting a new wsi in the wsi / fd table (len=1) - * - deleting a wsi from the wsi / fd table (len=1) - * - changing a wsi's POLLIN/OUT state (len=0) - * Locking and unlocking external synchronization objects when - * len == 1 allows external threads to be synchronized against - * wsi lifecycle changes if it acquires the same lock for the - * duration of wsi dereference from the other thread context. - * - * LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: - * The peer has sent an unsolicited Close WS packet. @in and - * @len are the optional close code (first 2 bytes, network - * order) and the optional additional information which is not - * defined in the standard, and may be a string or non-human- - * readble data. - * If you return 0 lws will echo the close and then close the - * connection. If you return nonzero lws will just close the - * connection. - */ -typedef int -lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, - void *user, void *in, size_t len); - -/** - * typedef lws_extension_callback_function() - Hooks to allow extensions to operate - * @context: Websockets context - * @ext: This extension - * @wsi: Opaque websocket instance pointer - * @reason: The reason for the call - * @user: Pointer to ptr to per-session user data allocated by library - * @in: Pointer used for some callback reasons - * @len: Length set for some callback reasons - * - * Each extension that is active on a particular connection receives - * callbacks during the connection lifetime to allow the extension to - * operate on websocket data and manage itself. - * - * Libwebsockets takes care of allocating and freeing "user" memory for - * each active extension on each connection. That is what is pointed to - * by the @user parameter. - * - * LWS_EXT_CB_CONSTRUCT: called when the server has decided to - * select this extension from the list provided by the client, - * just before the server will send back the handshake accepting - * the connection with this extension active. This gives the - * extension a chance to initialize its connection context found - * in @user. - * - * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT - * but called when client is instantiating this extension. Some - * extensions will work the same on client and server side and then - * you can just merge handlers for both CONSTRUCTS. - * - * LWS_EXT_CB_DESTROY: called when the connection the extension was - * being used on is about to be closed and deallocated. It's the - * last chance for the extension to deallocate anything it has - * allocated in the user data (pointed to by @user) before the - * user data is deleted. This same callback is used whether you - * are in client or server instantiation context. - * - * LWS_EXT_CB_PACKET_RX_PREPARSE: when this extension was active on - * a connection, and a packet of data arrived at the connection, - * it is passed to this callback to give the extension a chance to - * change the data, eg, decompress it. @user is pointing to the - * extension's private connection context data, @in is pointing - * to an lws_tokens struct, it consists of a char * pointer called - * token, and an int called token_len. At entry, these are - * set to point to the received buffer and set to the content - * length. If the extension will grow the content, it should use - * a new buffer allocated in its private user context data and - * set the pointed-to lws_tokens members to point to its buffer. - * - * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as - * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the - * extension a chance to change websocket data just before it will - * be sent out. Using the same lws_token pointer scheme in @in, - * the extension can change the buffer and the length to be - * transmitted how it likes. Again if it wants to grow the - * buffer safely, it should copy the data into its own buffer and - * set the lws_tokens token pointer to it. - * - * LWS_EXT_CB_ARGS_VALIDATE: - */ -typedef int -lws_extension_callback_function(struct lws_context *context, - const struct lws_extension *ext, struct lws *wsi, - enum lws_extension_callback_reasons reason, - void *user, void *in, size_t len); - -/** - * struct lws_protocols - List of protocols and handlers server - * supports. - * @name: Protocol name that must match the one given in the client - * Javascript new WebSocket(url, 'protocol') name. - * @callback: The service callback used for this protocol. It allows the - * service action for an entire protocol to be encapsulated in - * the protocol-specific callback - * @per_session_data_size: Each new connection using this protocol gets - * this much memory allocated on connection establishment and - * freed on connection takedown. A pointer to this per-connection - * allocation is passed into the callback in the 'user' parameter - * @rx_buffer_size: if you want atomic frames delivered to the callback, you - * should set this to the size of the biggest legal frame that - * you support. If the frame size is exceeded, there is no - * error, but the buffer will spill to the user callback when - * full, which you can detect by using - * lws_remaining_packet_payload(). Notice that you - * just talk about frame size here, the LWS_PRE - * and post-padding are automatically also allocated on top. - * @id: ignored by lws, but useful to contain user information bound - * to the selected protocol. For example if this protocol was - * called "myprotocol-v2", you might set id to 2, and the user - * code that acts differently according to the version can do so by - * switch (wsi->protocol->id), user code might use some bits as - * capability flags based on selected protocol version, etc. - * @user: User provided context data at the protocol level. - * Accessible via lws_get_protocol(wsi)->user - * This should not be confused with wsi->user, it is not the same. - * The library completely ignores any value in here. - * - * This structure represents one protocol supported by the server. An - * array of these structures is passed to lws_create_server() - * allows as many protocols as you like to be handled by one server. - * - * The first protocol given has its callback used for user callbacks when - * there is no agreed protocol name, that's true during HTTP part of the - * connection and true if the client did not send a Protocol: header. - */ - -struct lws_protocols { - const char *name; - lws_callback_function *callback; - size_t per_session_data_size; - size_t rx_buffer_size; - unsigned int id; - void *user; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ -}; - -enum lws_ext_options_types { - EXTARG_NONE, - EXTARG_DEC, - EXTARG_OPT_DEC - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ + unsigned short token_limit[WSI_TOKEN_COUNT]; /**< max chars for this token */ }; /** - * struct lws_ext_options - Option arguments to the extension. These are - * used in the negotiation at ws upgrade time. - * The helper function lws_ext_parse_options() - * uses these to generate callbacks + * lws_token_to_string() - returns a textual representation of a hdr token index * - * @name: Option name, eg, "server_no_context_takeover" - * @type: What kind of args the option can take + * \param: token index */ -struct lws_ext_options { - const char *name; - enum lws_ext_options_types type; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ -}; - -struct lws_ext_option_arg { - int option_index; - const char *start; - int len; -}; - -/** - * struct lws_extension - An extension we know how to cope with - * - * @name: Formal extension name, eg, "permessage-deflate" - * @callback: Service callback - * @client_offer: String containing exts and options client offers - */ - -struct lws_extension { - const char *name; - lws_extension_callback_function *callback; - const char *client_offer; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ -}; - -/* - * The internal exts are part of the public abi - * If we add more extensions, publish the callback here ------v - */ - -extern int lws_extension_callback_pm_deflate( - struct lws_context *context, const struct lws_extension *ext, - struct lws *wsi, enum lws_extension_callback_reasons reason, - void *user, void *in, size_t len); - - -/** - * struct lws_context_creation_info - parameters to create context with - * - * @port: Port to listen on... you can use CONTEXT_PORT_NO_LISTEN to - * suppress listening on any port, that's what you want if you are - * not running a websocket server at all but just using it as a - * client - * @iface: NULL to bind the listen socket to all interfaces, or the - * interface name, eg, "eth2" - * @protocols: Array of structures listing supported protocols and a protocol- - * specific callback for each one. The list is ended with an - * entry that has a NULL callback pointer. - * It's not const because we write the owning_server member - * @extensions: NULL or array of lws_extension structs listing the - * extensions this context supports. If you configured with - * --without-extensions, you should give NULL here. - * @token_limits: NULL or struct lws_token_limits pointer which is initialized - * with a token length limit for each possible WSI_TOKEN_*** - * @ssl_cert_filepath: If libwebsockets was compiled to use ssl, and you want - * to listen using SSL, set to the filepath to fetch the - * server cert from, otherwise NULL for unencrypted - * @ssl_private_key_filepath: filepath to private key if wanting SSL mode; - * if this is set to NULL but sll_cert_filepath is set, the - * OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY callback is called - * to allow setting of the private key directly via openSSL - * library calls - * @ssl_ca_filepath: CA certificate filepath or NULL - * @ssl_cipher_list: List of valid ciphers to use (eg, - * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" - * or you can leave it as NULL to get "DEFAULT" - * @http_proxy_address: If non-NULL, attempts to proxy via the given address. - * If proxy auth is required, use format - * "username:password@server:port" - * @http_proxy_port: If http_proxy_address was non-NULL, uses this port at - * the address - * @gid: group id to change to after setting listen socket, or -1. - * @uid: user id to change to after setting listen socket, or -1. - * @options: 0, or LWS_SERVER_OPTION_... bitfields - * @user: optional user pointer that can be recovered via the context - * pointer using lws_context_user - * @ka_time: 0 for no keepalive, otherwise apply this keepalive timeout to - * all libwebsocket sockets, client or server - * @ka_probes: if ka_time was nonzero, after the timeout expires how many - * times to try to get a response from the peer before giving up - * and killing the connection - * @ka_interval: if ka_time was nonzero, how long to wait before each ka_probes - * attempt - * @provided_client_ssl_ctx: If non-null, swap out libwebsockets ssl - * implementation for the one provided by provided_ssl_ctx. - * Libwebsockets no longer is responsible for freeing the context - * if this option is selected. - * @max_http_header_data: The max amount of header payload that can be handled - * in an http request (unrecognized header payload is dropped) - * @max_http_header_pool: The max number of connections with http headers that - * can be processed simultaneously (the corresponding memory is - * allocated for the lifetime of the context). If the pool is - * busy new incoming connections must wait for accept until one - * becomes free. - * @count_threads: how many contexts to create in an array, 0 = 1 - * @fd_limit_per_thread: nonzero means restrict each service thread to this - * many fds, 0 means the default which is divide the process fd - * limit by the number of threads. - * @timeout_secs: various processes involving network roundtrips in the - * library are protected from hanging forever by timeouts. If - * nonzero, this member lets you set the timeout used in seconds. - * Otherwise a default timeout is used. - */ - -struct lws_context_creation_info { - int port; - const char *iface; - const struct lws_protocols *protocols; - const struct lws_extension *extensions; - const struct lws_token_limits *token_limits; - const char *ssl_private_key_password; - const char *ssl_cert_filepath; - const char *ssl_private_key_filepath; - const char *ssl_ca_filepath; - const char *ssl_cipher_list; - const char *http_proxy_address; - unsigned int http_proxy_port; - int gid; - int uid; - unsigned int options; - void *user; - int ka_time; - int ka_probes; - int ka_interval; -#ifdef LWS_OPENSSL_SUPPORT - SSL_CTX *provided_client_ssl_ctx; -#else /* maintain structure layout either way */ - void *provided_client_ssl_ctx; -#endif - - short max_http_header_data; - short max_http_header_pool; - - unsigned int count_threads; - unsigned int fd_limit_per_thread; - unsigned int timeout_secs; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility - * - * The below is to ensure later library versions with new - * members added above will see 0 (default) even if the app - * was not built against the newer headers. - */ - - void *_unused[8]; -}; - -/** - * struct lws_client_connect_info - parameters to connect with when using - * lws_client_connect_via_info() - * - * @context: lws context to create connection in - * @address: remote address to connect to - * @port: remote port to connect to - * @ssl_connection: nonzero for ssl - * @path: uri path - * @host: content of host header - * @origin: content of origin header - * @protocol: list of ws protocols - * @ietf_version_or_minus_one: currently leave at 0 or -1 - * @userdata: if non-NULL, use this as wsi user_data instead of malloc it - * @client_exts: array of extensions that may be used on connection - */ - -struct lws_client_connect_info { - struct lws_context *context; - const char *address; - int port; - int ssl_connection; - const char *path; - const char *host; - const char *origin; - const char *protocol; - int ietf_version_or_minus_one; - void *userdata; - const struct lws_extension *client_exts; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility - * - * The below is to ensure later library versions with new - * members added above will see 0 (default) even if the app - * was not built against the newer headers. - */ - - void *_unused[4]; -}; - -LWS_VISIBLE LWS_EXTERN void -lws_set_log_level(int level, - void (*log_emit_function)(int level, const char *line)); - -LWS_VISIBLE LWS_EXTERN void -lwsl_emit_syslog(int level, const char *line); - -LWS_VISIBLE LWS_EXTERN struct lws_context * -lws_create_context(struct lws_context_creation_info *info); - -LWS_VISIBLE LWS_EXTERN int -lws_set_proxy(struct lws_context *context, const char *proxy); - -LWS_VISIBLE LWS_EXTERN void -lws_context_destroy(struct lws_context *context); - -LWS_VISIBLE LWS_EXTERN int -lws_service(struct lws_context *context, int timeout_ms); - -LWS_VISIBLE LWS_EXTERN int -lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi); - -LWS_VISIBLE LWS_EXTERN void -lws_cancel_service_pt(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN void -lws_cancel_service(struct lws_context *context); - -LWS_VISIBLE LWS_EXTERN int -lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, - size_t addrlen); - LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token); + +/** + * lws_hdr_total_length: report length of all fragments of a header totalled up + * The returned length does not include the space for a + * terminating '\0' + * + * \param wsi: websocket connection + * \param h: which header index we are interested in + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); + +/** + * lws_hdr_fragment_length: report length of a single fragment of a header + * The returned length does not include the space for a + * terminating '\0' + * + * \param wsi: websocket connection + * \param h: which header index we are interested in + * \param frag_idx: which fragment of h we want to get the length of + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); + +/** + * lws_hdr_copy() - copy a single fragment of the given header to a buffer + * The buffer length len must include space for an additional + * terminating '\0', or it will fail returning -1. + * + * \param wsi: websocket connection + * \param dest: destination buffer + * \param len: length of destination buffer + * \param h: which header index we are interested in + * + * copies the whole, aggregated header, even if it was delivered in + * several actual headers piece by piece + */ LWS_VISIBLE LWS_EXTERN int -lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, - const unsigned char *value, int length, - unsigned char **p, unsigned char *end); -LWS_VISIBLE LWS_EXTERN int -lws_finalize_http_header(struct lws *wsi, unsigned char **p, - unsigned char *end); -LWS_VISIBLE LWS_EXTERN int -lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, - const unsigned char *value, int length, - unsigned char **p, unsigned char *end); -LWS_VISIBLE LWS_EXTERN int -lws_add_http_header_content_length(struct lws *wsi, - unsigned long content_length, - unsigned char **p, unsigned char *end); +lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); + +/** + * lws_hdr_copy_fragment() - copy a single fragment of the given header to a buffer + * The buffer length len must include space for an additional + * terminating '\0', or it will fail returning -1. + * If the requested fragment index is not present, it fails + * returning -1. + * + * \param wsi: websocket connection + * \param dest: destination buffer + * \param len: length of destination buffer + * \param h: which header index we are interested in + * \param frag_idx: which fragment of h we want to copy + * + * Normally this is only useful + * to parse URI arguments like ?x=1&y=2, token index WSI_TOKEN_HTTP_URI_ARGS + * fragment 0 will contain "x=1" and fragment 1 "y=2" + */ LWS_VISIBLE LWS_EXTERN int +lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, + enum lws_token_indexes h, int frag_idx); + +/** + * lws_get_urlarg_by_name() - return pointer to arg value if present + * \param wsi: the connection to check + * \param name: the arg name, like "token=" + * \param buf: the buffer to receive the urlarg (including the name= part) + * \param len: the length of the buffer to receive the urlarg + * + * Returns NULL if not found or a pointer inside buf to just after the + * name= part. + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len); +///@} + +/*! \defgroup HTTP-headers-create HTTP headers: create + * + * ## HTTP headers: Create + * + * These apis allow you to create HTTP response headers in a way compatible with + * both HTTP/1.x and HTTP/2. + * + * They each append to a buffer taking care about the buffer end, which is + * passed in as a pointer. When data is written to the buffer, the current + * position p is updated accordingly. + * + * All of these apis are LWS_WARN_UNUSED_RESULT as they can run out of space + * and fail with nonzero return. + */ +///@{ +/** + * lws_add_http_header_status() - add the HTTP response status code + * + * \param wsi: the connection to check + * \param code: an HTTP code like 200, 404 etc (see enum http_status) + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Adds the initial response code, so should be called first + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end); +/** + * lws_add_http_header_by_name() - append named header and value + * + * \param wsi: the connection to check + * \param name: the hdr name, like "my-header" + * \param value: the value after the = for this header + * \param length: the length of the value + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Appends name: value to the headers + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, + const unsigned char *value, int length, + unsigned char **p, unsigned char *end); +/** + * lws_add_http_header_by_token() - append given header and value + * + * \param wsi: the connection to check + * \param token: the token index for the hdr + * \param value: the value after the = for this header + * \param length: the length of the value + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Appends name=value to the headers, but is able to take advantage of better + * HTTP/2 coding mechanisms where possible. + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, + const unsigned char *value, int length, + unsigned char **p, unsigned char *end); +/** + * lws_add_http_header_by_name() - append content-length helper + * + * \param wsi: the connection to check + * \param content_length: the content length to use + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Appends content-length: content_length to the headers + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_add_http_header_content_length(struct lws *wsi, + unsigned long content_length, + unsigned char **p, unsigned char *end); +/** + * lws_finalize_http_header() - terminate header block + * + * \param wsi: the connection to check + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Indicates no more headers will be added + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_finalize_http_header(struct lws *wsi, unsigned char **p, + unsigned char *end); +///@} +/** \defgroup form-parsing Form Parsing + * \ingroup http + * ##POSTed form parsing functions + * + * These lws_spa (stateful post arguments) apis let you parse and urldecode + * POSTed form arguments, both using simple urlencoded and multipart transfer + * encoding. + * + * It's capable of handling file uploads as well a named input parsing, + * and the apis are the same for both form upload styles. + * + * You feed it a list of parameter names and it creates pointers to the + * urldecoded arguments: file upload parameters pass the file data in chunks to + * a user-supplied callback as they come. + * + * Since it's stateful, it handles the incoming data needing more than one + * POST_BODY callback and has no limit on uploaded file size. + */ +///@{ + +/** enum lws_spa_fileupload_states */ +enum lws_spa_fileupload_states { + LWS_UFS_CONTENT, + /**< a chunk of file content has arrived */ + LWS_UFS_FINAL_CONTENT, + /**< the last chunk (possibly zero length) of file content has arrived */ + LWS_UFS_OPEN + /**< a new file is starting to arrive */ +}; + +/** + * lws_spa_fileupload_cb() - callback to receive file upload data + * + * \param data: opt_data pointer set in lws_spa_create + * \param name: name of the form field being uploaded + * \param filename: original filename from client + * \param buf: start of data to receive + * \param len: length of data to receive + * \param state: information about how this call relates to file + * + * Notice name and filename shouldn't be trusted, as they are passed from + * HTTP provided by the client. + */ +typedef int (*lws_spa_fileupload_cb)(void *data, const char *name, + const char *filename, char *buf, int len, + enum lws_spa_fileupload_states state); + +/** struct lws_spa - opaque urldecode parser capable of handling multipart + * and file uploads */ +struct lws_spa; + +/** + * lws_spa_create() - create urldecode parser + * + * \param wsi: lws connection (used to find Content Type) + * \param param_names: array of form parameter names, like "username" + * \param count_params: count of param_names + * \param max_storage: total amount of form parameter values we can store + * \param opt_cb: NULL, or callback to receive file upload data. + * \param opt_data: NULL, or user pointer provided to opt_cb. + * + * Creates a urldecode parser and initializes it. + * + * opt_cb can be NULL if you just want normal name=value parsing, however + * if one or more entries in your form are bulk data (file transfer), you + * can provide this callback and filter on the name callback parameter to + * treat that urldecoded data separately. The callback should return -1 + * in case of fatal error, and 0 if OK. + */ +LWS_VISIBLE LWS_EXTERN struct lws_spa * +lws_spa_create(struct lws *wsi, const char * const *param_names, + int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, + void *opt_data); + +/** + * lws_spa_process() - parses a chunk of input data + * + * \param spa: the parser object previously created + * \param in: incoming, urlencoded data + * \param len: count of bytes valid at \param in + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_process(struct lws_spa *spa, const char *in, int len); + +/** + * lws_spa_finalize() - indicate incoming data completed + * + * \param spa: the parser object previously created + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_finalize(struct lws_spa *spa); + +/** + * lws_spa_get_length() - return length of parameter value + * + * \param spa: the parser object previously created + * \param n: parameter ordinal to return length of value for + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_get_length(struct lws_spa *spa, int n); + +/** + * lws_spa_get_string() - return pointer to parameter value + * \param spa: the parser object previously created + * \param n: parameter ordinal to return pointer to value for + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_spa_get_string(struct lws_spa *spa, int n); + +/** + * lws_spa_destroy() - destroy parser object + * + * \param spa: the parser object previously created + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_destroy(struct lws_spa *spa); +///@} + +/*! \defgroup urlendec Urlencode and Urldecode + * \ingroup http + * + * ##HTML chunked Substitution + * + * APIs for receiving chunks of text, replacing a set of variable names via + * a callback, and then prepending and appending HTML chunked encoding + * headers. + */ +//@{ + +/** + * lws_urlencode() - like strncpy but with urlencoding + * + * \param escaped: output buffer + * \param string: input buffer ('/0' terminated) + * \param len: output buffer max length + * + * Because urlencoding expands the output string, it's not + * possible to do it in-place, ie, with escaped == string + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_urlencode(char *escaped, const char *string, int len); + +/* + * URLDECODE 1 / 2 + * + * This simple urldecode only operates until the first '\0' and requires the + * data to exist all at once + */ +/** + * lws_urldecode() - like strncpy but with urldecoding + * + * \param string: output buffer + * \param escaped: input buffer ('\0' terminated) + * \param len: output buffer max length + * + * This is only useful for '\0' terminated strings + * + * Since urldecoding only shrinks the output string, it is possible to + * do it in-place, ie, string == escaped + */ +LWS_VISIBLE LWS_EXTERN int +lws_urldecode(char *string, const char *escaped, int len); +///@} +/** + * lws_return_http_status() - Return simple http status + * \param wsi: Websocket instance (available from user callback) + * \param code: Status index, eg, 404 + * \param html_body: User-readable HTML description < 1KB, or NULL + * + * Helper to report HTTP errors back to the client cleanly and + * consistently + */ +LWS_VISIBLE LWS_EXTERN int +lws_return_http_status(struct lws *wsi, unsigned int code, + const char *html_body); + +/** + * lws_http_redirect() - write http redirect into buffer + * + * \param wsi: websocket connection + * \param code: HTTP response code (eg, 301) + * \param loc: where to redirect to + * \param len: length of loc + * \param p: pointer current position in buffer (updated as we write) + * \param end: pointer to end of buffer + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, + unsigned char **p, unsigned char *end); + +/** + * lws_http_transaction_completed() - wait for new http transaction or close + * \param wsi: websocket connection + * + * Returns 1 if the HTTP connection must close now + * Returns 0 and resets connection to wait for new HTTP header / + * transaction if possible + */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi); +///@} + +/*! \defgroup pur Sanitize / purify SQL and JSON helpers + * + * ##Sanitize / purify SQL and JSON helpers + * + * APIs for escaping untrusted JSON and SQL safely before use + */ +//@{ + +/** + * lws_sql_purify() - like strncpy but with escaping for sql quotes + * + * \param escaped: output buffer + * \param string: input buffer ('/0' terminated) + * \param len: output buffer max length + * + * Because escaping expands the output string, it's not + * possible to do it in-place, ie, with escaped == string + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_sql_purify(char *escaped, const char *string, int len); + +/** + * lws_json_purify() - like strncpy but with escaping for json chars + * + * \param escaped: output buffer + * \param string: input buffer ('/0' terminated) + * \param len: output buffer max length + * + * Because escaping expands the output string, it's not + * possible to do it in-place, ie, with escaped == string + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_json_purify(char *escaped, const char *string, int len); +///@} + +/*! \defgroup ev libev helpers + * + * ##libev helpers + * + * APIs specific to libev event loop itegration + */ +///@{ #ifdef LWS_USE_LIBEV typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents); @@ -1496,45 +3048,46 @@ lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint, LWS_VISIBLE LWS_EXTERN int lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi); -LWS_VISIBLE void +LWS_VISIBLE LWS_EXTERN void lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents); #endif /* LWS_USE_LIBEV */ -#ifdef LWS_USE_LIBUV -typedef void (lws_uv_signal_cb_t)(uv_loop_t *l, uv_signal_t *w, int signum); +///@} +/*! \defgroup uv libuv helpers + * + * ##libuv helpers + * + * APIs specific to libuv event loop itegration + */ +///@{ +#ifdef LWS_USE_LIBUV LWS_VISIBLE LWS_EXTERN int lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint, - lws_uv_signal_cb_t *cb); + uv_signal_cb cb); LWS_VISIBLE LWS_EXTERN void lws_libuv_run(const struct lws_context *context, int tsi); -LWS_VISIBLE void +LWS_VISIBLE LWS_EXTERN void lws_libuv_stop(struct lws_context *context); LWS_VISIBLE LWS_EXTERN int -lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, uv_signal_cb cb, int tsi); +lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi); LWS_VISIBLE LWS_EXTERN uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi); -LWS_VISIBLE void -lws_uv_sigint_cb(uv_loop_t *loop, uv_signal_t *watcher, int signum); +LWS_VISIBLE LWS_EXTERN void +lws_uv_sigint_cb(uv_signal_t *watcher, int signum); #endif /* LWS_USE_LIBUV */ +///@} -LWS_VISIBLE LWS_EXTERN int -lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); +/*! \defgroup timeout Connection timeouts -LWS_VISIBLE LWS_EXTERN int -lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, - int tsi); - -LWS_VISIBLE LWS_EXTERN void * -lws_context_user(struct lws_context *context); - -LWS_VISIBLE LWS_EXTERN void * -lws_wsi_user(struct lws *wsi); + APIs related to setting connection timeouts +*/ +//@{ /* * NOTE: These public enums are part of the abi. If you want to add one, @@ -1555,14 +3108,117 @@ enum pending_timeout { PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, + PENDING_TIMEOUT_CGI = 14, + PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, + PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, + PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17, + PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18, /****** add new things just above ---^ ******/ }; +/** + * lws_set_timeout() - marks the wsi as subject to a timeout + * + * You will not need this unless you are doing something special + * + * \param wsi: Websocket connection instance + * \param reason: timeout reason + * \param secs: how many seconds + */ LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); +///@} + +/*! \defgroup sending-data Sending data + + APIs related to writing data on a connection +*/ +//@{ +#if !defined(LWS_SIZEOFPTR) +#define LWS_SIZEOFPTR (sizeof (void *)) +#endif +#if !defined(u_int64_t) +#define u_int64_t unsigned long long +#endif + +#if defined(__x86_64__) +#define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ +#else +#define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ +#endif +#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ + ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) +#define LWS_PRE _LWS_PAD(4 + 10) +/* used prior to 1.7 and retained for backward compatibility */ +#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE +#define LWS_SEND_BUFFER_POST_PADDING 0 /* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +enum lws_write_protocol { + LWS_WRITE_TEXT = 0, + /**< Send a ws TEXT message,the pointer must have LWS_PRE valid + * memory behind it. The receiver expects only valid utf-8 in the + * payload */ + LWS_WRITE_BINARY = 1, + /**< Send a ws BINARY message, the pointer must have LWS_PRE valid + * memory behind it. Any sequence of bytes is valid */ + LWS_WRITE_CONTINUATION = 2, + /**< Continue a previous ws message, the pointer must have LWS_PRE valid + * memory behind it */ + LWS_WRITE_HTTP = 3, + /**< Send HTTP content */ + + /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ + LWS_WRITE_PING = 5, + LWS_WRITE_PONG = 6, + + /* Same as write_http but we know this write ends the transaction */ + LWS_WRITE_HTTP_FINAL = 7, + + /* HTTP2 */ + + LWS_WRITE_HTTP_HEADERS = 8, + /**< Send http headers (http2 encodes this payload and LWS_WRITE_HTTP + * payload differently, http 1.x links also handle this correctly. so + * to be compatible with both in the future,header response part should + * be sent using this regardless of http version expected) + */ + + /****** add new things just above ---^ ******/ + + /* flags */ + + LWS_WRITE_NO_FIN = 0x40, + /**< This part of the message is not the end of the message */ + + LWS_WRITE_CLIENT_IGNORE_XOR_MASK = 0x80 + /**< client packet payload goes out on wire unmunged + * only useful for security tests since normal servers cannot + * decode the content if used */ +}; + + +/** + * lws_write() - Apply protocol then write data to client + * \param wsi: Websocket instance (available from user callback) + * \param buf: The data to send. For data being sent on a websocket + * connection (ie, not default http), this buffer MUST have + * LWS_PRE bytes valid BEFORE the pointer. + * This is so the protocol header data can be added in-situ. + * \param len: Count of the data bytes in the payload starting from buf + * \param protocol: Use LWS_WRITE_HTTP to reply to an http connection, and one + * of LWS_WRITE_BINARY or LWS_WRITE_TEXT to send appropriate + * data on a websockets connection. Remember to allow the extra + * bytes before and after buf if LWS_WRITE_BINARY or LWS_WRITE_TEXT + * are used. + * + * This function provides the way to issue data back to the client + * for both http and websocket protocols. + * * IMPORTANT NOTICE! * * When sending with websocket protocol @@ -1606,95 +3262,163 @@ lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); * to the address immediately after the padding won't cause an unaligned access * error. Sometimes for performance reasons the recommended padding is even * larger than sizeof(void *). + * + * In the case of sending using websocket protocol, be sure to allocate + * valid storage before and after buf as explained above. This scheme + * allows maximum efficiency of sending data and protocol in a single + * packet while not burdening the user code with any protocol knowledge. + * + * Return may be -1 for a fatal error needing connection close, or a + * positive number reflecting the amount of bytes actually sent. This + * can be less than the requested number of bytes due to OS memory + * pressure at any given time. */ - -#if !defined(LWS_SIZEOFPTR) -#define LWS_SIZEOFPTR (sizeof (void *)) -#endif -#if !defined(u_int64_t) -#define u_int64_t unsigned long long -#endif - -#if __x86_64__ -#define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ -#else -#define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ -#endif -#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ - ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) -#define LWS_PRE _LWS_PAD(4 + 10) -/* used prior to 1.7 and retained for backward compatibility */ -#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE -#define LWS_SEND_BUFFER_POST_PADDING 0 - LWS_VISIBLE LWS_EXTERN int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol); -/** - * lws_close_reason - Set reason and aux data to send with Close packet - * If you are going to return nonzero from the callback - * requesting the connection to close, you can optionally - * call this to set the reason the peer will be told if - * possible. - * - * @wsi: The websocket connection to set the close reason on - * @status: A valid close status from websocket standard - * @buf: NULL or buffer containing up to 124 bytes of auxiliary data - * @len: Length of data in @buf to send - */ -LWS_VISIBLE LWS_EXTERN void -lws_close_reason(struct lws *wsi, enum lws_close_status status, - unsigned char *buf, size_t len); - /* helper for case where buffer may be const */ #define lws_write_http(wsi, buf, len) \ lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) -LWS_VISIBLE LWS_EXTERN int -lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, - const char *other_headers, int other_headers_len); -LWS_VISIBLE LWS_EXTERN int -lws_serve_http_file_fragment(struct lws *wsi); +///@} -LWS_VISIBLE LWS_EXTERN int -lws_return_http_status(struct lws *wsi, unsigned int code, - const char *html_body); - -LWS_VISIBLE LWS_EXTERN const struct lws_protocols * -lws_get_protocol(struct lws *wsi); +/** \defgroup callback-when-writeable Callback when writeable + * + * ##Callback When Writeable + * + * lws can only write data on a connection when it is able to accept more + * data without blocking. + * + * So a basic requirement is we should only use the lws_write() apis when the + * connection we want to write on says that he can accept more data. + * + * When lws cannot complete your send at the time, it will buffer the data + * and send it in the background, suppressing any further WRITEABLE callbacks + * on that connection until it completes. So it is important to write new + * things in a new writeable callback. + * + * These apis reflect the various ways we can indicate we would like to be + * called back when one or more connections is writeable. + */ +///@{ +/** + * lws_callback_on_writable() - Request a callback when this socket + * becomes able to be written to without + * blocking + * + * \param wsi: Websocket connection instance to get callback for + * + * - Which: only this wsi + * - When: when the individual connection becomes writeable + * - What: LWS_CALLBACK_*_WRITEABLE + */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi); +/** + * lws_callback_on_writable_all_protocol() - Request a callback for all + * connections on same vhost using the given protocol when it + * becomes possible to write to each socket without + * blocking in turn. + * + * \param context: lws_context + * \param protocol: Protocol whose connections will get callbacks + * + * - Which: connections using this protocol on ANY VHOST + * - When: when the individual connection becomes writeable + * - What: LWS_CALLBACK_*_WRITEABLE + */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol); +/** + * lws_callback_on_writable_all_protocol_vhost() - Request a callback for + * all connections using the given protocol when it + * becomes possible to write to each socket without + * blocking in turn. + * + * \param vhost: Only consider connections on this lws_vhost + * \param protocol: Protocol whose connections will get callbacks + * + * - Which: connections using this protocol on GIVEN VHOST ONLY + * - When: when the individual connection becomes writeable + * - What: LWS_CALLBACK_*_WRITEABLE + */ +LWS_VISIBLE LWS_EXTERN int +lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, + const struct lws_protocols *protocol); + +/** + * lws_callback_all_protocol() - Callback all connections using + * the given protocol with the given reason + * + * \param context: lws_context + * \param protocol: Protocol whose connections will get callbacks + * \param reason: Callback reason index + * + * - Which: connections using this protocol on ALL VHOSTS + * - When: when the individual connection becomes writeable + * - What: reason + */ LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason); +/** + * lws_callback_all_protocol_vhost() - Callback all connections using + * the given protocol with the given reason + * + * \param vh: Vhost whose connections will get callbacks + * \param protocol: Which protocol to match + * \param reason: Callback reason index + * + * - Which: connections using this protocol on GIVEN VHOST ONLY + * - When: now + * - What: reason + */ +LWS_VISIBLE LWS_EXTERN int +lws_callback_all_protocol_vhost(struct lws_vhost *vh, + const struct lws_protocols *protocol, int reason); + +/** + * lws_callback_vhost_protocols() - Callback all protocols enabled on a vhost + * with the given reason + * + * \param wsi: wsi whose vhost will get callbacks + * \param reason: Callback reason index + * \param in: in argument to callback + * \param len: len argument to callback + * + * - Which: connections using this protocol on same VHOST as wsi ONLY + * - When: now + * - What: reason + */ +LWS_VISIBLE LWS_EXTERN int +lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len); + +LWS_VISIBLE LWS_EXTERN int +lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, + void *user, void *in, size_t len); + +/** + * lws_get_socket_fd() - returns the socket file descriptor + * + * You will not need this unless you are doing something special + * + * \param wsi: Websocket connection instance + */ LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd(struct lws *wsi); -LWS_VISIBLE LWS_EXTERN int -lws_is_final_fragment(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN unsigned char -lws_get_reserved_bits(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int -lws_rx_flow_control(struct lws *wsi, int enable); - -LWS_VISIBLE LWS_EXTERN void -lws_rx_flow_allow_all_protocol(const struct lws_context *context, - const struct lws_protocols *protocol); - -LWS_VISIBLE LWS_EXTERN size_t -lws_remaining_packet_payload(struct lws *wsi); - -/* +/** + * lws_get_peer_write_allowance() - get the amount of data writeable to peer + * if known + * + * \param wsi: Websocket connection instance + * * if the protocol does not have any guidance, returns -1. Currently only * http2 connections get send window information from this API. But your code * should use it so it can work properly with any protocol. @@ -1704,7 +3428,7 @@ lws_remaining_packet_payload(struct lws *wsi); * of buffer space your OS can accept on this connection for a write action. * * This number represents the maximum you could send to the peer or intermediary - * on this connection right now without it complaining. + * on this connection right now without the protocol complaining. * * lws manages accounting for send window updates and payload writes * automatically, so this number reflects the situation at the peer or @@ -1712,126 +3436,512 @@ lws_remaining_packet_payload(struct lws *wsi); */ LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi); +///@} -/* deprecated, use lws_client_connect_via_info() */ -LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT -lws_client_connect(struct lws_context *clients, const char *address, - int port, int ssl_connection, const char *path, - const char *host, const char *origin, const char *protocol, - int ietf_version_or_minus_one) LWS_WARN_DEPRECATED; -/* deprecated, use lws_client_connect_via_info() */ -LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT -lws_client_connect_extended(struct lws_context *clients, const char *address, - int port, int ssl_connection, const char *path, - const char *host, const char *origin, - const char *protocol, int ietf_version_or_minus_one, - void *userdata) LWS_WARN_DEPRECATED; +/** + * lws_rx_flow_control() - Enable and disable socket servicing for + * received packets. + * + * If the output side of a server process becomes choked, this allows flow + * control for the input side. + * + * \param wsi: Websocket connection instance to get callback for + * \param enable: 0 = disable read servicing for this connection, 1 = enable + */ +LWS_VISIBLE LWS_EXTERN int +lws_rx_flow_control(struct lws *wsi, int enable); -LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT -lws_client_connect_via_info(struct lws_client_connect_info * ccinfo); +/** + * lws_rx_flow_allow_all_protocol() - Allow all connections with this protocol to receive + * + * When the user server code realizes it can accept more input, it can + * call this to have the RX flow restriction removed from all connections using + * the given protocol. + * \param context: lws_context + * \param protocol: all connections using this protocol will be allowed to receive + */ +LWS_VISIBLE LWS_EXTERN void +lws_rx_flow_allow_all_protocol(const struct lws_context *context, + const struct lws_protocols *protocol); +/** + * lws_remaining_packet_payload() - Bytes to come before "overall" + * rx packet is complete + * \param wsi: Websocket instance (available from user callback) + * + * This function is intended to be called from the callback if the + * user code is interested in "complete packets" from the client. + * libwebsockets just passes through payload as it comes and issues a buffer + * additionally when it hits a built-in limit. The LWS_CALLBACK_RECEIVE + * callback handler can use this API to find out if the buffer it has just + * been given is the last piece of a "complete packet" from the client -- + * when that is the case lws_remaining_packet_payload() will return + * 0. + * + * Many protocols won't care becuse their packets are always small. + */ +LWS_VISIBLE LWS_EXTERN size_t +lws_remaining_packet_payload(struct lws *wsi); + + +/** \defgroup sock-adopt Socket adoption helpers + * ##Socket adoption helpers + * + * When integrating with an external app with its own event loop, these can + * be used to accept connections from someone else's listening socket. + * + * When using lws own event loop, these are not needed. + */ +///@{ + +/** + * lws_adopt_socket() - adopt foreign socket as if listen socket accepted it + * \param context: lws context + * \param accept_fd: fd of already-accepted socket to adopt + * + * Either returns new wsi bound to accept_fd, or closes accept_fd and + * returns NULL, having cleaned up any new wsi pieces. + * + * LWS adopts the socket in http serving mode, it's ready to accept an upgrade + * to ws or just serve http. + */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd); +/** + * lws_adopt_socket_readbuf() - adopt foreign socket and first rx as if listen socket accepted it + * \param context: lws context + * \param accept_fd: fd of already-accepted socket to adopt + * \param readbuf: NULL or pointer to data that must be drained before reading from + * accept_fd + * \param len: The length of the data held at \param readbuf + * + * Either returns new wsi bound to accept_fd, or closes accept_fd and + * returns NULL, having cleaned up any new wsi pieces. + * + * LWS adopts the socket in http serving mode, it's ready to accept an upgrade + * to ws or just serve http. + * + * If your external code did not already read from the socket, you can use + * lws_adopt_socket() instead. + * + * This api is guaranteed to use the data at \param readbuf first, before reading from + * the socket. + * + * readbuf is limited to the size of the ah rx buf, currently 2048 bytes. + */ +LWS_VISIBLE LWS_EXTERN struct lws * +lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, + const char *readbuf, size_t len); +///@} +/** \defgroup net Network related helper APIs + * ##Network related helper APIs + * + * These wrap miscellaneous useful network-related functions + */ +///@{ + +/** + * lws_canonical_hostname() - returns this host's hostname + * + * This is typically used by client code to fill in the host parameter + * when making a client connection. You can only call it after the context + * has been created. + * + * \param context: Websocket context + */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context); - +/** + * lws_get_peer_addresses() - Get client address information + * \param wsi: Local struct lws associated with + * \param fd: Connection socket descriptor + * \param name: Buffer to take client address name + * \param name_len: Length of client address name buffer + * \param rip: Buffer to take client address IP dotted quad + * \param rip_len: Length of client address IP buffer + * + * This function fills in name and rip with the name and IP of + * the client connected with socket descriptor fd. Names may be + * truncated if there is not enough room. If either cannot be + * determined, they will be returned as valid zero-length strings. + */ LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len); +/** + * lws_get_peer_simple() - Get client address information without RDNS + * + * \param wsi: Local struct lws associated with + * \param name: Buffer to take client address name + * \param namelen: Length of client address name buffer + * + * This provides a 123.123.123.123 type IP address in name from the + * peer that has connected to wsi + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_get_peer_simple(struct lws *wsi, char *name, int namelen); +#ifndef LWS_WITH_ESP8266 +/** + * lws_interface_to_sa() - Convert interface name or IP to sockaddr struct + * + * \param ipv6: Allow IPV6 addresses + * \param ifname: Interface name or IP + * \param addr: struct sockaddr_in * to be written + * \param addrlen: Length of addr + * + * This converts a textual network interface name to a sockaddr usable by + * other network functions + */ LWS_VISIBLE LWS_EXTERN int -lws_get_random(struct lws_context *context, void *buf, int len); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_daemonize(const char *_lock_path); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_send_pipe_choked(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_partial_buffered(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_frame_is_binary(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int -lws_is_ssl(struct lws *wsi); -#ifdef LWS_SHA1_USE_OPENSSL_NAME -#define lws_SHA1 SHA1 -#else -LWS_VISIBLE LWS_EXTERN unsigned char * -lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); +lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, + size_t addrlen); +///@} #endif -LWS_VISIBLE LWS_EXTERN int -lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); +/** \defgroup misc Miscellaneous APIs +* ##Miscellaneous APIs +* +* Various APIs outside of other categories +*/ +///@{ +/** + * lws_snprintf(): snprintf that truncates the returned length too + * + * \param str: destination buffer + * \param size: bytes left in destination buffer + * \param format: format string + * \param ...: args for format + * + * This lets you correctly truncate buffers by concatenating lengths, if you + * reach the limit the reported length doesn't exceed the limit. + */ LWS_VISIBLE LWS_EXTERN int -lws_b64_decode_string(const char *in, char *out, int out_size); +lws_snprintf(char *str, size_t size, const char *format, ...); +/** + * lws_get_random(): fill a buffer with platform random data + * + * \param context: the lws context + * \param buf: buffer to fill + * \param len: how much to fill + * + * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if + * it's interested to see if the frame it's dealing with was sent in binary + * mode. + */ +LWS_VISIBLE LWS_EXTERN int +lws_get_random(struct lws_context *context, void *buf, int len); +/** + * lws_daemonize(): fill a buffer with platform random data + * + * \param _lock_path: the filepath to write the lock file + * + * Spawn lws as a background process, taking care of various things + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_daemonize(const char *_lock_path); +/** + * lws_get_library_version(): return string describing the version of lws + * + * On unix, also includes the git describe + */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_get_library_version(void); +/** + * lws_wsi_user() - get the user data associated with the connection + * \param wsi: lws connection + * + * Not normally needed since it's passed into the callback + */ +LWS_VISIBLE LWS_EXTERN void * +lws_wsi_user(struct lws *wsi); + +/** + * lws_parse_uri: cut up prot:/ads:port/path into pieces + * Notice it does so by dropping '\0' into input string + * and the leading / on the path is consequently lost + * + * \param p: incoming uri string.. will get written to + * \param prot: result pointer for protocol part (https://) + * \param ads: result pointer for address part + * \param port: result pointer for port part + * \param path: result pointer for path part + */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path); -/* - * Access to http headers - * - * In lws the client http headers are temporarily malloc'd only for the - * duration of the http part of the handshake. It's because in most cases, - * the header content is ignored for the whole rest of the connection lifetime - * and would then just be taking up space needlessly. - * - * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time - * the http headers are still allocated, you can use these apis then to - * look at and copy out interesting header content (cookies, etc) - * - * Notice that the header total length reported does not include a terminating - * '\0', however you must allocate for it when using the _copy apis. So the - * length reported for a header containing "123" is 3, but you must provide - * a buffer of length 4 so that "123\0" may be copied into it, or the copy - * will fail with a nonzero return code. +/** + * lws_now_secs(): return seconds since 1970-1-1 */ +LWS_VISIBLE LWS_EXTERN unsigned long +lws_now_secs(void); -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); - -/* - * copies the whole, aggregated header, even if it was delivered in - * several actual headers piece by piece +/** + * lws_get_context - Allow geting lws_context from a Websocket connection + * instance + * + * With this function, users can access context in the callback function. + * Otherwise users may have to declare context as a global variable. + * + * \param wsi: Websocket connection instance */ -LWS_VISIBLE LWS_EXTERN int -lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); - -/* - * copies only fragment frag_idx of a header. Normally this is only useful - * to parse URI arguments like ?x=1&y=2, token index WSI_TOKEN_HTTP_URI_ARGS - * fragment 0 will contain "x=1" and fragment 1 "y=2" - */ -LWS_VISIBLE LWS_EXTERN int -lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, - enum lws_token_indexes h, int frag_idx); - - -/* get the active file operations struct */ -LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT -lws_get_fops(struct lws_context *context); - LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi); +/** + * lws_get_count_threads(): how many service threads the context uses + * + * \param context: the lws context + * + * By default this is always 1, if you asked for more than lws can handle it + * will clip the number of threads. So you can use this to find out how many + * threads are actually in use. + */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context); +/** + * lws_get_parent() - get parent wsi or NULL + * \param wsi: lws connection + * + * Specialized wsi like cgi stdin/out/err are associated to a parent wsi, + * this allows you to get their parent. + */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_get_parent(const struct lws *wsi); + +/** + * lws_get_child() - get child wsi or NULL + * \param wsi: lws connection + * + * Allows you to find a related wsi from the parent wsi. + */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_get_child(const struct lws *wsi); + + /* - * Wsi-associated File Operations access helpers + * \deprecated DEPRECATED Note: this is not normally needed as a user api. + * It's provided in case it is + * useful when integrating with other app poll loop service code. + */ +LWS_VISIBLE LWS_EXTERN int +lws_read(struct lws *wsi, unsigned char *buf, size_t len); + +/** + * lws_set_allocator() - custom allocator support + * + * \param realloc + * + * Allows you to replace the allocator (and deallocator) used by lws + */ +LWS_VISIBLE LWS_EXTERN void +lws_set_allocator(void *(*realloc)(void *ptr, size_t size)); +///@} + +/** \defgroup wsstatus Websocket status APIs + * ##Websocket connection status APIs + * + * These provide information about ws connection or message status + */ +///@{ +/** + * lws_send_pipe_choked() - tests if socket is writable or not + * \param wsi: lws connection + * + * Allows you to check if you can write more on the socket + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_send_pipe_choked(struct lws *wsi); + +/** + * lws_is_final_fragment() - tests if last part of ws message + * \param wsi: lws connection + */ +LWS_VISIBLE LWS_EXTERN int +lws_is_final_fragment(struct lws *wsi); + +/** + * lws_get_reserved_bits() - access reserved bits of ws frame + * \param wsi: lws connection + */ +LWS_VISIBLE LWS_EXTERN unsigned char +lws_get_reserved_bits(struct lws *wsi); + +/** + * lws_partial_buffered() - find out if lws buffered the last write + * \param wsi: websocket connection to check + * + * Returns 1 if you cannot use lws_write because the last + * write on this connection is still buffered, and can't be cleared without + * returning to the service loop and waiting for the connection to be + * writeable again. + * + * If you will try to do >1 lws_write call inside a single + * WRITEABLE callback, you must check this after every write and bail if + * set, ask for a new writeable callback and continue writing from there. + * + * This is never set at the start of a writeable callback, but any write + * may set it. + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_partial_buffered(struct lws *wsi); + +/** + * lws_frame_is_binary(): true if the current frame was sent in binary mode + * + * \param wsi: the connection we are inquiring about + * + * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if + * it's interested to see if the frame it's dealing with was sent in binary + * mode. + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_frame_is_binary(struct lws *wsi); + +/** + * lws_is_ssl() - Find out if connection is using SSL + * \param wsi: websocket connection to check + * + * Returns 0 if the connection is not using SSL, 1 if using SSL and + * using verified cert, and 2 if using SSL but the cert was not + * checked (appears for client wsi told to skip check on connection) + */ +LWS_VISIBLE LWS_EXTERN int +lws_is_ssl(struct lws *wsi); +/** + * lws_is_cgi() - find out if this wsi is running a cgi process + * \param wsi: lws connection + */ +LWS_VISIBLE LWS_EXTERN int +lws_is_cgi(struct lws *wsi); +///@} + + +/** \defgroup sha SHA and B64 helpers + * ##SHA and B64 helpers + * + * These provide SHA-1 and B64 helper apis + */ +///@{ +#ifdef LWS_SHA1_USE_OPENSSL_NAME +#define lws_SHA1 SHA1 +#else +/** + * lws_SHA1(): make a SHA-1 digest of a buffer + * + * \param d: incoming buffer + * \param n: length of incoming buffer + * \param md: buffer for message digest (must be >= 20 bytes) + * + * Reduces any size buffer into a 20-byte SHA-1 hash. + */ +LWS_VISIBLE LWS_EXTERN unsigned char * +lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); +#endif +/** + * lws_b64_encode_string(): encode a string into base 64 + * + * \param in: incoming buffer + * \param in_len: length of incoming buffer + * \param out: result buffer + * \param out_size: length of result buffer + * + * Encodes a string using b64 + */ +LWS_VISIBLE LWS_EXTERN int +lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); +/** + * lws_b64_decode_string(): decode a string from base 64 + * + * \param in: incoming buffer + * \param out: result buffer + * \param out_size: length of result buffer + * + * Decodes a string using b64 + */ +LWS_VISIBLE LWS_EXTERN int +lws_b64_decode_string(const char *in, char *out, int out_size); +///@} + + +/*! \defgroup cgi cgi handling + * + * ##CGI handling + * + * These functions allow low-level control over stdin/out/err of the cgi. + * + * However for most cases, binding the cgi to http in and out, the default + * lws implementation already does the right thing. + */ +#ifdef LWS_WITH_CGI +enum lws_enum_stdinouterr { + LWS_STDIN = 0, + LWS_STDOUT = 1, + LWS_STDERR = 2, +}; + +enum lws_cgi_hdr_state { + LCHS_HEADER, + LCHS_CR1, + LCHS_LF1, + LCHS_CR2, + LCHS_LF2, + LHCS_PAYLOAD, + LCHS_SINGLE_0A, +}; + +struct lws_cgi_args { + struct lws **stdwsi; /**< get fd with lws_get_socket_fd() */ + enum lws_enum_stdinouterr ch; /**< channel index */ + unsigned char *data; /**< for messages with payload */ + enum lws_cgi_hdr_state hdr_state; /**< track where we are in cgi headers */ + int len; /**< length */ +}; + + +/** + * lws_cgi: spawn network-connected cgi process + * + * \param wsi: connection to own the process + * \param exec_array: array of "exec-name" "arg1" ... "argn" NULL + * \param script_uri_path_len: how many chars on the left of the uri are the path to the cgi + * \param timeout_secs: seconds script should be allowed to run + * \param mp_cgienv: pvo list with per-vhost cgi options to put in env + */ +LWS_VISIBLE LWS_EXTERN int +lws_cgi(struct lws *wsi, const char * const *exec_array, + int script_uri_path_len, int timeout_secs, + const struct lws_protocol_vhost_options *mp_cgienv); + +/** + * lws_cgi_write_split_stdout_headers: write cgi output accounting for header part + * + * \param wsi: connection to own the process + */ +LWS_VISIBLE LWS_EXTERN int +lws_cgi_write_split_stdout_headers(struct lws *wsi); + +/** + * lws_cgi_kill: terminate cgi process associated with wsi + * + * \param wsi: connection to own the process + */ +LWS_VISIBLE LWS_EXTERN int +lws_cgi_kill(struct lws *wsi); +#endif +///@} + + +/*! \defgroup fops file operation wrapping + * + * ##File operation wrapping * * Use these helper functions if you want to access a file from the perspective * of a specific wsi, which is usually the case. If you just want contextless @@ -1844,7 +3954,51 @@ lws_get_count_threads(struct lws_context *context); * The advantage from all this is user code can be portable for file operations * without having to deal with differences between platforms. */ +//@{ +/** struct lws_plat_file_ops - Platform-specific file operations + * + * These provide platform-agnostic ways to deal with filesystem access in the + * library and in the user code. + */ +struct lws_plat_file_ops { + lws_filefd_type (*open)(struct lws *wsi, const char *filename, + unsigned long *filelen, int flags); + /**< Open file (always binary access if plat supports it) + * filelen is filled on exit to be the length of the file + * flags should be set to O_RDONLY or O_RDWR */ + int (*close)(struct lws *wsi, lws_filefd_type fd); + /**< close file */ + unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd, + long offset_from_cur_pos); + /**< seek from current position */ + int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len); + /**< Read from file, on exit *amount is set to amount actually read */ + int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len); + /**< Write to file, on exit *amount is set to amount actually written */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** + * lws_get_fops() - get current file ops + * + * \param context: context + */ +LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT +lws_get_fops(struct lws_context *context); + +/** + * lws_plat_file_open() - file open operations + * + * \param wsi: connection doing the opening + * \param filename: filename to open + * \param filelen: length of file (filled in by call) + * \param flags: open flags + */ static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT lws_plat_file_open(struct lws *wsi, const char *filename, unsigned long *filelen, int flags) @@ -1853,18 +4007,39 @@ lws_plat_file_open(struct lws *wsi, const char *filename, filelen, flags); } +/** + * lws_plat_file_close() - close file + * + * \param wsi: connection opened by + * \param fd: file descriptor + */ static LWS_INLINE int lws_plat_file_close(struct lws *wsi, lws_filefd_type fd) { return lws_get_fops(lws_get_context(wsi))->close(wsi, fd); } +/** + * lws_plat_file_seek_cur() - close file + * + * \param wsi: connection opened by + * \param fd: file descriptor + * \param offset: position to seek to + */ static LWS_INLINE unsigned long lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset) { return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset); } - +/** + * lws_plat_file_read() - read from file + * + * \param wsi: connection opened by + * \param fd: file descriptor + * \param amount: how much to read (rewritten by call) + * \param buf: buffer to write to + * \param len: max length + */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) @@ -1872,7 +4047,15 @@ lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf, len); } - +/** + * lws_plat_file_write() - write from file + * + * \param wsi: connection opened by + * \param fd: file descriptor + * \param amount: how much to write (rewritten by call) + * \param buf: buffer to read from + * \param len: max length + */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) @@ -1880,34 +4063,131 @@ lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf, len); } +//@} -/* - * Note: this is not normally needed as a user api. It's provided in case it is - * useful when integrating with other app poll loop service code. +/** \defgroup smtp + * \ingroup lwsapi + * ##SMTP related functions + * + * These apis let you communicate with a local SMTP server to send email from + * lws. It handles all the SMTP sequencing and protocol actions. + * + * Your system should have postfix, sendmail or another MTA listening on port + * 25 and able to send email using the "mail" commandline app. Usually distro + * MTAs are configured for this by default. + * + * It runs via its own libuv events if initialized (which requires giving it + * a libuv loop to attach to). + * + * It operates using three callbacks, on_next() queries if there is a new email + * to send, on_get_body() asks for the body of the email, and on_sent() is + * called after the email is successfully sent. + * + * To use it + * + * - create an lws_email struct + * + * - initialize data, loop, the email_* strings, max_content_size and + * the callbacks + * + * - call lws_email_init() + * + * When you have at least one email to send, call lws_email_check() to + * schedule starting to send it. + */ +//@{ +#ifdef LWS_WITH_SMTP + +/** enum lwsgs_smtp_states - where we are in SMTP protocol sequence */ +enum lwsgs_smtp_states { + LGSSMTP_IDLE, /**< awaiting new email */ + LGSSMTP_CONNECTING, /**< opening tcp connection to MTA */ + LGSSMTP_CONNECTED, /**< tcp connection to MTA is connected */ + LGSSMTP_SENT_HELO, /**< sent the HELO */ + LGSSMTP_SENT_FROM, /**< sent FROM */ + LGSSMTP_SENT_TO, /**< sent TO */ + LGSSMTP_SENT_DATA, /**< sent DATA request */ + LGSSMTP_SENT_BODY, /**< sent the email body */ + LGSSMTP_SENT_QUIT, /**< sent the session quit */ +}; + +/** struct lws_email - abstract context for performing SMTP operations */ +struct lws_email { + void *data; + /**< opaque pointer set by user code and available to the callbacks */ + uv_loop_t *loop; + /**< the libuv loop we will work on */ + + char email_smtp_ip[32]; /**< Fill before init, eg, "127.0.0.1" */ + char email_helo[32]; /**< Fill before init, eg, "myserver.com" */ + char email_from[100]; /**< Fill before init or on_next */ + char email_to[100]; /**< Fill before init or on_next */ + + unsigned int max_content_size; + /**< largest possible email body size */ + + /* Fill all the callbacks before init */ + + int (*on_next)(struct lws_email *email); + /**< (Fill in before calling lws_email_init) + * called when idle, 0 = another email to send, nonzero is idle. + * If you return 0, all of the email_* char arrays must be set + * to something useful. */ + int (*on_sent)(struct lws_email *email); + /**< (Fill in before calling lws_email_init) + * called when transfer of the email to the SMTP server was + * successful, your callback would remove the current email + * from its queue */ + int (*on_get_body)(struct lws_email *email, char *buf, int len); + /**< (Fill in before calling lws_email_init) + * called when the body part of the queued email is about to be + * sent to the SMTP server. */ + + + /* private things */ + uv_timer_t timeout_email; /**< private */ + enum lwsgs_smtp_states estate; /**< private */ + uv_connect_t email_connect_req; /**< private */ + uv_tcp_t email_client; /**< private */ + time_t email_connect_started; /**< private */ + char email_buf[256]; /**< private */ + char *content; /**< private */ +}; + +/** + * lws_email_init() - Initialize a struct lws_email + * + * \param email: struct lws_email to init + * \param loop: libuv loop to use + * \param max_content: max email content size + * + * Prepares a struct lws_email for use ending SMTP */ LWS_VISIBLE LWS_EXTERN int -lws_read(struct lws *wsi, unsigned char *buf, size_t len); +lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content); -#ifndef LWS_NO_EXTENSIONS -/* Deprecated +/** + * lws_email_check() - Request check for new email * - * There is no longer a set internal extensions table. The table is provided - * by user code along with application-specific settings. See the test - * client and server for how to do. - */ -static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension * -lws_get_internal_extensions() { return NULL; } -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, - void *ext_user, const struct lws_ext_options *opts, - const char *o, int len); -#endif - -/* - * custom allocator support + * \param email: struct lws_email context to check + * + * Schedules a check for new emails in 1s... call this when you have queued an + * email for send. */ LWS_VISIBLE LWS_EXTERN void -lws_set_allocator(void *(*realloc)(void *ptr, size_t size)); +lws_email_check(struct lws_email *email); +/** + * lws_email_destroy() - stop using the struct lws_email + * + * \param email: the struct lws_email context + * + * Stop sending email using email and free allocations + */ +LWS_VISIBLE LWS_EXTERN void +lws_email_destroy(struct lws_email *email); + +#endif +//@} #ifdef __cplusplus } diff --git a/android/arm64-v8a/include/websockets/lws_config.h b/android/arm64-v8a/include/websockets/lws_config.h index d55fd8e1..bf49e46e 100644 --- a/android/arm64-v8a/include/websockets/lws_config.h +++ b/android/arm64-v8a/include/websockets/lws_config.h @@ -6,6 +6,8 @@ #endif #endif +#define LWS_INSTALL_DATADIR "/Users/james/Project/cocos2d-x-3rd-party-libs-src/contrib/install-android/arm/share" + /* Define to 1 to use wolfSSL/CyaSSL as a replacement for OpenSSL. * LWS_OPENSSL_SUPPORT needs to be set also for this to work. */ /* #undef USE_WOLFSSL */ @@ -14,20 +16,27 @@ (older) CyaSSL library */ /* #undef USE_OLD_CYASSL */ -/* The Libwebsocket version */ -#define LWS_LIBRARY_VERSION "1.7.8" +/* #undef LWS_USE_MBEDTLS */ +/* #undef LWS_USE_POLARSSL */ +/* #undef LWS_WITH_ESP8266 */ -#define LWS_LIBRARY_VERSION_MAJOR 1 -#define LWS_LIBRARY_VERSION_MINOR 7 -#define LWS_LIBRARY_VERSION_PATCH 8 +/* #undef LWS_WITH_PLUGINS */ +/* #undef LWS_WITH_NO_LOGS */ + +/* The Libwebsocket version */ +#define LWS_LIBRARY_VERSION "2.1.0" + +#define LWS_LIBRARY_VERSION_MAJOR 2 +#define LWS_LIBRARY_VERSION_MINOR 1 +#define LWS_LIBRARY_VERSION_PATCH 0 /* LWS_LIBRARY_VERSION_NUMBER looks like 1005001 for e.g. version 1.5.1 */ #define LWS_LIBRARY_VERSION_NUMBER (LWS_LIBRARY_VERSION_MAJOR*1000000)+(LWS_LIBRARY_VERSION_MINOR*1000)+LWS_LIBRARY_VERSION_PATCH /* The current git commit hash that we're building from */ -#define LWS_BUILD_HASH "linwenhai@LindeMacBook-Pro.local-v3.4-49-g9369eea" +#define LWS_BUILD_HASH "james@James-Chen.local-v3.4-138-g60b1a6f" /* Build with OpenSSL support */ -/* #undef LWS_OPENSSL_SUPPORT */ +#define LWS_OPENSSL_SUPPORT /* The client should load and trust CA root certs it finds in the OS */ #define LWS_SSL_CLIENT_USE_OS_CA_CERTS @@ -47,6 +56,9 @@ /* Build with support for ipv6 */ #define LWS_USE_IPV6 +/* Build with support for UNIX domain socket */ +/* #undef LWS_USE_UNIX_SOCK */ + /* Build with support for HTTP2 */ /* #undef LWS_USE_HTTP2 */ @@ -73,11 +85,33 @@ /* SSL server using ECDH certificate */ /* #undef LWS_SSL_SERVER_WITH_ECDH_CERT */ +#define LWS_HAVE_SSL_CTX_set1_param +#define LWS_HAVE_X509_VERIFY_PARAM_set1_host + +/* #undef LWS_HAVE_UV_VERSION_H */ + +/* CGI apis */ +/* #undef LWS_WITH_CGI */ /* whether the Openssl is recent enough, and / or built with, ecdh */ -/* #undef LWS_HAVE_OPENSSL_ECDH_H */ +#define LWS_HAVE_OPENSSL_ECDH_H + +/* HTTP Proxy support */ +/* #undef LWS_WITH_HTTP_PROXY */ + +/* Http access log support */ +/* #undef LWS_WITH_ACCESS_LOG */ +/* #undef LWS_WITH_SERVER_STATUS */ + +/* #undef LWS_WITH_STATEFUL_URLDECODE */ /* Maximum supported service threads */ #define LWS_MAX_SMP 32 +/* Lightweight JSON Parser */ +/* #undef LWS_WITH_LEJP */ + +/* SMTP */ +/* #undef LWS_WITH_SMTP */ + diff --git a/android/arm64-v8a/libcrypto.a b/android/arm64-v8a/libcrypto.a new file mode 100644 index 0000000000000000000000000000000000000000..0d64569482f62910871105fda6b958d942570ecf GIT binary patch literal 4368192 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

o_as{L*7Qo{ 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

!4#NnE)kTC=ojjfbn2EUEl*?W*N|UfBw{ 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 z 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%0DjN;JNY#LPaj(w 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 ZnGQ}SEw_D5 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

#r|wSoGl7+wSf2v#XcA`sCU!FT8Wz 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 z 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 z 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 z

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≻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%0DW?kg+*$uc8i?mzA{Wlb>@xDXa_P2RI5d9Bm zEnDkj9}WW&VcQK2G2UrY(%*}%{h;@X`WNoQarfa_YgOp@wj1(d zjPp_4T{3W?>QfvUxNOe*xL+1>jCWUgl-mQpD9A_oYu@ohLB5B$J@`yPe$*>CJ0w0o ze^}FexV2p!MHv~oet!NA@D0O$NTtjgvT=U?t12?8t4;oT) zFjZYYbbX)v%xKx*AshRENBrtajQ`U{R1F^Ch0ikl@yM^}A3AjTv}JQT>J;TBmZ?>Ea+*xPc8h+m~VYKfD&Yo9_b}owevwaHzm-eVC8+=CJarB68 z6W*MZw){HqVtc^0fcFyeyYP=wdMrPMwt#H~+X>q~F#N64BF!y7<##CW#0s@u<;Q<> zOR+i)S>hfdb2lB*_}MFT`QOYtdTe`wv5sy}O3~lg_M|=R-vij#v-5tT?OuFA9Czdl zLRuJZ=Upv>&S`7joHP^ho`!f|yWHM!c=nd(6KziPY=7aBp6J4W#cCFWv3M zFTQ8nk#O@@ahF*XZ5rag>00E|wpYW=XYjpW7P)vf(^QIjIumK=7gx=pSok#iF3N)R zwmfECrB+;a9z%TIhnR4-cRK{jxw|7)(G~OlD>cII^)*TSLIE0=<&gor%*Q|YCy(Xw7vg1S{0Q= zBD3kY6mtXje_5Tj?OqGo;rqYL`_RZ2-|4nJ?9F@c{IC-38L+Y&R>fLU6~-c7K4m#o zg=UrBFd_CW+#R_$9e57$0mri=D!(z+%P+g3B<9mZV?BneqOI^-++D3WIz$zfgV%4v zq2ue)z5Hl*)m(gHvtzrm4F4=aKf}@+{zJU{2~3wsLlx3F0qG9m zS3Fd$;P``SUpLFkzZ7&~r66a9HQ;#sN-ux!y8G@fMp^WfnpJW`cB~P!xYw{bJ{NL+ zCo7hP_Gb4R{=IpfeW`z^Wc!fL_T?bjfO3?5-UW3GZ6WUgJ&q^K{LfGpIo4sl{a$K( z!50@QU4Pk5aU4P#{F-~2HjndXI4?!t^~v@OZktsff4td-GRScbl;9@3i7`%z84H$T z%v*M_PjkhPg3})A{gs2fU8Q9hOU}bsqo3N(euHJd1Y_bES!&mrNJ>r=^}Y1-1*g9? zz#rHA&Wvj+2X~HZ!Wh?d)8m@ydR#LdI>t` zdO&&EJHqe*k2=D8*Dg!c$C7l?d#7*P-FyDysCyUTUieqm#uqHcSf)UwpbqwL-LX)e zKF~Hyk3AkRyjyV3fBCo=DaM7mm*U``f&Gruiv#a)-vIo>$cdqt?KBDUuF`z|Y11CDP+ zoeotEiygptgEBzA9^j!BD z;P({XSznRf7alb@{YC`+NrC?k?`4Av@Vyv5KJv|uqGFWmW5+SRLz(>_@RM!Y_jQ^l z>dmVid5>dUQ44>zO)oJ0N68Bv6Efk4b;y=mmd7suqbyrc-b&23nI0>_jX2KM&gm(} zN|RsfnD80+VR>X@*KHujm*yMVCq2*q(Mb%wntSy)4>HEihaisXuWMIDYbvql8M{?^y$E*lRz|;o zwe*Dx=R{{roj)pC)zDB^|5szi+;r1Tqs1con2Or+`Z0@3SB$P|SYE9@t+{x;R{vjc z4_t=MFXX&qIPa?0;|;#ZJUNF)+}cYFj`FPWea0R&ET?EY?z3}(u;I2lc!A+#@na~g zG?vd(W-io6?L2cx**!ZJXMtusEuLu{zG`sv9oqCaIKKTf{YirlOZOdYxC1Q%LvQ0B zb?`dF$Kq**ex1SXd3qM7bFwuMKU^oVpvBo0NL44EO9sXy+f(TCId@N?kGnI_O0|Gj zNOj^io@`KvTf2QSzlmEhSf4K%Jc=hxKjZLkcqe_#*e##e4DLDj34_~v2W)=5WAHjd zZ^J)h@VLW=dI}8J?vXIgD%0Q_4PfysgKu*1T!U{hxQ+i*gSR;Jhz|0XGsEYaWP3M@ zz{jRV`lt%P*9PE!8-PC;fIk+1|9b#_G5}A-fIV6KFAu=S1mM>M;3Wb04FUMg0rg;5p z!GseM*z*=se@QPd7S}>otypQ$-qoco*uCAbs-D_P+KK}RM%R_DY#2Q*VfSC^(P#T_ zWjFKgH%(nvU%3iF38bd>T#UDl`SgsA|JJa)PDd^%rYo@tUomc#{(o@|ZmH9DB&VWs zHImB|m*eD-2AsFju#&g$aUInj>Z0S9NWK}4`0}8Wq7%&8|*u*+2`Qj$9o9h~C?ImeNGZ##sTIloR-D&QUtGR?slF7@-48C$zO>u2a zd8NaZ7owG~LTqXpiV?G}y!16@zU-zh{Oh^Xd?mHwy3$qkE}vC3THrp}sv5npoRp9v z@L6^Z3yKLS43&(;f~j*0AsgOa_@#Np*A*u2l@nH-LfY%AO2=xtLVdmhSG#e7g+Rt3P&S&l7iqe~%OA~p8A`i>ZN8$K)!RZ*9k)&V9s%|P?UAxk6 zeQkf!5A9u|&cJD)X`H#Xe3fXZ2MJs(wW+AVxp!Ui8D?yzmJK>{Bq@L>X%^c+Xf zkPpYs))X4t4R?{C&$GmM@}6WGH~uApUh=OKI2Sgok-8P!?`X|>K`;5pd+R1yVmzM} z^b*fBnaA|T1pOd`yX7`2aGCGJjK!7D2!Ts_d-evymF2-RM8xw&eAXD;jZc%oT{+vm z$>byRcVhsbO$K-4-`{-axZw^mxJzFWKwlL=FYidwu z?@(lvph)kD@>3#k*$z}2+|4h0#szUxbu>47&zGC;s|_FGl0GiNmF5~0je}lVx1{&Ozr@SvrrgwzkFWbY( z0+;P!iNIw$&=7!c3c$Aq;Liu(#{%#(0+;Qiymv{atKH0JQJykg#|%z+%5rY+X=1)h zJk6i@(&wwoaaX3n-Ev~@Z?gPtmB|(Kw$9NlW^l$cW{L5fDd=Uro+IdGy|(u~x%J|V zpqKLL+0zfql}}XQGT#>k;0*z|yoX5gvG)xzT!}v-_{jVXx;JP2MSlF1M&Z_t&mMuxdekOx+0HyGaM|y?EO6QH*t0+wuH-N8d6DrP)VnjkvXgKuS5y5WqyJMf zJL?Pi*s^Qy!LfWSo@waGr$F$r^K2{+0|cID=*dUomLvq6?O3}RZ<*#?pG`*Gt`itG z34D=Zz&O)bK6afWs?kn7Y8Z@g@O{SqNgq)#KvI+$wj|hj=FPJSFm{_xOL#e6*pGM? zFwaGFfSG6fv)N`i*1t{vl?FGTAF%l*?u2V`@{nc}EaVyF{}I{AfzD;iHjF%j{O7_= z8XJF$v5qH8|IVv?icN-)>1R=~{%!ha0Au*FO@LKBVj{Yl7GbP^D~B(_jqh$eNA&SM zQNGexfA;w|aJ27|Zm#h!F}}OBBy(j)I_tlN7GYffw6ngrrp<(JzX#ZzQlvKhR(?S` z`!Pdsxf3}zd_7-Wxg?>q|4};o`Qs;Qjs55aoDIaaA8S1Q;-3xl$=9;a*<601Tgr57 z7`+SMSC%Z-SQZ?C>kx>WhSJ#WBiXsG{wyvtrQDKzq9>aorZK3EbD4|m(oWgNzne18 z^=Ry_|KY${Za=PnwsGX?)^QIQ%}3R7j^Erk(cfbJB{42-P#w4ar#n1c|FkD7Esq#~ zJI#|a;^*Y~)^R(hYKGc|%eiUw>-f2MwoJm#;|aNWsL%c#En{M$Klz+Z(@AL>4D z!Q5;7gXgiphb2C}isCQm`5Zr`J+J>&^=$ky=9X+i(?o7Wd!r2a?LXQ74| z+}iDv&dKybeEw$gg+#(!h`s{H>|AfQW|4Wh7Edz-u}=C~9DtiPTbwnmOB7F*Hb+e- z?B|>`ZC$V~d)^04+v>(~yKL8OoH=fncz=@$em6$|I2H>{M z3W1(eGS<%sLvL|o{lt$bI3TDlX(3aOe=s&5eOuSHNn%0c_ARE9+GIRl=(v504bXWq zuF|kiqs-hs@qGOUjoYn%PX=bflF(RKScW_a;(dfESh)tj&~f|A#$VJt?ITe>3=lMK zKV{snv>wgV%FjN7#_cTM$&3pJ_376C#~rtCG68KdPqv$!GP3C(Xd)LhZXaO^M4gie zH~zk!$I>#p+18HRgZlJwiGln1_vxo>q!AZS$Hzn6?v8ud{4*--9@}^O;VcXE<^CR9 zzi5pLYS%RRx2EB85g`s@twF#Blj`6AS%reBUpO7z|zfBzTc zzKLnT91+gr=)6~sbnol1eSaLMys5)`T!%+q2xE`J*_|GrYRXGzZ#l42`FhWK->;4r z&S4?1t(W-w7}`J^#`tI*o?9>Bo`Zg^9{l=ep;-An>Zi&0ZRri&edE8K{&D8mHauH; zw*hx~9O{|}PWVxzJ)D9)2_F(Z($M#ePOB*g$#`U*FAqmv{kzIb>t=sSW3dbUSY#c% z@b5&og$EOuWZ!*3V=TX4wmrV@pa1??suQ=>br9T=>AKQSbI_c^I;{uXW(k{T#RQj`fmi_-wwd<0Z#tA@uaEqALntbNZ` zZ>(!zl{HJ2)>K*_R0H&*ZZs&NirCWVFO<^cHg=* z#hq)|9K%YS<(kHw`;ThW*F~~C3EBL1>E{@FcMYV-;BL6KoN+A7zTBEM=EWU5uQ#|G z?q)$RWG=; zI?cf|^@TcgGF&@vK|Ye+j+tEiWy8nCt?reJ7nyqJ;x^qM_ZfvpMn!%*k`yO=Q*@TE^Wm=$_3%v_zM?f%z6s;cOw_)pbg&i zlUGB{li>FANVxej?7^eIIL6qaXyXF4`o>eVW2~K{Qcg`einH}-FTuGqI2$kLOB}=F ztneZDVJ_u(G+h-e!fNz8SH>Ina*Y;93YhLQq zq_SS#%|p5?E}diFpSOQXrruMHCfwVPv3w5k130te@o%UV?Z3G1GKO*VoA+IY{i@9f zEbLvr?o>w+_HJbS6UN~~Bi`vServHub?dtwMQy;cr+KHNw|b|c)26YX14Fpy zZN^ko-Z*9z#}&29=}Fr=t-ifp0H4wrz3Y7G%G&=^*YmM%ewt%>zh84(0AKvc#@c?{ zd+r##AH2x?!uhCVICUx!s3HDpspv?(?XrRpr&S*yNHJXS-+sFfXL z=`Z$Q^*{F`(h!&QattaPM!CO0(ytbLWF6cna7q7^z%TWq(B+@=;T%s`W5*g6w=%U) zi$|@8PxvGsMp5P|S$h0~vGv`zo&Q)i*D%~-($8@eUv2uV>^N2=?vCdQO*;dpF2=A+ zU_oQq^YtGze?HHIA5Dbhzu0`RFvr6DHuWrEo==&k*VZ$ppRKx^{%e6TP2=#B#(o3j zN)YeXzm>xxV0?G!T1@;YUumpA`z(c{eV24ko~QhS#^Toh3duA{SPVN^P%%>=tQ`2A z$-dO4-S-`mXhpf=9s>Xwmgwmh#!}U*lvO4~V@wd}FDI+$U=Uc~Z-_5o`8aI4h$8TC%^WSy+ zLhm3?mTN4>Zb|l~f8lkUneyLtoYMR6I(}~ZNV!}{9p|Uj`PT9Av2l4(ZO(sAEmt%& z9wVnb%nzoij!0k3shPD{tS{SnHJ&FL@1geKY~AB0FS+lsydF4P6Z2--II9YtH=n|K zZ#+%y*&7KpKfX3)*W+uu;g^bEcl^@u>w#Z7ei^$+Z_ik6>vn3AKaVt^HI(VkyKTi; z#5h%FK@@5?S!v#iqnJlqo2q^sR*g8rbRg&OUa0T8?r!qwkNKvXQq|$TI2W+vgWhk2 zX_pi(0U!t$Mtaj>gI5mL)*=3 z!&%24KHE`Le{kY6d?)`=u#+|f{-j|%{Ad3hIp4*5G$2Dg&*kC@akXx~oI7<6e)0s* z`0m$Ac~kFzyt7i&*mk6&4DtwRdBhjsY|8X0kVzc(e=t7TX?i|$0lqUgSw9}!N{!wC z^#j@>YELMa^MC_dfAU0F=NHleyRQ#`@NzIO`2uD4D&`0+&ae<=ekh`gXQ-XAuHAe+F2j0{D|?L7~L43SKybJ^-t_RoNK!N&mBci z!EI$35SW|HlM^H}uAP$@mdyOZb^4uiRy3nm;s6wyPiwBSRv(}Soxic8V`}t;su$?7 z+NU`u={IALbP|)S5BKMRg2wMbbByk2+n?`|bBXr52zi}!?(Rb87$*ntVdiHhN$Z>d zoC_Jr=vlmy;Y)!tT{b;-ee~u4`XGIWTLb9t2*6p1lf~zr0DK#8#&dNTFEDAQ2>clD z$@n}GfIl689}d8e2H^TTPj}jOid0W+R@dS*9>U5Te^|WOpAZFvNl<@YG%*Q^3t!4s zEmk;t2NRy|jOb!9W9lCqr1|QZRi9^tew0@&hf;;+>Fa(k*3>>iFU2*b%PSM?m)0ZH zRZB3}iYeF1nj3L=(n`cF;Z7^Br?Jt|c1-3P!?7NXJNKIF!}_ciS$o(h({S#Rovk%~ zBj)2`XrihO0qOnq2Oo$FT+RjW7Py@AZ5Mc#@?pvi`Aa@>{lAa#%ZHq+m2*6S!nJdLHrx@$&2z%F_)NhkOYoUvaLdQmt0ISw#jg+G zQzvj4PZ89|dX2&tL=`w66*u8p=A2)ahGikyoO7Ki_!zrt!?{t0W9x%0(^neY2}W6e z+Ozm04{6wbk>|(tKNfz;a~yus*zjW##Ji2ZjfV$}?>7JNstvxUv|;+BvHtAyS~%Kw zNjKOPv~hH4S*P8!lhpeEYva#8T>rG2s%J^`bF~fMFi!`{pH08bKjv$)@K>9m*jt)g z=bsz?%JOl=(Sy%!8Re>b zMicy{hEg-Wh5I9BO;yb!uP)4)exP{YuuwQXEi^K{9R8+j+O&*i-PDRDpntVt@WS%g zH8~ZkM|y!8n*Jnco>bwCC*k%~-Dei2O_-6B5{jf>85)tk4Q>T0HDfy5wpCreuwc~m zoNRmx;ryZ%h5f&A1Q}U0tg2$)eLd8QXF_*gHZqiwF>Js$ju2zm6`HKEwOSa$uY7XdkpleSr?o(ZT9Ln}!zt=Cbw4_8Rfj3J9+24&A)hg4y#1d& z5rHnd+Vw7Uu7_N$`qlyeHGU@}y>b>KuFD|1k!R-}$(cW3;StF2+5y+*%v2faBSBj@ zv){szp?9dzWMz@3RRy?Odo|!mH-otZ5RrS8CbhYA&swMk= z7~Txorp+E&Rlbk%El}NNmxm&=nVtd@4&{uzoXvdv5#)OS@-6>*-I3QKsW~I@TnyO` z358qV#eJghEcA9^jCC5aZMJegd&@s)y(r!r!}~?-Ju-GaC!r^0zO&!QU83(rQd-xg z;m!t}|6YlE1-_Z$`#w{Jwj=YQS-8HxmV&AlI^S$qU{m9+nK^yMJ8TosM z@LPExzJ)JoEeGGtu(#e-9NV_8IJW(j;@GYiieu%`^wtOe9#0i+-FdJ$)&#n3Z{r#5 z(b}ZaTFXniw?3&NPd_jl_Y9PTTahPE@4%f$sHU4An2o!T!j~Q2fjg1f&dfY=2<7OB zGmDOF!~0ge$M4FD-M%g>)&lIdgITerZCSBf|2`|W?uD#a<11OQ_}f{r1JI|UJn9kW zOFeb?bGr2vFFGu-&Im8{qf$d~$RJg1*BhEm#wQasVf9v;{;^h_4y9LKy( z1Q_ofV>uZFd2dEu)T5lPLb)u*12=;Jl z>)vp;*7~w=>rarjy=5t_drjI}kggE&atiWsXhc2DJG8!nC-W27iXMo=2bk|UjdDD- zW9AXBW8RTrcn-ny-}WqA{R&1z<87rY#KhC93t zv+k6b_mZe;P2ftkmKnU@-l_ymfrtG-2KPWungYs%}qPS+h>by2QLcGrp%E z(Z85?)~V-`yi-4r^Mh4$f9F`sZ|+~GL#h4~i8dn3wR{}grjvJ+Xc5|qzIx&tdg znau+p)%eT=J`{GF_l@AmbXyrP?UaE`Kj-j1z+B(^xEJCB+~0N@cP&-nuDI)fb1wBL zp1e=#HS;`%=alIMb7sv% zS}nkPMP=tZ2CE4-liYiasQAsvF|swsjHrmqZ|OrO=`KFcOtjc^cFv6a5tWo-^YDM;gO;@>=SG}^ET5)z}Vdq6!ZRVZ!*mnGp-;iU+PrBee4DBL;o{o%%w1|Dj8C>%UVJsYO?S`>U2F5n&7~AYX-`)db zn`Qr4cO(sCn^cT#c3@209b=mv82_eVY*UimqZQgFtvfL8-hs6CZc$Q-PQjYOU8OARq z9KYZ@L#(-N=Dy%hYt89`7nzVi=IQ^vKFV#mbOxhLp4&&U?~;AaqduwPoSa+F>68pq8tR`)sVWMD~jEN-V`J0qnk$P|WcxT#*+zDNK2xT!V<`DBkMyfbfH33e`?T?uNdQ*PJYSe7VzSN=h5vt75FnBeHYxbbJ(T)(XHW;?<6 z(fi9LTyWc5Wh0F!csd&X{N5B5UXcQwlG0W~8rixNL)jS=)VwH0I)k*ikf4AeW;aQ5sNN3Oo9iwS!m_e#&dd$mzEfUG;7E`#}QT6Bhm6)5uIW6=4?hjTET6iteI#We9Kxc2mdmRAY1{`v;cstV4D->$3RnTFA{4CBi_L>UZ0}eS_yaZ|M)d)Ne9P+ey z3(82^flzaKTc}x?ICiMiWlfml#X!F3Hte;#73soV+skHDRmM`Qu87UT{=jnJx235* zQ&czL<-mu=?!-OiJ4oM?cqBpp%QQou*_Hkx;F`XFSNiKvjx_&)*gvSl_4(fcnQHn$ zUE}jKWUA?-4u9a9ewf1_vext?y3*eXS!?=HUFm-bnQHpnuJjiH*YtT^>8Ybd`lcB1 zlx5Q)pKg>7WZeY30QZT8afj$|ytCehRrd|(eK!@JD2^%c{C)5E0_uG|sY0`fKZ*IX zRF%46D(c$(3ik-BPzK88!iuWWSYg%hSOMINRqF9jM@LbpYFTU>XtGs$dLi6Xs;-Lt z5}$|bzV3ZzIDS(xZxB}D4Oe=jp3yw3mc$ItS(@L;tQdJs1+NI^x%r$V%qYyGlflSJ^&QoOBM(}wQ<21^I@}MjpgZ&Wpa}MJZbL>Mnjx*+8SD!v~ z>HpgMpCkTo_U2hFFaOUczcK07t8QHQ?Xo!)>kBvhdD|s-|Mk1y{K*&kl}=xNXOG6O zkNd~J^^V{E(_1o5d^dZ@^~>h2D|)H&JI|H;{h<0Uwe^2+<6FP!yXxtz&pr0q;exAQ z%)Ni|KU`V+c&~q(v9$Y_hrj)qdmi09Epn>QFW%eqr_aBh`oyotJhgc6zoZ>|<3HjH z{`h`V>&o2|uDc=UdzZbi;wuBLZJ2%E^M8{vaQmAF+o#s_p8w3V!i@lY zm!3M`-5%F349Ui>LAq1a7m)ioVM&-|`#I^D?97%yz~$K3&VT5!t{w!~2^I_piW^GH zpjN|?E)-abfh5*^-T9A~&BvjOA2YZ+FVfR|V7vI_06dY{kNFaXKZ-19jGT~z;cud0 zY{6sX6J`x{wV~u#jN#bfj{SZP8Y7Q5_wz+_64|TmL1X0e^>4?>?l?2ohVKOEekTRZ zf8-j0GJVomcJ^5SNBb`6zT{?zadc^e#@N>X$DRM!X~K`10Qp_Uc|bS+g2vc(-`)tB zD7?Gz#~8bOaoNPY^BrT4ofyL@t2F1YZ=NX%t*7H-=Rf@O8+cv=&u`%Rq+Xl6N}YZ$ z(hc+Hs`by97deG_5w20bgEh)MSZ9B-yPCkeuYY!HsCgUCU)UU0dAH+igJH{7#W3gJ zXLGvhTYkghSj7!j#xUldRk3VBY%kAAh~U0)+%x`SSncN;jMYWf=M-GUIgVfGwU`R5 zrL|+Ns_Zi85@X$IX{wjcwa2Q9vCfI-Vyt_XW37(skV~*0S`fv06W8)oD%K^tw-%H{ zTDMK&nq;@u?c>dQ@6EXEv6 zDdu2GFb7kCIT)@j6nxOJ$EN#5j6ss78R>1}SjME8GGMw(aK6IkzjRFasI)O1ZrYe$ zoi3&iX=3`AE~XLLx%qyRwo0U_Or)(GX)70L<2)17R_>&YYdW7+|NH;qeA0*ay~!J% zpgvjlnLSM-nvG0x+euyR5|uqMair^hm#L%9=^}MZdpdW%=#Xhd+<7EJ{;?lX_#|sr z0v<3Ln?B!m{_{ocrmwg2Fl<8^j@y=AX>dbsgHiU}vjkvXj2IGdP+xey{%v1q<7pXN z|BRnBHhlXGnlD=EcCLnr^=Eko^<~!o$DJ=~GvS{w0kO}b>|OZ>^<|Hk4Ed~$sCl~a zNAa$`puTLv#0&1rwur*v>3G<_Y~ML&5wTz6c|`A`-@?A6R_fHek3NlhHmA|QQMcw4 z`nTILNAm&tx7+Yd$o}P4%;`|qrU`R7)U(-&zD7k;p-0;{`4ge$GdP#$Cn+lL_ct`eS|Z`*?rq~YydM7>>KXL;y-J;xx-5_VYjZvN z*WZTw>%Md{`rfUd!}`J$?=;sI7kj{UpC?&)YtfxG11p( zYfxWPW%&Jn-KW@e=&G#q!oK;>pf!lNX$S0g)P?pbCro;~hIa1wJg84OU;jaUiuM0- z`;?16VV`3Cf80K$p22+MM%bUkoG-s0 zmhm0W1*z(-@8S6(eyvqE##*b!##+Pa8GEZH#%6)$t#~o88)EZAeP;D(%!>WEsxH=~ z`ecyDceS5YaL^9aIY zIDcyK{d^(RdsgqQS+O5g)xb}0?PrtrQwKkzV{e4gGk%2d=;x1*_Z ztCqu0FYV`VwVzt}`E2ZI`1v8iqo0S7mN(kqFO)tj{Xkai;i_u*xk&r@w)Rs4KcncL z@i4-ppEsZP!_&L>bG+U6Gdq+qE8}QZ z?4ha#_{q?IHflfB@RJw20e&7rc-jxg z@YAGHHIHv<9!tPuMC<@~Jb?8I@+iPql01f}@T@Yd?NKlM-LFpFg)wzL+L30iA97vc z50UOUe0SY_x73`s|BsA~{%hQ0b)mY4Y?_nlFuHmjiTy7t%l*#741w(aN8QAKfN63y9gT8ZZhH_0s8aI3vtE74n zW0T*1HE~>S>_X>k<6>i~rz7L*Mc{Q4e)^1y9vGWYH{#Vuk7saRMLu*HRz?f34+3p7 zbr|B;U{4X&8MXcb+S!&F&0kE zud2xG?r^)oQAIfm|^VUrfqZAe_3UQnzqjU=7`c>OGcE=t$^FIso>r8z}#uTh62<4 zrl`ylBeHwdjmVx`4w`2W{&YOkfioP2L4I#UQd=2Lx27F)55xa__+Jb+hVc++=XGnG zTt@$Re-Q4&;a+L%<8!imy#xLXyBTgP;8qH^WuPT*#%%-M$(wN?Kl1$rXs-b+`O=;7 z$ptUOckV*yZro6yGXEYl;|xE>@0rj0JQ=s+cz+&r&q4Qs{A}2-!tHOt?;7wLo|CQP znE_hHZ-L?W3TXZWjB(R^y-@Q}yfcmug6B1OXWX9#4deB z>vaYAcW-)d?(J|}47c0h_gOF8Z1dm%WM7K(Ft6X3tTIdC{)`Iiyr!M<&$(Ji%s0CKZ}#2>KFaD$AAV*gK**pC3<@HZNk9mrwE;n*%hn-$ z7)HPtVv8=4Ouk4YBq0fkm0bsjf?&I$rIlK@gbyuJyNfHfxZ=op9VBk@ar0zS+aS-`T}_Nw%!JK}XI^tXU=Fz$3;2|iOJ zISY(Dl$Y{^z{kk*Dlo>M^3c5)eDcAE@-RMhZv~&>;A7<31MDp5egQhlMR_&?W4x#j zx_=AqUxqv7VZ7*0Io<)UpMV!-yayQNnFe|81Fb3_z!)#;ite8VpBv!Dw55zOV3hZ5 z@cA+LDE$DVyp)47Ql?iEI5!)-8UE`?vtbD1x8Oq={uw;Kj_>DzGY_1Au3PbK^1v6F z#$BmAa69ZKANUc*t4?5Z=1op^HR+-Ol=H-2`hfS`=w!c|2yA8;1GPPX_ioTqmI3%a zh;Pc8L3e!L4p}Ba7RpK9bY~pMueQKV_d}p*0u9Q-rGp|l3&@jUEM>Uh`xM+EyW%km z-{bI2dDkFbl#P2BH-OhGU62iacjH^hOa7V{`8d#975sz8f?T})cqhOo3O-#}qt%PG zOY6`F-sKFs6$?*GPoTcshW248#;arNt}ZCYx}_87mu|!Qts0D5Cjje0pZru{U}PKG zifW8u$Jb3L2rFzrWE9 z9{_!=S__4BXP|jie?JWT+Pd0;*wAf{ztuISfNQC)smm)MAAWN!)oiRu+W;PKVoZB8 z)~&sgy=_#lgS~wSZzsZn?uP9I-MG5Sg5!tA6kJm`7Hg*NDd2ckjbE`x8DpJc>p*ig zXijvyG&3=VIf3zOCET(1Fi3f;K$BNjRnUWdR#(@JE7*?zC^-%pfHsxu0taGV`WW<- z>8DNxL?T%0G#l+J+u&S$SL2&>WAOcu{vM6*C-wIg`2N2Bz8v2t@I4NGL--zmwN&(* zjqj`V_a*qAt-rJIU9G*I*FS5VP zE-IHcu*0Lj)r@fxTYL^Gbap_1Ct9g7G@mG)iCU1vmc)aGZ7{Na}5mp=KP=KIvAc?#6CLb z5GTW255qAG``=u=rFzaC2U><^b7-l`p2AD@+Ho|Ozc@*YzFrSC{TbOp3 z%`jhp`6A2~m@mP68RjvVtuSAKc^u}eFi*hz9n9BYw!w73Y=_wavlC_)%#$!r!F(NN zH_X#8dtkl+^9;;4Vg4TGA7J*vJPY%WFwep4gLxk2TQJ{-*$>kR^S@xe1M>pRcVYes z=6f(*FfYQq1oJY?0hsT@yaMyjFb84&1?E+lAHci@^Fx>)!Tet^hhTmT^E%8=V15eo zGnk*l`~v1M%)i3?Z*0!yJJ*3UdtRILrx{lQ5@X zdSHG9^9IbDFmJ*98s;}J{{?df=3SWgV9vsvgEJ{0^oU24l6n%G!AI zM0~5~|39nEXhOX|rha`+{@^~azPr`uL_P3g54_w1Z}Pws9(cP4-r<4o^}xG4@IxMW zw+DXO16K`)P@U0dc9sC~Y4ETIp6`K2J@8@=yxaqC^1u@wc)JJQ;eqeo4Lp=2Ffy*;->C>cR)Pug*126Z$n>_G@2j1?1cX;4?J@76M{E!FU?SY^6 z!22A`C-jzmiHH6zoK#+G+uWXVUp_AVp#GrZGq4{%3`n0fa+=~QjhkqVHuYI|oIT&B}Gc8JrN zo9%RR&Y?FD`0;-Qe0#W`>y1wiT+VZrdL|55Zq{6!t>oJD0M_$mJRO0Xf25D+LU$f{ z(CPGL;C&z7nRu_mdkD@j&&Iud4>+Cg1$>c{mql-UdG+R!Q&&W9oH=|?^V{p9o&SZs zhNrN`@5GG71*gITBjfMd9QySNd^-ao|A{*bdxkD9IGwY⩓(@=pBjf^+4UL{8j( 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

re(j|Z5pi?hF@d~ASUz61*6%jej{gylR_ zaPru4o-H_eY`*e>hdj#!4|$pmkIh$);knSO=KgyPkHzg-%~l^>$4q^!{6K_fkKkcB z>v%MI?D-A49-8^G_(O)rmh+(C!rc)So|u(lQTR^B0S3?Jk5q@y5Z4v+RT?tw-Dj!Fg&(=IDSqO^7KS_dJT^) zpY4W6=W58i!|+&~)rAU7@p}~#Qi@Q;dv;+v)}O8@)?ZqJRadW zYJZ*U97(I^|9*cj+@Z^mA(Fo6r5uTR}&ve6cBEqAa|5?sfpK2L553jHBg0uZt z`C7q4p2>#Cmd^~sGvDZ`d;Q5{@!5vQmQO>3=PJQNp1k3)<)hz0X1=a8`ZOCJi?yI>S^USm~^dtmr3`1hUa#}Z}lu19*b``JhmMA3{T$h_ZuFI z?=n1%Mt+asvGusu@L2po!(*?<0}-A>5uQQAW82#khR2q}lZMCQPa7Vq&yeA<_4T~L zZG9az{8s)&gIoER1m|^kjVaF)hTrOmMHkMn{aCzOaPru4(DSI+KJ$hjXHKU)7N2Z* zmKymPf|KVugX{TK#FrU-w&Az(bq2Tc^(I~0&hsYS<%WN;;j#Do&qIda$`2ac%0Di6sQ;6O-!hR5PZ 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

5F{I$fpqJzxp8kg)P7d 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 TUt8Axf3GX5^P;;qEC2rmX88X? literal 0 HcmV?d00001 diff --git a/android/arm64-v8a/libssl.a b/android/arm64-v8a/libssl.a new file mode 100644 index 0000000000000000000000000000000000000000..6767aca0fb0fbd8a8a3230ac97ed5e83e534a0a1 GIT binary patch literal 675312 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�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

iSM~!+R$>PpBK;-E;KJJ7?8R>gGLXP8@x2 z&%37&s9Rdqt$O)orF}>w7NW))lbsCvpI+h7#zvfRo*?KGZVs6g0*3qNNE)PI9=?ee zz2d*Ge(%YAJm>i>LhpCP_mz+FEk)ahhaKk;m}4r&zHZJT;=AsQ(5u%Ku3dRxv)AE%{JjGfhw$9Y&m5Dz4oCUL zFU}}jTY%^L*o?w;psT|8s};{4KL5#+<5Bk+gRpEqFUK-(kfY;wd9wl+sOfP_7Vei0 zA}_@lTNEQN97~oxF}693cij9ta~F45X>i{w^F!MLO}_{fHsSqD%f9-eY|0)7?Y7al zLLSQXH0fUMOXpeX)1H6RYkg_L7R_U%d802)#G<($H0$caZR>BqI11&a!m1??dm)cq zu1eNJpP_MCGuMyBcogIEb@i$(if?mql$FX*FU653jPv%!zlD43OO1?Idz-*354J5@ zVaI}b`6~F6K7UN*E4&Y&Y+ErN*X4`+u1tj2CBoaS@D+*h)roM9=OuoO;gEAI$~_)fZ&1$3Ag>zdi`tADs6)c%y2=_mJlN0^|qtqucP^dOPZSAfR%#VLyKO zB2|KSncdz5%(Y_9g7u1Z#AEqRRG6#szt!Qp&&1b(p)G8Q;~TZIY$v>n`gsWD!|#tf zFdr8(bdfP#v$o$DZX2GfrXRxhFAu+cLq{~nA^U4M2LY?Fr^X>~`)s6*v|gR9y15UW zXEXF%jPDb;D$0Q}r0tGT$al)R0UDMQbu*MSsp>1rvk5Y?&NhLr{dCX1ZMepvV|<&q z>s`EOZa|%({C|o1pueS}UIh?``FR|A+(n%t|CER6oyAx#Fsfiy{+I=?cqki@f#v)j z!cx|COV;C{VLdB1ao0nhK&#)6ylKML+hK7(>}Muyt{v9yhjDDoK85dXe2;3nGz0B3 zZyNiN4-nQ0`zU#b^9xx2hvOZ6^H8;SJ@)Q$T)YcmoP&P+#yIpnY9jNx9r|RQU_EfZ zi?Ke$p)=0aunn;tZik*)p(lO=iT~od!jBP_H_w0Xzg{7NJ?YE`WoFqui}wlUMIm1sAPdWp>3FYWz6j|A zpsyzEAJ_E``r!A|Cd7lymWlDP!Ipf)A^ql&s3V|fI<(!;#C8dsa&c|S`q5~Yrf(^O zO@(s$gTdzYs9U<Mf@SI-KLMdgn13>5ak|WUhyqe>oIq+ zJ}be)I~eQKUmz?$9B7G8&4KNf==)7s|#w+zLA4Y`cP^TqjNeeH`CC!7H0K zY~uLdIghmMftEw~7RP6l8;`V~G5qXwh|d77riZ)bnak%b&(;t-|K;dc`P{u6--z*y z*%!k1^m62>UtPGZKjKxWemBzI#PLwZ?ke;}$3y)mK6h{U8`pyVmn!2_x%c(aYwlaQq%I` zziv$Kw2esbvN2iHg1Fx>SWSQbngy@?`p$)~Y{OpdUm@M+FH(!2!tbx}ZP*J0S{_Fk z{Zgq@Cj$MNkIuq(>p;I#9k`;*CPuRG{LE6f<(-Fb0`~?NE65gTym;{>e7oE;C{Xx8 z=)B!~E({>A{de!VB2c*JGx(t|+8qiM{^Ni^;g0hIg}aBtKMMXl_{YJ28T?nlKMnp_ z@XrYpZV$A7wxi#nYgi}ODz#jV$**b6Xu75x^IiPDx(#a@ROi=T2?YW-;(5^A&hK;h zjxb(@3+DwgZpcuo5OWxX74*X<#rVu{;RgC)n_~Q6&?xv}qoN%1Y2&lPg)Ao>4>l{t z<%A2%1ECv2uw5}O7vC!B&xL4740yhM&RE3#e4R6lur&=;U{Msu&Qkl({2Qo3&s_I#{6`no$0ets| z97jQa2=YgeMt(oc`Juc@@eMIb9C_J}x|V-lxbPj6;XA;7j65}=Eq@F?u!%A#KSO0V zp$#7j;#sLiHRHM2y&io?6Z>e)p{_^!2mU(t~3*m<{1I^`G_->Cf*nsO=j72bCc0;5+uOR+n zX#w(cL*zyHJ4y@U^mo92x|D0oZit-D<669u?}D#Fy-ziUJ&yE5mal6%r50iHKeoAH zyT9iT$GwVZW7KP?i%ng5sPKPjEoNckRJ{AKp?FRTS2qv1AD_Ws<=fjKugDbsN z(W*wKS6$VBS4H2E&n0!Uy}3oV+;VG)H*bDP(cA@I{c7ZCHV?+AUtJxmfzPI2)ljA5 zfMsQ@nkRBJTnYY@bu8SO8${GMD`5ZND(tdrjNz6D;!pbAirV@Z-%vy-lf=z{y~>Ju zbpRfok5$y6UQOZNyd^0T`aLUYQ=tL2 z9K5@+@Re2*L~~^`r?Cz}C(9Zuy%j4P8ojcZ_mx#5tT`JI^dSt zgh>h3kGklZ>e?tQN7TVYMLsCz*48xE*H%+qD`18K+VNI5Vt*ePnY3^yi7{uP8U7iz z8KyvAxu)K9@ml1cmEqeLzyTRzT!6=37~29_AiK%LdB$7|aE%zh3c%CnT$3--Qo+xJ z-IAZp6T<~+0mvUQarcLG+=Y)0eC#}!SD3pwbIXAH`#;d{!Hlh;s-#5+W5J*@X=lO6 zhC#DBX?SI!L#LgHqDKcmHmGRuMUlBYv_wuxi47c_S66HukWw^M6%7im(Xe$!iiQ>Q z9A>`Ym0hv@26mARc9@var#5u~dktD*Eo<>0CayCAGL}QDiPs80;w8=z z*^DDZ=JE`YFBt`x+%x@Go%AOFJ87_LpO3ctP(0+Kg<|*NT4VQtGINm`9VdX1rly6g zONI8ffkv?iW_t4s{hjdBh4GU;D@)G9O`mdqAP_9>EjLbJd9~%eC6Eu!C*m0 zJw9#Hs>b3Y@YQt!`IyW4zkK0SNizAn|dH$FXHcT>1j=gIi= zIVq?q|A;=gPu~|OVF-(xT<6pG#eMnT4 z7QHWjU)-m^*rN2kK7C)@r}xs(_r-ns{514^apow1g)wy|hSY$W27l2sNhyhi20v|Z z83%sZ;932AMuKlJ_!NWNEh?nO`NY;=U(bDUl7xEgy7nXa^p~nsH8G?vwKyleAvHdE zV|R&(G4}N7LY)ntxJTdW;K0%LaN_=}7{5xsze*>PaJd^w6 z9?B!q-9Rc>J94CwfabG#^@SPF*+B#*SK83 z-h*)))yG;H6>wB;4Z%s)dufbB>^<1FhuJy~w*woUHmY5b73z+( z8PgwL)7RTv)Ti51YSgxz@BvS!YbVWXZ2aP&i0yj!PTwhYjk%6+=))Fn)6X;bg`l5h{Jcp2D(OmkFB%%* zFL;N+T|OrbE_}?bde3--kKm_`$K}KE2A!Kk$U4QKSzF=siK1hD;dS%nUY3LF18{Cz%&cd1QR>P~&;I5qa zTDVQW!Qif(1%@ASyPa+@xGRs;XQ?M0hECeAE04%4^-$<{nRu=|M=ZS9_<1>L;dcGu zW@b9_vHPE07H;S3X@k4@+H2v|+Y-&yx6Meen=g)^1-I#K8(Q{r;Vp-M+>fr_bNC3J zY3iG+pIi&K+t+vtxAi06g2^Xr(&S~AMPFp$Zhgx#^2zyTQjUUewd&_s@ToJr9nbhEquO3UuoeBEc{C2mwN7*`zaP~=WDvb zML$9>?aQq{Qg&|nF0}ZwUWt?UJmD|6)Kiy_-G0f(GZF0eYs+u9Uz>iDiRa3{#o%tb z?-^Y5W^UDKi;tbJ&NO^Jaro4kdgwln1kW_#t~{+4fAdL1BQIFET^~eF=^qT45;;W= zf>)b#g}%-Nh+IN1_UCY;f|Yo(0dc+Kb&Uc@}<) zPRak{W%yU7YwKr$h2Lt?-)V4>r`5;1z`q^l3 zDHp?5-RJNT{3-Lv$>p<}^ICAiC)2-G_ZnQ}5&TVqyL_H71TOwU8vM;Pcme0{;6%^+ zjh?Z8Pdm}G;PVX5bZtFLzajY=>_=C3nychXaJOBzntExs3)VNmy9^&U-SI|VNmu$u z?EBSD(iME3Q_q!2cY%eoACvE$B?cEg2>lWZx9RQin601t3_ayvWb(p`)Mpo8Xw}2T z7X1>Z9*W-Ybn2ntPg#6QEI#j9`0W;+W7S(b-FX&nkBjcKaO}NGxc3Y$^~#g-HMrtG(EKu5tKO8b0$JK7ubu!-qyO=p?&5vi!gDP8T^2sl!uh?Ij{I|dul_6JRpO&9T*jruMJEgvy%N9JqQBFW z198v7TP=LNh3~cSOD$a9@5pC@g=6wUJK_^<{Ll1Xi1=WsO!ZH23nzTNJ*2f=K5mE^ z@e)Ddgs->9jei+}S)cyY_-uRRnNI#LgxOA>kAhtZ53#TS=6d)V-y`F&%W+FOsryog zt^<}T{Q{HGXM8q^zi#@)2uYRxi=XwQL`+Pk&pf*6mjO$aey2%a2O1u{xaoh%U||MY zZi;#7vh&Zh-SjsAOPRi@-|`+LtljjnW;SL13(QN?e#3|PXaC}+|M$RBr7zVvQH$(z)?N zNIX^g*O>T+{b-55Zv5XHp5X+A?`fasU!|T?|Lm9D{B!)1Dt)Y3)~?mRB>uYT=OHq& zaDu}395LxnF*ws_|L>+hD^2>lO!{o!wsX_JJx%-4*g=yr^obN|$H}NSy zXBA!f>(iuvjj;`zgK*oq>90tW{$Z28-F`=$?OgfaOcVc36JO?K)5U)s@yRnR1m=43dfzj}%0I^&ZvHubNhSZ`@qT=vH*EWq zAJ<~0ivOaCFY~qO;-8QBspQYS*^goOANhbp9>G6r(w`~`nCr#~zDN3B36}VjnT}^! z&@cUj2JvUf6~6CM0nAn6$@O*<-yu_9Gx1$q;tBp`6CameE^gw>dz}P|{Bj>d#8mp5 zV)Q59QCR<(7l|+W8wSiBJCXO{$^46X97ix$e%?DII$oFqE4Vt7Ajh11pK;Sa4_K=7 zpDsiIoU~v6&MzzR^NKlby*RRba_v}kOEzieZpqbc*g*|;QqaNfm(Eep``0_p2XA{Ss7oI)3#sZ0M4`)U=`7t0WowJ_VV0t}p4|!WH{fODN}2_{FB)$2{8}IugCi z!kNuEPZhPn-tg{i(9Is?ZzRqxoufvc!Uw;Sv55Z`^2EFz3}&2)VE^GU=!SNssGIpl zH`{{2<%ghy{m_A}n{Cj|&A{8WZgO|OW^{x7Nm@5$&`rme%X;ZT?CljJpWTqX82R}a zSEkvHa^n42++(lZ%iJS*2>C?2;HSz>p4r=1jJhG`t5Ywu5!W*}^Ci^%O##pZ!||8p zob_^)=gDd6T&7y~81=&QfN95#_%p`?Ej#A~u>W(+Zn4eGbAwl2dVM#`lW8(-rWcpA zi#YElfqu{@?XR5 z%Xd&W4+TdxH~qcpe&x%ny7umXO=;{C#Cw0v7U(etWfq6+Q=U6Z86v1-n_*w*+n_;O zISrusc2MmlpB>mUNx6OiK0Ncj0`YVl9Y0sckHg;KPSBE$^hZM%?k=xf)kV4kmkub@ z{Lc04V;bc78f2sHsgr0ZzKHfU-@<;wA0oU}&3P>xR5P|CZ+8q(!#+lN&rze7S9kZ6 z?E5-w;dY^(29`b+%m}v>y?9e$KKA+-y*Rj#X(^=7dUh7=k!Q$yxTkJ+%qi;5M_KR( zo5QDy&?b7d9dma3$!Xzp=kEFO6DVihFOa8{v6Qcx9ewW))!%p=ue2ypBiS7>{LN zd?cpJeirO&K8SiW0%@_|{GaGIKN{-W-yZ%j>_DDgCwez-e~eB^~-Q}Vm2yXXq!b7!C}@9zU`MQAhO zFKXLp(-rPJa3(hMGPfbzR(ua^cdo*|W#l{bZRr1d(AjqbZC=J|*e)84{e(VkYX@5HS_%~GK!E-a)g?Y_@?j^C`S!Ga#$dnVNG%U- z){5SD!0+n5mps4Y`PjL%VfHffqHz7RbXjKj>2jp(?H~8-JIHjn{-Fr0Q_9W^$BsW7ZhH>46{27J z>gM&>tGZ(>>O|%C{o&Qou2$HzK6-S+B0R@$gATWB_-VKe{$Xo_8OzsW-zdv0cW&?{ zY?{{Ld7;s#TDhkd>A$V@@7s><2#rXTE$jOBSw-C)xZ<dPck4k#%3{ zideSCBf;MHg&gsOS-h9~A@G#!#u;RBPjP!Yx)4E8f(;ur^IF4vW`c0t4e(Z!!SvM$0 z`|f1kUcvLk)EV8TzJ0c5???7azQAYbA=aG+k_Oj19@__1Ij6O}FPt(s^ zJWHs*SH7j~%|q8CcQ@gg7Q?fQw*C2B)3TvYT2Xnc3W_yn&BZF&$>mC&tJNx;{ojbhW(Ed*|3=bes4kEZ zN3##DiA_GQyJG0@w#dlgZRJZZU9){8+Tg{*+d4)bTGIp`j6>Q|TqBDvUGr;p;l zvoc%ljV$`sngGsA@W!j>iC2J@HdMADE!x4}0NVwzi#NBezckz(^k5e@()MtM%4nXe zV8QmS!(*i+uiDYx3(Z zTI}76=cwSR?Z_+k;NuzK@5jf>BkYIz{-cP` z`WT&hUU$2y)OG@ej^)BJ6KQ2kYU@Gr3Z0qf8S2yQ^SY0fh1-t)w{RQzmi;!nE&BWH zw)V`*nH@p@%of%`$`gm}8QMgVzLC23LS0&hUj3@|4rQlL`e|sR#jpij8i#&hV^+Zy zN)SKRW7=*fec72sZLHt$ zEWvc_G)TujClzf4Lz+0o0vQ_7(Yezreb7wy0G?KbkfjaJxjVO@aSTGy-}Ujgo> z%RF)Xk_!J}3Y@y&*rN>kf*r~}@t6nS#sX3{POq1)uWhU?udObI{E6!Q@k%@gMLH!2L7Eiw=z~U8O!;j)sya?HhKD_ ztEUxCT2@w3zI4`73`S{lU}eqnn%Y&^@Ne`6g9`&C$CottUVKdP?ymGMY0y->*4DxP zgbBqQZ)|CFWp$%k9Bb5eAIyD{Cu|=W1~3qjj8|LZr&POisrJm}=2==k_=s;h zNyBBZc~MVO7gy4xgUARg5Z5ofduDrh#0SDWGnzr`hsy;u$RK*P|(^{6UUunB<^pqG(db?oj~b;9BTzA;vn zt%{X3)N%)IgIHvMxeHOy^$R~g(<`rC0b2?%mrzyX;XLOgccuD-m%$K7MOA}IUR76> z#qRbRR@P}{)YLZG%uqxKU-^f^VcP*4O=|1c&u%qV=S6S+ucH17v_zXSiiWm^@Pb(hzPaQHr`H6+md2w)9~(kj7X20k zuX`|a>ws_ef2iN)!CMC1Kk$L`9?p0q6pW|g3fmfANLuUo`5Q(5>rEyo)+NRxjSVKP z1x&DLXh-nTD<8W81|NzyPrOkqWh_L{Q-;n9X}V1r*A6|M@#rm&-AutAT(I@Jxew2~ z|Aq&ypTGI0EjNDi+K1+^?IqLyO62ls=2EHE_{oR&49-!_^~;Y*v;3|VvmxKi2)<faGs7-K^U;;BUZ#v;%S%!eLnJ(Oyafh1}u6$@O9g9 zKK(^$Yz188Q2VzbylT5{EdU&3kbvbm|DeW`?M3i^(s;7|>*qbN=kep%z;*mclM4Ue zz_YFPqM!S~K1xI1L;9d!yWmy&S&wTvTLI(nj7*j8#5DMvH26Z`*(%w-WN$z;4Sj7I z9EVn>l;^=T_+!AcRkEGxF#+)f7ucV=WI}QFx8hkW9;-%8(FI? zo(BI-8hj|qCsn?1)>}$Exj2Eg2+|rLm^QO8jmdy%1vArxOrJSZ$@rzA)E`XgcU-=w z>JJ?mJRr&$^#B{fG`r3}HVu)ot?hHH9^Ra%N& z_T|e<%PW_cE?XI`uTXd+qq%uTSqh6*)m2}Kk*2kbY5rFuvJn#k)z$R+#nmfDELvZ^rdJdUGZQ(qSrK2n_@>giB};nI zn?bA$GEpe7?S*d>e$m*{`Dy7w(pDp&qk3&9)XAQvV6Kr5m|aUU(gA%+fP$F;y}yX0Bs3G)`&dodz{aqjmh;Qgt_8qnE|_VsG4V^mAk723L6kaxaFB;{&O7+_S*3 zhqxz$oGeUmmHf^E zE<6}4BbfpRUufcz&(+4yONsGQemmVI7EXOi{5uU!`EB|N3%BX(4DQOm+Tfx$N$*|< z7rMBE%l!s}i#~S@Y`3p94BNmwt+c+vW9$g-`XP>c4vp z?v~>-26xNxw8dwd#YgHe3;GY=W)tl&3 z(v|pwO}+%rGWT*7{z5PM7hLG%dk^{K85wx-3_sG_IQ2{C%DLLY?fP)o!ZERua5A1H zpP301Ye$3rjmtk`aLMn}CQgOHC0~M9JM;^T9I_@;=mlS$CfyAdZp+CDVmit>%lGQP z&p7FdzS<2g=?eaw#izjHbJF3n+Jwm-CE+7@r$ukSJ#|^>+W2_GkMd(JTEdA8Zn;SR zN&VaXn2Z;tToxKmgUyw4+Voi#J{EqV7kS)vE%H!bQ%qc5ZZdwio=AU4-0rtKEc$DV zUtd5+NBYnDUi~-M!p(LZjm!HV>Fsi#VCY>r>nuKVEdCqQ;7?n)&HuSH_^WB~(-t1K z((SVFA`8zn^~BAW?74GsyS>wXJ2+fy`h*ut+feqNRsxm-SR3%BdxRtvY&l|8EDBV|Ya8K&M!xm23_!R9LED|oI& ze?1u(H^!p3anImxIZm-~yML4Cqnls5o!%gc;`)Nc=SB-ZV&PIJ87$8i@|QM3Jkx5Y zHxn>UY)6QG@KH~@9CH=@2yVA`yWPom9pO`8;*WRu2wrJ$%4zqvvIk%I>^J4T#o;6P zR*R1<&oc&3@G<&2?D8@A3u*YgYT=&|rQtf>bY#L`%JoWvi{1pEVsN*fL@fLki+`hq z_tKBSCEXW|{F@9e=?eacL%-3`?{eq`f5PCdoO>NUVZ-MchmYXxY52V0@R9cRs>4U{ zBWd`&=kVz;@^m_U1n)}2M^qj_JsXRguqp3M6F_`|5Ls8DUzmcPe3lqo#!*5q^*-0) zPx?AT?>YEtgNqEpXQRPotR=X#2N^?hFMRTAd2(z?n{JgXq zKk?*OXxIV3Jst7nS7N1P97R0&H5g|JSoF!StjT_x^nGVx{51ZQznp1clKq{?Vdq|M zjd*ga^5G+9)Stk^314rI8~-u{vu^#V@%hXn&vfz+MwsnPwNF5|!j~$(JVQP$KA%nG z8OG0cPmJ^Lq&|AMWxbPjB=x->SgQ1w0H>32yMLD)FUtK2cv7W*#H7E#5PG<>e!J;^ z6IiPB?|>5I*! z1qipDoBnSQm@@s#{aAMWWB=o(&*xgI^xI8mDB~EB!A*Z8BBx6Kv`Jr{qaGNrpL5fn zohJPbe;JmN`K5H}&q$O0YIY28PneFugP;AWoBm>xzNsdl@ZD+CSw{pg*DU8gV&c2~ z*Fr<+#+USk%@@-SB3xtFWNll%W+ z;=ASFZsN;(h|r7ta=!=hQ`P@2qrW4D(8HCp{Ssfwk8Q$H5fIpD9;Gizz7P9%ep?kk zugs4tJMk`)K&5HN`M@UN=cdm-IaT@*4*_u3Ie|>ic6xekvh2kE^u5^Arp%n~Y4^wP z#oli{+`~HYFvdXH>fAjC^`7fP*jopDFM_rxtSLWt&mq0eomXHv(9b5J^Q+&$mdyco{CF`eA!0bZoldsqB@LyL}K-vra)T6C_LKX=cw)|z^y&)Y<}@BWN6 zoh&PsMxp>U<)f zkJVTboY=-QtvlcA)Az+08dBx~Y{l~F`{F)*ubQG``R^%xai89P8}bwJ>9f+Tm2#h4 zew1c9V*l{ckG#65#fEEAp;*wZ@bBS%7;wemhOYXD;w;OK+0%+kp?W&M`@F zG@U0`iX<8dmW*(jfs)o?uVSFzG!JVLMenAemtsg{Bn&6Aa;(R;EpEK=(2l#WdkOKc z{H8M0f+Rl|JGhXz^pdViKix#2JkrMr4_;k9e7@4Te0&toK=85O>81Smu59B{e#8@H z04CLj5plbAZ?$mAyQKN&T>o!>=VrTrs?xr5PjHkYu%?)Mj@L;i zWhHfGKCo2jSDJWI{^nNm5I?VB{8FXAHAVXDP2KeG1ePlO4Z!IZ_?N_Are(V?;3if2 zhfVqtpZRCnZu;rI8N6T;aqFs^e!6c4S?1AU>!0nxP56_#qH+}!C(Bw2kt`o zlt89U`PgIYEs1n-PpraNpVxEu{EL1MpnZxa?9q?oec&MMCt#ku1Z^RwKWwUe9s9E{ z%?ZPtlPY9*p6YiBc`msWXM^{Ly%Ew!KrgiYvBy_v8?cAEe5h&(sZjGl6*@&(JnW_Q zZCw07ze~^_#xcBK>>B0o&EGW&c1b|94rvvs;m!Gwp$Rf<$3EMl%4r2nz{dhx$9?0# z#zHQe-#CObjbasgzBE()2JieO5zu>}Z{=QH(3AgI(9H!t4tNoH1NU|EOhPAo7vdT9 zJBF+7ose(Wg{u4UJYP<2+XQwN_-?dgIBaY{?p-)<{c+fE@#T3A*;P4|Mecq6zU?f& zccIR2+6x;RwB4~2d_RKyg{48-TTq*5%VP)9W4Y1($qyhe_p$G!Ju1Aiz;?()rbk;9 zOp|tjMtcghrGU1$Y0f-#m)IEj7-gnlSLP$yG(kS_l<980PIYH;pEqdnYf<5WEg4Iq zUE5zAaNC?5b=OANt4V~#2kWrbr!#KLyDxCplL*^>ZMbbtrn>7SY!W2s!b4hu;PLHo z0c~doHo_)SAF@xJI-rdJ>VS3VE$oLs0bL>fmN0B0wLSpbSi8dAoAJ(!=diZZw78$z z+X&k-)FtU?gCz>vOg@jCUOZr@X*zY2i@ff*4&{O?b(jyEQKCcI5<7R#Pjp=lBJahJ z?^WpXpclHU2z3vA-=+<~4g(Ya_bmUjq;1c*Yx~DN30m$e-wC@=lqo+mzDV*_HvRhU z^2pn3bpC$VGh;jQm;XdjTi|zVX9kcC)7Np39_3h%wkUBKhqewn25cMs0{HX(+&$mX zb)DskG4Uqa6<~RHq5Nr6W;^N(%a?X!@=?Y+W&yj^uYbdH7q>n4_H~6jXN9{Piq%US z24^&9WMwpOxDz&v!m8!Fb5!@1aAwQd;PB?T=c&Dv?^r0;lwZ#7w&Q^o%J5s1A#4c2 z{>n&{;RU;C+lqKQ?8i{|lwrrMmMtpO6ho1$BMONBFVOXr%4iF!~*2VLS3=$%QNzPPF63p>u}Ot{3YY&Xv1q1 z`ihaeLrAY!je4G8+kwx5KTnNXz8&_s{J1&0VUKEaIr2uDJawTilOLf>@SNFH4w?2P z%E#}ESUxNlw6}?Dd$g5zER>H_ zoe#rSlhhU3UPvdOVg5nx7dO^dl{Zc*sgKq)(1gRJ#j*00^;L~)%%av6(bbcp z%VM9sdd94o1yiO>@je415#`k@D`JaRmd&f>5$~GUHI~@fO2sL#*DLUtf>! zuS!u5*RQCnj`52tR8btQ@UFvlmsL?diWTgB)ZblI9`kOmiQbKUJTzOOaYN&kz}N$i z#$-C)=VSHU6XKESV&9~NuU)12E{ff?5}RmreDGV@SP2szU-2mxM%PdRk2ELeV8*TdKa0&8oQG2-nt#s)~N!n+xDG3u49sY5J74|GwqW?9TvEo^BtEUnTR zo4>jawH82cF}P96BVQb{sy(pk!reL=BhJ0?tfI&S&y_`(Utw3)Evt`K#7yl~3MB-) zD6>^Vtb9_!V8^72`sh*}T@4vXZpsNyZVwVhz2h&Bt-0C{>4Q&Ah0De`SB|JIVaDjq zr>3^1+|L8|&Y}HY?NLZL-cOx`Ppz~l(=b~J2VNT*Xj}xQfvP9f`&D(4|B4H`s-=@w znC@ay16r_X2sjdpOCh-j7iLVix7i9;bW@bvcT4MQSMY}Q#8d?xfO}yf_bY2s)THWYLt~NvkDt9b>e6ltJh3oVW3u2f!0*5B+foI$pZBOVzZ|D4hECz5q~M34jSX} z)byf|P#gU^M@sA&xiz21EAs(Z<98S8ZrBH5LO91-r?+a= zsua?r-=Y#hSBGZ{T}7-KTR)XTnv>9p~=D$R#lzJnQ8Y^5ahc*V-7b9 z9ORpwXV`H-fcI|gUgh7Sp;I31|5!hogxQ>N=RjjWrfATjSA26UAR(U!esp2|*MDxy z!zMzkXlTL~&*uKOCixVLMH)X2Uoz-g`Ny*VL(?&H@6UW-z@5fOj4|B9xvn=!3#ZqV z7Y*GMcr^R5VRLE2X7JWQbMGJez>xWyv$mZ7wWN6&vHIiBOUoL_R=n^c&DOx9Igbrz zhVRdM;QYA{4&6Fr{=)+|XKxwy&A|^1sz`EywIAOG4(!j|gs2sa57)&%$@~`6{6fV_VyicE*f|}pj z{h4<=(5LTa}9o$9;OPSnTUUy;d^&;XZxeIemtPdaZD_>4*6@ z&fkz_UqXU>Nrua9;>x};VA0!i7sUAikZzNI(Uw(+d-$+K$NrdZEPljg{krtq3=5^0 z9rxuK!QehF)NALUAMDfT>iHBmLMnSTq)BBDXA*GR4va@axFY z@jWOzF|(6=u6$MF$$Awr5g*ccvi`IhoO5BR`2SlP{Pi^WN#M5q7TLeVv#L_@9|+vG zyP}^h;E|t({^~UNXEdK=J=D(@@KG{JWz2YBT%%(3_0y+J;bjIcl^E|#o;rP6;nmvA zf%{b8T8(s%0?XJ$%4b2Exc&nmRiM-B+g3Dun;Q+Vtx(grG_`#VS4{I%u*^NAcp^{? zyex`s3ax`x_<#}9zTOWAs8f12uI;c}4d-|1xKGE%H~FyM-#X6tc^Plv`4-Oc0Ug(} zuq}%d{@izYnSi)@#$Vvz!k=<-orbt6#zQ%6e4fF%mSutv;~KH>ODw$3_}z3LvFIRQAYSB|~3(S41xr#mof5PCd zKA*F2yL{iX@GFd;7nzGEADcc0_jIn_t}(cjdx1};!Uh*P1z+gUOa0))GM&&1ey2m9 z>6595LoaxxL+=^-YKLC%dmZ{LLmzkO1>a?G>c_61`yD<@44-Ele6_)!Gq~he=np%% z&>u0lTP`Op+^+xs-u7EyG-@DY5lrB7S_D=pkEcd6%0cf9b%Rq8Eq zdq1hvD;M8n_=}vGhSwH@i=2W#VsP@Y%YC|uN8HwPiG|zp+x-~(8PR8@p_g<8U!8_e z+~6XAhq=GcT!oL|cE4@Q^R%I-{I)*dG&rAAwmuE4*D_N6(?K5*Jq18dyvyLyjs?eH zQM+9KlHikNaL>VW4L-raCm4K+gBKXQz`?@?4?Fl0gD-IKh`|>+c--Ji99;HqMjZTU zLtp9OhYeom;2j2+au>aI89eULXJ+`oMhDL|_$CMU48GOD!v=44@FfO+!oe#I{U4?^E+@Ffm?yTKz4E^9?A9sET@U+3UhL!{km2bWjIxP#}KPZt{i8a&g%Cm1}-!KWBJ*TKUE_Z&Q8@Cgns`%b4g zIM%9ZSK#2A3?6pytp;D<;7=QTp@Z)?_!0+~eW(!!KWykL9sG#F>m0np;Hw?{w87&J zp6O>d@%>23McT<$hhEx4tAk6uf5O3~9zX5iQeXEwxYWyb2bX$w*uj;#f6>8n&HWJv zpJ47g9K68XpLFoBxj*gT3(b9(gIAh+WuCX9&y5DpbnsS#%lJj;_ZvLdp_lx44z5gl zlW~pk$u;;Chkk;=3mm+_;9&<}Xz&FN9x?br2QM)7YKeo(b2Q@M^1K{l;<ALy`f`|GY}@<%?&uV?sdX5oFm)*5Di!i8gB zvNqjlf+LaOB*1+5h#B=J@NmM{+vCQ+48iOZ{?zzaBQANSlix#_?PORa*p=`Q z3kzVb`>7Z>sRz6zo%CP141`;VU#j#Y41|;SRR7NBA%0$O#4lC)Cr$d24sV%9H+`-d zN|pX}qv$ZgZRh6y0R*Os-)Q1T?8xxD@mmZQcId=pyRARA7gzr8151_ut0w(chp(G{ z8^TlRZ;ENy?Iu3;$9Cza{~oYZ={K7GP`;NNHhuE{4gyl8e_A>gQ?Z#o+rOKBHWE*j ze#B(7)#xEz`a=+&GW|S1Mwf}t^x4n2>9d}Y#BDzUNI&Uw>s$U;rAhx}z8~YXiOBTX zpSkJZX3}@tzcQU}ofD8{_{rs_H0d81>r;6C1e$)wXTRyD&$(~>S6GtQ%Oy_ck_aYL zZW)KJ!Niw(?xR>Ik?s2~6~J62o?Q8TQT#UP117$W(eKi7aXB$lT@&P6P5h^w2qM1_ z-iPp1^{0y+BV4=w>whC*UnKFRUt*a$MWkaa$nhgS?4G$PWkw` z>9bEsm44-D1i;&%|zh`Rd)zhZU^yvP0I}1y0_GRJUu=a+req{vgESNn} z*!S?^|Hs|iz*kkA`Qvl%4G><$7y?8=bHa;aL<|r@uC?Xf1T-Qm2vKS4HaBk=< zg+j{(>DJ%I-9kmBz9xVbsNJP)Xo>6AXj%VkYr9k}b-QjiC~Mi(Zn0HMeud`u{m#sD z@8skj?bd!i`}yy{&7AX{XP$ZH^~{+w&oj{bp$-twYJZnHFGsJ7;sf1H1v}MR%z>&P z_jcrehgX>>tHGx`?;fuWmUxfXLYFG>&Fi8)ktwB#Pt1)b!^N``-!wWU04#c5{)Dear5_GB{%FZPA(Bll$cTSw^!xCU}@q5rO;y(Fv8;#CX5BA%K zto}gv*}hWH76wwi|1g|V!|tb*2VIeaO}J;DZkA{3TL!Z=c9ib=Qe&#>&BeA zZ15`T!2IV`Lsn4-gSr^hhv6CK=uX?mZjbf8U7^l}PF@!cBVUy1ZluREk)M51bv^rO z)yp%OPvC6iJvehb3jLU^BULH$N?B^>tF9B!8KIoizo~ory68H5?tNphD*ZOjou|$S z!*HH-k$N%frrmp#K67+A^k8D0(4T_N)R`|ne$ko1YE}Yqz4O%UYUm!}gRyR(Nu*PV zHhS~tOd9By+xJG2FVz7{d=+PNqg)1MQNJd+xb|u4ZHzk54m%)q-)8&e*`%Y3N)cA4 zE}BvI?IF5-?$qseOwsNqW6&G4XT&cwdO4>qyLQ!kpDssvU5E0jKv_XQr)A#$w<~y7 z{76({uH_}q@^wk%YphX?KqFMV^4U; z?(cKEq(Qn* zfNl(AnGc_N+~SnEhjX0&J7w-=oB9kabK7nTkrri;c62fBS$at6=gqA(VdSZK{{FIk@9^D!1{mCTN**+L^0r-b%)ecOh@&*ry_44{J zMqpgq`k6Bv^PjF&KR#o}FU7tMo)axk^46bMlLv2?dQN7QEtND7c^LF4T zA{QN)jCj;l+=DnMvzO{e4r$w#7`!7HnRC1wV@TX5>%Sszb*O*p^l@x?9b?-`$TKJ> z`BDP)zX$S>KPK<9y2CMy32N3x=t0+NIW9V|r_RJZ85wtAa%9{MwIjoAx#WL9QpE<4Jib>qPW}`jJ^}Z$hVW8{+n$t$F!qH=tFVJ3T)n`Yqjl zP5J&i+StJK#~g6ehMuM#|HEi2(1$$Wp*+|}*q7X~Bg>9~QMBXsJveK6tSU)_F1_Td zDDNb6Qhyg2jJ7$rXeH8r6Z4BZ;IkhevHkiA#A6%S44h-UwEJ~*Yewx&00LwK}c)F(=)F`l>)5 z$cJ7&bxHZGFlBD^Up>q_+wWLk7Q-0Ee$s)t*BrFZ&A7%n>^s`gU&!Nb`>c^Ngbr;# znWZdFor4}T=r^Np6<&m--5Kh_q)E5P3#|N2ka~PgOe|g$oSv6lr1RVT`@UIsf(Pd~ zF`Q4I{2Kb$uRr%P=1~YA-Ih3jbL$(|ok{$S>Rr+}3qGDf|I*i4Q#)u!XrJo+8Oo9U z?N!~*%(F20V&AL=@PphR_zdGSAcDG?e`e|92SUc>T|~j-2V6 z^);kLnxF6<@!1yT8F)Y9mqY)Y^$xw{RQq+?%1Jw~`%BQ0&b0M3t-q}c{pT%x46+oW zt@+#FHrobULB}>m-a_l9FKzV>&~d)XXN$B~_nMeIV>^&0?`tq$B5(H@B+nmj1nLI$ zoxnVz2hRsy??&HLsE7C>bwPPdUBG#9A=dF4?Ij6^>6d6>pGO(6`*VIwUHXcapyVR7&GO0 zaPu>Lolm0u4uQ|{jqN`fQ6)7m#Co%kzd363TNsC{3bNGNB>H2`_hY@p66lL82acT_ zPk3HE$Ic3jIUG0nJmI)`3T>+XrC9HK@Y$y3+VL#}IqQEE>-|sQOy|GgOP^f#M&F@q z+)KGgp53}Wi8##fug><3J-6{G{jS9KBQ%ihd_U^NJ97u-0k5M^^8JbLP1@cd`XAq& zPR&&3x<00Q$Kd^G_v5OU_3^Imo5{uRda9Fi7SxHJt8|1^=^@w)F#7YO4}`;JUQiHI zYdI!9H;(U!qYvz^2=9nsZbDvhI|n)RG4t%9od?!2_0(B^q$eHAWH)G-m-23}Z8v19 zv2mA;kL|y9yxL!%7vJBQ1DYwZuF4$MTQNm-&CLt#??k+vf1`GEA`W?RY+)L-Ex|O1 zk@ptxBX72I@+a;MR-MF&kq_2xIETr|;|YX6f%tsCdjj#hv()Tm7%xM3P9CxICC<_I zd@r=)1hDc3>(Sc0N!~ zyC26h7{0a>GA4ta1-!?dn#uRLSM+-v<)Pe^FZsJ6r7X**Q3otbK3DFT8ry$hD#|ZE z*2_HBmSMhnIu_meYqg_sQhfii@#XvX=BwV_WvZ+Fw8C5>@4&uEq5WSSA4b`la_Rve zmdi<$Z3KDP8dkcFSZ*PdUjy>7<;4%9v&2p^V#+ zF8gL4=4w@_qa^yKf{%FHvEHTUnLE+9Fc)3?2;|{>lXJK|pd)^Fmg>CQ&f&CO1kj;> zEq>41Uf^@70sJWs>nx5sBt84!6R10R7fQlT#mDge#`+0yeF$=K-i`L9>x}ckty`m<$fG= zI=_}DdAap+4B>eQV>&y-XtQ`uGJMa)A zRqupGmYeGRCS?KNa~uC|Kc3@ey~&PGza6J~XJH*@64v>i7&*Fa+db;0$Me^)+1k+h^AP$XlscSHV<_*RW;7vN(ZtIN~fX%FgoV zy;+}wO^?pusUn&kO-R-m61WRGhO4Odm0kE`Bx%*hkq9}=yx^ULSQ zEa@VxNo%Z*r^nK<#y$~klWYx-y@51XFPhGI9G)lBF|KO)Lbk409+agAb2G8a;g^T9 zsGR)SJ?K-LKczM#URP0tc1d}*AUzjQDb-*&?vyEl;libm5yFY_|S%Nf4lUma;;lz?T3hN+74q5-BOq4B*A8C5f zC!|c1@AXwBj${0Kx35#mobSx-u*ZXf)b)MDKHEp2pX>Z*kIU`;O<##i@4eqwHUBq# z{pdN4u#fXycM!(mLMs=?<667EMp?_TwpMG`)=*x#8_`B%D4zn9PaJjLIVZHk`^}Kj z#OtwWL1SpGP8T@Z)d9Y*Gf%8n_3OT>E3#0xkpFG0PqVGoV=awsmG5hVtn z)wRy!I|ZezN5+ZU=Pm293Vgb4`y_beCC>Nzy$ zMN&S85w`+;hjmU`&Sw};*BP!^R=j39GeAo^w?8pW>1%99mxIQ|TzcBYAurMufR1Ig z&6d@dac{y@QNFoWl}oM`vk>*m>%G-5onRD2ycy7s!CrraFI@O%+K0ZiR>6irg4zw9 zSsnM5Enf-!VI96`@xrQw6$=-5t7=w4PkB{Cy@_8@vzmOhZnP)r{NPPT{_~brUG1%0 z4r2whicq`!b{FRfvPjTs?R)hN%WBrG#IdW^rQ%z-_fk_9CQmm_L4ZAb;YkmbWm!`aZ>{rq!!haQ(a+tE%TMsfw2` zxPD3Hyt#%U<1JZOz2wHZBK84 z<}Ip9r!DcE_J|z!&uYK&PiIrz)zWhHRaY5X5ax>96l`r6MOa%T!wjlaMao8o4e{<; z4qG6)Mkk|vFKTXrS(H^CI|eHjC4gggJ*vKYP!UVG_4|~Rr&Ia zqOUi(ewYroJqw}MJO_$L7_m&~obOYq&rw%VU`H#k~VA4UiN%Fnc48!c| zur6bV58Sa2&|NpLO8Ymb@(h~{^`5R3*o~-1<Zj-6pslB|Ng-k4fG-IX$ks=&r2PhZMZPs zT5Q-_a+A5m7*hh9dYjPXmKn3k=Ebj#&$@D6bb85^C9~(ouZ+&Bh+kPTD_&kax1wxT z`E(2orqp$1X~v5hP>C3OZpRoxfc;7zN3Od8H9tAV%t$>6GKWu3g(HWsrDUVg@X+Kn z-jrqaAD>)*IV!jYBbagX7B6177)`Z?mT*inKrcts7G01+rfo;j#uld=9-@j3E4ep( zbW|2`5N%dZ&IAh`QUx!fRX4t};vrFe24wjMva?ferr z=RTCv-bi>}+D^!=X?r8&@f2y{rgAe_eB`n4qeYKh4x1g<4XV6k(DfJJH)ZE#gXWJP zbi=p@C+(Ve|D_L1{>p@h3Lo|!DX18<;G%Fjjc^RUesCoXZw$U+@O)a|fH{xX{v|$m zfic5@N&F(P&cg(ht}_dN;v>7mk4|~)GTH`taKf&_@~?Og6cL0yQEZ5$+MC@d0z(~5G@#*F39&m!v?eu8xmB-e zfZecx_C_>;HltIcA0gP{PO>%)54q{n%0Bur9g0on{|`1m%s%P?I~E~5_k!7tgZj?=F$2m#+|Xw`lrH^1 z+|Z|oCy8i~fw-Z^o4n5%%7M6{AL*l(vl9m59G5~^FpSw4?q0))9<}50 zc>K=Lj|#A@G0IP_?=#sXDMCnYm;;e&3geHo-Qd#W=@`KbW<6~J?ydY5tk9^&D2 zJ#NQ6-QVDsi9h!uXTo8`9DLICtH*9&X9MU*q9bMEQy73>8h~?eZ6-eD0XTIgGSS}} zfO9<0ME|(}{L2COLjm~i0Q_(O{tp58PXh3F0`MVND9)6xkpXx?0RD*pe0~6aGw@vJ zJR1G%MH^`epvU)xjB@S@!14VsBmI*B_}>NKM}X&s)8mPpCH(UM`Zoh`47M5N854kC z6@Zrn;MWG=p9#S448Yq0@b&;awJF%zsHv`Aw0K@s)hDa3z4=DHsr83v+yIiq*DO ztLtGav98fg>I0@I15Mm$e)Y}OEz3Fmsb16CtZG`DmMeWA(#odWE#sz^2Al)d&`^z~ z77gk5>uT5sq^-ibRcl-UunYpbKjge_HC|Y%^)yQxjnrTxl51^htywAN*1%ykS+q9M zq-?V$YJi2-=7wsn>QuL^slkLuB;^8wzH#m7Xu3Kq3DwrrtDV-oAyBlT5FnHk=g1sm^)Tuf$Vl&14cI5KE&FSLM}OJ14k>5c`X_^;iKr3 z*1ml6wzjmST3gL*5QBJPY>4G)bBN`K>bhE<;8u;x7M;qH%D6F|lzG}%T@6D^tD7{b z^VV6rys5ela$7?~I;3U|7fY(s=7&<{hdLvwP2R%t?wy(&jETa?DavBy%4PL_{`U3M zNamy~Z@X!Fn=0Q^4cmUN#nm%3C~K}5Ue#3ofg6SAfji49Hn6rC)?~^ zHN7MDn&ps(YY*ca-HXQ4<>2D4Se*RbxufJ)_*gR4LP{~d2}f4<~B z(x0#OmR{05Z11;Oe>8l`FE~GP()sy_&I|D=hD85;#?lM_(|E4Ybz5Bc3x3q$@7hp# z#mDE2<@1`4kKjE4e3XqxIXOobmu+#8Q*?N9EG}{ip6~E+>v6n~&#U%+l8=wzB@Uk} zL>Ty$K0fU>KUF?Hg4a8Iq;HblN*|wtwtcqx_z1qq;d7-U&%F-r_KUp^KFy);w78V# zX`Ajd7MJoAyxZa9*85Q(AG|DU_ll2?;IBD++ zoUP4vh0iJ}H^t_gxLYrxlkLYhS$auV`qDiXmvR$)yN{mpRXXfl(N5?E-|M4~+54w_ z^n!ODjy#ir*8A{5xm|<-)PHc zrH@|lO&0f;Ptw8N=iNO%{%dTx-|OIf?#FC<*lBSoH=%#T!Cm@xi~H;Su!B#syy-n- zajCCHD^It@C0)UfIDFjtI_=<|!++`^b0ho@+wv^2xbPQzuEqW3S>@pFI3TuoNblnJ zIP@~7q9kH-N8}M3MRMMw$RqeumXFZq+xvso7ka^u_~^^*z1Zjxdcnmej=#RdW({$- zoc9hk<>{w?#=*^(T|@V-gS-7=JR1!h`OGkv`tKqKpXuQB4({^b=ins{{fiFn@_EJL zQl3j~`G~C+;v|V#UMDTRl$+3>a&VVkY`FN#=Uq!L>2_QGXB|GArwKmQF2M=CC+*ha zB9Gt;EY5T%S>E(`@tqmTbFTMn&0{(>hRK5jj3^YMuxeY$&nd<1{Q;ZtZx_1|_M zA9*hBb#S+wpYrh+`hyPc(sx?iUoS@-+%2~k9o%hKrybm#UwK1KW~9Cv?RYfB;!;!=-OZ29C^TJ!d;`%UPkofB*YlMj>d`{bX8DVkZBY2*VewQ6L#{1|6 zpJH);x>J385=IPF;^QOuD?a+8R?gRa^nz!b4_kV@i0v7l(6r03xa3Rle2e?#9Pi`f z88&K?kB{J19OYmCk+r5W$UV{Wpf}fEGhKH)Z*}mi?KQpa4*oF*Z+CE)&pwMw{mMM) zpv9#e1V8NXku@tq&sbdewA=DLVsYUkc$Tdnf4)XoT=*Qbd}J?!@DV)U;p56v?BH&G z=lb}UaZrS-44_}+qwlfu$a}WPBlv9&A6K5e78iO+_lU*)^?ufuuF%VSm6Q+cFlgsr z7ZQA_ooBI}KW<3%--LsgIJmrr`Q_Z@(7WaNQ~>T@Z;9D*_OG`H-tF*l%k8AaCBI3_ z=adgmSp02^i~K@=#)k|26#IV0^7({Q4%-~ul}FYkL>`&1AGGw6uHZ)k_`Kra{01%# z`{=c!JZ}FzV{u7$k*)W$K775!RhHo+@(6vF4;T6o7H7JbiZJl=9sDu}pXB2s?Ninb zM9zC`y~w(O$Rqethre6SvOXYuhj+_C#$l0jX|{>9$;OrZ3ZAsMznu3vc)7i%cg(>(drj{(drdx6P7(L6y&zs8 zAp9KM(-C*&FLCg>hD85OIJoEFk2v@|2j6FLDF=DKI%shz2f@1?KJGkUp3lN(yDiUS zK0boWIz02`@;T-3cjZ6h;MY3x=iBjte6DlwDHa!ba;!YXzVSrxN{3IS!$-zp;Un+W zG7d}m2)@(d1 zd&-tutHmY1g0FY@xZ{tk8w;Oe%ctGPM{pURnJ<@*tm6`Q%TvZ@;eXijf6>QZ@M8gT zy6eL(|I-e=i@$4eNmtejWIUJh5nRS?f4*|;xF>viY`x34Eqny`oN;o3Q(xolHEoXC zS2&F{I`~kBUdA`l+gA!5D)UC-b_%RD%E3SH>0FjLP#+@Ep0Yeii&o^0(Xg`96BvEK?}kSEl%fZT#&i zN^{|le;43P`4?lZ#Wp_k&%FEd|8-!Q(wFgF_WxNn1Im9N0y3qqmG>CQZnb3kTq^OW z|8roO(r>k$r_+~V->v#*#Lt+1IRfC;*iO#$`A+Ije+UxKl>U@F#>Te+UxL0{6-MMt z>9=2J;!knX=PopV`j^@C-L-VaTxuImwmTR(@hLN1sf{o7Y*4Hp7n&>g*+4|%i9g52 zmw4j;g^e%w;!8Zaud?y|{pTJVU*vD82I z08&dQ@~={#@d@m^)#c%ro$(G&;$Nja`<$WT>P7hZ(`WT$O8?a>5CC_;7wAv_s+nb; z>!z2Kl}s-#EiReqd9#X35HzEh;nRzYOG|J&efrE&6XOrJ$vMSo1TigDOkJqPz$WK6 zwS5uV5kYg`9@-h}?VV_CbHc93R@f;h+#Bzr{Sn$2+1;diFN9r@eCYCbz%JM5&9VCm zp|AcO=#$SLHMZ@y&xd!sPrDA#|E;?twgGvCT@YpMf*6}p(D5&-g`RRul}EjcU^~I; zq8CChx%>06`(}+A-FAGKx?m#gPEaR(66{dKm1>*Y=&gsnfoKil_P{>Cge2@yj9AiD zp~mHIRa0h9*cb1bi|f}foKiZWvSLGdR`<_#-x}Ib2irD<2-|YOl+wMh$q<5m^y`tV z1GMQe3;NEFZ&Ldo-xR_xynin458bW0_HHzGY!a{)*bbWqJr}D^+Brc}$g8Kll04W( z$Wh;*jl)9NuEP0(oi$mpt~sz737cY7h2WEgbVvt#bhA#5gH00XUw8bi>WU+bwktc9 zgf_68sH5LL_RMVNOY&5U{7~k?+$p8B$wHfqq@`_vx(fD%)+*fV@XLnQDM&=3Fz!JL(+BW9I zSns)wKhpLdm{tg7HRot(tq0wHef?r+ExtRLYuJ-OJ)=xbdA7rD!AZ#5udVC}?Qq)( zdA1Kh+n5bIBd`_G(GuFw0UID;w1H~00S`7_s;9s<7xEECdnxo_1Bbs6vHcT9sQp{P zpXC}tTq)}JgkOOPk$@yi%_;TxZVSwb+Z|5{@L4A@3&u8UAmv#71}V{hO_TT z_+BUcDuk1-*y8aZr@t=$3N*|Y>1aPF_Uk@vYjZ1TiFLnY?ze-EwhBV%!-eR>ThQJW z+Itx7CpL0QDf>?hzp#x*UWxC+KIVusvl)-P5`&D5H&+g}afV6TqJ5MQ+L=qk{_N5i zdn=}$6W8^EHpXiOzd`3Ia$wI@O2<2ialo}RLs|D+1^Y6NjhO^&P~d4XBLUkJHzIyq z_oEASKcej#^48@8dl^iRbxw>n)f8;g(uM==TF}M??KpIx4oOG*7W6rWNV{Qqu$*d; z_Xx&s@=3ngH=AXlZASX@k2XshDIE?06K=B+xX1>U%=*{wo&ZZjG@h6 z+K2uv?53!bvFLjkx8H{iu7VNhv#L-}>_*sM}=jT^KvrCVP<9X5@u- zX-Pv{GaQR(1LWMsBl{31kMd!Tk!pwKkdwT?=Oxm~*hTv8NcHh^8^5cc%V9io`D~77 z#dZ`PTY&Pyl%Y4=R2zfjYww_RD$qBLE8er|P zr%8Kq*daWFc1(#UkjC9(jO{quv<-!~yi|+25L>p1ktm~V)mfnOqpugh=H_*&DC>{4{y6Iw82=hCn*0RkFRBysQOrfs_EXx!XJ&7i23udSRW;!e z&Qs8)9#XxvyH)SZM=-C_w#KckZM26FeryXK>ZK5VdD65C%MjQ;w~j9@x2hgm@VEr0aEkehK&F{VVv=#@N2thVozwuyc^=bo+{j`2*?M zSGI;tJtSf8O6N;srXG6Gr;_2N?2GVki=uDBPei+6M~Ji?n%0zcl6?wwi8iP6x0&tY z%f_~8J)TVyF!zA%7@aRZ>wXA(JLGW!Wh7%>A?zY)8StF!UmmbWq|-9(pdI!v{b>y> zLu2o3YuL1r80_l&2IW%=nV1Io$Fr7n6`~)-vqp8D+xWch)8{rG(tY&V%~|^~7w+x& z7RJRJR96S)Q|+*`-d>@0JiB?&{@oK**PhETryQ$#pMV{#uNJ7@Co#wFxI*hK1kb&ub7;mKGDjXOk6@reVW`@KZOE*lr3Fk@Enm4o zQKQ7F>wC~DAx={~O2IZpLvyRPb0UyV&)SKBn*P<3*NH8M;`4^x4Du^$pn(j_3@ew{ zrc98Ckp^v3;L4hHt&L61%Rj5FqjvMHBS3(-sTTHV0TTH1lG#q**%9EJ_(CpskK7 zSTb5wvw8zeAQ;0k2$f4D*Ya`NQkm+lX=-kT?F3xZv^HuCGB7@DE?H?H@<*^u5JPl% zSJ&Ux<0E@QkB)zA9QE_>yJ+Wym0!ubKmUQT502S2I=nxvl>g77Rgd^{@w*K_x*QCe z(D9Ewn*G=it&cx==b-zu9*8^`UOfz|_)y6Isl=@8r=O2#W%%vIkFFjMWU*raQOfTN z?+k@ohKVJF`0$04#cKA0G=^UfesnP-gZF6GV-cMV#9iZ%-{7#h{*{;KYA%T9;WvqK z;n0kk{=v|rV;&m~Cbw834{)WW(Rp@gs)W(BmJO?*kEEy$Z~R8NYK3Z)nr6%Z)V8z) zXxB@3o)Hjkh6A4pf6!3yhmi#(C89uX*d{>t{y=tO2tfQlok0MUJB$5)!X`i-(lx7K z`l8>T$bgl7%ziY5f5qQKi=D_EamehA(Qqk*W*HtR_+Cw&K%%C+_U%NtxqqL&c5L+Defd4W8XGhH>=lKEn_yGKx0Q|-P{N@0BZ2*2(0RE)_{NVsR$hN@W z2hjg80RK7gTxUGd&r+1}uL9_Y;Tf6hj3@e;3HnQcXDa{c0r<56_>BShvH*O20RGp& zU7Hm#&By$d{BY$PeX3ey^57w41o(WCrjC%Cbi``kb zJo{$!Q@p-?T}`vm2BvPfqlzv%(ayY5Q4L)t;mYy@x3t=`!^5gPx8OOerNAsQrAhx` z8t#}v-w8uJ)lhc6y=FPJw2?%U(EwkwvId&jG;k;Oyr}1%4)3okZRV^-v6&Gmg|+r0 z+URvFp<%BnjFqf`%Ka&&bECIz-Uz6UFRY;U-vnWembhhKyBryJmHs&?ck9DUduaad zPOaN7%xFa}#VlwV#J8o-8dZ2+4p8<-k*yY0_I}x_X-(NIfR!+9zYXtL%Z(a+X3hTq z8H~DkCOvsygw$kf;42>bfjr4)qaV4?P7h&pWj=hVf%Tp%S7$t7aqig|jqC09zR~)l zefS!SbMMC`_L?4_Z*;=vl(|jmh6^9TIo{Ke57tdmF6rQ23WYAbgBLoue1j*S2@d|6 zLqE~MvoU_qk$#f7)PKi2_+$q!ad5ZXR$5&0>)G^LEiU;LoZ})L({(=esZBmUh6*bn zK0bmUbog8*ApFA?_t(4Z#qyU=85Wo6h`Z%~kAu7AaL~c0n5g=%yJv~*=co;H_bj>i zs}3Kx{S;@Jh?M7Y%Y$B-#ig82+pw6$rJMzy>+o^Qxzfi+^02_iM{sv9Xptk2>;z23sdvtc-2LObCj zc)i2N?MK@jyu|XL7qi#G|Deceap5nx`y6!TY_#+&w~6+e-lhP2djQ_<;BNWvbMR7o zP46{(eG$^-K0$Fk_CoTt%jWB(gS&6TZ(CgQEA%oh5_jp}we@~fZy(WFs zUei0~;BJ3B>)@_VP>#(9`M9{Ox%qLv|IztzYz)YV%N|ZYeWyeJF%wn)J!x^4vs*r= z9GuUuSMB}V)*n!w4(`&QwK(N*+nYNNam#J0^L)R?ku&DtuI`LyX~^Ggx6()axQr8i zyfuK&HV1d*YrxLwH+o? zJY%V={ufq^6j+EWVs?6#!egnc{uloEoQr1T_s7QPGn+hvxMj&T54onl0KZJ>CkhSKB3ocgpDg|9 zuL71S{a3BrvaVye4P1$CL_ntW4^A*KE)w}I(@2?3eX zPfRi~Wd6hS$kr%zX2>$`aL%N z+Ys(LfBM`bohkifhV;35{Wtw5Cw-}}vJjc^-8n7;k~Y3P z&onXqNcxOJ$LAlf-7%PWBZY;#)Oe}C5>Nc`Hhzl0Ui`I<@5d#c;L~kH~@ zBEQ6+ittS3zsr{Yc1y_m&%;mROS|B+-#>OS${9OIf6SM@?>1xIF@BkyR218Bgz0gt z_NUKhN~ZK1DKOlB`3lCL{#B*L*nymOAGSw%){HW=3zhb?m@++N$hVeUw>h4?I*ILh}!ln_E?18-t;o| z+jez_Lv5-IXVGD=?&h$1s{?0HeK&+NSi|AB+Vy#2;RE3*INPkR?-0(e*Ly#n!(No# z6`>tG7YQQib1e@|I5T_qr(<1PvHx&3@O-aqM?pq}KiiWI>s4_dr`{_l8Zt^{=rH1y!T>2*s8r z*4JX$JtpU&#X>u3u;+*JA+A0T%#}MO@Bi&9J!SWxx%~ebygRPIo~vnDJId|(p4~h{ zx>TR}dMI)A+-MT&1?zam__Vpv9_-a-zW)*NNW(g*1r6jqP*bXU%LnJr4vkfZHXk1n zO zJ^uq|ht*?WCHL}hKjjIWQ@#i3d;z@oemdF3J(Vo$9_&@++1&~JqgUvQ(kJZO2~U+&a`}?Il^!x}~-2>rsDq z@0-|`PzA?XcHX8TOD5*y(}lWt=4PCUU3+y_v>j(7VZg*t<^HlhnRCu=&elx-gZ_8iO1HMuY zJpYw>=3Z8|3x&2`;9;M(hke?p*ILwZc?{?D@eFCS`FKo4DFg0*oM2h~3TLo#Z!6E6 z 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 af$X!XLs&kCA5robO8xm3!hIK(|NjA8a1LJp literal 172184 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

iz{2)}Mwl8$+ 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

=9*sVPzViaYq&tQ@?*`42c9J`K`dvH$) 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 L-HCYHx#j;q(MX$O diff --git a/android/armeabi-v7a/include/openssl/aes.h b/android/armeabi-v7a/include/openssl/aes.h new file mode 100644 index 00000000..245c552a --- /dev/null +++ b/android/armeabi-v7a/include/openssl/aes.h @@ -0,0 +1,92 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include + +# include +# ifdef __cplusplus +extern "C" { +# endif + +# 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 + +/* 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); + +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); +/* 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 diff --git a/android/armeabi-v7a/include/openssl/asn1.h b/android/armeabi-v7a/include/openssl/asn1.h new file mode 100644 index 00000000..7cf61161 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/asn1.h @@ -0,0 +1,1096 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1_H +# define HEADER_ASN1_H + +# include +# include +# include +# include +# include +# include + +# include + +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# 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_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# 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_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 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* 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; +DEFINE_STACK_OF(X509_ALGOR) + +# 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 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* 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 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# 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; + +DEFINE_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 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * 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) + +DEFINE_STACK_OF(ASN1_INTEGER) + +DEFINE_STACK_OF(ASN1_GENERALSTRING) + +DEFINE_STACK_OF(ASN1_UTF8STRING) + +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; + +DEFINE_STACK_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) + +/* 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 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 + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const 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_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +ASN1_OBJECT *ASN1_OBJECT_new(void); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DEFINE_STACK_OF(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(const ASN1_STRING *x); +DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +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(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +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); + +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(const 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 i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const 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_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +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_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const 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); + +unsigned long ASN1_tag2bit(int tag); + +/* 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_STDIO +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, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +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, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +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); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +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(const 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(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +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); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* 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(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const 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. + */ + +int 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_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_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_DO_LOCK 233 +# define ASN1_F_ASN1_DUP 111 +# 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_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_INT64 224 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_GET_UINT64 225 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 +# 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_PCTX_NEW 205 +# define ASN1_F_ASN1_SCTX_NEW 221 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_GET_INT64 227 +# define ASN1_F_ASN1_STRING_GET_UINT64 230 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# define ASN1_F_ASN1_STRING_TO_BN 228 +# 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_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# 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_STRING 229 +# 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_C2I_IBUF 226 +# define ASN1_F_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_DO_TCREATE 222 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# 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_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_PBE2_SET_SCRYPT 231 +# 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_PKCS5_SCRYPT_SET 232 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_STBL_MODULE_INIT 223 +# 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_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_OBJECT_HEADER 102 +# 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_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_SETTING_CIPHER_PARAMS 114 +# define ASN1_R_EXPECTING_AN_INTEGER 115 +# define ASN1_R_EXPECTING_AN_OBJECT 116 +# 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_NEGATIVE_VALUE 226 +# 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_PADDING 221 +# define ASN1_R_ILLEGAL_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 +# 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_SCRYPT_PARAMETERS 227 +# define ASN1_R_INVALID_SEPARATOR 131 +# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_INVALID_VALUE 219 +# 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_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_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_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +# define ASN1_R_TOO_LARGE 223 +# define ASN1_R_TOO_LONG 155 +# define ASN1_R_TOO_SMALL 224 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 195 +# 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_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_INTEGER_TYPE 225 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/asn1_mac.h b/android/armeabi-v7a/include/openssl/asn1_mac.h new file mode 100644 index 00000000..7ac1782a --- /dev/null +++ b/android/armeabi-v7a/include/openssl/asn1_mac.h @@ -0,0 +1,10 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#error "This file is obsolete; please update your software." diff --git a/android/armeabi-v7a/include/openssl/asn1t.h b/android/armeabi-v7a/include/openssl/asn1t.h new file mode 100644 index 00000000..8eedfb3f --- /dev/null +++ b/android/armeabi-v7a/include/openssl/asn1t.h @@ -0,0 +1,924 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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 static_ASN1_ITEM_start(itname) \ + static 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 static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# 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) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_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 static_ASN1_SEQUENCE_END(stname) static_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 static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_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) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), 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 static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_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 static_ASN1_BROKEN_SEQUENCE_END(stname) \ + static_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 static_ASN1_SEQUENCE_END_cb(stname, tname) static_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 static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_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 static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_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 static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_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) } + +/* 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) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,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, adb_cb, def, none) \ + ;\ + static const ASN1_ADB name##_adb = {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + } + +# else + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + 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 */ + const char *field_name; /* Field name */ + 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 */ + int (*adb_cb)(long *psel); /* Application callback */ + 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 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) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* 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) */ + const char *sname; /* Structure name */ +}; + +/*- + * 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. + * + * 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_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 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_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) + +# 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));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_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) + +DEFINE_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_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); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/armeabi-v7a/include/openssl/async.h b/android/armeabi-v7a/include/openssl/async.h new file mode 100644 index 00000000..5b2e496d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/async.h @@ -0,0 +1,98 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifndef HEADER_ASYNC_H +# define HEADER_ASYNC_H + +#if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include to use this */ +#define OSSL_ASYNC_FD HANDLE +#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE +# endif +#else +#define OSSL_ASYNC_FD int +#define OSSL_BAD_ASYNC_FD -1 +#endif + + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct async_job_st ASYNC_JOB; +typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; + +#define ASYNC_ERR 0 +#define ASYNC_NO_JOBS 1 +#define ASYNC_PAUSE 2 +#define ASYNC_FINISH 3 + +int ASYNC_init_thread(size_t max_size, size_t init_size); +void ASYNC_cleanup_thread(void); + +#ifdef OSSL_ASYNC_FD +ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); +void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); +int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD fd, + void *custom_data, + void (*cleanup)(ASYNC_WAIT_CTX *, const void *, + OSSL_ASYNC_FD, void *)); +int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD *fd, void **custom_data); +int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, + size_t *numfds); +int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); +#endif + +int ASYNC_is_capable(void); + +int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, + int (*func)(void *), void *args, size_t size); +int ASYNC_pause_job(void); + +ASYNC_JOB *ASYNC_get_current_job(void); +ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); +void ASYNC_block_pause(void); +void ASYNC_unblock_pause(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. + */ + +int ERR_load_ASYNC_strings(void); + +/* Error codes for the ASYNC functions. */ + +/* Function codes. */ +# define ASYNC_F_ASYNC_CTX_NEW 100 +# define ASYNC_F_ASYNC_INIT_THREAD 101 +# define ASYNC_F_ASYNC_JOB_NEW 102 +# define ASYNC_F_ASYNC_PAUSE_JOB 103 +# define ASYNC_F_ASYNC_START_FUNC 104 +# define ASYNC_F_ASYNC_START_JOB 105 + +/* Reason codes. */ +# define ASYNC_R_FAILED_TO_SET_POOL 101 +# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 +# define ASYNC_R_INIT_FAILED 105 +# define ASYNC_R_INVALID_POOL_SIZE 103 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/bio.h b/android/armeabi-v7a/include/openssl/bio.h new file mode 100644 index 00000000..9bc941b2 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/bio.h @@ -0,0 +1,854 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIO_H +# define HEADER_BIO_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include + +# ifndef OPENSSL_NO_SCTP +# ifndef OPENSSL_SYS_VMS +# include +# else +# include +# endif +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif + +#define BIO_TYPE_START 128 + +/* + * 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 */ +# 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 + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 50 + +# 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 + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we should't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +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) + +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +BIO_callback_fn BIO_get_callback(const BIO *b); +void BIO_set_callback(BIO *b, BIO_callback_fn callback); +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef void bio_info_cb(BIO *, int, const char *, int, long, long); + +DEFINE_STACK_OF(BIO) + +/* 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 + +/* + * #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_C_SET_CONNECT_MODE 155 + +# 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) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_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_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)addr) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(char *)port) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #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,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3,(char *)bio) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +/* BIO_s_accept() and BIO_s_connect() */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)name) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)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,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (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) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t 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); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(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) (BIO *, int, const char *, int, long, long)); +void *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); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +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); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +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 +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +# endif + +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_STDIO +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); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +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_sock_init(void); +# if OPENSSL_API_COMPAT < 0x10100000L +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); + +DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) +DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) +DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) +DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) +DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +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__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(BIO_METHOD *biom)) (BIO *, const char *, int); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int (*BIO_meth_get_read(BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int (*BIO_meth_get_puts(BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(BIO_METHOD *biom)) + (BIO *, int, bio_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + bio_info_cb *)); + +/* 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. + */ + +int ERR_load_BIO_strings(void); + +/* Error codes for the BIO functions. */ + +/* Function codes. */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_ADDR_STRINGS 134 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_ACCEPT_EX 137 +# define BIO_F_BIO_ADDR_NEW 144 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CONNECT 138 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_NEW_INDEX 102 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_LISTEN 139 +# define BIO_F_BIO_LOOKUP 135 +# 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_PARSE_HOSTSERV 136 +# define BIO_F_BIO_PUTS 110 +# define BIO_F_BIO_READ 111 +# define BIO_F_BIO_SOCKET 140 +# define BIO_F_BIO_SOCKET_NBIO 142 +# define BIO_F_BIO_SOCK_INFO 141 +# define BIO_F_BIO_SOCK_INIT 112 +# define BIO_F_BIO_WRITE 113 +# define BIO_F_BUFFER_CTRL 114 +# define BIO_F_CONN_CTRL 127 +# define BIO_F_CONN_STATE 115 +# define BIO_F_DGRAM_SCTP_READ 132 +# define BIO_F_DGRAM_SCTP_WRITE 133 +# define BIO_F_FILE_CTRL 116 +# define BIO_F_FILE_READ 130 +# define BIO_F_LINEBUFFER_CTRL 129 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_SSL_NEW 118 + +/* Reason codes. */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 +# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_GETSOCKNAME_ERROR 132 +# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 +# define BIO_R_GETTING_SOCKTYPE 134 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_SOCKET 135 +# define BIO_R_IN_USE 123 +# define BIO_R_LISTEN_V6_ONLY 136 +# define BIO_R_LOOKUP_RETURNED_NOTHING 142 +# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 +# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_KEEPALIVE 137 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNABLE_TO_NODELAY 138 +# define BIO_R_UNABLE_TO_REUSEADDR 139 +# define BIO_R_UNAVAILABLE_IP_FAMILY 145 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNKNOWN_INFO_TYPE 140 +# define BIO_R_UNSUPPORTED_IP_FAMILY 146 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/blowfish.h b/android/armeabi-v7a/include/openssl/blowfish.h new file mode 100644 index 00000000..cd3e460e --- /dev/null +++ b/android/armeabi-v7a/include/openssl/blowfish.h @@ -0,0 +1,61 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BLOWFISH_H +# define HEADER_BLOWFISH_H + +# include + +# ifndef OPENSSL_NO_BF +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! BF_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define BF_LONG unsigned int + +# 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; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/bn.h b/android/armeabi-v7a/include/openssl/bn.h new file mode 100644 index 00000000..17bd5213 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/bn.h @@ -0,0 +1,575 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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_STDIO +# include +# endif +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 64-bit processor with LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT_LONG +# define BN_ULONG unsigned long +# define BN_BYTES 8 +# endif + +/* + * 64-bit processor other than LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT +# define BN_ULONG unsigned long long +# define BN_BYTES 8 +# endif + +# ifdef THIRTY_TWO_BIT +# define BN_ULONG unsigned int +# define BN_BYTES 4 +# endif + +# define BN_BITS2 (BN_BYTES * 8) +# define BN_BITS (BN_BITS2 * 2) +# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) + +# 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 +# define BN_FLG_SECURE 0x08 + +# if OPENSSL_API_COMPAT < 0x00908000L +/* deprecated name for the flag */ +# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME +# define BN_FLG_FREE 0x8000 /* used for debugging */ +# endif + +void BN_set_flags(BIGNUM *b, int n); +int BN_get_flags(const BIGNUM *b, int n); + +/* Values for |top| in BN_rand() */ +#define BN_RAND_TOP_ANY -1 +#define BN_RAND_TOP_ONE 0 +#define BN_RAND_TOP_TWO 1 + +/* Values for |bottom| in BN_rand() */ +#define BN_RAND_BOTTOM_ANY 0 +#define BN_RAND_BOTTOM_ODD 1 + +/* + * get a clone of a BIGNUM with changed flags, for *temporary* use only (the + * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The + * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that + * has not been otherwise initialised or used. + */ +void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); + +/* Wrapper function to make using BN_GENCB easier */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); + +BN_GENCB *BN_GENCB_new(void); +void BN_GENCB_free(BN_GENCB *cb); + +/* Populate a BN_GENCB structure with an "old"-style callback */ +void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), + void *cb_arg); + +/* Populate a BN_GENCB structure with a "new"-style callback */ +void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), + void *cb_arg); + +void *BN_GENCB_get_arg(BN_GENCB *cb); + +# 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) + +int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_zero(const BIGNUM *a); +int BN_is_one(const BIGNUM *a); +int BN_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_odd(const BIGNUM *a); + +# define BN_one(a) (BN_set_word((a),1)) + +void BN_zero_ex(BIGNUM *a); + +# if OPENSSL_API_COMPAT >= 0x00908000L +# 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); +BN_CTX *BN_CTX_secure_new(void); +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 l); +int BN_security_bits(int L, int N); +BIGNUM *BN_new(void); +BIGNUM *BN_secure_new(void); +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); +int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +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 + */ +int BN_is_negative(const BIGNUM *b); + +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_STDIO +int BN_print_fp(FILE *fp, const BIGNUM *a); +# endif +int BN_print(BIO *bio, const BIGNUM *a); +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 */ +DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, + const BIGNUM *rem, + void (*callback) (int, int, + void *), + void *cb_arg)) +DEPRECATEDIN_0_9_8(int + BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg)) +DEPRECATEDIN_0_9_8(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)) + +/* 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); +int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, + BN_CTX *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, CRYPTO_RWLOCK *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 *); + +int BN_BLINDING_is_current_thread(BN_BLINDING *b); +void BN_BLINDING_set_current_thread(BN_BLINDING *b); +int BN_BLINDING_lock(BN_BLINDING *b); +int BN_BLINDING_unlock(BN_BLINDING *b); + +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); + +DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) +DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 + * mont */ + +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); + +int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, + const BIGNUM *field, BN_CTX *ctx); + +int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, + const BIGNUM *priv, const unsigned char *message, + size_t message_len, BN_CTX *ctx); + +/* Primes from RFC 2409 */ +BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif + +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. + */ + +int 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_COMPUTE_WNAF 142 +# 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_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND_INTERNAL 120 +# define BN_F_BN_GENCB_NEW 143 +# define BN_F_BN_GENERATE_DSA_NONCE 140 +# define BN_F_BN_GENERATE_PRIME_EX 141 +# define BN_F_BN_GF2M_MOD 131 +# define BN_F_BN_GF2M_MOD_EXP 132 +# define BN_F_BN_GF2M_MOD_MUL 133 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +# define BN_F_BN_GF2M_MOD_SQR 136 +# define BN_F_BN_GF2M_MOD_SQRT 137 +# define BN_F_BN_LSHIFT 145 +# define BN_F_BN_MOD_EXP2_MONT 118 +# define BN_F_BN_MOD_EXP_MONT 109 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +# define BN_F_BN_MOD_EXP_MONT_WORD 117 +# define BN_F_BN_MOD_EXP_RECP 125 +# define BN_F_BN_MOD_EXP_SIMPLE 126 +# define BN_F_BN_MOD_INVERSE 110 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +# define BN_F_BN_MOD_LSHIFT_QUICK 119 +# define BN_F_BN_MOD_SQRT 121 +# define BN_F_BN_MPI2BN 112 +# define BN_F_BN_NEW 113 +# define BN_F_BN_RAND 114 +# define BN_F_BN_RAND_RANGE 122 +# define BN_F_BN_RSHIFT 146 +# define BN_F_BN_SET_WORDS 144 +# define BN_F_BN_USUB 115 + +/* Reason codes. */ +# define BN_R_ARG2_LT_ARG3 100 +# define BN_R_BAD_RECIPROCAL 101 +# define BN_R_BIGNUM_TOO_LONG 114 +# define BN_R_BITS_TOO_SMALL 118 +# define BN_R_CALLED_WITH_EVEN_MODULUS 102 +# define BN_R_DIV_BY_ZERO 103 +# define BN_R_ENCODING_ERROR 104 +# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +# define BN_R_INPUT_NOT_REDUCED 110 +# define BN_R_INVALID_LENGTH 106 +# define BN_R_INVALID_RANGE 115 +# define BN_R_INVALID_SHIFT 119 +# define BN_R_NOT_A_SQUARE 111 +# define BN_R_NOT_INITIALIZED 107 +# define BN_R_NO_INVERSE 108 +# define BN_R_NO_SOLUTION 116 +# define BN_R_PRIVATE_KEY_TOO_LARGE 117 +# 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/android/armeabi-v7a/include/openssl/buffer.h b/android/armeabi-v7a/include/openssl/buffer.h new file mode 100644 index 00000000..91f0e07f --- /dev/null +++ b/android/armeabi-v7a/include/openssl/buffer.h @@ -0,0 +1,76 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFFER_H +# define HEADER_BUFFER_H + +# include +# ifndef HEADER_CRYPTO_H +# include +# endif + + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# if !defined(NO_SYS_TYPES_H) +# include +# endif + +/* + * These names are outdated as of OpenSSL 1.1; a future release + * will move them to be deprecated. + */ +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) + +struct buf_mem_st { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ + unsigned long flags; +}; + +# define BUF_MEM_FLAG_SECURE 0x01 + +BUF_MEM *BUF_MEM_new(void); +BUF_MEM *BUF_MEM_new_ex(unsigned long flags); +void BUF_MEM_free(BUF_MEM *a); +size_t BUF_MEM_grow(BUF_MEM *str, size_t len); +size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +void BUF_reverse(unsigned char *out, const unsigned char *in, 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. + */ + +int ERR_load_BUF_strings(void); + +/* Error codes for the BUF functions. */ + +/* Function codes. */ +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 + +/* Reason codes. */ + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/camellia.h b/android/armeabi-v7a/include/openssl/camellia.h new file mode 100644 index 00000000..151f3c13 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/camellia.h @@ -0,0 +1,83 @@ +/* + * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAMELLIA_H +# define HEADER_CAMELLIA_H + +# include + +# ifndef OPENSSL_NO_CAMELLIA +# include +#ifdef __cplusplus +extern "C" { +#endif + +# 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. + */ + +/* 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; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/cast.h b/android/armeabi-v7a/include/openssl/cast.h new file mode 100644 index 00000000..2cc89ae0 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/cast.h @@ -0,0 +1,53 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAST_H +# define HEADER_CAST_H + +# include + +# ifndef OPENSSL_NO_CAST +# ifdef __cplusplus +extern "C" { +# 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; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/cmac.h b/android/armeabi-v7a/include/openssl/cmac.h new file mode 100644 index 00000000..3535a9ab --- /dev/null +++ b/android/armeabi-v7a/include/openssl/cmac.h @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMAC_H +# define HEADER_CMAC_H + +# ifndef OPENSSL_NO_CMAC + +#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 +#endif diff --git a/android/armeabi-v7a/include/openssl/cms.h b/android/armeabi-v7a/include/openssl/cms.h new file mode 100644 index 00000000..7e534e0d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/cms.h @@ -0,0 +1,512 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMS_H +# define HEADER_CMS_H + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# 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; + +DEFINE_STACK_OF(CMS_SignerInfo) +DEFINE_STACK_OF(CMS_RecipientEncryptedKey) +DEFINE_STACK_OF(CMS_RecipientInfo) +DEFINE_STACK_OF(CMS_RevocationInfoChoice) +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 +# define CMS_ASCIICRLF 0x80000 + +const ASN1_OBJECT *CMS_get0_type(const 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, + const 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, const 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, const 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, + const 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. + */ + +int 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_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 +#endif diff --git a/android/armeabi-v7a/include/openssl/comp.h b/android/armeabi-v7a/include/openssl/comp.h new file mode 100644 index 00000000..260ff1e0 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/comp.h @@ -0,0 +1,72 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include + +# ifndef OPENSSL_NO_COMP +# include +# ifdef __cplusplus +extern "C" { +# endif + + + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); +int COMP_CTX_get_type(const COMP_CTX* comp); +int COMP_get_type(const COMP_METHOD *meth); +const char *COMP_get_name(const 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_zlib(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +#define COMP_zlib_cleanup() while(0) continue +#endif + +# ifdef HEADER_BIO_H +# ifdef ZLIB +const 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. + */ + +int 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 +#endif diff --git a/android/armeabi-v7a/include/openssl/conf.h b/android/armeabi-v7a/include/openssl/conf.h new file mode 100644 index 00000000..462e3c9d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/conf.h @@ -0,0 +1,216 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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; + +DEFINE_STACK_OF(CONF_VALUE) +DEFINE_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; + +DEFINE_STACK_OF(CONF_MODULE) +DEFINE_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_STDIO +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); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) + +#if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * 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); +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +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); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* 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); +#if OPENSSL_API_COMPAT < 0x10100000L +# define CONF_modules_free() while(0) continue +#endif +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. + */ + +int 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_FP 103 +# 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_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_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/android/armeabi-v7a/include/openssl/conf_api.h b/android/armeabi-v7a/include/openssl/conf_api.h new file mode 100644 index 00000000..a0275ad7 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/conf_api.h @@ -0,0 +1,40 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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/android/armeabi-v7a/include/openssl/crypto.h b/android/armeabi-v7a/include/openssl/crypto.h new file mode 100644 index 00000000..bd0b1408 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/crypto.h @@ -0,0 +1,463 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# 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 + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_API_COMPAT */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); + +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +struct crypto_ex_data_st { + STACK_OF(void) *sk; +}; +DEFINE_STACK_OF(void) + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX__COUNT 14 + +/* + * 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 OPENSSL_malloc_init() \ + CRYPTO_set_mem_functions(CRYPTO_malloc, CRYPTO_realloc, CRYPTO_free) + +int CRYPTO_mem_ctrl(int mode); + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_hexchar2int(unsigned char c); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 + +int OPENSSL_issetugid(void); + +typedef void 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, const CRYPTO_EX_DATA *from, + void *srcp, int idx, long argl, void *argp); +__owur 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); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * 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, + const 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); + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# if OPENSSL_API_COMPAT < 0x10000000L +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_API_COMPAT < 0x10000000L */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_API_COMPAT < 0x10100000L */ + +int CRYPTO_set_mem_functions( + void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, int), + void (*f) (void *, const char *, int)); +int CRYPTO_set_mem_debug(int flag); +void CRYPTO_get_mem_functions( + void *(**m) (size_t, const char *, int), + void *(**r) (void *, size_t, const char *, int), + void (**f) (void *, const char *, int)); + +void *CRYPTO_malloc(size_t num, const char *file, int line); +void *CRYPTO_zalloc(size_t num, const char *file, int line); +void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_done(void); +void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +int CRYPTO_mem_debug_push(const char *info, const char *file, int line); +int CRYPTO_mem_debug_pop(void); + +/*- + * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) + * The flag 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_mem_debug_malloc(void *addr, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); + +# ifndef OPENSSL_NO_STDIO +int CRYPTO_mem_leaks_fp(FILE *); +# endif +int CRYPTO_mem_leaks(BIO *bio); +# endif + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# if OPENSSL_API_COMPAT < 0x10100000L +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +int FIPS_mode(void); +int FIPS_mode_set(int r); + +void OPENSSL_init(void); + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const volatile void * volatile in_a, + const volatile void * volatile in_b, + size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* OPENSSL_INIT flag 0x00010000 reserved for internal use */ +/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_file); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# include +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + +/* 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. + */ + +int ERR_load_CRYPTO_strings(void); + +/* Error codes for the CRYPTO functions. */ + +/* Function codes. */ +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_MEMDUP 115 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_GET_AND_LOCK 113 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 + +/* Reason codes. */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/ct.h b/android/armeabi-v7a/include/openssl/ct.h new file mode 100644 index 00000000..6c632652 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ct.h @@ -0,0 +1,518 @@ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CT_H +# define HEADER_CT_H + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +DEFINE_STACK_OF(SCT) +DEFINE_STACK_OF(CTLOG) + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialisation * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64|. The |name| is a string to help users identify this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * See internal/cryptlib.h for the environment variable and file path that are + * consulted to find the default file. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +/* 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. + */ + +int ERR_load_CT_strings(void); + +/* Error codes for the CT functions. */ + +/* Function codes. */ +# define CT_F_CTLOG_NEW 117 +# define CT_F_CTLOG_NEW_FROM_BASE64 118 +# define CT_F_CTLOG_NEW_FROM_CONF 119 +# define CT_F_CTLOG_NEW_NULL 120 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 +# define CT_F_CTLOG_STORE_LOAD_FILE 123 +# define CT_F_CTLOG_STORE_LOAD_LOG 130 +# define CT_F_CTLOG_STORE_NEW 131 +# define CT_F_CT_BASE64_DECODE 124 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 +# define CT_F_I2O_SCT 107 +# define CT_F_I2O_SCT_LIST 108 +# define CT_F_I2O_SCT_SIGNATURE 109 +# define CT_F_O2I_SCT 110 +# define CT_F_O2I_SCT_LIST 111 +# define CT_F_O2I_SCT_SIGNATURE 112 +# define CT_F_SCT_CTX_NEW 126 +# define CT_F_SCT_NEW 100 +# define CT_F_SCT_NEW_FROM_BASE64 127 +# define CT_F_SCT_SET0_LOG_ID 101 +# define CT_F_SCT_SET1_EXTENSIONS 114 +# define CT_F_SCT_SET1_LOG_ID 115 +# define CT_F_SCT_SET1_SIGNATURE 116 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 +# define CT_F_SCT_SET_SIGNATURE_NID 103 +# define CT_F_SCT_SET_VERSION 104 +# define CT_F_SCT_CTX_VERIFY 128 + +/* Reason codes. */ +# define CT_R_BASE64_DECODE_ERROR 108 +# define CT_R_INVALID_LOG_ID_LENGTH 100 +# define CT_R_LOG_CONF_INVALID 109 +# define CT_R_LOG_CONF_INVALID_KEY 110 +# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 +# define CT_R_LOG_CONF_MISSING_KEY 112 +# define CT_R_LOG_KEY_INVALID 113 +# define CT_R_SCT_INVALID 104 +# define CT_R_SCT_INVALID_SIGNATURE 107 +# define CT_R_SCT_LIST_INVALID 105 +# define CT_R_SCT_LOG_ID_MISMATCH 114 +# define CT_R_SCT_NOT_SET 106 +# define CT_R_SCT_UNSUPPORTED_VERSION 115 +# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 +# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 +# define CT_R_UNSUPPORTED_VERSION 103 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/des.h b/android/armeabi-v7a/include/openssl/des.h new file mode 100644 index 00000000..be4abbdf --- /dev/null +++ b/android/armeabi-v7a/include/openssl/des.h @@ -0,0 +1,174 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DES_H +# define HEADER_DES_H + +# include + +# ifndef OPENSSL_NO_DES +# ifdef __cplusplus +extern "C" { +# endif +# include + +typedef unsigned int DES_LONG; + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# 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; + +# 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) + +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_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); +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); +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); + +# define DES_fixup_key_parity DES_set_odd_parity + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/dh.h b/android/armeabi-v7a/include/openssl/dh.h new file mode 100644 index 00000000..ae309e7b --- /dev/null +++ b/android/armeabi-v7a/include/openssl/dh.h @@ -0,0 +1,343 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DH_H +# define HEADER_DH_H + +# include + +# ifndef OPENSSL_NO_DH +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * 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 responsibility 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 + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x)) +# define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x) +# define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH *DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_bits(const DH *dh); +int DH_size(const DH *dh); +int DH_security_bits(const DH *dh); +#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg)) + +/* 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_STDIO +int DHparams_print_fp(FILE *fp, const DH *x); +# endif +int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +DH *DH_get_1024_160(void); +DH *DH_get_2048_224(void); +DH *DH_get_2048_256(void); + +# ifndef OPENSSL_NO_CMS +/* 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); +# endif + +void DH_get0_pqg(const DH *dh, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DH_get0_key(const DH *dh, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +void DH_clear_flags(DH *dh, int flags); +int DH_test_flags(const DH *dh, int flags); +void DH_set_flags(DH *dh, int flags); +ENGINE *DH_get0_engine(DH *d); +long DH_get_length(const DH *dh); +int DH_set_length(DH *dh, long length); + +DH_METHOD *DH_meth_new(const char *name, int flags); +void DH_meth_free(DH_METHOD *dhm); +DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +const char *DH_meth_get0_name(const DH_METHOD *dhm); +int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +int DH_meth_get_flags(DH_METHOD *dhm); +int DH_meth_set_flags(DH_METHOD *dhm, int flags); +void *DH_meth_get0_app_data(const DH_METHOD *dhm); +int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); +int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); +int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, BN_GENCB *); +int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) (DH *, int, int, BN_GENCB *)); + + +# 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 +# ifndef OPENSSL_NO_CMS +# define EVP_PKEY_DH_KDF_X9_42 2 +# 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. + */ + +int 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 114 +# define DH_F_DH_CMS_SET_PEERKEY 115 +# define DH_F_DH_CMS_SET_SHARED_INFO 116 +# define DH_F_DH_METH_DUP 117 +# define DH_F_DH_METH_NEW 118 +# define DH_F_DH_METH_SET1_NAME 119 +# 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_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_MODULUS_TOO_LARGE 103 +# 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 111 +# define DH_R_SHARED_INFO_ERROR 113 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/dsa.h b/android/armeabi-v7a/include/openssl/dsa.h new file mode 100644 index 00000000..cb5fbc2f --- /dev/null +++ b/android/armeabi-v7a/include/openssl/dsa.h @@ -0,0 +1,282 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * The DSS routines are based on patches supplied by + * Steven Schoch . + */ + +#ifndef HEADER_DSA_H +# define HEADER_DSA_H + +# include + +# ifndef OPENSSL_NO_DSA +# ifdef __cplusplus +extern "C" { +# endif +# include +# include +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +# define DSA_FLAG_CACHE_MONT_P 0x01 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * 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 responsibility 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 +# define DSA_FLAG_FIPS_CHECKED 0x0800 + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st DSA_SIG; + +# 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); +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +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 *); +const DSA_METHOD *DSA_get_method(DSA *d); + +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 *); +int DSA_bits(const DSA *d); +int DSA_security_bits(const DSA *d); + /* 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); +#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +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 */ +DEPRECATEDIN_0_9_8(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)) + +/* 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); + +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +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) + +void DSA_get0_pqg(const DSA *d, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DSA_get0_key(const DSA *d, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); +void DSA_clear_flags(DSA *d, int flags); +int DSA_test_flags(const DSA *d, int flags); +void DSA_set_flags(DSA *d, int flags); +ENGINE *DSA_get0_engine(DSA *d); + +DSA_METHOD *DSA_meth_new(const char *name, int flags); +void DSA_meth_free(DSA_METHOD *dsam); +DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); +int DSA_meth_get_flags(DSA_METHOD *dsam); +int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); +DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA *); +int DSA_meth_set_sign(DSA_METHOD *dsam, + DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); +int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) + (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); +int DSA_meth_set_sign_setup(DSA_METHOD *dsam, + int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); +int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) + (const unsigned char *, int , DSA_SIG *, DSA *); +int DSA_meth_set_verify(DSA_METHOD *dsam, + int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); +int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_mod_exp(DSA_METHOD *dsam, + int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, + int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); +int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); +int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) + (DSA *, int, const unsigned char *, int, int *, unsigned long *, + BN_GENCB *); +int DSA_meth_set_paramgen(DSA_METHOD *dsam, + int (*paramgen) (DSA *, int, const unsigned char *, int, int *, + unsigned long *, BN_GENCB *)); +int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); + +/* 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. + */ + +int ERR_load_DSA_strings(void); + +/* Error codes for the DSA functions. */ + +/* Function codes. */ +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# define DSA_F_DSA_BUILTIN_PARAMGEN 125 +# 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_METH_DUP 127 +# define DSA_F_DSA_METH_NEW 128 +# define DSA_F_DSA_METH_SET1_NAME 129 +# 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 102 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_KEYGEN 121 + +/* 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_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_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/dtls1.h b/android/armeabi-v7a/include/openssl/dtls1.h new file mode 100644 index 00000000..f4769f83 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/dtls1.h @@ -0,0 +1,56 @@ +/* + * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DTLS1_H +# define HEADER_DTLS1_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# define DTLS1_VERSION_MAJOR 0xFE + +# define DTLS1_BAD_VER 0x0100 + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +/* 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 + + +/* 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/android/armeabi-v7a/include/openssl/e_os2.h b/android/armeabi-v7a/include/openssl/e_os2.h new file mode 100644 index 00000000..99ea3477 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/e_os2.h @@ -0,0 +1,311 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_E_OS2_H +# define HEADER_E_OS2_H + +# include + +#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 + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +# if defined(OPENSSL_SYS_MSDOS) +# undef OPENSSL_SYS_UNIX +# 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... + */ +/* + * UEFI lives here because it might be built with a Microsoft toolchain and + * we need to avoid the false positive match on Windows. + */ +# if defined(OPENSSL_SYS_UEFI) +# undef OPENSSL_SYS_UNIX +# elif defined(OPENSSL_SYS_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +# else +# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN32) +# define OPENSSL_SYS_WIN32 +# endif +# endif +# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN64) +# define OPENSSL_SYS_WIN64 +# endif +# endif +# if defined(OPENSSL_SYS_WINNT) +# undef OPENSSL_SYS_UNIX +# endif +# if defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# endif +# endif +# endif + +/* Anything that tries to look like Microsoft is "Windows" */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +# endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementor how he or she will link the application, so it + * requires some macro to be used. + */ +# ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to + * indicate that DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +# endif + +/* ------------------------------- OpenVMS -------------------------------- */ +# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if !defined(OPENSSL_SYS_VMS) +# undef OPENSSL_SYS_UNIX +# endif +# 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 + +/* -------------------------------- Unix ---------------------------------- */ +# ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) +# define OPENSSL_SYS_AIX +# endif +# endif + +/* -------------------------------- VOS ----------------------------------- */ +# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) +# define OPENSSL_SYS_VOS +# ifdef __HPPA__ +# define OPENSSL_SYS_VOS_HPPA +# endif +# ifdef __IA32__ +# define OPENSSL_SYS_VOS_IA32 +# 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 explicitly 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_EXTERN and OPENSSL_GLOBAL + * have some generally sensible values. + */ + +# if defined(OPENSSL_SYS_VMS_NODECC) +# define OPENSSL_EXPORT globalref +# define OPENSSL_EXTERN globalref +# define OPENSSL_GLOBAL globaldef +# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_EXTERN extern __declspec(dllimport) +# define OPENSSL_GLOBAL +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_EXTERN extern +# define OPENSSL_GLOBAL +# endif + +/*- + * 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 + +# ifdef _WIN32 +# ifdef _WIN64 +# define ossl_ssize_t __int64 +# define OSSL_SSIZE_MAX _I64_MAX +# else +# define ossl_ssize_t int +# define OSSL_SSIZE_MAX INT_MAX +# endif +# endif + +# if defined(OPENSSL_SYS_UEFI) && !defined(ssize_t) +# define ossl_ssize_t int +# define OSSL_SSIZE_MAX INT_MAX +# endif + +# ifndef ossl_ssize_t +# define ossl_ssize_t ssize_t +# if defined(SSIZE_MAX) +# define OSSL_SSIZE_MAX SSIZE_MAX +# elif defined(_POSIX_SSIZE_MAX) +# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX +# endif +# endif + +# ifdef DEBUG_UNUSED +# define __owur __attribute__((__warn_unused_result__)) +# else +# define __owur +# endif + +/* Standard integer types */ +# if defined(OPENSSL_SYS_UEFI) +typedef INT8 int8_t; +typedef UINT8 uint8_t; +typedef INT16 int16_t; +typedef UINT16 uint16_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef INT64 int64_t; +typedef UINT64 uint64_t; +# define PRIu64 "%Lu" +# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + defined(__osf__) || defined(__sgi) || defined(__hpux) || \ + defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) +# include +# elif defined(_MSC_VER) && _MSC_VER<=1500 +/* + * minimally required typdefs for systems not supporting inttypes.h or + * stdint.h: currently just older VC++ + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +# else +# include +# endif + +/* + * We need a format operator for some client tools for uint64_t. If inttypes.h + * isn't available or did not define it, just go with hard-coded. + */ +# ifndef PRIu64 +# ifdef SIXTY_FOUR_BIT_LONG +# define PRIu64 "lu" +# else +# define PRIu64 "llu" +# endif +# endif + +/* ossl_inline: portable inline definition usable in public headers */ +# if !defined(inline) && !defined(__cplusplus) +# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L + /* just use inline */ +# define ossl_inline inline +# elif defined(__GNUC__) && __GNUC__>=2 +# define ossl_inline __inline__ +# elif defined(_MSC_VER) + /* + * Visual Studio: inline is available in C++ only, however + * __inline is available for C, see + * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx + */ +# define ossl_inline __inline +# else +# define ossl_inline +# endif +# else +# define ossl_inline inline +# endif + +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +# define ossl_noreturn _Noreturn +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define ossl_noreturn __attribute__((noreturn)) +# else +# define ossl_noreturn +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/armeabi-v7a/include/openssl/ebcdic.h b/android/armeabi-v7a/include/openssl/ebcdic.h new file mode 100644 index 00000000..aa012855 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ebcdic.h @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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/android/armeabi-v7a/include/openssl/ec.h b/android/armeabi-v7a/include/openssl/ec.h new file mode 100644 index 00000000..656cb410 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ec.h @@ -0,0 +1,1581 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# ifndef OPENSSL_NO_EC +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x04 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + +typedef struct ec_method_st EC_METHOD; +typedef struct ec_group_st EC_GROUP; +typedef struct ec_point_st EC_POINT; +typedef struct ecpk_parameters_st ECPKPARAMETERS; +typedef struct ec_parameters_st ECPARAMETERS; + +/********************************************************************/ +/* 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 occurred + */ +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 montgomery data (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 unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the order of an EC_GROUP + * \param group EC_GROUP object + * \return the group order + */ +const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); + +/** Gets the number of bits of the order of an EC_GROUP + * \param group EC_GROUP object + * \return number of bits of group order. + */ +int EC_GROUP_order_bits(const EC_GROUP *group); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, + BN_CTX *ctx); + +/** Gets the cofactor of an EC_GROUP + * \param group EC_GROUP object + * \return the group cofactor + */ +const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); + +/** 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 the groups are equal, 1 if not, or -1 on error + */ +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); + +/** Creates a new EC_GROUP object from an ECPARAMETERS object + * \param params pointer to the ECPARAMETERS object + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); + +/** Creates an ECPARAMETERS object for the the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPARAMETERS object or NULL + * \return pointer to the new ECPARAMETERS object or NULL + * if an error occurred. + */ +ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, + ECPARAMETERS *params); + +/** Creates a new EC_GROUP object from an ECPKPARAMETERS object + * \param params pointer to an existing ECPKPARAMETERS object, or NULL + * \return newly created EC_GROUP object with specified curve, or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); + +/** Creates an ECPKPARAMETERS object for the the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPKPARAMETERS object or NULL + * \return pointer to the new ECPKPARAMETERS object or NULL + * if an error occurred. + */ +ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, + ECPKPARAMETERS *params); + +/********************************************************************/ +/* 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 is 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +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 occurred + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Encodes an EC_POINT object to an allocated octet string + * \param group underlying EC_GROUP object + * \param point EC_POINT object + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \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_point2buf(const EC_GROUP *group, const EC_POINT *point, + point_conversion_form_t form, + unsigned char **pbuf, 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 the point is on the curve, 0 if not, or -1 on error + */ +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 1 if the points are not equal, 0 if they are, or -1 on error + */ +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 further 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 occurred + */ +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 occurred + */ +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 occurred + */ +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 */ +/********************************************************************/ + +DECLARE_ASN1_ITEM(ECPKPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) +DECLARE_ASN1_ITEM(ECPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) + +/* + * 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_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +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)) + +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +# ifndef OPENSSL_NO_STDIO +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +# endif + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +/* 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 +# define EC_FLAG_COFACTOR_ECDH 0x1000 + +/** 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); + +#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) +int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +/* 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); + +/** Indicates if an EC_KEY can be used for signing. + * \param key the EC_KEY object + * \return 1 if can can sign and 0 otherwise. + */ +int EC_KEY_can_sign(const EC_KEY *eckey); + +/** Sets a public key from affine coordinates performing + * necessary 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); + +/** Encodes an EC_KEY public key to an allocated octet string + * \param key key to encode + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \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_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); + +/** Decodes a EC_KEY public key from a octet string + * \param key key to decode + * \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 occurred + */ + +int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, + BN_CTX *ctx); + +/** Decodes an EC_KEY private key from an octet string + * \param key key to decode + * \param buf memory buffer with the encoded private key + * \param len length of the encoded key + * \return 1 on success and 0 if an error occurred + */ + +int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); + +/** Encodes a EC_KEY private key to an octet string + * \param key key to encode + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ + +size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); + +/** Encodes an EC_KEY private key to an allocated octet string + * \param key key to encode + * \param pbuf returns pointer to allocated buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ + +size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); + +/********************************************************************/ +/* 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 parameters 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(const EC_KEY *key, unsigned char **out); + +/** 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); + +# ifndef OPENSSL_NO_STDIO +/** 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 + +const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +const EC_KEY_METHOD *EC_KEY_get_default_method(void); +void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +EC_KEY *EC_KEY_new_method(ENGINE *engine); + +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); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF) (const void *in, size_t inlen, + void *out, size_t *outlen)); + +typedef struct ECDSA_SIG_st 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); + +/** Accessor for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG pointer + * \param pr pointer to BIGNUM pointer for r (may be NULL) + * \param ps pointer to BIGNUM pointer for s (may be NULL) + */ +void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); + +/** Setter for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG pointer + * \param r pointer to BIGNUM for r (may be NULL) + * \param s pointer to BIGNUM for s (may be NULL) + */ +int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +/** 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 (optional), + * 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); + +/** 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 (optional), + * 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); + +/** 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); + +/********************************************************************/ +/* EC_KEY_METHOD constructors, destructors, writers and accessors */ +/********************************************************************/ + +EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); + +void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_init(EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, + const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_get_keygen(EC_KEY_METHOD *meth, + int (**pkeygen)(EC_KEY *key)); + +void EC_KEY_METHOD_get_compute_key(EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_get_sign(EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_verify(EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +# 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. + */ + +int ERR_load_EC_strings(void); + +/* Error codes for the EC functions. */ + +/* Function codes. */ +# define EC_F_BN_TO_FELEM 224 +# 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_ECDH_COMPUTE_KEY 246 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 +# define EC_F_ECDSA_DO_SIGN_EX 251 +# define EC_F_ECDSA_DO_VERIFY 252 +# define EC_F_ECDSA_SIGN_EX 254 +# define EC_F_ECDSA_SIGN_SETUP 248 +# define EC_F_ECDSA_SIG_NEW 265 +# define EC_F_ECDSA_VERIFY 253 +# define EC_F_ECKEY_PARAM2TYPE 223 +# define EC_F_ECKEY_PARAM_DECODE 212 +# define EC_F_ECKEY_PRIV_DECODE 213 +# define EC_F_ECKEY_PRIV_ENCODE 214 +# define EC_F_ECKEY_PUB_DECODE 215 +# define EC_F_ECKEY_PUB_ENCODE 216 +# define EC_F_ECKEY_TYPE2PARAM 220 +# define EC_F_ECPARAMETERS_PRINT 147 +# define EC_F_ECPARAMETERS_PRINT_FP 148 +# define EC_F_ECPKPARAMETERS_PRINT 149 +# define EC_F_ECPKPARAMETERS_PRINT_FP 150 +# define EC_F_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECX_KEY_OP 266 +# define EC_F_ECX_PRIV_ENCODE 267 +# define EC_F_ECX_PUB_ENCODE 268 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# 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_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_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_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# 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_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_ECPARAMETERS 261 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 +# 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_NEW_FROM_ECPARAMETERS 263 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# 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_NEW_METHOD 245 +# define EC_F_EC_KEY_OCT2PRIV 255 +# define EC_F_EC_KEY_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_PRIV2OCT 256 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 +# 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_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_NEW 196 +# define EC_F_EC_WNAF_MUL 187 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +# define EC_F_I2D_ECPARAMETERS 190 +# define EC_F_I2D_ECPKPARAMETERS 191 +# define EC_F_I2D_ECPRIVATEKEY 192 +# define EC_F_I2O_ECPUBLICKEY 151 +# define EC_F_NISTP224_PRE_COMP_NEW 227 +# define EC_F_NISTP256_PRE_COMP_NEW 236 +# define EC_F_NISTP521_PRE_COMP_NEW 237 +# define EC_F_O2I_ECPUBLICKEY 152 +# define EC_F_OLD_EC_PRIV_DECODE 222 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 +# define EC_F_OSSL_ECDSA_SIGN_SIG 249 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 +# define EC_F_PKEY_ECX_DERIVE 269 +# 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_BAD_SIGNATURE 156 +# 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_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 +# 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_KEY 116 +# define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_PEER_KEY 133 +# 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_NEED_NEW_SETUP_VALUES 157 +# define EC_R_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_NO_PRIVATE_VALUE 154 +# define EC_R_OPERATION_NOT_SUPPORTED 152 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_ARITHMETIC_FAILURE 155 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 +# 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 +#endif diff --git a/android/armeabi-v7a/include/openssl/ecdh.h b/android/armeabi-v7a/include/openssl/ecdh.h new file mode 100644 index 00000000..681f3d5e --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ecdh.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/android/armeabi-v7a/include/openssl/ecdsa.h b/android/armeabi-v7a/include/openssl/ecdsa.h new file mode 100644 index 00000000..681f3d5e --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ecdsa.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/android/armeabi-v7a/include/openssl/engine.h b/android/armeabi-v7a/include/openssl/engine.h new file mode 100644 index 00000000..319371e4 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/engine.h @@ -0,0 +1,842 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# ifndef OPENSSL_NO_ENGINE +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# include +# include +# 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_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 +/* 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); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_dasync() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DASYNC, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +#endif +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. + */ + +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_EC(ENGINE *e); +void ENGINE_unregister_EC(ENGINE *e); +void ENGINE_register_all_EC(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_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_EC(ENGINE *e, const EC_KEY_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_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. */ +#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) +int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +void *ENGINE_get_ex_data(const ENGINE *e, int idx); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function previously cleaned up anything that needs it. Auto-deinit will + * now take care of it so it is no longer required to call this function. + */ +# define ENGINE_cleanup() while(0) continue +#endif + +/* + * 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 EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +const RAND_METHOD *ENGINE_get_RAND(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_EC(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_EC(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)0x00030000 +/* + * Binary versions older than this are too old for us (whether we're a loader + * or a loadee) + */ +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 + +/* + * 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_fn) (size_t, const char *, int); +typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); +typedef void (*dyn_MEM_free_fn) (void *, const char *, int); +typedef struct st_dynamic_MEM_fns { + dyn_MEM_malloc_fn malloc_fn; + dyn_MEM_realloc_fn realloc_fn; + dyn_MEM_free_fn free_fn; +} dynamic_MEM_fns; +/* + * FIXME: Perhaps the memory and locking code (crypto.h) should declare and + * use these types so we (and any other dependent code) can simplify a bit?? + */ +/* The top-level structure */ +typedef struct st_dynamic_fns { + void *static_state; + dynamic_MEM_fns mem_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; \ + CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ + fns->mem_fns.realloc_fn, \ + fns->mem_fns.free_fn); \ + 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) +DEPRECATEDIN_1_1_0(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. + */ + +int 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_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# define ENGINE_F_ENGINE_GET_FIRST 195 +# define ENGINE_F_ENGINE_GET_LAST 196 +# 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_PKEY_ASN1_FIND_STR 197 +# define ENGINE_F_ENGINE_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# 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_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 + +/* 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_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_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_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 +#endif diff --git a/android/armeabi-v7a/include/openssl/err.h b/android/armeabi-v7a/include/openssl/err.h new file mode 100644 index 00000000..f9390919 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/err.h @@ -0,0 +1,259 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ERR_H +# define HEADER_ERR_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include + +#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 { + 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_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 + +# define ERR_LIB_USER 128 + +# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) + +# define ERR_PACK(l,f,r) ( \ + (((unsigned int)(l) & 0x0FF) << 24L) | \ + (((unsigned int)(f) & 0xFFF) << 12L) | \ + (((unsigned int)(r) & 0xFFF) ) ) +# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) +# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) +# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) + +/* OS functions */ +# define SYS_F_FOPEN 1 +# define SYS_F_CONNECT 2 +# define SYS_F_GETSERVBYNAME 3 +# define SYS_F_SOCKET 4 +# define SYS_F_IOCTLSOCKET 5 +# define SYS_F_BIND 6 +# define SYS_F_LISTEN 7 +# define SYS_F_ACCEPT 8 +# define SYS_F_WSASTARTUP 9/* Winsock stuff */ +# define SYS_F_OPENDIR 10 +# define SYS_F_FREAD 11 +# define SYS_F_GETADDRINFO 12 +# define SYS_F_GETNAMEINFO 13 +# define SYS_F_SETSOCKOPT 14 +# define SYS_F_GETSOCKOPT 15 +# define SYS_F_GETSOCKNAME 16 +# define SYS_F_GETHOSTBYNAME 17 + +/* 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_EC_LIB ERR_LIB_EC/* 16 */ +# 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_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ + +# define ERR_R_NESTED_ASN1_ERROR 58 +# 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) +# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (7) + +/* + * 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; + +DEFINE_LHASH_OF(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_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +int ERR_load_strings(int lib, ERR_STRING_DATA str[]); +int ERR_unload_strings(int lib, ERR_STRING_DATA str[]); +int ERR_load_ERR_strings(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif + +DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) +DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) +ERR_STATE *ERR_get_state(void); + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/evp.h b/android/armeabi-v7a/include/openssl/evp.h new file mode 100644 index 00000000..b9c83b2b --- /dev/null +++ b/android/armeabi-v7a/include/openssl/evp.h @@ -0,0 +1,1586 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENVELOPE_H +# define HEADER_ENVELOPE_H + +# include +# include +# include +# include + +# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ +# define EVP_MAX_KEY_LENGTH 64 +# define EVP_MAX_IV_LENGTH 16 +# define EVP_MAX_BLOCK_LENGTH 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include + +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_DSA NID_dsa +# define EVP_PKEY_DSA1 NID_dsa_2 +# define EVP_PKEY_DSA2 NID_dsaWithSHA +# define EVP_PKEY_DSA3 NID_dsaWithSHA1 +# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +# define EVP_PKEY_DH NID_dhKeyAgreement +# define EVP_PKEY_DHX NID_dhpublicnumber +# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac +# define EVP_PKEY_TLS1_PRF NID_tls1_prf +# define EVP_PKEY_HKDF NID_hkdf + +#ifdef __cplusplus +extern "C" { +#endif + +# 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 +EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +void EVP_MD_meth_free(EVP_MD *md); + +int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, + const void *data, + size_t count)); +int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, + unsigned char *md)); +int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, + const EVP_MD_CTX *from)); +int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2)); + +int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +int EVP_MD_meth_get_result_size(const EVP_MD *md); +int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, + const void *data, + size_t count); +int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, + unsigned char *md); +int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, + const EVP_MD_CTX *from); +int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2); + +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* 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 + +# endif /* !EVP_MD */ + +/* 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_reset */ +/* + * 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 */ +/* + * Some functions such as EVP_DigestSign only finalise copies of internal + * contexts so additional data can be included after the finalisation call. + * This is inefficient if this functionality is not required: it is disabled + * if the following flag is set. + */ +# define EVP_MD_CTX_FLAG_FINALISE 0x0200 + +EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); + +int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, + int (*init) (EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc)); +int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, + int (*do_cipher) (EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl)); +int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, + int (*cleanup) (EVP_CIPHER_CTX *)); +int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, + int (*ctrl) (EVP_CIPHER_CTX *, int type, + int arg, void *ptr)); + +int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + int type, int arg, + void *ptr); + +/* 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_OCB_MODE 0x10003 +# 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 can handle pipeline operations */ +# define EVP_CIPH_FLAG_PIPELINE 0X800000 + +/* + * 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_AEAD_SET_IVLEN 0x9 +# define EVP_CTRL_AEAD_GET_TAG 0x10 +# define EVP_CTRL_AEAD_SET_TAG 0x11 +# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 +# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# define EVP_CTRL_GCM_IV_GEN 0x13 +# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# 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 + +# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d + +/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ +# define EVP_CTRL_SET_SBOX 0x1e +/* + * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a + * pre-allocated buffer with specified size + */ +# define EVP_CTRL_SBOX_USED 0x1f +/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, + * 0 switches meshing off + */ +# define EVP_CTRL_KEY_MESH 0x20 +/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ +# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 + +/* Set the output buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 +/* Set the input buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 +/* Set the input buffer lengths to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 + +/* Padding modes */ +#define EVP_PADDING_PKCS7 1 +#define EVP_PADDING_ISO7816_4 2 +#define EVP_PADDING_ANSI923 3 +#define EVP_PADDING_ISO10126 4 +#define EVP_PADDING_ZERO 5 + +/* RFC 5246 defines additional data to be 13 bytes in length */ +# define EVP_AEAD_TLS1_AAD_LEN 13 + +typedef struct { + unsigned char *out; + const unsigned char *inp; + size_t len; + unsigned int interleave; +} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; + +/* GCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_GCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 +/* Length of tag for TLS */ +# define EVP_GCM_TLS_TAG_LEN 16 + +/* CCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_CCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 + +typedef struct evp_cipher_info_st { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; +} EVP_CIPHER_INFO; + + +/* 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); +int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, + const void *data, size_t count); +void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, + int (*update) (EVP_MD_CTX *ctx, + const void *data, size_t count)); +# 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)) +EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); + +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_impl_ctx_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_encrypting(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); +const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +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); +void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); +void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); +# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# endif +# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) + +# 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) + +/*__owur*/ 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); + +int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); +EVP_MD_CTX *EVP_MD_CTX_new(void); +int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); +void EVP_MD_CTX_free(EVP_MD_CTX *ctx); +# define EVP_MD_CTX_create() EVP_MD_CTX_new() +# define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) +# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur 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); +__owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, + ENGINE *impl); +__owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, + size_t cnt); +__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); +__owur int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, + const EVP_MD *type, ENGINE *impl); + +__owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); +__owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); + +#ifndef OPENSSL_NO_UI +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); +#endif + +__owur 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); + +__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +/*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); +/*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); + +__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +/*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc); +/*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv, int enc); +__owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey); + +__owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); + +/*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen); + +__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen); + +# ifndef OPENSSL_NO_RSA +__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + const unsigned char *ek, int ekl, + const unsigned char *iv, EVP_PKEY *priv); +__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +# endif + +EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); +void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +int 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); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) +# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) +# endif +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); +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); + +const BIO_METHOD *BIO_f_md(void); +const BIO_METHOD *BIO_f_base64(void); +const BIO_METHOD *BIO_f_cipher(void); +const BIO_METHOD *BIO_f_reliable(void); +__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, + const unsigned char *i, int enc); + +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); +const EVP_MD *EVP_md5_sha1(void); +# endif +# ifndef OPENSSL_NO_BLAKE2 +const EVP_MD *EVP_blake2b512(void); +const EVP_MD *EVP_blake2s256(void); +# endif +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +# ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +# endif +# ifndef OPENSSL_NO_RMD160 +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 +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? + */ +# 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 +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_128_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_128_ocb(void); +# endif +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_192_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_192_ocb(void); +# endif +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); +const EVP_CIPHER *EVP_aes_256_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_256_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# 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_128_ctr(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_192_ctr(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); +const EVP_CIPHER *EVP_camellia_256_ctr(void); +# endif +# ifndef OPENSSL_NO_CHACHA +const EVP_CIPHER *EVP_chacha20(void); +# ifndef OPENSSL_NO_POLY1305 +const EVP_CIPHER *EVP_chacha20_poly1305(void); +# endif +# 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 + +# if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_add_all_algorithms_conf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +# define OPENSSL_add_all_algorithms_noconf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# ifdef OPENSSL_LOAD_CONF +# define OpenSSL_add_all_algorithms() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +# else +# define OpenSSL_add_all_algorithms() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) +# endif + +# define OpenSSL_add_all_ciphers() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) +# define OpenSSL_add_all_digests() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# define EVP_cleanup() while(0) continue +# endif + +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_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(const EVP_PKEY *pkey); +int EVP_PKEY_security_bits(const 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(const EVP_PKEY *pkey); +const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); + +# ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +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_get0_DSA(EVP_PKEY *pkey); +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_get0_DH(EVP_PKEY *pkey); +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_get0_EC_KEY(EVP_PKEY *pkey); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif + +EVP_PKEY *EVP_PKEY_new(void); +int EVP_PKEY_up_ref(EVP_PKEY *pkey); +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_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, + const unsigned char *pt, size_t ptlen); +size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); + +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); + +#ifndef OPENSSL_NO_SCRYPT +int EVP_PBE_scrypt(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen); + +int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de); +#endif + +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 +/* Is a PKCS#5 v2.0 KDF */ +# define EVP_PBE_TYPE_KDF 0x2 + +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); +int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); + +# 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 + +# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 +# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa + +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(const 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, + const PKCS8_PRIV_KEY_INFO + *p8inf), + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, + const EVP_PKEY *pk), + int (*priv_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, + int derlen), + int (*param_encode) (const EVP_PKEY *pkey, + unsigned char **pder), + int (*param_missing) (const EVP_PKEY *pk), + int (*param_copy) (EVP_PKEY *to, + const EVP_PKEY *from), + int (*param_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*param_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, + int (*item_verify) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *a, + ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_security_bits) (const EVP_PKEY + *pk)); + +# 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_TYPE_SIG | EVP_PKEY_OP_TYPE_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_CTX_set_mac_key(ctx, key, len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)key) + +# 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_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); +int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); + +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_PKEY_meth_get_init(EVP_PKEY_METHOD *pmeth, + int (**pinit) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_copy(EVP_PKEY_METHOD *pmeth, + int (**pcopy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_get_cleanup(EVP_PKEY_METHOD *pmeth, + void (**pcleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_paramgen(EVP_PKEY_METHOD *pmeth, + int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_keygen(EVP_PKEY_METHOD *pmeth, + int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_sign(EVP_PKEY_METHOD *pmeth, + int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify(EVP_PKEY_METHOD *pmeth, + int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify_recover(EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX + *ctx), + int (**pverify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_signctx(EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_verifyctx(EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_encrypt(EVP_PKEY_METHOD *pmeth, + int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_decrypt(EVP_PKEY_METHOD *pmeth, + int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_derive(EVP_PKEY_METHOD *pmeth, + int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_get_ctrl(EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (**pctrl_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. + */ + +int ERR_load_EVP_strings(void); + +/* Error codes for the EVP functions. */ + +/* Function codes. */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CHACHA20_POLY1305_CTRL 182 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_DO_SIGVER_INIT 161 +# 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_DECRYPTUPDATE 166 +# define EVP_F_EVP_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# define EVP_F_EVP_ENCRYPTUPDATE 167 +# 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_PBE_SCRYPT 181 +# define EVP_F_EVP_PKCS82PKEY 111 +# define EVP_F_EVP_PKEY2PKCS8 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_GET0_DH 119 +# define EVP_F_EVP_PKEY_GET0_DSA 120 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET0_HMAC 183 +# define EVP_F_EVP_PKEY_GET0_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_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# 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_PKCS5_V2_SCRYPT_KEYIVGEN 180 +# 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_KEY_SETUP_FAILED 143 +# define EVP_R_BAD_DECRYPT 100 +# 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_COPY_ERROR 173 +# 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_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EXPECTING_AN_HMAC_KEY 174 +# 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_EC_KEY 142 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# 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_KEYGEN_FAILURE 120 +# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 +# 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_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_PARTIALLY_OVERLAPPING 162 +# 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_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_UNSUPPORTED_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 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/hmac.h b/android/armeabi-v7a/include/openssl/hmac.h new file mode 100644 index 00000000..9f068960 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/hmac.h @@ -0,0 +1,49 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_HMAC_H +# define HEADER_HMAC_H + +# include + +# include + +# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ + +#ifdef __cplusplus +extern "C" { +#endif + +size_t HMAC_size(const HMAC_CTX *e); +HMAC_CTX *HMAC_CTX_new(void); +int HMAC_CTX_reset(HMAC_CTX *ctx); +void HMAC_CTX_free(HMAC_CTX *ctx); + +DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md)) + +/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +/*__owur*/ 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); +__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/idea.h b/android/armeabi-v7a/include/openssl/idea.h new file mode 100644 index 00000000..4334f3ea --- /dev/null +++ b/android/armeabi-v7a/include/openssl/idea.h @@ -0,0 +1,64 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_IDEA_H +# define HEADER_IDEA_H + +# include + +# ifndef OPENSSL_NO_IDEA +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int IDEA_INT; + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +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); +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); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/kdf.h b/android/armeabi-v7a/include/openssl/kdf.h new file mode 100644 index 00000000..9f87f788 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/kdf.h @@ -0,0 +1,75 @@ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDF_H +# define HEADER_KDF_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) +# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) + +# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)sec) + +# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)seed) + +# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MD, 0, (void *)md) + +# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)salt) + +# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)key) + +# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)info) + +/* 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. + */ + +int ERR_load_KDF_strings(void); + +/* Error codes for the KDF functions. */ + +/* Function codes. */ +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 + +/* Reason codes. */ +# define KDF_R_INVALID_DIGEST 100 +# define KDF_R_MISSING_PARAMETER 101 +# define KDF_R_VALUE_MISSING 102 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/lhash.h b/android/armeabi-v7a/include/openssl/lhash.h new file mode 100644 index 00000000..e2ccb65d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/lhash.h @@ -0,0 +1,204 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +# define HEADER_LHASH_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * 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 + +/* 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 + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_lh_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +# define DEFINE_LHASH_OF(type) \ + LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ + static ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ + void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +DEFINE_LHASH_OF(OPENSSL_STRING); +DEFINE_LHASH_OF(OPENSSL_CSTRING); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/md2.h b/android/armeabi-v7a/include/openssl/md2.h new file mode 100644 index 00000000..7faf8e3d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/md2.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD2_H +# define HEADER_MD2_H + +# include + +# ifndef OPENSSL_NO_MD2 +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned char MD2_INT; + +# define MD2_DIGEST_LENGTH 16 +# define MD2_BLOCK 16 + +typedef struct MD2state_st { + unsigned int num; + unsigned char data[MD2_BLOCK]; + MD2_INT cksm[MD2_BLOCK]; + MD2_INT state[MD2_BLOCK]; +} MD2_CTX; + +const char *MD2_options(void); +int MD2_Init(MD2_CTX *c); +int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); +int MD2_Final(unsigned char *md, MD2_CTX *c); +unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/md4.h b/android/armeabi-v7a/include/openssl/md4.h new file mode 100644 index 00000000..940e29db --- /dev/null +++ b/android/armeabi-v7a/include/openssl/md4.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD4_H +# define HEADER_MD4_H + +# include + +# ifndef OPENSSL_NO_MD4 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD4_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD4_LONG unsigned int + +# 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; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/md5.h b/android/armeabi-v7a/include/openssl/md5.h new file mode 100644 index 00000000..2deb7721 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/md5.h @@ -0,0 +1,50 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD5_H +# define HEADER_MD5_H + +# include + +# ifndef OPENSSL_NO_MD5 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD5_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD5_LONG unsigned int + +# 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; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/mdc2.h b/android/armeabi-v7a/include/openssl/mdc2.h new file mode 100644 index 00000000..aabd2bfa --- /dev/null +++ b/android/armeabi-v7a/include/openssl/mdc2.h @@ -0,0 +1,42 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MDC2_H +# define HEADER_MDC2_H + +# include + +#ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus +extern "C" { +# 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; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/modes.h b/android/armeabi-v7a/include/openssl/modes.h new file mode 100644 index 00000000..a04c6a59 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/modes.h @@ -0,0 +1,203 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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); +size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); +size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); + +#ifndef OPENSSL_NO_OCB +typedef struct ocb128_context OCB128_CONTEXT; + +typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); + +OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, + void *keyenc, void *keydec); +int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, + size_t len, size_t taglen); +int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); +#endif /* OPENSSL_NO_OCB */ + +#ifdef __cplusplus +} +#endif diff --git a/android/armeabi-v7a/include/openssl/obj_mac.h b/android/armeabi-v7a/include/openssl/obj_mac.h new file mode 100644 index 00000000..f97f3eaa --- /dev/null +++ b/android/armeabi-v7a/include/openssl/obj_mac.h @@ -0,0 +1,4577 @@ +/* + * WARNING: do not edit! + * Generated by crypto/objects/objects.pl + * + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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_smime_ct_contentCollection "id-smime-ct-contentCollection" +#define NID_id_smime_ct_contentCollection 1058 +#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L + +#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" +#define NID_id_smime_ct_authEnvelopedData 1059 +#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L + +#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_ct_xml "id-ct-xml" +#define NID_id_ct_xml 1060 +#define OBJ_id_ct_xml OBJ_id_smime_ct,28L + +#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_tlsfeature "tlsfeature" +#define LN_tlsfeature "TLS Feature" +#define NID_tlsfeature 1020 +#define OBJ_tlsfeature OBJ_id_pe,24L + +#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_ipsec_IKE "ipsecIKE" +#define LN_ipsec_IKE "ipsec Internet Key Exchange" +#define NID_ipsec_IKE 1022 +#define OBJ_ipsec_IKE OBJ_id_kp,17L + +#define SN_capwapAC "capwapAC" +#define LN_capwapAC "Ctrl/provision WAP Access" +#define NID_capwapAC 1023 +#define OBJ_capwapAC OBJ_id_kp,18L + +#define SN_capwapWTP "capwapWTP" +#define LN_capwapWTP "Ctrl/Provision WAP Termination" +#define NID_capwapWTP 1024 +#define OBJ_capwapWTP OBJ_id_kp,19L + +#define SN_sshClient "secureShellClient" +#define LN_sshClient "SSH Client" +#define NID_sshClient 1025 +#define OBJ_sshClient OBJ_id_kp,21L + +#define SN_sshServer "secureShellServer" +#define LN_sshServer "SSH Server" +#define NID_sshServer 1026 +#define OBJ_sshServer OBJ_id_kp,22L + +#define SN_sendRouter "sendRouter" +#define LN_sendRouter "Send Router" +#define NID_sendRouter 1027 +#define OBJ_sendRouter OBJ_id_kp,23L + +#define SN_sendProxiedRouter "sendProxiedRouter" +#define LN_sendProxiedRouter "Send Proxied Router" +#define NID_sendProxiedRouter 1028 +#define OBJ_sendProxiedRouter OBJ_id_kp,24L + +#define SN_sendOwner "sendOwner" +#define LN_sendOwner "Send Owner" +#define NID_sendOwner 1029 +#define OBJ_sendOwner OBJ_id_kp,25L + +#define SN_sendProxiedOwner "sendProxiedOwner" +#define LN_sendProxiedOwner "Send Proxied Owner" +#define NID_sendProxiedOwner 1030 +#define OBJ_sendProxiedOwner OBJ_id_kp,26L + +#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_blake2b512 "BLAKE2b512" +#define LN_blake2b512 "blake2b512" +#define NID_blake2b512 1056 +#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L + +#define SN_blake2s256 "BLAKE2s256" +#define LN_blake2s256 "blake2s256" +#define NID_blake2s256 1057 +#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L + +#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 Distribution 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_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_ocb "AES-128-OCB" +#define LN_aes_128_ocb "aes-128-ocb" +#define NID_aes_128_ocb 958 + +#define SN_aes_192_ocb "AES-192-OCB" +#define LN_aes_192_ocb "aes-192-ocb" +#define NID_aes_192_ocb 959 + +#define SN_aes_256_ocb "AES-256-OCB" +#define LN_aes_256_ocb "aes-256-ocb" +#define NID_aes_256_ocb 960 + +#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 SN_uniqueIdentifier "uid" +#define LN_uniqueIdentifier "uniqueIdentifier" +#define NID_uniqueIdentifier 102 +#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L + +#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_tc26 "id-tc26" +#define NID_id_tc26 974 +#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L + +#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_gost89_cnt_12 "gost89-cnt-12" +#define NID_gost89_cnt_12 975 + +#define SN_gost89_cbc "gost89-cbc" +#define NID_gost89_cbc 1009 + +#define SN_gost89_ecb "gost89-ecb" +#define NID_gost89_ecb 1010 + +#define SN_gost89_ctr "gost89-ctr" +#define NID_gost89_ctr 1011 + +#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_gost_mac_12 "gost-mac-12" +#define NID_gost_mac_12 976 + +#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_id_tc26_algorithms "id-tc26-algorithms" +#define NID_id_tc26_algorithms 977 +#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L + +#define SN_id_tc26_sign "id-tc26-sign" +#define NID_id_tc26_sign 978 +#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L + +#define SN_id_GostR3410_2012_256 "gost2012_256" +#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" +#define NID_id_GostR3410_2012_256 979 +#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L + +#define SN_id_GostR3410_2012_512 "gost2012_512" +#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" +#define NID_id_GostR3410_2012_512 980 +#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L + +#define SN_id_tc26_digest "id-tc26-digest" +#define NID_id_tc26_digest 981 +#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L + +#define SN_id_GostR3411_2012_256 "md_gost12_256" +#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" +#define NID_id_GostR3411_2012_256 982 +#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L + +#define SN_id_GostR3411_2012_512 "md_gost12_512" +#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" +#define NID_id_GostR3411_2012_512 983 +#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L + +#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" +#define NID_id_tc26_signwithdigest 984 +#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L + +#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" +#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L + +#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" +#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L + +#define SN_id_tc26_mac "id-tc26-mac" +#define NID_id_tc26_mac 987 +#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L + +#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" +#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" +#define NID_id_tc26_hmac_gost_3411_2012_256 988 +#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L + +#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" +#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" +#define NID_id_tc26_hmac_gost_3411_2012_512 989 +#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L + +#define SN_id_tc26_cipher "id-tc26-cipher" +#define NID_id_tc26_cipher 990 +#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L + +#define SN_id_tc26_agreement "id-tc26-agreement" +#define NID_id_tc26_agreement 991 +#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L + +#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" +#define NID_id_tc26_agreement_gost_3410_2012_256 992 +#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L + +#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" +#define NID_id_tc26_agreement_gost_3410_2012_512 993 +#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L + +#define SN_id_tc26_constants "id-tc26-constants" +#define NID_id_tc26_constants 994 +#define OBJ_id_tc26_constants OBJ_id_tc26,2L + +#define SN_id_tc26_sign_constants "id-tc26-sign-constants" +#define NID_id_tc26_sign_constants 995 +#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L + +#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" +#define NID_id_tc26_gost_3410_2012_512_constants 996 +#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L + +#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" +#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" +#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L + +#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" +#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L + +#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" +#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L + +#define SN_id_tc26_digest_constants "id-tc26-digest-constants" +#define NID_id_tc26_digest_constants 1000 +#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L + +#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" +#define NID_id_tc26_cipher_constants 1001 +#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L + +#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" +#define NID_id_tc26_gost_28147_constants 1002 +#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L + +#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" +#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" +#define NID_id_tc26_gost_28147_param_Z 1003 +#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L + +#define SN_INN "INN" +#define LN_INN "INN" +#define NID_INN 1004 +#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L + +#define SN_OGRN "OGRN" +#define LN_OGRN "OGRN" +#define NID_OGRN 1005 +#define OBJ_OGRN OBJ_member_body,643L,100L,1L + +#define SN_SNILS "SNILS" +#define LN_SNILS "SNILS" +#define NID_SNILS 1006 +#define OBJ_SNILS OBJ_member_body,643L,100L,3L + +#define SN_subjectSignTool "subjectSignTool" +#define LN_subjectSignTool "Signing Tool of Subject" +#define NID_subjectSignTool 1007 +#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L + +#define SN_issuerSignTool "issuerSignTool" +#define LN_issuerSignTool "Signing Tool of Issuer" +#define NID_issuerSignTool 1008 +#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L + +#define SN_grasshopper_ecb "grasshopper-ecb" +#define NID_grasshopper_ecb 1012 + +#define SN_grasshopper_ctr "grasshopper-ctr" +#define NID_grasshopper_ctr 1013 + +#define SN_grasshopper_ofb "grasshopper-ofb" +#define NID_grasshopper_ofb 1014 + +#define SN_grasshopper_cbc "grasshopper-cbc" +#define NID_grasshopper_cbc 1015 + +#define SN_grasshopper_cfb "grasshopper-cfb" +#define NID_grasshopper_cfb 1016 + +#define SN_grasshopper_mac "grasshopper-mac" +#define NID_grasshopper_mac 1017 + +#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_128_gcm "CAMELLIA-128-GCM" +#define LN_camellia_128_gcm "camellia-128-gcm" +#define NID_camellia_128_gcm 961 +#define OBJ_camellia_128_gcm OBJ_camellia,6L + +#define SN_camellia_128_ccm "CAMELLIA-128-CCM" +#define LN_camellia_128_ccm "camellia-128-ccm" +#define NID_camellia_128_ccm 962 +#define OBJ_camellia_128_ccm OBJ_camellia,7L + +#define SN_camellia_128_ctr "CAMELLIA-128-CTR" +#define LN_camellia_128_ctr "camellia-128-ctr" +#define NID_camellia_128_ctr 963 +#define OBJ_camellia_128_ctr OBJ_camellia,9L + +#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" +#define LN_camellia_128_cmac "camellia-128-cmac" +#define NID_camellia_128_cmac 964 +#define OBJ_camellia_128_cmac OBJ_camellia,10L + +#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_192_gcm "CAMELLIA-192-GCM" +#define LN_camellia_192_gcm "camellia-192-gcm" +#define NID_camellia_192_gcm 965 +#define OBJ_camellia_192_gcm OBJ_camellia,26L + +#define SN_camellia_192_ccm "CAMELLIA-192-CCM" +#define LN_camellia_192_ccm "camellia-192-ccm" +#define NID_camellia_192_ccm 966 +#define OBJ_camellia_192_ccm OBJ_camellia,27L + +#define SN_camellia_192_ctr "CAMELLIA-192-CTR" +#define LN_camellia_192_ctr "camellia-192-ctr" +#define NID_camellia_192_ctr 967 +#define OBJ_camellia_192_ctr OBJ_camellia,29L + +#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" +#define LN_camellia_192_cmac "camellia-192-cmac" +#define NID_camellia_192_cmac 968 +#define OBJ_camellia_192_cmac OBJ_camellia,30L + +#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_256_gcm "CAMELLIA-256-GCM" +#define LN_camellia_256_gcm "camellia-256-gcm" +#define NID_camellia_256_gcm 969 +#define OBJ_camellia_256_gcm OBJ_camellia,46L + +#define SN_camellia_256_ccm "CAMELLIA-256-CCM" +#define LN_camellia_256_ccm "camellia-256-ccm" +#define NID_camellia_256_ccm 970 +#define OBJ_camellia_256_ccm OBJ_camellia,47L + +#define SN_camellia_256_ctr "CAMELLIA-256-CTR" +#define LN_camellia_256_ctr "camellia-256-ctr" +#define NID_camellia_256_ctr 971 +#define OBJ_camellia_256_ctr OBJ_camellia,49L + +#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" +#define LN_camellia_256_cmac "camellia-256-cmac" +#define NID_camellia_256_cmac 972 +#define OBJ_camellia_256_cmac OBJ_camellia,50L + +#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_chacha20_poly1305 "ChaCha20-Poly1305" +#define LN_chacha20_poly1305 "chacha20-poly1305" +#define NID_chacha20_poly1305 1018 + +#define SN_chacha20 "ChaCha20" +#define LN_chacha20 "chacha20" +#define NID_chacha20 1019 + +#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 + +#define SN_id_scrypt "id-scrypt" +#define NID_id_scrypt 973 +#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L + +#define SN_tls1_prf "TLS1-PRF" +#define LN_tls1_prf "tls1-prf" +#define NID_tls1_prf 1021 + +#define SN_hkdf "HKDF" +#define LN_hkdf "hkdf" +#define NID_hkdf 1036 + +#define SN_id_pkinit "id-pkinit" +#define NID_id_pkinit 1031 +#define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L + +#define SN_pkInitClientAuth "pkInitClientAuth" +#define LN_pkInitClientAuth "PKINIT Client Auth" +#define NID_pkInitClientAuth 1032 +#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L + +#define SN_pkInitKDC "pkInitKDC" +#define LN_pkInitKDC "Signing KDC Response" +#define NID_pkInitKDC 1033 +#define OBJ_pkInitKDC OBJ_id_pkinit,5L + +#define SN_X25519 "X25519" +#define NID_X25519 1034 +#define OBJ_X25519 1L,3L,101L,110L + +#define SN_X448 "X448" +#define NID_X448 1035 +#define OBJ_X448 1L,3L,101L,111L + +#define SN_kx_rsa "KxRSA" +#define LN_kx_rsa "kx-rsa" +#define NID_kx_rsa 1037 + +#define SN_kx_ecdhe "KxECDHE" +#define LN_kx_ecdhe "kx-ecdhe" +#define NID_kx_ecdhe 1038 + +#define SN_kx_dhe "KxDHE" +#define LN_kx_dhe "kx-dhe" +#define NID_kx_dhe 1039 + +#define SN_kx_ecdhe_psk "KxECDHE-PSK" +#define LN_kx_ecdhe_psk "kx-ecdhe-psk" +#define NID_kx_ecdhe_psk 1040 + +#define SN_kx_dhe_psk "KxDHE-PSK" +#define LN_kx_dhe_psk "kx-dhe-psk" +#define NID_kx_dhe_psk 1041 + +#define SN_kx_rsa_psk "KxRSA_PSK" +#define LN_kx_rsa_psk "kx-rsa-psk" +#define NID_kx_rsa_psk 1042 + +#define SN_kx_psk "KxPSK" +#define LN_kx_psk "kx-psk" +#define NID_kx_psk 1043 + +#define SN_kx_srp "KxSRP" +#define LN_kx_srp "kx-srp" +#define NID_kx_srp 1044 + +#define SN_kx_gost "KxGOST" +#define LN_kx_gost "kx-gost" +#define NID_kx_gost 1045 + +#define SN_auth_rsa "AuthRSA" +#define LN_auth_rsa "auth-rsa" +#define NID_auth_rsa 1046 + +#define SN_auth_ecdsa "AuthECDSA" +#define LN_auth_ecdsa "auth-ecdsa" +#define NID_auth_ecdsa 1047 + +#define SN_auth_psk "AuthPSK" +#define LN_auth_psk "auth-psk" +#define NID_auth_psk 1048 + +#define SN_auth_dss "AuthDSS" +#define LN_auth_dss "auth-dss" +#define NID_auth_dss 1049 + +#define SN_auth_gost01 "AuthGOST01" +#define LN_auth_gost01 "auth-gost01" +#define NID_auth_gost01 1050 + +#define SN_auth_gost12 "AuthGOST12" +#define LN_auth_gost12 "auth-gost12" +#define NID_auth_gost12 1051 + +#define SN_auth_srp "AuthSRP" +#define LN_auth_srp "auth-srp" +#define NID_auth_srp 1052 + +#define SN_auth_null "AuthNULL" +#define LN_auth_null "auth-null" +#define NID_auth_null 1053 diff --git a/android/armeabi-v7a/include/openssl/objects.h b/android/armeabi-v7a/include/openssl/objects.h new file mode 100644 index 00000000..09d614ff --- /dev/null +++ b/android/armeabi-v7a/include/openssl/objects.h @@ -0,0 +1,1097 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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); +#if OPENSSL_API_COMPAT < 0x10100000L +# define OBJ_cleanup() while(0) continue +#endif +int OBJ_create_objects(BIO *in); + +size_t OBJ_length(const ASN1_OBJECT *obj); +const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); + +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); + +/* 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. + */ + +int 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_OID_EXISTS 102 +# define OBJ_R_UNKNOWN_NID 101 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/ocsp.h b/android/armeabi-v7a/include/openssl/ocsp.h new file mode 100644 index 00000000..08debc5b --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ocsp.h @@ -0,0 +1,412 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSP_H +# define HEADER_OCSP_H + +#include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * 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 + + +# ifndef OPENSSL_NO_OCSP + +# 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 + +typedef struct ocsp_cert_id_st OCSP_CERTID; + +DEFINE_STACK_OF(OCSP_CERTID) + +typedef struct ocsp_one_request_st OCSP_ONEREQ; + +DEFINE_STACK_OF(OCSP_ONEREQ) + +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +# 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 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +DEFINE_STACK_OF(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +DEFINE_STACK_OF(OCSP_SINGLERESP) + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st 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, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const 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); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); + +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); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const 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, const 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, const 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, const 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, const 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, const 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); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +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. + */ + +int ERR_load_OCSP_strings(void); + +/* Error codes for the OCSP functions. */ + +/* Function codes. */ +# 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_PARSE_HTTP_LINE1 118 + +/* Reason codes. */ +# 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_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# define OCSP_R_NO_SIGNER_KEY 130 +# 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_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# 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 +#endif diff --git a/android/armeabi-v7a/include/openssl/opensslconf-arm32.h b/android/armeabi-v7a/include/openssl/opensslconf-arm32.h new file mode 100644 index 00000000..527f4d5b --- /dev/null +++ b/android/armeabi-v7a/include/openssl/opensslconf-arm32.h @@ -0,0 +1,169 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#if defined(OPENSSL_NO_DEPRECATED) +# define DECLARE_DEPRECATED(f) +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +#else +# define DECLARE_DEPRECATED(f) f; +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +#define OPENSSL_CPUID_OBJ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# define BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# define THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned char + +#ifdef __cplusplus +} +#endif diff --git a/android/armeabi-v7a/include/openssl/opensslconf-arm64.h b/android/armeabi-v7a/include/openssl/opensslconf-arm64.h new file mode 100644 index 00000000..f3d83b5c --- /dev/null +++ b/android/armeabi-v7a/include/openssl/opensslconf-arm64.h @@ -0,0 +1,169 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#if defined(OPENSSL_NO_DEPRECATED) +# define DECLARE_DEPRECATED(f) +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +#else +# define DECLARE_DEPRECATED(f) f; +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +#define OPENSSL_CPUID_OBJ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned char + +#ifdef __cplusplus +} +#endif diff --git a/android/armeabi-v7a/include/openssl/opensslconf-x86.h b/android/armeabi-v7a/include/openssl/opensslconf-x86.h new file mode 100644 index 00000000..9891b5d8 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/opensslconf-x86.h @@ -0,0 +1,169 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#if defined(OPENSSL_NO_DEPRECATED) +# define DECLARE_DEPRECATED(f) +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +#else +# define DECLARE_DEPRECATED(f) f; +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +#define OPENSSL_CPUID_OBJ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# define BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# define THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned int + +#ifdef __cplusplus +} +#endif diff --git a/android/armeabi-v7a/include/openssl/opensslconf.h b/android/armeabi-v7a/include/openssl/opensslconf.h new file mode 100644 index 00000000..94174f30 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/opensslconf.h @@ -0,0 +1,9 @@ +#ifdef __aarch64__ +#include "opensslconf-arm64.h" +#elif __arm__ +#include "opensslconf-arm32.h" +#elif __i386__ +#include "opensslconf-x86.h" +#else +#error "Unsupported architecture!" +#endif diff --git a/android/armeabi-v7a/include/openssl/opensslv.h b/android/armeabi-v7a/include/openssl/opensslv.h new file mode 100644 index 00000000..2d54b69b --- /dev/null +++ b/android/armeabi-v7a/include/openssl/opensslv.h @@ -0,0 +1,105 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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 0x1010003fL +# ifdef OPENSSL_FIPS +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0c-fips 10 Nov 2016" +# else +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0c 10 Nov 2016" +# endif + +/*- + * 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 version 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.1" + + +#ifdef __cplusplus +} +#endif +#endif /* HEADER_OPENSSLV_H */ diff --git a/android/armeabi-v7a/include/openssl/ossl_typ.h b/android/armeabi-v7a/include/openssl/ossl_typ.h new file mode 100644 index 00000000..129a67f0 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ossl_typ.h @@ -0,0 +1,190 @@ +/* + * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OPENSSL_TYPES_H +# define HEADER_OPENSSL_TYPES_H + +#include + +#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; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef _WIN32 +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_ISSUER_AND_SERIAL +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +# ifdef BIGNUM +# undef BIGNUM +# endif +struct dane_st; +typedef struct bio_st BIO; +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 evp_md_st EVP_MD; +typedef struct evp_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 evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_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 ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; + +typedef struct rand_meth_st RAND_METHOD; + +typedef struct ssl_dane_st SSL_DANE; +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 x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +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 ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +#else +/* + * Not long long, because the C-library can only be expected to provide + * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), + * strtoumax(). Since we use these for parsing arguments, we need the + * conversion functions, not just the sizes. + */ +typedef long ossl_intmax_t; +typedef unsigned long ossl_uintmax_t; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/android/armeabi-v7a/include/openssl/pem.h b/android/armeabi-v7a/include/openssl/pem.h new file mode 100644 index 00000000..2375d635 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/pem.h @@ -0,0 +1,501 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEM_H +# define HEADER_PEM_H + +# include +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PEM_BUFSIZE 1024 + +# define PEM_STRING_X509_OLD "X509 CERTIFICATE" +# define PEM_STRING_X509 "CERTIFICATE" +# 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" + +# 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_STDIO + +# 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_STDIO) + +# define DECLARE_PEM_read_fp(name, type) /**/ +# define DECLARE_PEM_write_fp(name, type) /**/ +# define DECLARE_PEM_write_fp_const(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 + +# 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); + +# 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) +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +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); + +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); + +#ifndef OPENSSL_NO_STDIO +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); +#endif + +int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +int 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_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_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, + const EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +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); + +# ifndef OPENSSL_NO_STDIO +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); +# endif +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + +# ifndef OPENSSL_NO_DSA +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 +# 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. + */ + +int 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_GET_EVP_CIPHER_INFO 107 +# 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_SIGNFINAL 112 +# define PEM_F_PEM_WRITE 113 +# define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_PRIVATEKEY 139 +# define PEM_F_PEM_X509_INFO_READ 115 +# define PEM_F_PEM_X509_INFO_READ_BIO 116 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* Reason codes. */ +# define PEM_R_BAD_BASE64_DECODE 100 +# define PEM_R_BAD_DECRYPT 101 +# define PEM_R_BAD_END_LINE 102 +# define PEM_R_BAD_IV_CHARS 103 +# define PEM_R_BAD_MAGIC_NUMBER 116 +# define PEM_R_BAD_PASSWORD_READ 104 +# define PEM_R_BAD_VERSION_NUMBER 117 +# define PEM_R_BIO_WRITE_FAILURE 118 +# define PEM_R_CIPHER_IS_NULL 127 +# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 +# define PEM_R_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# define PEM_R_MISSING_DEK_IV 129 +# 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_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_UNEXPECTED_DEK_IV 130 +# 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/android/armeabi-v7a/include/openssl/pem2.h b/android/armeabi-v7a/include/openssl/pem2.h new file mode 100644 index 00000000..cfe73f13 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/pem2.h @@ -0,0 +1,20 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HEADER_PEM_H +int ERR_load_PEM_strings(void); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/android/armeabi-v7a/include/openssl/pkcs12.h b/android/armeabi-v7a/include/openssl/pkcs12.h new file mode 100644 index 00000000..deaded9d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/pkcs12.h @@ -0,0 +1,282 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#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 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +DEFINE_STACK_OF(PKCS12_SAFEBAG) + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#if OPENSSL_API_COMPAT < 0x10100000L + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif + +DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const 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); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +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(const 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_friendlyname_utf8(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(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const 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_key_gen_utf8(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_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(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const 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(const char *pass, const 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, const char *pass); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); + +int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +/* BEGIN ERROR CODES */ +/* + * The following lines are auto generated by the script mkerr.pl. Any changes + * made after this point may be overwritten when the script is next run. + */ + +int ERR_load_PKCS12_strings(void); + +/* Error codes for the PKCS12 functions. */ + +/* Function codes. */ +# 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_KEY_GEN_UTF8 116 +# 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_SAFEBAG_CREATE0_P8INF 112 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 +# 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_ENCRYPT 125 +# define PKCS12_F_PKCS8_SET0_PBE 132 + +/* 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_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/android/armeabi-v7a/include/openssl/pkcs7.h b/android/armeabi-v7a/include/openssl/pkcs7.h new file mode 100644 index 00000000..691f7220 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/pkcs7.h @@ -0,0 +1,404 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7_H +# define HEADER_PKCS7_H + +# include +# include +# include + +# include +# include + +#ifdef __cplusplus +extern "C" { +#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; + +DEFINE_STACK_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; + +DEFINE_STACK_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; + +DEFINE_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 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* 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 + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +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_STDIO +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. + */ + +int ERR_load_PKCS7_strings(void); + +/* Error codes for the PKCS7 functions. */ + +/* Function codes. */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# 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_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 + +/* 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_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_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# 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_DATASIGN 145 +# 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_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/android/armeabi-v7a/include/openssl/rand.h b/android/armeabi-v7a/include/openssl/rand.h new file mode 100644 index 00000000..d521ae19 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/rand.h @@ -0,0 +1,89 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RAND_H +# define HEADER_RAND_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct rand_meth_st RAND_METHOD; */ + +struct rand_meth_st { + int (*seed) (const void *buf, int num); + int (*bytes) (unsigned char *buf, int num); + void (*cleanup) (void); + int (*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_OpenSSL(void); +#if OPENSSL_API_COMPAT < 0x10100000L +# define RAND_cleanup() while(0) continue +#endif +int RAND_bytes(unsigned char *buf, int num); +DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) +void RAND_seed(const void *buf, int num); +#if defined(__ANDROID__) && defined(__NDK_FPABI__) +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +#endif +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); +# ifndef OPENSSL_NO_EGD +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); +# endif +int RAND_poll(void); + +#if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) +/* application has to include in order to use these */ +DEPRECATEDIN_1_1_0(void RAND_screen(void)) +DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +#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. + */ + +int ERR_load_RAND_strings(void); + +/* Error codes for the RAND functions. */ + +/* Function codes. */ +# define RAND_F_RAND_BYTES 100 + +/* Reason codes. */ +# define RAND_R_PRNG_NOT_SEEDED 100 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/rc2.h b/android/armeabi-v7a/include/openssl/rc2.h new file mode 100644 index 00000000..585f9e4c --- /dev/null +++ b/android/armeabi-v7a/include/openssl/rc2.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC2_H +# define HEADER_RC2_H + +# include + +# ifndef OPENSSL_NO_RC2 +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int RC2_INT; + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/rc4.h b/android/armeabi-v7a/include/openssl/rc4.h new file mode 100644 index 00000000..86803b37 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/rc4.h @@ -0,0 +1,36 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC4_H +# define HEADER_RC4_H + +# include + +# ifndef OPENSSL_NO_RC4 +# 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 RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/rc5.h b/android/armeabi-v7a/include/openssl/rc5.h new file mode 100644 index 00000000..793f88e4 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/rc5.h @@ -0,0 +1,63 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC5_H +# define HEADER_RC5_H + +# include + +# ifndef OPENSSL_NO_RC5 +# ifdef __cplusplus +extern "C" { +# endif + +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 + +# define RC5_32_INT unsigned int + +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ + +/* + * This are the only values supported. Tweak the code if you want more The + * most supported modes will be RC5-32/12/16 RC5-32/16/8 + */ +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 + +typedef struct rc5_key_st { + /* Number of rounds */ + int rounds; + RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; +} RC5_32_KEY; + +void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, + int rounds); +void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC5_32_KEY *key, int enc); +void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *ks, unsigned char *iv, + int enc); +void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/ripemd.h b/android/armeabi-v7a/include/openssl/ripemd.h new file mode 100644 index 00000000..c42026aa --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ripemd.h @@ -0,0 +1,47 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RIPEMD_H +# define HEADER_RIPEMD_H + +# include + +#ifndef OPENSSL_NO_RMD160 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define RIPEMD160_LONG unsigned int + +# 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; + +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 + + +#endif diff --git a/android/armeabi-v7a/include/openssl/rsa.h b/android/armeabi-v7a/include/openssl/rsa.h new file mode 100644 index 00000000..4d6e9cc9 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/rsa.h @@ -0,0 +1,589 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSA_H +# define HEADER_RSA_H + +# include + +# ifndef OPENSSL_NO_RSA +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# ifdef __cplusplus +extern "C" { +# endif + +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 + +# 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 + +/* + * 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 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define RSA_FLAG_NO_CONSTTIME 0x0000 +# endif +# if OPENSSL_API_COMPAT < 0x00908000L +/* 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_bits(const RSA *rsa); +int RSA_size(const RSA *rsa); +int RSA_security_bits(const RSA *rsa); + +int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); +void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); +void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); +void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, const BIGNUM **dmq1, + const BIGNUM **iqmp); +void RSA_clear_flags(RSA *r, int flags); +int RSA_test_flags(const RSA *r, int flags); +void RSA_set_flags(RSA *r, int flags); +ENGINE *RSA_get0_engine(const RSA *r); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg)) + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, + BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, + const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); +int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, + BN_GENCB *cb); + +int RSA_check_key(const RSA *); +int RSA_check_key_ex(const RSA *, BN_GENCB *cb); + /* 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); + +/* these are the actual RSA functions */ +const RSA_METHOD *RSA_PKCS1_OpenSSL(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_STDIO +int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +int RSA_print(BIO *bp, const RSA *r, int offset); + +/* + * 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); + +#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) +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 + +RSA_METHOD *RSA_meth_new(const char *name, int flags); +void RSA_meth_free(RSA_METHOD *meth); +RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +const char *RSA_meth_get0_name(const RSA_METHOD *meth); +int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); +int RSA_meth_get_flags(RSA_METHOD *meth); +int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_enc(RSA_METHOD *rsa, + int (*pub_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_dec(RSA_METHOD *rsa, + int (*pub_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_enc(RSA_METHOD *rsa, + int (*priv_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_dec(RSA_METHOD *rsa, + int (*priv_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); +int RSA_meth_set_mod_exp(RSA_METHOD *rsa, + int (*mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, + BN_CTX *ctx)); +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx)); +int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) + (int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa); +int RSA_meth_set_sign(RSA_METHOD *rsa, + int (*sign) (int type, const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa)); +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) + (int dtype, const unsigned char *m, + unsigned int m_length, const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa); +int RSA_meth_set_verify(RSA_METHOD *rsa, + int (*verify) (int dtype, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa)); +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_keygen(RSA_METHOD *rsa, + int (*keygen) (RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb)); + +/* 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. + */ + +int ERR_load_RSA_strings(void); + +/* Error codes for the RSA functions. */ + +/* Function codes. */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_ENCODE_PKCS1 146 +# define RSA_F_INT_RSA_VERIFY 145 +# 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_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 156 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CHECK_KEY_EX 160 +# define RSA_F_RSA_CMS_DECRYPT 159 +# define RSA_F_RSA_ITEM_VERIFY 148 +# define RSA_F_RSA_METH_DUP 161 +# define RSA_F_RSA_METH_NEW 162 +# define RSA_F_RSA_METH_SET1_NAME 163 +# define RSA_F_RSA_MGF1_TO_MD 157 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# 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_OSSL_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 +# 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 154 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 +# 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 153 +# 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_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_TO_CTX 155 +# 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_MGF1 126 + +/* 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 158 +# 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 157 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_OAEP_PARAMETERS 161 +# 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_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_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 166 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 +# 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 +#endif diff --git a/android/armeabi-v7a/include/openssl/safestack.h b/android/armeabi-v7a/include/openssl/safestack.h new file mode 100644 index 00000000..9fe733c2 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/safestack.h @@ -0,0 +1,164 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SAFESTACK_H +# define HEADER_SAFESTACK_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) + +/*- + * 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. + */ +DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) +DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) + +/* + * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/seed.h b/android/armeabi-v7a/include/openssl/seed.h new file mode 100644 index 00000000..bb97131d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/seed.h @@ -0,0 +1,98 @@ +/* + * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * 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. + */ + +#ifndef HEADER_SEED_H +# define HEADER_SEED_H + +# include + +# ifndef OPENSSL_NO_SEED +# include +# include + +#ifdef __cplusplus +extern "C" { +#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 + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; + +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 + +#endif diff --git a/android/armeabi-v7a/include/openssl/sha.h b/android/armeabi-v7a/include/openssl/sha.h new file mode 100644 index 00000000..6a1eb0de --- /dev/null +++ b/android/armeabi-v7a/include/openssl/sha.h @@ -0,0 +1,119 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define SHA_LONG unsigned int + +# 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; + +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); + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +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); + +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +/* + * 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; + +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); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/srp.h b/android/armeabi-v7a/include/openssl/srp.h new file mode 100644 index 00000000..f2b6ec75 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/srp.h @@ -0,0 +1,131 @@ +/* + * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SRP_H +# define HEADER_SRP_H + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; + + +DEFINE_STACK_OF(SRP_gN_cache) + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; + +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +DEFINE_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; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; + +DEFINE_STACK_OF(SRP_gN) + +SRP_VBASE *SRP_VBASE_new(char *seed_key); +void SRP_VBASE_free(SRP_VBASE *vb); +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +/* This method ignores the configured seed and fails for an unknown user. */ +DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const 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(const BIGNUM *g, const BIGNUM *N); +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/srtp.h b/android/armeabi-v7a/include/openssl/srtp.h new file mode 100644 index 00000000..5ddfa46d --- /dev/null +++ b/android/armeabi-v7a/include/openssl/srtp.h @@ -0,0 +1,50 @@ +/* + * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * 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 + +/* AEAD SRTP protection profiles from RFC 7714 */ +# define SRTP_AEAD_AES_128_GCM 0x0007 +# define SRTP_AEAD_AES_256_GCM 0x0008 + +# ifndef OPENSSL_NO_SRTP + +__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +__owur int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); + +__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); + +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/ssl.h b/android/armeabi-v7a/include/openssl/ssl.h new file mode 100644 index 00000000..86ab9125 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ssl.h @@ -0,0 +1,2529 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# include +# endif +# include +# include +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL 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 + +# 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 + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# 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"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr" +# define SSL_TXT_kECDHe "kECDHe" +# define SSL_TXT_kECDH "kECDH" +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# 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_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# 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_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" + +# 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_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# 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_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:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * 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 + +# 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; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* 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; + +DEFINE_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, + const SSL_CIPHER **cipher, void *arg); + +/* 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); + +/* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U +/* Removed from OpenSSL 0.9.8q and 1.0.0c */ +/* Dead forever, see CVE-2010-4180. */ +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0U +# define SSL_OP_TLSEXT_PADDING 0x00000010U +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0U +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U +/* Ancient SSLeay version, retained for compatibility */ +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0U +/* Removed from OpenSSL 1.1.0 */ +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0U + +/* 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 +/* Related to removed SSLv2 */ +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_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 0x00000800U + +/* + * SSL_OP_ALL: various bug workarounds that should be rather harmless. This + * used to be 0x000FFFFFL before 0.9.7. + */ +# define SSL_OP_ALL 0x80000BFFU + +/* DTLS options */ +# define SSL_OP_NO_QUERY_MTU 0x00001000U +/* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE 0x00002000U +/* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET 0x00004000U +# ifndef OPENSSL_NO_DTLS1_METHOD +/* Use Cisco's "speshul" version of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) */ +# define SSL_OP_CISCO_ANYCONNECT 0x00008000U +# endif + +/* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U +/* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION 0x00020000U +/* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U +/* Does nothing: retained for compatibility */ +# define SSL_OP_SINGLE_ECDH_USE 0x0 +/* Does nothing: retained for compatibility */ +# define SSL_OP_SINGLE_DH_USE 0x0 +/* Does nothing: retained for compatibility */ +# 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 0x00400000U +/* + * 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 0x00800000U + +# define SSL_OP_NO_SSLv2 0x00000000U +# define SSL_OP_NO_SSLv3 0x02000000U +# define SSL_OP_NO_TLSv1 0x04000000U +# define SSL_OP_NO_TLSv1_2 0x08000000U +# define SSL_OP_NO_TLSv1_1 0x10000000U + +# define SSL_OP_NO_DTLSv1 0x04000000U +# define SSL_OP_NO_DTLSv1_2 0x08000000U + +# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) +# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) + + +/* Removed from previous versions */ +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0U +/* + * 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 0x80000000U + +/* + * 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 0x00000001U +/* + * 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 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * 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 0x00000010U +/* + * 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 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * 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 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* 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 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* 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 +# define SSL_CONF_TYPE_NONE 0x4 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); +unsigned long SSL_get_options(const SSL* s); +unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_clear_options(SSL *s, unsigned long op); +unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_set_options(SSL *s, unsigned long op); + +# 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_DTLS_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)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP + +/* see tls_srp.c */ +__owur int SSL_SRP_CTX_init(SSL *s); +__owur 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); +__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); +__owur int SRP_Calc_A_param(SSL *s); + +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 + +# 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 SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. 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); + +# 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, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const 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 +__owur 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, + const 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 + +__owur 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); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int 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 int *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)); +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur 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 + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur 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); + +__owur 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); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 + +/* 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_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +DEFINE_STACK_OF_CONST(SSL_CIPHER) +DEFINE_STACK_OF(SSL_COMP) + +/* 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)) +DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) + + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# 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_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(SSL *s); +int SSL_in_before(SSL *s); +int SSL_is_init_finished(SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.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() +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# 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_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# 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_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# 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_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 */ +# 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_DTLS_EXT_SEND_HEARTBEAT 85 +# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 +# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 +# endif +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# 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_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_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# 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 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_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_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# 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_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,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +#define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +#define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +#define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +#define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) + +#if OPENSSL_API_COMPAT < 0x10100000L +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +#endif + +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur 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 +__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +#endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); + +__owur SSL_SESSION *SSL_SESSION_new(void); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +__owur int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); +int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); +__owur int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); +__owur 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 +__owur X509 *SSL_get_peer_certificate(const SSL *s); +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur 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 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur 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); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur 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_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); +__owur int SSL_set_purpose(SSL *s, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *s, int trust); +__owur int SSL_set_trust(SSL *s, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, unsigned char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, unsigned const char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur 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); + +__owur BIGNUM *SSL_get_srp_g(SSL *s); +__owur BIGNUM *SSL_get_srp_N(SSL *s); + +__owur char *SSL_get_srp_username(SSL *s); +__owur char *SSL_get_srp_userinfo(SSL *s); +# endif + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur 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)); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +# ifndef OPENSSL_NO_SSL3_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) /* SSLv3 */ +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) /* TLSv1.0 */ +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) /* TLSv1.1 */ +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) /* TLSv1.2 */ +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) /* DTLSv1.0 */ +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) /* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) /* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) /* DTLSv1.2 */ +#endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_renegotiate(SSL *s); +__owur int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(SSL *s); +int SSL_shutdown(SSL *s); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur 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); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur 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); + +__owur long SSL_get_default_timeout(const SSL *s); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +#endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur 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 */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur 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); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *ssl, + unsigned char *out, size_t outlen); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur 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); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur 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); + +__owur 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) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +/* NB: the |keylength| is only applicable when is_export is true */ +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 + +__owur const COMP_METHOD *SSL_get_current_compression(SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +#if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_COMP_free_compression_methods() while(0) continue +#endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn tls_session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int + is_forward_secure)); +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(SSL *s); +__owur int SSL_is_server(SSL *s); + +__owur __owur 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); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur 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); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# 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); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int(*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, const SSL_CTX *ctx, int op, + int bits, int nid, + void *other, void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +#define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +#define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +#define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +extern const char SSL_version_str[]; + +/* 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. + */ + +int ERR_load_SSL_strings(void); + +/* Error codes for the SSL functions. */ + +/* Function codes. */ +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CT_MOVE_SCTS 345 +# define SSL_F_CT_STRICT 349 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DANE_CTX_ENABLE 347 +# define SSL_F_DANE_MTYPE_SET 393 +# define SSL_F_DANE_TLSA_ADD 394 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 339 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_DTLSV1_LISTEN 350 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 +# define SSL_F_OPENSSL_INIT_SSL 342 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 +# define SSL_F_READ_STATE_MACHINE 352 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# 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_FINAL_FINISH_MAC 285 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_INIT_FINISHED_MAC 397 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# 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 316 +# 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_ADD0_CHAIN_CERT 346 +# define SSL_F_SSL_CERT_DUP 221 +# define SSL_F_SSL_CERT_NEW 162 +# define SSL_F_SSL_CERT_SET0_CHAIN 340 +# 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_ENABLE_CT 398 +# define SSL_F_SSL_CTX_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 +# 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_CT_VALIDATION_CALLBACK 396 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# 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_DANE_DUP 403 +# define SSL_F_SSL_DANE_ENABLE 395 +# define SSL_F_SSL_DO_CONFIG 391 +# define SSL_F_SSL_DO_HANDSHAKE 180 +# define SSL_F_SSL_DUP_CA_LIST 408 +# define SSL_F_SSL_ENABLE_CT 402 +# 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_SIGN_PKEY 183 +# define SSL_F_SSL_INIT_WBIO_BUFFER 184 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +# define SSL_F_SSL_MODULE_INIT 392 +# 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_READ 223 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 +# define SSL_F_SSL_SESSION_DUP 348 +# define SSL_F_SSL_SESSION_NEW 189 +# define SSL_F_SSL_SESSION_PRINT_FP 190 +# define SSL_F_SSL_SESSION_SET1_ID 423 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 +# define SSL_F_SSL_SET_ALPN_PROTOS 344 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# 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_WFD 196 +# define SSL_F_SSL_SHUTDOWN 224 +# define SSL_F_SSL_SRP_CTX_INIT 313 +# define SSL_F_SSL_START_ASYNC_JOB 389 +# 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_VALIDATE_CT 400 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_STATE_MACHINE 353 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 +# define SSL_F_TLS1_ENC 401 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# 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_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 355 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 356 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 357 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 358 +# define SSL_F_TLS_CONSTRUCT_FINISHED 359 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 374 +# define SSL_F_TLS_CONSTRUCT_SERVER_DONE 375 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 376 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 377 +# define SSL_F_TLS_GET_MESSAGE_BODY 351 +# define SSL_F_TLS_GET_MESSAGE_HEADER 387 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 +# define SSL_F_TLS_PROCESS_CERT_STATUS 362 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 +# define SSL_F_TLS_PROCESS_CKE_DHE 411 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 +# define SSL_F_TLS_PROCESS_CKE_GOST 413 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 +# define SSL_F_TLS_PROCESS_CKE_RSA 415 +# define SSL_F_TLS_PROCESS_CKE_SRP 416 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 +# define SSL_F_TLS_PROCESS_FINISHED 364 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 +# define SSL_F_TLS_PROCESS_SERVER_DONE 368 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 +# define SSL_F_TLS_PROCESS_SKE_DHE 419 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 +# define SSL_F_TLS_PROCESS_SKE_SRP 422 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 + +/* Reason codes. */ +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 +# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# 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_VALUE 102 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_ECC_CERT 304 +# 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_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# 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_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_KEY_TOO_SMALL 397 +# define SSL_R_CA_MD_TOO_WEAK 398 +# 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_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# 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_TYPE_NOT_SET 144 +# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 +# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 +# define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 +# define SSL_R_DANE_ALREADY_ENABLED 172 +# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 +# define SSL_R_DANE_NOT_ENABLED 175 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 +# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 +# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 +# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 +# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 +# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 +# define SSL_R_DANE_TLSA_NULL_DATA 203 +# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +# define SSL_R_DATA_LENGTH_TOO_LONG 146 +# define SSL_R_DECRYPTION_FAILED 147 +# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +# define SSL_R_DH_KEY_TOO_SMALL 394 +# 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_SIGNING 318 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_EE_KEY_TOO_SMALL 399 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_FAILED_TO_INIT_ASYNC 405 +# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INCONSISTENT_EXTMS 104 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_CONFIGURATION_NAME 113 +# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_SEQUENCE_NUMBER 402 +# 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_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_LONG 404 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# 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_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# 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_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# 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_SIGNATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_VALID_SCTS 216 +# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 +# 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_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_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PIPELINE_FAILURE 406 +# 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_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# 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_COMPRESSION_ALGORITHM_MISSING 342 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SCT_VERIFICATION_FAILED 208 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 +# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 +# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +# define SSL_R_SRP_A_CALC 361 +# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 +# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 +# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 +# define SSL_R_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_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_COMMAND_SECTION_EMPTY 117 +# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 +# 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_NEGATIVE_LENGTH 372 +# define SSL_R_SSL_SECTION_EMPTY 126 +# define SSL_R_SSL_SECTION_NOT_FOUND 136 +# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +# define SSL_R_SSL_SESSION_ID_CONFLICT 302 +# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 +# 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_VERSION_MISMATCH 210 +# 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_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_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# 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_COMMAND 139 +# 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_SSL_VERSION 254 +# define SSL_R_UNKNOWN_STATE 255 +# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# 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_VERSION_TOO_HIGH 166 +# define SSL_R_VERSION_TOO_LOW 396 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# 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/android/armeabi-v7a/include/openssl/ssl2.h b/android/armeabi-v7a/include/openssl/ssl2.h new file mode 100644 index 00000000..5321bd27 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ssl2.h @@ -0,0 +1,24 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSL2_H +# define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL2_VERSION 0x0002 + +# define SSL2_MT_CLIENT_HELLO 1 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/armeabi-v7a/include/openssl/ssl3.h b/android/armeabi-v7a/include/openssl/ssl3.h new file mode 100644 index 00000000..aca19223 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ssl3.h @@ -0,0 +1,307 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 + +# include +# 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_DHE_DSS_DES_40_CBC_SHA 0x03000011 +# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 +# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 +# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA +# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 +# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 +# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 +# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_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 + +# 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" + +# 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 DTLS1_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 + + +# 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 + +/* Removed from OpenSSL 1.1.0 */ +# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 + +# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 + +/* Set if we encrypt then mac instead of usual mac then encrypt */ +# define TLS1_FLAGS_ENCRYPT_THEN_MAC 0x0100 + +/* Set if extended master secret extension received from peer */ +# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 + +# 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 + +/* Dummy message type for handling CCS like a normal handshake message */ +# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 + +# 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/android/armeabi-v7a/include/openssl/stack.h b/android/armeabi-v7a/include/openssl/stack.h new file mode 100644 index 00000000..23ad3b89 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/stack.h @@ -0,0 +1,78 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_STACK_H +# define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ + +typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); +typedef void (*OPENSSL_sk_freefunc)(void *); +typedef void *(*OPENSSL_sk_copyfunc)(const void *); + +int OPENSSL_sk_num(const OPENSSL_STACK *); +void *OPENSSL_sk_value(const OPENSSL_STACK *, int); + +void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); + +OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_new_null(void); +void OPENSSL_sk_free(OPENSSL_STACK *); +void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); +OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, OPENSSL_sk_copyfunc c, OPENSSL_sk_freefunc f); +int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); +void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); +void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); +int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); +void *OPENSSL_sk_shift(OPENSSL_STACK *st); +void *OPENSSL_sk_pop(OPENSSL_STACK *st); +void OPENSSL_sk_zero(OPENSSL_STACK *st); +OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); +void OPENSSL_sk_sort(OPENSSL_STACK *st); +int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _STACK OPENSSL_STACK +# define sk_num OPENSSL_sk_num +# define sk_value OPENSSL_sk_value +# define sk_set OPENSSL_sk_set +# define sk_new OPENSSL_sk_new +# define sk_new_null OPENSSL_sk_new_null +# define sk_free OPENSSL_sk_free +# define sk_pop_free OPENSSL_sk_pop_free +# define sk_deep_copy OPENSSL_sk_deep_copy +# define sk_insert OPENSSL_sk_insert +# define sk_delete OPENSSL_sk_delete +# define sk_delete_ptr OPENSSL_sk_delete_ptr +# define sk_find OPENSSL_sk_find +# define sk_find_ex OPENSSL_sk_find_ex +# define sk_push OPENSSL_sk_push +# define sk_unshift OPENSSL_sk_unshift +# define sk_shift OPENSSL_sk_shift +# define sk_pop OPENSSL_sk_pop +# define sk_zero OPENSSL_sk_zero +# define sk_set_cmp_func OPENSSL_sk_set_cmp_func +# define sk_dup OPENSSL_sk_dup +# define sk_sort OPENSSL_sk_sort +# define sk_is_sorted OPENSSL_sk_is_sorted +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/symhacks.h b/android/armeabi-v7a/include/openssl/symhacks.h new file mode 100644 index 00000000..caf1f1a7 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/symhacks.h @@ -0,0 +1,52 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SYMHACKS_H +# define HEADER_SYMHACKS_H + +# include + +/* Case insensitive linking causes problems.... */ +# if defined(OPENSSL_SYS_VMS) +# 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/android/armeabi-v7a/include/openssl/tls1.h b/android/armeabi-v7a/include/openssl/tls1.h new file mode 100644 index 00000000..23e382cd --- /dev/null +++ b/android/armeabi-v7a/include/openssl/tls1.h @@ -0,0 +1,972 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Default security level if not overridden at config time */ +# ifndef OPENSSL_TLS_SECURITY_LEVEL +# define OPENSSL_TLS_SECURITY_LEVEL 1 +# endif + +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS_MAX_VERSION TLS1_2_VERSION + +/* Special value for method supporting multiple versions */ +# define TLS_ANY_VERSION 0x10000 + +# 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) \ + ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) + +# define TLS1_get_client_version(s) \ + ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 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 */ +# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ +# define TLSEXT_TYPE_server_name 0 +# define TLSEXT_TYPE_max_fragment_length 1 +# define TLSEXT_TYPE_client_certificate_url 2 +# define TLSEXT_TYPE_trusted_ca_keys 3 +# define TLSEXT_TYPE_truncated_hmac 4 +# define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4681 */ +# define TLSEXT_TYPE_user_mapping 6 +/* ExtensionType values from RFC5878 */ +# define TLSEXT_TYPE_client_authz 7 +# define TLSEXT_TYPE_server_authz 8 +/* ExtensionType values from RFC6091 */ +# define TLSEXT_TYPE_cert_type 9 + +/* ExtensionType values from RFC4492 */ +# define TLSEXT_TYPE_elliptic_curves 10 +# define TLSEXT_TYPE_ec_point_formats 11 + +/* ExtensionType value from RFC5054 */ +# define TLSEXT_TYPE_srp 12 + +/* ExtensionType values from RFC5246 */ +# define TLSEXT_TYPE_signature_algorithms 13 + +/* ExtensionType value from RFC5764 */ +# define TLSEXT_TYPE_use_srtp 14 + +/* ExtensionType value from RFC5620 */ +# define TLSEXT_TYPE_heartbeat 15 + +/* ExtensionType value from RFC7301 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * Extension type for Certificate Transparency + * https://tools.ietf.org/html/rfc6962#section-3.3.1 + */ +# define TLSEXT_TYPE_signed_certificate_timestamp 18 + +/* + * ExtensionType value for TLS padding extension. + * http://tools.ietf.org/html/draft-agl-tls-padding + */ +# define TLSEXT_TYPE_padding 21 + +/* ExtensionType value from RFC7366 */ +# define TLSEXT_TYPE_encrypt_then_mac 22 + +/* ExtensionType value from RFC7627 */ +# define TLSEXT_TYPE_extended_master_secret 23 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* Temporary extension type */ +# define TLSEXT_TYPE_renegotiate 0xff01 + +# ifndef OPENSSL_NO_NEXTPROTONEG +/* This is not an IANA defined extension number */ +# define TLSEXT_TYPE_next_proto_neg 13172 +# endif + +/* NameType value from RFC3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from RFC4492 */ +# define TLSEXT_ECPOINTFORMAT_first 0 +# define TLSEXT_ECPOINTFORMAT_uncompressed 0 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +# define TLSEXT_ECPOINTFORMAT_last 2 + +/* Signature and hash algorithms from RFC5246 */ +# define TLSEXT_signature_anonymous 0 +# define TLSEXT_signature_rsa 1 +# define TLSEXT_signature_dsa 2 +# define TLSEXT_signature_ecdsa 3 +# define TLSEXT_signature_gostr34102001 237 +# define TLSEXT_signature_gostr34102012_256 238 +# define TLSEXT_signature_gostr34102012_512 239 + +/* Total number of different signature algorithms */ +# define TLSEXT_signature_num 7 + +# 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 +# define TLSEXT_hash_gostr3411 237 +# define TLSEXT_hash_gostr34112012_256 238 +# define TLSEXT_hash_gostr34112012_512 239 + +/* Total number of different digest algorithms */ + +# define TLSEXT_hash_num 10 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +# define TLSEXT_MAXLEN_host_name 255 + +__owur const char *SSL_get_servername(const SSL *s, const int type); +__owur 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. + */ +__owur 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); + +__owur 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_get_tlsext_status_type(ssl) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0, NULL) + +# 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_get_tlsext_status_cb(ssl, cb) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0, (void (**)(void))cb) +# 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_get_tlsext_status_arg(ssl, arg) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg +# 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_CTX_set_tlsext_status_type(ssl, type) \ + SSL_CTX_ctrl(ssl, SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE, type, NULL) + +#define SSL_CTX_get_tlsext_status_type(ssl) \ + SSL_CTX_ctrl(ssl, SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE, 0, NULL) + +# 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_DTLSEXT_HB_ENABLED 0x01 +# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 +# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 +# define SSL_get_dtlsext_heartbeat_pending(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) +# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ + SSL_ctrl((ssl),SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ + SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT +# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ + SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING +# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ + SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS +# define SSL_TLSEXT_HB_ENABLED \ + SSL_DTLSEXT_HB_ENABLED +# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ + SSL_DTLSEXT_HB_DONT_SEND_REQUESTS +# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ + SSL_DTLSEXT_HB_DONT_RECV_REQUESTS +# define SSL_get_tlsext_heartbeat_pending(ssl) \ + SSL_get_dtlsext_heartbeat_pending(ssl) +# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ + SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) +# 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 + +# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E +# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 + +# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 +# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 + +/* PSK ciphersuites from 5487 */ +# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 +# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB +# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC +# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD + +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF +# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 +# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 + +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 + +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 + +/* NULL PSK ciphersuites from RFC4785 */ +# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E + +/* 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 + +/* CCM ciphersuites from RFC6655 */ +# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C +# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F +# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 +# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 +# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 +# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 +# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 +# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB + +/* CCM ciphersuites from RFC7251 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF + +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 + +/* ECC ciphersuites from RFC4492 */ +# 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 + +/* ECDHE PSK ciphersuites from RFC5489 */ +# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 +# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 + +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 + +/* NULL PSK ciphersuites from RFC4785 */ + +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 + +# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 +# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 +# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 +# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA +# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB +# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC +# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD +# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE + +/* + * 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_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" + +/* AES ciphersuites from RFC3268 */ +# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" +# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" +# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" + +/* PSK ciphersuites from RFC 5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" + +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" +# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" +# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" + +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" + +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" + +/* 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" + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" + +# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" + +/* 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" + +/* CCM ciphersuites from RFC6655 */ + +# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" +# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" + +# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" +# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" +# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" +# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" + +/* CCM ciphersuites from RFC7251 */ + +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" + +/* 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" + +/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" + +/* ECDHE PSK ciphersuites from RFC 5489 */ +# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" + +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" + +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" + +# 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_GOST01_SIGN 22 +# define TLS_CT_GOST12_SIGN 238 +# define TLS_CT_GOST12_512_SIGN 239 + +/* + * 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 22 +# 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_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 +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 + +# 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" +# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST +/* + * extended master secret + */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x63\x64\x65\x64\x20\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/android/armeabi-v7a/include/openssl/ts.h b/android/armeabi-v7a/include/openssl/ts.h new file mode 100644 index 00000000..a5659825 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ts.h @@ -0,0 +1,643 @@ +/* + * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TS_H +# define HEADER_TS_H + +# include + +# ifndef OPENSSL_NO_TS +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include + +typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; +typedef struct TS_req_st TS_REQ; +typedef struct TS_accuracy_st TS_ACCURACY; +typedef struct TS_tst_info_st TS_TST_INFO; + +/* Possible values for status. */ +# 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. */ +# 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 TS_STATUS_INFO; +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +DEFINE_STACK_OF(ESS_CERT_ID) + +typedef struct TS_resp_st TS_RESP; + +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); + +#ifndef OPENSSL_NO_STDIO +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +#endif +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); + +#ifndef OPENSSL_NO_STDIO +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); +#endif +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, 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); + +#ifndef OPENSSL_NO_STDIO +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +#endif +TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *bio, 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); + +#ifndef OPENSSL_NO_STDIO +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); +#endif +TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); +int i2d_TS_TST_INFO_bio(BIO *bio, 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); + +int TS_REQ_set_version(TS_REQ *a, long version); +long TS_REQ_get_version(const TS_REQ *a); + +int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); +const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); + +const STACK_OF(ASN1_UTF8STRING) * +TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); + +const ASN1_BIT_STRING * +TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *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, const 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, const 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, const 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 TS_RESP_CTX; + +DEFINE_STACK_OF_CONST(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); + +int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, + const EVP_MD *signer_digest); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const 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, const ASN1_OBJECT *policy); + +/* + * Adds a new acceptable message digest. Note that no message digests are + * accepted by default. The md argument is shared with the caller. + */ +int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* Accuracy is not included by default. */ +int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, + int secs, int millis, int micros); + +/* + * Clock precision digits, i.e. the number of decimal digits: '0' means sec, + * '3' msec, '6' usec, and so on. Default is 0. + */ +int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, + unsigned clock_precision_digits); +/* At most we accept usec precision. */ +# define TS_MAX_CLOCK_PRECISION_DIGITS 6 + +/* Maximum status message length */ +# define TS_MAX_STATUS_LENGTH (1024 * 1024) + +/* No flags are set by default. */ +void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); + +/* Default callback always returns a constant. */ +void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); + +/* Default callback uses the gettimeofday() and gmtime() system calls. */ +void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); + +/* + * Default callback rejects all extensions. The extension callback is called + * when the TS_TST_INFO object is already set up and not signed yet. + */ +/* FIXME: extension handling is not tested yet. */ +void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, + TS_extension_cb cb, void *data); + +/* The following methods can be used in the callbacks. */ +int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, + int status, const char *text); + +/* Sets the status info only if it is still TS_STATUS_GRANTED. */ +int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, + int status, const char *text); + +int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); + +/* The get methods below can be used in the extension callback. */ +TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); + +TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); + +/* + * Creates the signed TS_TST_INFO and puts it in TS_RESP. + * In case of errors it sets the status info properly. + * Returns NULL only in case of memory allocation/fatal error. + */ +TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); + +/* + * Declarations related to response verification, + * they are defined in ts/ts_resp_verify.c. + */ + +int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, + X509_STORE *store, X509 **signer_out); + +/* Context structure for the generic verify method. */ + +/* Verify the signer's certificate and the signature of the response. */ +# define TS_VFY_SIGNATURE (1u << 0) +/* Verify the version number of the response. */ +# define TS_VFY_VERSION (1u << 1) +/* Verify if the policy supplied by the user matches the policy of the TSA. */ +# define TS_VFY_POLICY (1u << 2) +/* + * Verify the message imprint provided by the user. This flag should not be + * specified with TS_VFY_DATA. + */ +# define TS_VFY_IMPRINT (1u << 3) +/* + * Verify the message imprint computed by the verify method from the user + * provided data and the MD algorithm of the response. This flag should not + * be specified with TS_VFY_IMPRINT. + */ +# define TS_VFY_DATA (1u << 4) +/* Verify the nonce value. */ +# define TS_VFY_NONCE (1u << 5) +/* Verify if the TSA name field matches the signer certificate. */ +# define TS_VFY_SIGNER (1u << 6) +/* Verify if the TSA name field equals to the user provided name. */ +# define TS_VFY_TSA_NAME (1u << 7) + +/* You can use the following convenience constants. */ +# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_IMPRINT \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) +# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_DATA \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) + +typedef struct TS_verify_ctx 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, + */ +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); +int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); +int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); +BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); +unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, + unsigned char *hexstr, long len); +X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); +STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); + +/*- + * 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); +#ifndef OPENSSL_NO_ENGINE +int TS_CONF_set_crypto_device(CONF *conf, const char *section, + const char *device); +int TS_CONF_set_default_engine(const char *name); +#endif +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_signer_digest(CONF *conf, const char *section, + const char *md, 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. + */ + +int ERR_load_TS_strings(void); + +/* Error codes for the TS functions. */ + +/* Function codes. */ +# 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_INVALID 151 +# define TS_F_TS_CONF_LOAD_CERT 153 +# define TS_F_TS_CONF_LOAD_CERTS 154 +# define TS_F_TS_CONF_LOAD_KEY 155 +# define TS_F_TS_CONF_LOOKUP_FAIL 152 +# 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_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_CANNOT_LOAD_CERT 137 +# define TS_R_CANNOT_LOAD_KEY 138 +# 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_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_VAR_BAD_VALUE 135 +# define TS_R_VAR_LOOKUP_FAILURE 136 +# define TS_R_WRONG_CONTENT_TYPE 114 + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/txt_db.h b/android/armeabi-v7a/include/openssl/txt_db.h new file mode 100644 index 00000000..0e6c943e --- /dev/null +++ b/android/armeabi-v7a/include/openssl/txt_db.h @@ -0,0 +1,57 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TXT_DB_H +# define HEADER_TXT_DB_H + +# include +# include +# 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 +# define DB_ERROR_WRONG_NUM_FIELDS 6 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OPENSSL_STRING *OPENSSL_PSTRING; +DEFINE_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; + +TXT_DB *TXT_DB_read(BIO *in, int num); +long TXT_DB_write(BIO *out, TXT_DB *db); +int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), + OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC 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/android/armeabi-v7a/include/openssl/ui.h b/android/armeabi-v7a/include/openssl/ui.h new file mode 100644 index 00000000..26f4f044 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/ui.h @@ -0,0 +1,368 @@ +/* + * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UI_H +# define HEADER_UI_H + +# include + +# ifndef OPENSSL_NO_UI + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 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 useful 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) + +#define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +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 with 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; +DEFINE_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(const 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 prompt + * 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. + */ + +int 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_UI_CREATE_METHOD 112 +# 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 +#endif diff --git a/android/armeabi-v7a/include/openssl/whrlpool.h b/android/armeabi-v7a/include/openssl/whrlpool.h new file mode 100644 index 00000000..20ea3503 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/whrlpool.h @@ -0,0 +1,48 @@ +/* + * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_WHRLPOOL_H +# define HEADER_WHRLPOOL_H + +#include + +# ifndef OPENSSL_NO_WHIRLPOOL +# 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; + +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); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/android/armeabi-v7a/include/openssl/x509.h b/android/armeabi-v7a/include/openssl/x509.h new file mode 100644 index 00000000..c8996f35 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/x509.h @@ -0,0 +1,1123 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* ==================================================================== + * 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 +# include +# include +# include +# include +# include +# include +# include +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# endif + +# include + +#ifdef __cplusplus +extern "C" { +#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 + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +DEFINE_STACK_OF(X509_NAME_ENTRY) + +DEFINE_STACK_OF(X509_NAME) + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DEFINE_STACK_OF(X509_EXTENSION) + +typedef struct x509_attributes_st X509_ATTRIBUTE; + +DEFINE_STACK_OF(X509_ATTRIBUTE) + +typedef struct X509_req_info_st X509_REQ_INFO; + +typedef struct X509_req_st X509_REQ; + +typedef struct x509_cert_aux_st X509_CERT_AUX; + +typedef struct x509_cinf_st X509_CINF; + +DEFINE_STACK_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; + +DEFINE_STACK_OF(X509_TRUST) + +/* standard trust ids */ + +# define X509_TRUST_DEFAULT 0 /* 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 (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* 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; 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) + +DEFINE_STACK_OF(X509_REVOKED) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +DEFINE_STACK_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; +} X509_PKEY; + +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; +} X509_INFO; + +DEFINE_STACK_OF(X509_INFO) + +/* + * 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; + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +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); + +const char *X509_verify_cert_error_string(long n); + +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, const X509_ALGOR *alg, + const 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); +# ifndef OPENSSL_NO_OCSP +int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); +# endif +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); +# ifndef OPENSSL_NO_OCSP +int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); +# endif +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); + +# ifndef OPENSSL_NO_STDIO +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 + +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); + +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(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const 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_get0(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +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) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +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) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +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(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +int X509_trusted(const X509 *x); +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const 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, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(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); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const 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); + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_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, const 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_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +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(const X509 *x509, const 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); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +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, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const 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_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); + +int X509_NAME_entry_count(const 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, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -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, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const 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, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const 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, + const 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, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const 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(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +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, + const 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(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const 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(const 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(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const 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(const 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(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const 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(const 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, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const 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(const 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, + const 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, + const 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(const 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, const 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); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +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(const PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); + +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(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); + +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), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const 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. + */ + +int ERR_load_X509_strings(void); + +/* Error codes for the X509 functions. */ + +/* Function codes. */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BUILD_CHAIN 106 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 149 +# define X509_F_CHECK_POLICY 145 +# define X509_F_DANE_I2D 107 +# 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_OBJECT_NEW 150 +# define X509_F_X509_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_DECODE 148 +# define X509_F_X509_PUBKEY_GET0 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_SELECTOR 133 +# 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_IDP_MISMATCH 128 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_FIELD_NAME 119 +# define X509_R_INVALID_TRUST 123 +# define X509_R_ISSUER_MISMATCH 129 +# define X509_R_KEY_TYPE_MISMATCH 115 +# define X509_R_KEY_VALUES_MISMATCH 116 +# define X509_R_LOADING_CERT_DIR 103 +# define X509_R_LOADING_DEFAULTS 104 +# define X509_R_METHOD_NOT_SUPPORTED 124 +# define X509_R_NAME_TOO_LONG 134 +# define X509_R_NEWER_CRL_NOT_NEWER 132 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_NUMBER 130 +# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +# define X509_R_SHOULD_RETRY 106 +# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +# define X509_R_UNKNOWN_KEY_TYPE 117 +# define X509_R_UNKNOWN_NID 109 +# define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +# ifdef __cplusplus +} +# endif +#endif diff --git a/android/armeabi-v7a/include/openssl/x509_vfy.h b/android/armeabi-v7a/include/openssl/x509_vfy.h new file mode 100644 index 00000000..cab8005e --- /dev/null +++ b/android/armeabi-v7a/include/openssl/x509_vfy.h @@ -0,0 +1,539 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509_VFY_H +# define HEADER_X509_VFY_H + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef HEADER_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +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. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#if OPENSSL_API_COMPAT < 0x10100000L +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +DEFINE_STACK_OF(X509_LOOKUP) +DEFINE_STACK_OF(X509_OBJECT) +DEFINE_STACK_OF(X509_VERIFY_PARAM) + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_INVALID_CA 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* 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 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 + +/* Certificate verify flags */ + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* 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 self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# 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, X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); + +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_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); +X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); + +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_set0_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 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +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_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +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); + +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, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + X509_NAME *name, ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +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); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +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_get0_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_set0_verified_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); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(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); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* 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_auth_level(X509_VERIFY_PARAM *param, int auth_level); +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 *); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, 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); +int X509_VERIFY_PARAM_get_auth_level(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); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +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/android/armeabi-v7a/include/openssl/x509v3.h b/android/armeabi-v7a/include/openssl/x509v3.h new file mode 100644 index 00000000..f21ce7c1 --- /dev/null +++ b/android/armeabi-v7a/include/openssl/x509v3.h @@ -0,0 +1,1005 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3_H +# define HEADER_X509V3_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#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, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const 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 +# define X509V3_CTX_REPLACE 0x2 + 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; + +DEFINE_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 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; + +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; + +DEFINE_STACK_OF(GENERAL_NAME) +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; +DEFINE_STACK_OF(GENERAL_NAMES) + +DEFINE_STACK_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; + +DEFINE_STACK_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; + +DEFINE_STACK_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; + +DEFINE_STACK_OF(POLICYQUALINFO) + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +DEFINE_STACK_OF(POLICYINFO) + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +DEFINE_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; + +DEFINE_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 + +DEFINE_STACK_OF(X509_PURPOSE) + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const 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); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +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, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +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); +int NAME_CONSTRAINTS_check_CN(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, + const 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, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const 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, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const 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, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const 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(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +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); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +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); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const 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); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const 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), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const 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 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * 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 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); +DEFINE_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; +DEFINE_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; +DEFINE_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; +DEFINE_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 X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_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. + */ + +int ERR_load_X509V3_strings(void); + +/* Error codes for the X509V3 functions. */ + +/* Function codes. */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 +# 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_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# 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_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# 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_V2I_TLS_FEATURE 165 +# 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_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_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_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_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_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/android/armeabi-v7a/include/websockets/libwebsockets.h b/android/armeabi-v7a/include/websockets/libwebsockets.h index 763775a7..7efeba1f 100644 --- a/android/armeabi-v7a/include/websockets/libwebsockets.h +++ b/android/armeabi-v7a/include/websockets/libwebsockets.h @@ -19,6 +19,8 @@ * MA 02110-1301 USA */ +/** @file */ + #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C @@ -76,13 +78,13 @@ public: &lws_conn_listener::onError)); } - void start(const uint16_t port); + void start(const uint16_t port); /**< start listening */ protected: - void onRX(Socket *s); - void onError(Socket *s, socket_error_t err); - void onIncoming(TCPListener *s, void *impl); - void onDisconnect(TCPStream *s); + void onRX(Socket *s); /**< incoming data ready */ + void onError(Socket *s, socket_error_t err); /**< if error occurs */ + void onIncoming(TCPListener *s, void *impl); /**< new connection */ + void onDisconnect(TCPStream *s); /**< disconnection */ public: TCPListener srv; @@ -95,7 +97,7 @@ extern "C" { #include #endif -#ifdef MBED_OPERATORS +#if defined(MBED_OPERATORS) || defined(LWS_WITH_ESP8266) struct sockaddr_in; #define LWS_POSIX 0 #else @@ -112,7 +114,6 @@ struct sockaddr_in; #include #include #include -#include #include #ifndef _WIN32_WCE #include @@ -121,7 +122,8 @@ struct sockaddr_in; #define O_RDONLY _O_RDONLY #endif -#ifdef _WIN32_WCE +// Visual studio older than 2015 and WIN_CE has only _stricmp +#if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) #define strcasecmp _stricmp #else #define strcasecmp stricmp @@ -146,7 +148,13 @@ struct sockaddr_in; #define LWS_INVALID_FILE INVALID_HANDLE_VALUE #define LWS_O_RDONLY _O_RDONLY -#define snprintf _snprintf +#if !defined(_MSC_VER) || _MSC_VER < 1900 /* Visual Studio 2015 already defines this in */ +#define lws_snprintf _snprintf +#endif + +#ifndef __func__ +#define __func__ __FUNCTION__ +#endif #else /* NOT WIN32 */ #include @@ -158,7 +166,7 @@ struct sockaddr_in; #define LWS_INLINE inline #define LWS_O_RDONLY O_RDONLY -#ifndef MBED_OPERATORS +#if !defined(MBED_OPERATORS) && !defined(LWS_WITH_ESP8266) #include #include #define LWS_INVALID_FILE -1 @@ -196,6 +204,9 @@ struct sockaddr_in; #endif /* LWS_USE_LIBEV */ #ifdef LWS_USE_LIBUV #include +#ifdef LWS_HAVE_UV_VERSION_H +#include +#endif #endif /* LWS_USE_LIBUV */ #ifndef LWS_EXTERN @@ -210,19 +221,51 @@ struct sockaddr_in; #endif #ifdef LWS_OPENSSL_SUPPORT + #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL #include +#include #else #include +#include #endif /* not USE_OLD_CYASSL */ #else +#if defined(LWS_USE_POLARSSL) +#include +struct lws_polarssl_context { + x509_crt ca; /**< ca */ + x509_crt certificate; /**< cert */ + rsa_context key; /**< key */ +}; +typedef struct lws_polarssl_context SSL_CTX; +typedef ssl_context SSL; +#else +#if defined(LWS_USE_MBEDTLS) +#include +#else #include +#include +#endif /* not USE_MBEDTLS */ +#endif /* not USE_POLARSSL */ #endif /* not USE_WOLFSSL */ #endif + #define CONTEXT_PORT_NO_LISTEN -1 +/** \defgroup log Logging + * + * ##Logging + * + * Lws provides flexible and filterable logging facilities, which can be + * used inside lws and in user code. + * + * Log categories may be individually filtered bitwise, and directed to built-in + * sinks for syslog-compatible logging, or a user-defined function. + */ +///@{ + enum lws_log_levels { LLL_ERR = 1 << 0, LLL_WARN = 1 << 1, @@ -240,18 +283,42 @@ enum lws_log_levels { LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...); LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl); +/** + * lwsl_timestamp: generate logging timestamp string + * + * \param level: logging level + * \param p: char * buffer to take timestamp + * \param len: length of p + * + * returns length written in p + */ +LWS_VISIBLE LWS_EXTERN int +lwsl_timestamp(int level, char *p, int len); -/* notice, warn and log are always compiled in */ -#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) -#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) + +#if !defined(LWS_WITH_NO_LOGS) +/* notice, warn and log are always compiled in */ +#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) +#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) +#endif /* * weaker logging can be deselected at configure time using --disable-debug * that gets rid of the overhead of checking while keeping _warn and _err * active */ -#ifdef _DEBUG +#if defined(LWS_WITH_ESP8266) +#undef _DEBUG +#endif + +#ifdef _DEBUG +#if defined(LWS_WITH_NO_LOGS) +/* notice, warn and log are always compiled in */ +//#define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) +#define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) +#define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) +#endif #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) @@ -259,22 +326,71 @@ LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) +/** + * lwsl_hexdump() - helper to hexdump a buffer (DEBUG builds only) + * + * \param buf: buffer start to dump + * \param len: length of buffer to dump + */ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len); #else /* no debug */ - -#define lwsl_info(...) {} -#define lwsl_debug(...) {} -#define lwsl_parser(...) {} -#define lwsl_header(...) {} -#define lwsl_ext(...) {} -#define lwsl_client(...) {} -#define lwsl_latency(...) {} +#if defined(LWS_WITH_NO_LOGS) +//#define lwsl_err(...) do {} while(0) +#define lwsl_warn(...) do {} while(0) +#define lwsl_notice(...) do {} while(0) +#endif +#define lwsl_info(...) do {} while(0) +#define lwsl_debug(...) do {} while(0) +#define lwsl_parser(...) do {} while(0) +#define lwsl_header(...) do {} while(0) +#define lwsl_ext(...) do {} while(0) +#define lwsl_client(...) do {} while(0) +#define lwsl_latency(...) do {} while(0) #define lwsl_hexdump(a, b) #endif + +/** + * lws_set_log_level() - Set the logging bitfield + * \param level: OR together the LLL_ debug contexts you want output from + * \param log_emit_function: NULL to leave it as it is, or a user-supplied + * function to perform log string emission instead of + * the default stderr one. + * + * log level defaults to "err", "warn" and "notice" contexts enabled and + * emission on stderr. + */ +LWS_VISIBLE LWS_EXTERN void +lws_set_log_level(int level, + void (*log_emit_function)(int level, const char *line)); + +/** + * lwsl_emit_syslog() - helper log emit function writes to system log + * + * \param level: one of LLL_ log level indexes + * \param line: log string + * + * You use this by passing the function pointer to lws_set_log_level(), to set + * it as the log emit function, it is not called directly. + */ +LWS_VISIBLE LWS_EXTERN void +lwsl_emit_syslog(int level, const char *line); + +///@} + + +#include + +#ifndef lws_container_of +#define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) +#endif + + struct lws; +#ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +#endif /* api change list for user code to test against */ @@ -292,90 +408,19 @@ struct lws; /* File operations stuff exists */ #define LWS_FEATURE_FOPS -/* - * NOTE: These public enums are part of the abi. If you want to add one, - * add it at where specified so existing users are unaffected. - */ -enum lws_context_options { - LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = (1 << 1), - LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = (1 << 2), - LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = (1 << 3), - LWS_SERVER_OPTION_LIBEV = (1 << 4), - LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5), - LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = (1 << 6), - LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = (1 << 7), - LWS_SERVER_OPTION_VALIDATE_UTF8 = (1 << 8), - LWS_SERVER_OPTION_SSL_ECDH = (1 << 9), - LWS_SERVER_OPTION_LIBUV = (1 << 10), - - /****** add new things just above ---^ ******/ -}; - -/* - * NOTE: These public enums are part of the abi. If you want to add one, - * add it at where specified so existing users are unaffected. - */ -enum lws_callback_reasons { - LWS_CALLBACK_ESTABLISHED = 0, - LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, - LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, - LWS_CALLBACK_CLIENT_ESTABLISHED = 3, - LWS_CALLBACK_CLOSED = 4, - LWS_CALLBACK_CLOSED_HTTP = 5, - LWS_CALLBACK_RECEIVE = 6, - LWS_CALLBACK_RECEIVE_PONG = 7, - LWS_CALLBACK_CLIENT_RECEIVE = 8, - LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, - LWS_CALLBACK_CLIENT_WRITEABLE = 10, - LWS_CALLBACK_SERVER_WRITEABLE = 11, - LWS_CALLBACK_HTTP = 12, - LWS_CALLBACK_HTTP_BODY = 13, - LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, - LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, - LWS_CALLBACK_HTTP_WRITEABLE = 16, - LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, - LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, - LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, - LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, - LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, - LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, - LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, - LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, - LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, - LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, - LWS_CALLBACK_PROTOCOL_INIT = 27, - LWS_CALLBACK_PROTOCOL_DESTROY = 28, - LWS_CALLBACK_WSI_CREATE /* always protocol[0] */ = 29, - LWS_CALLBACK_WSI_DESTROY /* always protocol[0] */ = 30, - LWS_CALLBACK_GET_THREAD_ID = 31, - - /* external poll() management support */ - LWS_CALLBACK_ADD_POLL_FD = 32, - LWS_CALLBACK_DEL_POLL_FD = 33, - LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, - LWS_CALLBACK_LOCK_POLL = 35, - LWS_CALLBACK_UNLOCK_POLL = 36, - - LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY = 37, - LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, - - LWS_CALLBACK_WS_EXT_DEFAULTS = 39, - - /****** add new things just above ---^ ******/ - - LWS_CALLBACK_USER = 1000, /* user code can use any including / above */ -}; - #if defined(_WIN32) typedef SOCKET lws_sockfd_type; typedef HANDLE lws_filefd_type; #define lws_sockfd_valid(sfd) (!!sfd) struct lws_pollfd { - lws_sockfd_type fd; - SHORT events; - SHORT revents; + lws_sockfd_type fd; /**< file descriptor */ + SHORT events; /**< which events to respond to */ + SHORT revents; /**< which events happened */ }; +#define LWS_POLLHUP (FD_CLOSE) +#define LWS_POLLIN (FD_READ | FD_ACCEPT) +#define LWS_POLLOUT (FD_WRITE) #else #if defined(MBED_OPERATORS) @@ -384,9 +429,9 @@ typedef void * lws_sockfd_type; typedef void * lws_filefd_type; #define lws_sockfd_valid(sfd) (!!sfd) struct pollfd { - lws_sockfd_type fd; - short events; - short revents; + lws_sockfd_type fd; /**< fd related to */ + short events; /**< which POLL... events to respond to */ + short revents; /**< which POLL... events occurred */ }; #define POLLIN 0x0001 #define POLLPRI 0x0002 @@ -401,53 +446,615 @@ void * mbed3_create_tcp_stream_socket(void); void mbed3_delete_tcp_stream_socket(void *sockfd); void mbed3_tcp_stream_bind(void *sock, int port, struct lws *); void mbed3_tcp_stream_accept(void *sock, struct lws *); +#else +#if defined(LWS_WITH_ESP8266) + +#include +#include + +typedef struct espconn * lws_sockfd_type; +typedef void * lws_filefd_type; +#define lws_sockfd_valid(sfd) (!!sfd) +struct pollfd { + lws_sockfd_type fd; /**< fd related to */ + short events; /**< which POLL... events to respond to */ + short revents; /**< which POLL... events occurred */ +}; +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +struct lws_vhost; + +lws_sockfd_type esp8266_create_tcp_listen_socket(struct lws_vhost *vh); +void esp8266_tcp_stream_accept(lws_sockfd_type fd, struct lws *wsi); + +#include +#include +#include "ets_sys.h" + +int ets_snprintf(char *str, size_t size, const char *format, ...); +#define snprintf ets_snprintf + +typedef os_timer_t uv_timer_t; +typedef void uv_cb_t(uv_timer_t *); + +void os_timer_disarm(void *); +void os_timer_setfn(os_timer_t *, os_timer_func_t *, void *); + +void ets_timer_arm_new(os_timer_t *, int, int, int); + +//void os_timer_arm(os_timer_t *, int, int); + +#define UV_VERSION_MAJOR 1 + +#define lws_uv_getloop(a, b) (NULL) + +static inline void uv_timer_init(void *l, uv_timer_t *t) +{ + (void)l; + memset(t, 0, sizeof(*t)); + os_timer_disarm(t); +} + +static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep) +{ + os_timer_setfn(t, (os_timer_func_t *)cb, t); + /* ms, repeat */ + os_timer_arm(t, first, !!rep); +} + +static inline void uv_timer_stop(uv_timer_t *t) +{ + os_timer_disarm(t); +} + #else typedef int lws_sockfd_type; typedef int lws_filefd_type; #define lws_sockfd_valid(sfd) (sfd >= 0) #endif - -#define lws_pollfd pollfd #endif -/* argument structure for all external poll related calls - * passed in via 'in' - */ +#define lws_pollfd pollfd +#define LWS_POLLHUP (POLLHUP|POLLERR) +#define LWS_POLLIN (POLLIN) +#define LWS_POLLOUT (POLLOUT) +#endif + +/** struct lws_pollargs - argument structure for all external poll related calls + * passed in via 'in' */ struct lws_pollargs { - lws_sockfd_type fd; /* applicable socket descriptor */ - int events; /* the new event mask */ - int prev_events; /* the previous event mask */ + lws_sockfd_type fd; /**< applicable socket descriptor */ + int events; /**< the new event mask */ + int prev_events; /**< the previous event mask */ +}; + +struct lws_tokens; +struct lws_token_limits; + +/*! \defgroup wsclose Websocket Close + * + * ##Websocket close frame control + * + * When we close a ws connection, we can send a reason code and a short + * UTF-8 description back with the close packet. + */ +///@{ + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +/** enum lws_close_status - RFC6455 close status codes */ +enum lws_close_status { + LWS_CLOSE_STATUS_NOSTATUS = 0, + LWS_CLOSE_STATUS_NORMAL = 1000, + /**< 1000 indicates a normal closure, meaning that the purpose for + which the connection was established has been fulfilled. */ + LWS_CLOSE_STATUS_GOINGAWAY = 1001, + /**< 1001 indicates that an endpoint is "going away", such as a server + going down or a browser having navigated away from a page. */ + LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, + /**< 1002 indicates that an endpoint is terminating the connection due + to a protocol error. */ + LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, + /**< 1003 indicates that an endpoint is terminating the connection + because it has received a type of data it cannot accept (e.g., an + endpoint that understands only text data MAY send this if it + receives a binary message). */ + LWS_CLOSE_STATUS_RESERVED = 1004, + /**< Reserved. The specific meaning might be defined in the future. */ + LWS_CLOSE_STATUS_NO_STATUS = 1005, + /**< 1005 is a reserved value and MUST NOT be set as a status code in a + Close control frame by an endpoint. It is designated for use in + applications expecting a status code to indicate that no status + code was actually present. */ + LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, + /**< 1006 is a reserved value and MUST NOT be set as a status code in a + Close control frame by an endpoint. It is designated for use in + applications expecting a status code to indicate that the + connection was closed abnormally, e.g., without sending or + receiving a Close control frame. */ + LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, + /**< 1007 indicates that an endpoint is terminating the connection + because it has received data within a message that was not + consistent with the type of the message (e.g., non-UTF-8 [RFC3629] + data within a text message). */ + LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, + /**< 1008 indicates that an endpoint is terminating the connection + because it has received a message that violates its policy. This + is a generic status code that can be returned when there is no + other more suitable status code (e.g., 1003 or 1009) or if there + is a need to hide specific details about the policy. */ + LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, + /**< 1009 indicates that an endpoint is terminating the connection + because it has received a message that is too big for it to + process. */ + LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, + /**< 1010 indicates that an endpoint (client) is terminating the + connection because it has expected the server to negotiate one or + more extension, but the server didn't return them in the response + message of the WebSocket handshake. The list of extensions that + are needed SHOULD appear in the /reason/ part of the Close frame. + Note that this status code is not used by the server, because it + can fail the WebSocket handshake instead */ + LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, + /**< 1011 indicates that a server is terminating the connection because + it encountered an unexpected condition that prevented it from + fulfilling the request. */ + LWS_CLOSE_STATUS_TLS_FAILURE = 1015, + /**< 1015 is a reserved value and MUST NOT be set as a status code in a + Close control frame by an endpoint. It is designated for use in + applications expecting a status code to indicate that the + connection was closed due to a failure to perform a TLS handshake + (e.g., the server certificate can't be verified). */ + + /****** add new things just above ---^ ******/ + + LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, }; /** - * struct lws_plat_file_ops - Platform-specific file operations + * lws_close_reason - Set reason and aux data to send with Close packet + * If you are going to return nonzero from the callback + * requesting the connection to close, you can optionally + * call this to set the reason the peer will be told if + * possible. * - * These provide platform-agnostic ways to deal with filesystem access in the - * library and in the user code. - * - * @open: Open file (always binary access if plat supports it) - * filelen is filled on exit to be the length of the file - * flags should be set to O_RDONLY or O_RDWR - * @close: Close file - * @seek_cur: Seek from current position - * @read: Read fron file *amount is set on exit to amount read - * @write: Write to file *amount is set on exit as amount written + * \param wsi: The websocket connection to set the close reason on + * \param status: A valid close status from websocket standard + * \param buf: NULL or buffer containing up to 124 bytes of auxiliary data + * \param len: Length of data in \param buf to send */ -struct lws_plat_file_ops { - lws_filefd_type (*open)(struct lws *wsi, const char *filename, - unsigned long *filelen, int flags); - int (*close)(struct lws *wsi, lws_filefd_type fd); - unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd, - long offset_from_cur_pos); - int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, - unsigned char *buf, unsigned long len); - int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, - unsigned char *buf, unsigned long len); +LWS_VISIBLE LWS_EXTERN void +lws_close_reason(struct lws *wsi, enum lws_close_status status, + unsigned char *buf, size_t len); - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ +///@} + +struct lws; +struct lws_context; +/* needed even with extensions disabled for create context */ +struct lws_extension; + +/*! \defgroup usercb User Callback + * + * ##User protocol callback + * + * The protocol callback is the primary way lws interacts with + * user code. For one of a list of a few dozen reasons the callback gets + * called at some event to be handled. + * + * All of the events can be ignored, returning 0 is taken as "OK" and returning + * nonzero in most cases indicates that the connection should be closed. + */ +///@{ + + +/* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +/** enum lws_callback_reasons - reason you're getting a protocol callback */ +enum lws_callback_reasons { + LWS_CALLBACK_ESTABLISHED = 0, + /**< (VH) after the server completes a handshake with an incoming + * client. If you built the library with ssl support, in is a + * pointer to the ssl struct associated with the connection or NULL.*/ + LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, + /**< the request client connection has been unable to complete a + * handshake with the remote server. If in is non-NULL, you can + * find an error string of length len where it points to + * + * Diagnostic strings that may be returned include + * + * "getaddrinfo (ipv6) failed" + * "unknown address family" + * "getaddrinfo (ipv4) failed" + * "set socket opts failed" + * "insert wsi failed" + * "lws_ssl_client_connect1 failed" + * "lws_ssl_client_connect2 failed" + * "Peer hung up" + * "read failed" + * "HS: URI missing" + * "HS: Redirect code but no Location" + * "HS: URI did not parse" + * "HS: Redirect failed" + * "HS: Server did not return 200" + * "HS: OOM" + * "HS: disallowed by client filter" + * "HS: disallowed at ESTABLISHED" + * "HS: ACCEPT missing" + * "HS: ws upgrade response not 101" + * "HS: UPGRADE missing" + * "HS: Upgrade to something other than websocket" + * "HS: CONNECTION missing" + * "HS: UPGRADE malformed" + * "HS: PROTOCOL malformed" + * "HS: Cannot match protocol" + * "HS: EXT: list too big" + * "HS: EXT: failed setting defaults" + * "HS: EXT: failed parsing defaults" + * "HS: EXT: failed parsing options" + * "HS: EXT: Rejects server options" + * "HS: EXT: unknown ext" + * "HS: Accept hash wrong" + * "HS: Rejected by filter cb" + * "HS: OOM" + * "HS: SO_SNDBUF failed" + * "HS: Rejected at CLIENT_ESTABLISHED" + */ + LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, + /**< this is the last chance for the client user code to examine the + * http headers and decide to reject the connection. If the + * content in the headers is interesting to the + * client (url, etc) it needs to copy it out at + * this point since it will be destroyed before + * the CLIENT_ESTABLISHED call */ + LWS_CALLBACK_CLIENT_ESTABLISHED = 3, + /**< after your client connection completed + * a handshake with the remote server */ + LWS_CALLBACK_CLOSED = 4, + /**< when the websocket session ends */ + LWS_CALLBACK_CLOSED_HTTP = 5, + /**< when a HTTP (non-websocket) session ends */ + LWS_CALLBACK_RECEIVE = 6, + /**< data has appeared for this server endpoint from a + * remote client, it can be found at *in and is + * len bytes long */ + LWS_CALLBACK_RECEIVE_PONG = 7, + /**< servers receive PONG packets with this callback reason */ + LWS_CALLBACK_CLIENT_RECEIVE = 8, + /**< data has appeared from the server for the client connection, it + * can be found at *in and is len bytes long */ + LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, + /**< clients receive PONG packets with this callback reason */ + LWS_CALLBACK_CLIENT_WRITEABLE = 10, + /**< If you call lws_callback_on_writable() on a connection, you will + * get one of these callbacks coming when the connection socket + * is able to accept another write packet without blocking. + * If it already was able to take another packet without blocking, + * you'll get this callback at the next call to the service loop + * function. Notice that CLIENTs get LWS_CALLBACK_CLIENT_WRITEABLE + * and servers get LWS_CALLBACK_SERVER_WRITEABLE. */ + LWS_CALLBACK_SERVER_WRITEABLE = 11, + /**< See LWS_CALLBACK_CLIENT_WRITEABLE */ + LWS_CALLBACK_HTTP = 12, + /**< an http request has come from a client that is not + * asking to upgrade the connection to a websocket + * one. This is a chance to serve http content, + * for example, to send a script to the client + * which will then open the websockets connection. + * in points to the URI path requested and + * lws_serve_http_file() makes it very + * simple to send back a file to the client. + * Normally after sending the file you are done + * with the http connection, since the rest of the + * activity will come by websockets from the script + * that was delivered by http, so you will want to + * return 1; to close and free up the connection. */ + LWS_CALLBACK_HTTP_BODY = 13, + /**< the next len bytes data from the http + * request body HTTP connection is now available in in. */ + LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, + /**< the expected amount of http request body has been delivered */ + LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, + /**< a file requested to be sent down http link has completed. */ + LWS_CALLBACK_HTTP_WRITEABLE = 16, + /**< you can write more down the http protocol link now. */ + LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, + /**< called when a client connects to + * the server at network level; the connection is accepted but then + * passed to this callback to decide whether to hang up immediately + * or not, based on the client IP. in contains the connection + * socket's descriptor. Since the client connection information is + * not available yet, wsi still pointing to the main server socket. + * Return non-zero to terminate the connection before sending or + * receiving anything. Because this happens immediately after the + * network connection from the client, there's no websocket protocol + * selected yet so this callback is issued only to protocol 0. */ + LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, + /**< called when the request has + * been received and parsed from the client, but the response is + * not sent yet. Return non-zero to disallow the connection. + * user is a pointer to the connection user space allocation, + * in is the URI, eg, "/" + * In your handler you can use the public APIs + * lws_hdr_total_length() / lws_hdr_copy() to access all of the + * headers using the header enums lws_token_indexes from + * libwebsockets.h to check for and read the supported header + * presence and content before deciding to allow the http + * connection to proceed or to kill the connection. */ + LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, + /**< A new client just had + * been connected, accepted, and instantiated into the pool. This + * callback allows setting any relevant property to it. Because this + * happens immediately after the instantiation of a new client, + * there's no websocket protocol selected yet so this callback is + * issued only to protocol 0. Only wsi is defined, pointing to the + * new client, and the return value is ignored. */ + LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, + /**< called when the handshake has + * been received and parsed from the client, but the response is + * not sent yet. Return non-zero to disallow the connection. + * user is a pointer to the connection user space allocation, + * in is the requested protocol name + * In your handler you can use the public APIs + * lws_hdr_total_length() / lws_hdr_copy() to access all of the + * headers using the header enums lws_token_indexes from + * libwebsockets.h to check for and read the supported header + * presence and content before deciding to allow the handshake + * to proceed or to kill the connection. */ + LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, + /**< if configured for + * including OpenSSL support, this callback allows your user code + * to perform extra SSL_CTX_load_verify_locations() or similar + * calls to direct OpenSSL where to find certificates the client + * can use to confirm the remote server identity. user is the + * OpenSSL SSL_CTX* */ + LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, + /**< if configured for + * including OpenSSL support, this callback allows your user code + * to load extra certifcates into the server which allow it to + * verify the validity of certificates returned by clients. user + * is the server's OpenSSL SSL_CTX* */ + LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, + /**< if the libwebsockets vhost was created with the option + * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this + * callback is generated during OpenSSL verification of the cert + * sent from the client. It is sent to protocol[0] callback as + * no protocol has been negotiated on the connection yet. + * Notice that the libwebsockets context and wsi are both NULL + * during this callback. See + * http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html + * to understand more detail about the OpenSSL callback that + * generates this libwebsockets callback and the meanings of the + * arguments passed. In this callback, user is the x509_ctx, + * in is the ssl pointer and len is preverify_ok + * Notice that this callback maintains libwebsocket return + * conventions, return 0 to mean the cert is OK or 1 to fail it. + * This also means that if you don't handle this callback then + * the default callback action of returning 0 allows the client + * certificates. */ + LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, + /**< this callback happens + * when a client handshake is being compiled. user is NULL, + * in is a char **, it's pointing to a char * which holds the + * next location in the header buffer where you can add + * headers, and len is the remaining space in the header buffer, + * which is typically some hundreds of bytes. So, to add a canned + * cookie, your handler code might look similar to: + * + * char **p = (char **)in; + * + * if (len < 100) + * return 1; + * + * *p += sprintf(*p, "Cookie: a=b\x0d\x0a"); + * + * return 0; + * + * Notice if you add anything, you just have to take care about + * the CRLF on the line you added. Obviously this callback is + * optional, if you don't handle it everything is fine. + * + * Notice the callback is coming to protocols[0] all the time, + * because there is no specific protocol negotiated yet. */ + LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, + /**< When the server handshake code + * sees that it does support a requested extension, before + * accepting the extension by additing to the list sent back to + * the client it gives this callback just to check that it's okay + * to use that extension. It calls back to the requested protocol + * and with in being the extension name, len is 0 and user is + * valid. Note though at this time the ESTABLISHED callback hasn't + * happened yet so if you initialize user content there, user + * content during this callback might not be useful for anything. + * Notice this callback comes to protocols[0]. */ + LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, + /**< When a client + * connection is being prepared to start a handshake to a server, + * each supported extension is checked with protocols[0] callback + * with this reason, giving the user code a chance to suppress the + * claim to support that extension by returning non-zero. If + * unhandled, by default 0 will be returned and the extension + * support included in the header to the server. Notice this + * callback comes to protocols[0]. */ + LWS_CALLBACK_PROTOCOL_INIT = 27, + /**< One-time call per protocol, per-vhost using it, so it can + * do initial setup / allocations etc */ + LWS_CALLBACK_PROTOCOL_DESTROY = 28, + /**< One-time call per protocol, per-vhost using it, indicating + * this protocol won't get used at all after this callback, the + * vhost is getting destroyed. Take the opportunity to + * deallocate everything that was allocated by the protocol. */ + LWS_CALLBACK_WSI_CREATE = 29, + /**< outermost (earliest) wsi create notification to protocols[0] */ + LWS_CALLBACK_WSI_DESTROY = 30, + /**< outermost (latest) wsi destroy notification to protocols[0] */ + LWS_CALLBACK_GET_THREAD_ID = 31, + /**< lws can accept callback when writable requests from other + * threads, if you implement this callback and return an opaque + * current thread ID integer. */ + + /* external poll() management support */ + LWS_CALLBACK_ADD_POLL_FD = 32, + /**< lws normally deals with its poll() or other event loop + * internally, but in the case you are integrating with another + * server you will need to have lws sockets share a + * polling array with the other server. This and the other + * POLL_FD related callbacks let you put your specialized + * poll array interface code in the callback for protocol 0, the + * first protocol you support, usually the HTTP protocol in the + * serving case. + * This callback happens when a socket needs to be + * added to the polling loop: in points to a struct + * lws_pollargs; the fd member of the struct is the file + * descriptor, and events contains the active events + * + * If you are using the internal lws polling / event loop + * you can just ignore these callbacks. */ + LWS_CALLBACK_DEL_POLL_FD = 33, + /**< This callback happens when a socket descriptor + * needs to be removed from an external polling array. in is + * again the struct lws_pollargs containing the fd member + * to be removed. If you are using the internal polling + * loop, you can just ignore it. */ + LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, + /**< This callback happens when lws wants to modify the events for + * a connection. + * in is the struct lws_pollargs with the fd to change. + * The new event mask is in events member and the old mask is in + * the prev_events member. + * If you are using the internal polling loop, you can just ignore + * it. */ + LWS_CALLBACK_LOCK_POLL = 35, + /**< These allow the external poll changes driven + * by lws to participate in an external thread locking + * scheme around the changes, so the whole thing is threadsafe. + * These are called around three activities in the library, + * - inserting a new wsi in the wsi / fd table (len=1) + * - deleting a wsi from the wsi / fd table (len=1) + * - changing a wsi's POLLIN/OUT state (len=0) + * Locking and unlocking external synchronization objects when + * len == 1 allows external threads to be synchronized against + * wsi lifecycle changes if it acquires the same lock for the + * duration of wsi dereference from the other thread context. */ + LWS_CALLBACK_UNLOCK_POLL = 36, + /**< See LWS_CALLBACK_LOCK_POLL, ignore if using lws internal poll */ + + LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY = 37, + /**< if configured for including OpenSSL support but no private key + * file has been specified (ssl_private_key_filepath is NULL), this is + * called to allow the user to set the private key directly via + * libopenssl and perform further operations if required; this might be + * useful in situations where the private key is not directly accessible + * by the OS, for example if it is stored on a smartcard. + * user is the server's OpenSSL SSL_CTX* */ + LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, + /**< The peer has sent an unsolicited Close WS packet. in and + * len are the optional close code (first 2 bytes, network + * order) and the optional additional information which is not + * defined in the standard, and may be a string or non-human- readable data. + * If you return 0 lws will echo the close and then close the + * connection. If you return nonzero lws will just close the + * connection. */ + + LWS_CALLBACK_WS_EXT_DEFAULTS = 39, + /**< */ + + LWS_CALLBACK_CGI = 40, + /**< */ + LWS_CALLBACK_CGI_TERMINATED = 41, + /**< */ + LWS_CALLBACK_CGI_STDIN_DATA = 42, + /**< */ + LWS_CALLBACK_CGI_STDIN_COMPLETED = 43, + /**< */ + LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, + /**< */ + LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, + /**< */ + LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, + /**< */ + LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, + /**< */ + LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48, + /**< */ + LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49, + /**< */ + LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50, + /**< */ + LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51, + /**< */ + LWS_CALLBACK_PROCESS_HTML = 52, + /**< */ + LWS_CALLBACK_ADD_HEADERS = 53, + /**< */ + LWS_CALLBACK_SESSION_INFO = 54, + /**< */ + + LWS_CALLBACK_GS_EVENT = 55, + /**< */ + LWS_CALLBACK_HTTP_PMO = 56, + /**< per-mount options for this connection, called before + * the normal LWS_CALLBACK_HTTP when the mount has per-mount + * options + */ + LWS_CALLBACK_CLIENT_HTTP_WRITEABLE = 57, + /**< when doing an HTTP type client connection, you can call + * lws_client_http_body_pending(wsi, 1) from + * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER to get these callbacks + * sending the HTTP headers. + * + * From this callback, when you have sent everything, you should let + * lws know by calling lws_client_http_body_pending(wsi, 0) + */ + + /****** add new things just above ---^ ******/ + + LWS_CALLBACK_USER = 1000, + /**< user code can use any including / above without fear of clashes */ }; + + +/** + * typedef lws_callback_function() - User server actions + * \param wsi: Opaque websocket instance pointer + * \param reason: The reason for the call + * \param user: Pointer to per-session user data allocated by library + * \param in: Pointer used for some callback reasons + * \param len: Length set for some callback reasons + * + * This callback is the way the user controls what is served. All the + * protocol detail is hidden and handled by the library. + * + * For each connection / session there is user data allocated that is + * pointed to by "user". You set the size of this user data area when + * the library is initialized with lws_create_server. + */ +typedef int +lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, + void *user, void *in, size_t len); +///@} + +/*! \defgroup extensions + * + * ##Extension releated functions + * + * Ws defines optional extensions, lws provides the ability to implement these + * in user code if so desired. + * + * We provide one extensions permessage-deflate. + */ +///@{ + /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. @@ -479,59 +1086,1422 @@ enum lws_extension_callback_reasons { LWS_EXT_CB_OPTION_DEFAULT = 23, LWS_EXT_CB_OPTION_SET = 24, LWS_EXT_CB_OPTION_CONFIRM = 25, + LWS_EXT_CB_NAMED_OPTION_SET = 26, /****** add new things just above ---^ ******/ }; +/** enum lws_ext_options_types */ +enum lws_ext_options_types { + EXTARG_NONE, /**< does not take an argument */ + EXTARG_DEC, /**< requires a decimal argument */ + EXTARG_OPT_DEC /**< may have an optional decimal argument */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** struct lws_ext_options - Option arguments to the extension. These are + * used in the negotiation at ws upgrade time. + * The helper function lws_ext_parse_options() + * uses these to generate callbacks */ +struct lws_ext_options { + const char *name; /**< Option name, eg, "server_no_context_takeover" */ + enum lws_ext_options_types type; /**< What kind of args the option can take */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** struct lws_ext_option_arg */ +struct lws_ext_option_arg { + const char *option_name; /**< may be NULL, option_index used then */ + int option_index; /**< argument ordinal to use if option_name missing */ + const char *start; /**< value */ + int len; /**< length of value */ +}; + +/** + * typedef lws_extension_callback_function() - Hooks to allow extensions to operate + * \param context: Websockets context + * \param ext: This extension + * \param wsi: Opaque websocket instance pointer + * \param reason: The reason for the call + * \param user: Pointer to ptr to per-session user data allocated by library + * \param in: Pointer used for some callback reasons + * \param len: Length set for some callback reasons + * + * Each extension that is active on a particular connection receives + * callbacks during the connection lifetime to allow the extension to + * operate on websocket data and manage itself. + * + * Libwebsockets takes care of allocating and freeing "user" memory for + * each active extension on each connection. That is what is pointed to + * by the user parameter. + * + * LWS_EXT_CB_CONSTRUCT: called when the server has decided to + * select this extension from the list provided by the client, + * just before the server will send back the handshake accepting + * the connection with this extension active. This gives the + * extension a chance to initialize its connection context found + * in user. + * + * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT + * but called when client is instantiating this extension. Some + * extensions will work the same on client and server side and then + * you can just merge handlers for both CONSTRUCTS. + * + * LWS_EXT_CB_DESTROY: called when the connection the extension was + * being used on is about to be closed and deallocated. It's the + * last chance for the extension to deallocate anything it has + * allocated in the user data (pointed to by user) before the + * user data is deleted. This same callback is used whether you + * are in client or server instantiation context. + * + * LWS_EXT_CB_PACKET_RX_PREPARSE: when this extension was active on + * a connection, and a packet of data arrived at the connection, + * it is passed to this callback to give the extension a chance to + * change the data, eg, decompress it. user is pointing to the + * extension's private connection context data, in is pointing + * to an lws_tokens struct, it consists of a char * pointer called + * token, and an int called token_len. At entry, these are + * set to point to the received buffer and set to the content + * length. If the extension will grow the content, it should use + * a new buffer allocated in its private user context data and + * set the pointed-to lws_tokens members to point to its buffer. + * + * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as + * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the + * extension a chance to change websocket data just before it will + * be sent out. Using the same lws_token pointer scheme in in, + * the extension can change the buffer and the length to be + * transmitted how it likes. Again if it wants to grow the + * buffer safely, it should copy the data into its own buffer and + * set the lws_tokens token pointer to it. + * + * LWS_EXT_CB_ARGS_VALIDATE: + */ +typedef int +lws_extension_callback_function(struct lws_context *context, + const struct lws_extension *ext, struct lws *wsi, + enum lws_extension_callback_reasons reason, + void *user, void *in, size_t len); + +/** struct lws_extension - An extension we support */ +struct lws_extension { + const char *name; /**< Formal extension name, eg, "permessage-deflate" */ + lws_extension_callback_function *callback; /**< Service callback */ + const char *client_offer; /**< String containing exts and options client offers */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** + * lws_set_extension_option(): set extension option if possible + * + * \param wsi: websocket connection + * \param ext_name: name of ext, like "permessage-deflate" + * \param opt_name: name of option, like "rx_buf_size" + * \param opt_val: value to set option to + */ +LWS_VISIBLE LWS_EXTERN int +lws_set_extension_option(struct lws *wsi, const char *ext_name, + const char *opt_name, const char *opt_val); + +#ifndef LWS_NO_EXTENSIONS +/* lws_get_internal_extensions() - DEPRECATED + * + * \Deprecated There is no longer a set internal extensions table. The table is provided + * by user code along with application-specific settings. See the test + * client and server for how to do. + */ +static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension * +lws_get_internal_extensions() { return NULL; } + +/** + * lws_ext_parse_options() - deal with parsing negotiated extension options + * + * \param ext: related extension struct + * \param wsi: websocket connection + * \param ext_user: per-connection extension private data + * \param opts: list of supported options + * \param o: option string to parse + * \param len: length + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, + void *ext_user, const struct lws_ext_options *opts, + const char *o, int len); +#endif + +/** lws_extension_callback_pm_deflate() - extension for RFC7692 + * + * \param context: lws context + * \param ext: related lws_extension struct + * \param wsi: websocket connection + * \param reason: incoming callback reason + * \param user: per-connection extension private data + * \param in: pointer parameter + * \param len: length parameter + * + * Built-in callback implementing RFC7692 permessage-deflate + */ +LWS_EXTERN +int lws_extension_callback_pm_deflate( + struct lws_context *context, const struct lws_extension *ext, + struct lws *wsi, enum lws_extension_callback_reasons reason, + void *user, void *in, size_t len); + +/* + * The internal exts are part of the public abi + * If we add more extensions, publish the callback here ------v + */ +///@} + +/*! \defgroup Protocols-and-Plugins Protocols and Plugins + * \ingroup lwsapi + * + * ##Protocol and protocol plugin -related apis + * + * Protocols bind ws protocol names to a custom callback specific to that + * protocol implementaion. + * + * A list of protocols can be passed in at context creation time, but it is + * also legal to leave that NULL and add the protocols and their callback code + * using plugins. + * + * Plugins are much preferable compared to cut and pasting code into an + * application each time, since they can be used standalone. + */ +///@{ +/** struct lws_protocols - List of protocols and handlers client or server + * supports. */ + +struct lws_protocols { + const char *name; + /**< Protocol name that must match the one given in the client + * Javascript new WebSocket(url, 'protocol') name. */ + lws_callback_function *callback; + /**< The service callback used for this protocol. It allows the + * service action for an entire protocol to be encapsulated in + * the protocol-specific callback */ + size_t per_session_data_size; + /**< Each new connection using this protocol gets + * this much memory allocated on connection establishment and + * freed on connection takedown. A pointer to this per-connection + * allocation is passed into the callback in the 'user' parameter */ + size_t rx_buffer_size; + /**< lws allocates this much space for rx data and informs callback + * when something came. Due to rx flow control, the callback may not + * be able to consume it all without having to return to the event + * loop. That is supported in lws. + * + * This also controls how much may be sent at once at the moment, + * although this is likely to change. + */ + unsigned int id; + /**< ignored by lws, but useful to contain user information bound + * to the selected protocol. For example if this protocol was + * called "myprotocol-v2", you might set id to 2, and the user + * code that acts differently according to the version can do so by + * switch (wsi->protocol->id), user code might use some bits as + * capability flags based on selected protocol version, etc. */ + void *user; /**< ignored by lws, but user code can pass a pointer + here it can later access from the protocol callback */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +struct lws_vhost; + +/** + * lws_vhost_name_to_protocol() - get vhost's protocol object from its name + * + * \param vh: vhost to search + * \param name: protocol name + * + * Returns NULL or a pointer to the vhost's protocol of the requested name + */ +LWS_VISIBLE LWS_EXTERN const struct lws_protocols * +lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name); + +/** + * lws_get_protocol() - Returns a protocol pointer from a websocket + * connection. + * \param wsi: pointer to struct websocket you want to know the protocol of + * + * + * Some apis can act on all live connections of a given protocol, + * this is how you can get a pointer to the active protocol if needed. + */ +LWS_VISIBLE LWS_EXTERN const struct lws_protocols * +lws_get_protocol(struct lws *wsi); + +/** lws_protocol_get() - deprecated: use lws_get_protocol */ +LWS_VISIBLE LWS_EXTERN const struct lws_protocols * +lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED; + +/** + * lws_protocol_vh_priv_zalloc() - Allocate and zero down a protocol's per-vhost + * storage + * \param vhost: vhost the instance is related to + * \param prot: protocol the instance is related to + * \param size: bytes to allocate + * + * Protocols often find it useful to allocate a per-vhost struct, this is a + * helper to be called in the per-vhost init LWS_CALLBACK_PROTOCOL_INIT + */ +LWS_VISIBLE LWS_EXTERN void * +lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, + int size); + +/** + * lws_protocol_vh_priv_get() - retreive a protocol's per-vhost storage + * + * \param vhost: vhost the instance is related to + * \param prot: protocol the instance is related to + * + * Recover a pointer to the allocated per-vhost storage for the protocol created + * by lws_protocol_vh_priv_zalloc() earlier + */ +LWS_VISIBLE LWS_EXTERN void * +lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot); + +/** + * lws_finalize_startup() - drop initial process privileges + * + * \param context: lws context + * + * This is called after the end of the vhost protocol initializations, but + * you may choose to call it earlier + */ +LWS_VISIBLE LWS_EXTERN int +lws_finalize_startup(struct lws_context *context); + +#ifdef LWS_WITH_PLUGINS + +/* PLUGINS implies LIBUV */ + +#define LWS_PLUGIN_API_MAGIC 180 + +/** struct lws_plugin_capability - how a plugin introduces itself to lws */ +struct lws_plugin_capability { + unsigned int api_magic; /**< caller fills this in, plugin fills rest */ + const struct lws_protocols *protocols; /**< array of supported protocols provided by plugin */ + int count_protocols; /**< how many protocols */ + const struct lws_extension *extensions; /**< array of extensions provided by plugin */ + int count_extensions; /**< how many extensions */ +}; + +typedef int (*lws_plugin_init_func)(struct lws_context *, + struct lws_plugin_capability *); +typedef int (*lws_plugin_destroy_func)(struct lws_context *); + +/** struct lws_plugin */ +struct lws_plugin { + struct lws_plugin *list; /**< linked list */ +#if (UV_VERSION_MAJOR > 0) + uv_lib_t lib; /**< shared library pointer */ +#else + void *l; /**< so we can compile on ancient libuv */ +#endif + char name[64]; /**< name of the plugin */ + struct lws_plugin_capability caps; /**< plugin capabilities */ +}; + +#endif + +///@} + + +/*! \defgroup generic-sessions plugin: generic-sessions + * \ingroup Protocols-and-Plugins + * + * ##Plugin Generic-sessions related + * + * generic-sessions plugin provides a reusable, generic session and login / + * register / forgot password framework including email verification. + */ +///@{ + +#define LWSGS_EMAIL_CONTENT_SIZE 16384 +/**< Maximum size of email we might send */ + +/* SHA-1 binary and hexified versions */ +/** typedef struct lwsgw_hash_bin */ +typedef struct { unsigned char bin[20]; /**< binary representation of hash */} lwsgw_hash_bin; +/** typedef struct lwsgw_hash */ +typedef struct { char id[41]; /**< ascii hex representation of hash */ } lwsgw_hash; + +/** enum lwsgs_auth_bits */ +enum lwsgs_auth_bits { + LWSGS_AUTH_LOGGED_IN = 1, /**< user is logged in as somebody */ + LWSGS_AUTH_ADMIN = 2, /**< logged in as the admin user */ + LWSGS_AUTH_VERIFIED = 4, /**< user has verified his email */ + LWSGS_AUTH_FORGOT_FLOW = 8, /**< he just completed "forgot password" flow */ +}; + +/** struct lws_session_info - information about user session status */ +struct lws_session_info { + char username[32]; /**< username logged in as, or empty string */ + char email[100]; /**< email address associated with login, or empty string */ + char ip[72]; /**< ip address session was started from */ + unsigned int mask; /**< access rights mask associated with session + * see enum lwsgs_auth_bits */ + char session[42]; /**< session id string, usable as opaque uid when not logged in */ +}; + +/** enum lws_gs_event */ +enum lws_gs_event { + LWSGSE_CREATED, /**< a new user was created */ + LWSGSE_DELETED /**< an existing user was deleted */ +}; + +/** struct lws_gs_event_args */ +struct lws_gs_event_args { + enum lws_gs_event event; /**< which event happened */ + const char *username; /**< which username the event happened to */ + const char *email; /**< the email address of that user */ +}; + +///@} + + +/*! \defgroup context-and-vhost + * \ingroup lwsapi + * + * ##Context and Vhost releated functions + * + * LWS requires that there is one context, in which you may define multiple + * vhosts. Each vhost is a virtual host, with either its own listen port + * or sharing an existing one. Each vhost has its own SSL context that can + * be set up individually or left disabled. + * + * If you don't care about multiple "site" support, you can ignore it and + * lws will create a single default vhost at context creation time. + */ +///@{ + /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ -enum lws_write_protocol { - LWS_WRITE_TEXT = 0, - LWS_WRITE_BINARY = 1, - LWS_WRITE_CONTINUATION = 2, - LWS_WRITE_HTTP = 3, - /* special 04+ opcodes */ - - /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ - LWS_WRITE_PING = 5, - LWS_WRITE_PONG = 6, - - /* Same as write_http but we know this write ends the transaction */ - LWS_WRITE_HTTP_FINAL = 7, - - /* HTTP2 */ - - LWS_WRITE_HTTP_HEADERS = 8, +/** enum lws_context_options - context and vhost options */ +enum lws_context_options { + LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = (1 << 1) | + (1 << 12), + /**< (VH) Don't allow the connection unless the client has a + * client cert that we recognize; provides + * LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT */ + LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = (1 << 2), + /**< (CTX) Don't try to get the server's hostname */ + LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = (1 << 3) | + (1 << 12), + /**< (VH) Allow non-SSL (plaintext) connections on the same + * port as SSL is listening... undermines the security of SSL; + * provides LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT */ + LWS_SERVER_OPTION_LIBEV = (1 << 4), + /**< (CTX) Use libev event loop */ + LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5), + /**< (VH) Disable IPV6 support */ + LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = (1 << 6), + /**< (VH) Don't load OS CA certs, you will need to load your + * own CA cert(s) */ + LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = (1 << 7), + /**< (VH) Accept connections with no valid Cert (eg, selfsigned) */ + LWS_SERVER_OPTION_VALIDATE_UTF8 = (1 << 8), + /**< (VH) Check UT-8 correctness */ + LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) | + (1 << 12), + /**< (VH) initialize ECDH ciphers */ + LWS_SERVER_OPTION_LIBUV = (1 << 10), + /**< (CTX) Use libuv event loop */ + LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS = (1 << 11) | + (1 << 12), + /**< (VH) Use http redirect to force http to https + * (deprecated: use mount redirection) */ + LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT = (1 << 12), + /**< (CTX) Initialize the SSL library at all */ + LWS_SERVER_OPTION_EXPLICIT_VHOSTS = (1 << 13), + /**< (CTX) Only create the context when calling context + * create api, implies user code will create its own vhosts */ + LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14), + /**< (VH) Use Unix socket */ + LWS_SERVER_OPTION_STS = (1 << 15), + /**< (VH) Send Strict Transport Security header, making + * clients subsequently go to https even if user asked for http */ + LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY = (1 << 16), + /**< (VH) Enable LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE to take effect */ + LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE = (1 << 17), + /**< (VH) if set, only ipv6 allowed on the vhost */ + LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN = (1 << 18), + /**< (CTX) Libuv only: Do not spin on SIGSEGV / SIGFPE. A segfault + * normally makes the lib spin so you can attach a debugger to it + * even if it happened without a debugger in place. You can disable + * that by giving this option. + */ /****** add new things just above ---^ ******/ - - /* flags */ - - LWS_WRITE_NO_FIN = 0x40, - /* - * client packet payload goes out on wire unmunged - * only useful for security tests since normal servers cannot - * decode the content if used - */ - LWS_WRITE_CLIENT_IGNORE_XOR_MASK = 0x80 }; -/* +#define lws_check_opt(c, f) (((c) & (f)) == (f)) + +/** struct lws_context_creation_info - parameters to create context and /or vhost with + * + * This is also used to create vhosts.... if LWS_SERVER_OPTION_EXPLICIT_VHOSTS + * is not given, then for backwards compatibility one vhost is created at + * context-creation time using the info from this struct. + * + * If LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, then no vhosts are created + * at the same time as the context, they are expected to be created afterwards. + */ +struct lws_context_creation_info { + int port; + /**< VHOST: Port to listen on... you can use CONTEXT_PORT_NO_LISTEN to + * suppress listening on any port, that's what you want if you are + * not running a websocket server at all but just using it as a + * client */ + const char *iface; + /**< VHOST: NULL to bind the listen socket to all interfaces, or the + * interface name, eg, "eth2" + * If options specifies LWS_SERVER_OPTION_UNIX_SOCK, this member is + * the pathname of a UNIX domain socket. you can use the UNIX domain + * sockets in abstract namespace, by prepending an at symbol to the + * socket name. */ + const struct lws_protocols *protocols; + /**< VHOST: Array of structures listing supported protocols and a protocol- + * specific callback for each one. The list is ended with an + * entry that has a NULL callback pointer. */ + const struct lws_extension *extensions; + /**< VHOST: NULL or array of lws_extension structs listing the + * extensions this context supports. */ + const struct lws_token_limits *token_limits; + /**< CONTEXT: NULL or struct lws_token_limits pointer which is initialized + * with a token length limit for each possible WSI_TOKEN_ */ + const char *ssl_private_key_password; + /**< VHOST: NULL or the passphrase needed for the private key */ + const char *ssl_cert_filepath; + /**< VHOST: If libwebsockets was compiled to use ssl, and you want + * to listen using SSL, set to the filepath to fetch the + * server cert from, otherwise NULL for unencrypted */ + const char *ssl_private_key_filepath; + /**< VHOST: filepath to private key if wanting SSL mode; + * if this is set to NULL but sll_cert_filepath is set, the + * OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY callback is called + * to allow setting of the private key directly via openSSL + * library calls */ + const char *ssl_ca_filepath; + /**< VHOST: CA certificate filepath or NULL */ + const char *ssl_cipher_list; + /**< VHOST: List of valid ciphers to use (eg, + * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" + * or you can leave it as NULL to get "DEFAULT" */ + const char *http_proxy_address; + /**< VHOST: If non-NULL, attempts to proxy via the given address. + * If proxy auth is required, use format "username:password\@server:port" */ + unsigned int http_proxy_port; + /**< VHOST: If http_proxy_address was non-NULL, uses this port */ + int gid; + /**< CONTEXT: group id to change to after setting listen socket, or -1. */ + int uid; + /**< CONTEXT: user id to change to after setting listen socket, or -1. */ + unsigned int options; + /**< VHOST + CONTEXT: 0, or LWS_SERVER_OPTION_... bitfields */ + void *user; + /**< CONTEXT: optional user pointer that can be recovered via the context + * pointer using lws_context_user */ + int ka_time; + /**< CONTEXT: 0 for no TCP keepalive, otherwise apply this keepalive + * timeout to all libwebsocket sockets, client or server */ + int ka_probes; + /**< CONTEXT: if ka_time was nonzero, after the timeout expires how many + * times to try to get a response from the peer before giving up + * and killing the connection */ + int ka_interval; + /**< CONTEXT: if ka_time was nonzero, how long to wait before each ka_probes + * attempt */ +#ifdef LWS_OPENSSL_SUPPORT + SSL_CTX *provided_client_ssl_ctx; + /**< CONTEXT: If non-null, swap out libwebsockets ssl + * implementation for the one provided by provided_ssl_ctx. + * Libwebsockets no longer is responsible for freeing the context + * if this option is selected. */ +#else /* maintain structure layout either way */ + void *provided_client_ssl_ctx; /**< dummy if ssl disabled */ +#endif + + short max_http_header_data; + /**< CONTEXT: The max amount of header payload that can be handled + * in an http request (unrecognized header payload is dropped) */ + short max_http_header_pool; + /**< CONTEXT: The max number of connections with http headers that + * can be processed simultaneously (the corresponding memory is + * allocated for the lifetime of the context). If the pool is + * busy new incoming connections must wait for accept until one + * becomes free. */ + + unsigned int count_threads; + /**< CONTEXT: how many contexts to create in an array, 0 = 1 */ + unsigned int fd_limit_per_thread; + /**< CONTEXT: nonzero means restrict each service thread to this + * many fds, 0 means the default which is divide the process fd + * limit by the number of threads. */ + unsigned int timeout_secs; + /**< VHOST: various processes involving network roundtrips in the + * library are protected from hanging forever by timeouts. If + * nonzero, this member lets you set the timeout used in seconds. + * Otherwise a default timeout is used. */ + const char *ecdh_curve; + /**< VHOST: if NULL, defaults to initializing server with "prime256v1" */ + const char *vhost_name; + /**< VHOST: name of vhost, must match external DNS name used to + * access the site, like "warmcat.com" as it's used to match + * Host: header and / or SNI name for SSL. */ + const char * const *plugin_dirs; + /**< CONTEXT: NULL, or NULL-terminated array of directories to + * scan for lws protocol plugins at context creation time */ + const struct lws_protocol_vhost_options *pvo; + /**< VHOST: pointer to optional linked list of per-vhost + * options made accessible to protocols */ + int keepalive_timeout; + /**< VHOST: (default = 0 = 60s) seconds to allow remote + * client to hold on to an idle HTTP/1.1 connection */ + const char *log_filepath; + /**< VHOST: filepath to append logs to... this is opened before + * any dropping of initial privileges */ + const struct lws_http_mount *mounts; + /**< VHOST: optional linked list of mounts for this vhost */ + const char *server_string; + /**< CONTEXT: string used in HTTP headers to identify server + * software, if NULL, "libwebsockets". */ + unsigned int pt_serv_buf_size; + /**< CONTEXT: 0 = default of 4096. This buffer is used by + * various service related features including file serving, it + * defines the max chunk of file that can be sent at once. + * At the risk of lws having to buffer failed large sends, it + * can be increased to, eg, 128KiB to improve throughput. */ + unsigned int max_http_header_data2; + /**< CONTEXT: if max_http_header_data is 0 and this + * is nonzero, this will be used in place of the default. It's + * like this for compatibility with the original short version, + * this is unsigned int length. */ + long ssl_options_set; + /**< VHOST: Any bits set here will be set as SSL options */ + long ssl_options_clear; + /**< VHOST: Any bits set here will be cleared as SSL options */ + unsigned short ws_ping_pong_interval; + /**< CONTEXT: 0 for none, else interval in seconds between sending + * PINGs on idle websocket connections. When the PING is sent, + * the PONG must come within the normal timeout_secs timeout period + * or the connection will be dropped. + * Any RX or TX traffic on the connection restarts the interval timer, + * so a connection which always sends or receives something at intervals + * less than the interval given here will never send PINGs / expect + * PONGs. Conversely as soon as the ws connection is established, an + * idle connection will do the PING / PONG roundtrip as soon as + * ws_ping_pong_interval seconds has passed without traffic + */ + const struct lws_protocol_vhost_options *headers; + /**< VHOST: pointer to optional linked list of per-vhost + * canned headers that are added to server responses */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility + * + * The below is to ensure later library versions with new + * members added above will see 0 (default) even if the app + * was not built against the newer headers. + */ + + void *_unused[8]; /**< dummy */ +}; + +/** + * lws_create_context() - Create the websocket handler + * \param info: pointer to struct with parameters + * + * This function creates the listening socket (if serving) and takes care + * of all initialization in one step. + * + * If option LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, no vhost is + * created; you're expected to create your own vhosts afterwards using + * lws_create_vhost(). Otherwise a vhost named "default" is also created + * using the information in the vhost-related members, for compatibility. + * + * After initialization, it returns a struct lws_context * that + * represents this server. After calling, user code needs to take care + * of calling lws_service() with the context pointer to get the + * server's sockets serviced. This must be done in the same process + * context as the initialization call. + * + * The protocol callback functions are called for a handful of events + * including http requests coming in, websocket connections becoming + * established, and data arriving; it's also called periodically to allow + * async transmission. + * + * HTTP requests are sent always to the FIRST protocol in protocol, since + * at that time websocket protocol has not been negotiated. Other + * protocols after the first one never see any HTTP callack activity. + * + * The server created is a simple http server by default; part of the + * websocket standard is upgrading this http connection to a websocket one. + * + * This allows the same server to provide files like scripts and favicon / + * images or whatever over http and dynamic data over websockets all in + * one place; they're all handled in the user callback. + */ +LWS_VISIBLE LWS_EXTERN struct lws_context * +lws_create_context(struct lws_context_creation_info *info); + +/** + * lws_context_destroy() - Destroy the websocket context + * \param context: Websocket context + * + * This function closes any active connections and then frees the + * context. After calling this, any further use of the context is + * undefined. + */ +LWS_VISIBLE LWS_EXTERN void +lws_context_destroy(struct lws_context *context); + +/** + * lws_set_proxy() - Setups proxy to lws_context. + * \param vhost: pointer to struct lws_vhost you want set proxy for + * \param proxy: pointer to c string containing proxy in format address:port + * + * Returns 0 if proxy string was parsed and proxy was setup. + * Returns -1 if proxy is NULL or has incorrect format. + * + * This is only required if your OS does not provide the http_proxy + * environment variable (eg, OSX) + * + * IMPORTANT! You should call this function right after creation of the + * lws_context and before call to connect. If you call this + * function after connect behavior is undefined. + * This function will override proxy settings made on lws_context + * creation with genenv() call. + */ +LWS_VISIBLE LWS_EXTERN int +lws_set_proxy(struct lws_vhost *vhost, const char *proxy); + + +struct lws_vhost; + +/** + * lws_create_vhost() - Create a vhost (virtual server context) + * \param context: pointer to result of lws_create_context() + * \param info: pointer to struct with parameters + * + * This function creates a virtual server (vhost) using the vhost-related + * members of the info struct. You can create many vhosts inside one context + * if you created the context with the option LWS_SERVER_OPTION_EXPLICIT_VHOSTS + */ +LWS_EXTERN LWS_VISIBLE struct lws_vhost * +lws_create_vhost(struct lws_context *context, + struct lws_context_creation_info *info); + +/** + * lwsws_get_config_globals() - Parse a JSON server config file + * \param info: pointer to struct with parameters + * \param d: filepath of the config file + * \param config_strings: storage for the config strings extracted from JSON, + * the pointer is incremented as strings are stored + * \param len: pointer to the remaining length left in config_strings + * the value is decremented as strings are stored + * + * This function prepares a n lws_context_creation_info struct with global + * settings from a file d. + * + * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled + */ +LWS_VISIBLE LWS_EXTERN int +lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, + char **config_strings, int *len); + +/** + * lwsws_get_config_vhosts() - Create vhosts from a JSON server config file + * \param context: pointer to result of lws_create_context() + * \param info: pointer to struct with parameters + * \param d: filepath of the config file + * \param config_strings: storage for the config strings extracted from JSON, + * the pointer is incremented as strings are stored + * \param len: pointer to the remaining length left in config_strings + * the value is decremented as strings are stored + * + * This function creates vhosts into a context according to the settings in + *JSON files found in directory d. + * + * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled + */ +LWS_VISIBLE LWS_EXTERN int +lwsws_get_config_vhosts(struct lws_context *context, + struct lws_context_creation_info *info, const char *d, + char **config_strings, int *len); + +/** lws_vhost_get() - \deprecated deprecated: use lws_get_vhost() */ +LWS_VISIBLE LWS_EXTERN struct lws_vhost * +lws_vhost_get(struct lws *wsi) LWS_WARN_DEPRECATED; + +/** + * lws_get_vhost() - return the vhost a wsi belongs to + * + * \param wsi: which connection + */ +LWS_VISIBLE LWS_EXTERN struct lws_vhost * +lws_get_vhost(struct lws *wsi); + +/** + * lws_json_dump_vhost() - describe vhost state and stats in JSON + * + * \param vh: the vhost + * \param buf: buffer to fill with JSON + * \param len: max length of buf + */ +LWS_VISIBLE LWS_EXTERN int +lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len); + +/** + * lws_json_dump_context() - describe context state and stats in JSON + * + * \param context: the context + * \param buf: buffer to fill with JSON + * \param len: max length of buf + */ +LWS_VISIBLE LWS_EXTERN int +lws_json_dump_context(const struct lws_context *context, char *buf, int len); + +/** + * lws_context_user() - get the user data associated with the context + * \param context: Websocket context + * + * This returns the optional user allocation that can be attached to + * the context the sockets live in at context_create time. It's a way + * to let all sockets serviced in the same context share data without + * using globals statics in the user code. + */ +LWS_VISIBLE LWS_EXTERN void * +lws_context_user(struct lws_context *context); + +/*! \defgroup vhost-mounts Vhost mounts and options + * \ingroup context-and-vhost-creation + * + * ##Vhost mounts and options + */ +///@{ +/** struct lws_protocol_vhost_options - linked list of per-vhost protocol + * name=value options + * + * This provides a general way to attach a linked-list of name=value pairs, + * which can also have an optional child link-list using the options member. + */ +struct lws_protocol_vhost_options { + const struct lws_protocol_vhost_options *next; /**< linked list */ + const struct lws_protocol_vhost_options *options; /**< child linked-list of more options for this node */ + const char *name; /**< name of name=value pair */ + const char *value; /**< value of name=value pair */ +}; + +/** enum lws_mount_protocols + * This specifies the mount protocol for a mountpoint, whether it is to be + * served from a filesystem, or it is a cgi etc. + */ +enum lws_mount_protocols { + LWSMPRO_HTTP = 0, /**< not supported yet */ + LWSMPRO_HTTPS = 1, /**< not supported yet */ + LWSMPRO_FILE = 2, /**< serve from filesystem directory */ + LWSMPRO_CGI = 3, /**< pass to CGI to handle */ + LWSMPRO_REDIR_HTTP = 4, /**< redirect to http:// url */ + LWSMPRO_REDIR_HTTPS = 5, /**< redirect to https:// url */ + LWSMPRO_CALLBACK = 6, /**< hand by named protocol's callback */ +}; + +/** struct lws_http_mount + * + * arguments for mounting something in a vhost's url namespace + */ +struct lws_http_mount { + const struct lws_http_mount *mount_next; + /**< pointer to next struct lws_http_mount */ + const char *mountpoint; + /**< mountpoint in http pathspace, eg, "/" */ + const char *origin; + /**< path to be mounted, eg, "/var/www/warmcat.com" */ + const char *def; + /**< default target, eg, "index.html" */ + const char *protocol; + /**<"protocol-name" to handle mount */ + + const struct lws_protocol_vhost_options *cgienv; + /**< optional linked-list of cgi options. These are created + * as environment variables for the cgi process + */ + const struct lws_protocol_vhost_options *extra_mimetypes; + /**< optional linked-list of mimetype mappings */ + const struct lws_protocol_vhost_options *interpret; + /**< optional linked-list of files to be interpreted */ + + int cgi_timeout; + /**< seconds cgi is allowed to live, if cgi://mount type */ + int cache_max_age; + /**< max-age for reuse of client cache of files, seconds */ + unsigned int auth_mask; + /**< bits set here must be set for authorized client session */ + + unsigned int cache_reusable:1; /**< set if client cache may reuse this */ + unsigned int cache_revalidate:1; /**< set if client cache should revalidate on use */ + unsigned int cache_intermediaries:1; /**< set if intermediaries are allowed to cache */ + + unsigned char origin_protocol; /**< one of enum lws_mount_protocols */ + unsigned char mountpoint_len; /**< length of mountpoint string */ +}; +///@} +///@} + +/*! \defgroup client + * \ingroup lwsapi + * + * ##Client releated functions + * */ +///@{ + +/** enum lws_client_connect_ssl_connection_flags - flags that may be used + * with struct lws_client_connect_info ssl_connection member to control if + * and how SSL checks apply to the client connection being created + */ + +enum lws_client_connect_ssl_connection_flags { + LCCSCF_USE_SSL = (1 << 0), + LCCSCF_ALLOW_SELFSIGNED = (1 << 1), + LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2) +}; + +/** struct lws_client_connect_info - parameters to connect with when using + * lws_client_connect_via_info() */ + +struct lws_client_connect_info { + struct lws_context *context; + /**< lws context to create connection in */ + const char *address; + /**< remote address to connect to */ + int port; + /**< remote port to connect to */ + int ssl_connection; + /**< nonzero for ssl */ + const char *path; + /**< uri path */ + const char *host; + /**< content of host header */ + const char *origin; + /**< content of origin header */ + const char *protocol; + /**< list of ws protocols we could accept */ + int ietf_version_or_minus_one; + /**< deprecated: currently leave at 0 or -1 */ + void *userdata; + /**< if non-NULL, use this as wsi user_data instead of malloc it */ + const struct lws_extension *client_exts; + /**< array of extensions that may be used on connection */ + const char *method; + /**< if non-NULL, do this http method instead of ws[s] upgrade. + * use "GET" to be a simple http client connection */ + struct lws *parent_wsi; + /**< if another wsi is responsible for this connection, give it here. + * this is used to make sure if the parent closes so do any + * child connections first. */ + const char *uri_replace_from; + /**< if non-NULL, when this string is found in URIs in + * text/html content-encoding, it's replaced with uri_replace_to */ + const char *uri_replace_to; + /**< see uri_replace_from */ + struct lws_vhost *vhost; + /**< vhost to bind to (used to determine related SSL_CTX) */ + struct lws **pwsi; + /**< if not NULL, store the new wsi here early in the connection + * process. Although we return the new wsi, the call to create the + * client connection does progress the connection somewhat and may + * meet an error that will result in the connection being scrubbed and + * NULL returned. While the wsi exists though, he may process a + * callback like CLIENT_CONNECTION_ERROR with his wsi: this gives the + * user callback a way to identify which wsi it is that faced the error + * even before the new wsi is returned and even if ultimately no wsi + * is returned. + */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility + * + * The below is to ensure later library versions with new + * members added above will see 0 (default) even if the app + * was not built against the newer headers. + */ + + void *_unused[4]; /**< dummy */ +}; + +/** + * lws_client_connect_via_info() - Connect to another websocket server + * \param ccinfo: pointer to lws_client_connect_info struct + * + * This function creates a connection to a remote server using the + * information provided in ccinfo. + */ +LWS_VISIBLE LWS_EXTERN struct lws * +lws_client_connect_via_info(struct lws_client_connect_info * ccinfo); + +/** + * lws_client_connect() - Connect to another websocket server + * \deprecated DEPRECATED use lws_client_connect_via_info + * \param clients: Websocket context + * \param address: Remote server address, eg, "myserver.com" + * \param port: Port to connect to on the remote server, eg, 80 + * \param ssl_connection: 0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self + * signed certs + * \param path: Websocket path on server + * \param host: Hostname on server + * \param origin: Socket origin name + * \param protocol: Comma-separated list of protocols being asked for from + * the server, or just one. The server will pick the one it + * likes best. If you don't want to specify a protocol, which is + * legal, use NULL here. + * \param ietf_version_or_minus_one: -1 to ask to connect using the default, latest + * protocol supported, or the specific protocol ordinal + * + * This function creates a connection to a remote server + */ +/* deprecated, use lws_client_connect_via_info() */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_client_connect(struct lws_context *clients, const char *address, + int port, int ssl_connection, const char *path, + const char *host, const char *origin, const char *protocol, + int ietf_version_or_minus_one) LWS_WARN_DEPRECATED; +/* deprecated, use lws_client_connect_via_info() */ +/** + * lws_client_connect_extended() - Connect to another websocket server + * \deprecated DEPRECATED use lws_client_connect_via_info + * \param clients: Websocket context + * \param address: Remote server address, eg, "myserver.com" + * \param port: Port to connect to on the remote server, eg, 80 + * \param ssl_connection: 0 = ws://, 1 = wss:// encrypted, 2 = wss:// allow self + * signed certs + * \param path: Websocket path on server + * \param host: Hostname on server + * \param origin: Socket origin name + * \param protocol: Comma-separated list of protocols being asked for from + * the server, or just one. The server will pick the one it + * likes best. + * \param ietf_version_or_minus_one: -1 to ask to connect using the default, latest + * protocol supported, or the specific protocol ordinal + * \param userdata: Pre-allocated user data + * + * This function creates a connection to a remote server + */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_client_connect_extended(struct lws_context *clients, const char *address, + int port, int ssl_connection, const char *path, + const char *host, const char *origin, + const char *protocol, int ietf_version_or_minus_one, + void *userdata) LWS_WARN_DEPRECATED; + +/** + * lws_init_vhost_client_ssl() - also enable client SSL on an existing vhost + * + * \param info: client ssl related info + * \param vhost: which vhost to initialize client ssl operations on + * + * You only need to call this if you plan on using SSL client connections on + * the vhost. For non-SSL client connections, it's not necessary to call this. + * + * The following members of info are used during the call + * + * - options must have LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT set, + * otherwise the call does nothing + * - provided_client_ssl_ctx must be NULL to get a generated client + * ssl context, otherwise you can pass a prepared one in by setting it + * - ssl_cipher_list may be NULL or set to the client valid cipher list + * - ssl_ca_filepath may be NULL or client cert filepath + * - ssl_cert_filepath may be NULL or client cert filepath + * - ssl_private_key_filepath may be NULL or client cert private key + * + * You must create your vhost explicitly if you want to use this, so you have + * a pointer to the vhost. Create the context first with the option flag + * LWS_SERVER_OPTION_EXPLICIT_VHOSTS and then call lws_create_vhost() with + * the same info struct. + */ +LWS_VISIBLE LWS_EXTERN int +lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, + struct lws_vhost *vhost); + +LWS_VISIBLE LWS_EXTERN int +lws_http_client_read(struct lws *wsi, char **buf, int *len); + +LWS_VISIBLE LWS_EXTERN void +lws_client_http_body_pending(struct lws *wsi, int something_left_to_send); + +/** + * lws_client_http_body_pending() - control if client connection neeeds to send body + * + * \param wsi: client connection + * \param something_left_to_send: nonzero if need to send more body, 0 (default) + * if nothing more to send + * + * If you will send payload data with your HTTP client connection, eg, for POST, + * when you set the related http headers in + * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER callback you should also call + * this API with something_left_to_send nonzero, and call + * lws_callback_on_writable(wsi); + * + * After sending the headers, lws will call your callback with + * LWS_CALLBACK_CLIENT_HTTP_WRITEABLE reason when writable. You can send the + * next part of the http body payload, calling lws_callback_on_writable(wsi); + * if there is more to come, or lws_client_http_body_pending(wsi, 0); to + * let lws know the last part is sent and the connection can move on. + */ + +///@} + +/** \defgroup service Built-in service loop entry + * + * ##Built-in service loop entry + * + * If you're not using libev / libuv, these apis are needed to enter the poll() + * wait in lws and service any connections with pending events. + */ +///@{ + +/** + * lws_service() - Service any pending websocket activity + * \param context: Websocket context + * \param timeout_ms: Timeout for poll; 0 means return immediately if nothing needed + * service otherwise block and service immediately, returning + * after the timeout if nothing needed service. + * + * This function deals with any pending websocket traffic, for three + * kinds of event. It handles these events on both server and client + * types of connection the same. + * + * 1) Accept new connections to our context's server + * + * 2) Call the receive callback for incoming frame data received by + * server or client connections. + * + * You need to call this service function periodically to all the above + * functions to happen; if your application is single-threaded you can + * just call it in your main event loop. + * + * Alternatively you can fork a new process that asynchronously handles + * calling this service in a loop. In that case you are happy if this + * call blocks your thread until it needs to take care of something and + * would call it with a large nonzero timeout. Your loop then takes no + * CPU while there is nothing happening. + * + * If you are calling it in a single-threaded app, you don't want it to + * wait around blocking other things in your loop from happening, so you + * would call it with a timeout_ms of 0, so it returns immediately if + * nothing is pending, or as soon as it services whatever was pending. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service(struct lws_context *context, int timeout_ms); + +/** + * lws_service() - Service any pending websocket activity + * + * \param context: Websocket context + * \param timeout_ms: Timeout for poll; 0 means return immediately if nothing needed + * service otherwise block and service immediately, returning + * after the timeout if nothing needed service. + * + * Same as lws_service(), but for a specific thread service index. Only needed + * if you are spawning multiple service threads. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi); + +/** + * lws_cancel_service_pt() - Cancel servicing of pending socket activity + * on one thread + * \param wsi: Cancel service on the thread this wsi is serviced by + * + * This function lets a call to lws_service() waiting for a timeout + * immediately return. + * + * It works by creating a phony event and then swallowing it silently. + * + * The reason it may be needed is when waiting in poll(), changes to + * the event masks are ignored by the OS until poll() is reentered. This + * lets you halt the poll() wait and make the reentry happen immediately + * instead of having the wait out the rest of the poll timeout. + */ +LWS_VISIBLE LWS_EXTERN void +lws_cancel_service_pt(struct lws *wsi); + +/** + * lws_cancel_service() - Cancel wait for new pending socket activity + * \param context: Websocket context + * + * This function let a call to lws_service() waiting for a timeout + * immediately return. + * + * What it basically does is provide a fake event that will be swallowed, + * so the wait in poll() is ended. That's useful because poll() doesn't + * attend to changes in POLLIN/OUT/ERR until it re-enters the wait. + */ +LWS_VISIBLE LWS_EXTERN void +lws_cancel_service(struct lws_context *context); + +/** + * lws_service_fd() - Service polled socket with something waiting + * \param context: Websocket context + * \param pollfd: The pollfd entry describing the socket fd and which events + * happened. + * + * This function takes a pollfd that has POLLIN or POLLOUT activity and + * services it according to the state of the associated + * struct lws. + * + * The one call deals with all "service" that might happen on a socket + * including listen accepts, http files as well as websocket protocol. + * + * If a pollfd says it has something, you can just pass it to + * lws_service_fd() whether it is a socket handled by lws or not. + * If it sees it is a lws socket, the traffic will be handled and + * pollfd->revents will be zeroed now. + * + * If the socket is foreign to lws, it leaves revents alone. So you can + * see if you should service yourself by checking the pollfd revents + * after letting lws try to service it. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); + +/** + * lws_service_fd_tsi() - Service polled socket in specific service thread + * \param context: Websocket context + * \param pollfd: The pollfd entry describing the socket fd and which events + * happened. + * \param tsi: thread service index + * + * Same as lws_service_fd() but used with multiple service threads + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, + int tsi); + +/** + * lws_service_adjust_timeout() - Check for any connection needing forced service + * \param context: Websocket context + * \param timeout_ms: The original poll timeout value. You can just set this + * to 1 if you don't really have a poll timeout. + * \param tsi: thread service index + * + * Under some conditions connections may need service even though there is no + * pending network action on them, this is "forced service". For default + * poll() and libuv / libev, the library takes care of calling this and + * dealing with it for you. But for external poll() integration, you need + * access to the apis. + * + * If anybody needs "forced service", returned timeout is zero. In that case, + * you can call lws_plat_service_tsi() with a timeout of -1 to only service + * guys who need forced service. + */ +LWS_VISIBLE LWS_EXTERN int +lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi); + +/** + * lws_plat_service_tsi() - Lowlevel platform-specific service api + * \param context: Websocket context + * \param timeout_ms: The original poll timeout value. You can just set this + * to 1 if you don't really have a poll timeout. + * \param tsi: thread service index + * + * For default poll() and libuv/ev, lws takes care of using this for you. and + * you can ignore it. + * + * But for external poll() integration, you need access to this api to service + * connections that need to be serviced but have no pending network activity. + * + * See lws_service_adjust_timeout() for more info. + */ +LWS_EXTERN LWS_VISIBLE int +lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi); + +///@} + +/*! \defgroup http HTTP + + Modules related to handling HTTP +*/ +//@{ + +/*! \defgroup httpft HTTP File transfer + * \ingroup http + + APIs for sending local files in response to HTTP requests +*/ +//@{ + +/** + * lws_get_mimetype() - Determine mimetype to use from filename + * + * \param file: filename + * \param m: NULL, or mount context + * + * This uses a canned list of known filetypes first, if no match and m is + * non-NULL, then tries a list of per-mount file suffix to mimtype mappings. + * + * Returns either NULL or a pointer to the mimetype matching the file. + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_get_mimetype(const char *file, const struct lws_http_mount *m); + +/** + * lws_serve_http_file() - Send a file back to the client using http + * \param wsi: Websocket instance (available from user callback) + * \param file: The file to issue over http + * \param content_type: The http content type, eg, text/html + * \param other_headers: NULL or pointer to header string + * \param other_headers_len: length of the other headers if non-NULL + * + * This function is intended to be called from the callback in response + * to http requests from the client. It allows the callback to issue + * local files down the http link in a single step. + * + * Returning <0 indicates error and the wsi should be closed. Returning + * >0 indicates the file was completely sent and + * lws_http_transaction_completed() called on the wsi (and close if != 0) + * ==0 indicates the file transfer is started and needs more service later, + * the wsi should be left alone. + */ +LWS_VISIBLE LWS_EXTERN int +lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, + const char *other_headers, int other_headers_len); +LWS_VISIBLE LWS_EXTERN int +lws_serve_http_file_fragment(struct lws *wsi); +//@} + +/*! \defgroup html-chunked-substitution HTML Chunked Substitution + * \ingroup http + * + * ##HTML chunked Substitution + * + * APIs for receiving chunks of text, replacing a set of variable names via + * a callback, and then prepending and appending HTML chunked encoding + * headers. + */ +//@{ + +enum http_status { + HTTP_STATUS_OK = 200, + HTTP_STATUS_NO_CONTENT = 204, + + HTTP_STATUS_MOVED_PERMANENTLY = 301, + HTTP_STATUS_FOUND = 302, + HTTP_STATUS_SEE_OTHER = 303, + + HTTP_STATUS_BAD_REQUEST = 400, + HTTP_STATUS_UNAUTHORIZED, + HTTP_STATUS_PAYMENT_REQUIRED, + HTTP_STATUS_FORBIDDEN, + HTTP_STATUS_NOT_FOUND, + HTTP_STATUS_METHOD_NOT_ALLOWED, + HTTP_STATUS_NOT_ACCEPTABLE, + HTTP_STATUS_PROXY_AUTH_REQUIRED, + HTTP_STATUS_REQUEST_TIMEOUT, + HTTP_STATUS_CONFLICT, + HTTP_STATUS_GONE, + HTTP_STATUS_LENGTH_REQUIRED, + HTTP_STATUS_PRECONDITION_FAILED, + HTTP_STATUS_REQ_ENTITY_TOO_LARGE, + HTTP_STATUS_REQ_URI_TOO_LONG, + HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, + HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, + HTTP_STATUS_EXPECTATION_FAILED, + + HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, + HTTP_STATUS_NOT_IMPLEMENTED, + HTTP_STATUS_BAD_GATEWAY, + HTTP_STATUS_SERVICE_UNAVAILABLE, + HTTP_STATUS_GATEWAY_TIMEOUT, + HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, +}; + +struct lws_process_html_args { + char *p; /**< pointer to the buffer containing the data */ + int len; /**< length of the original data at p */ + int max_len; /**< maximum length we can grow the data to */ + int final; /**< set if this is the last chunk of the file */ +}; + +typedef const char *(*lws_process_html_state_cb)(void *data, int index); + +struct lws_process_html_state { + char *start; /**< pointer to start of match */ + char swallow[16]; /**< matched character buffer */ + int pos; /**< position in match */ + void *data; /**< opaque pointer */ + const char * const *vars; /**< list of variable names */ + int count_vars; /**< count of variable names */ + + lws_process_html_state_cb replace; /**< called on match to perform substitution */ +}; + +/*! lws_chunked_html_process() - generic chunked substitution + * \param args: buffer to process using chunked encoding + * \param s: current processing state + */ +LWS_VISIBLE LWS_EXTERN int +lws_chunked_html_process(struct lws_process_html_args *args, + struct lws_process_html_state *s); +//@} + +/** \defgroup HTTP-headers-read HTTP headers: read + * \ingroup http + * + * ##HTTP header releated functions + * + * In lws the client http headers are temporarily stored in a pool, only for the + * duration of the http part of the handshake. It's because in most cases, + * the header content is ignored for the whole rest of the connection lifetime + * and would then just be taking up space needlessly. + * + * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time + * the http headers are still allocated, you can use these apis then to + * look at and copy out interesting header content (cookies, etc) + * + * Notice that the header total length reported does not include a terminating + * '\0', however you must allocate for it when using the _copy apis. So the + * length reported for a header containing "123" is 3, but you must provide + * a buffer of length 4 so that "123\0" may be copied into it, or the copy + * will fail with a nonzero return code. + * + * In the special case of URL arguments, like ?x=1&y=2, the arguments are + * stored in a token named for the method, eg, WSI_TOKEN_GET_URI if it + * was a GET or WSI_TOKEN_POST_URI if POST. You can check the total + * length to confirm the method. + * + * For URL arguments, each argument is stored urldecoded in a "fragment", so + * you can use the fragment-aware api lws_hdr_copy_fragment() to access each + * argument in turn: the fragments contain urldecoded strings like x=1 or y=2. + * + * As a convenience, lws has an api that will find the fragment with a + * given name= part, lws_get_urlarg_by_name(). + */ +///@{ + +/** struct lws_tokens * you need these to look at headers that have been parsed if using the * LWS_CALLBACK_FILTER_CONNECTION callback. If a header from the enum * list below is absent, .token = NULL and token_len = 0. Otherwise .token * points to .token_len chars containing that header content. */ - struct lws_tokens { - char *token; - int token_len; + char *token; /**< pointer to start of the token */ + int token_len; /**< length of the token's value */ }; -/* +/* enum lws_token_indexes * these have to be kept in sync with lextable.h / minilex.c * * NOTE: These public enums are part of the abi. If you want to add one, @@ -621,6 +2591,7 @@ enum lws_token_indexes { WSI_TOKEN_HTTP_URI_ARGS = 76, WSI_TOKEN_PROXY = 77, WSI_TOKEN_HTTP_X_REAL_IP = 78, + WSI_TOKEN_HTTP1_0 = 79, /****** add new things just above ---^ ******/ @@ -632,6 +2603,7 @@ enum lws_token_indexes { _WSI_TOKEN_CLIENT_URI, _WSI_TOKEN_CLIENT_HOST, _WSI_TOKEN_CLIENT_ORIGIN, + _WSI_TOKEN_CLIENT_METHOD, /* always last real token index*/ WSI_TOKEN_COUNT, @@ -645,846 +2617,426 @@ enum lws_token_indexes { }; struct lws_token_limits { - unsigned short token_limit[WSI_TOKEN_COUNT]; -}; - -/* - * From RFC 6455 - 1000 - - 1000 indicates a normal closure, meaning that the purpose for - which the connection was established has been fulfilled. - - 1001 - - 1001 indicates that an endpoint is "going away", such as a server - going down or a browser having navigated away from a page. - - 1002 - - 1002 indicates that an endpoint is terminating the connection due - to a protocol error. - - 1003 - - 1003 indicates that an endpoint is terminating the connection - because it has received a type of data it cannot accept (e.g., an - endpoint that understands only text data MAY send this if it - receives a binary message). - - 1004 - - Reserved. The specific meaning might be defined in the future. - - 1005 - - 1005 is a reserved value and MUST NOT be set as a status code in a - Close control frame by an endpoint. It is designated for use in - applications expecting a status code to indicate that no status - code was actually present. - - 1006 - - 1006 is a reserved value and MUST NOT be set as a status code in a - Close control frame by an endpoint. It is designated for use in - applications expecting a status code to indicate that the - connection was closed abnormally, e.g., without sending or - receiving a Close control frame. - - 1007 - - 1007 indicates that an endpoint is terminating the connection - because it has received data within a message that was not - consistent with the type of the message (e.g., non-UTF-8 [RFC3629] - data within a text message). - - 1008 - - 1008 indicates that an endpoint is terminating the connection - because it has received a message that violates its policy. This - is a generic status code that can be returned when there is no - other more suitable status code (e.g., 1003 or 1009) or if there - is a need to hide specific details about the policy. - - 1009 - - 1009 indicates that an endpoint is terminating the connection - because it has received a message that is too big for it to - process. - - 1010 - - 1010 indicates that an endpoint (client) is terminating the - connection because it has expected the server to negotiate one or - more extension, but the server didn't return them in the response - message of the WebSocket handshake. The list of extensions that - are needed SHOULD appear in the /reason/ part of the Close frame. - Note that this status code is not used by the server, because it - can fail the WebSocket handshake instead. - - 1011 - - 1011 indicates that a server is terminating the connection because - it encountered an unexpected condition that prevented it from - fulfilling the request. - - 1015 - - 1015 is a reserved value and MUST NOT be set as a status code in a - Close control frame by an endpoint. It is designated for use in - applications expecting a status code to indicate that the - connection was closed due to a failure to perform a TLS handshake - (e.g., the server certificate can't be verified). -*/ - -/* - * NOTE: These public enums are part of the abi. If you want to add one, - * add it at where specified so existing users are unaffected. - */ -enum lws_close_status { - LWS_CLOSE_STATUS_NOSTATUS = 0, - LWS_CLOSE_STATUS_NORMAL = 1000, - LWS_CLOSE_STATUS_GOINGAWAY = 1001, - LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, - LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, - LWS_CLOSE_STATUS_RESERVED = 1004, - LWS_CLOSE_STATUS_NO_STATUS = 1005, - LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, - LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, - LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, - LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, - LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, - LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, - LWS_CLOSE_STATUS_TLS_FAILURE = 1015, - - /****** add new things just above ---^ ******/ - - LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, -}; - -enum http_status { - HTTP_STATUS_OK = 200, - HTTP_STATUS_NO_CONTENT = 204, - - HTTP_STATUS_BAD_REQUEST = 400, - HTTP_STATUS_UNAUTHORIZED, - HTTP_STATUS_PAYMENT_REQUIRED, - HTTP_STATUS_FORBIDDEN, - HTTP_STATUS_NOT_FOUND, - HTTP_STATUS_METHOD_NOT_ALLOWED, - HTTP_STATUS_NOT_ACCEPTABLE, - HTTP_STATUS_PROXY_AUTH_REQUIRED, - HTTP_STATUS_REQUEST_TIMEOUT, - HTTP_STATUS_CONFLICT, - HTTP_STATUS_GONE, - HTTP_STATUS_LENGTH_REQUIRED, - HTTP_STATUS_PRECONDITION_FAILED, - HTTP_STATUS_REQ_ENTITY_TOO_LARGE, - HTTP_STATUS_REQ_URI_TOO_LONG, - HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, - HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, - HTTP_STATUS_EXPECTATION_FAILED, - - HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, - HTTP_STATUS_NOT_IMPLEMENTED, - HTTP_STATUS_BAD_GATEWAY, - HTTP_STATUS_SERVICE_UNAVAILABLE, - HTTP_STATUS_GATEWAY_TIMEOUT, - HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, -}; - -struct lws; -struct lws_context; -/* needed even with extensions disabled for create context */ -struct lws_extension; - -/** - * typedef lws_callback_function() - User server actions - * @wsi: Opaque websocket instance pointer - * @reason: The reason for the call - * @user: Pointer to per-session user data allocated by library - * @in: Pointer used for some callback reasons - * @len: Length set for some callback reasons - * - * This callback is the way the user controls what is served. All the - * protocol detail is hidden and handled by the library. - * - * For each connection / session there is user data allocated that is - * pointed to by "user". You set the size of this user data area when - * the library is initialized with lws_create_server. - * - * You get an opportunity to initialize user data when called back with - * LWS_CALLBACK_ESTABLISHED reason. - * - * LWS_CALLBACK_ESTABLISHED: after the server completes a handshake with - * an incoming client. If you built the library - * with ssl support, @in is a pointer to the - * ssl struct associated with the connection or - * NULL. - * - * LWS_CALLBACK_CLIENT_CONNECTION_ERROR: the request client connection has - * been unable to complete a handshake with the remote server. If - * in is non-NULL, you can find an error string of length len where - * it points to. - * - * LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH: this is the last chance for the - * client user code to examine the http headers - * and decide to reject the connection. If the - * content in the headers is interesting to the - * client (url, etc) it needs to copy it out at - * this point since it will be destroyed before - * the CLIENT_ESTABLISHED call - * - * LWS_CALLBACK_CLIENT_ESTABLISHED: after your client connection completed - * a handshake with the remote server - * - * LWS_CALLBACK_CLOSED: when the websocket session ends - * - * LWS_CALLBACK_CLOSED_HTTP: when a HTTP (non-websocket) session ends - * - * LWS_CALLBACK_RECEIVE: data has appeared for this server endpoint from a - * remote client, it can be found at *in and is - * len bytes long - * - * LWS_CALLBACK_CLIENT_RECEIVE_PONG: if you elected to see PONG packets, - * they appear with this callback reason. PONG - * packets only exist in 04+ protocol - * - * LWS_CALLBACK_CLIENT_RECEIVE: data has appeared from the server for the - * client connection, it can be found at *in and - * is len bytes long - * - * LWS_CALLBACK_HTTP: an http request has come from a client that is not - * asking to upgrade the connection to a websocket - * one. This is a chance to serve http content, - * for example, to send a script to the client - * which will then open the websockets connection. - * @in points to the URI path requested and - * lws_serve_http_file() makes it very - * simple to send back a file to the client. - * Normally after sending the file you are done - * with the http connection, since the rest of the - * activity will come by websockets from the script - * that was delivered by http, so you will want to - * return 1; to close and free up the connection. - * That's important because it uses a slot in the - * total number of client connections allowed set - * by MAX_CLIENTS. - * - * LWS_CALLBACK_HTTP_BODY: the next @len bytes data from the http - * request body HTTP connection is now available in @in. - * - * LWS_CALLBACK_HTTP_BODY_COMPLETION: the expected amount of http request - * body has been delivered - * - * LWS_CALLBACK_HTTP_WRITEABLE: you can write more down the http protocol - * link now. - * - * LWS_CALLBACK_HTTP_FILE_COMPLETION: a file requested to be send down - * http link has completed. - * - * LWS_CALLBACK_CLIENT_WRITEABLE: - * LWS_CALLBACK_SERVER_WRITEABLE: If you call - * lws_callback_on_writable() on a connection, you will - * get one of these callbacks coming when the connection socket - * is able to accept another write packet without blocking. - * If it already was able to take another packet without blocking, - * you'll get this callback at the next call to the service loop - * function. Notice that CLIENTs get LWS_CALLBACK_CLIENT_WRITEABLE - * and servers get LWS_CALLBACK_SERVER_WRITEABLE. - * - * LWS_CALLBACK_FILTER_NETWORK_CONNECTION: called when a client connects to - * the server at network level; the connection is accepted but then - * passed to this callback to decide whether to hang up immediately - * or not, based on the client IP. @in contains the connection - * socket's descriptor. Since the client connection information is - * not available yet, @wsi still pointing to the main server socket. - * Return non-zero to terminate the connection before sending or - * receiving anything. Because this happens immediately after the - * network connection from the client, there's no websocket protocol - * selected yet so this callback is issued only to protocol 0. - * - * LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED: A new client just had - * been connected, accepted, and instantiated into the pool. This - * callback allows setting any relevant property to it. Because this - * happens immediately after the instantiation of a new client, - * there's no websocket protocol selected yet so this callback is - * issued only to protocol 0. Only @wsi is defined, pointing to the - * new client, and the return value is ignored. - * - * LWS_CALLBACK_FILTER_HTTP_CONNECTION: called when the request has - * been received and parsed from the client, but the response is - * not sent yet. Return non-zero to disallow the connection. - * @user is a pointer to the connection user space allocation, - * @in is the URI, eg, "/" - * In your handler you can use the public APIs - * lws_hdr_total_length() / lws_hdr_copy() to access all of the - * headers using the header enums lws_token_indexes from - * libwebsockets.h to check for and read the supported header - * presence and content before deciding to allow the http - * connection to proceed or to kill the connection. - * - * LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION: called when the handshake has - * been received and parsed from the client, but the response is - * not sent yet. Return non-zero to disallow the connection. - * @user is a pointer to the connection user space allocation, - * @in is the requested protocol name - * In your handler you can use the public APIs - * lws_hdr_total_length() / lws_hdr_copy() to access all of the - * headers using the header enums lws_token_indexes from - * libwebsockets.h to check for and read the supported header - * presence and content before deciding to allow the handshake - * to proceed or to kill the connection. - * - * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS: if configured for - * including OpenSSL support, this callback allows your user code - * to perform extra SSL_CTX_load_verify_locations() or similar - * calls to direct OpenSSL where to find certificates the client - * can use to confirm the remote server identity. @user is the - * OpenSSL SSL_CTX* - * - * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS: if configured for - * including OpenSSL support, this callback allows your user code - * to load extra certifcates into the server which allow it to - * verify the validity of certificates returned by clients. @user - * is the server's OpenSSL SSL_CTX* - * - * LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY: if configured for - * including OpenSSL support but no private key file has been - * specified (ssl_private_key_filepath is NULL), this is called to - * allow the user to set the private key directly via libopenssl - * and perform further operations if required; this might be useful - * in situations where the private key is not directly accessible - * by the OS, for example if it is stored on a smartcard - * @user is the server's OpenSSL SSL_CTX* - * - * LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION: if the - * libwebsockets context was created with the option - * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this - * callback is generated during OpenSSL verification of the cert - * sent from the client. It is sent to protocol[0] callback as - * no protocol has been negotiated on the connection yet. - * Notice that the libwebsockets context and wsi are both NULL - * during this callback. See - * http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html - * to understand more detail about the OpenSSL callback that - * generates this libwebsockets callback and the meanings of the - * arguments passed. In this callback, @user is the x509_ctx, - * @in is the ssl pointer and @len is preverify_ok - * Notice that this callback maintains libwebsocket return - * conventions, return 0 to mean the cert is OK or 1 to fail it. - * This also means that if you don't handle this callback then - * the default callback action of returning 0 allows the client - * certificates. - * - * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: this callback happens - * when a client handshake is being compiled. @user is NULL, - * @in is a char **, it's pointing to a char * which holds the - * next location in the header buffer where you can add - * headers, and @len is the remaining space in the header buffer, - * which is typically some hundreds of bytes. So, to add a canned - * cookie, your handler code might look similar to: - * - * char **p = (char **)in; - * - * if (len < 100) - * return 1; - * - * *p += sprintf(*p, "Cookie: a=b\x0d\x0a"); - * - * return 0; - * - * Notice if you add anything, you just have to take care about - * the CRLF on the line you added. Obviously this callback is - * optional, if you don't handle it everything is fine. - * - * Notice the callback is coming to protocols[0] all the time, - * because there is no specific protocol handshook yet. - * - * LWS_CALLBACK_CONFIRM_EXTENSION_OKAY: When the server handshake code - * sees that it does support a requested extension, before - * accepting the extension by additing to the list sent back to - * the client it gives this callback just to check that it's okay - * to use that extension. It calls back to the requested protocol - * and with @in being the extension name, @len is 0 and @user is - * valid. Note though at this time the ESTABLISHED callback hasn't - * happened yet so if you initialize @user content there, @user - * content during this callback might not be useful for anything. - * Notice this callback comes to protocols[0]. - * - * LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: When a client - * connection is being prepared to start a handshake to a server, - * each supported extension is checked with protocols[0] callback - * with this reason, giving the user code a chance to suppress the - * claim to support that extension by returning non-zero. If - * unhandled, by default 0 will be returned and the extension - * support included in the header to the server. Notice this - * callback comes to protocols[0]. - * - * LWS_CALLBACK_PROTOCOL_INIT: One-time call per protocol so it can - * do initial setup / allocations etc - * - * LWS_CALLBACK_PROTOCOL_DESTROY: One-time call per protocol indicating - * this protocol won't get used at all after this callback, the - * context is getting destroyed. Take the opportunity to - * deallocate everything that was allocated by the protocol. - * - * LWS_CALLBACK_WSI_CREATE: outermost (earliest) wsi create notification - * - * LWS_CALLBACK_WSI_DESTROY: outermost (latest) wsi destroy notification - * - * The next five reasons are optional and only need taking care of if you - * will be integrating libwebsockets sockets into an external polling - * array. - * - * For these calls, @in points to a struct lws_pollargs that - * contains @fd, @events and @prev_events members - * - * LWS_CALLBACK_ADD_POLL_FD: libwebsocket deals with its poll() loop - * internally, but in the case you are integrating with another - * server you will need to have libwebsocket sockets share a - * polling array with the other server. This and the other - * POLL_FD related callbacks let you put your specialized - * poll array interface code in the callback for protocol 0, the - * first protocol you support, usually the HTTP protocol in the - * serving case. - * This callback happens when a socket needs to be - * added to the polling loop: @in points to a struct - * lws_pollargs; the @fd member of the struct is the file - * descriptor, and @events contains the active events. - * - * If you are using the internal polling loop (the "service" - * callback), you can just ignore these callbacks. - * - * LWS_CALLBACK_DEL_POLL_FD: This callback happens when a socket descriptor - * needs to be removed from an external polling array. @in is - * again the struct lws_pollargs containing the @fd member - * to be removed. If you are using the internal polling - * loop, you can just ignore it. - * - * LWS_CALLBACK_CHANGE_MODE_POLL_FD: This callback happens when - * libwebsockets wants to modify the events for a connectiion. - * @in is the struct lws_pollargs with the @fd to change. - * The new event mask is in @events member and the old mask is in - * the @prev_events member. - * If you are using the internal polling loop, you can just ignore - * it. - * - * LWS_CALLBACK_LOCK_POLL: - * LWS_CALLBACK_UNLOCK_POLL: These allow the external poll changes driven - * by libwebsockets to participate in an external thread locking - * scheme around the changes, so the whole thing is threadsafe. - * These are called around three activities in the library, - * - inserting a new wsi in the wsi / fd table (len=1) - * - deleting a wsi from the wsi / fd table (len=1) - * - changing a wsi's POLLIN/OUT state (len=0) - * Locking and unlocking external synchronization objects when - * len == 1 allows external threads to be synchronized against - * wsi lifecycle changes if it acquires the same lock for the - * duration of wsi dereference from the other thread context. - * - * LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: - * The peer has sent an unsolicited Close WS packet. @in and - * @len are the optional close code (first 2 bytes, network - * order) and the optional additional information which is not - * defined in the standard, and may be a string or non-human- - * readble data. - * If you return 0 lws will echo the close and then close the - * connection. If you return nonzero lws will just close the - * connection. - */ -typedef int -lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, - void *user, void *in, size_t len); - -/** - * typedef lws_extension_callback_function() - Hooks to allow extensions to operate - * @context: Websockets context - * @ext: This extension - * @wsi: Opaque websocket instance pointer - * @reason: The reason for the call - * @user: Pointer to ptr to per-session user data allocated by library - * @in: Pointer used for some callback reasons - * @len: Length set for some callback reasons - * - * Each extension that is active on a particular connection receives - * callbacks during the connection lifetime to allow the extension to - * operate on websocket data and manage itself. - * - * Libwebsockets takes care of allocating and freeing "user" memory for - * each active extension on each connection. That is what is pointed to - * by the @user parameter. - * - * LWS_EXT_CB_CONSTRUCT: called when the server has decided to - * select this extension from the list provided by the client, - * just before the server will send back the handshake accepting - * the connection with this extension active. This gives the - * extension a chance to initialize its connection context found - * in @user. - * - * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT - * but called when client is instantiating this extension. Some - * extensions will work the same on client and server side and then - * you can just merge handlers for both CONSTRUCTS. - * - * LWS_EXT_CB_DESTROY: called when the connection the extension was - * being used on is about to be closed and deallocated. It's the - * last chance for the extension to deallocate anything it has - * allocated in the user data (pointed to by @user) before the - * user data is deleted. This same callback is used whether you - * are in client or server instantiation context. - * - * LWS_EXT_CB_PACKET_RX_PREPARSE: when this extension was active on - * a connection, and a packet of data arrived at the connection, - * it is passed to this callback to give the extension a chance to - * change the data, eg, decompress it. @user is pointing to the - * extension's private connection context data, @in is pointing - * to an lws_tokens struct, it consists of a char * pointer called - * token, and an int called token_len. At entry, these are - * set to point to the received buffer and set to the content - * length. If the extension will grow the content, it should use - * a new buffer allocated in its private user context data and - * set the pointed-to lws_tokens members to point to its buffer. - * - * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as - * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the - * extension a chance to change websocket data just before it will - * be sent out. Using the same lws_token pointer scheme in @in, - * the extension can change the buffer and the length to be - * transmitted how it likes. Again if it wants to grow the - * buffer safely, it should copy the data into its own buffer and - * set the lws_tokens token pointer to it. - * - * LWS_EXT_CB_ARGS_VALIDATE: - */ -typedef int -lws_extension_callback_function(struct lws_context *context, - const struct lws_extension *ext, struct lws *wsi, - enum lws_extension_callback_reasons reason, - void *user, void *in, size_t len); - -/** - * struct lws_protocols - List of protocols and handlers server - * supports. - * @name: Protocol name that must match the one given in the client - * Javascript new WebSocket(url, 'protocol') name. - * @callback: The service callback used for this protocol. It allows the - * service action for an entire protocol to be encapsulated in - * the protocol-specific callback - * @per_session_data_size: Each new connection using this protocol gets - * this much memory allocated on connection establishment and - * freed on connection takedown. A pointer to this per-connection - * allocation is passed into the callback in the 'user' parameter - * @rx_buffer_size: if you want atomic frames delivered to the callback, you - * should set this to the size of the biggest legal frame that - * you support. If the frame size is exceeded, there is no - * error, but the buffer will spill to the user callback when - * full, which you can detect by using - * lws_remaining_packet_payload(). Notice that you - * just talk about frame size here, the LWS_PRE - * and post-padding are automatically also allocated on top. - * @id: ignored by lws, but useful to contain user information bound - * to the selected protocol. For example if this protocol was - * called "myprotocol-v2", you might set id to 2, and the user - * code that acts differently according to the version can do so by - * switch (wsi->protocol->id), user code might use some bits as - * capability flags based on selected protocol version, etc. - * @user: User provided context data at the protocol level. - * Accessible via lws_get_protocol(wsi)->user - * This should not be confused with wsi->user, it is not the same. - * The library completely ignores any value in here. - * - * This structure represents one protocol supported by the server. An - * array of these structures is passed to lws_create_server() - * allows as many protocols as you like to be handled by one server. - * - * The first protocol given has its callback used for user callbacks when - * there is no agreed protocol name, that's true during HTTP part of the - * connection and true if the client did not send a Protocol: header. - */ - -struct lws_protocols { - const char *name; - lws_callback_function *callback; - size_t per_session_data_size; - size_t rx_buffer_size; - unsigned int id; - void *user; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ -}; - -enum lws_ext_options_types { - EXTARG_NONE, - EXTARG_DEC, - EXTARG_OPT_DEC - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ + unsigned short token_limit[WSI_TOKEN_COUNT]; /**< max chars for this token */ }; /** - * struct lws_ext_options - Option arguments to the extension. These are - * used in the negotiation at ws upgrade time. - * The helper function lws_ext_parse_options() - * uses these to generate callbacks + * lws_token_to_string() - returns a textual representation of a hdr token index * - * @name: Option name, eg, "server_no_context_takeover" - * @type: What kind of args the option can take + * \param: token index */ -struct lws_ext_options { - const char *name; - enum lws_ext_options_types type; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ -}; - -struct lws_ext_option_arg { - int option_index; - const char *start; - int len; -}; - -/** - * struct lws_extension - An extension we know how to cope with - * - * @name: Formal extension name, eg, "permessage-deflate" - * @callback: Service callback - * @client_offer: String containing exts and options client offers - */ - -struct lws_extension { - const char *name; - lws_extension_callback_function *callback; - const char *client_offer; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility */ -}; - -/* - * The internal exts are part of the public abi - * If we add more extensions, publish the callback here ------v - */ - -extern int lws_extension_callback_pm_deflate( - struct lws_context *context, const struct lws_extension *ext, - struct lws *wsi, enum lws_extension_callback_reasons reason, - void *user, void *in, size_t len); - - -/** - * struct lws_context_creation_info - parameters to create context with - * - * @port: Port to listen on... you can use CONTEXT_PORT_NO_LISTEN to - * suppress listening on any port, that's what you want if you are - * not running a websocket server at all but just using it as a - * client - * @iface: NULL to bind the listen socket to all interfaces, or the - * interface name, eg, "eth2" - * @protocols: Array of structures listing supported protocols and a protocol- - * specific callback for each one. The list is ended with an - * entry that has a NULL callback pointer. - * It's not const because we write the owning_server member - * @extensions: NULL or array of lws_extension structs listing the - * extensions this context supports. If you configured with - * --without-extensions, you should give NULL here. - * @token_limits: NULL or struct lws_token_limits pointer which is initialized - * with a token length limit for each possible WSI_TOKEN_*** - * @ssl_cert_filepath: If libwebsockets was compiled to use ssl, and you want - * to listen using SSL, set to the filepath to fetch the - * server cert from, otherwise NULL for unencrypted - * @ssl_private_key_filepath: filepath to private key if wanting SSL mode; - * if this is set to NULL but sll_cert_filepath is set, the - * OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY callback is called - * to allow setting of the private key directly via openSSL - * library calls - * @ssl_ca_filepath: CA certificate filepath or NULL - * @ssl_cipher_list: List of valid ciphers to use (eg, - * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" - * or you can leave it as NULL to get "DEFAULT" - * @http_proxy_address: If non-NULL, attempts to proxy via the given address. - * If proxy auth is required, use format - * "username:password@server:port" - * @http_proxy_port: If http_proxy_address was non-NULL, uses this port at - * the address - * @gid: group id to change to after setting listen socket, or -1. - * @uid: user id to change to after setting listen socket, or -1. - * @options: 0, or LWS_SERVER_OPTION_... bitfields - * @user: optional user pointer that can be recovered via the context - * pointer using lws_context_user - * @ka_time: 0 for no keepalive, otherwise apply this keepalive timeout to - * all libwebsocket sockets, client or server - * @ka_probes: if ka_time was nonzero, after the timeout expires how many - * times to try to get a response from the peer before giving up - * and killing the connection - * @ka_interval: if ka_time was nonzero, how long to wait before each ka_probes - * attempt - * @provided_client_ssl_ctx: If non-null, swap out libwebsockets ssl - * implementation for the one provided by provided_ssl_ctx. - * Libwebsockets no longer is responsible for freeing the context - * if this option is selected. - * @max_http_header_data: The max amount of header payload that can be handled - * in an http request (unrecognized header payload is dropped) - * @max_http_header_pool: The max number of connections with http headers that - * can be processed simultaneously (the corresponding memory is - * allocated for the lifetime of the context). If the pool is - * busy new incoming connections must wait for accept until one - * becomes free. - * @count_threads: how many contexts to create in an array, 0 = 1 - * @fd_limit_per_thread: nonzero means restrict each service thread to this - * many fds, 0 means the default which is divide the process fd - * limit by the number of threads. - * @timeout_secs: various processes involving network roundtrips in the - * library are protected from hanging forever by timeouts. If - * nonzero, this member lets you set the timeout used in seconds. - * Otherwise a default timeout is used. - */ - -struct lws_context_creation_info { - int port; - const char *iface; - const struct lws_protocols *protocols; - const struct lws_extension *extensions; - const struct lws_token_limits *token_limits; - const char *ssl_private_key_password; - const char *ssl_cert_filepath; - const char *ssl_private_key_filepath; - const char *ssl_ca_filepath; - const char *ssl_cipher_list; - const char *http_proxy_address; - unsigned int http_proxy_port; - int gid; - int uid; - unsigned int options; - void *user; - int ka_time; - int ka_probes; - int ka_interval; -#ifdef LWS_OPENSSL_SUPPORT - SSL_CTX *provided_client_ssl_ctx; -#else /* maintain structure layout either way */ - void *provided_client_ssl_ctx; -#endif - - short max_http_header_data; - short max_http_header_pool; - - unsigned int count_threads; - unsigned int fd_limit_per_thread; - unsigned int timeout_secs; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility - * - * The below is to ensure later library versions with new - * members added above will see 0 (default) even if the app - * was not built against the newer headers. - */ - - void *_unused[8]; -}; - -/** - * struct lws_client_connect_info - parameters to connect with when using - * lws_client_connect_via_info() - * - * @context: lws context to create connection in - * @address: remote address to connect to - * @port: remote port to connect to - * @ssl_connection: nonzero for ssl - * @path: uri path - * @host: content of host header - * @origin: content of origin header - * @protocol: list of ws protocols - * @ietf_version_or_minus_one: currently leave at 0 or -1 - * @userdata: if non-NULL, use this as wsi user_data instead of malloc it - * @client_exts: array of extensions that may be used on connection - */ - -struct lws_client_connect_info { - struct lws_context *context; - const char *address; - int port; - int ssl_connection; - const char *path; - const char *host; - const char *origin; - const char *protocol; - int ietf_version_or_minus_one; - void *userdata; - const struct lws_extension *client_exts; - - /* Add new things just above here ---^ - * This is part of the ABI, don't needlessly break compatibility - * - * The below is to ensure later library versions with new - * members added above will see 0 (default) even if the app - * was not built against the newer headers. - */ - - void *_unused[4]; -}; - -LWS_VISIBLE LWS_EXTERN void -lws_set_log_level(int level, - void (*log_emit_function)(int level, const char *line)); - -LWS_VISIBLE LWS_EXTERN void -lwsl_emit_syslog(int level, const char *line); - -LWS_VISIBLE LWS_EXTERN struct lws_context * -lws_create_context(struct lws_context_creation_info *info); - -LWS_VISIBLE LWS_EXTERN int -lws_set_proxy(struct lws_context *context, const char *proxy); - -LWS_VISIBLE LWS_EXTERN void -lws_context_destroy(struct lws_context *context); - -LWS_VISIBLE LWS_EXTERN int -lws_service(struct lws_context *context, int timeout_ms); - -LWS_VISIBLE LWS_EXTERN int -lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi); - -LWS_VISIBLE LWS_EXTERN void -lws_cancel_service_pt(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN void -lws_cancel_service(struct lws_context *context); - -LWS_VISIBLE LWS_EXTERN int -lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, - size_t addrlen); - LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token); + +/** + * lws_hdr_total_length: report length of all fragments of a header totalled up + * The returned length does not include the space for a + * terminating '\0' + * + * \param wsi: websocket connection + * \param h: which header index we are interested in + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); + +/** + * lws_hdr_fragment_length: report length of a single fragment of a header + * The returned length does not include the space for a + * terminating '\0' + * + * \param wsi: websocket connection + * \param h: which header index we are interested in + * \param frag_idx: which fragment of h we want to get the length of + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); + +/** + * lws_hdr_copy() - copy a single fragment of the given header to a buffer + * The buffer length len must include space for an additional + * terminating '\0', or it will fail returning -1. + * + * \param wsi: websocket connection + * \param dest: destination buffer + * \param len: length of destination buffer + * \param h: which header index we are interested in + * + * copies the whole, aggregated header, even if it was delivered in + * several actual headers piece by piece + */ LWS_VISIBLE LWS_EXTERN int -lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, - const unsigned char *value, int length, - unsigned char **p, unsigned char *end); -LWS_VISIBLE LWS_EXTERN int -lws_finalize_http_header(struct lws *wsi, unsigned char **p, - unsigned char *end); -LWS_VISIBLE LWS_EXTERN int -lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, - const unsigned char *value, int length, - unsigned char **p, unsigned char *end); -LWS_VISIBLE LWS_EXTERN int -lws_add_http_header_content_length(struct lws *wsi, - unsigned long content_length, - unsigned char **p, unsigned char *end); +lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); + +/** + * lws_hdr_copy_fragment() - copy a single fragment of the given header to a buffer + * The buffer length len must include space for an additional + * terminating '\0', or it will fail returning -1. + * If the requested fragment index is not present, it fails + * returning -1. + * + * \param wsi: websocket connection + * \param dest: destination buffer + * \param len: length of destination buffer + * \param h: which header index we are interested in + * \param frag_idx: which fragment of h we want to copy + * + * Normally this is only useful + * to parse URI arguments like ?x=1&y=2, token index WSI_TOKEN_HTTP_URI_ARGS + * fragment 0 will contain "x=1" and fragment 1 "y=2" + */ LWS_VISIBLE LWS_EXTERN int +lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, + enum lws_token_indexes h, int frag_idx); + +/** + * lws_get_urlarg_by_name() - return pointer to arg value if present + * \param wsi: the connection to check + * \param name: the arg name, like "token=" + * \param buf: the buffer to receive the urlarg (including the name= part) + * \param len: the length of the buffer to receive the urlarg + * + * Returns NULL if not found or a pointer inside buf to just after the + * name= part. + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len); +///@} + +/*! \defgroup HTTP-headers-create HTTP headers: create + * + * ## HTTP headers: Create + * + * These apis allow you to create HTTP response headers in a way compatible with + * both HTTP/1.x and HTTP/2. + * + * They each append to a buffer taking care about the buffer end, which is + * passed in as a pointer. When data is written to the buffer, the current + * position p is updated accordingly. + * + * All of these apis are LWS_WARN_UNUSED_RESULT as they can run out of space + * and fail with nonzero return. + */ +///@{ +/** + * lws_add_http_header_status() - add the HTTP response status code + * + * \param wsi: the connection to check + * \param code: an HTTP code like 200, 404 etc (see enum http_status) + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Adds the initial response code, so should be called first + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end); +/** + * lws_add_http_header_by_name() - append named header and value + * + * \param wsi: the connection to check + * \param name: the hdr name, like "my-header" + * \param value: the value after the = for this header + * \param length: the length of the value + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Appends name: value to the headers + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, + const unsigned char *value, int length, + unsigned char **p, unsigned char *end); +/** + * lws_add_http_header_by_token() - append given header and value + * + * \param wsi: the connection to check + * \param token: the token index for the hdr + * \param value: the value after the = for this header + * \param length: the length of the value + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Appends name=value to the headers, but is able to take advantage of better + * HTTP/2 coding mechanisms where possible. + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, + const unsigned char *value, int length, + unsigned char **p, unsigned char *end); +/** + * lws_add_http_header_by_name() - append content-length helper + * + * \param wsi: the connection to check + * \param content_length: the content length to use + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Appends content-length: content_length to the headers + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_add_http_header_content_length(struct lws *wsi, + unsigned long content_length, + unsigned char **p, unsigned char *end); +/** + * lws_finalize_http_header() - terminate header block + * + * \param wsi: the connection to check + * \param p: pointer to current position in buffer pointer + * \param end: pointer to end of buffer + * + * Indicates no more headers will be added + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_finalize_http_header(struct lws *wsi, unsigned char **p, + unsigned char *end); +///@} +/** \defgroup form-parsing Form Parsing + * \ingroup http + * ##POSTed form parsing functions + * + * These lws_spa (stateful post arguments) apis let you parse and urldecode + * POSTed form arguments, both using simple urlencoded and multipart transfer + * encoding. + * + * It's capable of handling file uploads as well a named input parsing, + * and the apis are the same for both form upload styles. + * + * You feed it a list of parameter names and it creates pointers to the + * urldecoded arguments: file upload parameters pass the file data in chunks to + * a user-supplied callback as they come. + * + * Since it's stateful, it handles the incoming data needing more than one + * POST_BODY callback and has no limit on uploaded file size. + */ +///@{ + +/** enum lws_spa_fileupload_states */ +enum lws_spa_fileupload_states { + LWS_UFS_CONTENT, + /**< a chunk of file content has arrived */ + LWS_UFS_FINAL_CONTENT, + /**< the last chunk (possibly zero length) of file content has arrived */ + LWS_UFS_OPEN + /**< a new file is starting to arrive */ +}; + +/** + * lws_spa_fileupload_cb() - callback to receive file upload data + * + * \param data: opt_data pointer set in lws_spa_create + * \param name: name of the form field being uploaded + * \param filename: original filename from client + * \param buf: start of data to receive + * \param len: length of data to receive + * \param state: information about how this call relates to file + * + * Notice name and filename shouldn't be trusted, as they are passed from + * HTTP provided by the client. + */ +typedef int (*lws_spa_fileupload_cb)(void *data, const char *name, + const char *filename, char *buf, int len, + enum lws_spa_fileupload_states state); + +/** struct lws_spa - opaque urldecode parser capable of handling multipart + * and file uploads */ +struct lws_spa; + +/** + * lws_spa_create() - create urldecode parser + * + * \param wsi: lws connection (used to find Content Type) + * \param param_names: array of form parameter names, like "username" + * \param count_params: count of param_names + * \param max_storage: total amount of form parameter values we can store + * \param opt_cb: NULL, or callback to receive file upload data. + * \param opt_data: NULL, or user pointer provided to opt_cb. + * + * Creates a urldecode parser and initializes it. + * + * opt_cb can be NULL if you just want normal name=value parsing, however + * if one or more entries in your form are bulk data (file transfer), you + * can provide this callback and filter on the name callback parameter to + * treat that urldecoded data separately. The callback should return -1 + * in case of fatal error, and 0 if OK. + */ +LWS_VISIBLE LWS_EXTERN struct lws_spa * +lws_spa_create(struct lws *wsi, const char * const *param_names, + int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, + void *opt_data); + +/** + * lws_spa_process() - parses a chunk of input data + * + * \param spa: the parser object previously created + * \param in: incoming, urlencoded data + * \param len: count of bytes valid at \param in + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_process(struct lws_spa *spa, const char *in, int len); + +/** + * lws_spa_finalize() - indicate incoming data completed + * + * \param spa: the parser object previously created + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_finalize(struct lws_spa *spa); + +/** + * lws_spa_get_length() - return length of parameter value + * + * \param spa: the parser object previously created + * \param n: parameter ordinal to return length of value for + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_get_length(struct lws_spa *spa, int n); + +/** + * lws_spa_get_string() - return pointer to parameter value + * \param spa: the parser object previously created + * \param n: parameter ordinal to return pointer to value for + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_spa_get_string(struct lws_spa *spa, int n); + +/** + * lws_spa_destroy() - destroy parser object + * + * \param spa: the parser object previously created + */ +LWS_VISIBLE LWS_EXTERN int +lws_spa_destroy(struct lws_spa *spa); +///@} + +/*! \defgroup urlendec Urlencode and Urldecode + * \ingroup http + * + * ##HTML chunked Substitution + * + * APIs for receiving chunks of text, replacing a set of variable names via + * a callback, and then prepending and appending HTML chunked encoding + * headers. + */ +//@{ + +/** + * lws_urlencode() - like strncpy but with urlencoding + * + * \param escaped: output buffer + * \param string: input buffer ('/0' terminated) + * \param len: output buffer max length + * + * Because urlencoding expands the output string, it's not + * possible to do it in-place, ie, with escaped == string + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_urlencode(char *escaped, const char *string, int len); + +/* + * URLDECODE 1 / 2 + * + * This simple urldecode only operates until the first '\0' and requires the + * data to exist all at once + */ +/** + * lws_urldecode() - like strncpy but with urldecoding + * + * \param string: output buffer + * \param escaped: input buffer ('\0' terminated) + * \param len: output buffer max length + * + * This is only useful for '\0' terminated strings + * + * Since urldecoding only shrinks the output string, it is possible to + * do it in-place, ie, string == escaped + */ +LWS_VISIBLE LWS_EXTERN int +lws_urldecode(char *string, const char *escaped, int len); +///@} +/** + * lws_return_http_status() - Return simple http status + * \param wsi: Websocket instance (available from user callback) + * \param code: Status index, eg, 404 + * \param html_body: User-readable HTML description < 1KB, or NULL + * + * Helper to report HTTP errors back to the client cleanly and + * consistently + */ +LWS_VISIBLE LWS_EXTERN int +lws_return_http_status(struct lws *wsi, unsigned int code, + const char *html_body); + +/** + * lws_http_redirect() - write http redirect into buffer + * + * \param wsi: websocket connection + * \param code: HTTP response code (eg, 301) + * \param loc: where to redirect to + * \param len: length of loc + * \param p: pointer current position in buffer (updated as we write) + * \param end: pointer to end of buffer + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, + unsigned char **p, unsigned char *end); + +/** + * lws_http_transaction_completed() - wait for new http transaction or close + * \param wsi: websocket connection + * + * Returns 1 if the HTTP connection must close now + * Returns 0 and resets connection to wait for new HTTP header / + * transaction if possible + */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi); +///@} + +/*! \defgroup pur Sanitize / purify SQL and JSON helpers + * + * ##Sanitize / purify SQL and JSON helpers + * + * APIs for escaping untrusted JSON and SQL safely before use + */ +//@{ + +/** + * lws_sql_purify() - like strncpy but with escaping for sql quotes + * + * \param escaped: output buffer + * \param string: input buffer ('/0' terminated) + * \param len: output buffer max length + * + * Because escaping expands the output string, it's not + * possible to do it in-place, ie, with escaped == string + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_sql_purify(char *escaped, const char *string, int len); + +/** + * lws_json_purify() - like strncpy but with escaping for json chars + * + * \param escaped: output buffer + * \param string: input buffer ('/0' terminated) + * \param len: output buffer max length + * + * Because escaping expands the output string, it's not + * possible to do it in-place, ie, with escaped == string + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_json_purify(char *escaped, const char *string, int len); +///@} + +/*! \defgroup ev libev helpers + * + * ##libev helpers + * + * APIs specific to libev event loop itegration + */ +///@{ #ifdef LWS_USE_LIBEV typedef void (lws_ev_signal_cb_t)(EV_P_ struct ev_signal *w, int revents); @@ -1496,45 +3048,46 @@ lws_ev_sigint_cfg(struct lws_context *context, int use_ev_sigint, LWS_VISIBLE LWS_EXTERN int lws_ev_initloop(struct lws_context *context, struct ev_loop *loop, int tsi); -LWS_VISIBLE void +LWS_VISIBLE LWS_EXTERN void lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents); #endif /* LWS_USE_LIBEV */ -#ifdef LWS_USE_LIBUV -typedef void (lws_uv_signal_cb_t)(uv_loop_t *l, uv_signal_t *w, int signum); +///@} +/*! \defgroup uv libuv helpers + * + * ##libuv helpers + * + * APIs specific to libuv event loop itegration + */ +///@{ +#ifdef LWS_USE_LIBUV LWS_VISIBLE LWS_EXTERN int lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint, - lws_uv_signal_cb_t *cb); + uv_signal_cb cb); LWS_VISIBLE LWS_EXTERN void lws_libuv_run(const struct lws_context *context, int tsi); -LWS_VISIBLE void +LWS_VISIBLE LWS_EXTERN void lws_libuv_stop(struct lws_context *context); LWS_VISIBLE LWS_EXTERN int -lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, uv_signal_cb cb, int tsi); +lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi); LWS_VISIBLE LWS_EXTERN uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi); -LWS_VISIBLE void -lws_uv_sigint_cb(uv_loop_t *loop, uv_signal_t *watcher, int signum); +LWS_VISIBLE LWS_EXTERN void +lws_uv_sigint_cb(uv_signal_t *watcher, int signum); #endif /* LWS_USE_LIBUV */ +///@} -LWS_VISIBLE LWS_EXTERN int -lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); +/*! \defgroup timeout Connection timeouts -LWS_VISIBLE LWS_EXTERN int -lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, - int tsi); - -LWS_VISIBLE LWS_EXTERN void * -lws_context_user(struct lws_context *context); - -LWS_VISIBLE LWS_EXTERN void * -lws_wsi_user(struct lws *wsi); + APIs related to setting connection timeouts +*/ +//@{ /* * NOTE: These public enums are part of the abi. If you want to add one, @@ -1555,14 +3108,117 @@ enum pending_timeout { PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, + PENDING_TIMEOUT_CGI = 14, + PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, + PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, + PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17, + PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18, /****** add new things just above ---^ ******/ }; +/** + * lws_set_timeout() - marks the wsi as subject to a timeout + * + * You will not need this unless you are doing something special + * + * \param wsi: Websocket connection instance + * \param reason: timeout reason + * \param secs: how many seconds + */ LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); +///@} + +/*! \defgroup sending-data Sending data + + APIs related to writing data on a connection +*/ +//@{ +#if !defined(LWS_SIZEOFPTR) +#define LWS_SIZEOFPTR (sizeof (void *)) +#endif +#if !defined(u_int64_t) +#define u_int64_t unsigned long long +#endif + +#if defined(__x86_64__) +#define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ +#else +#define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ +#endif +#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ + ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) +#define LWS_PRE _LWS_PAD(4 + 10) +/* used prior to 1.7 and retained for backward compatibility */ +#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE +#define LWS_SEND_BUFFER_POST_PADDING 0 /* + * NOTE: These public enums are part of the abi. If you want to add one, + * add it at where specified so existing users are unaffected. + */ +enum lws_write_protocol { + LWS_WRITE_TEXT = 0, + /**< Send a ws TEXT message,the pointer must have LWS_PRE valid + * memory behind it. The receiver expects only valid utf-8 in the + * payload */ + LWS_WRITE_BINARY = 1, + /**< Send a ws BINARY message, the pointer must have LWS_PRE valid + * memory behind it. Any sequence of bytes is valid */ + LWS_WRITE_CONTINUATION = 2, + /**< Continue a previous ws message, the pointer must have LWS_PRE valid + * memory behind it */ + LWS_WRITE_HTTP = 3, + /**< Send HTTP content */ + + /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ + LWS_WRITE_PING = 5, + LWS_WRITE_PONG = 6, + + /* Same as write_http but we know this write ends the transaction */ + LWS_WRITE_HTTP_FINAL = 7, + + /* HTTP2 */ + + LWS_WRITE_HTTP_HEADERS = 8, + /**< Send http headers (http2 encodes this payload and LWS_WRITE_HTTP + * payload differently, http 1.x links also handle this correctly. so + * to be compatible with both in the future,header response part should + * be sent using this regardless of http version expected) + */ + + /****** add new things just above ---^ ******/ + + /* flags */ + + LWS_WRITE_NO_FIN = 0x40, + /**< This part of the message is not the end of the message */ + + LWS_WRITE_CLIENT_IGNORE_XOR_MASK = 0x80 + /**< client packet payload goes out on wire unmunged + * only useful for security tests since normal servers cannot + * decode the content if used */ +}; + + +/** + * lws_write() - Apply protocol then write data to client + * \param wsi: Websocket instance (available from user callback) + * \param buf: The data to send. For data being sent on a websocket + * connection (ie, not default http), this buffer MUST have + * LWS_PRE bytes valid BEFORE the pointer. + * This is so the protocol header data can be added in-situ. + * \param len: Count of the data bytes in the payload starting from buf + * \param protocol: Use LWS_WRITE_HTTP to reply to an http connection, and one + * of LWS_WRITE_BINARY or LWS_WRITE_TEXT to send appropriate + * data on a websockets connection. Remember to allow the extra + * bytes before and after buf if LWS_WRITE_BINARY or LWS_WRITE_TEXT + * are used. + * + * This function provides the way to issue data back to the client + * for both http and websocket protocols. + * * IMPORTANT NOTICE! * * When sending with websocket protocol @@ -1606,95 +3262,163 @@ lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); * to the address immediately after the padding won't cause an unaligned access * error. Sometimes for performance reasons the recommended padding is even * larger than sizeof(void *). + * + * In the case of sending using websocket protocol, be sure to allocate + * valid storage before and after buf as explained above. This scheme + * allows maximum efficiency of sending data and protocol in a single + * packet while not burdening the user code with any protocol knowledge. + * + * Return may be -1 for a fatal error needing connection close, or a + * positive number reflecting the amount of bytes actually sent. This + * can be less than the requested number of bytes due to OS memory + * pressure at any given time. */ - -#if !defined(LWS_SIZEOFPTR) -#define LWS_SIZEOFPTR (sizeof (void *)) -#endif -#if !defined(u_int64_t) -#define u_int64_t unsigned long long -#endif - -#if __x86_64__ -#define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ -#else -#define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ -#endif -#define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ - ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) -#define LWS_PRE _LWS_PAD(4 + 10) -/* used prior to 1.7 and retained for backward compatibility */ -#define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE -#define LWS_SEND_BUFFER_POST_PADDING 0 - LWS_VISIBLE LWS_EXTERN int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol); -/** - * lws_close_reason - Set reason and aux data to send with Close packet - * If you are going to return nonzero from the callback - * requesting the connection to close, you can optionally - * call this to set the reason the peer will be told if - * possible. - * - * @wsi: The websocket connection to set the close reason on - * @status: A valid close status from websocket standard - * @buf: NULL or buffer containing up to 124 bytes of auxiliary data - * @len: Length of data in @buf to send - */ -LWS_VISIBLE LWS_EXTERN void -lws_close_reason(struct lws *wsi, enum lws_close_status status, - unsigned char *buf, size_t len); - /* helper for case where buffer may be const */ #define lws_write_http(wsi, buf, len) \ lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) -LWS_VISIBLE LWS_EXTERN int -lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, - const char *other_headers, int other_headers_len); -LWS_VISIBLE LWS_EXTERN int -lws_serve_http_file_fragment(struct lws *wsi); +///@} -LWS_VISIBLE LWS_EXTERN int -lws_return_http_status(struct lws *wsi, unsigned int code, - const char *html_body); - -LWS_VISIBLE LWS_EXTERN const struct lws_protocols * -lws_get_protocol(struct lws *wsi); +/** \defgroup callback-when-writeable Callback when writeable + * + * ##Callback When Writeable + * + * lws can only write data on a connection when it is able to accept more + * data without blocking. + * + * So a basic requirement is we should only use the lws_write() apis when the + * connection we want to write on says that he can accept more data. + * + * When lws cannot complete your send at the time, it will buffer the data + * and send it in the background, suppressing any further WRITEABLE callbacks + * on that connection until it completes. So it is important to write new + * things in a new writeable callback. + * + * These apis reflect the various ways we can indicate we would like to be + * called back when one or more connections is writeable. + */ +///@{ +/** + * lws_callback_on_writable() - Request a callback when this socket + * becomes able to be written to without + * blocking + * + * \param wsi: Websocket connection instance to get callback for + * + * - Which: only this wsi + * - When: when the individual connection becomes writeable + * - What: LWS_CALLBACK_*_WRITEABLE + */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi); +/** + * lws_callback_on_writable_all_protocol() - Request a callback for all + * connections on same vhost using the given protocol when it + * becomes possible to write to each socket without + * blocking in turn. + * + * \param context: lws_context + * \param protocol: Protocol whose connections will get callbacks + * + * - Which: connections using this protocol on ANY VHOST + * - When: when the individual connection becomes writeable + * - What: LWS_CALLBACK_*_WRITEABLE + */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol); +/** + * lws_callback_on_writable_all_protocol_vhost() - Request a callback for + * all connections using the given protocol when it + * becomes possible to write to each socket without + * blocking in turn. + * + * \param vhost: Only consider connections on this lws_vhost + * \param protocol: Protocol whose connections will get callbacks + * + * - Which: connections using this protocol on GIVEN VHOST ONLY + * - When: when the individual connection becomes writeable + * - What: LWS_CALLBACK_*_WRITEABLE + */ +LWS_VISIBLE LWS_EXTERN int +lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, + const struct lws_protocols *protocol); + +/** + * lws_callback_all_protocol() - Callback all connections using + * the given protocol with the given reason + * + * \param context: lws_context + * \param protocol: Protocol whose connections will get callbacks + * \param reason: Callback reason index + * + * - Which: connections using this protocol on ALL VHOSTS + * - When: when the individual connection becomes writeable + * - What: reason + */ LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason); +/** + * lws_callback_all_protocol_vhost() - Callback all connections using + * the given protocol with the given reason + * + * \param vh: Vhost whose connections will get callbacks + * \param protocol: Which protocol to match + * \param reason: Callback reason index + * + * - Which: connections using this protocol on GIVEN VHOST ONLY + * - When: now + * - What: reason + */ +LWS_VISIBLE LWS_EXTERN int +lws_callback_all_protocol_vhost(struct lws_vhost *vh, + const struct lws_protocols *protocol, int reason); + +/** + * lws_callback_vhost_protocols() - Callback all protocols enabled on a vhost + * with the given reason + * + * \param wsi: wsi whose vhost will get callbacks + * \param reason: Callback reason index + * \param in: in argument to callback + * \param len: len argument to callback + * + * - Which: connections using this protocol on same VHOST as wsi ONLY + * - When: now + * - What: reason + */ +LWS_VISIBLE LWS_EXTERN int +lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len); + +LWS_VISIBLE LWS_EXTERN int +lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, + void *user, void *in, size_t len); + +/** + * lws_get_socket_fd() - returns the socket file descriptor + * + * You will not need this unless you are doing something special + * + * \param wsi: Websocket connection instance + */ LWS_VISIBLE LWS_EXTERN int lws_get_socket_fd(struct lws *wsi); -LWS_VISIBLE LWS_EXTERN int -lws_is_final_fragment(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN unsigned char -lws_get_reserved_bits(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int -lws_rx_flow_control(struct lws *wsi, int enable); - -LWS_VISIBLE LWS_EXTERN void -lws_rx_flow_allow_all_protocol(const struct lws_context *context, - const struct lws_protocols *protocol); - -LWS_VISIBLE LWS_EXTERN size_t -lws_remaining_packet_payload(struct lws *wsi); - -/* +/** + * lws_get_peer_write_allowance() - get the amount of data writeable to peer + * if known + * + * \param wsi: Websocket connection instance + * * if the protocol does not have any guidance, returns -1. Currently only * http2 connections get send window information from this API. But your code * should use it so it can work properly with any protocol. @@ -1704,7 +3428,7 @@ lws_remaining_packet_payload(struct lws *wsi); * of buffer space your OS can accept on this connection for a write action. * * This number represents the maximum you could send to the peer or intermediary - * on this connection right now without it complaining. + * on this connection right now without the protocol complaining. * * lws manages accounting for send window updates and payload writes * automatically, so this number reflects the situation at the peer or @@ -1712,126 +3436,512 @@ lws_remaining_packet_payload(struct lws *wsi); */ LWS_VISIBLE LWS_EXTERN size_t lws_get_peer_write_allowance(struct lws *wsi); +///@} -/* deprecated, use lws_client_connect_via_info() */ -LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT -lws_client_connect(struct lws_context *clients, const char *address, - int port, int ssl_connection, const char *path, - const char *host, const char *origin, const char *protocol, - int ietf_version_or_minus_one) LWS_WARN_DEPRECATED; -/* deprecated, use lws_client_connect_via_info() */ -LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT -lws_client_connect_extended(struct lws_context *clients, const char *address, - int port, int ssl_connection, const char *path, - const char *host, const char *origin, - const char *protocol, int ietf_version_or_minus_one, - void *userdata) LWS_WARN_DEPRECATED; +/** + * lws_rx_flow_control() - Enable and disable socket servicing for + * received packets. + * + * If the output side of a server process becomes choked, this allows flow + * control for the input side. + * + * \param wsi: Websocket connection instance to get callback for + * \param enable: 0 = disable read servicing for this connection, 1 = enable + */ +LWS_VISIBLE LWS_EXTERN int +lws_rx_flow_control(struct lws *wsi, int enable); -LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT -lws_client_connect_via_info(struct lws_client_connect_info * ccinfo); +/** + * lws_rx_flow_allow_all_protocol() - Allow all connections with this protocol to receive + * + * When the user server code realizes it can accept more input, it can + * call this to have the RX flow restriction removed from all connections using + * the given protocol. + * \param context: lws_context + * \param protocol: all connections using this protocol will be allowed to receive + */ +LWS_VISIBLE LWS_EXTERN void +lws_rx_flow_allow_all_protocol(const struct lws_context *context, + const struct lws_protocols *protocol); +/** + * lws_remaining_packet_payload() - Bytes to come before "overall" + * rx packet is complete + * \param wsi: Websocket instance (available from user callback) + * + * This function is intended to be called from the callback if the + * user code is interested in "complete packets" from the client. + * libwebsockets just passes through payload as it comes and issues a buffer + * additionally when it hits a built-in limit. The LWS_CALLBACK_RECEIVE + * callback handler can use this API to find out if the buffer it has just + * been given is the last piece of a "complete packet" from the client -- + * when that is the case lws_remaining_packet_payload() will return + * 0. + * + * Many protocols won't care becuse their packets are always small. + */ +LWS_VISIBLE LWS_EXTERN size_t +lws_remaining_packet_payload(struct lws *wsi); + + +/** \defgroup sock-adopt Socket adoption helpers + * ##Socket adoption helpers + * + * When integrating with an external app with its own event loop, these can + * be used to accept connections from someone else's listening socket. + * + * When using lws own event loop, these are not needed. + */ +///@{ + +/** + * lws_adopt_socket() - adopt foreign socket as if listen socket accepted it + * \param context: lws context + * \param accept_fd: fd of already-accepted socket to adopt + * + * Either returns new wsi bound to accept_fd, or closes accept_fd and + * returns NULL, having cleaned up any new wsi pieces. + * + * LWS adopts the socket in http serving mode, it's ready to accept an upgrade + * to ws or just serve http. + */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd); +/** + * lws_adopt_socket_readbuf() - adopt foreign socket and first rx as if listen socket accepted it + * \param context: lws context + * \param accept_fd: fd of already-accepted socket to adopt + * \param readbuf: NULL or pointer to data that must be drained before reading from + * accept_fd + * \param len: The length of the data held at \param readbuf + * + * Either returns new wsi bound to accept_fd, or closes accept_fd and + * returns NULL, having cleaned up any new wsi pieces. + * + * LWS adopts the socket in http serving mode, it's ready to accept an upgrade + * to ws or just serve http. + * + * If your external code did not already read from the socket, you can use + * lws_adopt_socket() instead. + * + * This api is guaranteed to use the data at \param readbuf first, before reading from + * the socket. + * + * readbuf is limited to the size of the ah rx buf, currently 2048 bytes. + */ +LWS_VISIBLE LWS_EXTERN struct lws * +lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, + const char *readbuf, size_t len); +///@} +/** \defgroup net Network related helper APIs + * ##Network related helper APIs + * + * These wrap miscellaneous useful network-related functions + */ +///@{ + +/** + * lws_canonical_hostname() - returns this host's hostname + * + * This is typically used by client code to fill in the host parameter + * when making a client connection. You can only call it after the context + * has been created. + * + * \param context: Websocket context + */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context); - +/** + * lws_get_peer_addresses() - Get client address information + * \param wsi: Local struct lws associated with + * \param fd: Connection socket descriptor + * \param name: Buffer to take client address name + * \param name_len: Length of client address name buffer + * \param rip: Buffer to take client address IP dotted quad + * \param rip_len: Length of client address IP buffer + * + * This function fills in name and rip with the name and IP of + * the client connected with socket descriptor fd. Names may be + * truncated if there is not enough room. If either cannot be + * determined, they will be returned as valid zero-length strings. + */ LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len); +/** + * lws_get_peer_simple() - Get client address information without RDNS + * + * \param wsi: Local struct lws associated with + * \param name: Buffer to take client address name + * \param namelen: Length of client address name buffer + * + * This provides a 123.123.123.123 type IP address in name from the + * peer that has connected to wsi + */ +LWS_VISIBLE LWS_EXTERN const char * +lws_get_peer_simple(struct lws *wsi, char *name, int namelen); +#ifndef LWS_WITH_ESP8266 +/** + * lws_interface_to_sa() - Convert interface name or IP to sockaddr struct + * + * \param ipv6: Allow IPV6 addresses + * \param ifname: Interface name or IP + * \param addr: struct sockaddr_in * to be written + * \param addrlen: Length of addr + * + * This converts a textual network interface name to a sockaddr usable by + * other network functions + */ LWS_VISIBLE LWS_EXTERN int -lws_get_random(struct lws_context *context, void *buf, int len); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_daemonize(const char *_lock_path); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_send_pipe_choked(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_partial_buffered(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_frame_is_binary(struct lws *wsi); - -LWS_VISIBLE LWS_EXTERN int -lws_is_ssl(struct lws *wsi); -#ifdef LWS_SHA1_USE_OPENSSL_NAME -#define lws_SHA1 SHA1 -#else -LWS_VISIBLE LWS_EXTERN unsigned char * -lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); +lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, + size_t addrlen); +///@} #endif -LWS_VISIBLE LWS_EXTERN int -lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); +/** \defgroup misc Miscellaneous APIs +* ##Miscellaneous APIs +* +* Various APIs outside of other categories +*/ +///@{ +/** + * lws_snprintf(): snprintf that truncates the returned length too + * + * \param str: destination buffer + * \param size: bytes left in destination buffer + * \param format: format string + * \param ...: args for format + * + * This lets you correctly truncate buffers by concatenating lengths, if you + * reach the limit the reported length doesn't exceed the limit. + */ LWS_VISIBLE LWS_EXTERN int -lws_b64_decode_string(const char *in, char *out, int out_size); +lws_snprintf(char *str, size_t size, const char *format, ...); +/** + * lws_get_random(): fill a buffer with platform random data + * + * \param context: the lws context + * \param buf: buffer to fill + * \param len: how much to fill + * + * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if + * it's interested to see if the frame it's dealing with was sent in binary + * mode. + */ +LWS_VISIBLE LWS_EXTERN int +lws_get_random(struct lws_context *context, void *buf, int len); +/** + * lws_daemonize(): fill a buffer with platform random data + * + * \param _lock_path: the filepath to write the lock file + * + * Spawn lws as a background process, taking care of various things + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_daemonize(const char *_lock_path); +/** + * lws_get_library_version(): return string describing the version of lws + * + * On unix, also includes the git describe + */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_get_library_version(void); +/** + * lws_wsi_user() - get the user data associated with the connection + * \param wsi: lws connection + * + * Not normally needed since it's passed into the callback + */ +LWS_VISIBLE LWS_EXTERN void * +lws_wsi_user(struct lws *wsi); + +/** + * lws_parse_uri: cut up prot:/ads:port/path into pieces + * Notice it does so by dropping '\0' into input string + * and the leading / on the path is consequently lost + * + * \param p: incoming uri string.. will get written to + * \param prot: result pointer for protocol part (https://) + * \param ads: result pointer for address part + * \param port: result pointer for port part + * \param path: result pointer for path part + */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path); -/* - * Access to http headers - * - * In lws the client http headers are temporarily malloc'd only for the - * duration of the http part of the handshake. It's because in most cases, - * the header content is ignored for the whole rest of the connection lifetime - * and would then just be taking up space needlessly. - * - * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time - * the http headers are still allocated, you can use these apis then to - * look at and copy out interesting header content (cookies, etc) - * - * Notice that the header total length reported does not include a terminating - * '\0', however you must allocate for it when using the _copy apis. So the - * length reported for a header containing "123" is 3, but you must provide - * a buffer of length 4 so that "123\0" may be copied into it, or the copy - * will fail with a nonzero return code. +/** + * lws_now_secs(): return seconds since 1970-1-1 */ +LWS_VISIBLE LWS_EXTERN unsigned long +lws_now_secs(void); -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); - -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); - -/* - * copies the whole, aggregated header, even if it was delivered in - * several actual headers piece by piece +/** + * lws_get_context - Allow geting lws_context from a Websocket connection + * instance + * + * With this function, users can access context in the callback function. + * Otherwise users may have to declare context as a global variable. + * + * \param wsi: Websocket connection instance */ -LWS_VISIBLE LWS_EXTERN int -lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); - -/* - * copies only fragment frag_idx of a header. Normally this is only useful - * to parse URI arguments like ?x=1&y=2, token index WSI_TOKEN_HTTP_URI_ARGS - * fragment 0 will contain "x=1" and fragment 1 "y=2" - */ -LWS_VISIBLE LWS_EXTERN int -lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, - enum lws_token_indexes h, int frag_idx); - - -/* get the active file operations struct */ -LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT -lws_get_fops(struct lws_context *context); - LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi); +/** + * lws_get_count_threads(): how many service threads the context uses + * + * \param context: the lws context + * + * By default this is always 1, if you asked for more than lws can handle it + * will clip the number of threads. So you can use this to find out how many + * threads are actually in use. + */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context); +/** + * lws_get_parent() - get parent wsi or NULL + * \param wsi: lws connection + * + * Specialized wsi like cgi stdin/out/err are associated to a parent wsi, + * this allows you to get their parent. + */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_get_parent(const struct lws *wsi); + +/** + * lws_get_child() - get child wsi or NULL + * \param wsi: lws connection + * + * Allows you to find a related wsi from the parent wsi. + */ +LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT +lws_get_child(const struct lws *wsi); + + /* - * Wsi-associated File Operations access helpers + * \deprecated DEPRECATED Note: this is not normally needed as a user api. + * It's provided in case it is + * useful when integrating with other app poll loop service code. + */ +LWS_VISIBLE LWS_EXTERN int +lws_read(struct lws *wsi, unsigned char *buf, size_t len); + +/** + * lws_set_allocator() - custom allocator support + * + * \param realloc + * + * Allows you to replace the allocator (and deallocator) used by lws + */ +LWS_VISIBLE LWS_EXTERN void +lws_set_allocator(void *(*realloc)(void *ptr, size_t size)); +///@} + +/** \defgroup wsstatus Websocket status APIs + * ##Websocket connection status APIs + * + * These provide information about ws connection or message status + */ +///@{ +/** + * lws_send_pipe_choked() - tests if socket is writable or not + * \param wsi: lws connection + * + * Allows you to check if you can write more on the socket + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_send_pipe_choked(struct lws *wsi); + +/** + * lws_is_final_fragment() - tests if last part of ws message + * \param wsi: lws connection + */ +LWS_VISIBLE LWS_EXTERN int +lws_is_final_fragment(struct lws *wsi); + +/** + * lws_get_reserved_bits() - access reserved bits of ws frame + * \param wsi: lws connection + */ +LWS_VISIBLE LWS_EXTERN unsigned char +lws_get_reserved_bits(struct lws *wsi); + +/** + * lws_partial_buffered() - find out if lws buffered the last write + * \param wsi: websocket connection to check + * + * Returns 1 if you cannot use lws_write because the last + * write on this connection is still buffered, and can't be cleared without + * returning to the service loop and waiting for the connection to be + * writeable again. + * + * If you will try to do >1 lws_write call inside a single + * WRITEABLE callback, you must check this after every write and bail if + * set, ask for a new writeable callback and continue writing from there. + * + * This is never set at the start of a writeable callback, but any write + * may set it. + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_partial_buffered(struct lws *wsi); + +/** + * lws_frame_is_binary(): true if the current frame was sent in binary mode + * + * \param wsi: the connection we are inquiring about + * + * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if + * it's interested to see if the frame it's dealing with was sent in binary + * mode. + */ +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT +lws_frame_is_binary(struct lws *wsi); + +/** + * lws_is_ssl() - Find out if connection is using SSL + * \param wsi: websocket connection to check + * + * Returns 0 if the connection is not using SSL, 1 if using SSL and + * using verified cert, and 2 if using SSL but the cert was not + * checked (appears for client wsi told to skip check on connection) + */ +LWS_VISIBLE LWS_EXTERN int +lws_is_ssl(struct lws *wsi); +/** + * lws_is_cgi() - find out if this wsi is running a cgi process + * \param wsi: lws connection + */ +LWS_VISIBLE LWS_EXTERN int +lws_is_cgi(struct lws *wsi); +///@} + + +/** \defgroup sha SHA and B64 helpers + * ##SHA and B64 helpers + * + * These provide SHA-1 and B64 helper apis + */ +///@{ +#ifdef LWS_SHA1_USE_OPENSSL_NAME +#define lws_SHA1 SHA1 +#else +/** + * lws_SHA1(): make a SHA-1 digest of a buffer + * + * \param d: incoming buffer + * \param n: length of incoming buffer + * \param md: buffer for message digest (must be >= 20 bytes) + * + * Reduces any size buffer into a 20-byte SHA-1 hash. + */ +LWS_VISIBLE LWS_EXTERN unsigned char * +lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); +#endif +/** + * lws_b64_encode_string(): encode a string into base 64 + * + * \param in: incoming buffer + * \param in_len: length of incoming buffer + * \param out: result buffer + * \param out_size: length of result buffer + * + * Encodes a string using b64 + */ +LWS_VISIBLE LWS_EXTERN int +lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); +/** + * lws_b64_decode_string(): decode a string from base 64 + * + * \param in: incoming buffer + * \param out: result buffer + * \param out_size: length of result buffer + * + * Decodes a string using b64 + */ +LWS_VISIBLE LWS_EXTERN int +lws_b64_decode_string(const char *in, char *out, int out_size); +///@} + + +/*! \defgroup cgi cgi handling + * + * ##CGI handling + * + * These functions allow low-level control over stdin/out/err of the cgi. + * + * However for most cases, binding the cgi to http in and out, the default + * lws implementation already does the right thing. + */ +#ifdef LWS_WITH_CGI +enum lws_enum_stdinouterr { + LWS_STDIN = 0, + LWS_STDOUT = 1, + LWS_STDERR = 2, +}; + +enum lws_cgi_hdr_state { + LCHS_HEADER, + LCHS_CR1, + LCHS_LF1, + LCHS_CR2, + LCHS_LF2, + LHCS_PAYLOAD, + LCHS_SINGLE_0A, +}; + +struct lws_cgi_args { + struct lws **stdwsi; /**< get fd with lws_get_socket_fd() */ + enum lws_enum_stdinouterr ch; /**< channel index */ + unsigned char *data; /**< for messages with payload */ + enum lws_cgi_hdr_state hdr_state; /**< track where we are in cgi headers */ + int len; /**< length */ +}; + + +/** + * lws_cgi: spawn network-connected cgi process + * + * \param wsi: connection to own the process + * \param exec_array: array of "exec-name" "arg1" ... "argn" NULL + * \param script_uri_path_len: how many chars on the left of the uri are the path to the cgi + * \param timeout_secs: seconds script should be allowed to run + * \param mp_cgienv: pvo list with per-vhost cgi options to put in env + */ +LWS_VISIBLE LWS_EXTERN int +lws_cgi(struct lws *wsi, const char * const *exec_array, + int script_uri_path_len, int timeout_secs, + const struct lws_protocol_vhost_options *mp_cgienv); + +/** + * lws_cgi_write_split_stdout_headers: write cgi output accounting for header part + * + * \param wsi: connection to own the process + */ +LWS_VISIBLE LWS_EXTERN int +lws_cgi_write_split_stdout_headers(struct lws *wsi); + +/** + * lws_cgi_kill: terminate cgi process associated with wsi + * + * \param wsi: connection to own the process + */ +LWS_VISIBLE LWS_EXTERN int +lws_cgi_kill(struct lws *wsi); +#endif +///@} + + +/*! \defgroup fops file operation wrapping + * + * ##File operation wrapping * * Use these helper functions if you want to access a file from the perspective * of a specific wsi, which is usually the case. If you just want contextless @@ -1844,7 +3954,51 @@ lws_get_count_threads(struct lws_context *context); * The advantage from all this is user code can be portable for file operations * without having to deal with differences between platforms. */ +//@{ +/** struct lws_plat_file_ops - Platform-specific file operations + * + * These provide platform-agnostic ways to deal with filesystem access in the + * library and in the user code. + */ +struct lws_plat_file_ops { + lws_filefd_type (*open)(struct lws *wsi, const char *filename, + unsigned long *filelen, int flags); + /**< Open file (always binary access if plat supports it) + * filelen is filled on exit to be the length of the file + * flags should be set to O_RDONLY or O_RDWR */ + int (*close)(struct lws *wsi, lws_filefd_type fd); + /**< close file */ + unsigned long (*seek_cur)(struct lws *wsi, lws_filefd_type fd, + long offset_from_cur_pos); + /**< seek from current position */ + int (*read)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len); + /**< Read from file, on exit *amount is set to amount actually read */ + int (*write)(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, + unsigned char *buf, unsigned long len); + /**< Write to file, on exit *amount is set to amount actually written */ + + /* Add new things just above here ---^ + * This is part of the ABI, don't needlessly break compatibility */ +}; + +/** + * lws_get_fops() - get current file ops + * + * \param context: context + */ +LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT +lws_get_fops(struct lws_context *context); + +/** + * lws_plat_file_open() - file open operations + * + * \param wsi: connection doing the opening + * \param filename: filename to open + * \param filelen: length of file (filled in by call) + * \param flags: open flags + */ static LWS_INLINE lws_filefd_type LWS_WARN_UNUSED_RESULT lws_plat_file_open(struct lws *wsi, const char *filename, unsigned long *filelen, int flags) @@ -1853,18 +4007,39 @@ lws_plat_file_open(struct lws *wsi, const char *filename, filelen, flags); } +/** + * lws_plat_file_close() - close file + * + * \param wsi: connection opened by + * \param fd: file descriptor + */ static LWS_INLINE int lws_plat_file_close(struct lws *wsi, lws_filefd_type fd) { return lws_get_fops(lws_get_context(wsi))->close(wsi, fd); } +/** + * lws_plat_file_seek_cur() - close file + * + * \param wsi: connection opened by + * \param fd: file descriptor + * \param offset: position to seek to + */ static LWS_INLINE unsigned long lws_plat_file_seek_cur(struct lws *wsi, lws_filefd_type fd, long offset) { return lws_get_fops(lws_get_context(wsi))->seek_cur(wsi, fd, offset); } - +/** + * lws_plat_file_read() - read from file + * + * \param wsi: connection opened by + * \param fd: file descriptor + * \param amount: how much to read (rewritten by call) + * \param buf: buffer to write to + * \param len: max length + */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) @@ -1872,7 +4047,15 @@ lws_plat_file_read(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, return lws_get_fops(lws_get_context(wsi))->read(wsi, fd, amount, buf, len); } - +/** + * lws_plat_file_write() - write from file + * + * \param wsi: connection opened by + * \param fd: file descriptor + * \param amount: how much to write (rewritten by call) + * \param buf: buffer to read from + * \param len: max length + */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, unsigned char *buf, unsigned long len) @@ -1880,34 +4063,131 @@ lws_plat_file_write(struct lws *wsi, lws_filefd_type fd, unsigned long *amount, return lws_get_fops(lws_get_context(wsi))->write(wsi, fd, amount, buf, len); } +//@} -/* - * Note: this is not normally needed as a user api. It's provided in case it is - * useful when integrating with other app poll loop service code. +/** \defgroup smtp + * \ingroup lwsapi + * ##SMTP related functions + * + * These apis let you communicate with a local SMTP server to send email from + * lws. It handles all the SMTP sequencing and protocol actions. + * + * Your system should have postfix, sendmail or another MTA listening on port + * 25 and able to send email using the "mail" commandline app. Usually distro + * MTAs are configured for this by default. + * + * It runs via its own libuv events if initialized (which requires giving it + * a libuv loop to attach to). + * + * It operates using three callbacks, on_next() queries if there is a new email + * to send, on_get_body() asks for the body of the email, and on_sent() is + * called after the email is successfully sent. + * + * To use it + * + * - create an lws_email struct + * + * - initialize data, loop, the email_* strings, max_content_size and + * the callbacks + * + * - call lws_email_init() + * + * When you have at least one email to send, call lws_email_check() to + * schedule starting to send it. + */ +//@{ +#ifdef LWS_WITH_SMTP + +/** enum lwsgs_smtp_states - where we are in SMTP protocol sequence */ +enum lwsgs_smtp_states { + LGSSMTP_IDLE, /**< awaiting new email */ + LGSSMTP_CONNECTING, /**< opening tcp connection to MTA */ + LGSSMTP_CONNECTED, /**< tcp connection to MTA is connected */ + LGSSMTP_SENT_HELO, /**< sent the HELO */ + LGSSMTP_SENT_FROM, /**< sent FROM */ + LGSSMTP_SENT_TO, /**< sent TO */ + LGSSMTP_SENT_DATA, /**< sent DATA request */ + LGSSMTP_SENT_BODY, /**< sent the email body */ + LGSSMTP_SENT_QUIT, /**< sent the session quit */ +}; + +/** struct lws_email - abstract context for performing SMTP operations */ +struct lws_email { + void *data; + /**< opaque pointer set by user code and available to the callbacks */ + uv_loop_t *loop; + /**< the libuv loop we will work on */ + + char email_smtp_ip[32]; /**< Fill before init, eg, "127.0.0.1" */ + char email_helo[32]; /**< Fill before init, eg, "myserver.com" */ + char email_from[100]; /**< Fill before init or on_next */ + char email_to[100]; /**< Fill before init or on_next */ + + unsigned int max_content_size; + /**< largest possible email body size */ + + /* Fill all the callbacks before init */ + + int (*on_next)(struct lws_email *email); + /**< (Fill in before calling lws_email_init) + * called when idle, 0 = another email to send, nonzero is idle. + * If you return 0, all of the email_* char arrays must be set + * to something useful. */ + int (*on_sent)(struct lws_email *email); + /**< (Fill in before calling lws_email_init) + * called when transfer of the email to the SMTP server was + * successful, your callback would remove the current email + * from its queue */ + int (*on_get_body)(struct lws_email *email, char *buf, int len); + /**< (Fill in before calling lws_email_init) + * called when the body part of the queued email is about to be + * sent to the SMTP server. */ + + + /* private things */ + uv_timer_t timeout_email; /**< private */ + enum lwsgs_smtp_states estate; /**< private */ + uv_connect_t email_connect_req; /**< private */ + uv_tcp_t email_client; /**< private */ + time_t email_connect_started; /**< private */ + char email_buf[256]; /**< private */ + char *content; /**< private */ +}; + +/** + * lws_email_init() - Initialize a struct lws_email + * + * \param email: struct lws_email to init + * \param loop: libuv loop to use + * \param max_content: max email content size + * + * Prepares a struct lws_email for use ending SMTP */ LWS_VISIBLE LWS_EXTERN int -lws_read(struct lws *wsi, unsigned char *buf, size_t len); +lws_email_init(struct lws_email *email, uv_loop_t *loop, int max_content); -#ifndef LWS_NO_EXTENSIONS -/* Deprecated +/** + * lws_email_check() - Request check for new email * - * There is no longer a set internal extensions table. The table is provided - * by user code along with application-specific settings. See the test - * client and server for how to do. - */ -static LWS_INLINE LWS_WARN_DEPRECATED const struct lws_extension * -lws_get_internal_extensions() { return NULL; } -LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT -lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, - void *ext_user, const struct lws_ext_options *opts, - const char *o, int len); -#endif - -/* - * custom allocator support + * \param email: struct lws_email context to check + * + * Schedules a check for new emails in 1s... call this when you have queued an + * email for send. */ LWS_VISIBLE LWS_EXTERN void -lws_set_allocator(void *(*realloc)(void *ptr, size_t size)); +lws_email_check(struct lws_email *email); +/** + * lws_email_destroy() - stop using the struct lws_email + * + * \param email: the struct lws_email context + * + * Stop sending email using email and free allocations + */ +LWS_VISIBLE LWS_EXTERN void +lws_email_destroy(struct lws_email *email); + +#endif +//@} #ifdef __cplusplus } diff --git a/android/armeabi-v7a/include/websockets/lws_config.h b/android/armeabi-v7a/include/websockets/lws_config.h index d55fd8e1..bf49e46e 100644 --- a/android/armeabi-v7a/include/websockets/lws_config.h +++ b/android/armeabi-v7a/include/websockets/lws_config.h @@ -6,6 +6,8 @@ #endif #endif +#define LWS_INSTALL_DATADIR "/Users/james/Project/cocos2d-x-3rd-party-libs-src/contrib/install-android/arm/share" + /* Define to 1 to use wolfSSL/CyaSSL as a replacement for OpenSSL. * LWS_OPENSSL_SUPPORT needs to be set also for this to work. */ /* #undef USE_WOLFSSL */ @@ -14,20 +16,27 @@ (older) CyaSSL library */ /* #undef USE_OLD_CYASSL */ -/* The Libwebsocket version */ -#define LWS_LIBRARY_VERSION "1.7.8" +/* #undef LWS_USE_MBEDTLS */ +/* #undef LWS_USE_POLARSSL */ +/* #undef LWS_WITH_ESP8266 */ -#define LWS_LIBRARY_VERSION_MAJOR 1 -#define LWS_LIBRARY_VERSION_MINOR 7 -#define LWS_LIBRARY_VERSION_PATCH 8 +/* #undef LWS_WITH_PLUGINS */ +/* #undef LWS_WITH_NO_LOGS */ + +/* The Libwebsocket version */ +#define LWS_LIBRARY_VERSION "2.1.0" + +#define LWS_LIBRARY_VERSION_MAJOR 2 +#define LWS_LIBRARY_VERSION_MINOR 1 +#define LWS_LIBRARY_VERSION_PATCH 0 /* LWS_LIBRARY_VERSION_NUMBER looks like 1005001 for e.g. version 1.5.1 */ #define LWS_LIBRARY_VERSION_NUMBER (LWS_LIBRARY_VERSION_MAJOR*1000000)+(LWS_LIBRARY_VERSION_MINOR*1000)+LWS_LIBRARY_VERSION_PATCH /* The current git commit hash that we're building from */ -#define LWS_BUILD_HASH "linwenhai@LindeMacBook-Pro.local-v3.4-49-g9369eea" +#define LWS_BUILD_HASH "james@James-Chen.local-v3.4-138-g60b1a6f" /* Build with OpenSSL support */ -/* #undef LWS_OPENSSL_SUPPORT */ +#define LWS_OPENSSL_SUPPORT /* The client should load and trust CA root certs it finds in the OS */ #define LWS_SSL_CLIENT_USE_OS_CA_CERTS @@ -47,6 +56,9 @@ /* Build with support for ipv6 */ #define LWS_USE_IPV6 +/* Build with support for UNIX domain socket */ +/* #undef LWS_USE_UNIX_SOCK */ + /* Build with support for HTTP2 */ /* #undef LWS_USE_HTTP2 */ @@ -73,11 +85,33 @@ /* SSL server using ECDH certificate */ /* #undef LWS_SSL_SERVER_WITH_ECDH_CERT */ +#define LWS_HAVE_SSL_CTX_set1_param +#define LWS_HAVE_X509_VERIFY_PARAM_set1_host + +/* #undef LWS_HAVE_UV_VERSION_H */ + +/* CGI apis */ +/* #undef LWS_WITH_CGI */ /* whether the Openssl is recent enough, and / or built with, ecdh */ -/* #undef LWS_HAVE_OPENSSL_ECDH_H */ +#define LWS_HAVE_OPENSSL_ECDH_H + +/* HTTP Proxy support */ +/* #undef LWS_WITH_HTTP_PROXY */ + +/* Http access log support */ +/* #undef LWS_WITH_ACCESS_LOG */ +/* #undef LWS_WITH_SERVER_STATUS */ + +/* #undef LWS_WITH_STATEFUL_URLDECODE */ /* Maximum supported service threads */ #define LWS_MAX_SMP 32 +/* Lightweight JSON Parser */ +/* #undef LWS_WITH_LEJP */ + +/* SMTP */ +/* #undef LWS_WITH_SMTP */ + diff --git a/android/armeabi-v7a/libcrypto.a b/android/armeabi-v7a/libcrypto.a new file mode 100644 index 0000000000000000000000000000000000000000..e2f1fd04f7ebabe8228f58a28ee7f6bc630d06c2 GIT binary patch literal 3295330 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

0E!him36%xSCmJ)lJI~G+DPvh%V<;n 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Ν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�oKszjvQ3u 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

*iP@*k-e zT66hxt2w$hiMgx5Cc_KjL=b@8Wq7*>wKen@|DW4-|hr=q|-|ms zcLw|)hc3h4p#M_`_A_;`@d|D6X#pr#S zw;X&AwzNJ$w;ERq{s4y;qdr)h^KbNdxy9ZUyI87`OIHY;q62ENqOu?bp%R$FAwkrKFP!BmKg*Xt=cA(kDXLfHgWpcX%i>2 z(t%^42=Y@48{}?xEBO~P=vhS`NWm+#;HP+^my_A)6bLYGVtGZG*^&fPLUU|aGAkll zWoErZLhqBOmT?x*w4Y`!n|NUhX3>FIJ(+*Hv|IB@=5yEe4N6bh^>2*2aCF55LAodh2 zkE3jY6F_TUw1H3V-gr-I5i}kYR$079$Yknriz_XzwWx7|{OiFk;8xLu-)?cI#cuT1 z;w!M&%cAy<%6*i@383Ps79C;Dg~hoRS6kE?O!;g4Cfq4Jh;b6*8)1P(vwsd+<0!2u zxkq>~YX*dec_qO}yG zl(lR^!mk$gVC*Dhp~40s{Ct!SGl~wOkfTgoV&rJ0n_aW^#*I^JLwJ zSoe8CqYlv3@KFn@F>1qA#~KzrNToP_gP#9D!%0w&6*nG-6Vf7 zodLS^oFzohITrIQnl(1K7mM!Cm|lqfD~0IathGU|<)Vpiz2#%l!pN&vEy=BYg2H?u z<)k$?;@8?5Q_e!tiCe4_lHPhD>1`5{p4m4@elr-WD&M(6%C|sByrYD~yGTgBmI!4( z7FP=gG4>P^?*<|9W@~JV`w)vY7Hfsr*AgM|uNM;kX5q=mk>$}5A?f7{Nw2_Sk;Nev zM_MeiSZQ&F#pOcsy;ey6>Md>;o?c!uTY4;P%4fj9ZEfsau@c-euT(dDje#y->Ji}d(qvz zc06?;`4`>KYtK^$c<n5G_>~tb<1MM>TC-77roGZF(j};hhKej5LRZl?p8geHd>Pzb zxkaaO>#Fs|C0c&E4(AsCFY&27g7K}v&0S8uC=P!4qS#`DfU*z7Ovu-pXT^ufnya{@ zXDgO8eDaTR3l*=f3iuB89?gIG=|=SijU)eVgwKD8N7qDd@>*#K{)taIaF^p#aHkXb zJ%hu=jtO*p!c?Do;hvN|8KpWK+m~L#+|r3Zz8y@6wWV)xmy3_#&gjVu#eVJDwH`+w z7cKmiYuC2Ze{v=E(Q55lHtRQ--`*nBd^PfBYK@BKyxn(VtxMtCf?1E|_`~pOE}ZWH z4PpDumZD}oK&+_~bM0nMojLgP6o zzPh0n8{9(kx@9~!=CY-ndoS*>+%!2`XnwX}&s%;ZUgf7v#C$u@{w=e1q8oYJ#`kco z^`q%A-yNLWVXTWtC6A%#>}KaCKF)yboJRgQ!?027CiML(!n5L!@a;+8-f8~nT^AZV zpv%ZKx}>~lKFvB0BMag5y@GF%iS<+rYcloiEHCDLZ_zh8t-%Yy>&jC0!`>sN6^A!H zX3`n1eZWSh+=$(?T^VbnNjB+bl_DqKz0$e$?KL~X_ZP)mlZ;dLN|(ZSPWH%>etL{N z*vSXKe->qt6 zjeL*Vs5H|lGxxpJ@fBG<*84R)qif zosoK0)5F+DY6N+(F}^>ubUP`}dd{F!KBRBfMrk-dy;x-$j4AfM84j@5~HZbOzl z%EROx9mozM=)}dLa}!;;paY{L<5!B#h|4_JSj7J3!0*;0ghI0uvMAnk=v?xX2uJ$Z z(8lzTU4uZr$!}*zrx(pekFD!HWb-L~^8U3kw{(7^_UD=JcckV2Hq8FFgx!s{_F?2E zJ+*IM9=y7fO*}c3^BbkBb`kVZ>a8&$ev=p4%m&)Y&QIEXc{7go_8NZ?jyK&*nYgu> zYP&cma7%X0V!j)C>mN)ylMHV^8Ww0)HY<*B;bd^9@D50fACt9Hq^Mo^X0K1hYP%Fja9~*>ZnVyO;=}Y*;6dp+7Sn5 znr`I#a?{)ZPnnO0eXSc^U2^((fV9&oQ=KK~kGs?tE>1X=ht93#M;X!m@TPIdC0cpO zU@d{%RnPP4Z2MapYouRF)=lbO2kFhOZBqJ1hMHJo8{GB0jeW}74pbSZ)hq7|%@cKX z)1FJIo2-4HEnW|g`1_;J9Jz%mo7%8Woj#MgY3n*=eUr-68zGRBy8I&;_#<24Lt^J zCW}0%&OBq!8I)|B&@KAiqB2o<*|O?-yJ%7-)*l(&`q$Y!M*NAkFvb`rHow`~iuN&w zh+AutoQ}|0!+nHNyy}D1ruf^XrKF*?BnqcK!*3tO#HTzf4)nZH?OHDB$*ot%WLf1O z;PIt|;!REeCa=Eu{QW|@jZf_*ZSY3PqP)0vf_4sfY!LtS&>0<5D&uM7rPE%VXK8d# zTe-XJ1wBcha+9vJN?8ws9!0CI2~!_ail|S-FPY`8c++SLjeUV~b9ystN$Y55J9_otNU)$gysZdZ4_eM9@zp-brI{ zSKe+6uC>YWyZ>8;;(ajSe4pX14< zFJ-MxXZE3(_W|4!sIh*8v8?*ej2L6HFm_o=c_X*t)A%emN;_FJzd487#i?{7>%1|% z_%s&JGQ3`SYu%XE>1^4laZ;>7>)rMtABvafM)gOEOMc3q%3tN|Y+iYA@xM-6svPe^mO{q$dPjEeJJLJ$=(RhgzOpoB;`W4a zR!QjePAO5!lyetM8APwbnnrLgF=atI%A>Pq`Qyo0o<5r$#gui6eIY7)y$AiDE{D04 zgJhwcO>tw)V_O~by|coQ?pE+eL5w}+ZWPyH;=9(FM1#U(W}!NYb^bDOIKQYsik99-8PW+sD6Q|zk7t9-8_hTol`fTzJK{<(H{POGxZp^d1m}#^viglKjm(oiN8B` z?A!<9F5P8>llyEmRu9+2Ut~Ir@wiuCQo=Qf_jI|@?s;Wb8EZU{IOZ)_+PpmyZ)#tA zL%r6On)u_f#$x;i(RL_ILEMgCDQ~8dGc`^XUnG70<_!7`joHz6i~b_SSv1sH+E&*0 zVhh`@er9u`-z6`ce`E61wuW%j!M}(@`BRvkJnMX(_Ff*1Jo590bNT9F({t^i z7|~1gp1HsO|0=C!Z;f#N?|;X9@1&;JCjfJTnMK{!|{8V;J z;8*;57nWab#EoyUCF;2POV__vqpNECrRUVh4fT32_UrQl#>1k`7?${*p8tkE8Mifk zhz`!Mau!%QC1YRm;_8!RaOtkJdb$R^UCUi5U2*4eyShV}GEaGGV;lDVX2s?=pDx{% zdUB;!S{bn4VYYranfO+a7$3@xHJ*|_68S0O_X@CIr`LSO>8jf**Pvd*y?51X$d2o^ z_FuZ)?$fL0RgDc7d1Dv7bNkD)0exkJJlX5ed0jx~t~}HRaK_R`wHzy~di@%dt`AE`N;|)1y}>-sRSirrh=3rEpG9lv}5l7|*Wum0ho&DLa=pomrc~ z?aFQyWv089dmeW;Zq4ti{ZkogFPX}aadETCajeR*(w1Y5m8Uk=c#f~!l>dm2ZnYd~ zL#bn(RbO3M#($cC zek9h*`^$R+?(V%iyW`U4Y~uIVF@O8YZxd18XEYtGJh4|=<-VD6-%Oc^PvP{g?k{)d zem1tjP5xfF&rOs&XJr|g)JH0uzuf;sxic@TwoYeWCF*X?&y>H@M=3Iu{)|kwBa`IO zZ#}dn-SlWurbWo4_EPIOYkW4Ob)dR8VLKbR)fO{B>VrB-bweH~Vh)UZgfkGW^=U+ss8o+!!j>^q=bO)5Q}rKl^yZ zDO%Xp^|0xze>+~R=8Abg18F?v2WdR})4&X?ET1xB#E?k;zLC)tBM*?*B0NpD< zpBkXY1nBbv^tA!{<^cV0fPN}KzZ#%F4bUh#aVbA}0XiC>ivskp0R2mQu;vH&9}dt@ z1?cwz^p^qp#{j)gdLlb!jhEIiyG!{yCO{7h(B}l`iU56OfL;=ymj~#l1N7?w`n>@C zd4S##pm+0CA>~Ks6}n4wj{w~#K%X9?HHgB4baC2=+gr9m;gOFKwlA{uMN;k1N6!O{bGQAKR~l+!t@t4v@6u;USq4KnQb@bq*ff+X5^1cF8s(-ODBahu{k+xiqj`v zBAJZ0q%7lC-;I>U<$^Ja-1$RUZ-2g8hESFq7lKSLXY(FE-sQIQB+^M}!==;G!9;`F z*a^qagZ0qAo<1=WK1a!ipV%AH_h{#>TqOLDk=L=Ii9O3o`uC0D#YUb}csXGw(kcDV z($9lMz0F6?#r@)ze6^cySf7(irj9wU=ah+MV)0Ja#iL{l<)96RB~vKxq?a~Kjh;TG zN6EN~(c@jDax`0t|h5DX4qGZIx z@l(pD4W2S?s+S?&pg1Yn1x9dXf=!uh%$qoVVwprYEOI7aJ;`5apN-l8W*v$E1yf!=P0F0ubE@piyrG|>vhvDd z^5_cQX}!ot6b~Ofbf9MeiHJ;M0TXIrKhvj}j3Xj@SjU%7uNrf)sT4BkWGN+hJl$Cy zU)EJ)rniv8>dq+3ie^kr=VyebdetS7orJv7Z-T&>dys3@_M{{G3;9Jpvn8|=(m@Hka`938Q-?Yr1bcW1<1E8$-R;r0jx9*FgE| zz9v_wue8pp1chG9Zw%eG6TZgGRrS&IE8{5)U*qQ6frzvByNXKPWFdBXpG5QGMVX_QSUZ#A0j-LeOJN~^dm&B8NyP=XTs6QB^-lX!m;c( z6PB@GN=Q07Pa?P6?%y1TyrRdm&Ok`{gc-gmy{M246GMdLbEJ@os~RD4EEA&VI^iU~ ztq3bPJKWM)jEQq66OWK|`w7vT#_H1V3?bn)_Lkl@2+>Eq^*3ju_h(K`^c3!P-0++I zn^T!z5sjRSEo%Q}E(1{Q-^@K9yRhyY_7uvUhP?^VQ@(H@6y^Tmm@^JA|ZSug_jYJ@N&MF3emsW*Qs(B zjs9N|UcvVWA>lMnsrr$_EzGr;Z!v1I$fEXrif<&h^ic|SsbNmu(lacYeV{Y34@<8R zUP<{1PbOXADb$ZF5Pjx?U9MtoLO6@~nj2}D})vA|+6XzWEue)QXtl4FLDeANoc*D~QG>_$jFHduPAkbIvQRAsyi`%120iIeUYopD!f+K|HQn;A@Oenec0g1Pp5WYb|{53yr^lNc~Q2G@fgMNkN zqe@6Vs)giZhVWSWJ?kC^CEscx`CBU_f18B2&>jiNUruKbxr>CzQz|5%mBNw8FT9m< z6yAnC3gO!>B%fK#$4mYqi=%|(qe@6Vms$5U)?M@WDvu39r`-|mMLfcTh(}m}9SRA|VrnuvV9q#HKEmA6iPIgA zp)j_yuL{auEmOO8na??>SiGJyy7``?{BDHyOOTDs z0-t*!&)Tn{FlpwOSl+f`vX8+MCijYw^E-a4CYb{$R{Yrs-VJz2AS`den@rAbQ2ySGnXnv_hZ zH|!#_z~+PeWft0ekUx_T@<7XVMicydg`#tKKC?+-Ox~kcC-OHSkiX}DB7fV^eb!Ip z&z)EXmaRYR-nbnb0#s7CAiwwQWsd2+)u6K-BSOFwBDkB^pqqCT4Sr>PMi zZPM}4CXFPWVZz@~Ul_eAk!FU812^_}CSQ z?54H3oYNi(dFQ(8w*Zir{eDS%55>J_)tyj{)=gjCJdS8rBthVOO#@zqhYmB-i=Hn{@uY z2`jm3wI22AX4V&EI@wu`)tq>)i8bDjYzh84@n6%t4*m(GmBw!k-@|jMeV)U!!MFS${d7XD6G|S;yXb z?P=C}M@ApnUVY>I&1Yj^FUDtLdZliEH`YZQ~ZjEn3ruQ9#p+ zJ=nW}J>;?0J7WdyLLKt64@B+NO5&-$TKQ&8Y7J{>Nw?w112~Z0oNx90W9WRH@iq%bf$|(~b z>BX(#bUN1_kBgBZLEH99dZ4ax_J_AGRbfMsSYu!1!}cdDc-EQl@=Js#PpfechuvO2 z{l3$z=D+yUfQL4Uv)7Y6+3+;tCcEAjd)~o5e$}1rc0a%5Q2lXrHww=t%d^4q+={=y zju^XKLAlnVm(x8xwTazOueFY~?Dd!2(vRp_mJaG^mQAC^rXe}<_e!=QpR<2<0%5)O zh4Uk#lsi1>@F;%%d36&#OD~~XZ?C@e+a5mIwb3m)xdG|{hHSwieo{;5H zzIXGr4d%DMYp`?5Qg*2`Fl4_Y(b>8@^os3EPRTqfduj9egp~|W`(!e4debn94W{0!gk;VWI~*<*(lH`MDl1B#JFa+&;7$1-@(EJCFzEMfostkq`W-hn`N^zrN*1bRaw0W`B=dy3Byj<>B|_ zS#5!2$e?bj?&-JK29bvLPntT#IR)~cc_eZ9bQkI5waN0EL_Am7JudTXTGH1}_VK&4 z#=v9N+mknwXHyTZZhq*8A3Jxn?R~LNPJfwJ5w;h8%1fc;i4(V<=VW*ymM7O2kE;`| z&lwG0h&*|F{aWfz=T}I!p6ITg^9hvRCQv$#2GZ+JJgWD(>~)CHw#v?2z6NNVR1WH6YnjVdA2=LIToYW zHr9sod};f2_Ac>e;V1brEKjgLeTjU9tiN~m7Q*huqr6B)<)K4OyaB~+>14~X&aS8T z+nck?6!@H;)TbVZ+|uFhp#__zv)w~An-6ZmbG7BUsreGz-Cn9vUmAXWa()HB4Z-gS zkte02-!92uOgf#g!>oa6i^!CFw?R7P^&1brKKeH!m}q%i~R$K8?VeDFa0vcLzy&bY1R*7ug%wZV6t}P`%(cg?JB;EU~5! zZ9VbxXit*aJAy1hIq>VuZ}fRKS`=$!?|5hZPM^v<*Oqrqc-Qf$_6i+|?lhm!79FKC zb}?gk^kDXym&O~I3&_;jDS9UyrTprQ75vZQIRkz@GcA$eVeW@9(Tye_NBj7t>kJ$A zNb!f^v2`(28Ed@V`12b*xS4ZXLZlP+&ezeHr_#iQKkm}sPR5-YYo3DpcKh5*I*)Sp znZlySg(e-lN1`^?NPnGZe=w!aZfvD7{385TXe^7)mV>Gz%YL)8c|7u{Kj6LIv>WL$ z_Ga-OTx)sffi>`nf4b#0We$HjZA^M4cP%&J66G0V&$qP=?XeMmhDB#H;+0+L9jBX3 zD<4!kVbXJHsob-zzs|XmoZ{KKcT#r6?_|JMwxn}D+z-6-rN=0P_)X?rC@&Ox&B%?O zc&Wm!y)!%NI44SaR@twz&y%Gq`%GJr`A6GE#c@;Gm3t@U^Xu(d(muqtx7F}ES&QIL zizNGaC#&{j-)Z9>;^Pm)e?u$$+FO(_KFTl;lq?_Z)w0iRU&I)WvS4q~mUPRjv#`Xw z3SPe)?ci-!!%g|MBh2-LdECmgPGdU!XAwqWU3vI*eI@*^obQ2OdJM(m4fnC1`6(Mu zE$#~6i+Eb(iS(usKEs}IQisk>`S9C9vh7eT{vvZb?{J0&b3C)})?AJHIi`V=b`9S% z(2^7WhI19)3WYzriT5k&Aiq--y&btuYq$`Z(j&Jw>s+JhJcn>s-A)S)f1Y{1jV>Q1 zZGQIuL`TSB%OSSPi`ij@H@>vgj38|%Y+YWOuNwd zhm@BvXBQ!>36CDmrp)Hrap5dGE~H&-$mxU)(H4o13C1lImS=+H*|BHKHs0Af0k%AB z?XAf2u7!72WY@OsU3k-@-aE4^2O}3{a0m8tzl~?79ed3po@-i(=SAXq)bg&kyd&Yg zycOP6@UDbM^>&5j?FO&EPGQ4Me}L~^8|OUn7tyZ5w@dv)*1O?V`TK3I7v<6>;C3u- zqsf=@8n$PDsXyvQnY!{&U*Xzm*$Pj*^Knoh3Xq^Gm9BvZ)p#PIj)st_LSix$sEpmfy@9>3g2!sGf#jk#$*%zU!O zsUI?iS;CmK9na%1^q-*WGP5ma$s!}CZ``!}}oyoNi4=Qvo+y${bjkz+Nt_NDFxT?HNvYEN_*a2w;T zgTeKn_sxL!WadoigA?P?J$Tl5^fw@FauX?}F$B+)ex#>*tEWEux9of1Gv_ks+khKu zn)0GuqMS2RXnRC!oT2j@{CsM=lwQckqu;H2%i3wBFHQehFN%w^5VpKy`G)xTE{gd2 zb@F6 zIPaGF%MuZ<{<=KTe^5Mp4sd5>&Nlm-r3=kfC{4Z#G@HHC=x!vkNzcVr#s%o)0$*NS z9TKufo9`kXe>Wfh6|L|qoo4v8pQj&rIv>mh^=^_74RQ`b&ekaN&d+H2ov=u4OmWkhJZCV6>di}PjNz4)#yX}vc(+npbOG*jLpL!TJ(F`e zXEmP-?ewmBbNAeywn;W5eJH$Z$HMkqOX)aw&26e4WZ7}mAvWz$C3&^!t1r;lBN(UN zXY>t1dI=TH;b=dHA4r7aq5z-lN(JYwvNX6&MN%h$6 zur@Up38jk@Ev4}zIn=~WRJ4FU_8nnXY+3P%*Ivl z6MUR8u;n=nL;GFg*xPG7&jQQ1Z{u0En8&U2WmHz?Y$o#S%}LI0o~Sam@Al((mVQzw z7L)W_TKyTert4vt?C^!L+*_Eq+kCz477`#qqfiQX8U~QtG%B|!sPdD{q|uau%$oDmm@~DeQzPw# zcNQ6SB#UuuG447SM>6Mz`Mvw7tp^eG0q;C(j~W}eGV#l;d4Me51+vtp5=Zje#mvO- zie}X?2TdLl_KB|dCEY^eR9r98;boUIecw`6ts{+G1{H#a5O`dYi9 zZTH$Q;@11!I%{8ReRku|i^ixcEswKz`TOm?4RI}0o@p17zug_<8`dh9} zxoo-8rWK4w?|1%ow>8~f4A1x2tJXM&x$|hiyK-l9S7X~z?t1Kaf9TcVSMbKc-Jnas zHef$cZ5ph!TizM=8aJr@HfK>GW1eI!iZ?tPPjBR{f2c zzp?K%n!iz6>QhrI^;@@Uw>8gG+{AE-^k*gJjE{v@Ifja6^Bc0vRnTu5o5nV+>vK60SXT;y6GfFgnCL3`5dQdL4o&CvF9G#vBmV$*~5vYD$x~xRk zDkna4Cv-^}B-$sfSKwXV^k1Pc=PX4z*S^%|tIj*8Sov-nxvD-Cv27Fju0-F1tbF}! zJ{AY_Q50|b8X48cD<85GXQ$$oe%+dj&G4Ot>;*`DE|?9P^Li*x*~xDuKeDObC_ju+QB&IO*@-pEZbRmUoKrl z)W`EX;^-jxP4DJrjV0XKYV`5gTD;*y^rEwr#6QF8PvQLbB0eYQC}ecsxfHi}WrLDK z?=Y|V%A>%>Cwau@>|OD39@LhPD1(dASue#slY0_(1#Z<~9+*LRg(+@j4M(wW4Tr{; zu_C_TQI6`LkfTX`QW3Hm{m}o>Jejej@)5f4%BXC$BI`Ssh^ zx#+{>A2;RS_iW~?m2g4QOa)@fW*&zO{NP$B%I^UavutSP9YE=1liIt@oS zLkJx!UB&C-a&jxD?uxhvi&8^gz)d9eqs1k@BJ0AM1#?M{L+rEMR3yw<`_8BEJQcRe zdrbV7+uQ`@J;-fIz)fUpveeD3}>fAt=ei6@-Uvm@glKc}a?}Gt%%_r#6w>Wo+zs9=z-CC0?9^jK)tRZS~ zDZXXaO`!6rAiXrpr81m{hx1#{gWpeia(?;nDh*wVN3`>ko6CmMRGB-vnr9cM{K~jp zxRpFJZDXz+{;%M6ekvaqPI7Mb`AMfPe#NP>_g}Tvzs~2Lklp5gq>Z5Ec~x3zI+p!- z+CIs~VIrNz&0MALDdx{urE_e%Es1*ojpY7x(QgIbyz;m@Cr{t`6=O z@_yzv6dE&ndO6~S%*Ii0?9_3i$5u^MHbNthD>>R;cTw77QU)4uEse3^iT)O>p@D0IW=E@ z!5I|LHJ&H`J^x4|(Gf4Z9eq(?`oc zX+~cBb!vdk<>@ER%YdU5UVHf*t?+d|T91`Xym*%vzCew=xxDye`y^?FFZ0m~-;Gh6 zcX{D^`DpoX^3f)LK3e`U28!P0g|G6_^3RD_Z)?A!e6;-U@zIKZxsR6rjsy5-E-(J< z1CzA;*Z63KU+<&kU!0fZmw%Oymj5gtE&sVbTK3jne|eIaJcv$B7Cur zP6XybXTG%zuU$0BD=pC4r)iqTccn3EUq$@7YPfX<(K<`ZEzI2%pm##o;I1+e|32i+ zUE)6kTKz#i&+;Dtt@dAjqLXc}=XM@`YX6=8OrG5(H?^H=|D{ib*BNfTeDv!)$GBbi zO+3$oSNiLSe$}?AeRuvp@LcJmJNmjv@$3&>=?mWjTJ5_Fuk~y0lG|`-$>{vcq1B!{ z`eNu6&`$pApw(VG`VMHd&yIcsS~5HO1!%Ruaf(j)-z3^zO5^hYy)!^(q&sd;CjI`8 zyA)n?m+lhXGe92~pic|X!871Am*FnOcR_%@E@(cL?BS3fH1xWp66;)aMhq)Ib@}m3{ z1n8mwJt9Dl3DA=R^vnQ#Lx7G4=!XLIivjwz03AHz?fZcLZtW7qW%8F7pih9-_&{^& z(#NQP|3v}%dT5OoHW01&?}XO)V1=c1X4_WixzsWF|2YsocxKxd0skKY^qv_l4T&rrwk?D=1ay-@Hl-=HnjI*Y+uexCRVw( zZoSC|$yS53>NvV=Ov~5)5?rdrRJho8d8b!WcD{jA`o>AxpL+dwS^P==Wa52yO{aw% zzWD$N;HDs2O5kT|Rpo?C7K$P4aeO+?iAj@*)4ikIC@Ak>EgicwwX9^S4udLT=4Q~a zemXynqwtt;3Gm9jit`4iPM$cr!iz1`zs2!japhH`TQKi3^I=YQ>#cL%CRUYC zHq@>>=IE;=lXnu9H^;N9PIbQ6PnL!W>YrNjPL}h{HA(d?7)%g*nwZauy#uj~(0D3{ z&r^}u(-eKKz94u8gP3#CTE^l_+E=S=%zl@awa$yl=kJ{f)}m<2$NHw=jB5SIhZzTR z@SYLDe*|Kmp{>MLRz7}OdAXOrp{EZSVzdgUmBceNS%i1C*}wrkCx_&H!DR2q%a(`i z;WK7R&oL9Hco7a`zOA?o{)}>PWjV(_j@Hbe-@T-As?PS*`DWe( zr+3Pk6gh10&|=TqoM2{jkxX4}Ub03-OT761N#pTuqCD^{h<@;sB9&t z(w#p-qs$f#900eAE)t=9`msizl$t|SD<}ENzlBUK&a(@aT+3rTNep9{I$7~059L$w zO{Dy$v^W;Dh2-d}&rn$ataWjE3#JX&abal^)H5Bb!2Ly zJxZ!Q(cUDTb~yvlXl<7>BK@xRFiF&+GY?IUIm%Btv!^0flruB#EXwid;7l9D?8Gl@88VC`NkJ2!MU&|qeJz4>vTeR2P1EfN+m0pT>^<}>J!_b(^8htfs`CIf zPbGSZr5OsFa{%={GL13hAkp{_5yD?@{nL3*kbfBLGMRC?=yO8mEd4HgchOwA=mP6s zXz4+s@gHJo%}FV|=3h$r=rY0jYi>$(wP+^WW{AGXdq3)Ou{W13da?Wozr^}46HWZf zExlSa;p;%jvraVOH5V=VBhiG{dynWHq6xp#(xaHS(7A}!!kNsu2(LsAA$pl7L@$ek zSD_yv{F{ZdSkofpt5#0B=N=JOF;^(8N7GbeQcrEb=uVao!$VAj8i#fda>U=q^PuKZzgDl2`q&w1L zsqhBopoF#LTgV6hWx^YIj}x3-g5clD-i8F0@!=aggvn;uFGOC&bRz2}vi151VrD zXR*p++~Qh`>3e#7Il^nG$CfS?-j7`imm#0UofgBLJoh|{g%*p251@bH^|T+tYpGAd z2eFrI@FCiJ;d16#gb&kx3z2u8#nl!!2>(F&u*ypQQHvuj&a${zh@9s9LvW2~^t?`p zp6i9^Ib&~-c+B~SV9e6h7R|YbxGxutKGq6}XS47T+7G_nZ@N6S6EzSvCg8-K@|U5i|Z`bTik4MtHo^=bzY*v?X;+k5TY|I>KsMU zVT(ByBNp>5MlIHW%I6}X>{s|G`4Ik*^}xcV$Z6^ALils{@vxu8Vo>Rhv^dIQsl{2K z&daS8t{{FP_Pc>V=Sc8xqczn5_)_>I9A`-HBMb5`eNd@ z^eQm-RqS3!Iy>Y}Jh@%DU&l@@_5!<*zP_c)f1Y(;WO0@7FW9?q9m9=-!MC`DZ+q_z zsiU!v5X))ap9q`2F<2fs2);lP? z_@oo6kBKi0)K%t-OSE`(9nLNOU*eNI3ghR~yRN&Od{G?y@-0X4dPm z0Ii6c6Id!c=0e;oU zPj{t7z+B%*QNBw&x@x%5iP+60K0mAD>xi$@ofr@3Mw@Ozc>f%q(5KeWO8E5KnGEYg zE#kFV@_$}tm1d%5`ZJ5>|-l?-<$G%f*#SMqlL%(#JRB1qw&%8%jd%8 zw>62ik!{dJ^J<7xI#5oy>l3_62mJh&yY)LrP7&A&qk~e{1((B=+F5 zFX2G#RbYRf_|A6z5x4Kj?AhPghW!*~??S1!_c=jV#@OR;_ccUgjYso*Y?S>A>|GdQ z_X9r2zLOgED!9ET+H?@McAtxQCt1Ewskbjeyp8Z0`D@s-h#sC{ug<k`wmTf=#Tw2EcJ*tB;45R!hWkxe`Q$nYq<>XX!;(af7VSp?>Cw^%FgS>ITk|2M2lo@y2$Pp_KRqdPxnHg@Xd z$@-0(?o*~#m3L<<^oZ$IqsLAPb?-g=)b69J_*6OOf~sTj%fI*pCiANboqwJ&{=!A*N} zW`HgW(CSCsrSMld0u;RetkLA~G}4p7>G+zxS1?#g}WQ^7Uh2 z?)!!Jxx-EJ%g4s(c}%{bBKc8-2uD}(drSO!9KYhnn2EgR(!r@u)9-ss5TXR>IG2uO zmJkD3F6_h@PMGbDQF8a<-O#${Vo&ndSTc8S;fT5?(dT!ywCe{o*7RTE)usN} zKgRhfz9@VOLVr>^ORyHl4!ARv_{lNE5;FKc{_b+|sjBH$7=QH`qVPEHu=!sxhKNlu zsU^k`9nHut*7QB+aIMQ;YR>4>-pM@nE}DIh^iRmO z=|>qm=%&T?w94n0>kfGrb`eQeK zX0Sd*+{m}4rCMA@SFgz<8ii> z>*G@x*_7--X=rb@&f_*|*T))Z-Z_igrWLxXK4FWc-Z?os)57Ue_R|;pS;d%FW8al_ z?CUQ}#am0>msp;~md9^jyQ4et&4F)*<*ROmPdx45&8|ex-0f=P4LS=VX2ZC#w?BQ^ zm%_=8rohVxQv0YIp0($<_|Mof;n?>r{`N|zmUOsF2`4w5VYZlh|BMa$ksW{g^P+QN zoL<{T&@H+&VbK*`D(7J6eB}{MLm5AJ2#>8#gC|ke@aW9tTH=*H=d}{Q;^NG;UCw0i z%OIYk;CY31_H`QL)wIhmg2kYIpKJq-_7l)6LG91|l4s4+YymZo^By<>{20{OJBxcg z&F2p28Q?#_Qq!EWr<`*Mh?3ulSlWCV?^0?nP7B8mN{`euro4dta7JKOc%f+nvp8cS zJ(SA%AXk2*_VYAb7Tt)e8)cZrxoJldSGw9up1bp$W}lDX`N=(EO+x2SxXj(6eGTv7 zJafK*c~*Pq!tpMc$r(PzUG0*4K7{AfPV&Oir)G9K(c_`7&%B4cDE&O1PdUkRN0ph6 zk^b({cp7S>z4h#9H~NWc_VlMlZm7R1<;G9UetO)#L;oq@w_qyxPcRMq2gu(4CY^89 z2Gkj~Z9%=)wF7lF80|sRry%DXG<^bQf;!)-1E{k}vp{n;7=kRNZ0Mgt=3D^kvih$2 z6znJDe%~Qx&W2ito7!W)`x)e8bt~?}abMPo`%v5$wc>sm756^4k8H*L zMBMwe;;z0m+KT%zxaYRwuJ$dX6?fUw_Ry|+kiFEm;;#O4Z7c4(b54r0fiPzu?1n8Y zlg(iJH7Qrsr*k%g+*5GJ&bOq3-+;8+P1`}{0nGU!ygxT>gQkzt`BQ2)nzn*EM}qUG zw$Q&e>HHA-v?iTX%=n?{BQOipyZt80{uS<(+;MJ=vo+?{9BqtSbvK_on_Gjmt-uEE zHQe`byS@2EJd5SQ5AIm?{-m#Zo$X$a&VTH&SKr?KuVa_IR(Vv$`Int~ zd+7F;CiMBk8+RV|@!d5a=g<7{$Rn;S<4>!<>zDielT&hP zKbkOWOVa`0W_5Ud@XX=Wx5Q4_dg3wn9sb7m2c_RqUi3}>(Cn`_HuQg?>xh-*7ans> z&hB@enKQo6iDkRLIcm@9tAF#<^G~;Z{e}B}czX7%ypeyN{NWvsUNHZ-x*os1^6As2 zk9z;adv1O3qWk~4==id4@BX@^acbMg_kHl-o4>C;dgIw6PI>pHe?GFuU9a4DY{jhQ z4SyOM-RH@@3+g)d*lWoj(%$^^y@dzNdiKi$CjG6;*Bk#n=e|RtQ~vVZV6odxw`5^nPv2;<2lb`23vTE$e#xotfRgdiA>7 zUU~eAj=#D8@ULHf>XYY}pL)^GMX&uQyqhvk9KX0I_T;%wH-C`d{+Y2gdw+Y-%s+he z%!cmomHqC3p52!WId9?Y&zDv{{@&ituRLMQ7u(mhzy8M)_OEVSw|;)?tqGSdeCo22 z8IxlJi_SZD!gWU<*nag>I}W_;!@_gU7~6Ae-InJb_)GPH|NgrDx1qdyFYO!;{rT*< z`_Jt7$4ws&KDlJjxo5w2%7$wX8T*H~UOW8AW!s9|R==^|9>;IUxbeSL9`1c@-c$Qs zd3WLD{5{T@dU@>Q-hbcg$n)EOUVO&NJs;h;&lOL0JZSkl_a9o@rSth$4-9qc(QfOA z|Byd+#c98P`2J^>?YrUN_wO6HV2^pHEFAFpyfT?zUe)^2W5IzddZ`?KKbW`PpAb{3h?hAKn;n*h4?A`Ej3p z7oAs9ykXsgNA{kZv9{|&Z6=O+r|oHXW(hrd3x9T|8o2jk4(Da#qbGpd!~MxUS96( z_kXIdOJBV5rQgomE34PEjLbLNJQ9E5*}JYE_Qyl6?zEu%%cmE7x5u^j&OAAG{QA$* zm%aSKfp6v??C`qd9xvW|TfZ4cK6zO~yG?K3*M08p_n!FKn0IHaJTCR7_g`If{F8HT z{ysLOW0%~rZ4>^||Hr%TJAUSq&!04D?!dc0x%{hPP48dv+7DUJgg0+KxW3?+zYcit z%d7v`IB@+V`(68NmkT1_y>QQ{M?bs%roX&9e9V&_4*g;4$g+kdZH9ff;L!Zt2Mjpi zq6ITM_PH{x_rbkJ?Dap@7vmDs{=ReWz{oMHhdtTQtNPrxQ|imVyWubQeY1VHFNfXu z)Yj^STl06W-}BM09_xO{ujI?S|DU7l3qRZM-O|V28u)&7q*L1=`+R-*+cU=3JoxPu ztL`26=Hn}W*nVI^+K3y^{`6ldkG%A+Q%}5XaBa#SGYc{v3Retk|N75W zXMU4+*S?<*AN%z2mmD(a#OKDH|NfVk{3-g`7a2oG##dbQaG!hQi|^R)lYRHSy{>=B zinm{EMZSBVxM9z`j~LYbit?jYtjk*1gn>qE|mCJ8<^sD>&K6CkP{~EDj)$nUpuerYYxsSh2Irgp0 zjLV<+KKks<{m0KQo zx%#39m!J3YJHz|GHL?5k4gYEWBewh>_}7{5-}%J@t4|!4S$oG-^QTQY;hTfrJvfpd z=`^Uz{!>O=^b7t~ccO-bHN$iJGI$<#H|%q7998I$yZ!@V8eiZ zy)U1*`iT#ZTX#sP%R`(0ady{NpADpc{=DNZx%=_a_kCNt-|ko5GU$x^U3vc6{9N|C z_808z7CrNeZ!U=TzU0SG{#A4O^9OGlRq^S`r}XO5 zqFpa|>u*=DSlaH)TQ*+v&&yw_`|)S|cAj$7WeaK_YvUa!J^PVZ`JmCEyEz(=}uf=cez50~NAFjUp-uo9Wb>;ADup<4ivtE09Y2U6j-}L&+N4*QLZrAD22M(Ipbm9R=zdi2# z$EFol6m{6G_RxpBT|R1iLB>IUTz1(@^L{_1={H06oAU23_N=>XceYEIjO(H}1cCKy=|-^Pjxo&4H5} zmW{dPC)^ixdUxvgTdODRH{rVvSDtY6voHK>LUH#)uDSH$<3DYlcjY&|qWRtT|Kv~G zPrAQbzw^G?K6>V%?Jw_k#`qTwJihj@$6xDrM`+fQ&5wOJV{OW-zW9&){qGk{I(ze1 zskg0J{=C!cFUfb_g5MNf_-K8@5(b?=%$fcCYxPCVFWr{^HnyC^wvjDxV_-Z=a0L*?CHGizQ+e^e)?%(2GQzD(ruH9P`!V0!>ZN2_ zyLK~&lIdVFuFt=l(eM4Gd6B1g-hZx>PkLf%#(X<)5fph3zfQJxN8RAU`S4QTvwci? zCG|mfz5I`t=kB|1&JD{doE-Z0zl)wy10n>;lyMhdd{2jaZfSn^h05x-zX@$W<>arn zzA$$8jOtOJt=-FI{ol_mcx3VxCdOS_yt{`=nS`malKngc6YYHE<=b}q>(1Q|8uCbb z#d+skJNvk^52{%6aJPRPmi6#6uYT}NWW{Hst8y6oo{jJ&b9#+`;EsmTZ*OmZ@PR+PR=Mv-|J-BX$n%F@d-b2bzHj80^A7mr z&tHC8e$4(Ahu&KE!oU^p|1Im|CnM_~xhCy_sq;(jdg1h{b9(jPH`;CCfcKvKX!a+o zKiYrNS^J-O!+9UPzGC%|BNttAS;Mm1$DDKCS=Sv~8cHiF_{qP6UhMS!<87{~JmK7z z<{y3a4=?Suckc6ppMUt|1x}~TorNlY{B;H$NhrKssQ&FQy0#zQ_MeUSeE0c*OZV?O z<>Gkb%F}PzZT@a^&VFxT^`9^N>yepHp0?zT!#dZV$6=#8_x#QJo|(1%yIq($^7A*M zuYAz<_Fe`33y-~f=(|~u5B^QV3muP`^;X&TemlM$I4AwQP6d&T zeqmeP3s;^o;LnepeB6-L-(UCqqys&*sSW??bY4m5(i0zjX4BJS-rexW zHn$Hy^Ol{{uk3bKnt4ov zo{l5LA*lWM$-}`&pl%MYScWyJbT8rxKPM`hN z({L$k+=Yv)uU~V_n_53$SMI7oKjzPE5|Z4rYTc|A_ovi3XTLI_=l%XWrakDlwL#2< z$zz@jDcsTgN)^-a!14Bn4LiNYov8KOyh9uH7hnFhbllv}Ll=4*x7=FU|JwNVX%8|d zEWw6?R=?0(r4~<~uYO5Rj?&+i;(U5-bpK<()eBeCjdR=13}4W^_JE2()upsgywWGP z8E&`o_|@6c;h$F(4SvTt^YyN|9#dX_=cjikFRi<2O23ld$B*9sNnk)k-NAEG13#8( zPIJr{x%SHWu|HQ1?=Z{z>EWpz_wRl3S=g)}W;Ocd53k|T{nMNqxk;Bde7rBQ(#G)v zW_}%5JJ@S&v779>VBplXoyW=}(;HO`*>IuuvOFZpVE8_CNYnRo(k&O|nuopdON~xT z_eB0QW=-{=t`2o9X>WkEm;dLsB|52!(i_=t6t@pQ@bU*IA7u6WrGDjHukp>hd_19< zcVLCS2Ttvo_m@!`AA9%9W*-!sp1x??Q@_hivj!*I{dlZh(oU(O&#ilR+?GG)w}|ZW z*SDSbo1Ts=$+>+Z7vJg_ad91DZIJ%_y;?|q!TO%dE+zV8r5vwb-R{qB+or8qRDIgg zx}#Rqv$P2uiRQw#wB9kPZ(L&RmsCS0z&;g?B|jh)kBZ_}_L7z_>Or;Q#PJ27GO z#D|lwPTU)}rpD;eSLcsTm_Pc9u^YxNuQ}xA2V)1%oR7eZy|mj4r#ne;;t9_Qif#%UTR~-I+MDn!`s@-_v2P zKRy}ucBs>R|F*}gpQ||KL8QycQYNQY)o;&V%Ix@f!E1|L`#fd6Wm{*u%H!Ac-PJ8G zZPwcQh(@uE8_!6Gy-lN}tBc7nX~>q?KMNbI4qclT)$r_~YC9cAH;SIJFEr$8cyQaB zF`ZX_U3_ZJ2cNv$^6M6z9!(lJcTcyJmUcH!?d$FJ_)Nb{Dem}%9@%sKo=p7qBWd4{ zcYS_O-e7d;v&kVewpE{QJMZtwZohrqk0ZUuzxU>-&>10v9{!nFf9CO4FAOeaIwX0` zZJ6a#P;%*o?w$ji>(hmO3F*7uZ<)*M#Q2YlNABj1NVl0NSSsoAH8>4%oF3v+wO#l9 zPMNWxzjy7@aY^I(6DC(3GC61B6nm%N?)-FrS#H%|?|vB2()7T0y35=5U;OOVqxH8f zu0CX0^6Ed|Y%$$=<#&I-lAQRk==V=TFOQo!eV*Oifj89bC^|G2ktT%#q0 zai1Ma>-XM!T10fRU-V>H~TXqDB#bMrk%ctTDo3Z`1fCh?_YlN(u!fXi>KzDo;wfdjRH^ddJ+;bTd;P7?7TJaWZakM;WA?|p-aY6PIRjf<2E&2JVXGQ^J}ti9 zPc5D{ANl=)!{3jeS+6Ay7ind|!5`~b{-6QPzsS()Sa9r)$q6r}+lr-B&Jb^K>=9bw zjr#TF&^J6L{Wx>dmPyyHU7PjQ_$RdEz^IjI<5T2`dSp} zQnBWksz>&EE$aBTKF+K^PUG*kylc4!ew=?k?1g8=IZ*bR)OXUPWBW!YR2zM>t8ske z{tKTPuDO>t+Ar}sbl7gMXVx0`X44mcvr77G)X}j9{|X=MJ6YT7Av-F3$3MMhm-1qUzQzahrUGk@IdRDGN| zM(tPaL`dTxEuROsZ2Z>ZjC7q}%Vjx(*XTjhVq*tJjUDrQOvvR%fsMySuYWjjRBVfG zcZa+vO-_oNC&4CEB`o zC>7dKD!lr0lNIH|0%xoX*nei_w3W%dx8C@&qBP>C9?l;}yIp+!lU6&tZXEovW8mn)ux#ItKQtijD^n7xwXGp_lj>azLDhQDpb(ctvq`bkH3IemP7_OGrBU8_tV;8C1X zJ~ro;|IU6r7YC-bdb*>($L#9@ntx`w+70Gi`ewuDmN@?XN8igY)cSefQh7_+IDVV=*9#M!A}-#$^FXVdAvWXa z*s%Mat^@rx*Uz84a>4`Omp_7r8^G<)d7cCM}7?>Vk=q`mxkyIIv5@G;~6fU(E+`G3S1$~|zMS-;+ID=sz} zUt{0>A6kZuUG?;<#dq(W8n^ZI%Wt`F&v^R&;n)8h)~eaH?XjWnCN_EbZ};JopH|&A z(6#TifCDF7W<7a2tI6P$sdjc!9l!mdP2#KPovqa2#|h4Fe)H{$@U718Jg9v9=V?t3 zA1(?AevtR=o2P!P^7bpSf4QyM5n(sa?OwpkN8a9jJotR$%hx7my?(oSO}lBorFQu# zYHh;Fr%(316!+ue_{Q%_SqD$lOn)>epx*U&GrDx_dLVbvkWp{!T-v?%2U|ZJRHvo= z+)vh4zjALtVuN2g)au!IXYECwykeI;%ek+_ostbr#d;Tbsy7UZrx+QWNoZo z=f+C|(tb#Mb+x!s<{VWzV}vC;fHT* z{rQbqo&EQk&h;+(A;7=x8y9znJ(;vLYPxLD?q_~bMxB9c_G}*V_=gQs>b+E6!g{|oq5ZTT<7WNPrNzDbzr^;4{Bz9@ zIgO9Mw{g`6DRWxJe?N8bw*J98e5O?k2{(-B8F6O8FCX?A=MoV;VN^tr$HkZLO{&v3 z_r)i#_!X_PyU=j>yhT;g2ZY+~ct2uFzmS7dR&J3ZcYXc-xT5>bj%<0=^H+K7#5Ny& zzU6SuC5EBf`iCqyv($e;{}(Uy?jQKAd+j!}KZ`z4F7+5cq5KSExU%hscdOoS<@j;< z=II^QJG6XtcJ!&X=QmYR#tQVryk*SI5_a@8|B(|Hx$G`h~!>(Rk8Mt)at?Zhj+!(QE=UpM?~t&VykRm{UlS8`L6Z&iM^X~Oq=o0lv&RsLYc z$NzrckT*U@rWndi8{>R@|FDF2Ht$?iGuzbZ#Hzn1b~A0*^v>*_!~ba1(Wm{CO}{%l z4rsV!-!GY$-|W9QIrq}-7QZ&!KX_(NR{E98s~?^E_|&{z#zA(mV?v&Ix_NxG^y=9U zDwW$kAn9Sb)~>(g&WW9Jyjt<4ZXeIC`k-tdd^a;-WkkuFi!!UfV&8Q7-R&PbYGXI1 z{rURW=St^uWQAmKu&dW;@`<1Yoocn8J?h?qqCuw`g*W&lbZYhaan*7^&G8)C%d3sy zA+S;>?6ejYd43 zwY*#1@^!0sh}6=_IWp6kZjND~`O19p?8ayodFF+oN%r2Y^WS^*Mrwrx@6K<$^@DF3 z9qse!$!Sev2G=yTzA(|p$^Kr8khMP>JY>_tYpvy+47|B8rS(H*NwgXdK)+WY`-@6Gh2NC)2o<&PM1L% z9X<16d@Ju+iz_rZIJ92-R_%>9PIsC8q)PaVrJ38MKfk>6RnDu`4%Q2}cW^@Z-IzlG zFTU31(W6_b++L}=6Zd6WKqStk7Bo+Xfr-(rs0u1&??|+H`1=P zTohN|u1+Jnuk(MjE}Q>B8nl$!MuQ>6_rTnCGgE8bYw}ym2W~5(HrM=g-0#kP)+OHE z9@)t7^Pm~Guh-o7u=3#Hu}2$kJ+=1UqFZZ2^FNV8|GfIPuF6n*`E{>+^unRDiGS7l z{$A?)m$W{lCY%_5dEahrTs)xd@r_AmeyU%^R=OaHmAR<wry4X2m43U&OLs-Uj&BX?}yfwLaLoS zduI)vfi4sGPCJg7XGoJ~eZK3ByQXKxU8*s6>8+`&R}F}}JpSRd!1)&|EIR&Pl}pnM z(%*meI&$^1ts8Q-Z<|{8l|$1%`LyVqPmcv|h6l3`g;##`a@zLzOGy_W9EqGVYEa6# zyw5L74GY%%mf5!I$@@3gx2yHdtlSTcwZ}d@UE4t)cj?&umnSU^YIky(>w#Ws+>wWp zHovpgPk%`PYhx(q98uG8|CfVKxXr#L4`?|#?PXtwzwL@|Z5%ak)Auv8*HjsEc1`!T z*Zn%Sk-mTNQ2hAp3jH^o`o7yPk1&@hsh;=DjY=xF?8&5SE>$--=+o*sYj_!2*!eru>tY);xOWuBEQwjJVQHR=@Jy_5)|NrZT+V?slv2EyYsCP|2=n>%y8p zo+vreIo$En8ZoIK*za#Nw)^LyLvm946f89?t+&iB^uoE{9tZnuk7?duMePqqZ!O=m zIAPwDz<1gttZy{p#x2jvT6_#~A)8v+uYC_YiCVqa;$p7zN~C^bT=;B>-WV!5ZmeBl z%ec^bL7kW0f4aC~^8Ru)@nxm%e`9Hs8`oG zE>4{J_G0P9)Z^89*Y5ZDGT#lRm~uW1RO4r~td9CNlop0I*|5}6h-Lzr}eR5>!SH1L~m_p$hB-4V1F7IAD_9Qy% z`cUIT>H5co-(6|s807w1{*7Y|q;;v0Nv$8e@8rtOnmfrC)HJ&o`PR2JrBfoQ> zr`4|WCvPtbC`z)N(bdj!Sl`lhgQn#H z)l*$3WDj@j5gqjX>@{bS z>s(u$4$#6f!kxlpl5Vj;8I`nD)cp7V9H)FddgkK`2Xh8zk6LkhenrP}YfFA^e%kB& zu-|6CQvFel)jiw&G^x?sM`K28{;R~biqqD=YwYg%?%a@?Sv}4y{YyT(-x3|=>dAo} z7q0H?nce=#w<8yyY16s0mL6<}mCZYyXC$U5;lG^@2WexsS6cNgUUSJ*;oVuWUq3u7sQEB2_wcYQCwl)pI3e<#(j{WJaQ)lc zkr^k7-y1)1!>)&x^3cxh=%TD$BI}Zrbqg?vF2Yz+l`DWM6 z{P-DbTeeKd3iaBO(K+hO3m?z(3!JlU!TFIb@flsSdD7^&k{Xrcx{pn}`1ca#FUPN1 zTlr}1n%p%XHpp*WVYAlL46v?5h;UA-Ez4wS_hrBD{u*}cwfBcK?qxr^@9^L4795ZU zUdZ)p(yq$P7yI9`;S_6vyRTwSxB!f%M!eT@Z*w@!&6_2$$7M4_Sv)B zKacsdoAmO^J!4+~J=Lpwblk!*pS|``wXaI%NDbcg8tgM>`HW!~zN~8BU_jfcpa11+ ziKF4c@yCsKe0O3({UMfe*7DIhXf@BCx0D^F_I>=l3#M*dw%M?LqN&Y;-+$>l^Pu$R z;>WFhmR|UE+^2Kq4XV-Vv*Hf@@95&Q|Ig}|-hb;v^}Qcj@{C(<%B{_OBdvO_*w3fr zYWoFv9OUWW=30S^AM9$b{^rAjPmT;bx%SB89hXPmDS12nOp}@yykmwQOjtBx+Sqr_ zjU3YC)vJH`ZaH=9lfcG%-x#~FZ@W9=%RfmE|EzaVC+L`k-^Y??O8IJg-qz}tvhByD zyH+yC!X>X=Q0kdBc!aKW9ISZB^$Alxk*7R(>73`94&HZ0epmg)hXY?*xVE{ASH$#p zykD93_3+~Xuk5^4EwA~eWxxD7^;P)C?j628@^+=#nf@DJ(Bj|(B(7?6$$96w{XY(yzR|&Wrnf#^rHFp7 zSnhRmxJ~R+CU@FZI^0rhLCpF`2kZl?-?_N3N^-OM6?&!wtQkJ?+PJ}wKP_IpHLGan ze9yd19bGFwoFEB*6TL3w#6*6sg=<858Sc?_ZJg#^vww5!=*gF>t!uPz_J)~wBoa+S zbf-YY&`xh)X{lKtI=7PHU$j2At=*f~KD>2!@Wj>g4#m_dpL=pp?jP+>cj(yo+lb!d zYJBtCW$!LM9v!+`6ty||wY-$=Evg^TD zc0X(he%qy?q1@Tk^J|5KC{2c5YZaqv;dt}lbb zZw#;Qcy-~@0GINI>I`nSy?#>rq^}EKOPrmtW~Y0>ukrV-!d*4uR_71jb(r3vYrXCR zW6GrK`ffvY`wD~XPP9*7v$|RShOgebTHQ(mlAw$EKc~7Ra@PA}e22szeDZyzHN~D; zo$d_%sCTyA;;GmBEPl16xBt!x=jS(09$@^k-ocUU8#Ni*;lgkChYZQS`S<+&rfaVl z8W#S1)Ag7!A-lwIK6ke7hCPEXCO(L0FyrZKg$MMpLVUj7a(!6WNoU>i{OcVWYK*cj zufq1bBZ~LCI9~V&a)wFW=c38z~{m8dAjL01S*Ea(jEy!F~QA?M0Z$BD0 zCaCqr4<{ep8}{C?x=n{fIlR^4X=#JofK8*>m(;KN(x(B#9ZqcN^3slzU-pRDa&}b1 zao@*PpV4H}Z0U>Pbv90JTYcz~)6HIc`OfS0m%6X?f3I@=sMNNtdiT1pcWlD($Ey~d znAr2ZuDSY9rj9z}bG%cR<$na;u4Wx)pZ8i^DYxO9N}08*bX?;o7k^vpi@kckxYpuk zWo@=EIa&XQOCN=eYgm|7DJpt%(Q21~cAKh?IX~#mrUTb5_nO@0w~LeFzP|D0!n~C2 zaY;SxUXDrorcT`6+f!qk?QiPz(r>@zX3V&e{K3T+bOAgG-?hc_LVD+UJla8(JoXP-c`~*}fN#dO?4P0!SWiH7x}Nj$f2^TI8nB|{N0G04y!GO;x9Vl@ zof~*((@!a{toiVT`}=na{G=9|;156nBt zm^c5`BP~~sn|0FA^I?T|&a~h2<^F|PJ$4*S+E@1t|7hh5HpgowQC@GiUN-janwzH9 zkrs}PP2D_a>ZzR6e<>8D&cVB4{zaC~*77AE`n23~rQ@~2)vr5@D|pnrrhA>N#3!>m zSG99TitMl62`|xwL|)8Fwd^gW&@XdJGUE^Pay9@3I_cP#&o2c#) z;NO6kc&VJ<0r(a?UU0rs;ydsQJQNI52+nT}7zLLx(ElD>dmkkE58&D2gor=*kKo5W zRsZCCFNM9}@!;pdJsPO)%fWvFH`cfCpTW-=Rh|d;3*ggVwD4cR4{^}~hTjpm2!6e` zh4b49d`~isyMv^B+mi2D*7y#%mvG|(hVDDT`Tl2`K=54f95yJJG2pwvAJwq%55R+T zd=GeLb=5r+@_WJebFvDvAABEpJ{zgvEORFvKM2nEm(%1!{t&oVRh2v8@Zn+b2eQgd z;2(n@=Ykguzi)5^JdKkum~`+<;7)>X1!tYnm-l6Gef_xtuFtOmaDDqM1lPBxBJkUM zxd+S{=)VdcCio-pYvB6&a2;GTyG@C-w)d<(RK$`^pIhr3b7H-HDjo@O^N8$2E1YJ4L( z(nXUG_f6y|Cyl>N|EPyFF3`If+=!pX-@!HCpGD&j_jiSx##zGUAgx2{A_H zyKt)PbBHNAt>k?D%c`>_*T(b=Ia_hGCCv0#g&klcDK^4JKG_JnU#~$SEz2skDQrUw zFJ>*1jnXr8qF~AjKSLIU_YB#g0WI42+K4f#Ls=iF#}t2#46`BU+bW=}#%BeO+E+%n zY<~Ipv{Iz-F|o*$Df)V6tNdH3c~DB&hE7{zmNKxVxQ(q?*sT9HC7)4dXy9cNXCuA= zHpKohzUVQ^Di&?KbkS->Rw~OZx~+u$ZK!=l+R*uwjlwfz(UFyvwNbxp=9ewGwrbTX zl_*QY9~|=&FLS)^fQO) z{~r!>VE3-Z)@{(!mcBjP%)4jE+U)pk%i7NCXUN*<(eVv=oAGUhcZ-(24?aWI)@|?^ zdRyBXru?6IXSLKKB__Uw^7d+8;3JpT7A@kFq9WsA{eSu$*ZE?c&DBaVMPhS+amM@O z)%lx3;m#@20x?dfJlz-TINkHaxL$KVspE>fld6sGobqw3t{P|MUFAlNB78PXFCA}$ zYmVVnZ6d3Xqr`aTD8p6)I9 z&p^)Oxh6&TdqB?fON4(%%*nV8P$+mEaIO=a6TB5T*AX<{3!Li=8V?8OI>c@vKLMQU z6dHdGoa-1G-w4ii4vll2g6kkz!avuUxK6@yV|=+Tz;zUjKL+QzfyOJNtho+zR-~^1 zIM-?N1aAw@b(}E4dxM`dqRtB*4$gHTEk9DhxlVLlgg+mg>qtih=RBY53R?Pe!MX0B zxgQ1RIu+Lx8UOR(T*uP*9dNF5v7XYsoV~gZrtuo!TsP5pGjOh>Ef(^D;9O_Z_+W6Z z!=(%NvEW>1(fBO7gYOsauYq&jMAN?#oa-v_!hIt+*CEdcz89S9mU)7I1#iE_1lhjX$OopJL)LUKHKRR2< zqvO#TJLT?Uv9MF#rmp9eq~St;AmYPsDooHtNrq^;6<=h0jMSmyGyeDk42pRPU<{(Sk@ihuaDN1v{(`PYVjZTaWVzX1OEn3R9T zkB{QXNAcyOc=Ks3h2z5yqf#Q{5|fjX;)5|RO!Fygmtt*)C6_XCuq!L)Ybq<}Ybqm$ zRgN-puq!L)TQ*#bz01g9(WZ<(*p-!QQ#O7+ZM67dri9$_@oyd8E67jD6=BnwHmwvJ z&d=_ym-o`h)YtPODeZw&~99Y&CGs_`1Y+DC}+OReG*^tGY*p_XpfKW9$`Z!>o z9qOw@(%QCcXqda((CZW6V?!@(%j%_VS-n1O+t{*g)5?}!*xJwwTU9TYMMU;uDWr>% zveI_Ft?jV9QbrDTW#q6HTt*IdsvMV^M7YS(-en?#Wu&s6Tb1?f6VPg)nm(OIT9(m> z6&zKgUa*aA!7_35LDef8jJZDQRr=V95G>UQsa0E5rCbMCYP`R4sptwG*sE{1aI{vD zGkQy3zp|EShc+zRnDmiWb)qGTsOWUU(uQ|me;eLmsis8l-N)C4BrH`)wWXMoRI2U@ zTdTHavDMdIi)~rG$beF{UzMe;szIsKswMXt*hA~AxD8=tg&xq_3fd%PkE;UU` z#Gm?IlT^!>e(;f=@KIA#>+ryJvp30Q_(!a6JpZFBt_$1AB-Qr+dG{&QJupOIo2m~%;_-+ z<7bQ=_#NIpL~y=S-D3*I(87K^t1gnb9%Y{ZWUJ&Of$jzfN3pu4@wy@_)$UMIc^ zd13~}!bHfQ6UaG&T^#%qF+M65_(-6H@fGb|1iA_I5a=n;OQ5$v&K>BlgFvpkFr4EU zpV?tTlMnR3#F_iUL>aO~FM)vqhYI9aknRfvW((Xe@QlFg0y!L~yt_c|3zO#o?Jy@l zO2mNvI1z)xlf)`0S0d)%XNj15pCh_qoGU;i60O# z_kBe4z`T)&bR%1(a+m|V5R=sB0mvbua8KdxEx4cH9Rv>&ypP}^f`^8Unys87P4b3WR$-BK<@aIPhgvmMhtUhp)*rwg7T_+r7A3!WwTX2Ej= z-!1qd!H)`lQt-2aUl6=d@Y{kv5WGZid$e;UABc#ro8asx$UO!37Myb$%6AYvNbo*_ zhX@`fc(ma0f~N^SUGNOS7Yn{z@GQYM3!WqRZov-;epK+2f}a)qg5ZUM-xmCV;3b0F zqrXzpPh|Q9_YmAuaBsnRZb?bM;6Z}-5uD$=p?jF%>?g_N1y2)vy5Jdtvma&n%LUI8 ze6!#=g6|gmkl;rJKPmWG!7m72DEMu`9|&F|xV^m^KNlj?FSv)`o`SO& zypP}^f`&X9d3?c%k681%DuT ziQx9QA1LKdMEYom=q459e4QL!tAa*>UII-5{RIXJ>?x47l47z;9I#8vO*Jyn68+E=iIQ>(OX>2Gss)J(ubh>CkSsE-4 zD)Rp($NZol1f>}2%kCfuK#L!(D5vQ=+f7~X(j+xG<}0HVC>-*TaXcHxbTALJbo9lw zUSHwM>UyB?W)8O(EcE)$C8%=L$NbRrMc|tHu&k(48A1=246wk@hvXc^BZ&c<`ln!rnm+3 z8*=aickR2!ka~3O+Ro^OZ}B!U`n3o!`kH+FO#Z%Yjb6zq zG1&QxiA;@YB6Y?py%ZS}IVw&v7;)*)I;5La-rmVj!BExS&G3SuhMl{irlD53y5*!6 zsZ$cLK@UtzQE`lR#huhN?9NNd#;Vj}RBGz~Zx;Q-Nn+p*^mdBnOe7BvEppA)TQa0 zZ{@zuiYx20sPs`1R%gxgUH$ykJONBdN=(xxe|kxaH_P;ylUTD%6ly?<`7686njv$h z9G)7NkQ^UVCKSD5%%@@8@$*3Ddk`y%@9(;(_acuQhhBTVWH7p;D~y%UhaAN=)O=eO!EZP^bz%a^j28N__5tEZ;Rlh%pzL!Zb z;M;Nj_%@yPZC3WVz3OIMVgIYSspaA-b1eX=lsRUT$oRFaLvd{@~- zEOwQHh!K_L2%;>@X~f*hGWTMnyvlMmF~72$OH8jU=Mghy`7H5FWx0@8TuFXF46G#c zOuH0ZN%kN{RFb)GCnZ;sgNW&sWS(i4@+!&kL{kMhofud_UQP_IAmz6!luOyN98JuXWo4f!PnOfkGb_lMihBilGf}D}EBi>r z736$!lZ))c#)40^dJ$!3If!Ul$b^z!m@Vy2Uvqu4vk%GvsK zXSqbNN4n9MN!iYF2r<`Lj#hYiIh~m2EN2ppPV!db8D}|<7>x2KM#yq8QFf7C*w-0d zWN%_#dAScU-&qbL7CXz6iOI5@NlcgJT%uG_K1)1PUcOB%E-%|-Jx7u&%KXN;WUMHg zh^C5i2Vz7;IhYt+Sq>u>SC*5BffeO+#lE7PNt9$cTj8#9F3~8<7l2XEcnc_v8_dvOPPOWJj5O zKMuCYe#A`ZBW6P%G1pN}R_rUv8N@tCIY)7?D4!voagK{Xi_4%Ey6N(v|apOMwzP#y5fN z<1sIgJ%L#2l>>n>z%XDkFb$XpTmVb}axG{HkZV7yfL!xg1ms%JXdu^mV}bU#FN^`Y z0kLE(djc`mm;HeofkD8zz%XD2Fc~-v$TgUSz--`hAnz}Wfm~Zb+GMV&%m5YxF-DT@ zaTA;m^Z;TBSvCQafPui*fWg4GfYCtAP2|bIdB9BI3gA}YEZ~0NS|Hah#sZ6hz!YF6@Ks4CVm2MxdF<)I=X6?vmIJ zkVZvD8&l(Av9&NE1^F+H!u5m%W732)W7242N@QYej5KP(=+SuUBP}V(n3@n7k7(dI z70Zr9X<@o?Ki?Rg6q9O9R1VW7Cnu$(8DpZN$2`l8QNU*qP{(}ZAecNZIWh%1HEA&^ zsm9Tfaq&vzqGO_xqGPm}LpClo3eTTlUnDWj7?*0C8iOO0Ffmca*p#FR$wmxQjiaU* zx#wfig8C8{6CbT4Cq6O->5Coho1l*=Hbo>wfv@d&#Q8=)GmdeIQAr8Ok!f)}J)AUZ zY)n)dnv*2OB~FZtkBc@UzzGR4iJX3#?dT&VCN(uC+L)XaXWNY@jd4QO;)i*x(-9pP zi_^&#ohmn`O-YV1`-wr^u#1FTw#bP`cg!+4@QmhWaaS`E`%Ez@W|?s@Q_R<>D9NZR z@iB?9X=rz5`{WqZ7z&oMOH7MQOiGB0j5m&oOpRm4X!(K%i6&xuOYx%FrKQA`k{%a5 z+Gws9q8cCwQOjbKJWYs8O+^wdatOq1rwbzyTVG23z|;XX1%-pt-G~n>Y^0IL*~3q(rrmDt=V1x>85#1f|P>7Oj3xN=ZVgsy&Oj4xqqPd(|g)MbnbPM`J-D zf&B<}kAuy<2!hen*V(FPQGF?-cJDGwKfBSiLq;W4-+D*gv`rX8NOiyJ+K z`oJv$IET`6``4X*(tjeXCgx`C+!w{L)V8LfG#J zeG^7m#B_FMF=59LeU-rB73r~*fXHGScHyHj4xqiRyfkUs_Vj^!hh-<4``YRbdTINF z3Gr!Ag(NFw#5k4mr!YL1>4^KiOc+Jj0 z%RPl7=d@hHoRzoaaP^*}w#3qQN-MyQJ9Xgz02V^H*b{n?Ws(tAMnB!pfXO#$j z9-1qnRUYc?^?68p%kePAp93HDZXw1lnjK3^TniuS@J84vIbgZg7U`ArQKwSbaU0Zh zsDmpt?&iT3@8LoRZ<)$1MR3M6dBUjpxG3e$YOBU7?Tfcv(T*(1K;G-@%~4^Q=?@XadX{P^n^!`Qs&KO|F#>bT4;Jb&y-X0N!3l6 zmy=VHINOYySoXM}ULPh`F)7MvKGknrYItNChpy_(z#Ko=CyCR5rP5{9_n76C($}Tm z(zRLgMCqE;QG(eYOSNoKmd%G}%IWffG8~_&lWF~kz_z|;%3A4s-n?b_7!sH>6B&p4 zh3F`;Qbvv7llpb;F2soV}UuXGN|Cq+=jh!<1KBUq|T?zdXwU#!sgdd= z1~VB+XQxh5=!E=AW^3dC84C`m${G)kN=s4Nk8oFbIQD#5H#Ixq#mu1!{glOBxhW_% z7CX+WsN;WskGj;e!2jo-`{lNU#Tb-*=|Hmu7GHIS&!uu(z+xQK1!Y)peUi_K)fLzI z@Jg;X`h9QJ-cj!?*(sYi7Arm%rZ;@6xhV6m1eJ^5FoGB9+ z2;^B^WRFx1dps@z-2`&|o%Wsry#>-g?K=o$ddd3;3=tS6Fj^oR6XntbVvSqj83Gpz zTrMz6;AVk20(T2MB=D%flLF5Qydbbp;BA2q1eOT2M}1(tTm-ra^bpAX0=jz(^b^=Y zV35E*0z(9b35*sPFOd5T)HhvVhQP%FmkZ1ixLIJ1z}*552|OzBq`?1HlV3@#Yf$;*<1Wp&2A#kz4kV2MEP z`zYxb=q8Z+KuY=rdJFUu$o(O@2MO#WFhn5ti|8ILFkWDq!07@r1TGhtC2+IA9D%z9 z9ujy|;7NgJ1zr$XDDbwx2Lek3+T#|Wq+6hyKtAK3q+1}LZ6Nm($Y&eKg9P>w7$PuC zV6?z^foTG#3(OG6^Aps!Tws>K%>r`-?iP4R;8B4m1)ddnL13Z4+X5d5ED>mra}o^K zMWCBNp2wiQr$BFkegZoP3=-H!V2Hplfzbld%|4g0b*?E$=M%-I80&LQ(H@dygo_J) z=+cz?8Sl;w1xGbkjIz)zt_hT-X@(!=|4q&hGW4UDOGX+sqs7kz3m(}B6b>1PUj*bB zKV-c*eoPzn`Qk@&9Wrj!)NB4zAKeEDq+S}ni=mNvsr*xhzc7J{CI0H;c@({&3{5QnNV;ITI{79^=@9=^!#s^!iFrkYiw{ z8BHICMHoigI8W8qXl#uaQWS@c%_Tqe&3*70)fyc}scgU73&eD1rGw|&tB|f*jHNOI7fo=lb zjW`2_a7=P`K{?~n{FhCtKP^tIZziP01?iB2#Ti|k-$hyA6%c|W&DgoW>>_0pRaWA* zT+!(!;)n8bW;!I@*UQ!D0vP)jbZ1G@I0W;$+)7(6Mj5R z8Aa|0*F(;L9e$`UUUJ42FXLRLeljd{5vXU-Z(NSov<|w=_}h!TU^rSl7(c~ciAx6J zvjXLpQ6%f)#Q13SnYz)|m3XqACA01$eC=A(>joV->#gL&Cn*15)J@5>q{!X0p-6`O z2dJ}MjoAfurlt9+pX`F0kYhj0^Np+v_EM(#Y$NNTcBYYM&>05@MJD?)&pT@M`A_Ju z&u@-&pqx?9*mk{<76Zc5+Aq_9IDZG7KiNyHqbf&T{fu?nzIa`sWWrf?=%Efbgymvn z+a6eeK2d4EMv*^^hvFxHU12q}lS3k%Jw-Y{M7XQ1(y4{9Pskc|vetQ`$@(K-*oV59 z&}I;JjtHM^gyFhL8;aay{C!%Pu(kvTRye&OMkM8zxw};ygaC4AUy?815 zO?{d#3R$M(B-}(@DquZuL0xi`GSSzgkHe4pwer!|7xcU4`hxsJAEMqDaC=AkmKEg+ zj{9S&y2Cm{-9e&0>_XjnR(1pf5rNs!_yvfv6)A z^6VsJwSE*IA-j1&)QxjOCI{~0bm>_R83WR^42U*`_O_zP&4|1+W&RP?y_9UA2Eu@H@E|e3#OLmHVsKcSxC*eniR+zM}MzqKxP-?2`>eE>iGi_D$5mb|j(BIvCLhnJje< zQ;=G0x0+rJwZ6pMHz98Sq~}+}SMOc{;W+EUVY^0Nq3&DaVl9LI$hiXIsg*15rO4A- z&al(^O4_lk(nUL&F4_t6beU);Oh4{rH#r`rE>HPQ^EkBl>C;##<2=z_)HQcGU1?VyT3bNd@_-%N6z5EK z2p9U14`_1;gLbyKr||Cy{|5P0#8uU+^3Tj%)4}_%oS&(T!z5{>G7i_ma6o?9<)QrZ zmK2pknHY@Omt93VwfnLw;>9_Nlox!Zp;BkqW`hgr7c`1bPc-4U8=WOqs6F4B9_9EX5QgWF&1LMd0orkFBonOo@h}P9}#`6~P zp$p>3d8{(-wUHm2|BLzY)M}ih&yRj0KTOCEx4_IIH{=J$#hg2H?2EF!TuzrR<^}W3 z4duylNBW)JkbcgMlSTUCMf%3bxL4}Z$2Q3^8taFXtkw}H%$Hq^TwAc{MO~<661u#F zE)VGHY^6&JcO=rlbs$tkX&A0CrdGy%tmmkE1qLG!=~2oSeLcjKddP8jaQcR#V5})P zr7z7lk54dW!}#8rW$A!8^Lby*FVrjjh?G39i2m8f(qH2i>b!$#q>0$oYp9TKE^DbpHTAfk%RL_}h3`&1srji32xpcv7p~`cg zLNx}(ozItO9QSL9>-HL_f3DwaobLHLjNwq<_@@{(zLsZgRsD}#OS@ZM;HkQ2;YOeu)xYvwmtvv1;|ae~?y`QQH`p9jE-wAL|c2@rQIhsYgEcw!C4^p zu)6{^L-)ZN0g|IxnhiP6foq0*sYZb0*3WvsZ{_}x75@sH^=|=wj8CDJ`%~~}^d{cu zU+7*D*P3B?b**?aD;{9QIgii`{fAibFe{#9#iv>EIaWLqob4qLx*1=76YLClkl^ou zyP^KC7W^<_Q(B0392U_vI z;M_0rf-J*N0_VQaX2H|J*cP`_}63E%3A8 z?C7bVd%BvTdJ3kMMB`vlzaG8%b;Fr-oWL6+33tlk;UD!pu&@j1 zIj~#jAe=M8V;iO49;q?)0H?z6=#%a(8bX84Mi@G80eMzS%1(m4z zg>)(7buDZjU^QE)iPz<}k`Fv0jpL?FjNX^t8bOxvWj?oE%2O#@HGVpujEyCKY@8Bi zHDPY2rbXgNvml5i!|2;Bq-Xyi<;fBC`5)z}H*?lex6Nb6%F9)$G$v6w1*pdAnd17l zxAGXaO`XprWUkayg9nnrN5@CS+2oW;pXjUfNk$Fx#iQqpidqQj@o`~A zwLD`k>Y*xOIdm>E!+fA$J;$Imd9$@S;!5+ztAKIX6ZL2m-Uu9*m>j9p04*eXvg$g_ z&k@j%`Wj(erN-bPmKd!MQS%FrGBDzz+v8L8Nl_ZpItxlhMJ6hTq2YB zM`LwdP2?Is^gCx)4?o;{F|P7xt&Z;*4#%S&*t}BSr;Eu-Jh?x@B?iDh zu^q-N7)N=um!xze2G5+cGCn+0=YjO)5V7HToQQbbCL+CKkO7omE|7Cs`r9gyXUjY~ zt8-YsPnKuQ=+3ic9$gV%j3+#TB*{qZhWHY@Locxh*4l_YvC2X0g?u6+o{xw~AIBd| zpFa`qn~8`IzpqNX0AzTD0%cr#^o2YT?tO^RA3}sazUzkZN+Uw=Vq!n&C3Zu;5#g^` zpof#ndlC^ozne<^lZpKiZ{dDiAm4vW|Lzr3`9LE0P+~B~c7kUD8Sm8svjuJzm?JP( z;C_L50*?#if&=S^6A=fa786nLmJ>sfFGQrfm^cjifU!B_6HP=uBokjjdWgu61;jA; z7r2>-dbpK10{KH6iSj0fqn;9bLO&7VxVZo$P|n0iq?au?VWSSJ>GiE*e$#Brz(K#ydM?NJ9kQqWF`NY8a5!YKhV zzuhZ?Pe3^mCt~hNgnKrS?vDg_!I+ht@1o&*u=(y8%JJPZd=K^^!TIhP%3To1?-+Tc zA{>li`F?B@5j=!A1Mvb<{&@}dMmY+WP`wp{E+{*{yP$M;Y&eM~3Uq7{Ewhvr_0 za{erk`$0J4hqZDDD0{}*Sw1K3|6u){=c=UOj3Rqu2KIr}weaM?!`HblgSG4e?t>IV zU(R@SU&b+cX+GE9xrT0ndvEB_*3!GezrmDUV8q!j#g2Ob5!si$u}_O`T0N72{T8&y zB9yx`*Wxuf`{0Zhz^gPh%fT?n(U*PH!>JKZQl_s+tdVf+M{!6Gi2f4XaD4=BUD4i$d5H+l+w zVuc@V?@0?+i~niJY(|2Qqu|jkZN{roU^ny zX3u6`aF5O8>5`AM=B>lNS~~XA(s7nC9qCUma?ejM^2h^+ zKBKnpEYJ(+4OtUp*%$bM`-7|f$$$dx2|5L5z90q9#+Jpv0v8$A@|+i35FYyp*$8fY z^#vJWGrevmaGXJPLp-=|?XK|G;Wwx;$7}a@?QC+5?!~gz% z+dqEe^gsQeBf1K+`R}~1SLtKS8r1KVTI|&Cm9nj=Ms@elDDJ?NHR?ETm+1S2QQiA! z6!LVBFyH*Gzn@w`(Z_j}YE=2@xFKkq;VsZ{>f<})RHKH+XN)vXcUisB;!1Vr9*1i5 zxyP}KgJt_o5pYnxx5`TlN8#H+vDNe!1P?T#XA=zd&t z1k(KnEB>n$e{97aby-aRwXC?873W@(W+?x%6%Peh=G{QXFV@O^iWN@>XMKr>F3R)! zsjMGH!QTOAebDmj5O^TCmS5k4_tf$G;KAUG8}&J(u10{n2;KlZ9z0C&cHqZ#@`J$n z?pw|Oc<}4sUP68WxQuGXHb(s$!8JoayR7&zEB>Pu|J91)u$0+QUo|VPEcl3S*3


#U|Qn>vy7m)+kr*G-=^ktXOfK&bABvl$F(NN^L6$ zU06cbe29gosihX4^ji$da=WTTS%DX;@eH(ES8b(=3bk#DGM~ue@|C)jrK-`V(V{{u zc3Hh4t?Z6PLQF!G<$WV!HCKtGx*#fS^lN9riaDqzp_C-8)$=G?A?W1wFDww5r*lVD!yj`ud15<4ybXwaCoes|qovt=Qr?m*(dY?mku|nyWFle^o6%6{*L`_^(@5Kr27#X1iWndMLHhCd?m@p+A{bsBHotr^i$jP*JV-_7iVJOoGpiE>W( zp@7yULTnBK?Xz^oy=+}{gFgOT=9plF+Xz}ZYYrVcK zIBGiJWWMfaqHxxxcKe zV$Mswobz@>II4fkvv>8y{9QY98jtvNft-F#;1cG_b%h+CH=+#J4-7^;gK1Kq#p67m z&qaB`FV|=2&a?HD?F>7H%XsklC^r<`0%U3!e(X!aFh}P++yV1bt_Q%mRs`19l(-_? z2&_SI{;jRK@fknPUo{*mxD)hnj>~+dJ_B?yOgof=n(kobY&7l2<;qEyv&&&kMbWLE zrIrwHawpyTo~KyfLR6pm+}yyHY8u&Y`ExNcE(6VRQPZWK1=hz!E2n>o3(vqZz4+>Y zih{cdu03m_owwJ{-#wZgpWMod3@H*FsvDAd5kyB6rc|C96HW{ z^K3GQ{MiMMkQbC?o|!ax)ISfLUq(0J%(XJqUnM_{fjpy*@AbeBfAPqNSx__&KkXR+ zqlmkdrUU{(>&khA@uX*+Yhhjm>JJbc{)X^s`oS!wHT38+uj^;3~YcrFM})9djs zdaa*@oAVEP-$ne{A8ES(EzZ`ubN@m22UfcOtMShH2i-gesKi^eFJmB{i__<|$&%Mx zf3}YI_J7cQ%u2V{e^K}Q|DgLDpH9j$>H9i7=X29f=;C>N_KB3~YP9sP4D)Bm9YXbLiJKyyuZY0453n(QMqINmiwE}?VS8D}+qk^Q59PrA8Dkn{pTHAwrC&GX3D>NZ z=e&h~laPIYdm4WKkG=PSv%4to{lB|=Hd!_+9!Rih+~@%o2^iu@2pBNx30X*h1rB7v zsA+SO>_Q?-a!eKp8g-Q*0h6*wfT#%^HU5k?{dI2}D{X0A3%0pPEh>7sH1+PEY)Mmo zxAAvrOZ%g8-=F#OJ+qTtvRYgH-52xPv(NXLd1mIB|1-}#Gjnu0;ax{sOr0PtlwE_) zsb?LX%3FC6r=|TwY025Nhq zz(`hP`a}3ro=q$Hwts^;n{u;w)IACX#stUb-K16ZewsVC`+;%zRJ#$M3S&k7zL6Ek zzXdgZU#f5kr-a?|($10PoJ~rS8-|f@krj-;yeM)R-)7tazmV??boQQs8-~{ebZr5h zZU5YfK;75e=}g?3@t39Crcn>3(=HTGHhU-do#1zlh?h3zW6kj3`-tz8?}}UPK9}qq z`GLd5o5nQlYc&&QjxarsER`B_gs*YY+;xCowOgGLHS;p+hx*S3;%UII_s6uBozLoA ztCZYl+)Bjr4b>;;{n<*z|0MNF_g;Aa%b{DI-Fe#YWB&s7ce?WN=loPYVcBbc=0WJh zn-3#H7@TY89)z7Ezm1#f(GK83`V8fZ=7rC>JZLU4_VfET?()B!?}yxXhVO^@&d>(6 z-tD4(*{N}Hm~~2{?PDr~nxmPx>1)m0mAo=IZB~5YeTHzgQ~D!wR#tgr_ap3CRTEa; z`iI}ax?&gx`_P zPx+?&(>ZdDz1?H*rgF^t{3GuSK2F}rf5?~S0RI4AOX2Bgkas^1Z{PSCdHZIRXYwEO zR>MFd-h7@NBhOX@d6p})HyqWucM%g`EDAASCwzbtN44ha#lDYZ|ZyB z3~xnvdn3@#snwr!^!xr~h3!uUs^k85qW+`!^!+A5}W9DwobaoWd|%6rvSKei}r&7ZyeL}SyK7AN~iXS7DEp-t*kuBszz#HY~ca()&Y~-oJ6_)p|f_RUc6v zr;jl6FV{y=9ZbIzw)^<*oDUwC{sD9DUHwN~_e2}=sdL%CK_r?Jz1P*fW7jb6X1!g* z{H3AwUx@8zB-}@ol$rmQe{G2E z2j-UT!`=AtYaS1i9xJagetU!OO7PuR{ccFA_pj+rB6N$8VbVT`Pdp?Aoi}HlM4LV- zXYaC*?vd&}Yn>USkGm->uag~ATkz>n-PRoxvh(Tr4(%mPUyv8bp$7kiG30URHP@CO z#m`HGCjJK6R#Se@h>suHWMcy~a`$1QaiIHW=yx|CSKq7mJcQ#>T=(TKtos^|K0uu> zQ1@?ib-zrzOp3im-n6-7*MQum&642SVXdcj~-$+ICinkoD# zI&)eRUQgaozxuax=fDcdW@b$4w=yd~zm41QwlUJ=`|LO!q7BobHvAFzR~!D2ONZ}c zwuslF^s*S|3+ToTNG}fk#-i2dn>K(>pPTClQhrCX=Q`;JDm>Kz>EmTJe_@>8!Wb`^ay{|(1TrA4J=Je$4W)Qv z+N}|79d+8%N=BRzzo~E3Q!fM38eVsGEJyaPd9`t;y)S3qLF+xObL(@?Uzs~0N)@Rj zH2OBKI{gxS`|u{02)n#>gnJ>5CZ)=-WID%89l3T$b9nZ&kp1?K)Iz5`uA{z-FUB
s2RPOZo;2{&;R%Ce6zqSu$h$PALo*;rkt?uS z*@bAuHEV#Uddz7sbV(w}EI1XD3JMVrl}sTHFT)2ezKvaywwj zX=uWMnAgIV+2quYO7i|Od?-BEcXaDtN7Ko0R2w|a!=p4ndE4w{_fuWOlaj!vFZXcM zUyo~*T@i6O6=>-El>6E5;B}<)x2A%M>yF?e3M=q72u&HEG9eEyr4U#c*4!L|?!=H; zMpP8jddM`GD|F=#Mx>%qz+&h=$6g98S{+Aj ziT1Ti9(ceyXL%C@Hhy50N}*pA&2FV~sd8>^yZ0_&z0EGwlaHPS;MtryKN#}lyrddj zgQ`;#$P=vud-lqK@<5Gknt-?t%KzB%;@+mKqq$5Zf5wHzgk~Y*e;_oW33x~XDwYgN zz)4$Php_lIKF)_dSZ|r{=p7X#`%g}nm6s2n3MmYo@V>=um z35DezuF)@&P>};yGb@xJ2fs~NMv{YYVHT|^^DU-AYSl zc?v`J?D*TGud={~W!whkI?4T$d&n{TNr|4Rm%ePP@UsRShMggI%*DhvF|3)T%YtNF zLg0pR`O9MGUyDJczjFColB3P%8%|4D1eGOQ{@Y1Jk^dCYD*4%a2`L)tMupEFQ0YUx z1y0pevt}fWxl3R`_MmUbR=or&Q`2z?{&8HbJv+mGJmC~5D0vq9`5P!r7A9n{?NU__1wy~wL>5=D!kU}bIs|4DX&U1KX88Un++nCEv(-`=(=8e~TG zz~~vCxDcqqGT5s{d{s?TByJc!@=h#|ojE^AAF$C_x-XqFCoGI3v+C_3PfItHy9uiJ zC9iVaZYe>{YcQN8cv#B`2kS&(V&_Z=x&#OPeKEx`S1Rh9APiB!EmK`FH1f_8Ktv*x zM2fs~-`=+8yeDQCF~aST<`9XZhUQ3NN}w`Cf@apU$_gT>R)A%6jF6(iRT9@i(r7d4Ltle6N>a!pNPlj22l0G6;agapIYjPp*2HDzQbJLG3nn-&FSpuHz{hi z2fTUi#LX4>;&&o_9ih&`R-c(gNAuTSI$RSm$VsiAr~>4DODVY7dwZlgU%<;1=%hO~ zverBmg$?us*P&pcb7l~hYSk|SqD4va$P;1k6k10vWQGn*bdKS~9^7X|Px1J4t?oRB zkt6`7-S#jX*Q?L0-oZ1DP(u$&F0bOOnrtn#4;!ZqC#_k{6aF65LL}JodSD?Fn)4 z7vo_2#*{5Y>^NTeC{%~y^4{r_pGmOfkz6P;8(^dX>^4b@%?tSiXDwgi@&u%*h%&+` zF(6LR8UBM7a~F0#A8EdEou$WE+1C|hWW(4nP5jc3{rqfy0NCYfp-HOp3LNz7RdiMs zV8u_I$Zg{dLpXPIJ0wGDqVIeTY7Y9HYL;Spl>*^-1j$>`M&b$(??F4}@9frEOs4!W zn^9RQ4{0pg3%`KjX36q&i%6vlP40DOq)bN|9Pg1W=7NY!BN4Ik;rTvF{P(3>v~ol; zhr?ABxJ+6oU8|mFKxP=tWT<63!7rE#%n()A)FrbyW+Juo34c!7bFR?IHo|O_!41pd zZ_&`(8)=y|IGra?9%ZvJ*#IjNO?2Sp6F8|rB;zB5ot<{XRNMJ0_^z%*TSO~X^}!&A z`kwEciD$aTj=}++=zyVoR-#2-;DSI1XcNi{A#&v-hRCTjpcjEb2$DJwwJ z&m*d;$w~nVq`d zTHs-@AWP`t{@)iqBAuZu{IKZq6daw_C=b(0M9Jn`kPW2kB>VSZo;ri{X1bI!@d-fC z1_(la$B0*lvT;A`Hs?M`fu!nueEuUzX%K$DfWp777E&(p>xk+Z0A8V>Xs?K)H^9r$ zX2a2b@KeZt&sK%t0dw>R`b>Uib#o^R-$ua%4j(pb09{7J#Q{fWE%5D!@9Oi$udht( z6QBFY1h1EE@%KY`=d_d1gqqS|A{eaH%b^;JphTd`+zmK+dT)~!86NVL&k}^$3<9w9 zLQR9+mV+FNE>ytX%zQsl@Qp65UUmB11JymRY0B9|9u4aAsl?RQp@Ci>MK4!@GJ_Xa zSA9M)Ndh-O^MGM2<0vST)#V7cD`vC%S-syq&HK_i_?K5i5)-`H_&9+xf@)**fk~B^g8HfmWt!86s}>rHcLQxPcKv@SBJ4(cwh$cVq_6FISDAu2a-0V;-|`3!&lwP zoZJl)E;+b@qK-#M?{2619VBC>kJbVFx^@rr6@mThkcO>XoeH5fZ*MO~H7|Q_lvX{= zZ8!$5!G#0BQ6ul2bT9RmMGXBo&f_7`B9|bxN-8b7-p(N~`U7)!tF0K4+J{{O=hs{= z5xD^vE~-*FP?!Bbtl>3z@%O{DBp-p72HUTW>yVxyw9d#5b~3AIAC9S+BxSEg!QTfK zv84UYk@JV)8dM{vCb-74@NPh*M-3)p#r;2v&HP!}nJjbEmWWO7=~uw@HGFAh?pKVQ z9qM+cYk&p1fvHninHjIT=Xzt#L=OqK-4&-SNbYqEA<~AeArI+S6zm8ZZc$7mXsEO% zIk4j4Oa2hfO)<)8**VMuHPX;BUDtSk@!7Gne9dnDc#^KO<0^pBIrvX45&#&Au?x4c zJjfn1MKyv!SMfNW9X1LLH!(g5?0SN7wwa<0Uy0E76;bdXMHC_jl?07yORBPE37!<; zziQtS9QY|&KR5RjCeNn5v5OSMsY1loSp(`OYq-691Hye5AIvHhQuWjKSYs}3YM=>; zB>F=K10!uT?f8pnbqVHJTLt_U%hxY1@B{=jrPQ-)k1J2+9*Zt1z_}=0akTIc4p$7& z|H(5OBsA2BGO*?!-T|c$)}}&-EEW>|(SoC%CkRM^xDQ7(pu!eP#B?Gz{ z1@c*-*vf(5?+&HUj|i$V?W@v%FH%1qeSygSn$eFmB;`C#M`$5DHeA(lVqdVl{Cayh z_Z0x9@OaD?8o4N21GzSZv%#pe3cnms>dI&&^BZ`W_H?^A=JeD>Q9T(M?D{-qj%F;o z0O9Ztz8M6GIat^xDeH60;GJF6<;isQqqt3kQpt8|3>!J8_0V>D@N0@;Q^D@9KUzLv zy^towW+=Yb|{#z5y>QLx64dnrSph0JOTh}C-m5tco zsKu5)W;v=Y>zGl^Px>4b&8;vnCH|pGeG{e-6Zns8K0v$-QS#xS{x6=9hq7~R(9B*d zUnFk;CGaRPmxK;L?$|*%Jn*$b)~na>)X1bu`8QU+3P*ucx|ou4W1nPb)Gu*=n(7R_ zkgsyU^{)N~kGKfRV(W_ehTcX26LD{FbX`GgTxL3WG~r`6Y||P#tk(Z%5|Dph{$&V1 z=FJN(N!b)!ZX$Do&zm$i!*#jt;?4(#_otLqaKo+95HRN&Ec04iZ6ESY%it2R=h- zeyXOL-ykdi{H0&thCzmGPp51|o;M{5y>$HzmOhfRrHk?J>w}FK>g2kGiq9_0M}yid z_8ootWt9NQmrLfpE&0@NKhbQ;8rTG}g=`JeTc*OEZ9k)|{@Qm;NoCV8Hn!ii!<=#% zynIHx!p<$5M(dwgr||22B<@&n=b)gQs;OepT;BF;Qv6rX&j>L!dE)m=6YG^g;@?~t z_N;f}bVTu%?HS=y1|CVGh-HI~P=Y}oPWEp6@4=Ev#Pvly@k-$^8u;`XW%EBlyq(If6?`bYOk9lnZF^`kRDpGzvPYFZ#s>*T6=`AGDo|3 z3k7Tvp(Ut((1XtCM=r60SU2@Yl9#q9VtTbPu$Migh250R){*o1a4{7XZP7ue#{7Cb z>aEzf;IOs?O(*ah>KSk+9pBf!{f8c{1lqIM-3#h{48;)~Avr!4lcBbN9Yvs)T-s*A z2n&?lF`QA6>Uk2MF2N_FgHJ;zQ=Y%}K=T8DM>^sRC9r6jf?LijKM+vX1R_8D(_Whs z;~hqUi?2}Czu$-J;=bBq6;;Phl*qP51pW}yG#Jk+!DUxz#vI{4pt6AjmF!%H$(cupj22R-$^3Z&$+ ze~vB49*45bA*y~|vx;y|^S#*YxVVQ* z*!}gN*ueAp$RS&nrl?1jHpIkdUE+!4<4@(1YFbf9D+13 zba*IWdN>YEd;-_n@_zhMKpZ%+^nVe|>b?djJClva5BHv!wZOr{#?!ZgOsGrv*1go; zYmX0u4nOTXqh?U|@%5+0x1Q8Lynk4er7=Z1dZ;4W`XP{`dEb*(fZW@Jq@BLxW`V|D zttpyK-Z=i%Wd3RhYT(;)jiG5Y zXa}Ncp+uYhR2tA}pIretsN$QEgUjbNH4}lZ%-^CU#UsQj9p|!2)zQR)?^hVr4oX%c*`DTS$shCi4N%TCx-IQ@R~;2D!v?LO1TnVS ziu0ybkVGa9spc##!L(rftUtyDEkg>^=ST7etm#Zg#aRL%91yv5g!~%04 zBI(ecDM;})C?&Wn9f${FXM@7$5A!5{dK{>ee7U7tZ}vw^7EJR+U-HQh?lsurKU$n} z1H3|<0@nQ5hTW{}duxbM`;ufIB*uzi2HTK^t+FDnk>%R*s2& zH0l~;D(&wn2zOrDs1{z{MnCw%$?w8!ZUum8+AiqntRu3|Sc!9fN^Y9!|=HR4p{8v-= zy-r0d_|-5Pr}x||^_;CyQ&RQoNiB#}8Eh2tM?-CH4ddxgHMLClKA0HS&6@6EMG7(^nyxdad z+>P^nit{sVjRFG{WW=VFw3Of1su_rqXz@_JVW<$+K9uY)^q*INrD&Ucf_Q@~!ncWXQ+QGsWIG#EjB0w@FZQ5`k5&zsJ?zhyx+0uWPF2i2Lvi!LmojAE z;qp4Ec88v_&9On$0HxGd$I>`#!R@YpPPK^{yjFuqj~pi)Cg(YMlmsD}p;g54Q$|yn zY`wi$d-?Daf}rAe9S?*aEO(18nADQ2AQ|C>js@ayhFU)Gpu5k zkud7kmjcI8T#ulvBrc17eWkY9=xr4JWsG;X*C)`2afym*&l)!C%#(GJ7o? ztS6m~!)9NW1c`t75Rd$YSciM4!`Vr=gI}+93spZrcd@pK!)fZ-P5L3h&C?w!)uFok ziStUTt01$T$!>5h)?edWh6Dof+qWq0jAyaup45MS_{_w=Wced)6V#4xMrGA_UyuEr zi0sRfxeSI9s?z?K(8zIqQ9ZkFqxAJ5I&nNMJ_nJH889vq34({NjNyYr!W)LU z@ZNc|U_tBN;oH{}CE?C~CC^Dw-?S*wfzt$XW*l2nx&o3j99p~C>CoStzW*)N^U<(kStBjE(U|7ljFy`8#5LB%7^oc*p+g!?x<4n@!6$41VxCbB?iPt^n~tJ>_lW0*1e%ibl|)$eYt49?v>z2>Xi{ zaAk%OtQe@2{xpsBt?i081Gb9s(0wUNRnb9YppFqMt!ol3ZK1)ejfXWy?Q2RH1G1V3 zJv1w)l;U0~u}cu#r;ltVD)kUj>Y ze9tu_kLz~+pt`YpzGauO)uE4`c=xQWerj5e6Z>O=NH!TJJ6D3C5{TA1Vr(66-N&lN8?%b9#{zcOu0;?Xmpz)ojzvd(&CR}fW}I> zh)Svd`9?ch=@=X_ss-ZDpmDHkWwa{bpnf~Kaf~9O z?4It|CcjkyhLO0(=W9`tzh;sm4g+-TCCL$EnA5r=xLmgd%Dp)TE39=Qk>kw6qKWQ4zibc0tjr>Ml1T= z)Ws2_+Guyo1dBrMm3E$0pgx!rn*@AbS|Fz}n&BK_O7nGRCpLP7I1k(uabso+5p8zr zDZ?A9wP*hQpB=AiSM6Xg4*k(pK0EAvSn;Rn%5Q19(N@K;>q`MjKmJG2HvWZ zna+~$mife77rqSOOIwwQeG^7EANtsE#Dh`YV+(?>c(jZ2@*$rE$-_~a`pDx)VEL~c z2>fO%2ka@f>GuntF>O2#5i-0=>#+0V48TP5QoVi9V{l0MR;PckD>S=%|Zu6`|qBQ^lk*}9<-G`b4zZEMgR}0_0QAjKOhdfe{lkE3>`%QIq5t<6GHA0yLY7U&A~(f#CsgI-ocS*6 zkAnnb;U+?6>(D?!MWQ5vcF2Q>eVN40!b9=?fXT9!Z$${UjAn^0Ez$I$)twNv*1+Vl zL+<)I_9kM05cT#c(oFL@0=kuMSq0;e3@e!>_v0I{0|tAKcNhwJ5OpSVy3jb|R+;eP z(?_!zagW-vwlV81G%0~8SbYHhP}u_krG81gOABMZuSy>8zqbqIX%?7^bzDx#C`)z= zK$OL4jU3`b$A0<1%JPUB^W(Z_?8U~OPgVf8t;f?-N}&n&0ZFkfZsH%u*oCUfM$FzA zb=|_{%qHs~$a=6SMg?2^I$*KLhrcBmr(XSZ15ogsr4SVz&iXgRI!b{IPO%ZD=52^K zbc0cm=Gj`}m7pBjAQs7EIS_*Xye4Ai8Xztq;LZD87S%toap|p5Db|?3iLpQ7lkb08 zT-hMdQmY#fMFb2nd2TVK3sA`B+i;2@VdE9zE&OrcKWa}elDkk$kqPj+F$Nr*1jy#;l1N>iBpt*0^^kB)0B*S!W`r+> z^(KzU6ln6WcIb@|Z;dx;7inA;jW8dB zA?XN4el+4bL`_w$WM%Eka1QAS(Il@PE>HfI`ow)GY^|tnC0crS=)Y<|D-G%@+v51m z@o&)gej{uNtJHsBM6s~`O=*rGQ(Tn0B2XABA?C`Eevz}n zWqeb7oAPubL-Tei=s-B~Rt5%XrL%+LPtBJy@rR_h{rHYOYgZM6)*JqITMf`+-4>be z@bAAJl_s{P`z?Vy270hohUw0Jvs$|URslO`3+A!19cmA~7<9``z>y`HEvTbk2J%Q6 zfKd=%u9v+lz(CHt#x z+KfQ|#n`BHM5X&KQzGLaYAwtz06J9Om1u44P2%Utnvaqd+B8@QDRB9m@i*#f$#;QK zTIR|{`5mTJ)oN&kaM8w|$m}l=8ySyEc&FEW8N^D%@X3pVD{ox{4_fy!%%(vpm9H?Y{MnZBZ_J0=N zn@;KA(sDxiDfK~x2SjUyWw#6K8ls~DQx+-NcSE(YjmBiT1xDYD)JifZr(HMMPw89Y z!`8AX>=AQz@&9En^SU9^O(FNsJLa%D#-d%|&*<|LpOP&Qmy;QMH<`YAJ$jBlZMiZUY?GkZ2SHX+;K?>u!W@obzZMnV3>#+dDZ8+VvOmeTqmQNxXRA-n zW!oa~MV%e_$iTFtqHH|k4_=n-)&P#-cHGvQ7ST0`h2o)mBC*26e3C%st`_V`N9`^n z0s$2^k6jorkdfjvHIl*)WN6S{x=e56mjD8f(TkO=7Ci7aZLfX7I&(P(qJZBsln?D5 zS-*ur)*tsnsVT1LBU^XKil%pspbU1I^Pcm~$DsiHpMZ33+epRjb*5bk*h%mb275Of zDcC@V2e{U{l^=YUmzf#w^Aa+#Z*0Z*E$9D2@YQbZS2<@ey~@c_bJLrf2Th(&>_-35 zrngV`Ty9X_&Z4V95CF7%O+MT>oGL<_lY5t9pptnN?{tnO$H)!$bn_FC)6l{VNX(Vh zPoaP&X*~H2iF1Phey8NgUp6a)Sr-7@5&-GS4$p#Kyw zok4Oth@fyvvD`lT99*u3fP;8Y^$ z)A}K}@2;vX^iVKBiHvOy7{UA`>?!~e{Aoh8tS)zHwZvXy*79C1hlzjb7d7t^if#Q0 zqRorpQ{d{xBextwVp|bDj|NXjIi^-+Rwn>1t56{+8mlow%PD#iG*XpR3XYhEfFMB! zse{N~cP3bLW_V)}8Cw#~4!z`0#vt~xIbTMu80;ZL@6Xd^P8*QsD}hkOavll4x$Ex2 zT)eOe0F9IF)UWE~jY_&OS0klGbE`%!a!2m&cYE(d@QLo_9UC@Z)sT`5A(1-g99Vzr z)e(`M=pa#Z4EPfvkV8`r-lRu~KuyP^W42aKi~X^+@%j1KV6v!s0&#i#bWPLBIb%-K z9!Q%xE!9lu{$?mX{dp_M+aCmXV9lBv%V;LWabzZDi?nh166t_#fVV> z(0znosRgi!-uK(z7h4b|8XvM#4$&Mkh2tyfjru|`_f~<5UtYy~t8xR2vm)$W9wZQL zZl2&2$`#SePx1G?Od%>g`P5>X&xvLyKvbY)U4z~VKaKCx1l-YVfBKtSmdR4EsM3wF zdEGXBGS~vSeG%?+70k28V!dN0t!nLySnSXf;7_F&m z(3b7DeDN8xVRuc_yLg4?bQhYx{sFnI(SHdb_D~jQ4Ja-NnVmJch|o{Yl|J8Y5x1W9eUuD z$0p#sAO4WxGRItly9Aj^g^h##GffqsH?+*kQ;~4fI9TgB>UW9b9V}YuFCjVSZ$W+_ zF1C^EEqlArjiWXOibv*<{j-`u&Tc9!#iS!OF0^A5(WvvXWUPb&44*x7?~tIq>NcSG zFbXDy?367iaPr7d^M?GCKVkBU+5s|H@$?=LS1pS0p&iV45wF1vt}Y$QV3vN`$V76t zVDZEDoXW!4y(g7BUfX+;xPANQVdMDk}L+k;pRQbErG*KTF@0o z(kF#qBv}FY_%=)Hmu4qTA;&u7-BR_iZDR<~#<7wWms>eU(Hy2a#Xq)9PC9kmsoI6# zNDu$;>K$s5v&P#_TQRi=L(ljhZ3gwo+_pKtM%J~$03a!GeCLE{sm}$$rS`pjNX)9X z5#N>Z+hq?OkB(2aJV7;2?Zr_E`mdnN6AlX6qk_Bb*Z5B5ey4AO_!meY{4cv}V$ z5#B@v0C$rrkUF}6us~nEDm9>)otv3S?hB+ zzFFKnmQ%aIXk6EW#}Xg67VR2mIB;@gJqc|^6!J9VdL9QNfK?j!R8=Y@LDlXmq2KrA zVl(|&HyE6%WrSdHt#(*xrm21B_)PA65Aq8d8?kP7Cwa26C*5!gsa6n;6k&X!4&O|~ z6A6sRSb(NT)h(wAg$@lrG0bQE{Ag;6(LIkfSn$X396@GNaWvwA{60^sweIspK-!m0|YT&&XN7GiO zE(%vIiS?ST{ozg+Bcdh^3_(q0w&x9?8g354CW47&JYQTVcj{jAnP5R<1K_Wz}uDjQ;HB@XDQdehpy2FKZ@PLT6OAO z&1@)(HYGrRwTj&S1E$5(1MaH1TZpfsTo7>z^YRtX)|Ozku2nbi+Q3e^nML(O~ip*vMOm&TTvDiV+0l|S8asvLMBjW zaY|UZaFiJ10t>w#U6;Vrkx_=h9E9K93j}Ff?&4#B^nmG?8D_(kZ11$hGiG`-L5!0| z;aPoRRCJ?tG>T1!g8o_6DH47XpFtAwFleD+aPBY(ykLN@~3foh@(ESWH!fh+f(9el6+l$j(sZ^>+ z=BqfO2xBIwGon3Ff+j#4=Z!A7F^*B+8i}c@OPf>aFR&av{is^c^>%)Z_3_TNVeS%D zG@kj+hB6=5>6l}m8M;N|=S-~#UJP5uu=+a~w)mL@FCZ+OJF$GJJw zwoGP{(NT-G`EAzAiLm2xh^V0}uT#aNB_3PvZNYDdzS~f9w}z0oAL@hD6)qT@fSxVq zLS=BD)>p1rwa%WmNsP$-U|p9E7rfV3Az629&AL8E?*v)r>4tilAv@}NbICe3RleYr z+^Qi2;U09`6=LRQ#NwY>#`3TthOzP|poi>zfjc-N0ME#)h8|Y(I>Mbn*1FtQ0(A)%6CWMu0>T@ zxaleW%WRgIT^tGhIg@78nZJF#fQJq89g66bzZe$+1yxXTi~SZ^bwlxU-z**{_1;-Z1pO!Byk3d9ppzKa zuV&{NczG|&AMj{O!(UCk%5J(Y~-#yw5WM)jSAtJU+u>N zT2k8TDVu4=)bZU6Yn>7QeoEH*dveM=j9K`X%bq#Z=d{vk z`1g`1mQNcyUi6YzSEEE@r(E|bHhF}Ed%5;on#pXxP#z1cy8Y^2PQLf@OpQ_wHhUl< zFsiO?2geic_v?${*noeGoStDkpt48q_yR5(2k!GO3Y&&NCE39ZpC`x z>x$TyfOe@_Pk24Bj@LQD0-~}^R*ah}oStG6Gsf&F{2KmDr1V|aTW~MBi${75RN}oe zwRDph>PtL9+wbjKbrd(?TA=OQzP%VhVH>yT{?DkA*A`pu58GMsY#k2?AMwwFVJbJ$ z7K0nueay`Wz}t6_qI5$3?OZ(~Bx3xf!nO@c+QPn~2kf7~#rYiv8%@b*{zDo<_3WD- zA#{T%SM>PjoG#u-*OpDK$>~kji)Wn7Ql#6BxwEwfsSykwR~ne=BSzx$C0_@e5t~5o zHUp#Vj8&w>gnPEMf6?j6d3`JJQUMvZe$!7c!r1P_1_-3Qe_8GgN2)@~N9hSmN|4`R0KjIUo?J%`)+ zXno+>T{O|e*qw?!Z0hu(dC1S;v-49yrEunZu2C>s0moq(Y9NQQ+se2$am(B#CGf<@ zYN=Zcp&VPBC&WfXf7bx9Uf9iY3={!U?SY%Qls20u>En@Sl9u;U?9z*`%^62qk$?Mk zFtiyqOZz;MuJpbX?9DURdQzd9?Mg)v*n&2=iGCgwtCj6>?J_;}Q{U`|svXjVpqc2Y z8&(LSJF$WTh>?Sn!+!aq!cy|yR$1NHtP>!BUC7#(FW|s(_r+o7vqYw;JXBj$IF8jV zu{e5BxKy48z*C+Lr5KouBb{V+%JBER$Zq1D&WIal3zzQO(S<;?kyr!fdr`y10`I1@ zI-Py&`yA(=0oZ-v(^lG%FBbXW4)rm02<8yf%tRlK&y6$spYqaTa(#Pz=32sJX8Qky z$`f1H9-$r`$HD1l*Sbq^ygq~ja)BmPxO$~=yFdrnK6e(&4{P*qNxi%2ZfN$6?OiLg zQe*)Rc2+@@09tAhq1`dB@f}9FIN?#8e!Jf)VmSjjh(8o*2KB!XEtQyh1IN_??zYN| zx|#=5^msiFz%dfg{4${-#LXg64ric0pd;_L)apC~f)`YuEtm{Z6xoRq+ivYZKD zITiY}Fdw&e>}t{l|FNpGuNV4-6$Lhw*7Wx$j|_6Jru++l4V`<-(rG+X*ddnKoZrOL3-j%xCT z`aL~b7G%qE!B^xEUHvqVEHVXpZO;LgPCoWNG;p=kmQXYN)*wF4sCJcGr(P?5dj=z= z68)-L2hlTNVK5Z>hz~Y?$i*-fJ*$llK$*Mahv}1?INyD;WX_h-X*bLr8vC1^`jf2U z*#X2u0k=74Ec;gWCZ( zAAwEPzeqkeOEd8IiB03*YZX&K$g=~1R}|6G^D&UF(b&7e;S3oV&pZ4m0`YX1SLPs= zPXwkF5oGTBMz$(v!&6L*BJl?`92I3F5t3i;IA#KEfc&zGy~NWE1ZJETZGIag}_!Y8wH6?9wZ-4I}<`-ti?w*v` zwmy+|*$4Rc)SENl$U>JEx4t)UKDH6}e3=1v$e&?<)knK6j-Z1*L*G{qt{Yxkkv_kq zNff?`EaB(;*1EgzLciF91MzjeNRbm4_qU2RO5eY&GN_yb?sKuAg_dYEp_P2}iDTqQ z)|9^KucXRa?pRD;kGQ|b_@8Kor3Wbn!t^TFDbEjO(v)#e|I?l}RT_-|M^@duD_Hy8(4 zoG51G`K}sPiAqOq?b^d^%bqoVho76c5S{UR^&{$Q05j2^9%(*>&#EZ=2dw2l5Y~m> zM%A>tX!-&d`~|Q@4D@V_6(q649I#+xybGFT$Qd8%Kkg-mgOjPj-Ga@I@rfdbo*Op% zw~x(>Qp>GqIZ3dIl~Q@5_4Nz&o)=`|NI)SNJX2<-TDuH$fxWNtC5#tI_j}*NF0{0N z&h=coAMz05i6`=5Ks*n;327I`CEaGAJ;iHR)ODM>X(b3JwXv6XE<&7^Q54j_cs#NB zkgp!bxWjtGmx%_GxXFRztyozko!_<|e>DnogD~t~lw)U_2T7F@j z_8P|}=TpAK9eV1euNj1c zPX>#056&v*)lV7m=cjIM_u<2>pdWS5MzOgrd5aZk#EcU1t{$B=H4g$qflJr0gg*su z)*jM+>Bk`6Fq1`SPKDs(o~UD?^sFy?G5WK$`hM#}x&R$n@YbI4mwaik-b>stX{isU zB6U04{TLXFwe8ev4y!76*df4Fb$ie9+U9_&{=oS9KrhUS0D|SBzECCA)|fy{Na?aE zmdFKgLV7kT(83)VRq_+iwBlzT(p^zCGU&SVdQ6Lyd`0B%H^0iN0D@+*QvSq((r)(`FCg`+nkO~pY+rutQ7np-tFe* zRJ*!u6LCvWB0HeQ4Q~nH2|r(ct#E<I_OpGO_#)L2x*IdjZ2B=t$6@Jb2R10h3y9%gs zht@EKk1U@NfrZ%O9LiB&W^F4z4KM;m|B9oBtKIGY0zE*&zjx}Yq7opIm=-5H(fV2M zfjFN+=(MX(CYt991q1rw;XOsHeL&1F@~|^P6upr?;kOqh!;;IML>?29m>-s8I;vBe z7{D|8-+34_FGtE$BYsbAI0l*f%_7@NKZ*q| zTvlbbt5=KND64*VG7rW)^WHqI*Zk79bF(AU#0==h<}GwIKmABY(Z*6-wE?r zX%nH=ISh`EKxgONzz2IKCK2LWxQ4f8&kD?M=mH{46Ls8Z@O%tLnxahgP(S&+0kNSdkOylQ zX^DH~3io^Alra3$jnkPok=5T>Do_4wH%oXdsVHh(*5M1Su3~%%xR5_7H+y;RRRRU? zD5A#)E9R?*osUcp!F64TeEOZ03K3u2p+jG)#d7A)#K^wjgf#U=^gYk7&{( zpTGKQ%ZGhIO0FnRp1WxrH?qmnA)za4UH{hGk0IF?*5-8bAPxq#4BT{1lglT^OY`qW zsPI@Epk)b!$1b{2+0;`Y#~_81EAv8=dm9)0oOQpb3FrDI`!d8-NmdeXzTn_Y+D~a?cRVLSa02v==PD3Pt1-HgQ z8aX{cK8gdBV;ixDw&7CH=(`R#a^>EJz~5WK#tLVrOar#qe;u>qgtuG-72wdWM65Zb zqK3$=C!jW=ZmNfRL$07j8mt83Rq~pbXZrzzV!wM1Ju zN zcb@4UMP+D`G>gvj&6F45L6VlW(U{RC(LHvEhOq&F$KGHdxC7@uL^-jz8Biy$g6wsGaX3MllqXnyTjx0vPl-0;r z#1o_od^Eqb2Pl%_9RQ~Au)p11AO)XO&jm0>+9z{oyNg-k z&)Qe{7whYoIY_@fTYJJ0OV+lE6tnfi82{d4m`WXMP5@7RFK6^39@}ZvhyCuCR@49t zo+1(2jysX9@wN)O=f)Hc#D!mdX?=5?gKBB-5U}PmG7s2Pq@6jh{B2L`G>I;-q0Ql2 ztKt8Gg==1^o8|){$)F*t$O8W<5nKu7!aWB0k|BaUvRwI8Ci4fQ+ACXp4 zg{RX5$>Is352`4!dHD$R6j#Jl*J-df@PLrcb%Ez~4}Wo3J9tx@N?yz(1fC4n*lCd8 zHkpvq`Zf0xWU#<+4Ah6f%Gk<^!Lp=&&LaSwcoMSg97ppNNlj0>5M0D7u=@yK`8v6Y^--YyC-3 z&k5>k{~$TVu5fwk?41etQ6K#Q)t~GsHvBoXOdsa7%$FhM8R>dpZ8cT?RrSf&(Z}r)mWmh zYA7N7I8K8G6=3^`DsujH$E2?0Tf5#=-gmp5(gy`$Q)MyKI*NUrFbO3nav9{V9lxjV zbRJH|RNI09?F;vx4UaDFd~UPn=mhVLUj99nI%U(c5p^7I zD$^z(Uo`>?pEz5kI*>jCpHTAG}0Kwy}A_=NbS*-E$101UV4=DdDnT#_7=2=?iHeF;~mh_V|aYCFsx&GHpNiCSN8r+ zLr(d`qAI7PEEu^%d+7EQPX}&gn%xj8Or%(b8Le$zF#BJ&pDL`74X*jC!86ly9Y*EI z9vxxv+EYGZ@S5be1nFM(5vEo-?fVAMlDW9GJ2~v7z_EUQ`-z6Aa7U$JjQB?}1XL;W zqIs+&+B0k%G{T^kC%ZAf!P&?)yt5OEwk49>%sYx@^ZC&#&9L;>M4%`94rxXUR$Ev= z*~B-SO`%2Dt4#tiPm@;ACYc<^E5d-Zy>9-Y_m2~FEU06#J#8{dfNFowY*DEpG)@y4 zk2CxRMg{QC@y;ONK=KOE_RP$}#|JK+3LaBgyW;}LAfG(u?DvXoJP)%JW?WIeg2D?B zW2w}C5{MIliUx{*$cg8@&QaWx0|#%6=FAO6sQd!rKBvfocbJh*AC2v$I8+W!QydIO z5m{6fwMVcap*^ba?w%$*Id%UUjJq01Vj*_uJrGs(T14=(fzUOUm1Fl%v7qoNm&qq{ z*eUOH(rxtna;Z-e)&0r3@V)(BT>4YvmaA98w&)H+cA*kZ}G_=Ln!R}>NWeI4h4g<+|m$VIs=ipit?TKV7{ zfY^7ch02qfE)WB8J+UfeF0Ev`T&jw~Du5_1`IF&sa<1CgPfYB!;{_03Oy=SA2V-?_ z#re(r{53D+%1iviAd6f|Jou8zE3nSlOYlU?PJ{EEu+*!%Dt4-e&7#pipt;+AXDyOU z>pZ56Vt^QUE1i#C!=*bAvx++ama?nPjsHCE>reZumN-lmZhZ4GUyqrHQb>z&8!ty4A)K;2m*~-Q6hUeOVj~8LeBn!6rB*l6tLNb3V-b66%X=4XJ%6kIpZto`@ zb~3_&Jp-EO4JZc#3}tgzCdU5EGk-I!>VXB!VIFvCaLFHTPq-OE0|T8_hYp%DI=ZAqqqZ8pRhd_BR3wvn4N}&-(wx#VnW)nq>1-;!CV>NL^70QJor+mS zziqe3?02wm8Zja3B@+J=GiygQ*k%!m$&*_wRYJ0xV8*(u5)xes)KqyFZ83dM@{|^3 zVmNj>eN_e77e!*U9WgXO(~kKmO+S;GE~Is4_F|9ujd@E^e*5d1hL!<&zT`r)$S9ue zsJ3m>G3_v(YFh$Jy|eQ0olprtasEq@$<_ylp4+L-3zZmJRS>G-aOp0>F>6SKFXemP zOatwrRS-mJqFjLPO>>0xO0VAFnIM9&EUV8XHdFF{Pf z26D{aCE$!SxZtwu1znzg_Z}q88x%hq6ToCRLzTLFVW8aL^?(zh#YmFH)zF6wbFSjE z=x|DYpcBK!oOe;mh|l02|7_yJGtPfLebqN33Aeqs?3yXoPwIIjObK+Hmpcd_g3PYO zKhMU?uZ)QmdFzO|1FOdPZdBe-ZqJHKKV;C$X~N?`N|fRR`kPAjE0YWk_-MRtZ06av z1VHp)yulu4AI@A&x_GGdmH@e7f@QKDLb!-#L)re|hVNZX%eBojq=S>&yja6Xa;)8^B2aCkF}3<`jE{0uTIh_*;jGtQrJ-XO%r@V6(VIO z2->Ps&+E~L)qGB79DT_HS@;P)8-QU=uNpWoD`maMTM-5^FFiC+$#sK<3WRGxe~)v{=J z1{)l`vjVl%G} z6}M1eKNNC7ol#?qF_rSX6vt#N?hEGL_A`ZL08~_jg_MV&!<9~S%PoSQMt}8WVE!66 z?x(hewN5Y*IZNqR7&v)NKaMEo>jYUvb$Fi^8au1&yDPd@}O4RAs5a-S4BGXh1 z3o>_oKJ9LKOM96gp1$W2e3UjEAd1kd+LiWCzHdYeqkByN_TO*FP@X;v9{#vFpMy`c zAAVC*WCWx4c>!_G7!5~Gu83;qCQe!IIs?K@3@PxIoxr2Bg89Vwi>_!#IouG}3ABcX z`hE=L?m9IZ4wZ<`=bp@^SeQt?oG0eF_sVAOREN-Qt1%i^GmD9!z!;i`URVOB3mRT`6?81r|f0?-+eU=L>o)3YmW}2J8M9* zagk@jP=-rK@&{s8e)mN%p)NIv;8Bao2b0p19$#B3#ce=oPU#;@y{hd^}x4l3xY;BSwh#q!7J*04Xh{YOBoM&mJqAU#XN7nQl8lQehSs zM9*6^Tqh|?!@8ObAQvl=+3|K!*riHKN(m;=6AUAPK}*h)!EaHg1nHdd0}%da!_ z916~Q!2cvv)0z*0cI6I&wEn`Zwhm{F$Rvh>oyL*fd2 zptk?~z=-8EAbC*323sJX1v4Truf)R_3A->4Lbt)-OmW5cmbBClL`S0r7rhUB##0A0 znwl>^0qWlz1~V0$TH`Y*&Ol4Cnc#qK453Uk0U;8;XC~&`tBpn75?}%v-G$aOcq8Fh zDn{_aO>tRUjb*2o^l^xNVBjq+2`?rUr@t@@nF!Z~{0tc}-d{rg0E=Pn+ z74-G#)I}p8@DJLT!nv~IMC!ejbIg3^~QcHy$ zN~%QcJO2RKo*4M7PjhX@OIa0#hXUB~=KE$>&jy50#b=bpma-Z*20bD29<=AnHjAU< zgrJ%++lTqE?*{&`iZWBQL3wNUeD|Ee>S6PBtRIqfL|B?2q#)xN91SPsF1-}XKtCKA zeEE_S8gYlOcMnjK26ZiU;4U{*&8*AHd=6$)5KwTMqq?Wxv;eHvt4 z_fJ)qUM8FaLJAhs-^d5Jv+1mZ!(N+XNUD6jFG9hiU z$B7h}##qG4+7B|_;o+Jk2{9J&NI)FI`Ov!T2bAg;&u+Z^aJ0KXuEVbPR`nBA`%8gc ztMWhBr{>QW?;mj+l4sM>?THkRjf3xh%4KbN6JKumU7BcAaa^4Pd~3B@WEc_n>+dtk-S;pYg!l{5#pdX#Hh0W*FrHnl1mT z_j6bwy z%6FFQ1?%fzTWC=%%a6)C7&$19+83KsaVDu5`yNWr6q6k8;UVg?7Dum8<>k{MjAuq& zml@h_*>HWI)+NyU0b&ZCNj)$RKM!7A=e^86N2t5|xTT*?ZPySu1c`}s3x z4iij+Iwgc7;X(WHLcxt#3|@5!G+350RJPcvNWtyEl3MKRv2|JYHTC^{mYah(F%YEJ z`zY|q6%_}_hI>yuPeQHp4?&JsnMX0I$yDI=brt6?(o)Q>`KZoueL3! zEumUCwZ=bRV@T5&>*F@ck%mieS7t{q&g4WUfuzoii!)S0yWmvP5%jbF`B}yr)IT0y|>F3FiTeT z(ovARM*zU{i`Nh{ZRq6B*1t7%jX+h`U9dp*mHQf(B)GwmUuJB_+ZMXG2l)7rvWzCV zqFJ!sNn^}>Oh~ol`GF`%pP;1p4a|G<&IpBbN@V<~z^;0~r9VZl=YK(AGze}94V~(c zzG8ehlBZ+(1Aq|3Q$`C!i0V+bg7^z9lVgH_D`7qt(b#OUw7vbU91t+Uc+_7ZNmP0W zD)RPyepX)Ov z9~%8dAi+oRB?*ZXo=k|O9JsoK)qQiaoJgO9G1DyJlwm$!HzminEyJm=%ns(qnx_Wi zLAa)5Uap~-)yI4Y!aP^QvooV>Vz8@XiB-BV8s0Q zR<}vvP&j=(hoY@GTntkopjJAR*Qg_wsb)@yu1jvq#-`gJF0SV!;vV-p6i8nBkP3vR z9I9ZzENSRAv+h+Y_mH8IPbnTrZgV0Ziww5(JimfRNyC&5&zpvb!qC^JL;HzKyUN{HafwZJl z2G)6a4#>Gy+6XRpCd~JxE!dH!{3Q;N-8`ridX)uR6@49>JdFL^rOoW>dMkc;Ayn#r zQnb5I2bDQWuP(G6p2i9XSk$FNbEt$SXSff?Yo{po1(7}?&DZt(t|CH~J6Dm;M9}@i zOpA+W{sV@RH23*av)?w)7940c7au`Z9omqys{@yaBV~zl<86*NUG9m25hsiAoA07D zMa)6ZDu{68c>LkDQE-H0(GYQ6q_l0dm~PCPViYjW8vjYws?6b;Lb3jLiY?o~4Ny}J zlI1JVc!LN^3>{koB4s_E+s^@E_iZbg@4A3c+S)C@0N-!ymAqR{+Jod>@TVIm@pc4V zJuDIxt?x(NBAdd1k@LS6>C-ioOZ}sv?wGBa>IdNur@agNz}2uxH^yJ*7{Ora9bOLV zbMm2eemPMG9?L3QCUw37Ufygsu{<9oWqqDqp$nKNQ@OjsK8-D2T)*vR=+S+u@5&C) zcq@qqcDBQkLOO&Ufx+k+xaRRg%z9Z(p8)=9-I6?@X_hMmJYMuKC&#s&b{aU9PKO%sxo$hv}+ir zXc@OBAxy9$m{`@2fUBYYgT-d{KBB2_bIyMZ=HBkG<|@q0uv3iA$lU6Kv<_*FkcO(` zJNt;@=qF`12eXk5T5F#Vy@9h-WpSh|j@m~A&i(*W@!x_ca4NBRFDHMlo?JHUpeplp zcmWr5Dj`p}(&YYI1{9^SvH$LQ_ZYb`q+>@M-#7#<7|Im*FYFCit-JI^5f1tnOkUKc z-sBTREV=#7LFf6}yeN+hK~1L(^_JI<5SIIOb%x1qBa(4xdz4`uKhI_~VrX6Ndo*1t zIlF2!>Tcud+vGHEDGMPu=UaI059@lGurd1(rwsofh@Vrvb|oUvZWOiyAw#G|z2 zH0+%W8%AJg)dbfYJbIW6*@r7nms?h4um*0P1~(4Up;Gm#E9|`wwz^1TS5e~tQ}uVU zq_IQ+KF{eYdi5DzLpI2DeNhD$hw4F1G zj?%pwp@R#hqFm3hWrdO-ur52Y^ML=IK~2pi2?B+)s7VqK=UkK%OHxxcoV=IkyF8KP4W&aAb?5Ai5>_;@sjice zH2ip@fl)<$pM74(UQrkN0$sBAc}q#s8*lxd|8;cmCVtmtu=5HG(xN7q117a+#K7%< z)FAeL7gX!s!-i4X_vOd_{BeVTzTQjPgLY#C1Kr@@PPQ`D(9YMY&0l1u*q+6gFs<=| zk9-*HFdZ$n+cRbD;w0F*3LkkY9N|s`rgU^SLX^ar4){Ow|LcF1oJUq@Y7K5?aXV4f z5`I}ZL$y=W9ir)>$c^%jp`13|+S6g!>2_Yr3R1{gB>*AnYL?ytb^>E_C}T!9;dL)U zkM1mlfqXwNFgO4ld!w z%b1gKo2mgoaFZ(NC&eJA(gusLDa}tTTHZCsDvqbF0{V_k^LJ<9%Y}U|ZUSsO zlQ2GsEXSpOs#sYi_WxFzN^rl3AdOL82ookOU5FDtGJ5tGT-(IWS{7yGH0vR4xiDS8 zqUuj$4!$yxiEoxb^IxO#6~jC{xGxRD%}$`D_IN-GkP%YnP zb$rTZ@G4V@RfqWO(HJ5O)eguUydGv0L=ZgGF3JnoKY`evf%ak}rf4bEq-4_-kkFAA{L${R_l=2wW)&1Pt1GaEv`wKhK`(bc?+3@j8YgsZeU#+iB|Wsj3FRXry5qOZW>`k;rd372?dlD>jx4g!?^93FE>` z1z!3vb;VSry+s}ra@PIek9$U&5eFv&;VsMx0ZC!RVR!~#ssUSQ*D17~)33)x@FTA% z&6Xo!va}(VU6DRvk{vImx2LDsw&jX0@H?uwbxy|&<~ef<*de2vpET9F3j^oy6qK^ zzMbo&`${0s5V=R0u!$zQy-W6`y)UgAb?E=bYicpR?9#+Jo;w9UB)aiU3=9QeU?L0~ z3v7VZ=#PQ!fI&)WN5)L+_A8NmpCWX7LzPxlx`iXN!|rO#Ni1xJZD3u53_OToSRMQT zEQCo-m36=a0$IT6gzC;ei*~;msuLTHpR((-0*CJYbKArjC$ANa^jMcexkWNxBrOR3 z?DFw6nR;eKJ=FJt&&qF8p9*w&n?+j(k~PNk(U2=*?2~&1kaf4V*=#V~n<_G~x~m#& zE75jb0Fs0c-24!wZbkL~Sa?NVP`=~GB_7{@Xm6#s_-Tn+Rb}*+ z<$9)xX^q`aBw8tw9?EoOf4DMrwR;un>&)>ZX~$R`I;tlM5qZzaw!NKJM>cDJg0-ig zd2$xIQ13Tr-{9B`7R*p=C1b+Yd+*ty?_z|Jk(k5Ct&x#T^%->rTbHmK!Z9UJ!?n2!{!J6(2hVtWh*DTX<-94ST%lv zQ?=qHF~fJkkrSknQtF>WL~BFo5!5|Xx@(rTmMNnu3i7oKU1B%j)}p`7`B;CV{Zwk9 zkfmXsroy>^dbqD(Xs0K4K?6>~mPR8R|DiW1Gbh5C_sf48`$5B55%@V!y^vu_XG#ZO zu?J=gQmv4}*G@v7%v|g8+^SN~4t=gZ8Z4f9`za79VWg9tsp)aW_XiW{y)G>b)~{4Z zSi+Gv^kF)df!u-u|H=3FpPwkvvEwT}h3^%DJDL~nf77LWK_|&f>3T4q#Wb(T9EyCV z^xUS~Xu+WquvAGUL%`IN)^JlkU)4fxc(@e@YLV#iFV6>rC9@#8H6^6WjZeTK&vbH!Z%D(4>av z^}+_l#Hixa$Ird1pW{Nr&1L%2&EHkT&Ti=ZmJi~R%HB78$$&~!>HR!Qfw^CZ;vNnOV%^5M-YL4UVo6iBji0|wccjq^@G&msaV{97r^}`=BoU1kA#rLM-aJ|W zrs6}G=z|b;@5*OkfS5=Ism&9n9$PE#w>l*E5RJmBoOlhq%PN;w zqq(f&y_b_Axr>6K=XSwK*0NH2*1Itehrp_la2a-`>hOn0P{IHArfg;Z--BFK@Ua-+ z6IgV>XAZdBS!@~f?m7o!XdPl;wQCAQ%~z_WIIn1Ix>dkqs%4aK)Bj z7_DVyL-`YzpAK~?usvW>gpYk(d^_g4Bl^57hE10k*qcVCKsm7i{f%`k37b9Zaq$u zvx}`H7dgQGx{$@aOXRMs_EmB|@Degw-HJbFw%_&<0`-KkK$TOR zpIaqIu_wGZeIo&XaC%`5MqJF-%oP<1?M#_wI>W)5dN^tf-VJyU+*uFt@t;V8M6mWPm`6VM%7L-D2hfrICJp>RD-}DaG;EouiAL;ElshE&3d6($~w{hF!B7v=ZZ}*WrZD4hGPk@UdGjcMxwu zFIz}M^Y7aU+X0FEdP=~SGvB^Rg{O#<1@aXVg#;jdjN%IF{_Ve*+npb;55M;kPianv z3Gl8eO-#S42rPIlzPa^0OwDzZ!#u)>!&A#{1 z%{6r2`dt93s)B8s_-Rp`s;bB=qG(q;AdbQ=k z?<7oDw)O7iX)AM{W|5uLBv?ywX!c^X4CB2Y3qox9Zfay?X{BxFIG?g*HEY=*gydg~ z{aCAC;Y|0}_2;hW!D#*rvEt;)@bMtL`I+xdW6Fu-d>2VTN6u%Cz0j76S`9DIk557d z0ggvC6Q0o|h2$4m=p3^pQ~9)(u``#lV8^paqWph`lq%Dd{%xjuq2ZQW=;V?6^DKn4 zFTTm$9G`L$%e^88#Owv=GDjgN_Q5t;C2YRAKGYjo5hrV-WO115A!Wc!FuhSL!~3x_ zRvz$@4@+Y@ocqzNjPO3U3(`_z*f*N*dECo~9zC6r61sSb5m%N(jw{mRO(*QS?;He; zR#p*oz|0>#daZd$S)*~_^@)j(&mLoUk&*EX9L#qB*C?N8ytbV)L$XS8K368t0F%i~ z$x~9<;xWa4_O`+hQD?4WHFV6>1+xevH8+m&yB${lVxkj!0d;M&l2P1l2zDh>znbca z50=b%)N;>dc}_s1u4fE_g$4aXgcl@vsi%J=c2{N*)iW?cTVH$xOGU$JAOe!(Y6g$r zF!mRZ#*AJ<^I3X2RXV|z)n`4cGVbsQD08q88j?-S42H6yzn{&=9K7y1cXj;cJ7V&$ z)wXvnhBy-d+i^;V18tco_-Z3A;<%g`0sx*{@Nb(k+-qU$>*@UNM7&Cf1i%o;Wo)Fb znl`p*)xT}yZ(Xg{`N#$~C1lB4aeu$#Rxv7*M@Bi3fW_V2p(Tac1xZgE>o0EEhC@!=k}_fX~@@GG4H$>=J$n~5kTL(d}!;-_#iiK|=L zE~(_{9b2bwvhJsAq5UAEvIiQS?cg17Tc5zZg9(&J zj0Nv=mNCaQ!YlwPXwk&8J%mJzll^1>cSabjgPrB&MqxK{pAL3a_sTX`Bo_P;C#poG zuvkGxl*c=qqvVO%+k0ebgrCR>Z};$65LTZi@N^7z%bi6%=af{Vgb1~q|J%A^UWW}4 zU6uyc?DRgJX1&B@?E~PgKTfpo7TxaF04HK}3gBpROl@KnhidR8pEDhjJENrWf#0a@ zuceI{AaVnd@HAj>zN+7p^t@iK8*Gbh~gbwxbeh_A$A~8 zKeLOUq(z?tawAqz{#+$v?7mDHV<03yF>#C z(D?+&bB>{QC*E@OI(cJ-G6}5`XhBU%~D+zjt31!bwco`j9VlT5p zjrE--FG?qtA{$J|*>g)W0TFvyh1yV(7e&+`&zSZsX}Uuq+%_@$9_Umg4Ji16y@DC^3+5Nf2>|b}+1nu=Z@PTlDkiC3TFW^rzUAc*u9bNNi&EEVV&d_S3E# zRqfx=Sz~qsWz*2jwp))Hc!+oh6hFh%9BJ4UCCYXcBz^5^DzyaCJH2|ct^`qqD;uys zZM>kz89=LbQA?;=*R{u}{7TQMoaQbyQ9A`eLwp}D7F{o>>CSBir&{d?IpluB0WFv0 z!HF!iv9*5+;-7*x?wfYJoj2cJft8yp#8@C|(#N)f=Au$_O0PFs_G`o|Q%=f67oQyK zP4dyOHLAn@cQh(W=!KRqq*I@J-pG-*NZYV zApFyw^%y$2hpygiz_~r`D%=y|?(gzk zKT0_Q<>YLbd$B@obksZgHTnvyUY?J~2gOh& z{l61ZJ@FVG8I1FbP00Ipq~kxbN1RZXGG(4Zfg#b7(t%2oXrjS($Ux5iPQ|CPcb~}R zL9yBu_WB_|5nRS%+5vwLpPrchI8$tYx{Fl-HZwt9sd&FGU{A~GCkc!JErNYNua6!# zc{TgagT?s8RQ*uwG10Y(O*i&`4!$+rsGeTAJoGElmsZdy%U~zZCuoYHzn`N;N+?L=j_&dgDFa}<^xqYvfIGXe#AX=V-COpiOgdi0zg(DXo zD74~_Eh3p_{c5P@w;34hy;Q=?x3p^z-L>O8w|Bp0WrAwP4JPL3;g;kJJmd2F){$Md z2o+}#`uN;(gvv-Mb(mr>L#grJSha3vQ(_GUsFyVa0yIC@cR1})GJJ0(lmsxP{PD15 zcNXlh`E9Sfb#5s{Aci)+BH-b~43`i^J_f_?r5~5a-rMm75_<+*5CCKgyw-e5ORy2s6_7GSW|Abq`7La8gzlTRt=nHsb zarW8IDFn@~Z`MJz{T&a#al&Ajxxj9UEPd=TrRo~7T@)M`A(%yl5ToVgnRoWA{swAbifB5E6vQfgSd^xn)EHxBh8kA`Kf@z(6sr{Sd>kUL5%l7UjYt>9i zX&Be@W7&R#-J>nvh!D|Suzp1TWH~bh1XOfQ)x6&sQh{KS#ZILE@S^>Qmfp0DSO)u+ zZw|0ZEA17h`=9bK#LfaugScG~V7R;mqSW!OMpn73Xn8@9?s?iek$U#qIFXE-e|J6?{T!z2}?s3H5#_d zcw@?*n&XDDj(cc{r(DwpA&8XTp|LvXxB6Jc$N~CRgDJrhrsAc4-IRGBY7n!=&@*p9<8mr2Dk|ORr48~*3 zhW@~htQbx!r7lKSioe{^(kxrzmVwGawHG)_q|y$oUFk$)8@PeiX&jlw+uaz!Z76*< zQi7@)5CNU>dkJY)u`#1mJXZOFj0RdVEx>$!k!^E(d_@Z^Do;G>Yb%6ytBp)tWTTg# zRv-oW!XWd|YJYta{2)?Y|B|mxe~&NFa|R;`&Jn;HNPQ7e1`Y+4%0h96qoctm_^~9C zIF=~vXwTivUbCh2e??-t!QiRGTJ#V8EZXJowl7#9^Dr?+xF{SaKD z!M|d8E2p_1bLJ7)ymV|umG7e3ki!4~yT>Rtg4AAI5$b&Qd1n8UcS!}w!Hrz@|GD|i zvjKyHLoK0@bICHU+tBl2V{!)GA$vP5?9(0oy>8g!IpCq6XRoVyyjl6D-zatJG;1Z^ zNgD^18ApajduT9l?3@L*$pB~&OT^{zXFt?D)=8LgBmW0(0RadIJ&K`m-z6IFV1{iR z*^nuf@=TV~7wDEUC5&Y_yhLhR?^<#aLo2Vt+_P+-S79#_KXMjNG~>0(a>^Xr(v5H* z8FjN8-`lglY?^RnsH`w8OEC3M5*fW^C2%w0Zy4Vf?4y8DZo4z3s92RetA^1tzEuQ_ zAPxK)shzPFLRKKmrgNZ$J-;5{0a4P|E}hss>I3GiitR^Qf zF1+1J)o*;*ljBjI%*fLIX!~0t+V6I`!`%~7B(@_TX(G1uhW{>Z(BL7wF@d$k+csE4 z=eYO%(=_g@=9%(@hMQ+a2nS}aYE`0iM%n^`XOm!LT_3FHHnz<%D0q|2ROv#yw6hg* z5;27pXgV=9*2xV&pi4Fb+WmUg&J6VwBXLKCWasCLjwJ&!U#UCWD<^yc`+3)Tc6Dj} zbR^PpjNQedMUYTsl|in4T!TI&JOZgVNj76I7?L`QvEOKlR;c?fQcn6I>|zx4klTy`r~fG;xIl+k+D`qe>!Lu;{8&ae zKLk!Tc0@e^u68ptz@0k0C%l&>^zlPetoGjZAEs*6;}J4RMq5^B2ipU!!Zj9;0nCch3~RDt zbD6bt@k=hej_trzRzR*K@_rw>oy5^;)4Cyp^~Aq;mUN-mj5WHSpbxcbvT{=T0&%-} zVZEvDB7DWHYf@*c#L|r>94oI3q|UVwnN1>TXyC>^ggxu6$y>Fwx(1sHvQ&xkuwOy6 ziy<*7lu{n2#KM=kbd{qp`vP|XPcj2Ek5MfUVeZ8*i9$TS?PjKW5XJ_6vOV(2(Fm7p zZ*2yha?oCRJEf)2+{W5-((?-al){`#g*c6}`zhU!!ncnsQlc_mp$}p>So%gzhfB}J z>HPASV%?I`L3^Squ5L}d??V`FyX6K&Q=tIw^-Hb2r7U*}Hv}S;>wCdGAPPj^q9e)t zh4WjR4?rs8$6BHG1~ROBq$wzMH>ZLYnL1)6@*+rl|7I@doGDA6t z^j;<@=aUE-6o`*hkrTF8(TCKX_w1V@Yms@KY%)hmc~yO^hnQKHrE$E!8}M(tfsVrO zd}A+wH@3yDSzcFOA3Ei0YhK%q(uenydl3#xrk_d1Xvb1tD2FqIQeVhlfrSw0lFk!s z0VrNskGrXy+=bI~pjy9M1b~^4$QDEm2?5O{=UL}M;N1a}AD$mJ+s#Sa>ZxOKxh&1f z8f4*>zTspp$5|C&;rT@mDmsPudQn{4Pm#SAN>{1c zIJrO#V`zhY>>TEQoa`1(3(%3YECgk^65l`nY6wnc-wCDav8<_Q(z|m}(l>JaKWXAW z0hBuTBMx07M1sdSHJ|zu6-Nyis{%Q0vV18Knpy!ZvJmQ>w>L}jD|RCHuZmwCYqArb zg!Q~`t!7*sT@tY2NR)%1CREb>JdJ^@F`5;|*wqIcAwL8_I$(fbA3{FYD|%mXleC@i zi(c`@849UGtg^v#4Mb{^BGB4E6n%)%UJ%KoP1xXlbQ>$nP$a!jO62Vh=)hZ0ZS`nb z(Zg>thAH4OKLv)Of0Nj^0%)@qstnUj?3!iYjvMLm_NlY{ z=HO^7yZYIi!D;hak7w1K5gq~{ApT3qi((g=`bU4Fi@`ercsT#g;Z#6BCtRJ~RyauN zIliEFLxS&gP~X~2%11_i#sAJ`-|Jg$MRysj0UscttpQ($K045Y6BkoJ{wA41`c$Zb zd8b6so>^pf>~Idvxv|3HIg_{1)n}iuTiH;H7wo))WHqWoKTM2PgLa~FFz4u>h&7Il z5iyRnadk1sC>2oV3II)YQG7ELmjCGUps}3mor*=zVuI_=>ZQ35gH(C=&u4-i>duDG z!<6vo^niRhzg?W%~;Iww2RGVJf*PI z$;?6>?>j;woBKs1%x2eTbFvZx_M--2;;WI4GYg+;fL;%1L0W#;;xbUeh+xX&BZmLn z3>mw+0i!{Q@Of2vrle+jM&7KhvEJbxjbg#p>p3qSP$yH#>bBF7o87@^jJDxkpX$Dt zi0i0#_Gx6Rne%!G|BR*=8!m3l*fTKiT80Nnr4tCe)`)%?;2a~VCB;>e=-dUDw6-iIQX71ct^iKCvo9=Gf0u> zjv8jqp<%*eFnnn>A!nPX9C8NOD3oq(@FIn@Y>DVDI>p@M;|z+r99M?#Rca(zUT#OY zt;G=kzAcjp{uculO-h;-IFvXTMW@f?7SkqjN#}{0w8wbE7(2)aon{Y6$Rm+gVe#_; zJ_@5uY&2V#Ku1Es>sVO-A4^~HDK36?6;>CV=T!+J3ZmG**+faHB-c+81fm!m+*H6K zCp_yP0hgtQkJcl!UoZH0M-^Eu$~6!5k#svU;m=eX^qt!vUifhk zqcQQgn2mOD&P?sofos)`b6<>Re1~)TAimAIL5N1fIKbHmc`(|4D!_6_u*pGavFNmh z%U!TrdM5qy8%`fgYKnx^2QTynb3GhY1Zt&QS~<;4HFt8-SZbr?Q$rkJ~L#dn}3l6!mw%Ks_?x5HiigKjP@L z-@-$B3m0;s4%TKhkMtq&<3ijcJQx*v>UYIgP5Cv7!L@i@!#>shwNUOv zB%)Qe*gai!DkeAQg|q)~U73xUx}6D^@@M6vh6W+D1Dj)ZANUE_P9n=l&v|mmKZIVm zIfo~b9$DYQ=F-Gpt!|v8?A3ktE1Q#6&7;Nof;mPhS3?Nm;XZ&njtJ$&{skAW;PAIw zG&5QHlfP=SY`mFbG%WHvV)7hF2gzUqrQv3cgf_?d#yhF*4@m$2t(76Q5@UT24GCjW zWNEaO()Y9v}~m&d>)P>p3FCC<4S{6GlL{T#$F)CO>@iabC3!|UBcR!a6zlAX?+ z>J{C5UO@GJL2%v2Vj)@}$Z-&t)e`zKmisstW^*!nlkkGM@g&7$3#lYZN38qtRoAnc zWMd016P_CGA<%GK3?=6{BiAo#AX)ElvW~PB?r(6=bs3#Prx&f6stu!uJ@I=E`eK?O zWEW%y!h{pDS%GFnt4D48dte2uFtUbzG;6On0H#Mwxe&dc&PSfY4*f^^*a*?Ws%?ys zEEqCUghz2Z$)WZ9khpoj_*ckO2HdowD(Y4%>+{-lAC^Qb0*L^tZ;ApcS`TMKXaGfo0cIFrr5{Bs)l z_McPy_u@+>-KR|+To=QjK^(L}n>6E|Hc396PjbGf7)uZxoYd4VMA?`9gHIA@{;v zzmY5Tu}JEwlyG8)zdz6_F1ZH4)qCYp%#P?dY0LkE}C+n{bRT|}ut!r$LF zHN=I32W5Q*AqI z|0D`K=ql;1x5MKPCUI5817P$=0i$WMm~~r_O8H?)*2LSZ1Pn(WF?IT)#rkFpN|T`K zR{2TP$IL9{+^b=Z4D&CwpEjWdtG2vKZI|a6<^GbTl-0oXG4_i0Bx2oG5`^`}pf{uZ zy%s8_HjdOO{=~)0-QA0Rrkw~V5NrR}c}O)czBHQq(0yF3@ZOf{EyatedW*i7-g=eC zmDz^gJdG8OMQJD0C#d789-x(U@r%AY|D*OJc-g(eL^_kTriXlG(b&~PDzeCBhJyz8 zGl)CDEVDZ!qh}RK2?Dzj2;(=Jn`e$=!;AkRroKC-SHV^)0^1}|N>5-(1JAlu9Ay3s zShTQ-k=4Ash31wri65Xy(Qc;$hKllE!&+C0qe@|r7_tq=l({}Yiyc(ZOy?@qg{PAT z5Lm>D7z#-+hm#J^$CaPaKbr>Q`A-&D1hnw*^E#_aHSz2t6$~W0klfM!N6NC5GcZNE z7!~YTHUi%$33N*d0VEFqd$VOlLSq&9P>W9}a|1dtKPmQCV>_GA#d54_+R z?UJ5g6?oAwz*9?<%1c^Ai>cZ#2ym3-RN*LY-85EIu+)bDavnwyIwxJmwQ?XUz83+z z1Q8Z}zmd~>L|79loZ6ixM)hA&?`-xq+qWU!+lQdoU?hfZWQCrT*&z+>+B51r-*n@p z$H$)Ku_@pBASKNc2=3;(@nSj8<0-hRWkZTcwY6|HW|h>-kd4 zxSvZ;DJ!#-0t(?E<&hO?p$u`BcL9L+Q46nBn>>4w(!H+}r7{c{5)0T5s& z_hVm?iGIO+c4vEj`Y52Mf*UA;YEO7!NWT*caSW~Q*Z9m2cXWL#iV4_9p!`KZB=gSO zfuT^I3eZ^huki^Is3fv9nP(SMADsz%%Y$xe3%`$UJ=-be&<5MM^7BJZr}J}@=&LWt zb)(qxMLlXjYRv>F3DCXh|!Ft08V1nRJzaBsEsj@B%zt#gC4b~hswXzgeA;RDu z|L%%#u0I~-tOZ7EfilieyMksilScRMcO058F<_zzd=%M%=@}<6UZ9w9LN73J)-jae zVeL?6`nnQc#>i*oj{P*L>)s_pzvs0U^4FB~yM+-z_zt}pdfj;W!baq^C;PU#ynVPQ=fD1r{(ggF zLy{)&yWX~wPgM*DnLL=GjB~+EnhB`t77Ix#L++4aZwVX2En-XjkfDx*E|861fd6Vd zVGr`Ga3I0*h0m18l;@xX->>f`(!2+7!ARDJ*1qbMYR;latVTw$ba0kzCRlZygxA>@ znnvl@J>LC(^w@s*j~uo8>BP#qQePMDb$uOB7M~U#0E@vdt8-zxzrj5eIBN1LY?~T0^GzIYn-uOqqJ?brX{H4KRs?NmG{l1PBO}V z;Cm7I3gKZvVC=K8l8G}H>925q90#=|IyZzk^|lfG3=+Zose)%s7wGEHVi&TUSpkRp zRF0>mg{g|{{wct7#-P7un#K6;q{|6JbpA5+LhA6Q>~!iBTtiX%I!GR%E?F+yIvM^S zl_l;cE19(6(B?Cdp|3EYi2ytkF&J==LRAXM#SBBG?$(e8uEdPoLqTIz~4d(u^ojdTS8H|J>Yn~jnduDgg zg|s4*ZiFeDV30SRjFgp?JMk@6TT@^y<$r*2R;O-eb|0z@y88~#AZT1Dq>SSCd4}bjcFu%P(FVmGVt4QH@g7A>$h}=kgd~qEp**s%mWc z^zS`DqX2+{?dE3D*6EYjlKS8IoO=5!$ER~=EA4i%QmW51grRL#h40I}qsH@Ehy>Nx z@q73YZ=gh_4|eU>nB&^G8^`8}2pJ#v<1#X(JaL~9-cTv9RDL^N>-Vdupf#4q#p+f^I6B{9oJxusx+52wh65&^Y_NyMH(P?7(7q zs^0x0oJ>mLNI*8g3U5QVtxWb-wM6uC%@Yvn4J5&-Haj-*Zutsl%>rk$Tw^+X!8`ID zJ@Nm)_m`hAAF9~fQ=1CCIM}xFN_ZN=M$!zZ&3ie=LRH8<0v+_NRRL-dE&69ju0=7M z34Ph!uUyqYQ7WMivu?ta{@!q}Z0cWqJaUDGBp?cU=V>x#eKZqbV#jDQ-ZU^a$d0!Y zX7SEndOH4M)^fHRfJ2Ht6BXnfdkAm~ZnOReks~2jNXDt7sK*(Jib)bBh|&?IsGbg| zasID}?x!3(CntV+lI?eNWxYm0CE1H1bDyd;pdz!#aVT=q%k(M+3S*X4E`tl`2brB& z-ri!pv_5bZ?Ukr6x1zRXR-NU6paomb0MxlCTEUuh#@8p^e7@)nNBn^WYfos$%w5%H zgEVqAt2tyDXTARwL?9R{ue?~4+Za$)5o*L8?&9EebMc{r^vgh&^mj#JiyDj!{L+34 z9vIS57KH9!ZujTq;R%h~|Q_7>L1!%O*UfP%$E!k3}oq@P>{P zhQvynH7An`6UgtDbeDw*z@Rez!{d@J=v2MJBkM~7^;!!JSWrdh0n`@&+YQt%px!w2 zu^!OyqiZ1yy{?3QLN-q>My?}~xdyC;e<{lQ>E7Fr{%^e7JV-rm253pULyeupUq#Dz zDBv~Gv?a1dZM2C~CNr3WMVUf^yqA3e-vu-;52giRK z2gk}AxCr6Nl(J%c1eT`SWhnjma3Z%M)228N9*BN(>;##MBasv4PjrFIAKkB5#DD-z z9lnHp{)OjvAUtJG4lZ56*~|C4$c?`is2*eW5MHI6W44;>n5eN?f@V>!Jp8B;lJrH0 zd;@RhhvcYvzq1Y23yq@|D*Ji4=i8^-l+)%q-RWO2eQ1z1{TPvs#S+%}n4nwDfp&xl z(5qQ3JBs<)mEMcHlJ7OcK1Or%I|;ucE1VB-nidXAry7=+w^~33f%L4V=Bx7BhZteY z!DqcMZw4W+bC}^jdKZ60%N^Zdvn*I3iUf34nn1B!yrWlbDQw{rYr1{GN~U= z9yoX^(tI6>`Eb1N33tZ61b)g2OSFAl=>0VPu*1zQ61@REv@++QoZK#jm(dOG+y>F!dRp zGT1J`8UE2>u&M=E71<6>%1#i2=H^%EjT5wQg<0~0$TzB@<;Zsif+1amSZABeoctRo zFRaLxktRk$D`;1+c^M9^`d>|A!Ks`_OIv)z-nn=vDeePRG zkPQ-d*wePxW}Zm9lEHjVkWJN=nd*iuxmr*K!fU4tLqsA8xxiLOU*E55k>b}ycNcnb zZ6}lB#t<*aJ9T&wt_SA2WYh-w`5kngPi+GHK!BPq)Di>Mm2r99bm7`sw>WTN7(ZwTG}!*T z(Z5&i!cuKiKFbU;#|f!15a_*d;|}Rhde%ZkE*m@z6>YSw>BXWFcQivFmBF`Ba_xAa zt~{=^)Y@2sVyVUfJro%S06c;geu|NJp=AqOIzV#e@YI3?#cKzyy20mcd2XwW@=?)Y*1o@gYOnkA^j+hQf6CkkG_o; zxz(BXInlhLL)Qv`>O%N9Qgy5?D& z^(X7yT!tl~wzwRWn5B7wPTvVXFN#hZTC3FNA+rJ*IjJrVu7)tjpaAW1+;Mk8c2sDx zja|cBhWN2;XWt}1YAYSQ4JCb^9K9HY+Iogw?GS*2rtcn;tj^{#HQ%_$oA3{vH@(?d zGZ~>HQD3K8nSLt$g*+y$%zg(ldn8(GOL0!hi^Kyab^>S(p$XtFq=JYATExpSomScn z00g`T${*jJMC~@cpd$Zx(aU1s4KCa+HYkqMso*%&#VhWwqzHZOEQVtK4!S(I5wo{<-) zpsY&e2<1|w)PszJSLfyYn?rcWew4&DKCDWOV1V3m;}r=iz08{A8W^bYDVxez3vGKd zkp(AeNWQEHr7C3gt}2l6EkCIL7m~#6Itjn7)8ZUF$ZwHynd5>mPe5D@js3n5yv`m9 z3BTUla(+y_>@?z*ipK64Y^d?2vT=wL=n>jGcMzPPbV(r=&u<0A!A<_>O=sv56!))Y zja4)N7!Yo1(oEUY6+pkvdk|^86%Jr4c2Izl0z41uM+4dRECAjqxi0pA5P>LfLHvki z>9y2&Q~w0S-PbiVS%otJGiTvW!mQ>bB({S{2n=)OoS5WHJRfd%>Wp?HyFp&Tin>1K zK8A^_GG!Y8l2+hi!H??|e}>= z9hH{SjE6Lm@~zo;9ieAf`uhgRf1dXO64{Jsyere;4j#QTdi?`IxpFRJ{;@g351^@b zPkXDb+9K?OGO+B?{lX|7LMbuTvop;T9iOaoC->^cX3{c|U^Vn8G(&21j0Gx$H2s97 z%N;90D5e?h&8_Ng_Y@ecR+{yyeNKv*(b_?;==|?yh|ul*t}2DVV4^Tx8%Xv(&sN`4 z+%5I}e<~_XPZ7-Oa@)DFev5t8?6n z-l{uk{b6sr{3yWxH!kZjSy%hh4($PEP-9b~(Ikw>jer9x9uYdZZ1i7PqSjbzg<;X> z+>i$}Zn+B$%hlt?ow!jqVbE+Y?clssbYmMr7iyf5836q6FtSLO6r zM#{)_S-sHYa5be${Z!(Sb`Iv_yD?=;7^t-RrhR&;M?EVpW~^I2UW_LUGXw)pU(IWr zsuP1a={U~=a9R%-_3UKx4Ct|`2XOb^3^n!Q&F$t*tXxe#1D23`Og1A9SvJN~F8oz-SMHyxPv9=e`)ti!}wKOKnjvnvnw&>JB!X^-;GB zr0eiOg;WLYdcwLpxEw(ZyR8;}WKW2C7p`_yc$4Uvp>QAein;4Sxd^zOcvqp}BcKD* z7Q7ZD?Zpxn3W_5UBEtSjojnjeOY5u4A)TGEWQXNVx#tiCpj9v5Q(gn?e&ipU77YB^ z`DQtjo=G&9)}>Ye@vjK$SkH$7#PKBPDTB#fR%oKCy0eBOS&cH5O1tUuQ?iFj_1q)W zFE((s9qva_Y&9yaHFO)8wKFVjO!zqml5EFi5M<3$qsz?XvPQGFL;;dS5+fx(0ORXl z<#tF;N`E%+3tqsN4am>cxWEyOxgIeOgf=eVLgoUUq}!r){h^iMN#^m=t|w~|1xK)| zVFA?U&7FQTUF;&3S+~VdgQR9w$3v#~U9v^MmY`d>?XD@aeZ2wRz~{{ARWdTa-2)r2 zPXALMOUCRLom+Tx#C1`M9Ik84oOegR(KtSyz^xXy6>HqB=@Yz2!LMn~#LSy>`PF=@ z@bR1K#tRuoLcyQ{WEakePZp-_+x}tG*1!=k7Scttep1ksckm9s7Qjj>T&z`Bu|c+@ zXp9PG6}0u)nyF~=yavU5(HK>lEtD<u_ zD%P4U`QwoV(7n=P}=m$>U#BPOx5l@T890Nx}hrau*;n#-Nz1YN^mmlQ07 zD`}i6zX-a-I5w(@5i(-|qC{U%@LLfT$biYF=Us59G(wjuV3{DMV8C#VFF%SDfQr5a zvrrbVGPE^59Wg@PQ0oMOOoKg-wjRQ%(lEL++m~%EmsvBw_@!CJM4a&k#PTsd|F{wW zO>8Zp$AjuslMab?zg8-lVpOdx=>f@IF4OawDrST!Ypl_D19@{$JXBv+I-M#k%-o7=W=xzv4`Zl5a6Q^>SYRW z$nH`F3MV;c+SaE2mm~?DAa+idovEL8ASYK_^mZCc&l7B(V^f#P5Y~`={Nn>GY3E{X_L+^lva0;8F7DlnZ2BOVgN}xVo6JqWsBmdJ*9~wtm^T z0ulY=OjkJ6HdN@lV;AY#f>7~{G);9XWJ#}>!yTv2(Z zp(hZR6CXm6-KhA-V35i#$giJeA0!GeU%5>C%cGWFt*fjFk@c1z;Fc7{peCX5k$^aV zINX?)AVyFi(jd-x)q!A_vast|bv&8y;QjoN#nC-z2mPTx>qpR7BqSR*6OH(twFKrR}l z2@#dVZxFB*B1mU+Y%fnrv;pO#cdM>(X+ecr6ZqZs5qPzFIgjmjX=+ctaw|4TBXD44Wkvgx`G5C_s zW4A>ow77a6PTtGNUemi$k=1gonCu6kREgaz@`}Zo zQGcZItQPDR^|+OYhubGEV-hiaYb&6ewfTZV1eESzZcbF2{p$fbtwQSvJZhuzM*A39 zETan|9bHGJj0T*c%phmI@LQCh#t@9i6;k6Fp^5#Otxph93gk-ydku3fuB2!kw$E5+ zz|hJOG%=o|yb>rLj#^{&+VVD(V=Os6`GB9ljqe{7$lGFAecTFvhp%letddVr-(GcI z4}4Kch!1;7rF=n7Di6>Pc3gif5mRWs~R&&-J-ct zzLS@idhjBs#R0~4Z?-H6fMQ#O1%G)c1ZScT{JR(8h2x;}L`RlrfU>{3V^cV6JIy?# z5J-U7Nm}q+I06D&@^_^D7X1^*i<`~ijc~R-BxTwfLT`{{nw#2GM8M$J`*RRH&!z;K z*+u1a{@;PD$S~z*MFPsr*XDZ-+Toy~p@%eM3#WoPgSr?C7Bvx5jlO-Ten0ea$v1Br z**}iN!P9`>?hb1s_q;-rdNywZB($7jpzZAoW~e3R8q^cf78EOxeJ-ThviUPq`3eLl z0~FHN;=!u6=;ciE+f2x_r0c&DT%BdAnr3%GwAEW5JJ*qkS1-_pnX<^iG2SynHi6rh zdlx&UncHJ4NKB?&Y}m-uCf zk$sUtWsXb?vU$S+X#Cc@P|OFV_AFiy)}vw=?4t5(t<3@fb-OkvRu5GJ;8)>t>t+BU z|C+qP9xRjQO_L}PeP?X(q~%m=sR!gl8&WtP6WbK(j4+!6V#a_>Pcw z)cF8QX9RNi$t*1nJUsLKsNzYa0D_ousqE^#I!@Oz@e%M1o}%df%xCQU*8YQDd@Hj; z^evjcAkl$h=~)>l-JsDmK% zoOSf(#4QDgG5tu&Y=5h?cat55!%n!Zv^_U^(s%#D%bdr*0s?T!pLdFVr7@}&ks0)408kb6E;XHg! zt&q2r?Ti93f12K8#7>PC}=jhT0TRBnz21S+Z&?A z4lT7>r8eike#3UH9<@or)uL&aMMFO8&EHR}v*<~xoSax5$Q*g;79IXntW_8gbC=w{ zMPvI&L5Q>qIvr&|8xUsezU{|s)eIShBe6KMOU=i{1{grS@1HI@aWe%lamwj>Ea!tx zJxj>P%XFNg$GeO~4cM~*eBXKQN6V3K!~GBY_-mU0ul8wzrC3xVe@pJC1KYM=65#|x z7wpvCIVk$030@ShYyJ#n0TXpS=WW^A9TUM;Kv0!skF8NZ69q4W&B}{)qB&vS*Eabb zLtDg}$^5AFc94CgCBn}*YJv>%C56eQIq>GLkjK&h3vTT zbFpPN1&(O!*xf0g$Tjl-SbiJX-_dAT?9YVARBp8I0ip~JN*RcJM3e$C@===$(qgQBo4(~Tc z)jNz0XS^(3KKIO=o`GV>>^L9?X5@nv6FWyE*+#Er;Xo}EgmS^ZzJbKc1QuQ|U^mftm0X1;<&Ny@ z!_^g>H%{|Bmy&gvNJvskdy`bxPk-f6+;oMSuD$r?=sz3oi}cuBY({P!uV*KkIZkVt z%)n+;zhL$xWc?PuR3rNMGGH3ByrII4km#vH>e#YL|J>gE(tM1-C){!2&cv=WvR zZ%pmvuz7psz&D3@C_?wt-u%)d5ecOc!^HLAD@Ori@`WEoD6Z2f1R6_&tMWBEKrD^3 z$43p(JkT6#U7JqdHjTzqo?%h((xf@9N)(|B)2@*kDeJ{`h!Y-`-EW4Hsy7yuhP<&g zzh8AgM&WNSGc6M}@5%`T1+__HxE`~jUdj+MQ1EXTk zB6th_2|i+z8E!{?l1dA%%QsD0I(lf{vVPavTt(6k9Rs}W*yS!J5Q0Wp;1e?VxfqPS zw6lyauw4uDk6PM`+ByE_W|cqwNr}HhHh0Hu>XKY>rYTUcFYSq+EY@rKzG9zZ$Kx*4 z@+_Q~H#lB_Y@W>j5BmD(-7YP)l0;rF;m~Zuxe=9cO97z4Ug#Y_7MpG<8xy(OIlVwa z;s!NWFR1mW0AL3uA#3I%qAGCfh0CdPF=F?ykk=-`)7Q)ua)zc4N+c9r&AzRD@C7*x z5WW$bHlJWY#(b+(imb%yy+i96T8#zKgIJQd#&uRKShy|WLbMCXmwC8i&=t{L4OfHY zx^to@xK?B+uhLlK<`MyJYWsm#%`(D5D&kQ}O!#RIz~-OyMoVDKK?9@|@D;V?IsIww z&LcWdX4~}SF(c^)lifJHExGb!IWHTjaSUkpuv>KH2*zE$xc5K~wB~jU6px)Hm23rg zXo{wQB#H}a*Zk}@x>wyvf;?ZH^jEAFneB6?uq-3n_(dZ0f)>PRFXxPfZahQXJ?fC_ z^zZRDNEImumQl5Mp`%$CO%YvQXK5%Y%j>+47ZO*m+O>x7S>Lg1YBOeM(L(O*W%BEn z7ft~`O|%A%`KWoe@n?(w3ty9Pc2ur=4NAQC+!186YSC#$8&~|b{)V#F-hv~BYaw`x zE|&NNi@FuAGm$5V2*JP$eRI z06`xuD6c`5j+Z+&fEMOaj|UUkfq9gYs=2l~@=YXbcO`yDY{z0fmLaSf@Lye8eiz+G z)fozfKGkbd65_l=c_gHqcJm?U=60Al~F z*Aec|``u;Ib+9E)c0ZyTuI|BE8w^5lLIwb2G2qTRkzSovgR7@=!WAjH`5nkh#yXy> z*ZmibfbgM;T6%!kAE{gHXqh@@%v#@H>D6lTEPnW>-wav3h49IdM4W~sVEgI+Jg28^ zOBb^wnH0Qa&_SxrCex!)>m?nseev`2@H*hNsU*XAO7ELAllTmA5L@u)2u)vfzZi>1 zjn^ZA?V>5E+mZHRe99i+ry-sE1UiSi`J_9$#EGGQ+=KdF56|EBLDQplc0@h_?#}kZ zxk*EA?g>nX=A-qXjhVAM*6SzvG-${KfU-@t-k5>l?8ye+hVJl(xMvQ|_{Fi(;p0;s zzHHrIg97!)+Rr@8h%CxwWu9?P@|c#gRJ4}dgta+zn_TJ(FqPubSrL{khWwf*7G&o8T!-Wc8I-CDR0pO6gZ`(TqTINivf^ zCbVnQ)R4E~ub`U1hPPhqDXIfbR<+GWec&cNU(;2FXiCLGU0^ynZ$-Ik>huN3B>2tc z>&iOkv{{2%r5)sIsx<&YGNo)j!NSCyE<;y&QuZDKxSP%JJy)Y|_YzcWV-2#p|DpEv z-=*!^-&S%S#Xqgk`8bqOUu{2brjg(Tv#w^`$0qSBxgMKdfxWV&r(Ge7SJur&R%(*a7eNU~hv%YfPfZ1T=7Pp_$32 zR33+!v+VxqEjjORO^otO(h^;^rwar-Y2BI_E!iRfI2D?1Yz%}lGP3z$?{qcn%-6h~ z>CNMyr48dKN3F?EJ;%Dz@_L{+ zzTx_V+IcB|O!^L+SssaY1z>~|V-XY}sVmUKSj=-iEU2fY&@Ti0sa@U8K#`Ci+6r@6 z*n|Z|0fbVEn-`d<#KX0e)iQ?Z5ap$rjaNQ0CHk~nI$x$OeNNMR?m;77!pV{JA>dC9 zhcHv|4rAzBJ?=`#csQb@=yE~vH!$Nplg3LB4fY@v3U@)(eardUI~S($ZpW-(>!L}Q>6^`2)y zL3Ym5){(I~2md%8uT@u7(UfD;ffiY40qAXgdZ9VFqPlsVX#f*hFFo%N=R5*^qp0pN z8m*?=8{L;Md(T@=M=Sipg1evTuIC0Hh5GocAIksW;v`;dF)1#kYG3{cHM|NvVHQBM!hy zvw^0TMkMC}(ekV@vR+~1tN0rz%A$BY--^K(MxDKBF+q#L$f{`7HDyWu#-y3dVoQM> zA*9&jv*~>JGcO^fi1Lno?f?K{&j&XEXl%7D#v9Craqv%QuMCl#JhmZo({JUeR z@e@zlacNu&{Xc9k3r`1fEiZS=q~yIY$K=`hT`y(iL0r58q5=8(1{6{VL}ztQy=F=# zI!VO30<(^yLg$hLZD9~|&~M>xXaBG%VsJd`fb9_m))-*nJt3*-(vkq46Y^a+ao_V_ zijYO{M;{9<688`XYEtOpCYwuoUzfJ=ZAUsD$Q^iF3b+HY;pfQk=K!qy*Gk^1%@42l zR*voazJC51+cgEO-7I)t2^c5C$rIR3}DHGbLHC`iDze+I*l)1FOQz6t7@huw)KF}edkOVT5^v*kmaEkGiJkk_O{&>lx@n3*QEvfUrv;2%v9~` zz_H=Uf5eb4P&9!&gGW4CvNL10r~6rOhw6VYBD7RU`#{or$w`11C&G0J1`2~7dhwT` z!Zbf^)-C>Bi~VF>Z-2i|0k=l`_tkG-bjZq@E_4X#J&XO9IC5vZiZt%^IxAjeWCna- z4|<428)=ZZuuXA*cc`kL)5iO_5*`fnlxIZTv6T){(FSRfzvgG-%?pPE5-z7Bauex^ z&lN+!r)a&->?pQ{Hoj6_SNeT&(MyQQWW0J9IxlNu3W8|{s8g0l-dbMQl0#?vVa*D_|0e#>>L(9yF#=OJ9=+0ffBVb@VJNjmTfMx@)pZeCMiR zr40B2bL;WP@e^P*nxB_E?|4 zOO^3|3$*uR>Tmb3AXEO8yu{-Fb-k-|XhazIYXnB#Y-O?{P9=`Id^&G{nY8EmmuNt# zmi%ka2zBJzZ?ADrF=8d8F87m4^ zt+WOxSOcNvC!;c7LDgytybr4N!KVo?hT2xJ1WD8&#-eN|R!+?#MywChnQ4Q>uAhkQ zoVxq-X2(5cRnX%E18M?Xzn>#CdEvf&t+dCUO@MQ4O zgf{{LYK>QG!UoZb+n~%b`Om-dDSRfZ9|IsJb^~vvwKMwy==SMeu{L~`R^m-IGdqtZL zDS8@+5VuC^F=kiC9yTyguX3|7t%S_Ab_3y7mxng> zs+XBKrS-Q$hC45cxsGZJ;L5yAY{5UiMeovA%_;l)rFrtPyGvCjFIx%0&4(z!ZB7BY=jc&zo?qLY_o2%Bb0pk%9{)($M8B^F$7 zg8z<*`^p2R_@VZP0$h;GGoZkb!XMpSP?PeDhoN)YU!x$@=SA1*OI_B0{4Lx?YWAdHCP^aUx@)Qi$FMNv^VVL?EG`VHPT>hhgZ<*}+1|o5( z5Gv0Svlr!AI;zW6UqzkiDONNQVr~kR5?$1yCZm;IsO3&3M$~19^S2%sz~dK=2W{~dcI1(mi85TaBuGC^;56myRTSL)S$*h z14lE?SYp$YA*H3X?;VrOjQ14d>_AdS=Dg;GY0wp|Bq2{G0bmag%YGCA;gAsq7dS20 zCgOb7@8DVRj4Hjl<%1eXgPys$>xcvY6!VJ|)1<5j*>(0Toqx!k5j)Xw6iX^? zAcHbBejgyFX}`}R*`ilVX0e}IsH(UT9YrXth6y+6AMdo_Z*{HZ*d+!Tw5SJoc|&7B zCcP+7Eh#4X{9JL5{bCY)&}Xw{?=irc!BqS*ZY5TCZoz92P<){amx}%mTNaap;Mljn zsE}>ei%Z!TyXe`wUpY!Me6tdn9{jQek!RnH3sw8kjSQQBf$oe2;ubKiABY5X!R72S z_@G-M_Sh39v4l84Tbrm&hIHZ5Vz^j zhHi)+JKe8R-lC)vJRi%1bP@!SK)4$f{oCkt%uPYHT9VUo_gAI&7+P00-jA|@S;$-> z&)j|ggYvD6d({NQxp_(wr?GxlrE6A-5tdipHQn!<13}(lTXT$R3~#PQOIA(3ia* zoo+kP5g?+XTr-6UxD(0U^3*an^6y9bB^u1%^yDloe#c?T4!dW+fs{88JWP%9NV_O0BWB9kve*j%Ds`f!ZkYYvlaiT)x? z?67{p25I*%KINoEQ>&cyKm}7|#;5tj)`{6ia*jgzWD@JyCEQHL>YPiHw4$c2mBEB{ z$s*$-ficnjE|E&Z0H#;FiJvXQE+3*t#G}nC!YQwb&Mt?J*!=FRioGxH&y?VFaE1Uv z5sPer)PnLUKAdQAsvrtcU4Tr=1S2EjX|wfZm>KS=P1xWDOBe0>^5fHKNaRkyS{9Jo zwlZ#O*Lt?pg5=CGF%cTYWdcoEaR}iDaw&~-SrAEo=n`pLG3-TA8 z4u9Du3<3X@;RUz94R;cj191V#n6yNcz^y&}Z{-Z6W!L9+e7K+r&FBFpj+E?_Wrpre zJH@pwQMajR%@mN>Hv3WpQnbpOzs8g(#eOGqu5G&KR?aQ}>oytJPat0X57bNouiJF* z@N*t28s|FTrHRiPX1#J{wDg8EMD8{A3BD7Sganm8HM;>UcqQl_M%&r3==&?ES#n>I z(|jS7sZgRtZ%7RCQ4l=M>g!#{`3|lc0tFQk5WqDOm(5#YPtns`>?@!k11t09aU;qd zNMt{LQj7VPGcmlqb1$ZVxC=Vh_yzC=$ED6{YGSSilcZk@T}`;8`Y!yoSd1!0q*WiA zn-kp^Dm?^Iw!WOo^CPxPB7~;3dtN}I zfo(tyAT~>(G&HP3S+%i{i%8EER~HV@zbMV5cTKJdOlMITs9K?^iZv+qAfmu{|g z*J>*wobQgWa*1t4m3+p$J@PrB zDLEtw)KX~sfY8)e#!RKAkfvc3FVi(P^%k>b3dGBQbL6_3*o(sfpa@rZRqVlg&R<_ci`_;;^{7Fnf*TUc%Wa`-ws}Spi4tMfPx(VF zC#hjBDk&RntuhO2eDt`Ok-K=>h3NZE5yUD7RG?>b8>CjrLhO}|s z4GL12(q&zw>XFIhi_qJJ zk7bklxSm0x!Oz>`OeRXlDsuKHyciYzwy+8i{@W(slZ`SNqVpd2g?SUO@ zU{!c(&enP1W*DDw_YCYcQ|~$cS8>2eOI7GSo8y|h_+c@jl$46G(hmXP)Fz-=aL``3 zZ)1CLN#U6L+ae|y7BL8rGSzy(*z2y7Jx1#e-3X%IPQi#K!uZBsikl6eE6+|7LrP`# zM;Z#Q`JVtmK)%0x#TaD?%Y}V2HbWViAfjZl^&rx8#w;mD-ls}`I|V)ww!xVD^_`QI zb`gLzxYTEQOmvf{jc9o7$jJh3t`L`eRuL*Ghg>1- zb(|L$jYSACHe|r}m9}!vtk_ZlZ#xt;Fw8l8iUDph@7}W^7n*wso57wig^SMAmKSl*)W_^`4o@bol?~_s#yMAXv?cRJf0=qZQWQ68=0xh zCQiUSiyo>{Jx#bL!O^0sc)9LhCPrUD4dHNo%|A-YvdS+uA86)giuU7_<*ShEFX*yt zscF*SUrJ@DYr*>iQ5QS-;Ag{H=osI@_r43c7Ww7xg#tgqtbfL}1XY&n1UuWFHN>v)dH59{_NegB_l|`4{w8uBfhir`{hi z#woJ*?=~^#P%~*xjJ4$5bce|GA{$HW#Nk?fTIjhi^wEQ&x0m1^_d0a%U$ZdI`Xkkt zRv9F<$6$*Cj_2PjHcUG^ghiJ?DKMDBz@qTqX-AbN+icALEi$U7xN9Wr|CCKO-Fr>N zjp95MS~qnc)|h?M+^{5R=Vf3j=Kx!1nV_B!@LZ@lg<0O@M)Tg7Ny$HdEumLWoX3f)3<&%{@cC<=T}Nm|AsveeLFr8T`u3>Ih~!)#?L^~>A_T-;%?Rc`%0sj zWABFGV=yvWz0`c@zVYp%8JNg4WlZlHv%H7CYjrH;RLtdRvdG(4_@{yg_aK#jZF@6j zXQ4O_oI4_`!PD)BGW$whtvcb5rsGX(0OVX|S&(BSTj4utw#fy9I(zh`$Vd5(tCGFb zLC0bA&M@1qCutANX;A1G@;L-rDH35uTpKPGoceQ6<5Aj8h$XWBRVU7d%H}G#45!cr zzi_o{fJ9|oBl-<=T>Qs|UL%U}|A6ors+g`;&k}TOaI!hRW^wN0Lp%C;seWl{8A8<# z9+Liw56X1%XmRz+1(d-C8?II976Yl5tx2zlj3zTpMs>5C?r`B(L+e@pcZrI3KYr%E zq6M+zL0-qy6xzUq&;?N4V%tnR7O>#;EAfNsdx^W=SKGk3ecw|LY{gm&HtVCq=EZ=R z^M@&y$u8DALn<~qxS`NynQ7Kr5L%HVwZr*py2R!fC{UdV6u#|q(oz5T6f29}DjJSRuGrtXTg#8ajMlUJ zKrgUtn(ELLjK#;t`1McX*Fnv;G(LeD38GQ7VEgiH=B{W*xs!Xz=K#c~^6!h-{Ga7* zNaAcVb6hZd5);b9F~g#?_ans6M>&(opnJ3lKj;+|oTuifzPe!fD2QfzVlo#PXopkv zy!Ce%p+92L5DHY5oH4_<9k0i;C!R+Bew&E$o^BZrv54ddc6@h638$X)*}rG#ooaQb z_3kOUgrG!5HB2J!v+A(&)_5S7C|rJ!27no3q>Aqf>WHbLt|Kl$&c(vN{#uU|xMmtH z+e10M=X<iE^NOHlYyqx0QEN)Om zETEOk9V{KDzMRx-2QFU7!3AM`L@4I1@SQC^&X9e1F7pV!dZ}0hr#S`Pw1;ea)w3;Y zL-aS&a7?jpk}`Eq zS8I6S#hdU5Squ6tdA{C6J!N+%JK5@0c_QfdVzJ{gP6HQZ(_QYMo5H=H&D`GCY?XTP z2}~5ZHyzO3OD>ZO`UpS)Hs6Uxrn?#0Px;|{1Ih0JCFyOIgn#&s0{w3=?HicTv)z(q zMoD4bcJ)gs18;fmzIq34s42Juv}{lxN}{j5-WYO_q7tcDd-j$s+C7lEe0e@@@02&< z?`tY_Yf_-X9-$;zgzMbUG+?NKuiaO|rUHM@o@6K(e3h7xdUii}7A)YW-wjP(%nfrA zCfDgQKB1}JDY83nJ8lvT5HyDJpwyi96k0(BF|p(^QuNE?In4{g%8CVt!zc^%rFv_EAlVN`74< zJA)sl$kG~+(^LFNWRz|ka_?Q#BceK!3^W8!>SXl3Dlfmi+`C9dvyN1|d{A)1NS*8Gpzb7SSOp^C8X|8s2al zhXtPK^ZgyFVQl-~P@14JPUL9X4lgQj;ZbI^EnBuSKg+c4$`V{CL{b6?Pn2(X>Z0%;Y$RD=~h7M2eEJIkKHfMjmipG z0Yofx&=d!nw_3sKsokWMgu)S};sDtEce!5Xa__}B;E)j({ik=mOdaboRNE>;p@+LJ zc_K}--x}_9u-)hQ{Y$D(<#buH4S}`;U zB6~;*omK4z8hJaI;})A1EV2W^^=zyFYPP|`Nll&g4trn;%%?TGa5NZ6Eb&24&S(Q* z6sIm(52C~`Gw`;gF?HOuh~(oAOFvl9r0SaQN4NJNaZ=NY9N8_11p|s4J!$Yc@FlI4 z)JHtK`bgJ~_1rT<3cK*rvBQ*s%_4c+(2|SO!>n_1gQ}uZ6DJPEjHPKIZk(N)>v|df zw%bm@rtCtnhG}5lHW6xu*S{4=qH~XE-qx~h;Kd&w)y415p^#kWY!!2-%q{58Ovo2J z`d-^lRP&?%P(DIn4fFTA#`Wi8P)Wg*U}(K!z=41k{blEH%6um5C>_k@whdeJL&q&iCQT$!ipJ$w}K!*iw!dpD`#uT z9T+1nRPF~Ty`7=2g?bO=UH6O1**%X>%+AAZIzR~06!0jUz)E^N!tLN71oipuxHXi# zQ%3R{tLfg@Cua>~DtkIOk-SJOI0>NRX5;I*0xf`tflpi<{VNZdH#+(cj*N$Pa?{Vq z9*R4cpyo1WJXI|FsX_hu)KK7C1GgSY`dRB$u_4e>>*fz3flq>(k7qp%9T6XJSqX=k z))>)Y0$PB~?(;j2b1JbS+8xTW)_>Q1uOp5BB#vGZ#=2l%uQGWwzyXu49&&%uGNIfH%I;cv379HI3g`U~cAz^eJ>|^= zqF$T2O4SO^ly|!%q!PR&wqQVF(r^wxVsbB`$r1w(IahalTrm^Nj4Xuxdv9R78VhBN z!RAX~jORX-D$H=7(ER`oHnQb3?urGKAeCb=8{tlQ>l` zq%=%3!`FPDLNA~8Cy*6u6i>WM2SOy6ro>DyBH4hMmur3KD=|0z(Tlym2ufBx|Fsfr z#Lv8S>E>@5Ff>~%9gl^e=>7fT=M!_yV`Gq|q(6~mchv0+9R`(?bcO6O-pRQxd~GZZ z6}M{)(&(tmkX#W{#hq02koU+JWxzk`_9%|<98t{unP)wvf*-SW2q%T9dsLBbfSTKE z7fLpB4q+|R!R6FtC5%Oz-96pe-Y|2qETYHG&6O0@P@w@j`I4UR3QKnX*;! zX)b)KY+ls*7N;NEMsQ^&nDMqkvq+hI2fi!rw88MVNBGa=jWnj^7n-*$E(0+A`$FfT z;512O*bLRUcb^X8a}6L2AqTGyla$un7)`ix)*K*KbPLK)AQSMuv_Li755D=3mJC?n5MV+m|d8Y|z3cM8Q zV)kB6ZTs>iAd6F`!ZC5G`l1}6v!d4`T5@4rFm=p=u+RsLl@V8@;zIL1hgL;6)*CA( z5t+`+E|wdi2BE2C;U81B9$Z8~qVfahIV4$M-7xTYpEU8)U7Fqb0v1d9jjJz~+h_J3 zdidDpaoifeMAE&pZAWR~6z}C;3h5e)KW82sH-;qwQa|V6;*%CTX0aVitOufnVX2eUPXfd&! zN7yLNYvf;ebs~L42yy$^pl;ELP}qNJ!5|`)CAA1!7lV zo1iyAcjSFOHrmzwXh)1_VNB{cAf@CIZq*bw0nfeNRhP6d@MRV5AIMt=g04fY5!w!6 zBMM(q`JKg>POo<%$e(Q`luwZwv@PQm<>n>0j@UEf1p#|&s5wMSSUeX~7hJs6&D1I9 z7kX)?b&d)ELB6z&c^#}O51V^h=ojL%9RuE4d@&e|9Qhf0Hy=}X&L6F|4I$yM`9e~e z0;pK4l=z>SEgoo3T9GT?=;k!GfSa)nhwLdAO_(h}(D%w!omLsud`>QPUFSaSN8GUl z7ql1`NnsbgzDooE&P&WkVRnVwD}_jc^qaI|Q^y8S@;yot78Wm&s8opAYqYvvMw2y>tN zFLF*8|7EMDs(A6F=^A~d-H~^xqx0kCTA~d)DoPQWjl%$L)K9tRIe3X=vdH}(=BZQ{ zgFow+cdW>|4tD~uDZWu+@1@nNd6=tu9uw$?Phq1s-{#u6^=bEd?$%#wvz1j@(QI4Q zx{Gv$zaHhYBq&SBO6;K>+L=G!{N^qjq`DddiMNwZuRySVKQs-Lb&QJph|SZ&VU=T1 zs(2qHm0Go!n$);7;YS>34+!yT=G3nv_A+r%0jct#MGJL;3FMqA9ShddCg?Ck-=iy+ z5y$68{l~vq^C&V#z{Gl%2n{Tuf@}&if>qbgJ_x%a6_yfa(yk#oRBGTe45XGzUGj#x zaO7o0Q%IT>|#l~Ydncyb_mV0xIHr|PV zFf0I+3;Q2A;O(|CA&~y0?xp2>nh`-!tBF+Ljb9KOb|-f|uvmtBw?+HVfvC;E$Y1;Z zj0!znVN07bb!MroGBxQM-v*5nT|moyP(D5WlB8kC<0?*p|+#djGhsJm=aIyw&gmOp%D{zUk@2T z6e!H`J{cW&F|1t9*D3k}J1N*YH_Mc=ILCiFM$)(b`&4`ZqMK7!1anRXkmYy^MQ0L& z*D+b7cB*{da*`30OlsscH99Wue8G`+(Efzcq4@*Dx(T~1;ef83Ty*Mdgou&Mb#6_En7eu+nlZlWiz&jymmV0@{GkaY~N{SvZM-%NleZ zVxy(Fg~QSWJv);&3=&oQd&r|Dr<1TgNru06kHk#=&Pw(#6*C4pHA&|P|Cy}zAZ@F% z1*zl)SDf^AjDlpU0@`XJ$x_l?XPSsn;6P}_FYP&i4r&S7Nh&-GBgHHFHnQ6Ub4bi}` zL)K$Z6KIXmepZvUj*k-MHxE3Ok>at=6QeqErnkvt0VV>mk+?BBhmHC35)~A5dfj zTj&lSY~fDzfAAAe+I6d1n9~O`mMX^{4;0&$U#!9JTP@aY69L%-oXzE4zB)$~3BD1n zhd&PC%a_n@A4vz%j4R;qvZ{-47=J0u#3N=%#I;`W5Z4_ly5tgM9rXh>aaUdRq_vp~ zOn_wvFTD3Ci@=YBV}A7kBaE+cHPqp7$L}9zsWexrn!A8Q6_&&U*{;5c9HF0OVdapY zrt~}Bq0#aAE!U@hJwiPjne9m~l50l}3y@ae8*BcT{+psu%)jcc=;0IfuExY{ZGHAWf*lg)&C=EWLHMMzY6KG~ z5I`r%Lv+utn_w41kJqBP1_*iIIYyRD=RU)djg^*P{08oc5j#qJx1-j zD>-y9&OU9Cp^1auX_Fchp|Gleup9zE6Pgu&v;vPX3+~x+%XF1WIkQf960vuQz^@nm z!DwaC2(DIK;OB3%9uUsh-|lCv*a+ZxHsn_vMIxs}s1i4lg`YY|(EYPOAQ0^l;F_ih zTj?Q{;YAra%!Oa2YeqNWp%*{4>9Bz%_R+W^S|><@0XEdQz@Il#BGPGlJ^L}iqqLzN z4kVh|0u@U}Bo488!dn4gN+gQAaH{l0!3_i^KXkp_Gpg2NRp$z)if6DemHwjL1FpdOg;kE!_FC>5=9J|vDxdn zDn9JvkeHh^LQXF#czCHPJzk+H-)<$@WA5XU)p5ZG<_Rvb+4Oo3fQJ z$p$*4dzvN2<=cA3i-c;o9wMp`meW;Gq5=eIlGke=n?(n4+T3=6FtJ&>^nA}j;>PO zT&gK+F*HbFG-6iHC8)q+^)*;cj$zcUB~b1~-4uOBfk(qXKY`ntSyoR)?VRHLmj7Kh zaIMno*)1xsxfV)!U3RsPbQy1SeM;_wrGfL+phI3py1q%M&T=*~&5WC%`CYfU$BeRB zv_!#>Q)b

pBRhSc$~sxO?pQoElQ9CRJuEgF+N;_Le4I+J`3?Jel3}G6_<0)uQdV9kA~*EDQa01v znltr84pR&Eo3OSKGF~m$^c=(~o>0(WvHy&SmSBI1yYLoiruF z@H4wC$&Ctnv5=o6?KM1pae@*$c`3-JKB7)g1C)A{w<}?lJziiOXi`oL{yPa>x1kBbA_>}L~^HhuMFT)Wd!Fc?hGJ< zGBg(eVfpn!1EjbDZ?e;6Q7Vq#D0qsB0Q)4?)rPA3hLc?pr1SkY81rH3GpG#kv}o?r z<4+vS1*mrYvPl!ZmcF8>OEqe{V)QAndpi=ZI z(PAp8;z2J`&X#>;n{Sf4 z0P}n)U%#>h-RgZFs{meD>9;q>3&%u)tSc-sBe{xgtX6L=UfT%yzBN1 zgc^+#_(>w`303b_5+TcBhrjPbTY{*uW|f=^dm}Rc-E0^h zcL6+ts+TAalcj8h<&;3+qXAb|LqOfBuOWF5i~mbeYEtB#N|d(wKD!mJEAAxAz~- zs2@bJ?c5H_l%Tj`XWS&-p6Q9rl6;XB|GoY0_$k-<=uzj$A;lo%xTf3t31u8Ro;gI% z^}>7e6n$y((3fNJr-4@c-%W#6Pu@^{{;M^F#215pWo?BfX2A5N9B#TY`ayduWSCft&M)&;@MrIHdBnm8*M%K*I35*(o%7u~ za-$;-N*X$s$no)5T_3J($OGVe5A|;~L5A)~x&<4K3tvSrH?2yd8e6?2~G%ozk|Kr)LxMFKXA~fHQOYwjx zjStm3VLp+ev4tmih`hwHp}tSU{U5n7F)zWLqqZreV1jd#bn2I9@}rkfFQ0oO7`C+T z6`-UC8tJxUeuzLBVN&eYLHETn~8IZB@?u2?* z`lZ&`$?%Hj6NLOIRIZu*k-m{9m?+%WF2NzoG5AO3cWv%_66Btp2S%wC3p~EZE#=lF zOzL6W7_yzPn*XC;E2~m{8^fbPk6J0c#8y;8Enx@k(Sb$VVGr8srXKm6z>LI>$I3Y3 zMc&-S#;`*di?LYI5RRo6H-*Y!XI#*7B5Tt-Q@s1(9;6%7!-`M?IrTQ*Q7#2asN0c; zuKqt`zJ01UPp)wfJd`yRtAcLQQ>aR^0TD{J2xa z5f>wr`E76R?lHg45sRMJr3p5PawQla6Q|$Bk$%=IxCopQgCUnat*jhW^JN4t3DMH! z&Lpwfj`Of*Qu;OUeLfS2XZfYRgbvjrz@rL6IYvA5R#z z(w*KfT;>RNm%1cQgxBkU-t6vCS`J^gH`=9?D{XVPY$BC9s$6f0knFQD05>QYyO<;V zJ|TRnL{xj`pch#05kE+{s1-_*sX5}NI0L5Bd5bs(uS?Xc3KRb=`m0N1p0GW-7yX2oKn7Wlpt6>wFt?;N~m? z(ke3lrvq&`M^;NE3psO#OQjNddGm-j;!n80a1Qs3=A*nd5Y2K{)`P(dTl1)N$GL>a zZ2xAhm2bR)genn0`KUhy`KuXK&VZ0*Nj>3IEE?PMsxRyH5Fd;+Mrg52Qs?Pdcr*RR z6Ao#v^csqHkIa~Kh#-VpgH);R!Vii@vB&%U@+`0Vax{8*P!Prh{R$pRwe{ysn1Edi zfg{6izsSusmReZs?`n-m+DN;P%pZpTdMEGZx5p|+jciKB3NmLMFM~ZsK}H;Pdnt*c zWt&qy*^qk2*M>@5Mi59w0vMz@ zwsjF9u3}`^g~-~{)@jT)S4ndk5PR2H-3#*;=VB}}k`8chcXSQ^!i_sWDJYMKxB^=` zi)D$DFUK%*!yvq*Eu!M^%NBIP|O&FnxC) zJ=NDDzT!@8OAfvrLwPinZ#bc|pzZb-^dxX57(N`{+^J_0)5zCw6Q#2y;R@;YPF8{! z+`N`ASp%E&!)DTul^x)j``D-y$EFf%2x`a=G%B{ln$2PNVWU|o5ioYOm%J~B*b=iH znT=gn4BD`tQ5v}TiRHp05gLvq!%s#O`3i01gMMhe7W0H&tnu)TY2`0 zT>6TIh=0oM`(nHu4UkbMMRcH5{9x+uZb0h`VMRplwjfO52x2MS(4p0TLb(qT@B0&? z@r9~Z7;JEQO;UEwsqG5PRqz3sMCrtIGb+wg^G}Z)XE`elM&d~ZQoqDMlY~YJo68-g zW}H4f(URKY5nG9R#52078T~xt@SvN6P|m4hf+kXhKl#apMkMJEmW;asgJ5Y%j5yIw z&|@sN60(j<)8pSD0GaUylfNfIi{p(2+|{I5p*#+kPrtN)%C&&VP|ET zI`f`N*rBpe^at>JiET}4)Ks}V)lM7|4;hk|A!UOzAd;2T4tVsE7B<)$*uO#K`?-N8 za()|F1x1%;@*@_?PL;xJV1!?HfDi-&z;!KjG-yLwNFR7 z(N#N6$<9pAE*YSe=F2vhJ|n&f{WwPe1MEq=NgqXo4<2-@$p-)gaOu5av6Aj*nqH9H z=b1LpSQX_Jq8(uvIbUqYzR)8cLCC6(zqs3wj9>>I>1^cQ>~l1fRHSQ3&xf^$nC2|b zw|1o|@hMQno)hF@YE-f&`ua*iI|}uhV7vStT_JvvQPy6P`5}O)HNd-i>vgoF(~YkO zQ)M<0`L<~(9$k-DUF|~o)%L?4Da1(x=6 z_xS?XtRukXn!_*BxUyoo+ew9YlBVS(Lro25lmRK$F7DYbmkuC*gc&?KZ>6w{kByeQ zc43#oWrNt-t3vwa9zv6+W&;L0zPPS&?%Q48Kx7veE(6LpDshqu0izEK3Gxn0O&IgU z@=<$JFsme@M>xqW-wiT8KUXdML>Xj@>6*gw_AM|B55vR$!qL3ozpv{+WGLd=D zp}pzecqYqy+-L@v_K-wC@Lu5-^<7Pyh2|!`tIS4X7*W+cpKki+l>EXPontKA!-;2< zH&_i5xZgoNaCjbJb$86aU#QcG%+o+lWxdWk@LG@J;Uuc<577e+^){HzrFTFi3W8{P zf;ebzD+|sK%@4ZUwIVpuu%8bI4cK0%(5X3QOh(Qs!)J_<-0{FVSWq9Zq)oq>SI@4p zuWCZle}#-d#+s8?RQ0rjS+yBbe2aGOHITo)Wmr2UQW)5OALek*RvJa1f$o)WRYR(7 zhpDT5>7k=z=NoILEaghF9&=u`u7l=O3&m@;#B*XAzZzwtUOGkDx?At}6AXN4p_p;E zIeffn+tjQ-f@7O;B{~LkU~$7R)0P5DM!nQ-#wpCu;R|MB>M6(1HJ&dYp!|$VgN{4( zdT&y%nVg2Jgy~o=pQVx?bswArj^~)=U_rC&~3ty}s~<*Z@}W5P|IL{97rA z|8rn#^^6NJ1XG1!4E+C(A=07C_mERN^zbZwwuI+Qi0V(@{|{Xc(=AVa+|eR&4X&uq z1$+Gdhd`z1{Xg3;03o?>0xXs!uQlR_%TUjL`mZ^H4ArJToOfUrze3EH(HRYjP?&ug zdq5l_-cXP-nmq?Kz(`CA&5^73^9FZ-mU~$<=D(A;SRqs_MPTOoRWGRt6Z7I@}y)2oz zmv-)b{j!Y|PYHpuXg+x;R!~2NOqFb{_QgXb>b&B*cNoTkWpg-?oyk|tqI}aPSwz`+ zuHA3x+!k}X1&TnQ=g%pm-${QRbH|H~t+hQHWU-HU2EM8+2y@3Q+}J;#8`9xVork!o z-0!?GpZA0b=e+DH%R4$S;#<7UsM|(>?5YNi*laarQn{GP5U*)EGl##D8F7*<;Zt z$#pwKw2ms1`AkoKYnaIzf>D~XfN(DV8D<-{ycLe-4~_&7ltgSYOJTf97JDTsCzh$H zVGzMa-Sy+>A6uYz;X<0!1T$!I97HM3nBd1co;ODJjH zxcV}_#!nHM<>TTX1HMYFU}(q_fKIl+#mARi3l3yMcyN`Gjy7wpSH~WlRLP0(6W$8G zz^OHN3ITtZQG${b;F<`d3~Xoe1*)k|&O5QTjDlSe^5xgsI%S~aqzM5WvIvlrwNX|i zBK;DrdUeka4z9~J>mkli z)>GN>ZYKKVaWvRCtT|5tHk0xQh}fgP^2q#qW-S`I5YXKhB1xH24;$+n35z zL)iQ=-gD4-8mwUzy*Ok$#1{9&d~xly{+1E~w=bAy*1vc`3wQknc4CwdUU?QkJW zlcXT+7Iv3{t0DfRKiR#UFBw9-vrk0xp3vvXele=NOS*I6!@pgk*tfR)3NpF>fVL`& z>Vcr^9-e94zQKxJ`(`1STyNO4&x#sL-l8DrT3YTD3Cm*~6n&dV`1;zn4#vH*6SxrK zaRfGaZ90oZ(*^8`E&7Fg-F34q(XRa60xrx$#qH!j?kv|gfjUIy?TnqB`nBBNvV2ik zq#>;0d6tmk3%^ljcLM)s3UD6;Y_MA`CL>yfb7pRQv+Fi<56!X%?s(C?UivZif@hSf z|L@Wx{DP|D@56L?Z0SFZ;Ty=b{}uFL=!8G2##2!mn*^Jy#qOGzfQgM;?+R&g((_5d z!H2ULOM(K2u<>?FKCP8ev1G9WThb7FPSgna{p#??7DI-n+s$>(sr{&YQTL@OZw>Bd zkH*cOKL8{l%4vBg17hE;xs2Edhz$&(DfzmRwcWTHyQ@U9+8c|(JYk=Di;0;D!?ffi z^*c7EVG8Uj9FlyoeAo+^NR3jWSHUQWyI@>cVnH0%`)LW2kTJw^aqv&i5WBZ*J5!?z z|3pkT)h2^}T)Cy_i^LW7$I&@w0k_Jhai|295Bv(AQnLFv{D+U19+fM+J?E<#%bnZE@GBo4R+jJ4yf~n-p@HS z$7$`$n)SoZZKZ#%bGfF!h?6T0i%X^JV#XTBV`EriH^#gGa;!akBBfdJZeT?|nRY;e zr&9Asj!L89JL-3*eG})z#-?uC=upTxFsq8;2&v<}jlF|Bylj%~@u|~L@+pfsMz08d z0Aw$y7^{8<(_<>r)4TcIE9`JJ8kB2?e_zTa~@$*+kVFGuOv z1EvFPbE#z@HtKKZmV5z+upzp%?H_?j{moKd4uj-pHJd9T>%^f>E1q#<&U7>eS<`(GG~(-#Akg zhbV6oHQWB7=R>suMhF@)4W2zazq^8*3G>+^3W5jI=oxMy(xRvoyh66?j6j>RsTZv* z8LCSn`A*)CzIdCfx%#m_Xoea}VY*{cB@tQBw+y$;MFnkI;@1#>8Pln&wx3gasu^?v z$<{?eEakw@V&;`^Ops8QVS{tf!qxBv%IR-ssZqGJoiL8$Dfv4+7bUH`urz2X2CWX? zL8kGhCB*OzSA;YyJF!95g8({_n2yj{3oXfI1Ch%Emsj2qi%T1Y3$|z_JQ@Uj)hiZh zA7qP1U>B-rMe+;yq9^!AhC!4+lEVV4fGZ9>&=Xk*{1Y=$yDe)XqKlt=jzBe}$3?gJ z5F(YuNWoA|N;cu_9tZbmW6Ki*aAUEX^I!pPV_Z!vTwGX-yKd2G-5LJ-*4${9oJI}Z zO}$d&*}?-(OyXv1O}=aM*1j#e-5XC}0(7D9(E1}YDSiM6M-`~p+qmH%)#8!R==z}z zfW3WUo$|Z`p+ujJJ>#_OGTCOZ$8`~^tG9$5TTdliQ|-HL1|Je%!0S~$&|6Ih_k z$kg;{+i{8jSoMVe!@Lu2U#!-08!fvh{f*37dAVcg3iE%YpG-BH-2V|m^BjiIB7T8+ z1e09ytKYXBguUMT(se_)8Dp3J4w0QWP{n%IQPlj6?A782&LIN=p<#{j^&hjZpA*=D z()a1&VoAyz6$d%y0qksjJMmK5@|RWbZ-{~p=JY-@_F--Bzo?p#FSF7;s(Ma<;RL?N z_`}KAq5)knu5CF|V4VlmqK5E@0PGkMEop|ST65Y?Oxw5utyAnE4>jOVZq)?Lp!JM> zF$AQ~@F&u?eT*hw8M=9Z>}~$9!8*b{6g;5Ccl4H4QHy+j))*%OjOUU0%*wUxe1fm8h5CnlFd0qh8oxbUx6RC7{~ z-pcJ8%8i#E+~@jeuQ#w_qo2I2pC}%;s<4sdm96>Z)XXCfN-f>$WYGjX(8~VP8J#Gl z9REJ9>H87`ZO^=4C(atVz%ht!F0VCT@XnI>Z`NlV#$4`Ms@9CC6Xy5gf-iy|Obx3( z+fBugGUV`d!IB%@^QZP}0iBI_Jz7R|7L!EEzA@^wWzFW@R-I!=@beXsY$y5mJD&t? zO&#%k(SZi<1V@-%A@ty&6R#bx)kS2IMw$P#zcv9aBWlEJKamgvuWosU+ZEpW4RHh( z5;2=;x!~tc{SMV}pvTun+uFU&+;`=1ouTvs5XL8VPNp^Hp4z_Hz#$dX%+*WZIK>r9 z`c8xNC)!WVeTeK4{){og&4V(QQX18vvh`DuOVuNy)#xC6ci0%iPVj14?rTfg=O6wM2G)DaL zZSMS_I@Z`hLIq888y}t{Bv5f6ZmBW>^1KAaIy>G{1!FrYu$_74d{{282>~a z*(t6wgZ_=?aJzR%s^+{=rzHW;h{TKhv2g*%{MMFZ?kxlzfF#g>1KAjs>}r_pZkpgi zTAl3eMm)9f)`*gcIA7Mf{W39u>G4*HqgJK^0AS&$S=+vHIcx|`CRe8R6MafAWVojz zETl@U&!M6+yU~~eYPI1{q_vlx763{p=+r3(Z;j&_W zR8ATFxOYnAWJPH@WotARvUU`HHIb;cLe%E(E zbu7J@u0AvfP1-Ea45Exc`ZPlo?N4c@?=3u4df{i$3W?w?0yS62noGn+r&j}seLrwV z0|wcFAB}!CoBgdIomwgBKx()LYsV{C(jD)JrTaV9pZ$prP}IDMKRj$u#^Z~AG>ayg zD*B}vQ?*|Gl;|_EZJay|6p+NCN;=91az;1&0$uc%%8tgwW7=Ga!)&n{^(wqBE?D92#YS0Yn+k&F?*48*ze9i@~6p zckZkP+-jgSP^946J)rlRxYb$Ue+2~9GK@*}3J#fr^+zjwdu1g8#E83UPl+*L!bgiD z{7T-lx$U^$*VPG_%wMm&0>ffr?wLXxzFVkVKm&#;DFzEuMkxb35oGZR%4uo(%!MNq z8~tUu^=rE-oo-|r;Ws(dg+QbE1nizWbeE)Lib%3z!5r;pZzHY`WG>~BwzY92z+jpX zBWp?`=?ba|VmaVI?h_{zbL(|`O5s9fH?DvPCizpCSl#vQCO0>QwTO`gEd-|3rkJn} zOH5OCd98xQ7P{CVUrZfopy27exLgoQ3e!@YE*ot3LxXRr%mD2cOv5C3S!nzD_OP@8 z!rk}fJ77pjGDroeVxt3}J(1glWN#i&j^7%fvGg>2=C^zlp=BDh+h=&Oh&;kx4(c)$ z$J*qYMBZVLJC_k#ZKawo8;jT7bL7JrU1-k^>8uGNI?AX{_w9c+@sVXN-`Z(B|FHEXw8|>5CYo zW$%mrai2>^NI`R43{ri0ypt-bftewto~+GRQBb_emapF$kM1@FATsDtlyVZI7bSlR zKFlJ|1+puuHUZz%PT>MWPOMO5%`d{Ku=4Uu-xj7+_rDrx>!Di5&qgi6I)6$OA{9nP zEy0-g3-c%ZcxMIJ;P$w-3)@X=ew)8s6_-h$ZxL*69Uf&{xnPf@shJm&xMd~8@9L(& zSE)>R?3K%d-iyy(TYgf+%+H6)$-w@6N>B-r}15~!)tQX>Q5p6Xi-tw*Dom7 z-@G+XNq*-cg4Yau^oE9F&GjR9!4!(bDuQ$lkdxI~z*mzR;T#hea>J%n#NzzZpw0+~ zo+_`WyDhK4IG4z6xO;WQ@_Az1e5w5zqOtDZkQiFqJh}~p)~^-rwxxJDhu=ch(W2?# zrt(gt?WOi+f0?}dOE=0|vnh^%FpG41tYQ1gV*Vt=ZmedPs+yVRsHE6pSbWjz?#KwB zRNk@gS1h(Hcp?zH{!4eITJ5{|mzE%@jCi%VRmrcpp&t`c`Mau^0avDos$B45TR!1m z^q7^4k4Va=bSrJNMMC0jX4 zuQ968EanD1#9+tGNsZx9RpfGL?L)YQqr>s_(a+0QtOOP!4v*-JuqQfXg@Mmu(@ZaTzNuF!hNoBbfYPWJ)GwO79X`qm0?T+_z`RjZtz| zYUNp?Q%|;2|FF~se|aPM%fFhF-iR|;aHq@%u|&C<9}T(57~DQkBKuB;4Z!Dr#-UOT zjW_16;}gE7`B^y+7iP|}eSaAm_%J%9axRK#MqWfUP*vR3F!_|`UrKVqcUfqYNw~VSXV@p&YL|;Qe(70>$6nbo;;PZ< zD1=nL23i-}h<+oOfL`Mgq+AP{C$f#FF% z;fyW|JLgHXU|JwE#7=?lmfCZWE3}58T+N`z^9BtnT0xfeKpP4=w>aUu<3jmT<(T3Z z)UXM2b-@4_52p)Q!FXH@1=#z={aj|gRA|u_RQtu3*8_q_yGQDti;xGh(gqZH>$c$# zRjCu|WqQ!%W?kod5MO*HeNK0?83M6I92!w1a@48=3^yuxfd$HQxwY8!B`Yvl0A{^x zIHJS*LxpXt%Gh(LcG_+L8PK^Nn=|BBX!N)>MCNqTGi0GbrdsxnDYd2{j>HTM7J&%w z3PA`o$KlwhXtDE}da97XcQSBLT$21aF|R(@*h`R^#24PCwJE@YMIZ|2HPvUi=}cL1jTO)zV1u!cA+$agHYwOrY|>3y=dYtbCj&}LC%jPnz%&+CE` z8g2D;W};OvWF2TmP+F7m!V_qfRZ-wpI+lix`(HaBNt`|9@{B*$Z5PKFSsIFRsIxiR z#QMd`-$+Q&(z+B~C_7BE%Z(e6Mr$o0A(@zM%xjL39YVr#8phJE?GXPSrLGph1>ZN~ z9xfFj3^Q;2?LU6kY5R70W$D?C_P}iS6@LWRam=cPb0hJ{V$hBOHUCdf6Xq!K!FmM1 zdv&ZFRkVBnx!@FMw#8{;3+A;(hHnYqge<5qiCZK``a>ku2lu+G8~tFdiCujS@F;>wPF~72ebPKv#1r| znoOl6%|~hZ_u8rd;o?K%Y4Ikk#zOKkLi>E8l*X#r1u4coMMND^en>}?Gzg%R!d{yq z!78f$q9y>SyUBJ@wBNP+hi@>(%(5e2*hFIWWlf zbO*#t&*9rXp9=j*o>t_iqXz~UyHIsANV%a-V`bCyK*KFknyprU|FA|Rp?F`msB$Q? zY+-Jo{LAS62Pl^u+IGj7F903#7rsb8)5pGviQ$%Y9`5;gXTK62;uOEs{Yk37#<)*} z&0Rc2v#=CzEpIjYV1Hyl$ljhFVNTsv9vgEA!NxL*F#7zd|)(hQLHs-Hn>V)#8XyZ;y zcSdX%ZU~u{8?{6`lr0a%a+#ky`dgt4zEtctQ=z8ebI1tKL@ zzI8`g&x|g!!(Rr0WjT25G21UO*5#|s{m5I461l)T>Cv*RAs;;8LL=+ugAlTNpDrXYsW zf-iW0G(>rXE>zGks0Iwrc(m8z$!_~MM~~&7_{vzEwu`>>I{tO+8zTLak_QRR<}c<^ z4;e$8YBD%|@CZb>5yaikldM0b1@3Gdzryu?qz|vW2U! zN1_9^yV~{0z79?Jgyj3wR77&+Fju3tM~~Ao!h;7-7a)kC3$yP_Ct%>6?84u#E_AM> zD_N9vzEt%XV%g#~?l&&qNcey<%khJF184@yI9pY>XaOthD7bz#7#lBhVD2mum;cYq+BVn&kPIZe;Nias!! z`Y7nw_y-NEOwv`@b{s_zvB~nDV_cnFEei z!Gv9=*CFyl`#be&bs+l)duA0!F}AjP$>#Oe3KX+w3NjP5=2pF>B;uocJpm)_2nn^@ ze5p$#+oB~5#-t6q8eJPg3x;yT%3Bl!qt^lF7kJQA-qdzI;e94Pv~fa&HduHfGA0hl znFZrYrdk>X3W!HhT&Qwz3}RpN9s*Dx##~S^A5L020?Eohr1542^BLu;+jUXFxRm-W zwu?gCnxhlzm5uOahsmKswElMV$h#Sqgq<&v=pvf%)%3)T8CfB}75%2f-gj88le7Os zNp3fk1k#r2fY{@c*tCCN&*hy_lB`{yBRW3cmS~zrn;Hg0RKzYB4^ZxN+Btsg%N;rQ zpS<90Nmlr$Byg+Y!-AO#O=LkgtCDu>YAU6xb=Tu+a!M;#0>{49HO}Ae@y6z9w|1E# zu({zFk(xExIvK}z@-40eF1Iz8rN);|UB0O`D^nV4PN=3LNGyRRtT2gtvp6(D3#DHI z=PlE!r)QE|MC<) z=!p{N%~&so`$|x3P2X>1oMe+piM9<8KNFprHSxgb@SEs4(=xInXLsAY4Hc^5b^}Ijt$t$$iW>BhtxvyOUoOj>A$Kt&DoB$U}p z_#kxH7n*`_D1|mL%BMhnK&C|puj81jrV72MRx3M~eXh1$T8=7QLMQ_Gfa7G%+ z_JIPZ7fq54u811FQou5?EiDq9Df*^xU*`+eU8PB$o?BJC&RewaKjeH+?^yNz%=Xan zIt%hX9L^$sh#ZfaX?Cgb7^rrC45s~OL&rmBm~J=Jf+=FA&ntZH6iqD}{Kl_a>WZkE zJF9(m6;SAvG00tA8E6Ofuqj`8PYo-&9n$iHP>Bnc7T$aW>YR0#e%CDSf_%RVaRph| z5pa${Vv#sHX+J&Qjsptn`|39ET(;kuW}ak2ueXEI?|inKK-dos3#ZVS%8onjx1|}% zXE28s4#eTAZrf+Q_3aR7u|spJnHqx)8d{6U|LNcy722?wkj@|d7t;EVI_MkImMRUY zO>K8m=#R&1v^#AKjx}cqZbLRwJ`VOz7C=RRt2y!``%da^&!D#KZIc^spVrRJ9*|sp zVZ^QivU;*5S*!}n#wenkdrJjcBUQ+na^^dcqMH&NA4`Qoopbq6J`%)HwBafU{Q1aQ zQ+dqMBuv5f=MbId&dkRI_FoIz!DGqqdyN0CuMR#d8vr61c+q?dZ?hA#cxWFu}wDEqGH!Z?;zF4%rL z$i{yl6|JB8Tvheqng@hifjLWX!~HA8w?{T~T7{}bl#afCY(@0~PG1%Te)_nnIKV8=9?Yct?g!iPqOzntU zuA&O|2K_^0{)z)3izmkKqp3Q88O z0JMr4<*ds^V`CtbzEIaU-;FA*kd zR(y50!>9IC*r&U5wWWg|WqzlHbfg3hCIN`Niy$QNoqo^lZ6ZCj4)Y(f-TvJ^^7^3_01(B zbkA0z6+ot_{M?0}tJaiV)^i8#dv+0L^-`=FX&*|Ws!b8##7u6UjuS=;l|WN9Q&@k2 zUl-S2Q-<>!aPgIo_SA1xlA<`%Lu`JcAzK&`-2+nQ<-o;Gj@sLi&-Zo0GilM$DVpqfrS?=7K0@=vABdFvYg4h+7v`&XGm6lYbOPXkUcN6)%_R%a2H45@&yM)R;xl07 z`iW@xx9^?&opuu~ofv%uw5Owrk>GP>iL}8}eBAP@Ih4me_#BT(H}1h1gcUnBvclmO z;``no4y5W?XD#YSgTnPb+K0i`%=)hBP&xTqzoh&fM2VDxR=SBaYzl2pK%ZKS_i zwNs}|Y1sGYOu%-wHQnd3*&NmPIWj~@0)=S;t>*l@2cCcKZ3hw|>t{`LkdJv$or+^5 zt8b5U(~)QuscM9h!qiQu;ZLF-G^3gX^8Cc-&{D)nQI378bgBrx2=?T`VgD|i7h$#m zL>TB^srv#Uy9iw1(+rr!lPVl(^XQ8y8#tw(4h<$-{x9E8xgm_m;Gc21!)(~oFXTLDHAQrP%M;pUNB?gH@P~~J z9}q_l_MM4sc?5TgZ0miS*JXmJm7uq znT~|Wb}=2f%ZEQ-IqT@2UY4FhWb^L;A1Z7ZXT9C|Wf2>k*YiEHZ;1EOCI;`wBR@u6 z@RmTa-L2&Aw!&u^MrXvOem>4}N6N#elvd&+1JBSHRWRce0NM|#e;}_rBtv?t)Dl7v zp@pPTwC}7Ur1eODU%c`lh$F#f0nv>Z7JC7f?&h5P3pPp8hWxD5y1G2sTrvmFU znu}XDWEY>(VZSdtX?y%0q=ARSvm z1np@|rQ9l5x&R&poIJl}cF_^w6(X=IQ!)>32u>%$aTFl#unS=CRIV)G9Wbm7I+GO& z=M?iAXR$+ty#`aOZC&T%g19*~5QpcGO`LCot)fGEUBQYuqo&$OT$|wyY5a#6-87oC zoCFO?7(O`I0cWv)YqkDZ9Aps?Yr)D^;}VRttOLElRK8qrZ{2gFgv|>ZzXhx(5$IpT zxoE=aKU$k8%4J?=PEe_Vu@J#5rDDiZ2c@Bz7JCS!9`sO;vO=X9qBN1ur(Sbw!lO;y zd?rRT=3P`$;~v2fHhjs_9?I*0#XJP|w+YlfXT$bu)L;O~XcsxW%@i{HGo-L@5^G=L z6&#usPYZoapou`U4up`i#y+JBfo2q6jo`ocoup1_)vOO}DU^>pOYK{3;aFWV8RotF z)wd6F4qFt{^9iWx_n0q22aa+lQ;iGibU3`PxOQci+NTCLDG9!+=J&R-UvVE@6i446 zqm+|ko&8ugwl%;6P<56(H#6h3R1<6q=j#G(0Qfnz>sJPz(u|ZBY zLNchpk??70RhhSVPkCF#tH$jWh-;Jz-RejA4!DUGXgL83Ot%1sJ?`eL}r2A5~xNM82qkYn)BJYYP*meVSiyPrxG3o?hIz0 z!pOPc$;7$tI&YUMUd!44(KlY818~7F75Vp&z9Z*+kW1uR0c9sGOVg-~9W7l*tZP}x zc(U%=Zm4JonIa|r!nlK|2)k}%t}eTiuiWdS5vN^0BJq_c_SUAuRtnG;Lp9Rpq>pSI z#7(C=xPJ_w)>eY_7M9J=Z+PsxvfF3Rcnl&Pav_dDg{22O4*Eo}{=Za!LENXu+o}XY z4MGDK$XC}0G&l8{kT643TUby|#8y}T@CAa(E+DYI&;Wg4KiixLej#JLiNDLtHnlcE zw47X>rgWrFYRh9$v67$zn}`F|f-w7ONg%K{P~-xh5eXm~L5B#IA=3|5nPraP4cGsdFpIN}rb}1VYDVyYdMH94F@(a*zbd!rLQVatsV}w%Tj=-K5Jz!Vx)BjF#3J+(Z^Q3_#e%dOnY$WeYdUaG>@4}- z8ZKfd9DyM)2r%~b!EFocG}$_$qQ)0sg=It5J#nnUuPdHn@(4$7LZ~6FLYScM-`Ls^ zt@q{mB8f!5hK4Hw(VmaD5M!~-Kx?Cp3Ap2TJl-~Xw|GyPU7DU5Ew$O4l^>zZVKE$* z<;v?OG^Ar(d=Deh;R*Ds_H!?aV(`<9MCIw7SaJIGIi+v+1VajVRQso9S07>4+W${7 zoq%h1?b@%rp6Yi5^GBA^M2^b-u%o6Ojij}VH7N6{t0*4HloAKV>LdAS!xSgXRVNE4 zWFt5Q*|hfn^8&8OTD>nI)kUTWZyE`==Wq6=Z^r{pqjI(U7tbDKi^QV3gAOVYx^dtf zpKxyU*+((=ulE|~!RcnCNYo{Z_irULq!)8%h{1JnmXqDUSbnu2skR)dEVL&cBQ|iG!9BHp# z1hu_AL>$IRW%hXeX-Soqp`fXF8ukzAQj?sPY+h$$Ef^vy%zrP_a)Owyuq&pPK_y2# zlEn`!)I$jilyh?_!iuBJjqN~fKp1>79^ppz^;fukhUVotp7#E`pypnoxrj#+a7GCzO}Qe)hz~1DWkq6Um-$`C#r8*h+$1~ zpJe<8uj>L{xgY)-XAm{%pI@AfO0y7|ja!_HiVOmaL>j8+6a_t=V*GYVRz|MO4o6r` zlrv2uBt%j!823|aBxksYMsUc>V61S3-2kCoyOakCwj79Ar-*(Y$sK&49IfP~Hl;P_ z+9wsfdmf52bW6dZZQp1s1xjb$O(~)1BZYVe5tD;K~{)7N1E+R%Ia%uv0 z>HA{;W=HqFUNxXQR#zd`ZP!l%vmRwyMary7DX;P{$QNk%K%zI#DF}V z6$ScUH)M&NEx7l*HH=CA3PT!MuO3hc4=uP|V}F%u=Bj>=sJTIqkkGCYz%s#)p-Ql!W&%lJ%EZENUXV@LLcWsvRD0(vkmvT4RHP0X@!o=$NnTg=c zJ?t#M26&MhRU1*8zV}M_pGK?hT}~-B^SP&moA;rfD!a1^VYLr=^y1Pi757idsYWFn z-1-lm`t`U}dgGWpJB9eOd~iU9DrV75gE+z@jxfNUR7`qenpKVw0`D*gT=Q3_zA^-> zu{u$1&2Pcj(0xxEsU8xNl-EG1nQ#WnMy23)zHLaWXHKUM{vT5$yot+jtOcU7Pv4@-j3ZIg$8wvHaw!bThX2Fao`>X(#;m&gbE(Z; z7W@+GFx7o~7N#ugJU&Kz?gQ3(=!hH_sR-%SI9XH+uy-4F2~)~A64A9RggI$&Nu5v;#PiC=~3G3)#kxz zZcIIr+@Mk7E4Y@n&fhiL(9}ZXl!*x&wBnEZBVsjH$CNph9- zVb_2aSK9!QVc$fV}C)@FjI9o{~| zBU+15pqN(JOziHS|A>N1xW(_3;%G=CqR8aiGx_dw!sel5`Szz1NV-)se%74N@3HEoSZq%*?kJBj2BvYN(;Qo6?~rTgXH z2ED^i=&7AHrOc4cXh~9TnuXLGq87H99dgYf7KIIH$*otc^n@Y zS7596%w5&pX{&$7oqyMA+%!FIEFQRY@9Y$Vm>`9Um6ImzyM6v+svx^Sdo>;9WWZ#D zkXf{@_x=>Js&e-2-RdyZ>}!-2LI(LB&CS|c@% zu!~%oYI;?%`9+tM1#Vc>Q;l;&0%+fSHyUek1fVf@yxv{s7CO&JqaV~ErAgRE7*>9Z+|7m~Ca|R3WACkDQ+^{f4cT>kr&qct z41#}X_WuZEE9nE z$?R08pyoFOIA0zM`#1)<;sp{CqA33ou0+@kELxBI9hhl_X_>%d#fYaZR(3KYO!q0) zK1KT1Vf31&o=WHE`M)0tg1$DO-H}H-yi)SQ1eS%ildPGPzWwG?pLMG^-GRV)CCzhk zTTQ^asTituQ5EmGBHdpiVr(|{z;ZMJdavS#8(%Y=)#8BzzD}&n7sbZ-4a8&EFOFIxPOjgdh>j7*EG897aKFk$IrI z^hnnXnur0~q0x^gNu8iSTEh1xo8|wc%Z4(uJk{lVyI%f1&tM!Djts=9^0Go56R@cN zki6NNZFqV{8mKi+qB-O}wpxCvsgOaqz zLN?K**1d_wb}^DMXDp<$E62G6~x=> z(;)>dc+N~<^Z4u88Huoiz~n**TpAox^B!6#k_|GxN}6zZlfhX#PlB?J{VIQ2tHaqk7hePVf|0x-sheXHaTthIL zve-vThs?*0nKIoxH`<^%1XaqA3GAPuA*r91Il<;Ww{?s-1Zyn`?UWPpC!6MRyL!F;ERU5$HJPFa_OQUe5Q z()0fuPCKq}VLOYjRy`dYH_o9{%FOivDJqWu z9Nx`dBnzdK42r8%9)Kzhgg8tW>VyZJy@l8tS8Cp~hNJjx13vLLu6+VC#e4Q-+di;J z+DYt*w1fZQZ<>Az+HUM{3sJ0sthmk==SQpP$5zp+b8=kgp160X!AG1<7HG~PBQ0#t zdDhh5bTGINVCug)cSYQiwc}VwosqQeM*Ix?UEDI*5++c zZj)m{qhps+ciU$FGQDA z=yua3BOwvl4%*Zrh~g;* zp6VPYmVY{mC@+1YWjC(2YFR-UbCG0sPFfm;pT)3+!Inp9oHlSaqb?eK5m{C2Oi7`J zJUt}1dW6bMKYoFgIYIu!bmfVD+=kNIi@2h@6=aF|0DV^Mi^v7dc5KV9e$w4%vzZoS z@@+|d>t`gG@hGFR6#SL;RiL$uCNIVaNmooDyhy7g@9C>+cTGECglK1S!q2OYtU2sM z1G`T$eSJ}BFz!##xuqiAM+U8|Vj%x}jF6GD*oo8Xf!xY5!)3}$Pzr_juj6M|Qyor1 z7cCTkDG4h`MMJr*AGa;5`f3|IeRkJ2Ah6TGUdJE?45@0eXRVP*{7teIVPX0+Y?P8% z??!^01X3X=2(+oxF4>He(AZBi9SeR35pfGP1tB)UgyN@V*nY3V=>X;9GL_{(bO)WW?BBLLtj z3JQ)H?5PywT}&{^g+kV!gO4g(A~)o5I~j)5+O>g>gjdZIWWyu?ID9R(@P*rkSC>-~bkq10Zfgo6$2RJuqEGfDm5vialWmmD|vHRk1 z?jOzdVd{Dav>yKFO){YUv{IoPs1z3Y9X$-by<&zw- z_WA1CgeH!nyPH+hyh2uw&Te!-@&cwJB5oiKON$ky1n}T{Cki;@nFP>VWYPqZVOMm# z9+&}3FGf}z>q#wUtc8|H{h{#nz}tHA3s;7$Olks`6YmK27~x#A7(H;nc3#l9L^36H zVxoX}jKnI0yiwHdL`dbtNWZ`*!FMI~S!-afr9%G029e|2sY~K>l^^!DW^rS)6iPid zguW_#e7X*ensZVii2{$5rJ4~gZg}?x__0Ek26*sOhU_aJr-XSo$6 zqI0!{uMq9HbnHUV6i23zd97bU4iVH(#FBA*WADHeWZ@5f=F3}5 z)E0|-i!Um7@6+E_z*>}Y)ix6PCD(US-Rco9YZh+fqJ+9t!m#2yQ?{hWr9T_9IKVF& zfZ(KHNsQwoUs?Ss59my<*EYu`A+14FCzTaKyt8*sm-IYT%o$^1XO~*gS^Lh-;XJm< zNyPu&`H6>|-%gC3<-H9IZj=4$kn(_j0Gb8@hpx)>M!U6A?ijG~VawrVoD2KrJL@_c zB0&q8q>cezd`=pwtJ8~_f4Xbz=Q`F^Mj#syIR?y-!D^)^e9EO*2iLD{5~gU!4jEHK zB89thoK5@dlscef^(E-;dOL9ryFj9|$!io3!*#41T=6tf%j;i24}$5^ZIy_G>gnU4 z>F+x;{xVXN&Xr4KJePKn*v_@W+E^ne;yu3hF?n+iG1sH2tj{qXbyyT3QXD={Dl3{I zyh3POgTjo|=-C1d6E6tU5w}Z(XG7W`+lkel6jVJ)+N?j1^%wrQU&A0cCm}Mw^P4OS zo9kqU_nqw(1tDqAE%^KLfl&y@7=hpIq;Rtb`T*5sxmto}ZxH-O1)7Cq6kudc9}`!* zd`b|6j8`@jA^-#}&nG?fCq6Q>huVUwt=Ff;JVop%f_asXR#0EU6{{FnPiaQZDKkP- z>FVXETad)`zltDYt)=Q}PP8B`%8=i^t6Re}d{ZCwF2KJT;h|b%^Ak;O?@v0E7`}Pi zzrrlDHd(779hhKn-IY-p2i9l~D%4Cc7#!r`i4`U4C(lt<$*HF?2p9YO_6%L|d^XFi z?`+PJVUmj5$Fmlrj zNMJouuI6||ZMZ-Pw|c4kpoaf4)><)6;$^F_gtl}(re}Pj4rG_6cXw01S(@eO9Y!t#Im^@z_`pKVZ`kx9vzoGKujO&Zp8asE%ouc1xKP9 zoGXvcmkdLJeTSd>yQ>;|8ZmramK zBd-9EYnC?xOf|qhW-L;?btu=5CBBgmB4@u!O=869+TwZ4cI%mktT}!5S~rC-Gi5*7 z)))BjhVEQ1u(MBtY)X&(fRV3DA)K2;Jnd)uqcMNfb8@-CF_uS;nT}!_{l}dzOxoqH z7q&oOo~ZK7*VRBXh*x8q-hy#x{;w%)!7MKVLf54z1-FJ-1cXo4pii<)L1y+7EiEPIk<+|%SY|I?i&FNHB&ctt z&Y?~_>BTU9rN`p4aXTfsU*(+mMkB?d!5=?ErmFEaC&sAl4N!6MI48FjLwtXCTP0by z2o1=D+-u8gd_=ZY)4Hl~2x&knY<^vC*@#xn0&U?Cas3ovT zBBp_UamAOOs79yhi+p@c#XOS;xr;nA*2Fi+1?T?4d;;d$2~sS^sBT1lRq!$p%O0n9 zjmQ4A_B%=P``|&C(-)>)KTMUd0*$LSx1f?hUKRVPw4(%zYk@>rA`r{PQa^Zb0OF$e zc4Be{i@R12jAt)WKRetNc~yyQVI$0IL3icEkWs^jA|8qLTS3<}B0Rk*s#NV-kQXGn zdPZMVGgf{r16j+vdd|Cz_qI3y7;2$x-$F@En@`q-R3EJu-DVDaFouF0T7d{vQCkL7 zQa+1ra+1;oUF7HvVjb+Ue?kS-(_qxxq)5Q26W<%I^!lV65SP2HEU|c_SfY-z+`3oLROeUb=54&GZ&SdFvoxC-mV#P04nv~lRx!D<@m?z z8eLlvFbVZZW^fwS=KSVaJr``X4BsA{NYUOB*2qZ6b8YqFqspyPMFi;|U{V~waI2e8YXjX&bmfokQ# z{@NTRC0nSi2J8(>Xv0N;IItpdq$~5L1+EN8lnp&dQFh;XW)3L8!EeZq_kA}8qKZ0e ztKe0R?1|#a!~p|cp@bnsyK6RMS5H)kfxh@t_gC&Pg#!_W|K!%h@I24`IM~b3mILy~ z`WVO?=65_{sTA9^TrKX`=)??Z3{~QpOT>xD?nn+6*Q9tQ+S914iDqXFQ6UbI`?aex z%Ra{s10qpz1E4&qHOoM!zURYHL)e-mw|@I3jinlE=a=N&z&@B~Re4sqekDv?T1N`b zwoNQ)bE@zXyPe@+#9I(DZHZK|{x-g{V49J0oHAjpn)g;;T2!yH3|kuJn3U~l3ylVc z$spX4End3274N|Z7(_qxNIrX{o)l}B-Dooy-A4$fJB@i*lG)mVG^d%oL!%0Qg$t_= z!jvK{1(}^($Fh4EKC<0Mv)9iV$5mcr*n7105pwOl{MhNA&6?}7Yy`Q8_h4wl^8KKU zg2ne;!oEn;FO*YW#(Jr5;@9-46g1ZSp9_wdaYF6+6Hrd z5q^Ld~kB9qx?;ixs@mDo%yWyvA0`Q1G%4h+m|t+Q>?K4p%Aa6#6pm#a8<2*`jnNB;vQYe7s2W5k^B>oeU z))@Dr>z?q{X_I-{w=UuV-I~LDI~R!M>6=DeUk)CCn-L$R2#^#Av~x0YzC%xNkmrEi z{io^^*Y;+!k2OnG*xdu1z`@LPSs0PV~@X>gL zl>yywopDjOfN8$y`;S9%*{Si6yYaQab(2mM#T0j0_~n5SB}h?5Drs4g=chTAt!FT* zvR##wgM*XvQh^*NcpVuvZjTn_JI;VAI*GSY{4^w@VU?cLX`wGk7A+D5{%K+oq$~t` z&ObE7NE+s3ONzf}-BcCRB}v`wUMvnJzIV@*^y%}==9KxeT_jUuyJn4Z?|EF68f3%$ zz|(Q`c^P@7F!(Ge!or;rP?b3B)y624s)J@b<59=u%hApuUOJc^dj$f9-si% zo*-j~9hj>QS20W4kUHjWUep%`gHMn%9Odfwjg_JveJ2%3XgXBm9$<1pri@!-9euIl zev29OC2V(O6<$pGHE7aQ5n8N;u(Rl>a5kvr1kr-rVq@k%hDLV?Yp4m(RtblkWsXy> zrYl(^%IU|%wYkb5_RM1awPt39nX+2ztp6hPl$>qJ&hw2Xe+EEti#}XF<`HC(dA??V z()KMVOKgptTOQFBu;2SvuS%=l66v@>J;VR9!G^E~Td$-rV$j%;HYmZu?_ga*1l4O0 zsceW`R#{4i+Iq;(dJ>Z4H*=P$=?zdT}Q+Jk#qvT6wi;?Laub$*mE4o#t`KiBwVWkKC=6 z!vtVoZJ;;09BIlzChIXYjjko)DUBJQ`gM^@QO$PNkD@?%!@FUx#A)@5inc5zxjc>& zqz_VZ5le|<0R>dm4PTL2gk-GuoTErFN-pa7_zv*dO$J~QN^)iLgb)^dB+0mlRp9 z1>l)mDbM5ZDh$eB!RO}@NOQo33t7U7`b1G2gx@bstIF!(NSdLBU`Kj}FlxHKYMV6l zQVy|<>U=QxZ*^Y>IsR#rb0VU0?Kv+1T*DNGklM)! zLx6=Mn6OR-M~}z4E=-SCis`VIJ5dtLi2YuFrp5r!Iy!KkRw$qdc34+R5C1Vl2y7#H ztu>X!$R-c77X%&N7G1b;c8Lqt*qx!@%e5Sa!xfFHC4#?e2KyWJ5vmjpXMep$A&+gn zW9AeEqV87i<~RAkFUjDJ+xPa%gL%y3_As4RF+kE#CANtcmu1+E8m06{{7iEPLY$9( z5VV#v9^(HDGc~+70V`+P%FlYKw%8+FYU4B#l~;hC70GY0CYPTs*B{%p#uZNxf#(n0mJeHmYWPJ#K#8v^6PEhFbO0_(owXaoh zL_u8UVOqQL=E(&!MUTAYS$}55VNDyy?nQl9k8GWbhnT2XtV%I?)+PuqC_gcGt^eVj zsQ2J@W=H^1=$f)eUJ8eXul9XLcxGt#Xbf*$*9pMakeK3J2kFsRNLQaonTOv7!8H%q zu&MgoF?P|dM}XvX;Mz-fi*c)(j@N6EvD350hsAc-K60=i{8UP+$51biZ&$IPn##1peti zLoZXy>Rbel=0oei*}qD`y!jE;Gu%Or{$BHpfJa6Fo~bM?(vW}7d|7y^yOvT4^B5ls zLBZ7$6dK`9toSNc{$?~G-ydoMh0-{{Ib5ed%qwqc=cfub@u_!NEJTZP$-;CpNOl<> zNf72n--4U1PCy{n)Ad}uC6v)uGoM8CW z{Y$_OXbl-Aho!&a7Vsxns5+I18^u0M}0vKlpyXA&>qbIR<~K^SgS0iL==qw zNqgn@lht?{;1<{<2p(|G8ia>y@_w!Wfk3 z4GGnc)XGqkpQE2UJXC0@vE2#_;uVsdZ~8@V3bbp>+@$mHrW}f3LN%!4-^kp%zLlq} z2nf7Z8l=L~Q~I)rPq^f{kd=`y50j~k#`pm=2pQ;^LhEtC zizn5~*|zBE#(DoZh=+3WaY{s051fI(aET+P{}KUSGFl5FVmSr5o+A+n#M_VXL;IF;@1 z00|au_xKv`4J+@1iozm2P@`~C=&cb%gMj{sen0|`N?p?^W_4QfIJMkVsI#he+jHR2 z*HIvhI2cAHE)82@oi>^j`^ZjOx}lgf{RJ$CSdHUdd0IvPbtRa+w&2)Haj6m0>whFDcX<=bCM z@7V3%J0u+Bv2)SRDVE-j^Bs+KSJRsK{~AmTM}mWMG(%PT^3*u(-fbjRkOtNRQYgnb zN*0w(^hQ?qV;|(HQN{~}LO_m59>S~Z+L-`pdwsA`|L`9TL> zEzgDhoJKIY6w2Z-5(bC}1uU9NQkbck*UGgXU_{wm8A86L1pRvax!=~~Z35$#_OA1I z9guB?7x%Yo9a1t|z%j20kY0gx7e{Menn0zfgkap;(uvKoa`bfCT{QT{8zw%B$8-4% zlk`9W;O*t0u8{+Us4wDj{ug~Kra2IROjxSeB7HBv3_wWwzCcVemT9G{3m!9@&*n}m zL0Tarp}W)8(fz$u{F0K(OL94j>vG-qcSBMynG|k8&K*}Q3DOws8;PLl{vJWv4|W1L z?3ysQT2yen==uiGfcq!X*Z_cKog@9NCb--QPy15M!vbsun4xFK6L)D z)SaGeP?n0`*6H3XrtqI<08k2y<-#}2@Kft@@`rcsfatQJ6H;*Ik8l@|V9Ttsa_`x- z!)RCEEz4Rp`7ZnKZg*WFH%m5~KLcgSgs~Et(Q5#4H^*0kM1SFdByg71C%QKGCB__l z8{4C5KDlXl_fbaTbkqFrSYuNi*U*Y;)3CX_x@{@AaIa4W(UmI-j+au?zM+1hU{hu zw@Us_l8Fc2HNF>)Y%YHnj(l}If!+iL0w@2yVLjyZOSHs$&%Ve=J4H88< zpsj1iCSp*}lv*&2_K``R)r1ZV<3|X8p;UMqs4Tn^PkvJy%KHg5;G7le_CB&8o-BcH zq_t}VZPAcsM%+treoH^r;i$l;MTO&-Fxn$%RoIrX%!*R&g- z?}AoL#ib$I%o%BD%QvzNbFmX)Ys%XE_Z+;@a#px~q3^^pIHTK(Eeg)dhEZVBNAQe5i%LjXirM~^tNz9UJ%y=HJ?up1z2$&QgB3o!LFC%~CmOEhzz9LKkWoptJEDmYfj@i@~1he;AI+>LeS^5?38GzF=T1*q~u^ z*7&a#CWP1Qz`lN=sJbi6AZKpsNO>db6gGtlRyxgFQKa>fNy1fP?TFsc3;{N|E|h?E ziXjRIMQGTaNqeWVg!(+h)miz&|Ig%K>bnoFeU{VdIMJ~J_DhvR9BHPR_1i{b>ScE#)6mLs|4{PH~EXI~o-IY(!UNHWm8pr}5>Fd-OJN&boy zdgX4uaP0P%prrKOukzkd8fdv1OE>r_7Eg?&p3-uE_G^8te~K`93hiZm3%G! zRt4QxH}X^*;%vaGacA9gLl-`F+hDY2V#jm{kssAesn9et>aZ*dh}!qck@jDna`qVc z8J&dqOyTQADXQ|O{bczI{s|ny-WlBw0v2U(Gt@F?d&IjDU{AwMDIkRL*3Rjyt5O``JVWySRVf)54<9TB4`BwFu&8-wsa3&kA`SrC=I?v5p%je~l&}0hv-9G4<6-~=~B~y$OvA?&JZO$zK^_~q_ z@${sh6ZvQr*8)Lo8Ea;mbndjX$LwGky}Oqpd`{-Z00X5qQtTnm$l5Fvsn~U^>IIA> zC}X`?HP@BP6o~|xerF8_HQN__axJ`xo3s`oFOcYu>%)zP4U+atfHszE*p+*&=)ZTK z^pnk{2D~`(S0z;Xjv0<6jyx!;@&Yi_M~ODMw*g-a(T$US@bLdHkF}Sl0_dCaQRY!% zr6(rFdO3QjuO0){CB8cuM#SCLUTPS?L0?me(-!+W5Y7#Z1WeDXxeaVZY$@$`Hy_v# ziv9<^e%GdJfZjeVsIfTAs}O0ASUnQQoWTm~Jznu;#tF+y2_&ah9UV;92EF2PaISvo zs+Vo-%T)_qMLH!tQV&Qk^+5Pr5D#6<| zf@%Nx>Qn#CAuJ|&){J!Lo`o6&_3eok_1E!<@v~b;Ld%jaaP~g@Act`5Fc!>+WD{8N z4HuBa+XwaIG%*mIq-sj$Y=B7zBO%uD%SzF;w_}t{3eJ%7V=+&bY+XL85FpmJzWP6d zyr>8`>^S7<^|OvLG0l7knD!5fkHOfU1-5h%l6HR%U2$HaL5@BA>+TU3Qnn zqqzo#Pavy(&V6`U#UFEl_HDGx5XDX7fv>zbLMUHR9;(NIAj63@@pL-q1SIc^aN%^{ zht)hXGJONr+HH#^jS-{5C)}g_-*BWst=i5KMHHcy7T8pYo_K#F644b1f4%UU@mmMg zysN7fuG;Y?5>D1^HNkEtO{j5E9I;6G^6C$Jc|55$u<6NJ}JBeVXp)OLwU7#Cndgx$yTHn#3wyd8%c(; zwo+meUFk<}WqA0NW4v>1rn$`*IaaW%Iu&1jfOTerdbwvt{)vI3n@YtlRM`7jnzm(VL4m( z>dXpxjFt=HvcfWn@gLTv9f(Whg%72T<+oFUkK$C-(lhU|>?^>^x6t zpQ;9mnV+ou3U7*}4qRBY3A&S&loFdGPm?HZ(02XFhdc3%eO8281PCzq_EHtP)_OUN zTEFW8Z80#Cyy6ET7M5^k0N@10sN@K32x&Fqv4aCQ%Krv8fYlnsG5ngaic47Y08XU- zp5S1|JuFhSIq;;2IX9&yilgQ+&hw#EbLVL|@1m!Zm>f2rKzg+H}!&6S^o&v9W?%PI);Z`IeCfPxmS57 zt?zT57>>c2uXWRrbHh5a{{Jw6#7{RjBbFEOqMKE2*0aQzqcXPthKG0btrkA;BmuOJ z9uE+tF64RUi027dUYD&6as|IHKbh`|gu`M(Qf;ed&!0~64HFefgkEfoE$>qnpkuxT zxSJ!&%DCOUmS{CYV=#`dQ<&m*=!pO+5pdO%y?Fojh)O+~*?!-sGm@gfGD33*)Ky&= zlgfTG<59=ABw}gwt2W~z5S!q=NM$gb{_8(~B4^BpT5+(^8G;T(E-}lvOzYk10S%NB zsE_bcP7P1dB5`}DS>4~o;N4mFEd&9suwhj9H)*3M)5<3skepf zk`3K>Rhj!7W`zw|F#x>To4fn`vNk+4k4m<5oHB1|Y(8jy?CV%+^`g53XxohN1iJV4 zP|#qyMRN}!I$dQN%cTr!@CWF6{Yw7p&%2UyF*yI(&&k*{NP7x ztdWcBPxadM$Pr|GjYE?1gzNiU8*6BeJZ7@dj%P%_X*;<=c#X(=fnjiN;{4KCf^9tW-prBtgq6hAvE8R$h-dOVD9UO9V_zDM<7C%43*Zj7E@Z}yXQAj6HKHKJoJE8gsIRtO9 zg}vHMFVR46E-UhyO^&j~ZXx;I$u5Bydx*J)Hs!M28MJ?0z#uf-V||Q(59WmwyN7H( zIa6Rg#YPdMmSAt`{#nfJP1~cP@o@{VABjvdS*3mVK3mG9;log@-vF&eS)LN#EI`F*aYaruJrth>oKytX`or7GwxV$h^Yo+jCb?)Fc5WCInB4zWU@HnCHD`|1$lGeG%cZk+q<9h4TOVfcCf0CPs+Mf{zAyQn$=Tj zXDK5(YIT>iDK28;m4dUNp|{_{W=-7<+S z`YDxhs7z*5Qgv&;V|Gb9qq2{OowSb!JdUp64w{CLSaXWA zsjKEE*Km|~65Mg$&$``({wS)=%;;a#*hOz3s9r#kJJ(r~xP2>&IKBRRu3YX%n;^II zt#zs4mdLU&{tPyv0`xmD{gL`#))*Sg(k8oSz8smQPgg*-?bd|-YXHdS7#g4VJJHM% z>z!fnjbsRuVZ=V$+7+?ZEQBi9(xGNf$=1Jqwj%m9UfjSj0=O4Oo@di)k28hC{x-aC z7>e&l@$zmJY_Up96NJ?p`J!pf$4SmMj^))g1$=+T6)7%crjecHosj1y>~$GfSMnKq zBz+mva%rlfjN?5xx$s-*JF1rNEd2Eorm0tqsXD>%EmsBzLbVmmw(Fk_!0()f$q26R-O+w(+Q|_O^c5)WWJqyXi&&xKsyWs zxl5k^eqGpCpyh4CH|NpWmZ}y$qMb759uaOq;-KMgGHum33@0b4!UV?WjeUDCzEo?1 zH#t*O$*jxKF?rN`g$MNXT{Fj#PURDL2|_7IuY$3N)YDf`IHzVoV>Bu}UXR4V0HGqj zUSzOfn?jw&SzOF1Z)96s53;Ty44P^gxu!Ds+=A-5C(lCD-gy3;r8c%CwhdcnZ1onu zXH-w*gDG`Fn!DBK0Uy198hWx8Xs(Mp9H_nD;7Nc;Bw#_C~r;#P;jHbk`J z*V%188}xEM{-sCwKN@aB^=JN&mYY)EtNTTLlj_4j;a|zfai3P?H(~9Z^AUzi5*#+(9Gr6Xyx~Ic@GiNxOIi&&j(Hs#mo>OgeYB z3pg}L(3v1r%|kC}X0YaULFBIemgoUY3tYTUMQ{k7_h_EGLBY!;*}ZLrYchc5{%k4uRkt7h@dZfCCtnHU?|$Yp_}H;S#~ z9sPo!@!=kg3-_J91BTcWNQzaZP47ZMyK0P*Mu&n4L-Uj!BR2kT zxS#s@k|#XOM~Pg2fkJc=6#tlG!259j$7Nc>xpW(GJS<0f2e~}LUr0~AuLA{Fsf07g z4b`kd+e=qQLGa`V4f8`mr4+Z#WFyJ`{}PwRFO8n^9Wy38R~O-Xl0UZe+4$f$<`{ja ziXQ0LR;FX$qnQ?TNCB^vRY1pqOf8AnkTIMHn&bBf)Uvm;GG=%?!Fda%w&oUml-;H7u} z!Gf84`*c(KL7FVIyV541fM^%0j}%h2UEpb3F~#*V4gaKjC^(y8{LqrPZX=5G$AuBN z&>64Fr?kxLUG||IR^NDf<7%V_anA9w)i^x*_jCVpPQBg%giC#>4%+c5>5)Y>4&ZJI|EIK6!SzKueBx;El0CelWwYrSf9 zYf_95#twF1M$D5`#BRrMTeN{uRs$k4A>=mh0mBU!BNeWByyg=R{CA=T?RHA{Et$w% z{jAUt==xO`R%1TZBXRiYA7YiRd@aqmZm|CI(7JMtsdRTUE zxEcPnJ@9t`YfOVSkmgq@ZYOrseVS_V_8S^S_4X~eFf(OQHzvIIxA|5DYt+^N9TOEr zBn>EO#!%r%NHl3NJXmqoO4-^CD81=jU5ajTz>9ji7mk9<>6OGoH_%w^>~|g_@bG+{ z>trx{vU`Tx?~-}hoE#eVm?jvagGC6`9fZ^X)qab5oZ1dQ%3fVQL z&O}hg^O56~iAk9<9r9E;3ChvLf1w@DlxOjX1S!j1_xjCg78eD>lSRMNbYtA&gsUfD zR$+2o-?XF;upxq*a|#h6EoGwrDT)~=Pfy)s3P?3@FrPt9411=_V}sFo`d`VLZV3{H z%^o?{KnM^0dC1Fmk9tx0Hp6#LgAXi)^4n}pSPoAUz_j$Pr?@v&9_*nt+be|R{ zrNJ`HSf@atp(cO;wPXs|Qy+5oVD}2D-!YZ{{Itrv_$o6X1Qr_S>mt!5rUS{Ip2~Vg ze9MYsO7I)dG{d`z&lWh#;LgDlt;#uYo)g2`>>1md6J|)}$`MrGllt zvuAoZ@Lt&e3HGaNUF<8L^ybW)adOemDG=u4Cmcb@A>UOergOJNp$TR$2qy7R;Ow39 z2=hr+P~f_AI+OLQWVTTB`p%7c3$1hVj2`6OBsd!0cbT}7%D}+9Jppf%I&Q@%ZX}%f z*~?45p4tr%`<)g3DBRfza?_t}cNBz%RuJ5dYNulG3uP>#(SNQo`kO`%5(pxUhZRf2 zZH4=3{?7ZfK6}rIr%LQ2QY>Pi`0))&I_&wSUyrk3l9Mp-eQ>mc44? z|Dj@r8GGdjdgY$wM9L)I07J*k$Xg)*xmG{A@6E*E*N~^-`GYJSjl&zFtId79(JS~c zp0<_X(dL1Pr`qsT!OJ>@g|!2;jD46EsDmlH93A0)4z&cjzlktBM54vN@o?Mo6ZAx^ zW5k@3sS_LV%ob+fRuG5`cB@0nb@)#NCY4NWRmi>gln=@&E6vUY9_p?F0gGU2Y6BGI zr{A8Rl#)R#@EWJW!Tb^P0O9<4m%!nHkU#1kfB3N2OfB4l`X`I>?>jm~+@-12Bww-J z9X|thJCY5wgrr;VpNXCC|IflGJDt)fbw1n_d3+42Z1M%2Cjk{1U`Seh1Sc(ml0FM! z*IN5>``ttO^lui@kB=eTfk=AjIo01(58=LL$w`>8|BX^HYRz7Q7eSNFBX$_+f^ikM z*xn6Si;(8@SHb-~4Qj5@)&f4cg0g~uNTd`gfK?r@KKOn%Uw2G%Y&Ft+Hp(yT9zS&M zrRROlf$`PBv#*dW##@0mg_w9ePbyXF1~7MXmpOIMN}E-*CO(a5(s1b4nOAR? zM{TDX4u#DCr9KhtcG5>CaoSw;vDG8tVsS$-r&x#v$Q#oy&7<}VMCo>#4Mc;KI z1#N*{{Ob+{CPjgt&JW4ml@SC-K%@sdQj*}2+ub~$)1kNd>(*^#i0SoCn2vkX?7$-6 z@)YtQqNB47bsD?gN8-St z?>$_@edMnWfd@Br_qnmPi^ zA+hYpWq5MNcWKlMM@@N?&nh(W8xC&`(Yxo@wQpAe)Xi4D@Y&*y4!Awr_Ln&eKH{>Y zlM8g^Y9RzET0RGy5l;RAZk8U8;Qk~eegrRN^x_{jRzo^$>(?L?aYbtA#`?M@Z+)6# zb~JtMM{&^(TLd}Qz~!ab^>g|3!YWiHXWxUP&HWxmhXxmIc#aHv2nHM3T|EOpyypVM z;NVHJY;Tu#562YPe88=WySyrXXhzMaCKh)ai8$CQX+y-S4ffGx+Cg=9&G*tcoZEpH zCoj4#rM12V=-pqbt-i7j3u(5E((>MRGA7vu9YQ9I_sUG+S%PfpmT)<^4fAK6UX+=4 z@(P;XrPAT5k%h+(k~IX=dK3EchFUn$e-PL(4m0DRimgvQiRzjt2Z!cM$8UZSZ~|1UnKYIm+EBf zY#!mna{BM7m717S-8H0)MB^xHPrDO+kU3JEL1%8V@e_>SfDkSr!umjE7kfh zo3!fISYfgxMMfU1d8GHj6EF2^`fyMygYJC6RVRB-rV4T##{q5qlHH#b<(RwyT=X9 zK;m9orNI{-`Fo?ZD~C?6G$b@~U?#&8Tp<+F(hu0hP$C zaca;>XDS5zRX7MY*&#R1L9cu>-Ob>VCpcqw>V^cFPGO6W{!YObY>BKN3ukpn^xJLI zxE-9b=9q!5Kj7Wk`b>*37>J=Ap%}O*!USr70$Sz-h5A%DMP%VnN;ph~_W%sj7R&lL zv>R%bJ;Nk<4nBeA!`a&f8GN)&?{Okimx{^bX&_sJu|(I=9*3vD~15 z^5W=MgV#wz{rPvb`fwTRuJ$qh)`4uy6ey;jbXLXoQM$;zGJs#(C_hS70pU6IoZ7QO z?n4*D$Mw9%M%V z`;&h@@nvvFWV<$F;|a^#TG4WY{S}d-1AzpXMGt=?NNlk!&@5q68%k0LlHq#sj2|E0 z9R1lwnQ;YJae`b0pt5RE(rz{MZ2M4|v%xC`uL9*5`g94*r7R}>#pf)R52SpE#((*A zogC%TC-AOYOuq`5E~-?z4RzT_cJt}k0luo23I4K5%T>_fSnM$j+27d#`8+5Prca63=7mJh6B18fP;mh{|8AfM|L~?e zIawF3ld^`)eh z9HjT#Ja2UfpxWuc0aOWS#(Y~%h;gScvrrgH`&B9ORvk6c#zVx=LMeqO>X$FB<8o=-$e);+)^I8aBJqx{B~w@M`=kg(xZ-{E}on zI9tICXhoETSb~}SAl+iF?KOM?7MlQyL;`>S%6*jsU8d~e3{W&-RqnMB|HG>CyrZed zYZj|kdsS4Gh!quTESJ}OCS|XU(FIqsW6>h_eRouBhXWrDE3T%bwbqq1&|*&e%kBZe z_coNKRFseoMVyt1mWVQtCrHJX@P2=3ncsW+D|7~{+lcKNR*A$`dsf4L*KSrgG2N89dABF<{;R-N}BDUd1j3x$~6^-5m2N+ZuX~``iWX+E)j|_#S zBa3VR6ZdMgXd2AK16$U6TQra~J_-jJftl&jsBU7N^lS+~0Kh8BfKftS`BX-e@r@j@dj@J!_tiuNXGx9-i zX;?|obI)E*9!3)SFbzww`^M%C&5g=5C|d1>RWa_mzoc)Red|jbbLvjHVqL7`Q{N|t zFFDFv)^g94#ww*hSN+_nN`?>3)$0C*>zjne_qxJ2ycmT^rhnN!`|u1o;~WP5wn?Ll zaw|EZNc|uFr1#8v?_{72>v(aD)>(Y?s)2fm<|4^g=o6gE#Ba5~2r-jZDuMu&+)MqN z$BQv?p#Q$K)&~{}N(z<&gHtL^GjbmwAj4zsP6d#CA<*&K-VI7wxypg#AA=d(2?JlM z?z~$1#!Wr`{`1?zcQJIdl(h-5wG&4!Pdhk+_5A6~Me19KA-Yq=_S9p=HyxouE}WWB zEdJZ}F*aYF?PEe9-6!QVJP!tok21DL&IijU!MFahX@Pkl*GIdnVP6TE-=E%DGj-9- z{*rkgEm?@~OMnbGqp|O-R-0tZ$Kxv?$CxtE;!8RntmYRh>yZ!Y7qM?#J7D%7P0DOC|F}i3D zScvoxxu)PoD!7fuj;(y`(sYvk8_;uk3r@@}T<3r-Asmi9`hh*r3?e(zV3npjS!~xY;(e$ zbh=j;*ZPI^9zFQSfbY%l^hW##wZvc21Zt4=cDDI*BBlv1zqON^l?9cm`HXSa#@TXE z_E>ibN0%W&@Gx9F>|kf#UefIkt0fV;_%t59f5uW7^;0NDb(7A*3*Y^v@vx!`m$i1Z ziYtOuBPqhuGL$dy=65XQYJb=6g!{U2xtDJw0T%RG?7} z?U$5RdPt5o$*y0(Vns zEfBP5%gc;}#nfXRBZV+cZ2ZZjjM74BFBgXJ7tpe*{bI|s{kkdmg++v&uK1jfWYxH~ zsbu*%hG;3QGKYk0unE%L^6a5H{Sh}*XDMPOV(4m1Uf!DUmvd%mDj~j=hRXRD=}RMn z9*j3fkpn-UxL_>Zg1suk=P-|vE2JX<1G0;~(j6A}YKExfRBxO|r4PQ8R{9uezLM$q zBu!;PfggoZx5-J~rA&_vUlM3&HO?s_Tva~3&hjeke&Hz!i1S|SC*@M^ayPpFf|sdX zcW=4Fr*pc0FM1g=hgPDAvb0FPE-;A-k98#_Tt?^uMau)xqw8>S2pmT7EJNZ%Flu2j zMLxSnGbAMw>-QvP6-@I7FaO*(4{?RaR;MZ=hl{Q?F)5btf%`1KL}_W7cm2RCLKbJ% zz0mQwK#$Uz8!TjaYuYy^u1xMWuY_UblOklV?rmvY<%QVH&-3U7&C&^Gue-!~vZtj9 z+4Z7>Pu2DFeR`{ugR>R;4H_MH#bXOp-lz@47UPNQqZ`zB6XR8w6{|Zk$kYsxfLHe( zB+yoPDbfSy#L@}M?wep=q5Z0bOK3HuJMSsDNrmpaIl#u5m&S%{C;1u~ZhWqFK@A8V z@U+98+dzhtosbDX+`0T&LB(5%mq|(*255uWehE?GhS-R{iZ)2IgL_xqj~Hi4eQ2w> z1@Po2PBTQO69kmSSFbh$=m|Dk=#s4pc>*LuV#lS@`E!4J8zxZmY<7xK5W*y zf9izTBes&moPQ0=d!N0+^>1-!UklN5wTwmw&DicJ&yS8=-V}JpVAb?VmquSnO0zQ!+j>Pol*iSUn^J2gq?IT0T0?ee7oFn zf{Q}0NuDg|+@bp;ZQI;70m-wI)GmwBdfI=5#$j(2yzP_{5`;V2C%g+%zf@f3-w!YB2Pq00^^2d=Nv+Y-P?aAU;#bY7|nX0__FqG)8JPhfG{myaoK- zgHzGNX~>WcD>SkUxq7&3e8TgtK_s}8U)|2ymD)*xw)m-zvw8Sc`Ol0bnfz-N4>_#R zK8c;eMvR$7{mv6ioXCKOk9#QNUMu5?eiKqs={oH*=P1W|NR1BeB*b9^Jk);kFd_$7 zt^&o;eFPZF)&$hWr2mZ#Xw(`ya&JK%+Q655RV))Ang=z^#e?oacTp$@;DO_tAKPw&b%W#>chB}FId&0uKFEqeWkZ3fknGQ${%WT)Oa>kC|* z_V$yIBn+Mli5$zwmU0)aMqz1gzHITNq)@3UN7sPla?(E<-GbZ_W)LP7fL2Yu0e#g7g!tx;qj!9wWaAiX4_lRxK7J z!y{$lnb7c{EMzsU7Bpv4ypI=<`NvOWY;`}^NTh2+<}P~UdFV$`=~6Z@q$G&|)pxx# zE~#_^CBO_2G4Q9$0qsL@73SIjw0aY~@mDmlx3eY~UqWlkcqK^b=IHfBqG6X1rG9!y z^CP8*z{JNpTnzl+^k`(ppV=47<+@6w;3xPiPG=LV($2h%-)>2-a*9!*csL4JE^_RY zaE;#!T2g_ro7ybWg}aZinPeos1KE;|Df2;`*6;7KTq2PFCrz`Fa-TxVX2oW=P(Fii zE#rGC#9EV*fZH0~@BNm`YS>D}ZZ=Bf5EZi$wAr3FNS4dxI!{-oMlaI_xM3U@I=HPs zP*)Jy(CHiF7>vaF2#ta~A|e}?WTuOJa4VqLOk~fzNqEbW58+@EPLd6;q#xiarD?{Y zkzC!luKLBf7%_n|ZkI$V+E~q=4OigfUwZ`D$Y}MVtPCmee*ZH2QyRkKuBGIhP_Ojf z3*AlnWjww-xY~%>Y*kp{O#rAK;yRpDo65IcI)mW5mBiIWNZb;uB>Y{G;m8VH5X8x^ zwp4)qpm4dX-!z|G|K5(E3n9-a#NTJNz#vHse&+WiIY zY;4T?!Z7wE6luhXP0$c`Hvs6#@-p#5i{S~xSr_>rD*<*OxC4at*DmiMruvI?e@YZH zt*k|67%OYixF8z;$|Y(2x=UM}I5kW#q9i@L)bnQ~rIW_>vb3cHQ?}&C-0|f@w{xni zTsthR{|{cY(<(Vo8&n@M*L>1$n|(WXGjz~)aj3S z!AqK12&z!@oy5Z|yjCm|Fm?OwNUMC8OZ{-9N}i!K89_z(KTa^OU771`M0|B29dX-`?X(F^Weeuk!Ht}Itp^J?KYj> zA>Dlndo>@!R^GeIvI@3@&Y{K{MlYX8)tGany}hI9$;4!dx15)JFNh-KOL09aNACFk z;P(R*=6s%4yN>nhWBgkfJEEaVD1tY4Tg21B@`n>ED#)yG;et4v5}?GMYpgSh=`nAi zc9clZym%slYOuLUaogUDkO_iKc^Bx<*igd=2Z3Lja?T3mDaqZHXIP;W?9VSL&(5IePsxkDO?R)j$=_+oBXPYWllE4r|+2gugx`#7QApz&2cL96SF;|l5s`lnnk_E9fDvwm-7#n zAwA`8`<nSNdzij_IUj-2Yd(A5X?@ z0|2KPxFoebhs%Vw_5M*7TgUB7|D$FXlVE9tjFoh!Ff9r9P7W`b+D0@FlaQB8rX>}) zZynX)!8uU<)p<_@FLqErXI8BOf-oAYZsG-MlefO!gwEJg?X8uoMITH%A~q*Q8Ki#_ zAZ(rM(*D+cCHdoIcUFlKSAf+(yDH4AG>(V;Si`-NNZ5bGIciQEP?PVjfs;^`Zbp3d zCq!%^21$v2^!f;;yb8UxdsVE588iB;^A*V(gYrS~CU4&rVB4kxLq0Tmsj)a$xxn$Gw=ziq z=*|9ud-g`yb4QDNZZVP%OBNA^9Rghvd0E_ysvE&|W3tx28L)wHG!oJYzHOl~chZ|# z+{Vdr=mY}GG?-qB}k zo1qDZUWs0bAvW@q!ToGb*=y3V8%Q^rd&yG$;%x^R@}+6q3sR4>hXWeeLm+6+2+Ynm z_LhGGVzSO^`yy1<{DfTfRWder9TjRUIsr8QTYo>Rmyf+22f0VF%)s9lI8+C~8@Zw> zrX_PSO<1AfZJ6^}^NtZ_lyoQ7T4kdRc}J@cr$QEjselKhC?%zaDH{Eq36rl^wZ(u=|&+SJLyOqKa*E6>lK`*rpvXr zrzE~+Op<))jz65K*R6AC85z{ISAyJUJnXCn?1r0V|GUGGNZV4(r1jq{#aiPq?X5RJ zjH)tElpYjWNFCF!falL^r*P+(B1=F53@Hf;Q}@*CyLGfM9B1m%wLtz?EIdSwjRJV^ zc8`*)w8_9P_1>om6!GOW>xTNz%!M4Brr~m)!Q^zrmRA@qW$u{Q1&jXeBd*Gw1tv*3=8MIdI&LnM?3o6ke=|V(WiVWH?bpe zG@xVqo{u>Ipb69;^tvs}0Yy3r2g(;dxrC{PlHboXx*0EeTMfgJ~Sb@n`5ZXKZKIHVW7Pb~0q-dt# zHrwJE9L}GVsg$iC%NNj+H+6^&uiuz$8J><|ihPB@@&@ba=mV?p+ zLy9O_N!$@Q*n@@A_#m=r zfSQW7MwQ=E5!5iu5syk+|@iCkE=^>#YtG-r@@`cLt$gY#4pS8UY9a?EA?<=h}G88(#D0GT1gp z5alfE>h~oulVpgK6Lrf!%975zaIlsD#<5K}L4T-|)HI(rUDMbhe70cH?O`inV z7>ZV-u^dJji_lRp^U6{x7Q~Rj08odEOmSgIX|nM%s(FEnHZvJPYr&B~^2{BB39HO+ zY*dkAfUM>p&0Pg6<*dBc8;kFip!5EYO)_`r0*^$k#6ZKDXn{u+y*rN!n>w?dk3ELb ziC9om^32Mt-4TBQ|DdnZ~09N#XmNS#&o5XH7zY5^)jEP-fHhyWs z$0%a+WLd9{&KxQwC$^uz7&t210~&AoHu z>Cl5JDrhqCX;09L=%IaE4{5?Pzrj=~08v1$zenw#+cgS3E1ipxw&1)|y0^_N+3SIz zE);Iu;gB{Iov4dz8>~zTiyDXYX7>AHk`vFemhj1o5}EN9u3RT1sQt4{!sb8H#tiah zPT%ncxS7N{HM;E>KKcVujYVh@d$z1&nMdw#i_5_Z`6KWJ;R8yw;AL^hWPS}f=a$Don96BArwA z0HYo<%f8^k_;JlY<4uF|pB#}jmr|9wBm@M?GHusO)SioTLi?Zmlj_1jR;lIP&^Lr;BzH2+dSizT^2M*@wZ=QGW?rt4!Xzhp3+)?*T>=?}c*wEN=gC~oLs+aFPR+PF zxO($>OP9~Sh$PUOT2(^~NTPqQOV}0y`{oR5g|xU{Kww>yQN}X4N+XtW>*(kK9)+++ z-i8%YI>*lUrQ{~Nc?{b~)=OMl<21>Z@XKh5E$*W?G+#bt zK+fUFE)mK?QB!g~sc2NR*w=D|jm>Qz4h#=6I(^;2)8{Q8Qj2qja4O4jH=(QJlv>xF zXu)n>awUQ2MXhZ3+naDPx$sXT*8|9hLs5EF{%+@_QjEFFcQ2aWjhl?gXo8zOrw2 zZ=~gFP|wJHwjQ03Yu@5jNtXbn#UC6&X6I`lvL45?)Twp5gCx-3y}B$fqyrrn#dN}I zAaNMc#jtq(+Evm+D%gm0b%qD&iwzIujp#k}lip01nBtov-V+#$#o=#lv>8VKy{0ba zNX=#Dw^5C7G5+I(VaYEuKOKiXLJ{q|hDWOgywqz|r>wTjbPn zb20pwDpjy}l39x-mlg8)SBreq#78d>J9ge*vESUV71c`8RIOez^jaE?=%7kY1l--y zSLGy2lTq)~x<7aP3S50|r-tQ-(X4bvnmM+ZJ+6sP>W$pTxeV8)22Cg{Q7hXpN|78u ziR8L+)$JB$xbK14QTQAGtBX>&^AWS<1X{3Qqcsw0pmkg!saojM*NPwDo3|c)zJaP% zTG%aq3}CWoCT*&V%n?8(>dBP*JDaCE-r4?ZOZ-2--BFvN$}jCR*gcY@9qzJ6&~j>) zGY{Pg*}aC_B~uPOF|7r;BohGN!hAggoAzy!+23>c9GK#FMn>ER=DWeCw!R?;uG`9K zEs85yC*XYW@ib|dM7q03pV`i(-D4cQEp^+}`d~{@MKTWo`E#4tyzZ)fF8;rrMXurjGE>^iQ%ux47v5p&j;_1yYEvT;`^BB1*=YeI94RpbR3l$4q}pk7Dae3vEhRxD;8V@ zQWxpyo?T;)cf^Szc0)1!3BXZsS1nPI2tJ~x zo%P8;(FWGziKWb+Kxcpv>|G-n^JcFG%;dISAom&08n%WFIUUFf+fY(|JC>gX-Pqqi z-{fW#O-{3)hI_)9!;iV=!%(EFxQ@jr&WlmYt=JkPeGi ziajSe1>N@`t-=E*hmOG`t>sx3=icN*YX-F)ui6Mo`gIx$HRx_B(|H+yxnDNyLnS=C z&u|RKEW9pqKy#Q8$#S3Bm7k4DQoD&TTcUmpArab6p?tv)l^a_wy{?K@f{%nl-z2P= zs*10IGxrL=Uj6cs@Znufr50|qIg6PxYsePCgb>1XRQv*QMEp|v!aR-liyq8gLuM%{ zljruIsG~K>-mtz+-;7~eYZizzWk;CO_;CrJ0JfeXH!2IXbZZW7O%z3J8>mdD#=|yl zo?}`zb_520-E<@w*tfiFQi5k|)ysk3*W}$4GjY#rf3IdIig36^u8bOG(-vF>WzhQv z=wV!D}Jq&<(0yIjR{kG~0VKQeeYHQ2S zrtWH!5dgSuCx~MAOnc!I;YY8QBs)fo^u81AW#RHREu?K;rjz?*4!uy^DNm4&;eTF7 z2%8+Y&IW)|z_o&RNj%_iAB1(D8M1@gK={`u9=tiV9VK;ReT6Rx2kCQ;E4Z4z){v2I z+kBmyLmeTAcCe~@Xym7oWaJRbn5vkrVxR~!j5wAekJ7w(27+-uEPw-~*JISaYCH9Cg7h_zlz3VxgdwMFH}I949y z=l6)Lb()u`6}BzUDp_R?0H2Pjlp`EKNq4oH~EX5obQirkqF>uV}X`r=nB^NrwKmtQ`&uR zRS421!v|70kOam&wzVpII0v4zrARjQUaY8>PB+5t5{M|!ebKJK$AoDmd76qANl!5M^Mv>g~t zfbnoZzM`Wz%pn{va)ojVp$((lqV!~hJVR~!MG^Tx+$Dv8L4>CUE_uHUr;iuvqQr05 z#-6L(MQ^Iw>E?v+Uy6{KGn>x?=FS-mtuL*CxEKFx|Hu@k^fy)9y9qoz=P8vVTv(DW zmFPQ*fi3-5iXY$cRHM)Vsy#Ac<&I*f_B$;O|Mcky=kGdW5Hv{?;fT<(9k(&bq)4c* zWGSm36ceYoxTGW<`L;e{rd|-sL|mOLSUNVNfuE_Qp#~klmjj6M^npGbHR{l|mZA3^ zNw?@DZv}jx#8a_j+y}eXSA|V?Gam$J^O}(*AroP$AqMuABVSUskSa*)^dn)>Dw^j4^W$ zqn@EJcBpbqURcVXkKge5YE-dbIRkno261$6LhfUB6S?hlt@+@mHJljW_rG{v=EKPTzN3wAf9{irE@q1 z8xwf30xvQu2U(>2hzJb-LUL-bipf3O1d!beygE+$)K}Oqd&}8s=lwDlnIL2yb_cnm zSburi4B+fAzodl{gkOUyCRTlCKM)(uIa5 z$BF@@2q`jsJ*9Mp|I(z#nX!f4P<|!xovGI_)9~0QS^lIJZIS5*9&LE*_C_zeZ(^b zkn9SW`)dv9jC7PB_{+++atD0x`p`d7#cudNH{<@fnw+!tmQH1NA@!+oL_FQbd_aHw&2sZTgP_hhZ*(9ur1(=uWdXrZiL8& zQU56_AL`UC8jl3Dz-p7i#pjre$N#^$j$0{PriaG@h*2qK*z;&O)TX_nTpPC&*JSNz zA&4tkx|M|5&S5)I1U|yu>*1AAF1D&@SGLJ)qLQQ9Whtl#7f2 z+75V4CGU?4W)Yia zpFcOQ5xQT;IvPp56d`ro%)4Ce+>0Tak6)2$ngE~)8XOiTdI2OCV@oL zxnt@#m=!_sp>l`JJ8CDJg{XVBCHd5ZK4ucmB<>krK(_!pc-cgF@mM3C%i+4Tj~h!;oeDTOk2d!*xK zFi@JACXryUxaEyCo|+S7g0f5T?H{+azyszTE2~f zErvnNU1&F+n59Y}ieFT&Pjk>B7>z5D%e#Xf1e3_ai8cM&>rzvn+%xdtnHdr5Rnt6Q z$|+LkYtgOi?T%=Ik%fV1aCl)J3<)}d+}kE*9HW4lBZ@`WxDc0sa7lQnOz`Z?1<-10 z8ld;yc*a7$y`Ur=Ki&J1!oAj9C3HP2xL{}7a31KN&9s7$o+^~3qSVqPr^>(Ki>vd} ze5T0eukYiAu|gfjqBol+MhpG!h@|nTa)sVPnP=6w* z+??@lq-90$bJ%`CuxL^M3fh@$gwF7DWs_3KOSE#@ETKoW;{ap8PJ|W!<{!PfNz2oH z((6jH)v{BT`vh~q2{H5Xz|*GT>fu;lss(Ufy;z?-olmD)Wmf_PMBtU3qF@Hg{gIA;&Y^&myNL3p z=Y#n;j|qqs^aI=fVcp#lqQ`SIAnb^r}Px zgApF~WR3SbhCBpQUt-954jfOY<6P)u_v2mawJqCw4%?A5)rU{!bM8HPd}m0tyF!)? zoxNz7ruvshhaK(l|e@){WbPR z^yxyz?>CpT3LVJb2PCl#2SaClfeBdM_RsN0LcKhr*XVQkTmLN0=F#a#Z5f+tV`=nC z-)XC2L{X_tpvkVe#|OK}r&K<I@MQi|@BmjmW zyCqnOYu?t-HoG%0SxYdItmT!IBCEj=HJqU!5nWGLT%5Q%+?S>E3-y-g?~rlWe)p@u#_nd_W{7%<#li?hV&38V zHDxpao*gCMX}073yA!O_6S8Dl^GESERbLy2>Rnv@ifCzy0H1@td3^z%^0Hl4;O0r? z;dWPgg{+ho<7fpGwKG&?TE3$MkX#)2mlih8cIWV~it1&k6lVgx~zvLji>u*D+4`l`s3bCFwQ8+5+Qp@Ff%CZUv7 z1hbrgw*YT8$A4{?>htwg#r|R0v2Bc@0tmA~=H^$%|87U5A}%cS%lq)53ycG=5r8a19!pV4@-xDBZIZU?10-#jv=5WRCR z2SsKNVa~z`8JIImS%I~9PezEYDfsomDQ}PEkFZn7dPv%Deu`;mtGd}B50+^`rjnG7 z4~E~3aIgOHAW#AS$}l8nN(7?b2HYkd7rauMVsgRQ*Wm5XOA~;azj9CXBqq(^A(?wz zPrqD22#XhKVqh$Euq`5fC6#J~4@HlflA+C|Q1DWJVAzr27vW})(;q>9Z}D=Ywi04S z7V0LR+F=t57x&@pz&QRuF>5#~OQnwcnPApRz58`5LDVx{HU2I98mt1d@S<({ixQdL zRPr1((_mWLWv5shg0%KYck=3^saKS@ZW-EsrEs|aIe~rp>ej{*gbIol-kGN7;CFVo zqi_4PkHfu?*eV3=LXn$Bb z16fWSmai*~O>g#c#uLXB&KV2~qX80pju5zGL07r{Za&%|`;rKKW-*;l+Z6P+xa#gy z53j+Q@Q+nQAVkonn4_qRjwS=_El^LejnMLz%owS$4|(IC2(wcQoS!1wMOW6UJ8H|^ z$=X+SWeUL;vzMs{Kp^{aEygz`AE3*%M&Ohw6o!~lWRtQ}Ki*W%&5gU8Y%r5+;Qk&}@ilK&N&oTpRJ}Kv# z7JlL(FJIz@fA}Ic5Shp)L!r6!w7B7;9e|vHlJ6fVR8jL{oO&eGTHH8KrB~fep;GhH zouQLnzMIi1Qt`W`KRT3reL-P16eVA)?=tfbY{m6o<%m%iV2jnJ>Wd-l8mDQXS^4Wx zlyEDSE^(=h5*5yUS!?pjEWL&MBdg1aiP|Vhe*BOsnmuhKSGw6S;1C3{e~Qn@Cu7#V z>hF+m!u)vs#9KuSL5fpbykatje;K!n15oYCj*Fn{Lvz`>S-!QSy z{L{wwCZ^B}$na=g2Z;u=`#Bxh*w<6g$#z!2)AeS6TmMSmu2P0nBva4N(uv-2Vw^Fh zJz@u;GfBG!h}fas4o8i004-6YHEy;azvV(`Z({oM5~&)!=%n#&2j_5yM7KTa+&Uz^ zpqseGsM!YI0%(5KEjwQlF>*C`_7HA?eLSp{TfUHV^FEsgRF~r&&*H^^YhMeN01pmR zHg;~A3^Jn0s-U5_?w!^~=PeL=@*+@DzwFGs4S`iHtSmCtE- z|DmygNghSOgBzn-?mn6oeDI?E1R_-}bYUqDPchpynK!q65#EPSgzIb+%)4<%t6O1F z>!HD4(V)hOd}2Gh&>37Q6ln zr;??6fxJ+N_UHU_);B{5rN-7xD7C6nQj9DHWNaa8=VwZ#%%L*y*?76b+d=LS5rG5) zb4bQMU~Pi$;;87?+S#=hL#yp{_5KsJEiVCe$_3{m%e0n#BjL`yV)zh1$H z@-^$IAr*9dnN?);NY>FuA5FguAYF#Jt4_#<2yq<~_R|-vVGvy^v`C@3d0GiNWlX)7 zzDUMq*vUzh4|=se{T(9EUF&l zt8@5o0@`al6fVizuueI(&jqfWV=rnYVVywhe%P0nGiO|QglNKgCRpQa3NC7b)y{}^Hi33$O8(W3|(eKh&HhU^L(QcHqAqw_|F~~1{XR?Y&)^1EDD*BnwVph^W2ShH)wqF9@V^vg$N--X zC2D$OSmfuaf)>e!Ae3=ipPR$QGO%nbj8tbfl(9!M{hxe)eh5(?e!mG<^Qw20^B^0Q z_5`vCo#MMq{%e^ASU`l3`VN~|Z34bibJ5AiF)B(DEVdl`NyZwJGao67l<6R+<{;+3 z&0MxpLhzhyAz={b4xck$$j~6*KE-+v@#Ps(&EcqGLm+v>tdl1Kjv)rQX4%L<;L-48 zfu_WVg)5RA)<}i1zIgMAqVVN8tiM@Z_)m01g_r|@OMY)$p%K#kFn`U^;>^^57DlFI zi=O-{8f9FNg83sz5%%&>KkY>Fnp(;nn$mF_)=W|MiEm}(mqAAxhP{KJ{;U@0t0}=8ToP2w+ETd8`k*M*r>LGz0#ph2>%6pp9$&&{x>3rV7ZZxsS%@SUMV3# zqXGzm&?{zbJVwVO35I`D5k7-b3QFXY#=({slu;LH>ToA_((nBPoSGQM&CZpzV^3D5uG;~u3l~K3-^U;I7CDtrya{`Wb z8S1cuV2o3pcZMEi$5$~a*{M3R4cPSgNJ;xVKs_78i3aV81khy(y!j5r(|20rCSWU8i)@M6Mmb`NdmD1+ApgL2a{9?|L0kj5-5P5Gb)(WCAk99H*`VH*;aes7|FzN1}1R=G_ z(NZc87`{Hcn6Fuzg?V05lN>^4XKU3#ueu33v<{ad=DXo1q51I5qCMMzFJ+Lo<>k&D zJN`6R%{sjqStAnhw(|GE^&JaFj}~fy{=t`xX;om|@L}m9Fmf6sFxR{s`T|w_xl0P< zkdQj#&eWiNAzJr&ZUawFldZ&#ou7(1Ss=k(YE6%6c|z=yK(Al7=E`3VCmO}P;K zN^$Q*k69l7Iap|@YPYPndQ&6)T(yP*E~K~Zwfc8OV{tMBTo zdA!t%2!q^!Vj>=91teIMc!1 zE?9TP!znaoNcnX-%zuGE>EAzs#0?aiJAf4=ZluooD5rmk`^JOl zDscOpb-4ZPyu0=93Z-`oIG|&taT3X@!})SBMNSz+EeZ7TsOa8Uhj6HohVNYhkX2)u z-q*KZ2La!);kZ!wP+7@x%8m-TGd#%b888PLaWsU?($zrYgDxGBXM= zN3g7DeeWd+&r$RSC={}^AFnsuaEML0{4HT66CW~2ZRcajz|;&dTWKM1-(u+!4_^C`9v`lTr~DIpE)x?1yN51qV10!HZv zN}A}?c#@*!1MJk|$d8gruDsXZO9vuHy|lHUe)}OnVzF!o0A%*EbzCWg|2PcD2so1Y zt=G)M90Pz!IUL)rV26ra=@-2#52c~`4NHtoIocJB#A&Z9u%Z3gWju#V@>oFJ3=kW&5fj$5z*7S(OYW@shZj*bxEkCRVO!~1LzF^~XuY;l0Ar(4 zZe5P)PxWcoPxV}hejK^ndyV|6wk`-1{$hDo`?;O#Pm#fLwjZYqKp1{zIY= z5P7_epoR&IizxGo$?MCt4ptei;GrUN#jODnX|__h-8Lm5u5$*#;3FX6j^vrmhRXGm z4r{o&7)mzn&^O4(in3!aq#|~2_uYZkZ_T-7@RfJ2%2Z;`T}Pe}iMjf63hyKrMX<2P zQH7zgYSQXR;%Wmb->42^q8{R>AXmL}>+goi)cThG`m@HrdKRKXb5?P9GCRT8CcoY} zUA;U1*H55lrU{yX{p>Vz&5#v~J}qy3%=I7@2dFQlTPshvFBEK2c)gOC+G!bBOm^fT zvPh(#FHD<7e|;QA=^jHSNjbJcI!sxWYbe#er!LS80H9|EPVTOM!nG1cKeRO#D%!t6 zG`=t@4|`yyi_NZjjMkT{1|AfLMWZ~N#GoDS@XENRjW?35yyhQeb<@0ZX5#<68I!K= z&|__vZ&&ko&Er=;0LbBEgB66v2-^e6Cr3;d5pxJl^gOr z?F5HRNXKJ&B(oB~RXZ}jQcfPhAM*X?xK=n0(seySnGAXoKc_l*px19lmwul1{wcr~ zG&q1S-eq~o{h)-yIlK$L7`hGPH4(a>-dzl?jtmcGoaX#J+eYz(S7NXL)QqZ=>-VRQ zg1U)kyEw466AYFjoN9*ZgRNhCIw;svkS(jpzM1=ILMQg)TCelg?zW=fGCUpBJS$kj zPdy+x+klB6AbaK=(4rdDh{@o&_OhYP@@HT~*v@L=Qp59MqZC-y^P+n~=Us@26p3jzQ`ueDF%h@qXz`=1{O zoMt1+ONg{U+|$zL8FXF2r@kQpJ1@HCFW>P%HK*lW*P-#z`x8v2D)%H`I+0 z?T8-AXbes`e-Eo~jU0W{eb}j7BwBs+Tei0-$CK8n<*Z^BoK9RMpelCGeOybvyn|et z$Od~Jte9sPGL+iUi&(9WCIf+dNYR4>x@=MDC4$nqf7mlWcPT|dsTVzB#?t%IB**R$ zz+}Tl#w+NY$eAN|skIWsQ{KEFvcwYG!V6wv#0m@as9hnD|*s$e8+Q%_u>o91y2kR?abP?ff?p224?TY{nf^1AciVW1xfK# zN^Tv^tr+WUSk`quVo0m%AAbc!ZgnbNms{RinL@#0tH%LNtk&GgaU{_*;!7V11Ro7T zMbCVo?nwQMAF5DDZH_c{2_uR?4PC)1x?h}z`#0Yt|0jsQ_N2q`(*me`ZN$YC!(=F^ z1vA3h68ydmj`a0NT8@g+P<+6=-rJh?ppuOlyjtA9`xB2r3A)(}k$T&b5UldGcC~$g z1lH`B314FkSOAI#cKYUS-@kL^$>kD6Sotoo<}CFMl&Mh-0RyXf`R;xYOUod;0U6d3 z(X5u~4&J|hfc99)?63DNn7k{o@ideTq26LifD=y>DV0%egt+ zYDa;u|66{5xxe}qe$m6SfSJ9yFpafCYkD!SMfcqyk5sYtEq#__N|Ts3e@FsL4{_vh z&Sq*h-dKcb*1Z~K8oqOTN0gLIMpF@fH6rM@G>nWVbaaF}2AeIUjr$A(J+wg88)-Xe&qgQDv)Ufqg>O%537zR|b3iA_ixQXWG}lowkWSZ; zK|1cdm#|7X+vDXDbH80^;KqD!4HO)z-YK`orI2Fj#dQ|uz@5do*7~q=w@|6*m@RG~CORSPSrui?xse%ebcs6<0IP~cBOsIm0(ZC1oN*Wo zTR>tvkID8-k6>m6hXs(-2zJ+_wl}DQ1+qx#B*go9q0X!+6Hap9t)5%WoH-pnSDo^f z6Qp@ec0dEO7|+*5DlG@)F1K{rlL%E#ohFA2 ziB9Y(NJC~J3#-mRS4^kfR^F^!V(P?HO5lxD$Yn&#Zz|0Wv#p~r(YG0JQPY~w9BxTh&>fLJzoeafEQg#zp97c!8<=KKk0}zxwd{fTvR*__ zurcH+bAzl}Kl;y$e53IJ6rsvsjcRNJG0eIW;7+drjrCw7d5VC{GBIg`wu7qKJBCWw z5GVXa|uVZGtL z2>8?iZef@KIZKl{I5b!!!Sw?L6`b%eASBd&bFyFtJJYu;M;F9-PDKle@ccrc4S>=_ zHgKw*a)qeK9W^M!T5?PVZS<~GhMF=wr3PccH@mN*@x^uNRQ zMRZQPhSPtm8RKJTfwmaPc#imkU;8demn$^8b}p0b>3>arQVf#3Z8|iYUSV(QMdw^J zYsL!K5v2+A~(HtA4ewIc4Z>BWglplWk&;2Ru zII`w1_c{z(thW&YIgo9m3%jQ>j*KJ%SF^@G+OJtKJ!t`}l62g9tG2XdR)CR`ew z@imh9I2ZWtCi!IiUWZSEa}9_ zFUUUnaLyr{s1Rxv-6+mZ)NG7LgAf7A4s zrAHC1tm?WTGy`Rf?6#vT_LJertu!!?4mFqbxcA$3z`?oT2#gmBVK9JYtnyF2XVH5)9O@#Xjq2bj!QI9GJr4hY#+=m=vyluF!L z{5`>>HpA$?OV>wfGq`dvStw5N!6l=l;}Xv?_V}(b26mEUhmNqH9rRXn#a+9A4H-XH zjO5menqnqSiXnY+G>5i+N!mAWO}^jIqqKhf6{9kA@;RbF!HHp$pw!0yDKHGXr` z_Sb68*3y9H5KCnkZ>!TmyE!(Mgglv={qUnk-$;DbSDg@9%5cQBzDJ(QD@jzlG>$p+ z_>85YtM*aYBAV6068I*@87ii3tJAE}A(v-9Igng8WqSrx8n`M}0;7`d^Egu_OiPb1#QW)>>R|PQe&W8mJf#@ncj3VJnGD4jK#pG(FO`F7mN8Dk(f&tB5WS>mq zG3iKCg$Kt+Nj2DNt50)3)82-V#Z5+7>5LFOwtI_YnRb zla~ga?@#1CUEVNoJ$O1W0GoFbkYd_0n`%eb5AJms-A#((HCte~`J`-jG zqnQq55ie4mC{5@^&?485)+me)7>6YJh|<95)SaSQd4o3?gc8cf5Y<|!<*4U*wk)%d zY{jIR8-*!&3ki1x^dos(k@Mi>Z-O&UqAsFkd99c>G;){MIf-6^pG@NFQH5d*IriMf zfJo1nlVpAQWAybHDz*f-M8sgg&pn8!wt=IWD)1VOb|4+h5KveN`PyY*!?D4@O=40a zMKZh*lNGilk7b}th{=QDT)X=ktJ^g|X237p^^yoo$GAxa;Nf8_-p6VL1x=snSt3?r zcb(%NHs6Oz>$*Zc8>P_2Lf^nAZT z1YfzFBx7`#K48c3vBs41ZNvJUmh7AZ6F>2@ydIU29_OqGz?}}*I^%Y1Iw=JuVs!hzPRStZTC@a z?0&|bAOXMEyvsCvK6uo&94~RJ@7CtyTTpM-uLd>);)F4 z8PELRdbS^l^$h9N@z6lMuC*5S1s=N17=TK%hm&g={70xoOLgc5z`cg|&n!8{3qLZ= z90Kf1)sTd*$y}aff)jxS1LW;UBg0cHS|SQ3epPwgM)gYs%tME4wWKY0Z~{XPc4C=^ zKq};7=I%}dWP_YIZDOW{xX#!3%Xk2KNOE;foNo+a$CFNNWuqGxgvQb-!%gE9Azz-U zC=v6r=;vUbB&&#=oL(2?;iq)8g4L>$2&bY1Z+8?_L|qdQqCg$+L>3p?jDUkH8Mv$R zxUrJ8#RWdn8vOksrn0?>?wmZ3+40io!y&m244AxLp$&=t4?IQc;cf<5|9SL&^n$=^ z*;6o>?Tv3e4*No8t3jwr?{lP7nNPN5METh~Ygsn1<9temfNXbfG)|sW{R|~?!&=KSUT@TO_atRTnhQyWj+)3EI@PBwF6?@>OQK0zy- z+GmzVGvhyp0ocVRfaHGkc#JE7Dgk`s{Echegt`AiH&@O-USrd~wn{O-xO8Nk^Tmp; z=wE2h&i_Bfwfz$a5uF+j1_(`j`P3lag87F0^JkzGndL|D0(%z9&$$n12wfdz?ju&~ z5nIafr>#)3(Klu3e)j2PLP>x?7vn~Prq2Wy2HJBu-9xwN#fp=1f4#S3bLD!S1xI!Phr2?`{U_>Cg4brj53vtIP8w6 zUc)xV(Y%_oy4x(|pip%0m`D`KI8CWY6VwP`{m)+V&ByDnh%zv583F8vu5DwZr+dv) zr}FZjL(2+3jM7z&rXz;0jV-LMO?^Mf$t%IQpB}Lmug^jIvUfkV48zrtvgF)s-Aa8Z#zh^#x|N+UM9r3 z?F9432{YP(W2RlpeTvW=NiueW5u%3^j3sb0X8!qy3cqq=P+e}-7{;L0(F9Q^^;9sg` z6(7=<*A zC7>wd*!mG|G1xcRoWSu8Q~RknX@{I^Sy-1p^?*l?1R>OW$b6vIO_0*A-SU`qQ?VEu(5(F!{X6=5it3XdK$6|-OSyNMzUuaV9~u~g82hC`vb2i~h6o38H%@<1~& zP5DKa_RQrxNzH?9IDxA`7~1y!=a$hIn6B*UlQ+Bzs1oO8$|pB!bb;~UYz?}GNR-fW z)lG5Fs9w>R(e3clv(WgaU z!bJ6{jo7@?$aM_{#!Do|<#PAchsr#_92luU#(U*V=C=V?!OvrZSYt=eq|^2tEWa1# z3VSW7G$Z^U1~Er_F*J-k6`QR6IOe0Cr{AVGVf}@;E@yLpU=oXBusG1F#H~B21ZLg4 zoUxVRoCSKae0Zw07Ml{vMBNE$T|#C`V>CTTozrK9lq5H!(XyMuoGfvJ{n; zN%<=0o;p6*68F4Aj5RSt2!ACxhL~#T<1TY8JFG2rOvuV1EtZ>4R{t%+;+Q?+Kkg8> z!#$`_h=0{iy~my00ZAwFuIiI=-vG_#q219K>!;yLdpL4)DMq8SB_nMntA^ZXQsqis zj}~W&C=f8Gh(?MWGPEu>uE`YsjFwnj3^e|`beB}EQf4e)2< z+22n)Z?hG}Yms%LuR=N$P}xrzWfFs3kBR{ciOhc*-djX8m=BIxUIRfsW}6oEk$kYh zzoHNeU^-(A&)7-ZLWmzWjuqQoKj-n9b1QTV)d{NsE>dp;_Q?zDrOqxK0yWCc{!6WA zA^1eLi@9*@>pZp`S}B~mo}`78glGZRu_uH|ePWz45{cMmwdn`+UuzDK zhvmVGuaEc2RN%&6rR>q%+!vn8OLB4pmSU>G{v&?U24S|z4Sv6J9A-ufF_wW5J*-~P zHLt8pbk6ylWIg4b{>KFg;c&$_)lS%b+xi?R{17VWVi*aR;FvC-9T@*2>0LL{bn$@* zidDcs4{*MMBX~8)_*rfZF4gDtF1^hf&vru}$`x!%x5v4!XxA|w44im$W`M?YzJ^&0 z65R6}uVZx19<1L zQYf|1eFwp|o80QtD!Q=Mqu3<}oNU$>rISNar(7%I`i^d@1cYON50DT+9QJ4GIj|P| zZ-pp~j{A8z-}Y`-p{nr-QV18Wu(&klSZwLgG|3t~9P8GmJeLQv@szZPeUm)4=|BLk7yz>9@iv0BsPT8>5vxZwf5Qk9l(vOX#IfeC* z)>COfLczm)!9JI?2uYJpOlR3H1#kqI3hmJU3=`zub%7+YCwc3DXi`vScTe_YFNL1L zzn=~cOsOZi?hS36++!~-r%3;-q+Y0MxmCE?#pj(lTxmjOmU|7ZA#{y`jXCC~i zC!d2%1z_&Wc`SBqPY0(Y#C(lRzJzVLMR0?LVg0V@5Kcbb94ssrQ-ZC*! zKqOBvS$&r%Fn*KG9v1K6wW$9(&|;K}a_5(iFIYZeLu)7n$qn!cy%Iav71Ml|mRj_m zjU~6mX7~4Be#$S+n)0KYPjAE7WH{P~mx@U(fEIIzV$$DF_j$mB>nmnjAv&Te?TqJ< zZB`ikS!n8?Ts+keWN?WhgYEjsA!s~lxIT%sor}o#R~ILc5~tElEHGq3zNSe|qdVK% zWDbdDhjNgH9SdPHM?F=6vQS!fY@%8aLK)xekAl0~LcV)>l z^>vOFm_M;fxEx1wMGtc-p|^8(lomzL){o<2ibDP49^ieonY|qHV6t+kOBvSC+Y2Ab zXu$Jj1W-ZnvknTKe+wV$TTEDL@&c98^Q`4*fw4ab{JP6F%~U9?W!QnM!D>;LA>_ud z*micL#L!q{-!k1=`@C zs?vC>es&7pDpal>Im|p9rqzndw9Iz7Fw){iF}6|9;v{#;n^!!egkV`HUn6uEc|yKm zKM86>jzA@OwY$4=P_0j@qSUg+eNcOtSt15~EH&LkG@K}y^X1Tf3BJSta@D3g4zU=K z3Qb+&3Yd8?o2mdmK)}B^11oH@jtU(xS&HavZMD>q#V8$KN#Oh@e?Y)$fepFF1;!YH zaQ5mBw1v7|`u*e92z))61JvA`P!hHbF2U+RpBNXTW~Dx}&}!Z&``|A1TY!$3qpa$_ULnn?3Y zkz^+P^Psr~42ZkHlXGMCoDJgk?%+}Vu1z7iYkeLxpiSf@Fy?_SGVi&bub?8}XXXc0 zI_>XIhc86Z@4@@TdnX`7($@L&XTiU!)tuQZ)$u|t>^Zf;80~CFfcS4_5bhn;c>zu; z(1WL)9f8jEZzhJ)*H#r}NKEnhA$QS)BF;^XgW8NxR>(WWw$DBdQ01L$wJKUzDD?^j z^A13cwzS_78#IB%4hg3GMic^gl)Gb{J|!&38(i;XcMJqT;YEe`2fq|$>HNCnoTrgi zDmsocu2uw{HN3544w;U%gmTZ!ffNy*=By1tLry9U+L%K6j3IfGqu+#xb`)E=|KY2Y z!_5$B?o;ai`>I2a-BpM*T~!Z4O&ycYmS^}g$I3JjD6;Jj06>K9Q6_GCEqCh}xSFjf zwrpPB5KJi@c|0y0@W`|78F~=m;{_gL=>XUMgXdKLWtu0WhH_lC@AZUe9iTA6fSW}n%MB2RzAIOLS%wG2ez4r=D%kRJ0jupc|xycme1w0^U z{@kXxlD+jawRaIHMIpA2@!5J2NZXH>xTdZFzm9%-flt*Dz?h8+-X-Etx~8W9?eudKPwRp_83(_iu%z=PtfK^vHC_?S_TG zM4o`iiQE=Pv1kruW)HkGv3MR{*WQFBAA?`rP=}C)P+^Ced}J+97o)I#Y14+ZeCHK3o;w%7EeK$XuI!@r@ua+a!gY}o z_Rw+gJe*OpGgDVbi$|~vm6|zlW0B0*&?7RywhxgoDMj)8p@R^bqy+_^Grg}CK2tfd zOLkR0Z$~3pOuK?H8RD@?AdxMw{-&;fZqZx0gcuKK##V|Vfj>AxdNHBF_Yi8sv9B4e z20BxnM4#s+tXT%R()P}_9!+H~1+)~A`&%Z^?)pVr4Aop84B+-qcz1q-1nfIgD3?}Y z>!5h$z_L8eZ%f({0Fz0d10p#($nOD>5;heKN7ajWUSE+*M3|tUMh_S7`BDp#!QlL3 zn{DFWh>0?ZlSFN4=O+Dkz!+HDbnFBSU{Q3+Nj^_ss#Eg8%ZVRps=JpL1W8^*^Yg@* zok1^rR~13QuY9cXDuk(2~MK!Pl4;9$}0yiRBc)=6Qt0rA$&x@n5^V(l+jyW z*6}<=h~d3h@yEJ0EET!*qv~_CkyF?hh9idydP*%VJ#)(i5lk5-@&$>=DJG}n%R|ui zymq~s7fSIttw{;@8Vsi?k>&iw-q(^pMuI6FOl5oqnAW_`To- zyA$vLXOM4z=Pvx<>WZB#6IV=l97N)#VgW|@zVuNt71TU^JIwvVMnm!Xp6;zjk1{co zaFXgp<73t+Bcmp^96XC43 zB7o!T`QGujYW>H!o195cgnww0Y&`0*it8iFEnX?LQc0K+Kke|hydo5Hl7t&RFYP2A zV$2EXd|C+9#@W$TW*97LnZphqd$-iR4j&?g2`tb5d7qQM?CoQ>m%HoMaCWIrx0+yE zP~U|{X`q^hQRp-F)Mt;iY!RUx(|EIQ`gB>nz z*3$vlKU*3zuoxTQ>>Aa9d9i%g(?C^0_kIBzuhJ43Rsiu!2@i-k@9y zTX0ikovXW1YmATOAHcZ&8}=k7V#|1hkalM<7&ocPw+*ZphOviP7{i`o8?gjZ{CtL> zH@S;?g?S<14~Hm`(B&j!Tzu$9`a)IdX06}DLy$*7)OkfS$EYcmn4}{tBY#>Q3AE3wRLv*ah#}&%h1|(XYsC6U#gV~NOQCw4ihVUw z@mQT8Ho|z@H~6G4P?)eZQD&3R=kNyc%??j9%$svN$x&l%DQondEOuGV{1G)$y*n;_ ziVd*4kei&W9Ds?|Z?Ec!ICSrWf|2)hmM}o#7%Q~)74VK@;eu6rWpFbT?|OVKsTUhl z9{89WzQ_Rezj^15^4nPrMyo^6)p&UB_;+16(rIFA` zHI~ohQPO{tNvj&V2s2bP*8s_&2Ls27Wuk;&&8nhCjAz-w=UBxZz_Z4(D*JE*q9uQI zJk^ezGosueOeR~t*#KRly+XYW)>3)3XZ9yz$Yce@53b>OInlK!>C`H!)WkkRCxiOi zMspy|EV?tacMvi?j#h|);Y^E0V9U2>*L%W8eb_Bb37-d!G)44KY5g?{37)J;U*B?s zmy<9o#vpIC7z4I2BgoC6L%q9i-m}Xb-9d5sH>asrTKDeFvB9=@9OK?x0?5v{j&jcZ zdCwZ}%UfMM9mpP^XC{WzJD5oX%^OI3roJ}|8L_vDbPCx|d%KRto87!&{oRIsa4zJO zv|>kVe3C)h1>CP(le~Sc&P1Lk9CR=N@`@tPh+*}(;_%88Ayd=7m5)*oA;l#Yp-=Cc zZ_erN2B0y8QR?r!M|+ z1X!yU*TDA!)Wo^u*!){&rn7344!Vp~T#Nz=Gt1r_t!?i}1*XcHC)OOp>N-Xs>~h4E ziGI4NFXikShkdG2kyFB0K^ht~lnvUa^ zy}IT{OHjwDDe4Jb?>v!6#y9<}d*uWrlMCa{GDbLomsh?YJYg--PRhGP#{J*j5x>8v zz%pmSF4w+1ZsiK^7LkCXqn zk7E@57yspagCnZox!IID8t0|GrYqA)%IkfH9aI*R>=cW4JhZ+uc3#UfC(|I-?F?qP z-~gs}&5N|}5xnJD&mHv@SW4mjhm3oe1=+DXDp^pgP3VWhi^WHXQyZ5^$3m)RZrCuc(h+)m#P41OGm{xP?k2VR*7 zBJXZZi`FORBpN8NBBf~;f=1(z=mf5iW)$qA8-58BGM(&;QD3N*k4(nBTyQBNtm$sB z3}H~Z%vEvPDw2i_|F3$_uPVLP6{Jiqb`8%E5lYdC-9}$)S^@=0Z_`=?xdArA|PYc|aNv9faL)7pJ%TNxf8;4?-oCgYcKds*qh-0?xs$C{g$P5-+r)t z6m#9a7j50_teTQ&<3tu?BB&Kuj1eP77_LV-hsR7X3C`uj*n-B!Ju&tVwP|5vh}O8; zi7AI^Za-BoypfSZeY1O+T3WDukf-M`4KlJrLwH$kyVrKqTTR5NncdUQJrhAVGwrx` z8oT`_&1s1u7MdY7ICm5fLKh#Qzg4tRVil~=qH*Lhi8G6I#$hYaWK(q)hgB3pC4c7)i5qt&#H!4ZN99zm z8Vv-Q>sHvbZR_kWY{iat;h?8N2Fb$%?x~v|{1NppD-^h&hhdw?I1X6x)Hce3g`D2( z(;g{KaGsjri*NqW>6KB>HZh$4W5xuIVZzHg`q0-Yz2}N6j-aeqle1FFfEUs&lV9M9 zM?7bhWRawHq+j}zO~-CsBcI_)7XPL2l&AvCnuOJzw&i?wKgs>vj#-)_7(C{Xg%EQs zWv8d%>%|2m9t$xUwXluAwFLg1`uELoDL@$`?JV1giH&I@Oq{3pu~vtpM5&_|D9)5X zZ*g}HZRvQTDi=iq>mKp?Rz9a|2nK4)k6sVcZc8CCb5N94`MJk9Y3K<*1GBa0Dqi-j zu5YVqN!^oe`-|S{i?E?Y@U!-+*Aq4YLLmumeq z%OI!$B?RXa5{G6dmNvSQz1ox!?~uK`p7~?5rop>L=!QQn`4KuJsCqL&J}zC}z|tei zL7=&CZ87tShnsTQ6-|p#-BzKrXi{Z?5=QDIv^311+kKYVj$~mFd@2A|P!oxSGC^wWhU$D8e;m)85^2DHFl&cp@|lcREOzCPTu` z1L$@5ir;Fmw2Tpq<&~Bf`vzW*HW0-GLmTbWt<OTi<4o2E9 zXe-v|4NJZ3jC;WkCvrgKo;C9dzgv>5mX|!=#{xN@qsrZ4 z^JvGeH^DV?vR#?vt|wJqYOZe@l~J)f*R)MNh*SZ-ED{$fPxI|sAF1$Xy?m|ZSW?u{ z{vI3F&V0k7sdAfY<@q@xs(&t`Q+4o}E;fdP5M$S@qf(|LfJWr02YKOPb-xHPY~A57 z&^5xnFt~;D(kzgA@Y8_h@xoX=_dLA+15Nj>FQ)!;-l$;LiAv8s^Q&U|okp$Dmv4!L z7Mp~!Y-4RH?v9r{NEwo1+#NNY>;V8|zfFsy6G)%50S&Rl^73kg8V5W^rnNzuGJeBP zhm~=9zjXKu`=#EfHSx;?jf>N;$Q^92v>|yMG;uHW#J;V(uP;=A+4%oi`A%Y=eSGQM zXRf0%OZQGwOjUiw-PB!^xR^fE6=hO*TGAneT_~?aeHi%NT*Ge21qCqBg7^RrJzQdb zrqz3&u|&5GB7xybD|vo7O^TZRlnnPH5Sh}_i5t{oR=o{b{oQmaBblvR61IEys!V7myHY==7P0}WCIhM2$8e7aixz7y*RRsWM zkE!f23lBwYxn& zStU||E=$H;pN9`0UhLhzGHh}0(wzNp$o3z($=yvkVUoQJNMlRVD~wAuv5o{pJmKE` zZr1wpKIrtAykqZ5j-@P_l#L;&L2D5%0wLJJ zyznZAt~IH6Ttm3GV=W0Wu5bJ~dl$7^20&d8!VW}f~Ak(~mB%xw1T_ z)pC~yBRH;}A_#?W`u{lQmY*yU6c(ELT6+aCJ|MqMhpM`i&D-njDOgTJ66pB>P{>hw zVG`->!qzU+?NoC28w`xJW$Gd^BJ0glX7Qyo>49|1wQEIjX>Ek)#)iq=45Tm;2tp8R z&1G!;oZfdlG70aQCk{$-1C6z4plA2OuDH%Ya8BJ5%RdE9^t_0eFG5aVKFciAFSwGs z*p?6V^&x|f8zr|=r z*-4f0XMQ?J;zL}>m0Pm&BFS@+wRn~rnsr~YYm8=$j=|yH)?_i^dlJ%xk5XvtfF?c6 zo8wo$8A7?;eJfjS8=jWeb%TODK418$Hog?c&YcB**Elyd$v2Ci#x4HG>e8?T zNdNq`XH+>oBWMeKm-A&HqWCkG(e%fG3|eM1*MZw|_avc?JXFTr09nqGaK_x}k-4lQR+e5faqlt|` zdoER$R~f!ljDMGqfIwYZ_6OFq#pn)H-gqO*IgmoOixeUTad*}CjRl>*{y34kd4(`X zCGethRg@}<$SBCEBdhRENiSGaHPN;ffx;yi*>RD?fj;!thn`n>_kByU{gI!j4tKN1 zASjdN^Ako>N1vF+^(kq&gEj-9nzX4-*4icFTf3Ft4>t<} zQ3KHqgzw#j-L4QaWdmjKjtps#H6}Lb1xDu1Qcbm!pX24QLsv3g%GAk;E?WbNf_Nco zL8%I#;85&x0cYnNlH=rqO-s)KH!n1X&o=iuSEGq@51a;qb$UzKL_qSz#3H7d8*?wM z3F(Ay!^(0xid9t#%`;K&TQ+xWv`Vhsz3gR~L)MBGx`|B;5ws0mK6cAUoiRXh;^e8> zZah8FZm+p0aasp&tK0Zb5xn3O0YgpVtz9azSY`!KX7(>;5z*HLg|L69iM>JEH6FYF za2n`kmg!I!e@wFCl_vH#35<<<0!xCa_i;59?TG8LL6Kg5X_yfAFd=y|p7xsG$ zw_n!5wWTYupKN6*<@AJw5rXkd&HtGxQ+q=MV8mi^cwj)iVi)fi)h zc)mgsXT?U1l*dG0+W_&KEqx& zn{V&AWl};Mr-TU%NjjAVl-I{V_3>#z`}kM29t`u@u`XCMzOg-F#>xTZ+F*}|_nNhm zw2UgR)E=CdIfI!>2UK-^-f{-PkF?$rL-Jy-=j{Hn zlRKe)9+`)1uM||!z&AN|JO?h$m?eSa0SpIuPR)Wug9HbrQn!|TLlWV|5*Q^%;Tk92^WFke_X>iU_g1P}$Uu=g@xjpWflGS;K=x>|Wyl6CMp&a&=iKI6VkQ=PlpMeqsh z)q^=82B}0f>usCaq}ofJ-aRIwEzgcVytIruzgB!mP_@OrgkEEUUx#-}r}kzCLTa$j z8Lw;>g?NZNrMyDYOy5yE#18eva92R~?b0_s6bv!il!t5Cj1@ttz$#(WQsA}Wy-%z&1LH`aihJ(1Ao z;V$ZKASoyUP1qY=PeJ?>K1_dPRW(5kbj50XH-bUEXF1t}`hSe!pCb+A z9YE%8lwIt1_g=K21N)#3y7(wiJUB=9?JeaCsCvD>emKBj=YFvR?@ElvnDLbMpir_4 zd}az_5G1gnX#z8OztFYI7a&yva70_IAT{a*Eof2aUmML#Gfe~`{RU@(V3;3y^eEt{ z80+k0J62=d-dmPleYV-P=M>qLae^>i5nQ1^V&1|V*mqBpQ;crmsG z`pL~5OuaL=^OHDzUjT($5P!r!KK^3LQG=Dw0A+&?(|FKP%WyP8#ySMK5R%{t2C!zE zHv)|fJ}<==YKMJDq|8+ydv^!VL@$Vn%<^5PK4046-qL@6w~$k0Yk5LaX~x#7pZOWS zWe}N3uQo{=iameZq8hcrRkGzBlEN)te6<2MdH!N)cwb&8GgDpub@t=izrV! zl5#>xsyhe|9{(-BoJbaOz91F4_?TXqhG_-Yi^+OFY9K|XlD?GWGC3TXaF{)t3KgF zWq~cZ4~PDtQt6F?I?)hPG)R0L#?bzt8j=TySDx2ipUAM2a|0+gj3tZ@P7hlqSnXUh zbsz{4N8v|>N9$C-SmV@N`Nm#CSmv*JW;~^%Ff-%6AxlD-Zba8;!2iB~#j{UJldutp z&o;6HzA#d8APpA9yY-S1XKFQO014N|XRvAn89u+_f^>KmX2Z%r_r$tqto9eoqn0fQUkd78m)ywtStM@73j(2a|3}M**&)z^WK`esXJSAz#|`S3s+Iex4v?kURDp)Ao}^7S z;dk=m3RD_bonl@N0LZ2u^F!t!4Qh^%9Zjq+pB%R^>|B|6Z#(DUD7lx#YVsGt5v&^G z%2!Eb$j4?wjmW1C{Lck1u1o&pzMSXgs5VIroM1T&{XtvDq@^&4l&i*;3?A~eK`p7^;G$|Dsr@q!({U3X|i18H9LdB=24r^|PvV0?s_O9MM*Ct-x zF_gg>WmN-ny4-1%oSlwY*im7hkMt=+OKNqqOP$O{(ry4rPw=dORlp3t7*ch1JFJp} zX&bZ^<(}RUFfa~<$N8?jp07*pCu^l`5x&T8#VLMzcyn72vOK zfpT&LQVGS2Zry$VC#b=cwKG}5eOYWgs@d2DLw<@!-F7zP1xeA5-$h1a{};4U$nH(` zbY;fM8U49Y$jO$}2Gj{2t8E)5VSrnx%VLsR8jhs5B^j1u)x*i$1cPER<8}Z|__LU< zO&U1kp(j#@zATeP(W_R*^}My_oZ%ZcLI~$^wWMeHNYum-B~zRO{B2%hUTs#qco7P1 z8+zPgwOED~asLrBlq;skXw_)iTh+HXY#j6lIqx5G3bPUuC5F@ZpS3_(=U$(nyw|Hw z^OVmIT1=RO*6-dA3k6cm}#j#3>XJd&ch+m z8<09`JRwl<3h729MZsQnqxo>SVoeT`he~SsMv-Lxe^VrW$3Cz(8pzf&3ty!$0}h2f zd%>X?vyA@AK5^KRMoC~)*?afHnJ=|@%rZcIJqyNf1ljT3Wc9>g6a-v4q}trAkHSPZ zmSX_-vA}$c616()z!umf>A=MLv4vaXVkDt;l7a+T5Kv1|Q9e1kZJ=c>{39HlX(Hzp z`nq<%Q(~|U4P8|LyjTJ4H&eN$4RNdNLccpw{jTY4We4-wGG@VM8W?ki0k0j=(9f~z zR3qQ=O?}7y{(T)R8@8u(a>s?OoSXouG$uX1RCXzN`M20kr|+z7oG01LX7qJH zl#6&zVNWqhT$XZJ&sDN!7AYqrIm2YJ-)V=1M&rh;$Ock@3PGIBNY3$Zv<{6;&n^h7-8~m^2(M9Wbtajt6~B>HSz3 z!={dhm@~|P*Kh}FN|*0e^PTzcZ>Vv9VFw+ZQ3i%eHJ+<1W{qKDz3psvd}rX{Zjf}b zrX~#mAL+C(ntnIY>X(`io{dt}mNr{&K)aqqv~KPdaPMY;^|a?{us}rIa2`!On;9yX zy|U7qn5;JO1xVaoA^R8OoIJn%9XTFbDx$M}Pv1I0dNBdQ<REOX@;R*HRyd1xL&53X>T%h^GfcV23*~QemDSUIYRAn z+T&|l^vQre4%#{TgDhZahlK_F^efZ~t%l0g@RA=xJPxdx^Jk+$ZMi9MS7M(wC8dClK56G!^n$N$j3l=Ck7Zwdx$^Q zPt;}}ADR>z3Yf>%C4)DLU9yNdXnP+{3hfaZcbm($eOxxI2M3=8&ybHlOU3y@khDT3 zp)6*`xR`*7yPHAeM2ucmGvm6?F^(wL#nC%xM-Z;s!@VHqtm5I|dP{?`t8(ZoeWz&w@3hs^(srH`JBbNmX zm?}0U>|P7`F@OMyaPg{qa{`!+LMK!4gE!DE`o~M9v&p#BR+L&7E}a`js9{t**U98&mGF=!Z%r4Kx^Cy0)v70M2tg)kQl&+vkW*67l$=}kY$ zSQ+`5P5EmZ)A`*}(L7{E{ZB4qIoRau{0H%+|AeTL{=CIDkt^&ht?;bHu&s&>YS}4z zu!jt<+I55_zU~eEO!X~B=@+@3Jxh-|=}ERSnJ3~+|1U1pX;M}o3cq3$H2c4m=>D;v zLofmZo~YtzWZgIXxetYmHbvWfid9m)irz#^J;N~)gqq{pB!Za$ZH~Amf~LYZY$_ekZ5YSyC(7ro zmF<1t;BQ64iZ2LBehHqzw;qpIVfa4k*GK!%+NuQk2D_txXo;|Y81vHW?np3dB*<|? z!%)nHX!XiOG()N`PXZewPw58&qWUCPa84R{1ESqiP=W=q56hk|SOj9otZ^|`565sa zQ`%9(6?lTS=x#FWIjg#7%)FUch{RwG3&HwtK!pU~Ul(cdy+oJDVi`#vBg;J(1oFLD z6{a^jKX;fiK#FqkK?|*jy3?-QJDN9%r3vM`^7vh)?dUms?JJPhY}5K_r^*R~6^+>A zfdfu0*p@p>7?G@BBIcb-39sxj1{wrunTlRDqlu% z91HFUt`{aA&%ZsOUOL-3Yf6Gs0`#I4T(;XFFrt0Sn)irlwaDhpo}{lQ4q-vfj&Xw# z&R%Ssj@-_v#Hcm<#37^Uv60iZlzkWY~V4wX~fmE3*e;%>F)VJY$arpppUl6Nc z1DzA`x=5289T5aT_TD@1Y)7*V&r`ice%FjN(94BO9?`}9TN)UOC*u}8B@*)Sp+Hk; zCoF*uAQI!=;-3h0z$JO`#HtXjK|c$}vfxnO>?8^6wbQ)Q-$ZT5@pE`&7z!lAKl?-dqXAh^>LK8g{o&Q*I3$Sku*rG-PSZZW z#<-q;t7UoFxq~?2_s};4vkXXrbm0tu6IsM^`7MYBMhJRqwESOVF)vU3OCOFQJZFR5 zsby%!(6}AVV8yvR>gmU&8kmZQw{s~vYC3hlqE45_;_2 z_Q0Vim$n}XJ^DT*J+@gKOUq8)*|8QKQpG<(jOJX;K#i#5P(i0|v4WaGoXH`n&x zttj-@8L;xF)N#DiqX}FZMKCQ>r5P`C8LfsLb1*5k}goXG{?LFK4XwvNLX)9nj(V0Z~VAEQj z`a9Z4-2Y-eFq=Su0ZTuV9o5Dg*%iqi3RkV-yCv(|;_&QuqDP-6=`trnU>s7-O zA{F1ok!{!W5i|(S<-HaZU=)h&O*ohpUG8xI1=4gnUw9gDVJbpO^A&HNGs?I|B4pMi z=nxu-t90L1H9=S5*-K|&iEqDitZVsrKfLoQwTvIy=i;njzd@F})is<}=lzw(O){Ye zG`yM0%tCSd>|7rCi{3+Jgcec?UXmc#CQFxb-qIf~(XzHFYHdLPAUy;4Lwi?;PVtU! z)AVd?DfXG;(;d?$Av*%1!3NJU?0?39ysL%*{}GBL{To3^)V>uog2e(+XIw#!zmyUc zWa#Z$IzVeGy@ zAEkeDN_f&(9zl+p2uaR4Qu)!%LAE)W`uiL>;pO4h77xf03y9nR)O#dp7AH5O)j20L z+9M=T6W9Vs6xYcp8@gtw$eMfYl3RF2d0Nr(b?}(epG}^_7VnE>uFmg?X_0 zL=7m!ATKV3bNlv04!o;RLR{M)5pS9!b#QnZ(zt_i_4YtWKgiYNEC^f-DzJ`e=HE+7 zm7Gjo2_(bNOdt%J&XrSYdsGU3bElQ(d}o~nye2xKLz#N+1kaQLHYT%ybRzB^p5lVk z;L7ss(w_J~pTt|}{JoQ^!!OSAGN~i;;RddKhw10w!F+U_--c~micv+KLrI54b^Ab7 ztC~{rGG5+`Qc$0`dgUBIPsgz-kj$8wpiUe^ZjoV}_ow$mi4}}iBAsTeaT(mX_|va0 z*L%a{B@HaE6^!aD+l+DlRVfiQ5$~{M=%5-xv*@4YKlS2C?Vms=*!)8|M|n-!RMv_A1Z93iln z;%V;KDG-y@$#IV;z2n(b^K!O@=_}lpQd3-ERF+EhKkie*W65U}-#Y$Ail*!a4C=Uo zNww{i@~n2%hj|rGp)`<=djj_Yum`1lYr-^y)T+NSf%oknVb^XzpxjKgw>CP534+yH z$RFl+rmD|8dm~0zm4Ae~N(Box+gSOeD6VT{XJwmzB)^d&wLPiB92-n_gSFY$S7@&beaI)*L~CxPR?4d5>Mw6 zHX0HU7PqZSD1>|1Fb##ccHX0SjJJHemorn9_!M9G4Z&-9qC!clu8w%~Q31>#Hh{e{ z3mekSCsJt}N;kSO-PB0(!-o+#G z*CO68K7a;+_9VBF309E+8tSU1!i&jx*WUJru>{P!!Ny2K$OE$7aKPjB!1WW=5kY?% z+(`A-8w!Ndgv}673fId)VI0g{sl9G$^MTl^I{!J4jx*+16JP9DbT!}xI1kXjjrS&* z>fQU_Tg>r2n}my7=)}f83RUcL_i(Yu`uNszENzX!qq3UkfNcq;b_Q|zm71w9OMI89)cTDH^ZcG6MCXf(;~b}4>iu?gQJM?o)eMoqgm z$b{)wAZrA&q#RA)rJ`BM?PDchKO`7gDdTy)HBjz>S^v}yV$)JEfuiP~!^wIOS2icN zJYhJAaG=HCcm<__;);{ne6PQ4LJ1o~o%tq*!-Q`}5m&cp4VJC5GWVIx4g;cjn`6%I`3(K~nu5tg)72yTtaZL&g&4MVa*Y?=-al=$ z=tl|Rr{GM^lY7IXKfr+@Z|KfwVcr^8NPo1h{d|C9Lt6a#`AxKpg(nhEeduY!eOF@* zU($t644MrbP2WG77B4hI!|?GI7Sf+Cc-TB+pnd|5Wzw)=upN4j_b^2T_Z7owB$&f= zAQlN%ITmOmGh$5j)->a-dK6@gD@d04g*h2>Cj_QdW)+O_N6k~OF*@1$`K-OTC*Z23 zVuhc(POqhMLYSt1p|-3S!YuRFz!XcfhKPxQgMFR%<)# zl`p2&s#=zDY0BVV(mZAxSS8l%z(zh+(BU>jR>1NVNS+7IUAfdw%rPda+iHiH4mbS8 zktiGZaKA8dzMz2~Ff%td$Oj0UkK`wxkY}`(2-h&4rc*i5o8AI7^RXFw(kNQPA88Iq zzoWEO(GWc_amIozxNqi}Yww?i?UNI>u!oU%N&w_vOnpH+$=aD~|LpGtJjM;|Xc9y* ztjP{Wu9;%MKJUvk~JzId}IsVA8ZT>c$o8BThLFxb6XJ^#wU_{lybj_fc1~hi~AqvXDA(^u>yIOfbtLgyw>5vUsy>5SW0Z?Z; zjwBsy$kvm}ah2?>cxD`lsDdfO&0OrC1OBSF?lW4JGVV+zM~Jef^Xc-C&<8OKgGzOGLYb z+{>4aSm(icsq<5KAMrljlq7Aj(wV%WzJ1;Qs9n;+x~*VqKwW#8(&|NKfNV$d>y)_Y z=%7Xg;ZHy#G~bb9uF2;zAexmP&01jLJ>c;cJ#LGZBjBnX8s6>3W3@($cyXE(hK$L@6(!(px9>Y!b!EBt@ zmymo1h`_XYEP9-iq7`h?sYRv17XEVd0W#!K-P=&(VNNL?ClKjgFe@-8ng5a_1dS+Y zDANz@yZQS>9IA^rm1iFHLdom}>y+gjiYo6rbVi9!)o-BXbgm?gfv%lAK0QHHkJ-YQ z^n~j$Y6fQ!EwEK^Cf^xff$2GEI@SrKKq4PpztyJdX_*b`aP9s&x+9CL2>$!&8i;@s zMV!hm+Dgb>6;g*bn}>>aT`?p|%k|UK!R+21NSW2kllRIkq-I{E&&CxX5V7KpxkRVK zR1}5?w~12Ka>Zgzf|euCZc;juQ%Itvoute%MOxqDzRoDfv9}LuI4BfmReGy6R?x@g zp^Aj}#i`pWMd>sx^6e|Bo=F=c5bF*BMsIph317pu9xoa`i888Ms_!F3+_ipRhj-pk ztG}LNsNnF(O7TvwnffQQ5wU zGTVBlIjO(xWoweejm={iWki+F7jlm$d4t;H=h@0v|DzSZw%Edq=-Z6kRBFgqZY0Az zA2Z!(y?Ud(sha5gm!-a0`*+PE#yyoG%lD1JcgElbvfJ!b8La{(;1AkNrSeBV$)J%T zIq7sNn!#6wJTfOt!Yxp}dIX$B4Soh4KEZDWf7Ef)TxN8qGj(LBeZV8yux%2)gP7-K zI88aj*E9QAWc=ROznPI$ZOgwDXsz$1?l^y?QY;c|IJv~e>*(na;Tr=$jovQMb_#1_DpM^v;8X5>#ELn^ z+Wawoq8kw%ijHRV02kAE8Ueqg>>}@mkqVFyaXYwxHlR+om!y+s}}1IwW)0D;tQUAzwgja<2a%>E6d z?~a98H}_O`}k(P(oA2;5sJUcQ7$oq5Mrq z01e<~vzya6MY{}F#dz+Fmg=GwqY|+O&?<2E&O)viWWN)j>0(zMRe1Vx8CVtS<==7+ z#?!PtVD2(1&fKlgH0HF=&RR;JuK}|v?M9%js$z?z_e;()H7Oo?+I0Bk+EQk(JsST) zz|65SHV{NKY8Jv6llU(s?>^Y_z_Yb+ z0pJG_)$!9*S(A4zcidOkn+oFIDFlI`fp3(CIoBy^KlG~eR_0z3 z91Smejp4{gd)zf-@c_Vk*er}-5K|E>T%xuGqs)4BSM0G~ z)pca!u=$UOVBd~)`7-=iTT2()K?H9Xdic;sj_c9+rl?YW2WwkRx!RFHQ6* zsiiZPl3uh9@P#gL*srddJq)n!;ecAX7v=z{g3tg)K)Ju0_2Zxt#1+-r?d!xb2kH@F*$o4Uq?%{%Lq7*ZEQLobtPaEqNaQ zmlND5lO}vrQoxeyN}}Td{0F%v5d+{EsGR>gl_okD@qKD)vb9Zw9c%Wql=9JB zC|2oDA%T`Rd?j=b`Nj3d=#RVm=rPU8+rD3{(um=(n;FNo@-+- zBslr*AUIs>^}Gjq>)ynd&q$kqK>C68B&YND7U{aKpWdMWG;}tfN6ybR+c17|fyLoj z2R_GJd(+12PH~*;K{wf+Gz-C;_x)C|)~4hg-$TapCJzAzDOa42;W5dkm=6vo{h(Rj zl6wkFLQ4afD(cJF4{aF>B58}NJIFz1fy1g~ZA9I<;>1U7-(leMCO{)E`6{#e;^;QO z*@>_PM>Zfk0}Rndo5^MR6uM|h{3^KwN4sRtKOvkF0>dq{O#hJ1_X;1<${u6mJ&1Y)&!Pc?r*) zSfdLXF-zLZ5jC;(yZZn}ZE#*ng&E(q&;u@A0hLZ#S(zlPKP_ah??4tR%xY{8<3$y8 zJ?h)1KhjW5$Ho~pg!H`$|L60-r8G&3{)5frfPLft$%?twGy%~^7G8W7^?dlXQznFo zbMt?kurCLm@)F;=z!lIsS)JZzUK}e+gt&?OVvy;H+1s}vN}s*J0s-2yOr85iq0l__ zCvR}IsdU_+cDFiH7~OzgL$x*J4kjlGtLRNGi6F!Otegf%L{6%jI*XbOs>v zsmp)?Rer!~A6i?nR$bUC)%92CNNoF_lcx?7D`>@Q7elaE1Z6!&SEoIhxS>cFL}w}u zM2DYa*OFFytJ7+|Pr$>{?$JHb7%pn{J7=H@^ASnKOYhGB{UVQ`oS8B&SoxQj6H16s z%vc^L0yKT>_J}%kwKQ#SQY|0?a3Uw)djBvsW*VST!*!YlSd3+ zvecDxq|Ld=f?!GMHp#K+%TlhVdSt70gab=A_Xl2g%a|<)Vb2>SKl>e-v06M+mQD!~_FD-t;jOT* zd+hnBXt$GB_ZN4EE874l#z?IH%_d5UcA6?3H%xF(_EO_|c$8ZUP_#$`&3MpViEVbT zooB;!Z)z>#w^&gS4ey{DbSOHP8BaWlhCSqFJy*15vkOmGS2Qli3=!Wvw4dSCCqW48 z${2`9UWiqRapt9vd^_dyD%bT3J-bJ(*LXpw@6Y*4 z;-h7lvdL`wPE=Z-S1d|)Q$^N_qkjntV7zJt#;yH;3uyNUOiNV{26tOVof&}8jw}Eexa=~8o-g3QK?_Mxs|`- z)qXL$#2#aq)8c)HrAFhf;pk3uDGo~zsDC=;U=K-Z%{^L<@kr2sd!v5_M=N0R7sKHu z9=8uGe8;#tPpt))h?9bj26sf!W&IdP)`-nqz2vIu@$D90vsmJ3g1(;o%k~$kaO()y z28Q-pLuh-?qxvRZgU@)^L78MA zrfJ>dQef~O6Tu`#-#ibM8$mm(D zu-(9crwe#8BX)%m@8gJXf2j$33~w~DXI|D3t=Bv9yJlP7BK%b*p^1Plxbr;t9=e$v zBr~+;7b~2A<(pVkaLpBg%~42oBq#MSdBGO{iEt8h2c0?coW_ZbltBRm^%j})@X_^c z(-9ddHv2*OGPw^EudMqpbz+PJTk+0Po4$u0N+x^ia%*z2Kz+#Q%oVOE~^+^F4MMZ-b|BjT5u)wcIVh&=rjMdM%f^LerBD^s9 zWx{{XYfY_(%Ok5-HfpzwV;5i(p&vb@)T>>W#~82pt`lS`88qT3C{Hpf*h6`*9#;I9 zQD=-}fHGroTzCNM{i2pwAvO~N<)pXGS}>qndn2UGRAg^$o3H9gX`U}pT<4>sxUB6* zBYHPD;}w{1P;8B-=BPQ$V+iYyjQxYEG<6xk^wuR9l%1h|$ZHvPz>Tj_<$Q{m7l4q! zw(VSxGgi9JzJrHdQ7&YJrkzPATaw`CtT#O(UM1(sFI_L7)ywIugj*SM94rdaw{s+l z58wybNlhagthmua)Zh3`g`zhwMmUI79qKn!j6<;P0aJD6_nYPrk#2wy`Iae92zM)f z+glX9cQ@!Z2TJ7FqE0yK>%!JUSs)A&F>EKrd;I)VlpSA!bJrh3I&;MHv%6FNBEY16 zD})>GZG)Y&iz;mD9{P6yHPTze)8`(_bBnnj`)Bgq1Ln&9J7L$gmf(fLBd6*(ziug> zju_Ox7IXO+@5!%h;@qTIob_!=$h40Z0=H$;GCPC*^T)bq^p&LcGgm{tu7j!M4GSZx zycJUzO|&)Rj)wl^m|bHd&P3`>WQO<#kHB-LZ3I(Cl@D!f0USSjgXF?MxR)lLHL!N> zIUG<$e4?$er3)CK+470QDzN&NsLf;p^4dgQgt?z^g(g0&|_)s}9F0Uj{q z96DvppV~O^OlbP$^5V`k!WI1?_Tn?W@BK*?+&DWVx;lV0V7^cnI6mT*gaJWpvJ1xl z&a*e7Mkh0l1VoB_WDdOTbWcE7^o;n~lBo+Ae3O;Rr#>C6Xn@(BA)8ZR8}L@H zx@%G=D%I@~lA_|P-32%}uIqBkY^5r5#r&`~gVyHSYdCUVjjs`3TZvd9Huil&NZih< zl<>pFEC?z#H6@kA5ee#gye`HHTTh1T!Z>kAjAMB_OadcYyuP8 zOq_Pe*a1>KFHvw6k?fCv?TEMfkt`6+JCcRx=n?u*72@CbzN9S^b*2C%jp4SNyJY)Z z-j~b(QP!+y!;v0VHY-EzjAwiHRBw?)D3f5U%DIt#>q*%B5^O-73Qe@D=B-v{t@6La@#( zl(*)1$OHyh6+Ybdnpnf*g%-$!x{th+r$huP#Mta(#79^n0tg^PIZ~xF{v0qTlD|Sk zOg}vUdm-<;C3Q@)=Vr;l`yLYn(93C2otm()?649fgjb*Mv>8yQ^#h}m4|lKNOr_JX z*j~eUl+|uXSbCGOVqof_x_X9ghv}E#d>*!Aly+a7m1O|b6b?*>=gpq6;u9OOii4`E zG|jU1e-f~H{~iR$n*2eCyC_2IMMsOvR|C!EnuO{KwG6m0GuGZ_s8{)RPY;h%R#%bK zRrPq@rlMKMu=2V3ZAx&4JtP~(xCZs=31gccVHkzF2q3C6X3wYp^)UYUIn#)mTR&B% z08Cd6(WDILij~-8$CFWnra>(Hu=|;s%`9R%%0m_MS|TN+k)wPebC>>ra47k< zu9GKvW&b0=co>q&3k8CcymLR8>7Z>OjT5o(e&h!seQoLkS@-|HOsAGRrGmPSi5?q{^sAADdNN8!pU%=zcg@KHRPuYvxP#!}8%m?jlZO;ykYgmhYP76I}#Ey7bK!}1fCoKLdY~+CM zTGU_2_ksdv{mWH8*g><-lm6#c^<%pFE_wVBU9iS7RPAw_70zM_)F^*@p-@{!Bo08L z;(e2*D+`-ICCSQq0gHWT>(_+Ao%#FF8tm_DOn5P3j-A|ikIVS^LEN8h3MXgIz3Ydw zCi79@*3nl+{vo-DeBGi+aU}c1z-ns+e}J$FJDzM=F+Qw%E?fiyqi*$P?!ud8hz7s) z<0Er8h?((ZXy1JV26B=MVqFp*PXAyv;}6-4tT)nHHZz%=WK7Xry#_|TN$`fi%NxDym|L-cx)MSn37TR&s58IL zlGF$9G&7H99VKAv)8sK@sH@|va8TGppE*&|xl0!0`o%}{uC@MsT|+3QJ@v|ZoBBv7fmJzVoHwz_ff1Ve;P zfa#^(vmRbnG8)w55LY#*@#U7mC-2N5aS+i5ezU8UWQMQF73P>;vAy1zIQ)&WTBJl< zbTKgpll6vp#eydMl^-+M{%}Gnr#i8+W7b<#oK!_m8%n~o4w*>ajiz1G+%cpp4Mc7l z5I=07tIM?Z7`hSE)NsVB1Wf1YQ{~y`>mi~n#KyztbJ^2`uo9Fz{n;|Q<2S*%P3k^9 zF;1Z8bDd5m(ck7K&DR&#C@ci&Rn>5>tHB4n#L|h}B3T&@*o)mpf8?#DaMu`7FxR{$ zMd#|y$MVXtoL3$YUqp>P=vAR2XqV^%oQq?D+09IB<7mk>?vxWH3ld?y?r+EFwE=pb z&{{^u85_d!Evi!~&m$U5lnPK}^*d5ktfe6pN7)pNe@%I7!9xo2Lej968JXQ3j)aVU zS!t7ouJLCzReW1G5mxMMyXe4F>|bRQ?=e z{JU+Al9K?!rM})(37vzbYzno+Q{KD>$`3>8P$lkBJNtUiF^U-+qAhZHfyTJz;n+S8 zz^-#ZFcqrfa>F*kLJ`G3^=WwOl~gw9ew?kn%^Chm1hiBXm{@NHkBpV5$>_u@1FAxG zbfRP1%F*y(!()W|*IIkZMU52P_;EmSyP+D>jQjTY{DN{&$>YW1u~)GqJ`qip96I5) zw+>Y`Y}hN~c+ISjByh$xTW)oF@qLF=&k7{AYW?q!2hZLxyo~JHZ$+(=wvB7Jj@;$H zS7%-?O?UwjitTTu>2>_Yu(|LydlQPRV37*Zyut7 zF(S8ho~HpO0c;YH0*63cksl0I2NI`9-R-viI0d}nE<1@&m}Mf9+6kWokY<6=Rws)l znZA<<@%w;Vs>GIvlePh__GzkbP2MlZB){pn>&>zXP+Zar{8u}c_}RYFwHB;=r-W;F%JG&o$(7eNKyJR{G)$Z1|-4>xIC+Smt1XOvbywzhgO_tuCl4gFX7&3z!yo z7(>Swg1GE5MRg3pOoYGAgFCd5^bK8u_SO)q#wMF+S?owl9W^RjBZDH2efrMcvDtX` zo(Q`8+VTX&Dy+Y>1O*=p>*y*xKTo#EYnNJ{+ecSxVU z;CLYCq&+^NOvmffFw^j5&lo)TCBm8X?C;(0^J^#os{MBC8E4jcrU7msI)BvA1+?na z-Vp{wN^cb}Vw$S!ueG&CvM4TeCI*q~74Ovj#~WoO0VL8y1sEK0Hdw?r{vs*BFVary zL%I1*hu4yKs86MCTunOZ7Gf|_yE51fh9JLa4?gdU4aKIEf$49B^&)Pb3Ra^-c~IF! zUs^v?Q@8%M9Am3|?JvYDs8jo`M(|_GdT!42xirw4$PLmm&L%(2*}SPnWkvo)>kX^s zF}AruQ+-v#`w&JqcOMn-U(1i`#lX16u{s7q>^STO(KkEcjjh7YmJ9H!-kdxM?^(@f zr*00%?on-!Kn~xr6XOiF=*#t2Q0w0bMRGv@++0yYN3x#E^BV@SJ_J>kV=zp7p1?VRfXjC1B;8ezd9tp)*>Ih#kZ@SSTaMtRVQR82HC01qb&M z{^6yWs#SS%#1se=O8fU_fo|=A5?{6m05|#E-%ZQ<#`D4#7g9NUpgtwZNZ6(ui`)2g ztZNqRrb-@uTu{G(?>v2-AvmcfJTQ9utJrD^s=IEHl6(XL4x(|#-hD!^<&wd<*HWr7 z>N$iLK(K=t|3b_A-vq&~i zbM!w4k^$l#ct4IGH5&2Z6w&9|{n+;)!t;7r$sH3x0rq!k`wz$DSOm`KbB8bQ<~BIT zku4XsR%o%Gzb;GX341j&T5Q2@v#e|${=muDclFC&%+W91Ba1t=LzW+@1an# z_tb?Vp+l#^v~sWQ$)sXs44FN2fB#vj zjyJgwFeX1Q{2t=Qxc@=3H9tZ0N4$2%cMtggxY9I0tV7GsA6Kdxr{PLz*9E7Y{}V%z z;|UzHvVsPqJT--$(9ayX6A67i7Z3O^VV8aa;CKgVjFG;Ul1c-oF<)%{Rk9c8Ok_wH z-cMT2(#wNQ8!8{ph4BRDs$vhv`1f5sAc4dc=@?sU!AD;f=)DG z{NspabD1Ag?db6IS_(-*ZUR53V<7@Ak2AUs5YtQ=i}i$#D>o7&cLGJn!+8e6jH)tI zd>NvWen&u$u8L$)XW_xa(i9zI41feMJ?>aU

B4l?6V*jnm6r!H)UY<(-%BimFgC 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

y>ATVR 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≧x;Njir{}5 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